Compare commits

...

21 Commits

Author SHA1 Message Date
Haroon Amjad 71861f9ba4 updates 1 year ago
Haroon Amjad 2c721830e9 updates 1 year ago
taha.alam 7b9bf68092 WD: At risk added in the progress bar of vital signs 1 year ago
Haroon Amjad 48a0e0d949 updates 1 year ago
Haroon Amjad 84c718656b updates 1 year ago
taha.alam 5a45247df2 WD: scanning screen along with the circular animation 1 year ago
taha.alam a6c58372c2 Merge branch 'dev_v3.13.6_CS_V2' of http://34.17.52.180/Haroon6138/diplomatic-quarter into dev_v3.13.6_CS_V2
# Conflicts:
#	lib/vital_signs/components/vital_sign_widget.dart
#	lib/vital_signs/vital_sign.dart
1 year ago
taha.alam 67c472bbe2 WIP: changes on vital sign screen 1 year ago
Haroon Amjad 1a99cabf04 Vital Signs update 1 year ago
taha.alam df65ae339c WD: display values are changed. 1 year ago
taha.alam 840d7801f1 WD: Styling and desgin changes of vital signs values 1 year ago
taha.alam a1595eaec0 WD: CS changes added and icon of navigation added. 1 year ago
taha.alam 0449c65723 Merge remote-tracking branch 'origin/dev_v3.13.6_CS' into dev_v3.13.6_vital_sign
# Conflicts:
#	android/settings.gradle
#	ios/Podfile
#	lib/config/localized_values.dart
#	lib/pages/landing/widgets/services_view.dart
#	lib/uitl/translations_delegate_base.dart
#	lib/vital_signs/vital_sign.dart
1 year ago
taha.alam 77dcc95bac WD: vital sign result screen modified. 1 year ago
sultan khan b287b557dc app icon change 1 year ago
sultan khan 884f7d7544 HMG identity changed. 1 year ago
taha.alam 9090adc0d4 WD: vital signs sdk changed. 1 year ago
taha.alam b1bf7032e5 Merge branch 'dev_v3.13.6_vital_sign' of http://34.17.52.180/Haroon6138/diplomatic-quarter into dev_v3.13.6_vital_sign 1 year ago
taha.alam 622726608e WD: new package of vital signs added 1 year ago
taha.alam fd5adff527 WD: new package of vital signs added 1 year ago
haroon amjad a144d5fafe updates 1 year ago

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

After

Width:  |  Height:  |  Size: 36 KiB

@ -1,6 +1,6 @@
include ':app'
include ':vital-sign-engine'
project(':vital-sign-engine').projectDir = new File('/Users/mohamedmekawy/Documents/Work/DiplomaticQuarter_3.16/packages/vital_sign_camera/android/libs')
project(':vital-sign-engine').projectDir = new File('../packages/vital_sign_camera/android/libs')
def flutterProjectRoot = rootProject.projectDir.parentFile.toPath()

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -0,0 +1,48 @@
<svg width="84" height="84" viewBox="0 0 84 84" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_6_827)">
<path d="M38.3601 79.2004L37.6971 79.5825C37.6137 79.4207 37.4917 79.2806 37.3413 79.1738C37.2043 79.0961 37.0471 79.0585 36.8887 79.0657C36.6829 79.0585 36.4814 79.1246 36.3224 79.2517C36.2512 79.3074 36.194 79.3782 36.1553 79.4586C36.1167 79.5391 36.0974 79.627 36.0992 79.7158C36.0992 79.9732 36.295 80.1798 36.6886 80.337L37.2299 80.5514C37.6023 80.678 37.9345 80.8963 38.194 81.1849C38.4024 81.4457 38.5103 81.769 38.4989 82.0989C38.5065 82.3215 38.4663 82.5433 38.3807 82.75C38.2952 82.9568 38.1662 83.1439 38.0019 83.2996C37.8381 83.4567 37.6433 83.5801 37.4291 83.6623C37.2149 83.7445 36.9858 83.7838 36.7556 83.7778C36.3273 83.7933 35.9093 83.6475 35.589 83.371C35.2692 83.0657 35.069 82.6617 35.0227 82.2285L35.8524 82.0526C35.8626 82.2787 35.9299 82.4989 36.0482 82.6939C36.1291 82.7922 36.2301 82.873 36.3448 82.9314C36.4596 82.9897 36.5856 83.0243 36.7148 83.0329C36.8441 83.0416 36.9737 83.024 37.0956 82.9814C37.2175 82.9388 37.329 82.8721 37.4229 82.7856C37.5068 82.7023 37.5724 82.6034 37.6158 82.4948C37.6592 82.3862 37.6795 82.2702 37.6754 82.1538C37.6753 82.0595 37.6604 81.9657 37.631 81.8758C37.6005 81.7893 37.5541 81.7089 37.4942 81.6385C37.4243 81.561 37.3434 81.4936 37.254 81.4383C37.1422 81.3688 37.0246 81.3085 36.9024 81.2582L36.3781 81.0457C35.6367 80.7433 35.2644 80.2976 35.2644 79.7107C35.2613 79.5222 35.3017 79.3353 35.3825 79.1638C35.4633 78.9923 35.5826 78.8405 35.7316 78.7194C36.0522 78.4464 36.4676 78.3018 36.8939 78.3149C37.1993 78.3142 37.4987 78.397 37.7579 78.5539C38.017 78.7107 38.2254 78.9353 38.3592 79.2018" fill="#EC1C2B"/>
<path d="M39.4252 81.0237C39.4211 80.6666 39.4936 80.3126 39.6382 79.9842C39.7829 79.6558 39.9964 79.3603 40.2652 79.1166C40.5267 78.8581 40.8396 78.654 41.1849 78.5166C41.5302 78.3791 41.9006 78.3113 42.2737 78.3172C43.0212 78.3202 43.7372 78.61 44.2654 79.1235C44.7937 79.637 45.0913 80.3324 45.0934 81.058C45.0994 81.4175 45.0282 81.7742 44.8843 82.1055C44.7404 82.4368 44.527 82.7353 44.2576 82.9821C43.739 83.4762 43.046 83.7603 42.3195 83.7766C41.5929 83.793 40.8872 83.5403 40.3455 83.07C40.0446 82.8172 39.8058 82.5023 39.6465 82.1483C39.4873 81.7943 39.4117 81.4102 39.4252 81.0241M40.2506 81.0342C40.2405 81.4244 40.3512 81.8085 40.5684 82.1369C40.7857 82.4653 41.0994 82.7229 41.4691 82.8764C41.8387 83.0298 42.2473 83.0721 42.642 82.9976C43.0367 82.9232 43.3992 82.7356 43.6829 82.4589C44.0568 82.0794 44.2661 81.5748 44.2672 81.0496C44.2684 80.5244 44.0613 80.0189 43.689 79.6379C43.5051 79.4519 43.2835 79.305 43.0381 79.2065C42.7926 79.108 42.5288 79.0601 42.2633 79.0657C41.9974 79.0606 41.7331 79.1087 41.4872 79.2072C41.2412 79.3056 41.0188 79.4522 40.8339 79.6379C40.6434 79.8199 40.4934 80.0379 40.3931 80.2783C40.2928 80.5188 40.2443 80.7767 40.2506 81.036" fill="#EC1C2B"/>
<path d="M47.151 78.4152V82.9344H48.7451V83.6807H46.3294V78.4152H47.151Z" fill="#EC1C2B"/>
<path d="M50.3831 78.4157V81.5881C50.3562 81.9331 50.4353 82.2781 50.6106 82.5794C50.7249 82.7209 50.8708 82.8352 51.0374 82.9139C51.2039 82.9925 51.3867 83.0334 51.5719 83.0334C51.7571 83.0334 51.9398 82.9925 52.1064 82.9139C52.2729 82.8352 52.4188 82.7209 52.5332 82.5794C52.71 82.2787 52.7892 81.9332 52.7606 81.5881V78.4157H53.5799V81.8057C53.5889 82.0573 53.5463 82.3081 53.4545 82.5436C53.3627 82.7791 53.2235 82.9945 53.0452 83.1772C52.8532 83.3675 52.6241 83.5186 52.3711 83.6218C52.1182 83.725 51.8467 83.7781 51.5723 83.7781C51.298 83.7781 51.0264 83.725 50.7735 83.6218C50.5206 83.5186 50.2915 83.3675 50.0995 83.1772C49.9211 82.9945 49.782 82.7791 49.6902 82.5436C49.5984 82.3081 49.5558 82.0573 49.5648 81.8057V78.4157H50.3831Z" fill="#EC1C2B"/>
<path d="M56.5827 79.1642V83.6812H55.7658V79.1642H54.519V78.4157H57.8257V79.1642H56.5827Z" fill="#EC1C2B"/>
<path d="M59.584 78.4147H58.7648V83.6798H59.584V78.4147Z" fill="#EC1C2B"/>
<path d="M60.8242 81.0237C60.8201 80.6666 60.8926 80.3126 61.0372 79.9842C61.1819 79.6558 61.3954 79.3603 61.6642 79.1166C61.9257 78.8581 62.2386 78.654 62.5839 78.5166C62.9291 78.3791 63.2996 78.3113 63.6727 78.3172C64.4203 78.3201 65.1364 78.6099 65.6647 79.1233C66.1931 79.6368 66.4908 80.3323 66.4929 81.058C66.4989 81.4175 66.4276 81.7742 66.2837 82.1055C66.1398 82.4368 65.9264 82.7353 65.6571 82.9821C65.1384 83.4762 64.4455 83.7603 63.7189 83.7766C62.9924 83.793 62.2866 83.5403 61.7449 83.07C61.4441 82.8172 61.2052 82.5023 61.046 82.1483C60.8868 81.7943 60.8112 81.4102 60.8247 81.0241M61.6501 81.0342C61.64 81.4244 61.7507 81.8085 61.9679 82.1369C62.1851 82.4653 62.4989 82.7229 62.8685 82.8764C63.2382 83.0298 63.6468 83.0721 64.0415 82.9976C64.4361 82.9232 64.7987 82.7356 65.0823 82.4589C65.4569 82.0793 65.6665 81.5743 65.6676 81.0487C65.6687 80.5231 65.4613 80.0172 65.0885 79.6361C64.9044 79.4499 64.6825 79.3029 64.4369 79.2044C64.1912 79.1059 63.9271 79.058 63.6614 79.0639C63.3953 79.0587 63.131 79.1068 62.885 79.2052C62.6389 79.3037 62.4165 79.4504 62.2315 79.6361C62.041 79.8181 61.891 80.036 61.7907 80.2765C61.6904 80.517 61.6419 80.7748 61.6482 81.0342" fill="#EC1C2B"/>
<path d="M67.7312 83.6807V78.0579L71.6854 82.0741V78.4157H72.5046V83.9995L68.5485 79.9934V83.6807H67.7312Z" fill="#EC1C2B"/>
<path d="M77.0789 79.2004L76.4158 79.5825C76.3318 79.4211 76.2099 79.2812 76.06 79.1738C75.9231 79.0961 75.7659 79.0585 75.6075 79.0657C75.4016 79.0585 75.2002 79.1246 75.0412 79.2517C74.9699 79.3074 74.9128 79.3782 74.8741 79.4586C74.8354 79.539 74.8162 79.627 74.8179 79.7158C74.8179 79.9732 75.0138 80.1798 75.4074 80.337L75.9487 80.5509C76.3211 80.6776 76.6533 80.8959 76.9128 81.1845C77.1212 81.445 77.2292 81.7682 77.2181 82.0979C77.2258 82.3208 77.1856 82.5427 77.0999 82.7497C77.0143 82.9566 76.8851 83.1438 76.7207 83.2995C76.5563 83.4566 76.361 83.5799 76.1465 83.6621C75.932 83.7442 75.7026 83.7836 75.472 83.7778C75.0445 83.7928 74.6274 83.6471 74.3078 83.371C73.9872 83.0662 73.7868 82.6619 73.7415 82.2285L74.5711 82.0526C74.5814 82.2787 74.6487 82.4989 74.767 82.6939C74.8506 82.8061 74.962 82.8961 75.0907 82.9557C75.2195 83.0154 75.3616 83.0427 75.5041 83.0352C75.6221 83.0391 75.7397 83.019 75.8492 82.9761C75.9587 82.9331 76.0577 82.8684 76.1398 82.786C76.2241 82.703 76.2899 82.6042 76.3334 82.4955C76.3768 82.3869 76.3968 82.2707 76.3922 82.1543C76.393 82.06 76.3788 81.9663 76.3502 81.8762C76.3197 81.7897 76.2734 81.7093 76.2134 81.6389C76.1435 81.5615 76.0626 81.4941 75.9732 81.4387C75.8614 81.3692 75.7438 81.309 75.6216 81.2587L75.0992 81.0443C74.3578 80.7419 73.9855 80.2962 73.9855 79.7094C73.9824 79.5208 74.0228 79.3339 74.1036 79.1624C74.1845 78.9909 74.3037 78.8391 74.4527 78.718C74.7733 78.445 75.1887 78.3004 75.615 78.3135C75.9204 78.3128 76.2198 78.3956 76.479 78.5525C76.7381 78.7093 76.9465 78.9339 77.0803 79.2004" fill="#EC1C2B"/>
<path d="M12.0154 64.8745C11.7299 64.2712 11.279 63.7558 10.712 63.3847C10.0891 62.9919 9.35724 62.7936 8.61482 62.8166C7.9627 62.8156 7.3172 62.9436 6.71772 63.1927C6.11855 63.44 5.57168 63.7927 5.10471 64.2331C4.62112 64.6919 4.22208 65.2277 3.92492 65.8172C3.60173 66.4491 3.39642 67.1315 3.31851 67.8329C3.22495 68.5123 3.26207 69.2026 3.428 69.8688C3.56987 70.4424 3.83702 70.9799 4.21138 71.4446C4.57309 71.8808 5.03435 72.2293 5.55869 72.4626C6.13076 72.7124 6.7526 72.8366 7.37982 72.8263C8.1561 72.8315 8.91912 72.6308 9.58649 72.2459C10.2668 71.856 10.8545 71.3308 11.3109 70.7048L13.7615 72.2459C13.025 73.1731 12.0997 73.9433 11.0433 74.5085C9.86394 75.1224 8.54068 75.4288 7.20285 75.3977C6.14516 75.4095 5.09605 75.2123 4.11935 74.8181C3.2253 74.4589 2.42076 73.9182 1.75977 73.2322C1.10791 72.5446 0.621595 71.725 0.336005 70.8326C0.0228457 69.8634 -0.0757369 68.8408 0.0467209 67.832C0.167975 66.7695 0.490861 65.738 0.999046 64.7897C1.4819 63.882 2.13209 63.0679 2.91738 62.3879C4.54633 60.9988 6.64249 60.2362 8.81066 60.2439C10.089 60.2028 11.3531 60.5154 12.4553 61.1455C13.3921 61.6957 14.1672 62.4706 14.7063 63.3957L12.0154 64.8745Z" fill="#2E303A"/>
<path d="M24.8416 74.9684H15.4364L18.7247 60.6727H21.9714L19.2768 72.4397H25.4377L24.8416 74.9684Z" fill="#2E303A"/>
<path d="M43.3671 70.8633C42.8972 71.7648 42.2605 72.5747 41.4889 73.2528C40.7221 73.9265 39.8362 74.4604 38.874 74.8287C37.8718 75.2114 36.8033 75.4042 35.7264 75.3967C34.687 75.4094 33.6567 75.2088 32.7028 74.8081C31.8217 74.4373 31.0343 73.8849 30.3951 73.1891C29.7644 72.493 29.2943 71.6741 29.0162 70.7873C28.718 69.8303 28.6355 68.8222 28.7741 67.8315C28.8948 66.779 29.2085 65.756 29.7005 64.8108C30.6388 62.9857 32.2391 61.5618 34.1936 60.8129C35.1948 60.4286 36.2628 60.235 37.3394 60.2425C38.3805 60.2311 39.412 60.4361 40.3648 60.8436C41.2449 61.2166 42.0307 61.7713 42.6674 62.4692C43.3041 63.1671 43.7764 63.9914 44.0514 64.8845C44.3487 65.8388 44.4312 66.844 44.2935 67.832C44.1739 68.8881 43.8601 69.9147 43.3671 70.8633ZM40.9816 65.88C40.8685 65.308 40.6356 64.7646 40.2973 64.2835C39.968 63.8295 39.5282 63.4616 39.017 63.2124C38.4405 62.9373 37.8042 62.8012 37.1619 62.8157C36.4995 62.8088 35.8438 62.9443 35.2417 63.2124C34.6583 63.472 34.1301 63.8353 33.6844 64.2835C33.2232 64.7493 32.8492 65.2895 32.5792 65.88C32.2915 66.4994 32.102 67.1576 32.0171 67.832C31.9268 68.4769 31.9488 69.132 32.0822 69.7698C32.1973 70.3391 32.431 70.8795 32.7689 71.3581C33.0984 71.8119 33.5381 72.1798 34.0492 72.4291C34.6253 72.7027 35.2607 72.838 35.9019 72.8235C36.564 72.8302 37.2196 72.6956 37.8221 72.4291C38.4043 72.1674 38.9321 71.8044 39.3795 71.3581C39.8379 70.8936 40.211 70.3564 40.4828 69.7698C40.7726 69.1558 40.9636 68.5023 41.0491 67.832C41.1385 67.1822 41.1157 66.5225 40.9816 65.88Z" fill="#2E303A"/>
<path d="M60.2763 70.1235C60.1022 70.8492 59.8116 71.5437 59.4151 72.1817C58.604 73.504 57.3315 74.5003 55.8285 74.9899C54.9644 75.2712 54.0575 75.4087 53.1462 75.3967C52.2136 75.4126 51.2882 75.2367 50.4308 74.8805C49.6748 74.5666 49.0024 74.0899 48.4643 73.4864C47.9476 72.8968 47.5813 72.1973 47.3949 71.4446C47.1957 70.6376 47.1913 69.7968 47.3822 68.9878C47.7506 67.3466 48.0495 65.9968 48.2788 64.9386C48.5082 63.8799 48.6833 63.0604 48.8093 62.4859C48.9353 61.9114 49.0221 61.4781 49.0745 61.2105C49.1269 60.943 49.1585 60.7588 49.1736 60.6732H52.4855L50.5629 69.3314C50.4745 69.7334 50.4638 70.1478 50.5313 70.5536C50.5915 70.956 50.7425 71.3405 50.9735 71.6797C51.2109 72.0253 51.5327 72.3086 51.9102 72.5042C52.3594 72.7314 52.8614 72.8419 53.3675 72.8249C53.8323 72.8289 54.2934 72.7457 54.7257 72.5798C55.1325 72.4233 55.5097 72.2023 55.8418 71.9257C56.1647 71.6535 56.4432 71.3353 56.6676 70.982C56.8911 70.6323 57.0508 70.2478 57.1395 69.8454L59.2811 60.6722H62.5949L60.2763 70.1235Z" fill="#2E303A"/>
<path d="M77.5107 70.7795C77.0496 71.6361 76.4241 72.3992 75.6679 73.0279C74.9019 73.6593 74.0218 74.1473 73.0723 74.4668C72.0604 74.8079 70.9958 74.9784 69.9246 74.9707H63.0394L66.3074 60.6755H71.3838C72.4287 60.6617 73.4665 60.8431 74.4409 61.2096C75.3158 61.5362 76.1063 62.0449 76.757 62.6998C77.3892 63.3434 77.8654 64.1157 78.1511 64.9606C78.4584 65.8868 78.5518 66.8673 78.4248 67.8325C78.3129 68.8618 78.003 69.8616 77.5112 70.7799M75.0496 65.9987C74.9304 65.4665 74.6925 64.9661 74.3526 64.5327C74.0139 64.111 73.5745 63.7758 73.0723 63.556C72.4994 63.3096 71.8776 63.1889 71.2512 63.2024H68.977L66.8567 72.4392H69.9685C70.6126 72.443 71.2508 72.3199 71.8444 72.0773C72.4253 71.8387 72.9594 71.5048 73.4234 71.0901C73.8926 70.6701 74.2812 70.1725 74.5711 69.6205C74.8733 69.0645 75.0654 68.4585 75.1374 67.8338C75.2134 67.2225 75.1836 66.6032 75.0492 66.0014" fill="#2E303A"/>
<path d="M61.4094 31.3149C61.4094 31.3149 60.5991 27.0013 53.9329 27.0013C53.9329 27.0013 53.7328 20.7252 47.2708 19.1585C47.2708 19.1585 46.1382 11.4142 41.051 9.6482L58.4788 13.9631C58.4788 13.9631 61.711 13.9631 61.4099 19.4513L61.4094 31.3149Z" fill="#EC1C2B"/>
<path d="M36.6674 8.27755L5.05421 0.0453522C5.05421 0.0453522 0.510613 -0.641809 0.409623 3.37809C0.308633 7.39798 0.409623 26.217 0.409623 26.217C0.409623 26.217 4.85459 19.1594 16.5675 20.4843C16.5675 20.4843 18.6878 8.27801 30.6051 13.866C30.6051 13.866 31.4135 8.96425 36.665 8.27709" fill="#EC1C2B"/>
<path d="M36.6103 33.1771C36.6103 33.1771 37.3158 29.1585 40.5498 30.2378C43.7838 31.3171 49.435 33.8638 49.435 33.8638C49.435 33.8638 51.9617 34.8427 51.7573 38.6689L51.183 43.3723C51.183 43.3723 50.6474 46.3142 47.7215 45.1401L37.4186 40.9214C36.883 40.5716 36.4765 40.0649 36.2584 39.4751C36.0402 38.8853 36.0218 38.2433 36.2058 37.6427L36.6103 33.1771Z" fill="#EC1C2B"/>
<path d="M23.6864 36.4965C23.6864 36.4965 24.2399 34.2298 26.0427 34.9573C27.8454 35.6848 30.9761 37.3394 30.9761 37.3394C30.9761 37.3394 32.3805 37.9854 32.1214 40.16L31.6183 42.8253C31.6183 42.8253 31.2007 44.4841 29.5759 43.7094L23.8591 40.9438C23.5665 40.725 23.3537 40.4211 23.2518 40.0765C23.1499 39.7318 23.1643 39.3646 23.2928 39.0285L23.6864 36.4965Z" fill="#EC1C2B"/>
<path d="M57.4472 34.3402C57.4472 34.3402 58.0008 32.0735 59.8035 32.801C61.6062 33.5284 64.7369 35.1831 64.7369 35.1831C64.7369 35.1831 66.1394 35.8309 65.8822 38.006L65.3792 40.6694C65.3792 40.6694 64.9625 42.3269 63.3367 41.5545L57.6176 38.7857C57.3253 38.5672 57.1127 38.2636 57.0108 37.9194C56.9089 37.5752 56.9231 37.2084 57.0513 36.8726L57.4472 34.3402Z" fill="#EC1C2B"/>
<path d="M30.464 21.4385C30.464 21.4385 30.9312 19.5255 32.4517 20.1407C33.9722 20.7559 36.6145 22.1518 36.6145 22.1518C36.6145 22.1518 37.7976 22.6974 37.581 24.5308L37.1563 26.7755C37.1241 26.9536 37.0474 27.1213 36.9329 27.2639C36.8185 27.4066 36.6697 27.5198 36.4997 27.5936C36.3297 27.6674 36.1436 27.6997 35.9577 27.6875C35.7719 27.6753 35.592 27.619 35.4338 27.5236L30.6098 25.1872C30.3627 25.0031 30.1828 24.747 30.0964 24.4564C30.01 24.1658 30.0218 23.856 30.1299 23.5724L30.464 21.4385Z" fill="#EC1C2B"/>
<path d="M44.9127 25.2711C44.9127 25.2711 45.3086 23.648 46.5993 24.1716C47.89 24.6952 50.1302 25.8762 50.1302 25.8762C50.1302 25.8762 51.1344 26.3403 50.9494 27.8956L50.5893 29.8027C50.562 29.9539 50.4968 30.0963 50.3996 30.2174C50.3023 30.3385 50.1759 30.4345 50.0314 30.4971C49.887 30.5596 49.7289 30.5868 49.5711 30.5762C49.4133 30.5656 49.2606 30.5175 49.1264 30.4362L45.033 28.4558C44.8237 28.2995 44.6714 28.0823 44.5983 27.8359C44.5252 27.5896 44.5351 27.327 44.6267 27.0865L44.9127 25.2711Z" fill="#EC1C2B"/>
<path d="M37.4399 46.6202C37.4399 46.6202 37.8358 44.9972 39.1265 45.5208C40.4172 46.0444 42.6574 47.2277 42.6574 47.2277C42.6574 47.2277 43.6616 47.6895 43.4766 49.2434L43.1142 51.1514C43.0868 51.3026 43.0216 51.4449 42.9243 51.5659C42.8269 51.6869 42.7004 51.7828 42.5559 51.8452C42.4114 51.9076 42.2534 51.9346 42.0956 51.9238C41.9379 51.9129 41.7853 51.8646 41.6513 51.7831L37.5621 49.8036C37.3531 49.6471 37.2009 49.4299 37.1278 49.1836C37.0548 48.9373 37.0646 48.6748 37.1558 48.4343L37.4399 46.6202Z" fill="#EC1C2B"/>
<path d="M20.332 25.2711C20.332 25.2711 20.7279 23.648 22.0186 24.1716C23.3093 24.6952 25.5495 25.8762 25.5495 25.8762C25.5495 25.8762 26.5537 26.3403 26.3706 27.8956L26.0087 29.8027C25.9814 29.9539 25.9162 30.0963 25.8189 30.2174C25.7216 30.3385 25.5952 30.4345 25.4508 30.4971C25.3063 30.5596 25.1482 30.5868 24.9904 30.5762C24.8326 30.5656 24.6799 30.5175 24.5457 30.4362L20.4547 28.4558C20.2453 28.2995 20.0927 28.0825 20.0192 27.8362C19.9457 27.5899 19.9551 27.3273 20.046 27.0865L20.332 25.2711Z" fill="#EC1C2B"/>
<path d="M67.0927 51.0534C67.0927 51.0534 67.4886 49.4303 68.7793 49.9539C70.07 50.4775 72.3102 51.6585 72.3102 51.6585C72.3102 51.6585 73.3144 52.1203 73.1294 53.6779L72.7694 55.585C72.742 55.7362 72.6768 55.8785 72.5794 55.9995C72.4821 56.1205 72.3556 56.2164 72.2111 56.2788C72.0666 56.3412 71.9085 56.3682 71.7508 56.3573C71.593 56.3465 71.4404 56.2982 71.3064 56.2167L67.213 54.2381C67.0037 54.0813 66.8514 53.8636 66.7784 53.617C66.7053 53.3703 66.7152 53.1074 66.8067 52.8665L67.0927 51.0534Z" fill="#EC1C2B"/>
<path d="M53.3746 50.7221C53.3746 50.7221 53.6105 49.7656 54.3684 50.0744C55.1263 50.3831 56.4449 51.0781 56.4449 51.0781C56.6439 51.2024 56.7977 51.3842 56.8846 51.5979C56.9715 51.8116 56.987 52.0464 56.929 52.2692L56.7162 53.3911C56.7005 53.4803 56.6624 53.5644 56.6052 53.6359C56.5479 53.7074 56.4734 53.7641 56.3882 53.8009C56.303 53.8377 56.2097 53.8535 56.1167 53.8469C56.0237 53.8403 55.9338 53.8115 55.855 53.763L53.4463 52.5967C53.3232 52.5043 53.2335 52.3763 53.1903 52.2312C53.1472 52.0861 53.1527 51.9314 53.2061 51.7895L53.3746 50.7221Z" fill="#EC1C2B"/>
<path d="M14.19 37.3917C14.19 37.3917 14.4217 36.4351 15.1839 36.7439C15.946 37.0527 17.2603 37.7476 17.2603 37.7476C17.4593 37.8719 17.613 38.0538 17.6996 38.2675C17.7862 38.4813 17.8012 38.7161 17.7426 38.9387L17.5321 40.0629C17.5156 40.1517 17.477 40.2352 17.4196 40.3062C17.3622 40.3771 17.2878 40.4334 17.2029 40.4701C17.118 40.5067 17.0251 40.5227 16.9324 40.5166C16.8397 40.5104 16.7499 40.4824 16.6709 40.4349L14.2618 39.2639C14.1382 39.1719 14.0483 39.0439 14.005 38.8987C13.9618 38.7534 13.9676 38.5986 14.0216 38.4568L14.19 37.3917Z" fill="#EC1C2B"/>
<path d="M8.02964 27.4539C8.02964 27.4539 8.26135 26.4974 9.0235 26.8062C9.78564 27.1149 11.0999 27.8099 11.0999 27.8099C11.2993 27.9338 11.4532 28.1157 11.5398 28.3296C11.6264 28.5435 11.6413 28.7784 11.5822 29.001L11.3717 30.1229C11.3552 30.2117 11.3166 30.2952 11.2592 30.3661C11.2018 30.4371 11.1274 30.4934 11.0425 30.53C10.9576 30.5667 10.8647 30.5827 10.772 30.5766C10.6793 30.5704 10.5895 30.5424 10.5105 30.4949L8.10137 29.3262C7.97783 29.2342 7.88787 29.1062 7.84465 28.9609C7.80143 28.8157 7.80722 28.6609 7.86117 28.519L8.02964 27.4539Z" fill="#EC1C2B"/>
<path d="M4.33219 57.181H3.86924C3.31332 57.181 2.9575 57.0092 2.8079 56.6555C2.71054 56.8371 2.55778 56.985 2.3705 57.0791C2.18322 57.1732 1.97057 57.2088 1.76166 57.181C0.856056 57.181 0.399242 56.6107 0.399242 55.4631C0.399242 54.3531 0.856056 53.7974 1.76166 53.7974H3.20572V55.8003C3.20572 56.3111 3.44168 56.5667 3.90463 56.5667H4.33219V57.181ZM2.52994 54.3746H1.80366C1.68755 54.364 1.57072 54.3858 1.46701 54.4376C1.3633 54.4894 1.27705 54.569 1.21849 54.6669C1.10675 54.9173 1.05821 55.1899 1.07691 55.4622C1.05917 55.7369 1.10765 56.0119 1.21849 56.2652C1.27503 56.3654 1.36061 56.4473 1.46463 56.5007C1.56865 56.5541 1.68653 56.5768 1.80366 56.5658C1.92035 56.5763 2.03768 56.5535 2.14116 56.5001C2.24464 56.4467 2.32976 56.3651 2.38601 56.2652C2.49703 56.0119 2.54551 55.7369 2.52758 55.4622L2.52994 54.3746ZM1.9089 52.7374C1.91097 52.8374 1.87262 52.9342 1.80207 53.0072C1.73151 53.0801 1.63435 53.1234 1.53137 53.1277C1.4296 53.1218 1.33415 53.0778 1.26507 53.005C1.19599 52.9322 1.15866 52.8363 1.16091 52.7374C1.15886 52.6393 1.1965 52.5443 1.26577 52.4729C1.33503 52.4015 1.43039 52.3592 1.53137 52.3553C1.63351 52.3577 1.73052 52.3992 1.80125 52.4708C1.87198 52.5424 1.91067 52.6382 1.9089 52.7374ZM2.865 52.7374C2.8669 52.8362 2.82945 52.932 2.76044 53.0047C2.69143 53.0774 2.59619 53.1214 2.49455 53.1277C2.3934 53.1215 2.29872 53.0773 2.23068 53.0044C2.16263 52.9315 2.12659 52.8357 2.13023 52.7374C2.12678 52.6399 2.16312 52.5451 2.23136 52.4735C2.29959 52.402 2.39419 52.3595 2.49455 52.3553C2.5954 52.3596 2.69055 52.4019 2.75974 52.4733C2.82893 52.5446 2.8667 52.6394 2.865 52.7374Z" fill="#2E303A"/>
<path d="M6.04618 55.8543C6.05927 56.2062 5.92789 56.5488 5.68092 56.8067C5.55469 56.9322 5.40258 57.0303 5.23456 57.0947C5.06655 57.1591 4.88641 57.1884 4.70594 57.1805H4.15946V56.5676H4.67102C5.14042 56.5676 5.37559 56.3121 5.37653 55.8012V54.0086L6.04618 53.796V55.8543ZM5.61862 58.2333C5.62098 58.3321 5.58363 58.4279 5.51448 58.5004C5.44533 58.5729 5.34981 58.6164 5.24817 58.6217C5.1477 58.6147 5.05386 58.5705 4.98605 58.4982C4.91824 58.4259 4.88165 58.331 4.88385 58.2333C4.8815 58.1361 4.91822 58.0419 4.98623 57.9705C5.05424 57.8992 5.1482 57.8564 5.24817 57.8512C5.34927 57.8548 5.44485 57.8969 5.51419 57.9684C5.58353 58.0399 5.62105 58.1351 5.61862 58.2333Z" fill="#2E303A"/>
<path d="M8.66578 57.181H7.91072C7.78025 57.1881 7.64976 57.1675 7.52838 57.1205C7.407 57.0735 7.29767 57.0013 7.20803 56.9091C7.11839 56.8168 7.05062 56.7066 7.00945 56.5862C6.96829 56.4658 6.95473 56.3381 6.96972 56.2121V52.566L7.6455 52.3411V56.1919C7.6455 56.4311 7.75923 56.5497 7.99519 56.5497H8.66578V57.181Z" fill="#2E303A"/>
<path d="M13.2622 57.181H8.48882V56.5658H11.687V56.2959C11.7076 55.8786 11.6579 55.4608 11.5397 55.059C11.4793 54.8659 11.3532 54.6983 11.1821 54.5837C11.0109 54.469 10.8048 54.4141 10.5973 54.4278C10.3836 54.4393 10.1753 54.4975 9.988 54.598C9.80065 54.6985 9.63906 54.8387 9.51523 55.0082L9.03199 54.5318C9.22486 54.3091 9.46399 54.1284 9.73373 54.0016C10.0035 53.8749 10.2978 53.8048 10.5973 53.796C10.9032 53.7706 11.2098 53.8358 11.4767 53.9831C11.7436 54.1303 11.9583 54.3526 12.0924 54.6206C12.3118 55.1518 12.4096 55.723 12.3788 56.2946V56.5479H13.2608L13.2622 57.181Z" fill="#2E303A"/>
<path d="M19.5793 57.1815H13.1046V56.5497H13.9427V54.6532L14.6209 54.4488V56.5502H16.0296V54.3366L16.7077 54.1282V56.5502H18.131V54.0077L18.8091 53.797V56.5502H19.5779L19.5793 57.1815Z" fill="#2E303A"/>
<path d="M21.223 55.8543C21.2338 56.2053 21.104 56.5467 20.861 56.8067C20.7342 56.9319 20.5817 57.0298 20.4134 57.0942C20.2452 57.1586 20.0649 57.188 19.8842 57.1805H19.4269V56.5516H19.8478C20.3112 56.5516 20.5467 56.2982 20.5467 55.787V52.5679L21.2225 52.3553L21.223 55.8543Z" fill="#2E303A"/>
<path d="M22.8261 57.1819H22.1498V52.5665L22.8256 52.3416L22.8261 57.1819Z" fill="#2E303A"/>
<path d="M31.0577 56.9808C31.0577 58.0761 30.4239 58.624 29.1479 58.624C28.8566 58.6494 28.5633 58.606 28.2931 58.4974C28.0229 58.3888 27.7838 58.2184 27.5962 58.0006C27.2765 57.4826 27.1044 56.8915 27.0974 56.2877L27.7722 56.0586C27.725 56.5697 27.8317 57.0832 28.0794 57.5365C28.2099 57.6866 28.376 57.8036 28.5635 57.8773C28.751 57.9511 28.9541 57.9794 29.1554 57.9598C29.4613 57.9804 29.767 57.9169 30.0374 57.7765C30.1546 57.6832 30.2463 57.5634 30.3046 57.4276C30.363 57.2918 30.3861 57.1442 30.372 56.9978V52.5738L31.0501 52.3553L31.0577 56.9808Z" fill="#2E303A"/>
<path d="M35.5178 57.181H34.6778C34.6328 57.5553 34.4703 57.9071 34.2125 58.1888C34.0845 58.3311 33.9255 58.4439 33.7471 58.5192C33.5687 58.5944 33.3753 58.6302 33.1808 58.624C32.8889 58.641 32.5985 58.5728 32.347 58.428L32.0478 57.7408C32.3922 57.917 32.7765 58.0069 33.1657 58.0024C33.3834 57.9879 33.5882 57.8969 33.7417 57.7464C33.8952 57.5958 33.9869 57.3961 33.9996 57.1847H33.4451C33.2385 57.1929 33.0325 57.1569 32.8418 57.0791C32.6511 57.0014 32.4804 56.8838 32.3418 56.7348C32.0872 56.4303 31.9575 56.0453 31.9775 55.6537C31.9594 55.232 32.0684 54.8144 32.2913 54.452C32.4089 54.2738 32.5727 54.1287 32.7664 54.0315C32.9601 53.9343 33.1768 53.8883 33.3946 53.8982C34.3002 53.8982 34.757 54.485 34.757 55.6541C34.757 55.8873 34.7485 56.1956 34.7424 56.5703H35.5192L35.5178 57.181ZM34.0775 55.6495C34.0918 55.3934 34.0599 55.1368 33.9831 54.8914C33.9407 54.7743 33.8598 54.674 33.7528 54.606C33.6459 54.538 33.5188 54.5061 33.3913 54.5153C32.9005 54.5153 32.6523 54.8914 32.6523 55.6495C32.6523 56.2588 32.9156 56.5658 33.4418 56.5658H34.0695L34.0775 55.6495Z" fill="#2E303A"/>
<path d="M38.3875 57.181H37.9156C37.7298 57.1889 37.5446 57.1568 37.3733 57.0868C37.2019 57.0169 37.0486 56.9109 36.9245 56.7765C36.8002 56.914 36.645 57.0219 36.4709 57.092C36.2968 57.1622 36.1084 57.1926 35.9203 57.181H35.345V56.5516H35.8797C36.3493 56.5516 36.5852 56.2982 36.5852 55.787V52.566L37.261 52.3411V55.8227C37.261 56.3092 37.497 56.5484 37.9599 56.5484H38.3875V57.181Z" fill="#2E303A"/>
<path d="M41.9986 57.181H38.2086V56.5658H41.3082V56.2959C41.3283 55.8785 41.2777 55.4606 41.1586 55.0591C41.0991 54.8672 40.9746 54.7004 40.8052 54.5858C40.6359 54.4713 40.4316 54.4156 40.2256 54.4278C40.0107 54.4391 39.8011 54.4972 39.6123 54.5976C39.4236 54.6981 39.2605 54.8384 39.135 55.0082L38.6508 54.5341C38.845 54.3105 39.0857 54.1294 39.3571 54.0026C39.6285 53.8758 39.9245 53.8062 40.2256 53.7983C40.5314 53.7732 40.8379 53.8385 41.1048 53.9857C41.3716 54.1329 41.5863 54.355 41.7206 54.6229C41.9326 55.156 42.0273 55.7262 41.9986 56.2969V57.181Z" fill="#2E303A"/>
<path d="M84 62.5262C84.0056 62.8569 83.9415 63.1853 83.8116 63.4911C83.6818 63.7969 83.4889 64.0737 83.2449 64.3046C83.0061 64.5381 82.722 64.7234 82.4091 64.8499C82.0961 64.9764 81.7604 65.0415 81.4215 65.0415C81.0825 65.0415 80.7468 64.9764 80.4339 64.8499C80.1209 64.7234 79.8368 64.5381 79.598 64.3046C79.3542 64.0728 79.1618 63.7952 79.0326 63.4886C78.9033 63.1821 78.8399 62.8532 78.8462 62.5221C78.841 62.1555 78.9247 61.7928 79.0907 61.4634C79.25 61.1296 79.4854 60.8354 79.7792 60.6031C80.2291 60.2278 80.8032 60.0224 81.3964 60.0245C81.7679 60.0197 82.1359 60.0943 82.4743 60.243C82.9286 60.4356 83.3129 60.756 83.5776 61.1629C83.8524 61.5682 83.9987 62.0428 83.9986 62.528M81.4068 60.3882C81.1237 60.3856 80.843 60.4404 80.583 60.5492C80.3229 60.658 80.0892 60.8183 79.8967 61.0199C79.4902 61.425 79.2628 61.9681 79.2628 62.5335C79.2628 63.099 79.4902 63.6421 79.8967 64.0471C80.0945 64.2465 80.3316 64.4051 80.5939 64.5136C80.8562 64.6221 81.1383 64.6782 81.4234 64.6786C81.7085 64.679 81.9908 64.6237 82.2534 64.5159C82.516 64.4081 82.7535 64.2501 82.9519 64.0512C83.1561 63.851 83.3171 63.6131 83.4252 63.3516C83.5333 63.0901 83.5864 62.8102 83.5814 62.5285C83.5756 62.1858 83.4915 61.8486 83.3351 61.5413C83.1862 61.2401 82.9626 60.9796 82.6843 60.7831C82.3135 60.5236 81.8672 60.3854 81.4101 60.3887M81.6796 62.7708L82.6437 63.977H81.9514L81.0652 62.8318V63.977H80.4989V61.0873H81.0902C81.4091 61.0626 81.7278 61.1377 81.9995 61.3017C82.1015 61.3785 82.1834 61.4776 82.2387 61.5908C82.2939 61.704 82.321 61.8283 82.3176 61.9536C82.3179 62.1346 82.2589 62.3111 82.1491 62.4575C82.0423 62.6015 81.8888 62.7065 81.7131 62.7557L81.6796 62.7708ZM81.0661 62.3704H81.1628C81.5692 62.3704 81.7735 62.2358 81.7735 61.9636C81.7735 61.708 81.5777 61.5816 81.1817 61.5816H81.0661V62.3704Z" fill="#2E303A"/>
</g>
<defs>
<clipPath id="clip0_6_827">
<rect width="84" height="84" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 25 KiB

@ -0,0 +1,3 @@
<svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 10.75C0 16.687 4.813 21.5 10.75 21.5C16.687 21.5 21.5 16.687 21.5 10.75C21.5 4.813 16.687 0 10.75 0C4.813 0 0 4.813 0 10.75ZM15.426 7.01299C15.833 7.38599 15.86 8.01898 15.487 8.42598L9.98701 14.426C9.80301 14.627 9.544 14.744 9.272 14.75C8.999 14.756 8.73599 14.65 8.54299 14.457L6.04299 11.957C5.65199 11.567 5.65199 10.933 6.04299 10.543C6.43299 10.152 7.06701 10.152 7.45701 10.543L9.21899 12.304L14.013 7.07402C14.386 6.66702 15.019 6.63999 15.426 7.01299Z" fill="#62BE96"/>
</svg>

After

Width:  |  Height:  |  Size: 635 B

@ -0,0 +1,37 @@
<svg width="390" height="499" viewBox="0 0 390 499" fill="none" xmlns="http://www.w3.org/2000/svg">
<g opacity="0.08">
<path d="M43.8892 292.502C43.8892 292.502 46.7042 276.468 59.608 280.774C72.5118 285.08 95.06 295.241 95.06 295.241C95.06 295.241 105.141 299.148 104.326 314.414L102.034 333.18C102.034 333.18 99.8973 344.919 88.2231 340.234L47.1147 323.401C44.9776 322.006 43.3556 319.984 42.4852 317.631C41.6147 315.278 41.5413 312.716 42.2755 310.319L43.8892 292.502Z" fill="white"/>
<path d="M-7.67711 305.746C-7.67711 305.746 -5.46842 296.702 1.72442 299.605C8.91725 302.507 21.4087 309.109 21.4087 309.109C21.4087 309.109 27.0123 311.687 25.9786 320.363L23.9714 330.998C23.9714 330.998 22.305 337.617 15.822 334.526L-6.98795 323.491C-8.1554 322.618 -9.00449 321.405 -9.41104 320.03C-9.81759 318.655 -9.76027 317.19 -9.24748 315.849L-7.67711 305.746Z" fill="white"/>
<path d="M127.029 297.142C127.029 297.142 129.238 288.098 136.43 291.001C143.623 293.903 156.115 300.506 156.115 300.506C156.115 300.506 161.711 303.09 160.685 311.769L158.677 322.396C158.677 322.396 157.015 329.009 150.528 325.927L127.709 314.88C126.542 314.008 125.694 312.797 125.287 311.423C124.881 310.05 124.938 308.587 125.449 307.247L127.029 297.142Z" fill="white"/>
<path d="M19.3663 245.665C19.3663 245.665 21.2304 238.032 27.2972 240.487C33.364 242.941 43.9066 248.511 43.9066 248.511C43.9066 248.511 48.6272 250.688 47.7629 258.003L46.0682 266.959C45.9399 267.67 45.6339 268.339 45.1772 268.908C44.7205 269.477 44.1269 269.929 43.4485 270.224C42.7701 270.518 42.0276 270.647 41.2861 270.598C40.5447 270.549 39.8268 270.325 39.1955 269.944L19.9481 260.622C18.9619 259.887 18.244 258.866 17.8994 257.706C17.5548 256.547 17.6017 255.311 18.0331 254.179L19.3663 245.665Z" fill="white"/>
<path d="M77.0155 260.957C77.0155 260.957 78.5953 254.481 83.7451 256.57C88.895 258.659 97.8333 263.371 97.8333 263.371C97.8333 263.371 101.84 265.223 101.102 271.428L99.6654 279.038C99.5564 279.641 99.2964 280.209 98.9082 280.692C98.5201 281.176 98.0157 281.559 97.4393 281.808C96.8629 282.058 96.2322 282.166 95.6026 282.124C94.973 282.082 94.3637 281.89 93.8283 281.566L77.4956 273.664C76.6606 273.04 76.0529 272.173 75.7612 271.19C75.4695 270.207 75.5092 269.16 75.8744 268.2L77.0155 260.957Z" fill="white"/>
<path d="M47.1991 346.14C47.1991 346.14 48.7789 339.664 53.9287 341.753C59.0786 343.842 68.0169 348.563 68.0169 348.563C68.0169 348.563 72.0238 350.406 71.2857 356.606L69.8396 364.219C69.7304 364.822 69.4701 365.39 69.0817 365.873C68.6933 366.356 68.1886 366.738 67.6121 366.987C67.0356 367.236 66.4049 367.344 65.7754 367.301C65.146 367.258 64.5372 367.065 64.0025 366.74L47.6868 358.841C46.8527 358.217 46.2457 357.35 45.9541 356.368C45.6625 355.385 45.7016 354.338 46.0656 353.378L47.1991 346.14Z" fill="white"/>
<path d="M-21.061 260.957C-21.061 260.957 -19.4813 254.481 -14.3314 256.57C-9.18158 258.659 -0.243256 263.371 -0.243256 263.371C-0.243256 263.371 3.76364 265.223 3.03306 271.428L1.58884 279.038C1.47983 279.641 1.21984 280.209 0.831693 280.692C0.443549 281.176 -0.0608665 281.559 -0.637242 281.808C-1.21362 282.058 -1.84432 282.166 -2.47394 282.124C-3.10357 282.082 -3.71285 281.89 -4.24827 281.566L-20.5715 273.664C-21.407 273.04 -22.0157 272.174 -22.309 271.191C-22.6022 270.209 -22.5648 269.161 -22.2021 268.2L-21.061 260.957Z" fill="white"/>
<path d="M165.514 363.828C165.514 363.828 167.094 357.352 172.244 359.441C177.394 361.53 186.332 366.242 186.332 366.242C186.332 366.242 190.339 368.085 189.601 374.3L188.164 381.909C188.055 382.512 187.795 383.08 187.406 383.563C187.018 384.046 186.513 384.428 185.937 384.677C185.36 384.926 184.729 385.034 184.1 384.991C183.47 384.947 182.862 384.755 182.327 384.43L165.994 376.535C165.159 375.909 164.552 375.041 164.26 374.057C163.968 373.072 164.008 372.023 164.373 371.062L165.514 363.828Z" fill="white"/>
<path d="M110.779 362.506C110.779 362.506 111.721 358.69 114.745 359.922C117.769 361.154 123.03 363.926 123.03 363.926C123.824 364.422 124.438 365.148 124.784 366.001C125.131 366.853 125.193 367.79 124.962 368.679L124.112 373.155C124.05 373.511 123.898 373.847 123.669 374.132C123.441 374.418 123.144 374.644 122.804 374.79C122.464 374.937 122.091 375 121.72 374.974C121.349 374.948 120.99 374.833 120.676 374.639L111.065 369.986C110.574 369.617 110.217 369.107 110.044 368.527C109.872 367.948 109.894 367.331 110.107 366.765L110.779 362.506Z" fill="white"/>
</g>
<g opacity="0.08">
<path d="M301.502 458.802C301.502 458.802 285.468 455.987 289.774 443.083C294.08 430.18 304.241 407.631 304.241 407.631C304.241 407.631 308.148 397.55 323.414 398.365L342.18 400.657C342.18 400.657 353.919 402.794 349.234 414.468L332.401 455.577C331.006 457.714 328.984 459.336 326.631 460.206C324.278 461.077 321.716 461.15 319.319 460.416L301.502 458.802Z" fill="white"/>
<path d="M314.746 510.368C314.746 510.368 305.702 508.16 308.605 500.967C311.507 493.774 318.109 481.283 318.109 481.283C318.109 481.283 320.687 475.679 329.363 476.713L339.998 478.72C339.998 478.72 346.617 480.386 343.526 486.869L332.491 509.679C331.618 510.847 330.405 511.696 329.03 512.102C327.655 512.509 326.19 512.452 324.849 511.939L314.746 510.368Z" fill="white"/>
<path d="M306.142 375.663C306.142 375.663 297.098 373.454 300.001 366.261C302.903 359.068 309.506 346.577 309.506 346.577C309.506 346.577 312.09 340.981 320.769 342.007L331.396 344.014C331.396 344.014 338.009 345.677 334.927 352.163L323.88 374.983C323.008 376.149 321.797 376.997 320.423 377.404C319.05 377.81 317.587 377.754 316.247 377.242L306.142 375.663Z" fill="white"/>
<path d="M254.665 483.325C254.665 483.325 247.032 481.461 249.487 475.394C251.941 469.327 257.511 458.785 257.511 458.785C257.511 458.785 259.688 454.064 267.003 454.928L275.959 456.623C276.67 456.751 277.339 457.057 277.908 457.514C278.477 457.971 278.929 458.564 279.224 459.243C279.518 459.921 279.647 460.664 279.598 461.405C279.549 462.147 279.325 462.865 278.944 463.496L269.622 482.743C268.887 483.729 267.866 484.447 266.706 484.792C265.547 485.137 264.311 485.09 263.179 484.658L254.665 483.325Z" fill="white"/>
<path d="M269.957 425.676C269.957 425.676 263.481 424.096 265.57 418.946C267.659 413.796 272.371 404.858 272.371 404.858C272.371 404.858 274.223 400.851 280.428 401.589L288.038 403.026C288.641 403.135 289.209 403.395 289.692 403.783C290.176 404.171 290.559 404.676 290.808 405.252C291.058 405.829 291.166 406.459 291.124 407.089C291.082 407.718 290.89 408.328 290.566 408.863L282.664 425.196C282.04 426.031 281.173 426.639 280.19 426.93C279.208 427.222 278.16 427.182 277.2 426.817L269.957 425.676Z" fill="white"/>
<path d="M355.14 455.492C355.14 455.492 348.664 453.913 350.753 448.763C352.842 443.613 357.563 434.675 357.563 434.675C357.563 434.675 359.406 430.668 365.606 431.406L373.219 432.852C373.822 432.961 374.39 433.221 374.873 433.61C375.356 433.998 375.738 434.503 375.987 435.079C376.236 435.656 376.344 436.287 376.301 436.916C376.257 437.545 376.065 438.154 375.74 438.689L367.841 455.005C367.217 455.839 366.35 456.446 365.368 456.737C364.385 457.029 363.338 456.99 362.378 456.626L355.14 455.492Z" fill="white"/>
<path d="M269.957 523.752C269.957 523.752 263.481 522.173 265.57 517.023C267.659 511.873 272.371 502.935 272.371 502.935C272.371 502.935 274.223 498.928 280.428 499.658L288.038 501.103C288.641 501.212 289.209 501.472 289.692 501.86C290.176 502.248 290.559 502.752 290.808 503.329C291.058 503.905 291.166 504.536 291.124 505.165C291.082 505.795 290.89 506.404 290.566 506.94L282.664 523.263C282.04 524.098 281.174 524.707 280.191 525C279.209 525.294 278.161 525.256 277.2 524.894L269.957 523.752Z" fill="white"/>
<path d="M372.828 337.177C372.828 337.177 366.352 335.598 368.441 330.448C370.53 325.298 375.242 316.36 375.242 316.36C375.242 316.36 377.085 312.353 383.3 313.091L390.909 314.527C391.512 314.637 392.08 314.897 392.563 315.285C393.046 315.674 393.428 316.178 393.677 316.755C393.926 317.331 394.034 317.962 393.991 318.592C393.947 319.221 393.755 319.83 393.43 320.365L385.535 336.697C384.909 337.532 384.041 338.14 383.057 338.431C382.072 338.723 381.023 338.683 380.062 338.318L372.828 337.177Z" fill="white"/>
<path d="M371.506 391.912C371.506 391.912 367.69 390.971 368.922 387.947C370.154 384.923 372.926 379.662 372.926 379.662C373.422 378.868 374.148 378.254 375.001 377.907C375.853 377.56 376.79 377.498 377.679 377.73L382.155 378.579C382.511 378.642 382.847 378.794 383.132 379.022C383.418 379.25 383.644 379.548 383.79 379.888C383.937 380.228 384 380.6 383.974 380.971C383.948 381.342 383.833 381.701 383.639 382.015L378.986 391.626C378.617 392.117 378.107 392.475 377.527 392.647C376.948 392.82 376.331 392.798 375.765 392.584L371.506 391.912Z" fill="white"/>
</g>
<g opacity="0.08">
<path d="M259.737 47.862C259.737 47.862 262.303 33.245 274.066 37.1709C285.83 41.0967 306.385 50.3598 306.385 50.3598C306.385 50.3598 315.576 53.9208 314.833 67.8379L312.743 84.946C312.743 84.946 310.795 95.6471 300.153 91.3763L262.677 76.0312C260.729 74.7589 259.25 72.9158 258.457 70.7705C257.663 68.6253 257.596 66.2901 258.265 64.1053L259.737 47.862Z" fill="white"/>
<path d="M212.727 59.9361C212.727 59.9361 214.741 51.6912 221.298 54.3373C227.855 56.9834 239.243 63.0022 239.243 63.0022C239.243 63.0022 244.351 65.3517 243.409 73.2617L241.579 82.9564C241.579 82.9564 240.06 88.9901 234.15 86.1724L213.355 76.1128C212.291 75.3169 211.517 74.2114 211.146 72.9579C210.776 71.7043 210.828 70.3686 211.295 69.1459L212.727 59.9361Z" fill="white"/>
<path d="M335.529 52.0928C335.529 52.0928 337.543 43.8478 344.1 46.4939C350.657 49.14 362.045 55.1588 362.045 55.1588C362.045 55.1588 367.146 57.515 366.211 65.4267L364.381 75.1147C364.381 75.1147 362.865 81.1434 356.952 78.334L336.149 68.2628C335.086 67.4679 334.312 66.3638 333.942 65.1119C333.571 63.8599 333.623 62.5257 334.089 61.3042L335.529 52.0928Z" fill="white"/>
<path d="M237.381 5.16422C237.381 5.16422 239.08 -1.79434 244.611 0.44353C250.141 2.6814 259.752 7.75868 259.752 7.75868C259.752 7.75868 264.056 9.74327 263.268 16.4119L261.723 24.5769C261.606 25.2247 261.327 25.8347 260.911 26.3535C260.494 26.8724 259.953 27.2841 259.335 27.5527C258.716 27.8213 258.039 27.9385 257.363 27.8941C256.688 27.8497 256.033 27.645 255.458 27.298L237.911 18.7997C237.012 18.13 236.358 17.1984 236.043 16.1414C235.729 15.0845 235.772 13.9576 236.165 12.9259L237.381 5.16422Z" fill="white"/>
<path d="M289.935 19.1047C289.935 19.1047 291.376 13.2009 296.07 15.1055C300.765 17.0101 308.913 21.3059 308.913 21.3059C308.913 21.3059 312.566 22.9939 311.893 28.6511L310.584 35.588C310.484 36.1381 310.247 36.6561 309.893 37.0965C309.54 37.5369 309.08 37.8863 308.554 38.1138C308.029 38.3414 307.454 38.4402 306.88 38.4016C306.306 38.363 305.75 38.1882 305.262 37.8925L290.373 30.689C289.612 30.1203 289.058 29.3302 288.792 28.4342C288.526 27.5381 288.562 26.583 288.895 25.7083L289.935 19.1047Z" fill="white"/>
<path d="M262.754 96.7602C262.754 96.7602 264.194 90.8564 268.889 92.761C273.584 94.6656 281.732 98.9697 281.732 98.9697C281.732 98.9697 285.385 100.649 284.712 106.302L283.394 113.242C283.294 113.792 283.057 114.31 282.703 114.75C282.349 115.19 281.889 115.539 281.363 115.766C280.837 115.992 280.262 116.091 279.689 116.051C279.115 116.012 278.56 115.836 278.072 115.54L263.199 108.339C262.438 107.77 261.885 106.98 261.619 106.084C261.353 105.188 261.389 104.234 261.721 103.359L262.754 96.7602Z" fill="white"/>
<path d="M200.526 19.1047C200.526 19.1047 201.966 13.2009 206.661 15.1055C211.356 17.0101 219.504 21.3059 219.504 21.3059C219.504 21.3059 223.157 22.9939 222.491 28.6511L221.174 35.588C221.075 36.1381 220.838 36.6561 220.484 37.0965C220.13 37.5369 219.67 37.8863 219.145 38.1138C218.62 38.3414 218.045 38.4402 217.471 38.4016C216.897 38.363 216.341 38.1882 215.853 37.8925L200.972 30.689C200.211 30.1205 199.656 29.3309 199.388 28.4351C199.121 27.5393 199.155 26.584 199.486 25.7083L200.526 19.1047Z" fill="white"/>
<path d="M370.613 112.885C370.613 112.885 372.054 106.981 376.748 108.886C381.443 110.791 389.592 115.086 389.592 115.086C389.592 115.086 393.244 116.766 392.572 122.432L391.262 129.369C391.162 129.918 390.925 130.436 390.571 130.876C390.217 131.316 389.757 131.665 389.231 131.892C388.706 132.119 388.131 132.217 387.557 132.178C386.983 132.139 386.428 131.963 385.94 131.666L371.051 124.47C370.29 123.899 369.736 123.107 369.47 122.21C369.204 121.313 369.24 120.357 369.573 119.481L370.613 112.885Z" fill="white"/>
<path d="M320.716 111.68C320.716 111.68 321.574 108.201 324.331 109.324C327.087 110.447 331.883 112.975 331.883 112.975C332.607 113.427 333.167 114.089 333.483 114.866C333.799 115.643 333.855 116.497 333.645 117.308L332.87 121.388C332.813 121.713 332.675 122.019 332.466 122.279C332.258 122.539 331.987 122.745 331.677 122.879C331.367 123.013 331.028 123.07 330.69 123.046C330.351 123.022 330.024 122.918 329.738 122.741L320.976 118.499C320.529 118.163 320.202 117.697 320.045 117.17C319.888 116.642 319.908 116.079 320.103 115.563L320.716 111.68Z" fill="white"/>
<path d="M178.185 63.1922C178.185 63.1922 179.028 59.7129 181.8 60.836C184.572 61.9591 189.353 64.4869 189.353 64.4869C190.077 64.9388 190.636 65.6005 190.951 66.3781C191.266 67.1557 191.32 68.0098 191.107 68.8193L190.342 72.9085C190.281 73.2314 190.141 73.5352 189.932 73.7933C189.723 74.0515 189.453 74.2562 189.144 74.3896C188.835 74.523 188.497 74.581 188.16 74.5587C187.823 74.5364 187.496 74.4344 187.209 74.2616L178.446 70.0024C177.996 69.6676 177.669 69.202 177.512 68.6738C177.355 68.1455 177.376 67.5822 177.572 67.0664L178.185 63.1922Z" fill="white"/>
<path d="M155.777 27.0447C155.777 27.0447 156.62 23.5654 159.392 24.6885C162.164 25.8116 166.945 28.3394 166.945 28.3394C167.67 28.7902 168.23 29.4518 168.545 30.2297C168.86 31.0077 168.914 31.8623 168.699 32.6718L167.934 36.7526C167.874 37.0756 167.733 37.3793 167.524 37.6375C167.316 37.8956 167.045 38.1003 166.736 38.2337C166.427 38.3671 166.089 38.4252 165.752 38.4029C165.415 38.3806 165.088 38.2785 164.801 38.1057L156.038 33.8549C155.589 33.5201 155.261 33.0545 155.104 32.5262C154.947 31.998 154.968 31.4347 155.164 30.9189L155.777 27.0447Z" fill="white"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 14 KiB

@ -0,0 +1,3 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M22.75 12C22.75 6.06294 17.9371 1.25 12 1.25C6.06294 1.25 1.25 6.06294 1.25 12C1.25 17.9371 6.06294 22.75 12 22.75C17.9371 22.75 22.75 17.9371 22.75 12ZM8.29289 8.29289C7.90237 8.68342 7.90237 9.31658 8.29289 9.70711L11.5622 12.9764L11.4477 13.091C11.2422 13.2963 11.0249 13.5135 10.874 13.7055C10.7639 13.8454 10.3603 14.3618 10.5787 15.0046C10.7972 15.648 11.4249 15.7878 11.5947 15.8252C11.8286 15.8767 12.1296 15.9048 12.4143 15.9313L12.4632 15.9358C12.9117 15.9778 13.4329 16.0148 13.8976 15.9941C14.1298 15.9837 14.3842 15.9577 14.6267 15.8958C14.8515 15.8383 15.1808 15.7218 15.4513 15.4513C15.7218 15.1808 15.8383 14.8515 15.8958 14.6267C15.9577 14.3842 15.9837 14.1298 15.9941 13.8976C16.0148 13.4329 15.9778 12.9117 15.9358 12.4632L15.9313 12.4143C15.9048 12.1296 15.8767 11.8286 15.8252 11.5947C15.7878 11.4249 15.648 10.7972 15.0046 10.5787C14.3618 10.3603 13.8454 10.7639 13.7055 10.874C13.5135 11.0249 13.2963 11.2423 13.091 11.4477L12.9764 11.5622L9.70711 8.29289C9.31658 7.90237 8.68342 7.90237 8.29289 8.29289Z" fill="#EAB157"/>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

@ -0,0 +1,3 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M12 22.75C6.06294 22.75 1.25 17.9371 1.25 12C1.25 6.06294 6.06294 1.25 12 1.25C17.9371 1.25 22.75 6.06294 22.75 12C22.75 17.9371 17.9371 22.75 12 22.75ZM12 7C12.5523 7 13 7.44772 13 8V12.5H13.162C13.4524 12.4999 13.7597 12.4998 14.0022 12.5288C14.179 12.55 14.8295 12.6298 15.1296 13.2387C15.43 13.8481 15.0851 14.3908 14.9914 14.5374C14.8625 14.7392 14.6695 14.9718 14.4869 15.1919L14.4555 15.2297C14.168 15.5765 13.8257 15.9712 13.4824 16.2852C13.311 16.442 13.1127 16.6035 12.8974 16.7312C12.6978 16.8495 12.3826 17 12 17C11.6174 17 11.3022 16.8495 11.1026 16.7312C10.8873 16.6035 10.689 16.442 10.5176 16.2852C10.1743 15.9712 9.83196 15.5765 9.54449 15.2297L9.51315 15.1919C9.33055 14.9718 9.13753 14.7391 9.00859 14.5374C8.91494 14.3908 8.57002 13.8481 8.87038 13.2387C9.1705 12.6298 9.82103 12.55 9.99783 12.5288C10.2403 12.4998 10.5476 12.4999 10.838 12.5H11V8C11 7.44772 11.4477 7 12 7Z" fill="#DE7676"/>
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

@ -0,0 +1,3 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M12 1.25C17.9371 1.25 22.75 6.06294 22.75 12C22.75 17.9371 17.9371 22.75 12 22.75C6.06294 22.75 1.25 17.9371 1.25 12C1.25 6.06294 6.06294 1.25 12 1.25ZM12 17C11.4477 17 11 16.5523 11 16V11.5H10.838C10.5476 11.5001 10.2403 11.5002 9.99783 11.4712C9.82103 11.45 9.1705 11.3702 8.87038 10.7613C8.57002 10.1519 8.91494 9.60918 9.00859 9.46263C9.13753 9.26085 9.33054 9.02819 9.51314 8.80808L9.54449 8.77028C9.83196 8.42352 10.1743 8.02882 10.5176 7.71482C10.689 7.55802 10.8873 7.39647 11.1026 7.26884C11.3022 7.15052 11.6174 7 12 7C12.3826 7 12.6978 7.15052 12.8974 7.26884C13.1127 7.39647 13.311 7.55802 13.4824 7.71482C13.8257 8.02882 14.168 8.42352 14.4555 8.77028L14.4869 8.80807C14.6695 9.02818 14.8625 9.26085 14.9914 9.46263C15.0851 9.60918 15.43 10.1519 15.1296 10.7613C14.8295 11.3702 14.179 11.45 14.0022 11.4712C13.7597 11.5002 13.4524 11.5001 13.162 11.5H13V16C13 16.5523 12.5523 17 12 17Z" fill="#DE7676"/>
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

@ -0,0 +1,3 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M12 1.25C6.06294 1.25 1.25 6.06294 1.25 12C1.25 17.9371 6.06294 22.75 12 22.75C17.9371 22.75 22.75 17.9371 22.75 12C22.75 6.06294 17.9371 1.25 12 1.25ZM8.29289 15.7071C8.68342 16.0976 9.31658 16.0976 9.70711 15.7071L12.9764 12.4378L13.091 12.5523C13.2963 12.7578 13.5135 12.9751 13.7055 13.126C13.8454 13.2361 14.3618 13.6397 15.0046 13.4213C15.648 13.2028 15.7878 12.5751 15.8252 12.4053C15.8767 12.1714 15.9048 11.8704 15.9313 11.5857L15.9358 11.5368C15.9778 11.0883 16.0148 10.5671 15.9941 10.1024C15.9837 9.87025 15.9577 9.6158 15.8958 9.37332C15.8383 9.14853 15.7218 8.81922 15.4513 8.54869C15.1808 8.27815 14.8515 8.16171 14.6267 8.10425C14.3842 8.04226 14.1298 8.01628 13.8976 8.00593C13.4329 7.9852 12.9117 8.02223 12.4632 8.06416L12.4143 8.06872C12.1296 8.09524 11.8286 8.12328 11.5947 8.17478C11.4249 8.21219 10.7972 8.35203 10.5787 8.99535C10.3603 9.63816 10.7639 10.1546 10.874 10.2945C11.0249 10.4865 11.2423 10.7037 11.4477 10.909L11.5622 11.0236L8.29289 14.2929C7.90237 14.6834 7.90237 15.3166 8.29289 15.7071Z" fill="#EAB157"/>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

@ -0,0 +1,4 @@
<svg width="26" height="26" viewBox="0 0 26 26" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="13" cy="13" r="13" fill="#EDF0EF"/>
<path d="M18.6947 8.71929L14.4018 13.0123L18.6947 17.3053C18.7902 17.3975 18.8664 17.5079 18.9188 17.6299C18.9712 17.7519 18.9988 17.8831 19 18.0159C19.0011 18.1487 18.9758 18.2803 18.9255 18.4032C18.8753 18.5261 18.801 18.6378 18.7071 18.7317C18.6132 18.8256 18.5016 18.8998 18.3787 18.9501C18.2558 19.0004 18.1241 19.0257 17.9913 19.0245C17.8585 19.0234 17.7273 18.9958 17.6053 18.9434C17.4833 18.891 17.373 18.8148 17.2807 18.7193L12.9877 14.4264L8.69471 18.7193C8.50611 18.9014 8.25351 19.0022 7.99131 19C7.72911 18.9977 7.4783 18.8925 7.29289 18.7071C7.10749 18.5217 7.00232 18.2709 7.00004 18.0087C6.99776 17.7465 7.09855 17.4939 7.28071 17.3053L11.5736 13.0123L7.28071 8.71929C7.09855 8.53069 6.99776 8.27808 7.00004 8.01589C7.00232 7.75369 7.10749 7.50288 7.29289 7.31747C7.4783 7.13206 7.72911 7.02689 7.99131 7.02461C8.25351 7.02234 8.50611 7.12313 8.69471 7.30529L12.9877 11.5982L17.2807 7.30529C17.373 7.20978 17.4833 7.1336 17.6053 7.08119C17.7273 7.02878 17.8585 7.00119 17.9913 7.00004C18.1241 6.99888 18.2558 7.02419 18.3787 7.07447C18.5016 7.12475 18.6132 7.199 18.7071 7.29289C18.801 7.38679 18.8753 7.49844 18.9255 7.62133C18.9758 7.74423 19.0011 7.87591 19 8.00869C18.9988 8.14147 18.9712 8.27269 18.9188 8.39469C18.8664 8.5167 18.7902 8.62704 18.6947 8.71929Z" fill="black"/>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 8.7 KiB

@ -0,0 +1,3 @@
<svg width="36" height="41" viewBox="0 0 36 41" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M34.4751 32.7923C33.6453 29.893 29.2051 28.5475 25.963 27.5672C25.0308 27.2852 24.2235 27.0418 23.6212 26.7983H23.618C23.388 26.7134 23.167 26.6061 22.958 26.4779C21.9361 25.818 21.92 24.1617 22.0194 23.1397C23.6532 21.9416 24.9507 20.0322 25.6331 17.6647C26.0912 17.6808 26.5621 17.2771 26.985 16.473C27.3761 15.6958 27.6441 14.8625 27.7795 14.003C28.0902 12.0167 27.4783 11.1197 26.7575 10.9179C27.2092 7.63416 27.2541 2.85755 23.9672 1.7619C23.9435 1.75317 23.9186 1.74781 23.8935 1.74589C23.2957 1.70824 22.6977 1.81597 22.1507 2.05984C22.077 1.35504 21.7855 0.246586 20.6802 0.0479608C19.3796 -0.189108 10.9989 0.301047 9.63155 5.0264C9.09374 6.94314 8.92844 8.94525 9.1446 10.9243C8.43019 11.1357 7.83111 12.036 8.14507 14.003C8.3501 15.3101 8.95238 16.9183 9.70524 17.4661C9.87086 17.5975 10.0769 17.6678 10.2883 17.6647C10.9675 20.0354 12.2681 21.9448 13.9052 23.1429C14.0045 24.1617 13.9853 25.8148 12.9633 26.4779C12.7531 26.6066 12.531 26.7149 12.3002 26.8015H12.297C11.6979 27.0418 10.8938 27.2852 9.96473 27.5672C6.71945 28.5475 2.27281 29.8898 1.44307 32.7923C0.850397 34.8746 0.488386 38.2192 0.289761 40.654C0.274704 40.8294 0.404691 40.9838 0.58009 40.9989C0.590101 40.9997 0.600113 41.0001 0.610124 41H35.3119C35.4018 41.0009 35.488 40.9637 35.5489 40.8975C35.6082 40.8308 35.6382 40.7431 35.6322 40.654C35.433 38.216 35.071 34.8746 34.4751 32.7923ZM10.8169 17.1746C10.792 17.0722 10.7174 16.9892 10.6183 16.9535C10.5181 16.9184 10.4071 16.9339 10.3203 16.9952C10.3055 17.0077 10.288 17.0165 10.2691 17.0208C10.2004 17.0186 10.1348 16.9925 10.0833 16.9471C9.56748 16.5755 8.98122 15.2075 8.77618 13.9005C8.58717 12.7055 8.76978 11.8149 9.22469 11.5778C9.33682 12.4427 9.5288 13.2953 9.79814 14.1247C9.84443 14.2527 9.96641 14.3374 10.1025 14.3362H11.1693C11.3215 14.3362 11.4528 14.2291 11.4833 14.0799L12.5469 8.89319C13.8796 9.10783 18.9605 9.71973 20.8443 6.79481C21.2351 7.58611 22.0488 8.91241 23.295 9.4282L24.4413 14.0927C24.4752 14.2365 24.6043 14.3377 24.7521 14.3362H25.8189C25.9621 14.3358 26.0877 14.2403 26.1264 14.1023C26.1617 13.9709 26.434 12.9586 26.6582 11.5618C27.142 11.7797 27.3374 12.6831 27.1452 13.9005C27.019 14.691 26.7738 15.4579 26.4179 16.175C26.072 16.8318 25.7676 17.0432 25.6459 17.0208C25.6262 17.0142 25.6078 17.0045 25.5914 16.992C25.5065 16.9315 25.3967 16.9182 25.2999 16.9567C25.2017 16.992 25.1273 17.0735 25.1013 17.1746C24.0633 21.1887 21.1928 23.8862 17.961 23.8862C14.7292 23.8862 11.8574 21.1887 10.8169 17.1746ZM13.3125 27.0161C14.4114 26.3049 14.6324 24.8601 14.578 23.5818C16.6585 24.8419 19.2667 24.8419 21.3472 23.5818C21.2896 24.8601 21.5106 26.3049 22.6095 27.0161C22.7209 27.0869 22.8364 27.1512 22.9555 27.2084C20.1962 29.9665 15.7243 29.9679 12.9633 27.2116C13.083 27.1528 13.1993 27.0875 13.3119 27.0161H13.3125Z" fill="#2B353E"/>
</svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 520 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 428 B

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="Capa_1" xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 512 512">
<!-- Generator: Adobe Illustrator 29.2.1, SVG Export Plug-In . SVG Version: 2.1.0 Build 116) -->
<defs>
<style>
.st0 {
fill: #d12127;
}
</style>
</defs>
<path class="st0" d="M8.5,119.5c2.3,0,4.4-.9,6-2.5s2.5-3.8,2.5-6V25.6c0-4.7,3.8-8.5,8.5-8.5h85.3c4.7,0,8.5-3.8,8.5-8.5s-3.8-8.5-8.5-8.5H25.6C11.5,0,0,11.5,0,25.6v85.3c0,2.3.9,4.4,2.5,6,1.6,1.6,3.8,2.5,6,2.5Z"/>
<path class="st0" d="M486.4,0h-85.3c-4.7,0-8.5,3.8-8.5,8.5s3.8,8.5,8.5,8.5h85.3c4.7,0,8.5,3.8,8.5,8.5v85.3c0,4.7,3.8,8.5,8.5,8.5s8.5-3.8,8.5-8.5V25.6c0-14.1-11.5-25.6-25.6-25.6Z"/>
<path class="st0" d="M503.5,392.5c-2.3,0-4.4.9-6,2.5-1.6,1.6-2.5,3.8-2.5,6v85.3c0,4.7-3.8,8.5-8.5,8.5h-85.3c-4.7,0-8.5,3.8-8.5,8.5s3.8,8.5,8.5,8.5h85.3c14.1,0,25.6-11.5,25.6-25.6v-85.3c0-2.3-.9-4.4-2.5-6-1.6-1.6-3.8-2.5-6-2.5Z"/>
<path class="st0" d="M110.9,494.9H25.6c-4.7,0-8.5-3.8-8.5-8.5v-85.3c0-4.7-3.8-8.5-8.5-8.5s-8.5,3.8-8.5,8.5v85.3c0,14.1,11.5,25.6,25.6,25.6h85.3c4.7,0,8.5-3.8,8.5-8.5s-3.8-8.5-8.5-8.5Z"/>
<path d="M503.5,162.1h-86.4c-.5-16.5-4-32.7-10.1-48-17.5-35.6-69.2-88.5-139.6-88.5h-22.7c-70.5,0-122.1,52.9-139.6,88.5-6.1,15.3-9.6,31.6-10.1,48H8.5c-4.7,0-8.5,3.8-8.5,8.5s3.8,8.5,8.5,8.5h85.5c-.2,6.3-.2,12.4-.2,18.4-1.6-.5-3.1-.9-4.8-1.1-8.2-1-16.4,1.8-22.1,7.7-6.7,8.6-9.1,19.8-6.5,30.4,2.2,11.5,5.4,22.7,9.6,33.6l1.4,4.2c1,2.9,1.9,6,2.7,9.1,1.9,8.6,5.2,16.7,9.9,24.1,3.7,5.7,9.8,9.4,16.6,10.1.4,0,.8,0,1.3,0s.8,0,1.2-.1c.6,7.8.9,14.8.9,19.9,0,29.2,27.5,64.9,43.7,81.4,9.4,9.1,19.2,17.7,29.5,25.7,9.8,7.7,19.2,15.8,28.2,24.5,10.1,11.2,24.1,18,39.1,19.3h22.7c15-1.2,29-8.1,39.1-19.3,9-8.6,18.4-16.8,28.2-24.5,10.3-8.1,20.2-16.6,29.6-25.8,16.2-16.5,43.7-52.2,43.7-81.3s.4-12.1.9-19.9c.4,0,.8.1,1.2.1s.9,0,1.3,0c6.8-.7,12.8-4.4,16.6-10.1,4.7-7.4,8-15.5,9.9-24.1.9-3.1,1.7-6.2,2.7-9.1l1.5-4.2c4.1-10.9,7.4-22.1,9.6-33.6,2.6-10.6.3-21.8-6.5-30.4-5.7-5.9-13.9-8.7-22.1-7.7-1.6.2-3.2.6-4.7,1.1,0-5.9,0-12.1-.2-18.4h85.5c4.7,0,8.5-3.8,8.5-8.5s-3.8-8.5-8.5-8.5ZM98.1,295.6c-3.4-5.8-5.9-12.1-7.3-18.7-1-3.5-1.9-6.9-3.1-10.1l-1.5-4.2c-3.8-10-6.8-20.3-8.9-30.9-1.5-5.2-.9-10.7,1.7-15.4,2.1-2.2,5.1-3.2,8.1-2.9,2.7.4,5.2,1.6,7.1,3.4.6,15.3,1.5,26.3,1.7,27.7,0,.4,3.4,28.1,5.8,54.1-1.6-.5-2.9-1.6-3.7-3ZM111.6,210.9c-.1-.2-.3-.3-.4-.5-.3-9.8-.3-20.6,0-31.3h16.8v27.8l-16.4,4.1s0-.1,0-.1ZM136.5,375.3c-8.5-11.7-13.8-25.4-15.3-39.7,0-7.9-.8-19.7-1.9-32.3,0-.5,0-1-.1-1.5-1.8-20.5-4.3-42.5-5.6-52.9l22.8,27.4v99.1ZM117.8,227.1l19.2-4.8,60.4,7.5,5.8,34.7h-54.2l-31.2-37.4ZM145.1,206.1v-26.9h28.8l16.2,32.5-45-5.6ZM193,179.2h42.5l-28.3,28.5-14.2-28.5ZM153.6,291.9l48.2,42.1-18.3,24.4h-29.9v-66.5ZM165.3,409.9c-1.8-1.7-3.6-3.4-5.3-5-2-2.1-4.2-4.4-6.4-7v-22.5h29.9l16.2,21.6-34.4,12.9ZM217.8,455.1c-9.4-9.1-19.3-17.7-29.6-25.8-2.7-2.2-5.5-4.5-8.2-6.7l29.5-11,31.8,57.2c-9-2.1-17.2-6.9-23.5-13.7ZM247.5,444.9l-19.6-35.3h19.6v35.3ZM247.5,392.5h-29.9l-19.2-25.6,19.2-25.6h29.9v51.2ZM247.5,324.3h-30.9l-48.8-42.7h43.3l36.3,14.5v28.1h0ZM247.5,277.7l-26.5-10.6-7-42.1,33.5-33.7v86.4h0ZM112.1,162.1c.4-13.9,3.2-27.6,8.3-40.5,15-30.5,62.1-79,124.3-79h22.7c62.2,0,109.3,48.4,124.3,79,5,12.9,7.8,26.6,8.3,40.5H112.1ZM366.9,179.2v26.9l-45,5.6,16.2-32.5h28.8ZM264.5,324.3v-28.1l36.3-14.5h43.3l-48.8,42.7h-30.9ZM313.6,366.9l-19.2,25.6h-29.9v-51.2h29.9l19.2,25.6ZM264.5,277.7v-86.4l33.5,33.7-7,42.1-26.5,10.6ZM276.5,179.2h42.5l-14.2,28.5-28.3-28.5ZM264.5,444.9v-35.3h19.6l-19.6,35.3ZM323.8,429.4h0c-10.3,8.1-20.2,16.7-29.6,25.8-6.3,6.8-14.5,11.6-23.5,13.7l31.8-57.2,29.5,11c-2.7,2.2-5.5,4.5-8.2,6.7ZM358.4,398c-2.2,2.5-4.4,4.9-6.4,6.9-1.6,1.7-3.4,3.4-5.3,5l-34.4-12.9,16.2-21.6h29.9v22.5ZM358.4,358.4h-29.9l-18.3-24.4,48.2-42.1v66.5h0ZM362.9,264.5h-54.2l5.8-34.7,60.4-7.5,19.2,4.8-31.2,37.4ZM392.8,301.7c0,.5-.1,1-.1,1.5-1.1,12.6-1.9,24.4-1.9,32.3-1.5,14.4-6.8,28.1-15.3,39.7v-99.1l22.8-27.4c-1.3,10.6-3.8,32.5-5.6,52.9ZM400.8,210.5c-.1.2-.3.3-.4.5,0,0,0,.1,0,.1l-16.4-4.1v-27.8h16.8c.3,10.7.3,21.4,0,31.3ZM424.8,213.4h0c3-.4,6,.7,8.1,2.8,2.6,4.7,3.2,10.3,1.7,15.5-2.1,10.5-5,20.8-8.9,30.8l-1.5,4.2c-1.1,3.3-2.1,6.7-3,10.1-1.4,6.6-3.8,12.9-7.3,18.7-.8,1.4-2.2,2.5-3.8,3,2.4-26.1,5.8-53.8,5.9-54.4.1-1.3,1.1-12.2,1.6-27.4,2-1.8,4.4-3,7.1-3.4Z"/>
</svg>

After

Width:  |  Height:  |  Size: 4.2 KiB

@ -0,0 +1,11 @@
<svg xmlns="http://www.w3.org/2000/svg" width="31" height="31" viewBox="0 0 31 31">
<g id="route" transform="translate(0 0)">
<path id="Path_5246" data-name="Path 5246" d="M365.505,13.407a.908.908,0,0,0,1.641,0l3.284-6.914a4.544,4.544,0,1,0-8.209,0Zm.82-9.774a.908.908,0,1,1-.908.908A.908.908,0,0,1,366.326,3.633Z" transform="translate(-339.874)" fill="#da4a54"/>
<circle id="Ellipse_225" data-name="Ellipse 225" cx="1.5" cy="1.5" r="1.5" transform="translate(16 24)" fill="#2e303a"/>
<path id="Path_5247" data-name="Path 5247" d="M176.087,206.357a2.27,2.27,0,0,1,0-4.541h9.366L184.59,200h-8.5a4.087,4.087,0,0,0,0,8.174h5.11a3.644,3.644,0,0,1,0-1.816Z" transform="translate(-161.586 -187.891)" fill="#2e303a"/>
<circle id="Ellipse_226" data-name="Ellipse 226" cx="2" cy="2" r="2" transform="translate(21 17)" fill="#2e303a"/>
<path id="Path_5248" data-name="Path 5248" d="M351.059,305h-.206a3.644,3.644,0,0,1,0,1.816h.206a2.331,2.331,0,0,1,0,4.662H345.1a3.645,3.645,0,0,1,0,1.816h5.958a4.147,4.147,0,0,0,0-8.295Z" transform="translate(-324.206 -286.533)" fill="#2e303a"/>
<path id="Path_5249" data-name="Path 5249" d="M167.02,412l.795,1.816h2.952a3.644,3.644,0,0,1,0-1.816Z" transform="translate(-156.907 -387.055)" fill="#2e303a"/>
<path id="Path_5250" data-name="Path 5250" d="M5.982,322.476a.908.908,0,0,0-1.664,0L.08,332.164a.908.908,0,0,0,1.283,1.153l3.788-2.164,3.788,2.164a.908.908,0,0,0,1.283-1.153Z" transform="translate(0 -302.44)" fill="#2e303a"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.0 KiB

@ -0,0 +1 @@
<svg id="Icon" viewBox="0 0 60 60" xmlns="http://www.w3.org/2000/svg"><circle cx="30" cy="30" fill="#e3ebf0" r="29"/><path d="m19.41 19.41c-2.32 2.3-3.89 5.37-4.3 8.79-.13 1.02-.96 1.8-1.99 1.8h-6.03c-1.16 0-2.1-.99-2-2.15.52-6.03 3.19-11.47 7.24-15.52l1.67-.33 5 4z" fill="#54afa4"/><path d="m30 5 1 2v6l-1 2c-4.13 0-7.88 1.68-10.59 4.41l-7.08-7.08c4.53-4.53 10.78-7.33 17.67-7.33z" fill="#68cec5"/><path d="m47.67 12.33.322 1.671-4.992 4.999-2.4.41h-.01c-2.71-2.73-6.45-4.41-10.59-4.41v-10c6.89 0 13.14 2.8 17.67 7.33z" fill="#f9d84b"/><path d="m54.91 27.85c.1 1.16-.84 2.15-2 2.15h-6.03c-1.03 0-1.86-.78-1.99-1.8-.41-3.41-1.97-6.48-4.29-8.79l7.07-7.08c4.05 4.05 6.72 9.49 7.24 15.52z" fill="#f9536b"/><path d="m44.851 16.308c-2.578 3.935-7.307 10.699-12.38 15.772-1.42 1.42-3.831 1.242-4.99-.543-.846-1.284-.585-2.985.501-4.071 5.073-5.052 11.795-9.75 15.71-12.317.762-.511 1.66.397 1.159 1.159z" fill="#4d5c7a"/><g fill="#262626"><path d="m52.907 31c.842 0 1.652-.356 2.223-.979.563-.613.846-1.437.774-2.26-.52-6.072-3.192-11.804-7.527-16.139-4.916-4.916-11.442-7.623-18.377-7.623-13.385 0-24.764 10.437-25.904 23.76-.071.824.212 1.648.774 2.262.571.622 1.381.979 2.223.979h6.031c1.514 0 2.793-1.152 2.977-2.68.843-7.023 6.818-12.32 13.899-12.32 2.708 0 5.28.763 7.52 2.206-3.316 2.42-7.096 5.418-10.244 8.554-1.446 1.445-1.711 3.686-.633 5.321.705 1.088 1.837 1.788 3.105 1.922.149.016.299.023.447.023 1.115 0 2.183-.439 2.982-1.239 3.162-3.161 6.182-6.966 8.615-10.302 1.131 1.762 1.858 3.753 2.107 5.835.182 1.527 1.461 2.68 2.976 2.68h6.031zm-23.907-24.951v7.998c-3.642.227-6.984 1.666-9.583 3.957l-5.631-5.631c4.07-3.741 9.413-6.078 15.213-6.324zm-14.886 22.034c-.063.532-.48.918-.99.918h-6.031c-.283 0-.557-.12-.749-.33-.188-.205-.279-.468-.256-.739.466-5.437 2.784-10.349 6.287-14.142l5.637 5.637c-2.083 2.357-3.498 5.333-3.898 8.656zm16.886-14.041v-8.018c5.694.233 11.038 2.45 15.239 6.323l-1.715 1.715c-.465-.098-.958-.032-1.38.251-1.065.698-2.409 1.603-3.9 2.656-2.437-1.744-5.254-2.746-8.243-2.928zm.764 17.332c-.479.478-1.13.709-1.807.641-.675-.071-1.256-.434-1.641-1.026-.562-.854-.405-2.036.372-2.812 4.791-4.772 11.129-9.254 14.887-11.751-2.5 3.767-7.006 10.143-11.812 14.948zm14.123-3.29c-.317-2.644-1.303-5.16-2.852-7.329 1.05-1.489 1.953-2.831 2.651-3.896.279-.425.344-.916.249-1.379l1.704-1.704c3.593 3.905 5.822 8.885 6.273 14.157.023.271-.067.532-.256.737-.192.21-.466.33-.749.33h-6.031c-.51 0-.927-.385-.989-.917z"/><path d="m30 0c-6.367 0-12.448 1.969-17.587 5.693-.447.324-.547.949-.223 1.396s.948.548 1.396.223c4.795-3.476 10.471-5.312 16.413-5.312 15.439 0 28 12.561 28 28s-12.561 28-28 28-27.999-12.561-27.999-28c0-7.737 3.086-14.938 8.689-20.276.4-.381.416-1.014.034-1.413-.381-.402-1.015-.415-1.413-.034-6.003 5.718-9.31 13.433-9.31 21.723 0 16.542 13.458 30 30 30s30-13.458 30-30-13.458-30-30-30z"/><path d="m33 50c.553 0 1-.447 1-1v-10c0-.464-.319-.866-.771-.974-.45-.106-.917.111-1.124.526l-2.105 4.211-2.105-4.211c-.207-.415-.677-.632-1.124-.526-.451.107-.771.51-.771.974v10c0 .553.447 1 1 1s1-.447 1-1v-5.764l1.105 2.211c.34.678 1.449.678 1.789 0l1.105-2.211v5.764c0 .553.447 1 1 1z"/><path d="m44 40c.553 0 1-.447 1-1s-.447-1-1-1h-6c-.553 0-1 .447-1 1s.447 1 1 1h2v8h-2c-.553 0-1 .447-1 1s.447 1 1 1h6c.553 0 1-.447 1-1s-.447-1-1-1h-2v-8z"/><path d="m23 41.5c0-1.93-1.57-3.5-3.5-3.5h-3.5c-.553 0-1 .447-1 1v10c0 .553.447 1 1 1h3.5c1.93 0 3.5-1.57 3.5-3.5 0-.98-.407-1.864-1.058-2.5.651-.636 1.058-1.52 1.058-2.5zm-2 5c0 .827-.673 1.5-1.5 1.5h-2.5v-3h2.5c.827 0 1.5.673 1.5 1.5zm-4-3.5v-3h2.5c.827 0 1.5.673 1.5 1.5s-.673 1.5-1.5 1.5z"/></g></svg>

After

Width:  |  Height:  |  Size: 3.5 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.5 KiB

@ -0,0 +1,6 @@
<svg fill="none" height="26" viewBox="0 0 26 26" width="26" xmlns="http://www.w3.org/2000/svg">
<circle cx="13" cy="13" fill="#EDF0EF" r="13" />
<path
d="M18.6947 8.71929L14.4018 13.0123L18.6947 17.3053C18.7902 17.3975 18.8664 17.5079 18.9188 17.6299C18.9712 17.7519 18.9988 17.8831 19 18.0159C19.0011 18.1487 18.9758 18.2803 18.9255 18.4032C18.8753 18.5261 18.801 18.6378 18.7071 18.7317C18.6132 18.8256 18.5016 18.8998 18.3787 18.9501C18.2558 19.0004 18.1241 19.0257 17.9913 19.0245C17.8585 19.0234 17.7273 18.9958 17.6053 18.9434C17.4833 18.891 17.373 18.8148 17.2807 18.7193L12.9877 14.4264L8.69471 18.7193C8.50611 18.9014 8.25351 19.0022 7.99131 19C7.72911 18.9977 7.4783 18.8925 7.29289 18.7071C7.10749 18.5217 7.00232 18.2709 7.00004 18.0087C6.99776 17.7465 7.09855 17.4939 7.28071 17.3053L11.5736 13.0123L7.28071 8.71929C7.09855 8.53069 6.99776 8.27808 7.00004 8.01589C7.00232 7.75369 7.10749 7.50288 7.29289 7.31747C7.4783 7.13206 7.72911 7.02689 7.99131 7.02461C8.25351 7.02234 8.50611 7.12313 8.69471 7.30529L12.9877 11.5982L17.2807 7.30529C17.373 7.20978 17.4833 7.1336 17.6053 7.08119C17.7273 7.02878 17.8585 7.00119 17.9913 7.00004C18.1241 6.99888 18.2558 7.02419 18.3787 7.07447C18.5016 7.12475 18.6132 7.199 18.7071 7.29289C18.801 7.38679 18.8753 7.49844 18.9255 7.62133C18.9758 7.74423 19.0011 7.87591 19 8.00869C18.9988 8.14147 18.9712 8.27269 18.9188 8.39469C18.8664 8.5167 18.7902 8.62704 18.6947 8.71929Z"
fill="black" />
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 9.9 KiB

@ -0,0 +1 @@
<svg id="Layer_3" enable-background="new 0 0 64 64" height="512" viewBox="0 0 64 64" width="512" xmlns="http://www.w3.org/2000/svg"><g><path d="m62 22.04c0 2.92-.42 5.82-1.24 8.59-.82 2.78-2.04 5.43-3.63 7.89-4.02 6.22-9.57 11.29-16.12 14.74l-9.01 4.74-9.01-4.74c-6.55-3.45-12.1-8.52-16.12-14.74-.73-1.14-1.39-2.31-1.96-3.52h11.16l.93-1 6 13 5-18 4 6h9.55c.7 1.19 1.97 2 3.45 2 2.21 0 4-1.79 4-4s-1.79-4-4-4c-1.48 0-2.75.81-3.45 2h-7.55l-7-12-5 17-5-10-3.07 5h-10.57c-.05-.12-.08-.25-.12-.37-.82-2.77-1.24-5.67-1.24-8.59 0-2.66.62-5.28 1.81-7.65 1.29-2.57 3.24-4.67 5.59-6.12 2.36-1.46 5.1-2.27 7.98-2.27 3.18 0 6.2 1 8.7 2.74 2.49 1.75 4.46 4.25 5.55 7.25l.37 1.01.37-1.01c1.09-3 3.06-5.5 5.55-7.25 2.5-1.74 5.52-2.74 8.7-2.74 2.88 0 5.62.81 7.98 2.27 2.35 1.45 4.3 3.55 5.59 6.12 1.19 2.37 1.81 4.99 1.81 7.65z" fill="#ea3647"/><path d="m54.6 8.27c-2.36-1.46-5.1-2.27-7.98-2.27-3.18 0-6.2 1-8.7 2.74-2.49 1.75-4.46 4.25-5.55 7.25l-.37 1.01-.37-1.01c-1.09-3-3.06-5.5-5.55-7.25-2.5-1.74-5.52-2.74-8.7-2.74-.041 0-.081.004-.122.004-1.452 3.72-2.258 7.762-2.258 11.996 0 3.177.452 6.249 1.29 9.156l.71-1.156 5 10 5-17 7 12h7.55c.7-1.19 1.97-2 3.45-2 2.21 0 4 1.79 4 4s-1.79 4-4 4c-1.48 0-2.75-.81-3.45-2h-9.55l-4-6-3.404 12.255c5.315 5.347 12.449 8.885 20.397 9.603 4.822-3.246 8.962-7.425 12.137-12.338 1.59-2.46 2.81-5.11 3.63-7.89.82-2.77 1.24-5.67 1.24-8.59 0-2.66-.62-5.28-1.81-7.65-1.29-2.57-3.24-4.67-5.59-6.12z" fill="#fd505b"/><path d="m44.941 11.534c.574-2.063 6.032-2.742 10.097 1.296s3.39 9.503 1.284 10.087-4.416-2.006-6.887-4.505c-2.47-2.5-5.068-4.815-4.494-6.878z" fill="#ff9aa5"/><path d="m55.126 7.419c-2.558-1.582-5.499-2.419-8.506-2.419-3.321 0-6.527 1.01-9.275 2.922-2.323 1.633-4.15 3.811-5.345 6.354-1.195-2.545-3.022-4.723-5.349-6.356-2.744-1.91-5.95-2.92-9.271-2.92-3.007 0-5.948.837-8.505 2.419-2.544 1.569-4.604 3.825-5.959 6.522-1.254 2.497-1.916 5.298-1.916 8.099 0 3.018.431 6.003 1.292 8.906l.029.097c.034.116.07.234.118.347.157.37.52.61.921.61h10.57c.348 0 .67-.181.853-.477l2.128-3.467 4.195 8.391c.185.368.565.592.983.549.409-.036.755-.319.87-.714l4.346-14.774 5.831 9.996c.179.308.509.496.864.496h7.55c.354 0 .683-.188.862-.493.555-.944 1.523-1.507 2.588-1.507 1.654 0 3 1.346 3 3s-1.346 3-3 3c-1.065 0-2.033-.563-2.588-1.507-.18-.305-.508-.493-.862-.493h-9.015l-3.703-5.555c-.217-.325-.601-.499-.99-.433-.386.062-.7.343-.806.72l-4.271 15.374-4.857-10.525c-.14-.303-.421-.516-.751-.568-.321-.054-.663.062-.89.307l-.632.68h-10.725c-.343 0-.661.175-.845.465-.184.289-.206.651-.06.962.563 1.196 1.244 2.419 2.024 3.636 4.098 6.341 9.801 11.557 16.494 15.082l9.01 4.74c.147.077.307.115.467.115s.32-.038.466-.115l9.01-4.74c6.693-3.525 12.396-8.741 16.494-15.082 1.644-2.543 2.905-5.285 3.749-8.148.85-2.872 1.281-5.857 1.281-8.875 0-2.801-.662-5.602-1.916-8.099-1.355-2.697-3.415-4.953-5.958-6.522zm4.675 22.929c-.79 2.68-1.972 5.247-3.511 7.629-3.911 6.054-9.356 11.032-15.746 14.398l-8.544 4.495-8.544-4.495c-6.39-3.366-11.835-8.345-15.744-14.396-.423-.66-.816-1.322-1.173-1.979h9.531c.236 0 .464-.084.644-.234l5.378 11.653c.176.38.556.608.989.578.418-.034.771-.325.883-.729l4.415-15.896 2.789 4.184c.186.277.498.444.832.444h9.017c.947 1.263 2.397 2 3.983 2 2.757 0 5-2.243 5-5s-2.243-5-5-5c-1.586 0-3.036.737-3.983 2h-6.442l-6.71-11.504c-.201-.345-.582-.54-.985-.489-.396.049-.726.328-.838.711l-4.283 14.562-3.863-7.727c-.162-.325-.488-.536-.851-.552-.364-.031-.706.166-.896.476l-2.779 4.523h-9.271c-.73-2.58-1.099-5.256-1.099-7.96 0-2.491.589-4.981 1.703-7.202 1.188-2.365 2.994-4.343 5.224-5.718 2.241-1.387 4.818-2.12 7.453-2.12 2.911 0 5.722.886 8.125 2.559 2.394 1.682 4.187 4.023 5.187 6.775l.37 1.01c.143.394.518.656.938.656s.795-.262.938-.656l.371-1.012c.999-2.75 2.792-5.092 5.182-6.771 2.407-1.675 5.218-2.561 8.129-2.561 2.635 0 5.212.733 7.454 2.12 2.229 1.375 4.035 3.353 5.223 5.718 1.114 2.221 1.703 4.711 1.703 7.202 0 2.825-.403 5.619-1.199 8.308z"/></g></svg>

After

Width:  |  Height:  |  Size: 3.8 KiB

@ -0,0 +1,122 @@
<svg fill="none" height="349" viewBox="0 0 255 349" width="255" xmlns="http://www.w3.org/2000/svg">
<path
d="M127.925 39.5534C129.2 39.5534 130.05 38.39 130.05 36.645V2.90833C130.05 1.16333 129.2 0 127.925 0C126.65 0 125.8 1.16333 125.8 2.90833V36.645C125.8 38.39 126.65 39.5534 127.925 39.5534Z"
fill="#FFFCFC" />
<path
d="M26.775 172.173H2.125C0.85 172.173 0 173.337 0 175.082C0 176.827 0.85 177.99 2.125 177.99H26.775C28.05 177.99 28.9 176.827 28.9 175.082C28.9 173.337 28.05 172.173 26.775 172.173Z"
fill="#FFFCFC" />
<path
d="M3.40026 204.747C3.82526 204.747 3.82526 204.747 3.40026 204.747L28.0503 199.512C29.3253 199.512 30.1753 197.767 29.7503 196.022C29.7503 194.277 28.4753 193.113 27.2003 193.695L2.97526 198.93C1.70026 198.93 0.850259 200.675 1.27526 202.42C1.70026 204.165 2.55026 204.747 3.40026 204.747Z"
fill="#FFFCFC" />
<path
d="M107.1 1.1633C105.825 1.1633 104.975 2.90831 105.4 4.65331L109.225 37.8083C109.225 38.9716 110.5 40.135 111.35 40.135H111.775C113.05 40.135 113.9 38.39 113.475 36.645L109.65 3.48997C109.225 1.74497 108.375 0.581636 107.1 1.1633Z"
fill="#FFFCFC" />
<path
d="M87.5498 7.56175C86.2748 8.14342 85.8498 9.88841 86.2748 11.0517L93.9248 43.0434C94.3498 44.2068 95.1998 44.7884 96.0498 44.7884C96.4748 44.7884 96.4748 44.7884 96.8998 44.7884C98.1748 44.2068 98.5998 42.4618 98.1748 41.2984L90.5248 9.30675C89.6748 7.56175 88.8248 6.98009 87.5498 7.56175Z"
fill="#FFFCFC" />
<path
d="M71.8252 19.195C71.4002 18.0316 70.1252 17.45 68.8502 18.0316C68.0002 18.6133 67.5752 20.3583 68.0002 22.1033L79.0502 52.35C79.4752 53.5133 80.3252 54.095 80.7502 54.095C81.1752 54.095 81.6002 54.095 81.6002 53.5133C82.4502 52.9316 82.8752 51.1866 82.4502 49.4416L71.8252 19.195Z"
fill="#FFFCFC" />
<path
d="M51.8499 32.5733C50.9999 33.7366 50.5749 35.4816 51.4249 36.645L65.8749 63.9833C66.2999 64.565 66.7249 65.1466 67.5749 65.1466C67.9999 65.1466 68.4249 65.1466 68.8499 64.565C69.6999 63.4016 70.1249 61.6566 69.2749 60.4933L54.8249 33.155C53.9749 31.41 52.6999 31.4099 51.8499 32.5733Z"
fill="#FFFCFC" />
<path
d="M53.9752 77.9434C54.4002 78.5251 54.8252 78.5251 55.6752 78.5251C56.5252 78.5251 56.9502 78.5251 57.3752 77.9434C58.2252 76.7801 58.2252 75.0351 57.3752 73.8718L39.9502 50.0234C39.1002 48.8601 37.8252 48.8601 36.9752 50.0234C36.1252 51.1868 36.1252 52.9318 36.9752 54.0951L53.9752 77.9434Z"
fill="#FFFCFC" />
<path
d="M26.35 70.3818C25.5 69.2184 24.225 69.8001 23.375 70.9634C22.525 72.1268 22.95 73.8718 23.8 75.0351L43.775 94.8118C44.2 95.3934 44.625 95.3934 45.05 95.3934C45.9 95.3934 46.325 94.8118 46.75 94.2301C47.6 93.0668 47.175 91.3218 46.325 90.1584L26.35 70.3818Z"
fill="#FFFCFC" />
<path
d="M13.1751 94.8116C12.7501 95.975 13.1751 97.72 14.0251 98.8833L36.1251 114.007C36.5501 114.007 36.9751 114.588 36.9751 114.588C37.8251 114.588 38.6751 114.007 38.6751 112.843C39.1001 111.68 38.6751 109.935 37.8251 108.772L15.7251 93.6483C14.8751 92.485 13.6001 93.0666 13.1751 94.8116Z"
fill="#FFFCFC" />
<path
d="M5.52515 119.823C5.10015 121.568 5.95015 122.732 6.80015 123.313L30.1752 133.783C30.6002 133.783 30.6002 133.783 31.0252 133.783C31.8752 133.783 32.7252 133.202 33.1502 132.038C33.5752 130.293 32.7252 129.13 31.8752 128.548L8.50015 118.078C6.80015 117.497 5.52515 118.66 5.52515 119.823Z"
fill="#FFFCFC" />
<path
d="M0.849792 146.58C0.849792 148.325 1.27479 149.488 2.54979 150.07L26.7748 155.305H27.1998C28.0498 155.305 29.3248 154.142 29.3248 152.978C29.3248 151.233 28.8998 150.07 27.6248 149.488L3.39979 144.253C2.12479 144.253 0.849792 144.835 0.849792 146.58Z"
fill="#FFFCFC" />
<path
d="M7.22479 230.34C7.64979 230.34 7.64979 230.34 8.07479 230.34L31.4498 219.87C32.7248 219.288 33.1498 217.543 32.7248 216.38C32.2998 214.635 31.0248 214.053 30.1748 214.635L6.79979 225.105C5.52479 225.687 5.09979 227.432 5.52479 228.595C5.52479 229.177 6.37479 230.34 7.22479 230.34Z"
fill="#FFFCFC" />
<path
d="M14.8751 255.352C15.3001 255.352 15.7251 255.352 15.7251 254.77L37.8251 239.647C38.6751 239.065 39.1001 237.32 38.6751 235.575C38.2501 234.412 36.9751 233.83 35.7001 234.412L13.6001 249.535C13.1751 250.698 12.7501 252.443 13.1751 253.607C13.6001 254.77 14.0251 255.352 14.8751 255.352Z"
fill="#FFFCFC" />
<path
d="M47.1749 253.607C46.3249 252.443 45.0499 251.862 44.1999 253.025L24.2249 272.802C23.3749 273.965 22.9499 275.71 23.7999 276.873C24.2249 277.455 24.6499 278.037 25.4999 278.037C25.9249 278.037 26.3499 278.037 26.7749 277.455L46.7499 257.678C47.5999 257.097 47.5999 255.352 47.1749 253.607Z"
fill="#FFFCFC" />
<path
d="M38.2502 298.977C38.6752 298.977 39.5252 298.977 39.9502 298.395L57.3752 274.547C58.2252 273.383 58.2252 271.638 57.3752 270.475C56.5252 269.312 55.2502 269.312 54.4002 270.475L36.9752 294.323C36.1252 295.487 36.1252 297.232 36.9752 298.395C36.9752 298.395 37.4002 298.977 38.2502 298.977Z"
fill="#FFFCFC" />
<path
d="M51.8499 315.845C52.2749 316.427 52.6999 316.427 53.1249 316.427C53.9749 316.427 54.3999 315.845 54.8249 315.263L69.2749 287.925C70.1249 286.762 69.6999 285.017 68.8499 283.853C67.9999 282.69 66.7249 283.272 65.8749 284.435L51.4249 311.773C50.5749 312.937 50.9999 314.682 51.8499 315.845Z"
fill="#FFFCFC" />
<path
d="M69.2751 330.387C69.7001 330.387 70.1251 330.968 70.1251 330.968C70.9751 330.968 71.8251 330.387 71.8251 329.223L82.8751 298.977C83.3001 297.813 82.8751 296.068 82.0251 294.905C81.1751 294.323 79.9001 294.905 79.0501 296.068L68.0001 326.315C67.5751 327.478 68.0001 329.223 69.2751 330.387Z"
fill="#FFFCFC" />
<path
d="M96.4752 303.048C95.2002 302.467 94.3502 303.63 93.9252 304.793L86.2752 336.785C85.8502 338.53 86.7002 339.693 87.5502 340.275C87.9752 340.275 87.9752 340.275 88.4002 340.275C89.2502 340.275 90.1002 339.693 90.5252 338.53L98.1752 306.538C98.1752 305.375 97.7502 303.63 96.4752 303.048Z"
fill="#FFFCFC" />
<path
d="M111.775 307.702C110.5 307.702 109.65 308.283 109.225 310.028L105.4 343.765C105.4 345.51 105.825 346.673 107.1 347.255H107.525C108.375 347.255 109.65 346.092 109.65 344.928L113.475 311.773C113.475 309.447 113.05 308.283 111.775 307.702Z"
fill="#FFFCFC" />
<path
d="M129.2 346.092V312.355C129.2 310.61 128.35 309.447 127.075 309.447C125.8 309.447 124.95 310.61 124.95 312.355V346.092C124.95 347.837 125.8 349 127.075 349C128.35 349 129.2 347.837 129.2 346.092Z"
fill="#FFFCFC" />
<path
d="M147.05 347.255C148.75 347.255 149.175 345.51 149.175 343.765L144.925 310.61C144.925 308.865 143.65 307.702 142.375 308.283C141.1 308.283 140.25 310.028 140.675 311.773L144.5 344.928C144.925 346.092 145.775 347.255 147.05 347.255Z"
fill="#FFFCFC" />
<path
d="M166.175 340.857C166.6 340.857 166.6 340.857 167.025 340.857C168.3 340.275 168.725 338.53 168.3 337.367L160.65 305.375C160.225 303.048 158.95 302.467 157.675 303.048C156.4 303.63 155.975 305.375 156.4 306.538L164.05 338.53C164.475 340.275 165.325 340.857 166.175 340.857Z"
fill="#FFFCFC" />
<path
d="M182.325 328.642C182.75 329.805 183.6 330.387 184.025 330.387C184.45 330.387 184.875 330.387 184.875 329.805C185.725 329.223 186.15 327.478 185.725 325.733L174.675 295.487C174.25 294.323 172.975 293.742 171.7 294.323C170.85 294.905 170.425 296.65 170.85 298.395L182.325 328.642Z"
fill="#FFFCFC" />
<path
d="M201.025 316.427C201.45 316.427 201.875 316.427 202.3 315.845C203.15 314.682 203.575 312.937 202.725 311.773L188.275 284.435C187.425 283.272 186.15 282.69 185.3 283.853C184.45 285.017 184.025 286.762 184.875 287.925L199.325 315.263C199.75 315.845 200.6 316.427 201.025 316.427Z"
fill="#FFFCFC" />
<path
d="M216.325 298.977C216.75 298.977 217.599 298.977 218.024 298.395C218.874 297.232 218.874 295.487 218.024 294.323L200.174 269.893C199.324 268.73 198.05 268.73 197.2 269.893C196.35 271.057 196.35 272.802 197.2 273.965L214.625 297.813C215.05 298.395 215.475 298.977 216.325 298.977Z"
fill="#FFFCFC" />
<path
d="M229.075 278.037C229.925 278.037 230.35 277.455 230.775 276.873C231.625 275.71 231.2 273.965 230.35 272.802L210.375 253.025C209.525 251.862 208.25 252.443 207.4 253.607C206.55 254.77 206.975 256.515 207.825 257.678L227.8 277.455C228.225 278.037 228.65 278.037 229.075 278.037Z"
fill="#FFFCFC" />
<path
d="M239.275 255.352C240.125 255.352 240.975 254.77 240.975 253.607C241.4 252.443 240.975 250.698 240.125 249.535L218.025 234.412C217.175 233.83 215.9 234.412 215.05 235.575C214.625 236.738 215.05 238.483 215.9 239.647L238 254.77C238.85 254.77 238.85 255.352 239.275 255.352Z"
fill="#FFFCFC" />
<path
d="M246.925 230.34C247.775 230.34 248.625 229.758 249.05 228.595C249.475 226.85 248.625 225.687 247.775 225.105L224.4 214.635C223.125 214.053 222.275 215.217 221.85 216.38C221.425 218.125 222.275 219.288 223.125 219.87L246.5 230.34C246.5 230.34 246.5 230.34 246.925 230.34Z"
fill="#FFFCFC" />
<path
d="M251.601 203.583C252.451 203.583 253.726 202.42 253.726 201.257C253.726 199.512 253.301 198.348 252.026 197.767L227.376 192.532C226.101 192.532 225.251 193.113 224.826 194.858C224.401 196.603 225.676 198.348 226.951 198.348L251.601 203.583Z"
fill="#FFFCFC" />
<path
d="M255 173.918C255 172.173 254.15 171.01 252.875 171.01H228.225C226.95 171.01 226.1 172.173 226.1 173.918C226.1 175.663 226.95 176.827 228.225 176.827H252.875C254.15 176.827 255 175.663 255 173.918Z"
fill="#FFFCFC" />
<path
d="M224.825 152.978C224.825 154.142 226.1 155.305 226.95 155.305H227.375L251.6 150.07C252.875 150.07 253.725 148.325 253.3 146.58C253.3 144.835 252.025 143.672 250.75 144.253L226.525 149.488C225.675 149.488 224.825 151.233 224.825 152.978Z"
fill="#FFFCFC" />
<path
d="M246.075 118.078L222.7 128.548C221.425 129.13 221 130.875 221.425 132.038C221.85 133.202 222.7 133.783 223.55 133.783C223.975 133.783 223.975 133.783 224.4 133.783L247.775 123.313C249.05 122.732 249.475 120.987 249.05 119.823C248.625 118.078 247.35 117.497 246.075 118.078Z"
fill="#FFFCFC" />
<path
d="M238.425 93.0668L216.325 108.19C215.475 108.772 215.05 110.517 215.475 112.262C215.9 113.425 216.75 114.007 217.175 114.007C217.6 114.007 218.025 114.007 218.025 113.425L240.125 98.3017C240.975 97.7201 241.4 95.9751 240.975 94.2301C240.55 93.0667 239.275 92.4851 238.425 93.0668Z"
fill="#FFFCFC" />
<path
d="M207.4 94.2301C207.825 94.8118 208.25 95.3934 209.1 95.3934C209.525 95.3934 209.95 95.3934 210.375 94.8118L230.35 75.0351C231.2 73.8718 231.625 72.1268 230.775 70.9634C229.925 69.8001 228.65 69.2184 227.8 70.3818L207.825 90.1584C206.975 91.3218 206.55 93.0668 207.4 94.2301Z"
fill="#FFFCFC" />
<path
d="M214.625 50.0234L197.2 73.8718C196.35 75.0351 196.35 76.7801 197.2 77.9434C197.625 78.5251 198.049 78.5251 198.899 78.5251C199.749 78.5251 200.174 78.5251 200.599 77.9434L218.024 54.0951C218.874 52.9318 218.874 51.1868 218.024 50.0234C217.174 48.8601 215.475 48.8601 214.625 50.0234Z"
fill="#FFFCFC" />
<path
d="M199.325 33.155L184.875 60.4933C184.025 61.6566 184.45 63.4016 185.3 64.565C185.725 65.1466 186.15 65.1466 186.575 65.1466C187.425 65.1466 187.85 64.565 188.275 63.9833L202.725 36.645C203.575 35.4816 203.15 33.7366 202.3 32.5733C201.45 31.4099 200.175 31.41 199.325 33.155Z"
fill="#FFFCFC" />
<path
d="M185.3 18.0316C184.45 17.45 183.175 18.0316 182.325 19.195L171.275 49.4416C170.85 50.605 171.275 52.35 172.125 53.5133C172.55 53.5133 172.975 54.095 172.975 54.095C173.825 54.095 174.675 53.5133 174.675 52.35L185.725 22.1033C186.575 20.3583 186.15 18.6133 185.3 18.0316Z"
fill="#FFFCFC" />
<path
d="M157.675 44.7884C158.1 44.7884 158.1 44.7884 158.525 44.7884C159.375 44.7884 160.225 44.2067 160.65 43.0434L168.3 11.0517C168.725 9.30669 167.875 8.14337 167.025 7.5617C165.75 6.98003 164.9 8.14336 164.475 9.30669L156.4 41.2984C155.975 43.0434 156.825 44.7884 157.675 44.7884Z"
fill="#FFFCFC" />
<path
d="M142.8 40.1351C144.075 40.1351 144.925 38.9717 145.35 37.8084L149.175 4.65339C149.175 2.90839 148.75 1.74506 147.475 1.16339C146.2 1.16339 145.35 1.74506 144.925 3.49006L140.675 36.6451C140.675 38.3901 141.525 39.5534 142.8 40.1351Z"
fill="#FFFCFC" />
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 7.4 KiB

@ -0,0 +1,68 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Capa_1" x="0px" y="0px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve" width="512" height="512">
<g>
<g>
<path style="fill:#D77F4A;" d="M448.268,193.522c0-6.286-2.632-11.957-6.855-15.972c-2.615-2.486-3.009-6.596-0.766-9.422&#10;&#9;&#9;&#9;c2.985-3.76,4.768-8.516,4.768-13.69c0-7.532-3.779-14.18-9.545-18.154c-2.55-1.758-3.507-5.012-2.611-7.976&#10;&#9;&#9;&#9;c0.61-2.017,0.939-4.156,0.939-6.372c0-12.171-9.867-22.038-22.038-22.038c-0.271,0-0.071-6.017-0.74-9.253&#10;&#9;&#9;&#9;c-1.918-9.281-9.745-16.43-19.169-17.43c-1.211-0.128-2.405-0.159-3.575-0.098c-4.869,0.254-8.772-3.822-8.748-8.698&#10;&#9;&#9;&#9;c0-0.048,0-0.096,0-0.144c0-15.711-12.736-28.447-28.447-28.447c-0.174,0-5.572-18.923-21.496-16.566&#10;&#9;&#9;&#9;c-2.241,0.332-4.449,0.35-6.501,0.998c-4.71,1.488-9.938,0.436-13.691-2.776c-3.767-3.224-8.658-5.172-14.005-5.172&#10;&#9;&#9;&#9;c-4.18,0-8.08,1.19-11.383,3.249c-3.962,2.47-8.786,3.357-13.275,2.075c-1.881-0.537-3.868-0.825-5.922-0.825&#10;&#9;&#9;&#9;c-2.476,0-4.854,0.418-7.068,1.187c-4.807,1.67-10.112,0.693-14.313-2.179c-3.457-2.363-7.638-3.745-12.142-3.745&#10;&#9;&#9;&#9;c-4.802,0-9.235,1.571-12.817,4.225c-4.543,3.367-10.438,4.225-15.632,1.989c-2.968-1.278-6.239-1.986-9.676-1.986&#10;&#9;&#9;&#9;c-8.8,0-16.516,4.636-20.841,11.599c-2.887,4.648-7.74,7.748-13.208,7.944c-0.279,0.01-0.558,0.024-0.839,0.042&#10;&#9;&#9;&#9;c-14.402,0.942-26.008,12.822-26.575,27.244c-0.019,0.481-0.026,0.959-0.021,1.434c0.049,4.851-4.092,8.753-8.939,8.542&#10;&#9;&#9;&#9;c-1.105-0.048-2.231-0.015-3.372,0.105c-9.425,0.994-17.256,8.14-19.18,17.42c-0.672,3.24-0.472,9.263-0.743,9.263&#10;&#9;&#9;&#9;c-12.171,0-22.038,9.867-22.038,22.038c0,2.216,0.328,4.355,0.938,6.372c0.897,2.965-0.061,6.219-2.611,7.976&#10;&#9;&#9;&#9;c-5.765,3.974-9.545,10.622-9.545,18.154c0,5.174,1.783,9.93,4.768,13.69c2.243,2.826,1.849,6.936-0.766,9.422&#10;&#9;&#9;&#9;c-4.222,4.014-6.855,9.685-6.855,15.972c0,8.699,5.041,16.216,12.36,19.798c3.401,1.664,4.745,5.766,3.32,9.274&#10;&#9;&#9;&#9;c-1.279,3.149-1.851,6.66-1.517,10.338c0.922,10.154,8.945,18.467,19.054,19.791c2.827,0.37,5.555,0.183,8.114-0.439&#10;&#9;&#9;&#9;c-0.017,0.35-0.027,0.702-0.027,1.057c0,12.171,9.867,22.038,22.038,22.038c5.29,0,10.144-1.866,13.943-4.973&#10;&#9;&#9;&#9;c3.148,8.325,11.189,14.246,20.616,14.246c12.171,0,176.557,0,188.729,0c9.427,0,17.468-5.921,20.616-14.246&#10;&#9;&#9;&#9;c3.798,3.107,8.652,4.973,13.942,4.973c12.171,0,22.038-9.867,22.038-22.038c0-0.354-0.01-0.706-0.027-1.057&#10;&#9;&#9;&#9;c2.57,0.625,5.311,0.811,8.15,0.434c10.11-1.341,18.119-9.671,19.022-19.829c0.325-3.661-0.246-7.155-1.519-10.29&#10;&#9;&#9;&#9;c-1.425-3.51-0.084-7.614,3.318-9.279C443.227,209.738,448.268,202.22,448.268,193.522z"/>
<path style="fill:#FFD15B;" d="M411.446,372.3c-64.616,2.692-95.255-14.6-95.255-14.6l-60.121-11.895l0.003-0.428l-1.084,0.214&#10;&#9;&#9;&#9;l-1.084-0.214l0.003,0.428l-60.121,11.895c0,0-30.64,17.293-95.255,14.6L68.204,499.925h186.784H442.13L411.446,372.3z"/>
<path style="fill:#FFCEBF;" d="M291.728,291.481L291.728,291.481l-73.48,0v0c0,24.283-8.675,47.767-24.462,66.218l1.927,2.216&#10;&#9;&#9;&#9;c4.985,5.734,11.021,10.48,17.819,13.873c25.887,12.92,56.359,13.044,82.306,0.439c7.961-3.867,14.902-9.554,20.352-16.528v0&#10;&#9;&#9;&#9;C300.403,339.248,291.728,315.764,291.728,291.481z"/>
<path style="fill:#D77F4A;" d="M137.497,142.363c3.02,23.928,10.565,42.042,10.565,42.042l215.877,0&#10;&#9;&#9;&#9;c0,0,9.996-14.52,19.282-37.554"/>
<ellipse style="fill:#FFCEBF;" cx="256" cy="197.248" rx="108.427" ry="135.37"/>
<path style="fill:#FFBBAA;" d="M313.264,82.287c19.269,24.435,31.163,57.962,31.163,94.961c0,74.763-48.545,135.37-108.427,135.37&#10;&#9;&#9;&#9;c-21.024,0-40.646-7.478-57.264-20.409c19.667,24.94,47.017,40.409,77.264,40.409c59.883,0,108.427-60.607,108.427-135.37&#10;&#9;&#9;&#9;C364.427,148.733,343.981,106.187,313.264,82.287z"/>
<path style="fill:#D77F4A;" d="M256,56.149c-56.413,0-107.939,58.157-107.939,128.256l0,0c0,0,31.222-60.851,53.686-44.804&#10;&#9;&#9;&#9;c21.226,15.161,38.065,15.919,54.252,15.919c16.187,0,33.026-0.758,54.252-15.919c22.465-16.046,53.686,44.804,53.686,44.804l0,0&#10;&#9;&#9;&#9;C364.427,114.305,312.413,56.149,256,56.149z"/>
<path style="fill:#FFE177;" d="M169.835,248.2l-27.1-10.507l-27.1-10.507c0,0-81.573,129.986-99.523,176.281&#10;&#9;&#9;&#9;s-7.257,79.017,26.618,92.151c33.874,13.134,63.831-3.827,81.781-50.122S169.835,248.2,169.835,248.2z"/>
<path style="fill:#FFCEBF;" d="M124.683,230.694l-1.69-33.678c-0.815-16.248,5.815-31.983,18.013-42.748l46.186-40.76&#10;&#9;&#9;&#9;c2.712-2.394,6.358-3.438,9.926-2.843l0,0c5.794,0.966,10.04,5.979,10.04,11.852v4.179c0,3.777-1.262,7.446-3.585,10.424&#10;&#9;&#9;&#9;l-21.125,29.884c-11.073,15.664-17.019,34.376-17.019,53.559v25.929L124.683,230.694z"/>
<path style="fill:#FFE177;" d="M342.165,248.2l27.1-10.507l27.1-10.507c0,0,81.573,129.986,99.523,176.281&#10;&#9;&#9;&#9;s7.257,79.017-26.618,92.151c-33.874,13.134-63.831-3.827-81.781-50.122C369.539,399.201,342.165,248.2,342.165,248.2z"/>
<path style="fill:#FFD15B;" d="M495.887,403.467c-17.95-46.295-99.523-176.281-99.523-176.281l-24.167,9.37&#10;&#9;&#9;&#9;c18.974,30.625,78.653,128.128,93.69,166.911c17.95,46.295,7.257,79.017-26.617,92.151c-2.073,0.804-4.131,1.491-6.173,2.07&#10;&#9;&#9;&#9;c11.214,3.55,23.415,2.877,36.173-2.07C503.144,482.484,513.837,449.762,495.887,403.467z"/>
<path style="fill:#FFCEBF;" d="M387.317,230.694l1.69-33.678c0.815-16.248-5.815-31.983-18.013-42.748l-46.186-40.76&#10;&#9;&#9;&#9;c-2.712-2.394-6.358-3.438-9.926-2.843l0,0c-5.794,0.966-10.04,5.979-10.04,11.852v4.179c0,3.777,1.262,7.446,3.585,10.424&#10;&#9;&#9;&#9;l21.125,29.884c11.073,15.664,17.019,34.376,17.019,53.559v25.929L387.317,230.694z"/>
</g>
<g>
<path style="fill:none;stroke:#000000;stroke-width:15;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;" d="&#10;&#9;&#9;&#9;M415.086,252.718c10.11-1.341,18.119-9.671,19.022-19.829c0.325-3.661-0.246-7.155-1.519-10.29&#10;&#9;&#9;&#9;c-1.425-3.51-0.084-7.614,3.318-9.279c7.319-3.582,12.36-11.1,12.36-19.798c0-6.286-2.632-11.957-6.855-15.972&#10;&#9;&#9;&#9;c-2.615-2.486-3.009-6.596-0.766-9.422c2.985-3.76,4.768-8.516,4.768-13.69c0-7.532-3.779-14.18-9.545-18.154&#10;&#9;&#9;&#9;c-2.55-1.758-3.507-5.012-2.611-7.976c0.61-2.017,0.939-4.156,0.939-6.372c0-12.171-9.867-22.038-22.038-22.038&#10;&#9;&#9;&#9;c-0.271,0-0.071-6.017-0.74-9.253c-1.918-9.281-9.745-16.43-19.169-17.43c-1.211-0.128-2.405-0.159-3.575-0.098&#10;&#9;&#9;&#9;c-4.869,0.254-8.772-3.822-8.748-8.698c0-0.048,0-0.096,0-0.144c0-15.711-12.736-28.447-28.447-28.447&#10;&#9;&#9;&#9;c-0.174,0-5.572-18.923-21.496-16.566c-2.241,0.332-4.449,0.35-6.501,0.998c-4.71,1.488-9.938,0.436-13.691-2.776&#10;&#9;&#9;&#9;c-3.767-3.224-8.658-5.172-14.005-5.172c-4.18,0-8.08,1.19-11.383,3.249c-3.962,2.47-8.786,3.357-13.275,2.075&#10;&#9;&#9;&#9;c-1.881-0.537-3.868-0.825-5.922-0.825c-2.476,0-4.854,0.418-7.068,1.187c-4.807,1.67-10.112,0.693-14.313-2.179&#10;&#9;&#9;&#9;c-3.457-2.363-7.638-3.745-12.142-3.745c-4.802,0-9.235,1.571-12.817,4.225c-4.543,3.367-10.438,4.225-15.632,1.989&#10;&#9;&#9;&#9;c-2.968-1.278-6.239-1.986-9.676-1.986c-8.8,0-16.516,4.636-20.841,11.599c-2.887,4.648-7.74,7.748-13.208,7.944&#10;&#9;&#9;&#9;c-0.279,0.01-0.558,0.024-0.839,0.042c-14.402,0.942-26.008,12.822-26.575,27.244c-0.019,0.481-0.026,0.959-0.021,1.434&#10;&#9;&#9;&#9;c0.049,4.851-4.092,8.753-8.939,8.542c-1.105-0.048-2.231-0.015-3.372,0.105c-9.425,0.994-17.256,8.14-19.18,17.42&#10;&#9;&#9;&#9;c-0.672,3.24-0.472,9.263-0.743,9.263c-12.171,0-22.038,9.867-22.038,22.038c0,2.216,0.328,4.355,0.938,6.372&#10;&#9;&#9;&#9;c0.897,2.965-0.061,6.219-2.611,7.976c-5.765,3.974-9.545,10.622-9.545,18.154c0,5.174,1.783,9.93,4.768,13.69&#10;&#9;&#9;&#9;c2.243,2.826,1.849,6.936-0.766,9.422c-4.222,4.014-6.855,9.685-6.855,15.972c0,8.699,5.041,16.216,12.36,19.798&#10;&#9;&#9;&#9;c3.401,1.664,4.745,5.766,3.32,9.274c-1.279,3.149-1.851,6.66-1.517,10.338c0.922,10.154,8.945,18.467,19.054,19.791"/>
<path style="fill:none;stroke:#000000;stroke-width:15;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;" d="&#10;&#9;&#9;&#9;M201.748,139.601c21.226,15.161,38.065,15.919,54.252,15.919c16.187,0,33.026-0.758,54.252-15.919"/>
<line style="fill:none;stroke:#000000;stroke-width:15;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;" x1="35.204" y1="223.363" x2="35.204" y2="227.85"/>
<line style="fill:none;stroke:#000000;stroke-width:15;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;" x1="35.204" y1="261.166" x2="35.204" y2="256.678"/>
<line style="fill:none;stroke:#000000;stroke-width:15;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;" x1="53.103" y1="242.264" x2="48.615" y2="242.264"/>
<line style="fill:none;stroke:#000000;stroke-width:15;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;" x1="17.306" y1="242.264" x2="21.794" y2="242.264"/>
<path style="fill:none;stroke:#000000;stroke-width:15;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;" d="&#10;&#9;&#9;&#9;M363.942,370.537c-32.235-4.08-47.751-12.838-47.751-12.838"/>
<line style="fill:none;stroke:#000000;stroke-width:15;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;" x1="374.066" y1="499.925" x2="442.13" y2="499.925"/>
<polyline style="fill:none;stroke:#000000;stroke-width:15;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;" points="&#10;&#9;&#9;&#9;68.204,499.925 254.988,499.925 340.066,499.925 &#9;&#9;"/>
<path style="fill:none;stroke:#000000;stroke-width:15;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;" d="&#10;&#9;&#9;&#9;M193.786,357.699c0,0-15.865,8.954-48.838,12.973"/>
<path style="fill:none;stroke:#000000;stroke-width:15;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;" d="&#10;&#9;&#9;&#9;M212.237,325.956c-4.145,11.522-10.365,22.293-18.45,31.743l1.927,2.216c4.985,5.734,11.021,10.48,17.819,13.873&#10;&#9;&#9;&#9;c25.887,12.92,56.359,13.044,82.306,0.439c7.961-3.867,14.902-9.554,20.352-16.528v0c-8.202-9.586-14.484-20.53-18.627-32.239"/>
<path style="fill:none;stroke:#000000;stroke-width:15;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;" d="&#10;&#9;&#9;&#9;M345.91,272.934c-19.485,36.009-52.483,59.683-89.91,59.683c-37.853,0-71.176-24.217-90.571-60.919"/>
<path style="fill:none;stroke:#000000;stroke-width:15;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;" d="&#10;&#9;&#9;&#9;M61.79,316.421c-19.28,33.219-38.119,67.552-45.678,87.046c-17.95,46.295-7.257,79.017,26.618,92.151&#10;&#9;&#9;&#9;c33.874,13.134,63.831-3.827,81.781-50.122S169.835,248.2,169.835,248.2l-27.1-10.507l-27.1-10.507&#10;&#9;&#9;&#9;c0,0-16.714,26.634-36.675,60.083"/>
<path style="fill:none;stroke:#000000;stroke-width:15;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;" d="&#10;&#9;&#9;&#9;M32.38,16.905l7.925,23.552c1.414,4.203,6.751,5.46,9.892,2.329l8.161-8.135c3.103-3.093,8.368-1.911,9.851,2.212l8.999,25.015"/>
<line style="fill:none;stroke:#000000;stroke-width:15;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;" x1="473.796" y1="233.363" x2="473.796" y2="237.85"/>
<line style="fill:none;stroke:#000000;stroke-width:15;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;" x1="473.796" y1="271.166" x2="473.796" y2="266.678"/>
<line style="fill:none;stroke:#000000;stroke-width:15;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;" x1="455.897" y1="252.264" x2="460.385" y2="252.264"/>
<line style="fill:none;stroke:#000000;stroke-width:15;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;" x1="491.694" y1="252.264" x2="487.206" y2="252.264"/>
<path style="fill:none;stroke:#000000;stroke-width:15;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;" d="&#10;&#9;&#9;&#9;M483.621,16.905l-7.925,23.552c-1.414,4.203-6.751,5.46-9.892,2.329l-8.161-8.135c-3.103-3.093-8.368-1.911-9.851,2.212&#10;&#9;&#9;&#9;l-8.999,25.015"/>
<path style="fill:none;stroke:#000000;stroke-width:15;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;" d="&#10;&#9;&#9;&#9;M124.683,230.694l-1.69-33.678c-0.815-16.248,5.815-31.983,18.013-42.748l46.186-40.76c2.712-2.394,6.358-3.438,9.926-2.843l0,0&#10;&#9;&#9;&#9;c5.794,0.966,10.04,5.979,10.04,11.852v4.179c0,3.777-1.262,7.446-3.585,10.424l-21.125,29.884&#10;&#9;&#9;&#9;c-11.073,15.664-17.019,34.376-17.019,53.559v25.929L124.683,230.694z"/>
<path style="fill:none;stroke:#000000;stroke-width:15;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;" d="&#10;&#9;&#9;&#9;M450.21,316.421c19.28,33.219,38.119,67.552,45.678,87.046c17.95,46.295,7.257,79.017-26.618,92.151&#10;&#9;&#9;&#9;c-33.874,13.134-63.831-3.827-81.781-50.122c-17.95-46.295-45.324-197.296-45.324-197.296l27.1-10.507l27.1-10.507&#10;&#9;&#9;&#9;c0,0,16.714,26.634,36.675,60.083"/>
<path style="fill:none;stroke:#000000;stroke-width:15;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;" d="&#10;&#9;&#9;&#9;M387.317,230.694l1.69-33.678c0.815-16.248-5.815-31.983-18.013-42.748l-46.186-40.76c-2.712-2.394-6.358-3.438-9.926-2.843l0,0&#10;&#9;&#9;&#9;c-5.794,0.966-10.04,5.979-10.04,11.852v4.179c0,3.777,1.262,7.446,3.585,10.424l21.125,29.884&#10;&#9;&#9;&#9;c11.073,15.664,17.019,34.376,17.019,53.559v25.929L387.317,230.694z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 13 KiB

@ -0,0 +1,5 @@
<svg fill="none" height="22" viewBox="0 0 22 22" width="22" xmlns="http://www.w3.org/2000/svg">
<path clip-rule="evenodd" d="M0 10.75C0 16.687 4.813 21.5 10.75 21.5C16.687 21.5 21.5 16.687 21.5 10.75C21.5 4.813 16.687 0 10.75 0C4.813 0 0 4.813 0 10.75ZM15.426 7.01299C15.833 7.38599 15.86 8.01898 15.487 8.42598L9.98701 14.426C9.80301 14.627 9.544 14.744 9.272 14.75C8.999 14.756 8.73599 14.65 8.54299 14.457L6.04299 11.957C5.65199 11.567 5.65199 10.933 6.04299 10.543C6.43299 10.152 7.06701 10.152 7.45701 10.543L9.21899 12.304L14.013 7.07402C14.386 6.66702 15.019 6.63999 15.426 7.01299Z"
fill="#62BE96"
fill-rule="evenodd" />
</svg>

After

Width:  |  Height:  |  Size: 656 B

@ -0,0 +1,62 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
version="1.1"
id="svg696"
xml:space="preserve"
width="682.66669"
height="682.66669"
viewBox="0 0 682.66669 682.66669"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><defs
id="defs700"><clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath710"><path
d="M 0,512 H 512 V 0 H 0 Z"
id="path708" /></clipPath></defs><g
id="g702"
transform="matrix(1.3333333,0,0,-1.3333333,0,682.66667)"><g
id="g704"><g
id="g706"
clip-path="url(#clipPath710)"><g
id="g712"
transform="translate(9.0435,355.2871)"><path
d="m 0,0 c 0.338,7.053 1.429,13.958 3.178,20.649 0.142,0.541 0.287,1.08 0.437,1.618 3.918,14.057 10.739,27.135 19.571,38.611 21.46,27.886 54.8,46.31 87.238,46.31 37.457,0 69.076,-22.555 83.697,-35.027 4.971,-4.241 12.285,-4.164 17.183,0.161 14.161,12.505 44.933,34.866 83.904,34.866 52.616,0 107.611,-48.482 110.423,-107.188 0.878,-18.368 -1.675,-34.297 -6.411,-48.745 -3.814,-11.637 -9.041,-22.316 -15.057,-32.515 -19.996,-33.905 -115.745,-106.958 -157.552,-142.348 -13.836,-11.712 -34.105,-11.709 -47.936,0.009 C 136.981,-188.276 41.584,-115.437 21.468,-81.26 12.443,-65.927 5.214,-49.612 1.863,-30.601 0.196,-21.138 -0.527,-11.02 0,0"
style="fill:#ff7d97;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path714" /></g><g
id="g716"
transform="translate(262.0469,153.4565)"><path
d="m 0,0 c -9.998,-8.147 -19.031,-15.546 -26.392,-21.777 -13.837,-11.713 -34.105,-11.709 -47.937,0.009 -41.693,35.323 -137.09,108.162 -157.206,142.338 -9.025,15.333 -16.255,31.649 -19.605,50.66 -0.343,1.947 -0.647,3.922 -0.907,5.927"
style="fill:none;stroke:#000000;stroke-width:20;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
id="path718" /></g><g
id="g720"
transform="translate(34.6689,419.2329)"><path
d="m 0,0 c 21.497,26.161 53.565,43.242 84.798,43.242 37.458,0 69.076,-22.555 83.697,-35.027 4.971,-4.241 12.286,-4.164 17.184,0.161 14.161,12.505 44.932,34.866 83.903,34.866 52.616,0 107.611,-48.482 110.424,-107.188 0.878,-18.367 -1.676,-34.297 -6.411,-48.745 -1.877,-5.726 -4.096,-11.221 -6.583,-16.54"
style="fill:none;stroke:#000000;stroke-width:20;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
id="path722" /></g><g
id="g724"
transform="translate(12.3311,376.3408)"><path
d="M 0,0 V 0"
style="fill:none;stroke:#000000;stroke-width:20;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
id="path726" /></g><g
id="g728"
transform="translate(502,169.7637)"><path
d="m 0,0 c 0,-66.406 -53.399,-120.239 -119.271,-120.239 -65.872,0 -119.271,53.833 -119.271,120.239 0,66.406 53.399,120.239 119.271,120.239 C -53.399,120.239 0,66.406 0,0"
style="fill:#faf7f5;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path730" /></g><g
id="g732"
transform="translate(502,169.7637)"><path
d="m 0,0 c 0,-66.406 -53.399,-120.239 -119.271,-120.239 -65.872,0 -119.271,53.833 -119.271,120.239 0,66.406 53.399,120.239 119.271,120.239 C -53.399,120.239 0,66.406 0,0 Z"
style="fill:none;stroke:#000000;stroke-width:20;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
id="path734" /></g><g
id="g736"
transform="translate(430.6279,194.124)"><path
d="m 0,0 h -23.744 v 23.952 c 0,6.765 -5.44,12.248 -12.15,12.248 h -24.01 c -6.71,0 -12.15,-5.483 -12.15,-12.248 V 0 h -23.744 c -6.71,0 -12.149,-5.483 -12.149,-12.248 v -24.225 c 0,-6.764 5.439,-12.247 12.149,-12.247 h 23.744 v -23.953 c 0,-6.764 5.44,-12.247 12.15,-12.247 h 24.01 c 6.71,0 12.15,5.483 12.15,12.247 V -48.72 H 0 c 6.71,0 12.149,5.483 12.149,12.247 v 24.225 C 12.149,-5.483 6.71,0 0,0"
style="fill:#ff9eb1;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path738" /></g><g
id="g740"
transform="translate(430.6279,194.124)"><path
d="m 0,0 h -23.744 v 23.952 c 0,6.765 -5.44,12.248 -12.15,12.248 h -24.01 c -6.71,0 -12.15,-5.483 -12.15,-12.248 V 0 h -23.744 c -6.71,0 -12.149,-5.483 -12.149,-12.248 v -24.225 c 0,-6.764 5.439,-12.247 12.149,-12.247 h 23.744 v -23.953 c 0,-6.764 5.44,-12.247 12.15,-12.247 h 24.01 c 6.71,0 12.15,5.483 12.15,12.247 V -48.72 H 0 c 6.71,0 12.149,5.483 12.149,12.247 v 24.225 C 12.149,-5.483 6.71,0 0,0 Z"
style="fill:none;stroke:#000000;stroke-width:20;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
id="path742" /></g></g></g></g></svg>

After

Width:  |  Height:  |  Size: 5.0 KiB

@ -1,4 +1,4 @@
storePassword=HmGsa123
keyPassword=HmGsa123
keyAlias=key
storeFile=DQKey.jks
keyAlias=hmg
storeFile=key

@ -21,8 +21,8 @@ var PACKAGES_ORDERS = '/api/orders';
var PACKAGES_ORDER_HISTORY = '/api/orders/items';
var PACKAGES_TAMARA_OPT = '/api/orders/paymentoptions/tamara';
// var BASE_URL = 'http://10.50.100.198:2018/';
var BASE_URL = 'https://uat.hmgwebservices.com/';
// var BASE_URL = 'https://hmgwebservices.com/';
// var BASE_URL = 'https://uat.hmgwebservices.com/';
var BASE_URL = 'https://hmgwebservices.com/';
// var BASE_URL = 'https://orash.cloudsolutions.com.sa/';
// var BASE_URL = 'https://vidauat.cloudsolutions.com.sa/';
// var BASE_URL = 'https://vidamergeuat.cloudsolutions.com.sa/';

@ -2,23 +2,23 @@
// Used for Native through Platform Method Channel
// --------- - -- - - - - - - - - ----------------
const Map platformLocalizedValues = {
"errorConnectingHmgNetwork": {"en": "Sorry you are not connecting to HMG network", "ar": "نعتذر لست متصل في شكبة مستشفى د.سليمان الحبيب"},
"successConnectingHmgNetwork": {"en": "You connected to HMG network successfully, you can access the app", "ar": "تم التصال بشبكة د.سليمان الحبيب بنجاح, تستطيع الان استخدام تطبيق الحبيب"},
"errorConnectingHmgNetwork": {"en": "Sorry you are not connecting to network", "ar": "نعتذر لست متصل في شكبة مستشفى د.سليمان الحبيب"},
"successConnectingHmgNetwork": {"en": "You connected to network successfully, you can access the app", "ar": "تم التصال بشبكة د.سليمان الحبيب بنجاح, تستطيع الان استخدام تطبيق الحبيب"},
"failedConnectingHmgNetwork": {
"en": "Sorry the connection to HMG network had been failed, make sure you are in range of HMG network",
"en": "Sorry the connection to network had been failed, make sure you are in range of network",
"ar": "نعتذر لقد فشل الاتصال بشبكة د.سليمان الحبيب, تاكد من وجودك داخل نطاق الشبكة"
},
"alreadyConnectedHmgNetwork": {"en": " You already connected to HMG network to access Alhabib app", "ar": "انت متصل مسبقاً بالشبكة تستطيع استخدام تطبيق الحبيب"},
"alreadyConnectedHmgNetwork": {"en": " You already connected to network to access Alhabib app", "ar": "انت متصل مسبقاً بالشبكة تستطيع استخدام تطبيق الحبيب"},
"somethingWentWrong": {"en": "Sorry something went wrong please try again later", "ar": "نعتذر لخدمتكم يرجى المحاولة لاحقا"},
"enablingWifi": {"en": "Enabling wifi...", "ar": "Enabling wifi..."},
"connectedHmgNetworkWithInternet": {"en": "Successfully connected to the HMG network to access internet", "ar": "Successfully connected to the HMG network to access internet"},
"connectedHmgNetworkWithInternet": {"en": "Successfully connected to the network to access internet", "ar": "Successfully connected to the HMG network to access internet"},
"connectedToHmgNetworkWithNoInternet": {
"en": "Successfully connected to the HMG network but it have no internet access",
"ar": "Successfully connected to the HMG network but it have no internet access"
"en": "Successfully connected to the network but it have no internet access",
"ar": "Successfully connected to the network but it have no internet access"
},
"notConnectedToHmgNetworkSecurityIssue": {
"en": "We are not able to connect you to HMG network due to security reasons",
"ar": "We are not able to connect you to HMG network due to security reasons"
"en": "We are not able to connect you to network due to security reasons",
"ar": "We are not able to connect you to network due to security reasons"
}
};
@ -123,9 +123,9 @@ const Map localizedValues = {
"welcome": {"en": "Welcome", "ar": "مرحبا بكم"},
"welcome-to": {"en": "Welcome to", "ar": "مرحبا بك في"},
"patient-app": {"en": "Patient App", "ar": "تطبيق المراجعين"},
"welcome_text": {"en": "Dr. Sulaiman Al Habib Mobile Application", "ar": "الدكتور سليمان الحبيب لتطبيقات الهاتف"},
"dr-sulaiman-text": {"en": "Dr. Sulaiman Al Habib", "ar": "د. سليمان الحبيب"},
'welcome_text2': {'en': 'Have you previously visited the hospitals or medical centers of Dr. Sulaiman Al Habib?', 'ar': 'هل قمت مسبقا بزيارة مستشفيات او مراكز الدكتور سليمان الحبيب الطبية ؟'},
"welcome_text": {"en": "Vida Mobile Application", "ar":"تطبيق فيدا للموبايل"},
"dr-sulaiman-text": {"en": "Vida Mobile Application", "ar": "تطبيق فيدا للموبايل"},
'welcome_text2': {'en': 'Have you previously visited the hospitals or medical centers?', 'ar': "هل سبق لك زيارة المستشفيات أو المراكز الطبية؟"},
'yes': {'en': 'Yes', 'ar': 'نعم'},
'no': {'en': 'No', 'ar': 'لا'},
"logintyperadio": {"en": " Choose from the below options to login to your medical file.", "ar": " اختر احدى الخيارات أدناه لتسجيل الدخول إلى ملفك الطبي "},
@ -279,7 +279,7 @@ const Map localizedValues = {
"OnlinePaymentService": {"en": "Online Payment Service", 'ar': 'خدمة الدفع الإلكتروني'},
"OffersAndPackages": {"en": "Online transfer request", 'ar': 'طلب التحويل الالكتروني'},
"ComprehensiveMedicalCheckup": {"en": "Comprehensive Medical Check-up", 'ar': 'فحص طبي شامل'},
"HMGService": {"en": "HMG Service", 'ar': 'الخدمات الإلكترونية'},
"HMGService": {"en": "Our Service", 'ar': 'الخدمات الإلكترونية'},
"ViewAllHabibMedicalService": {"en": "View All Habib Medical Service", 'ar': 'عرض خدمات الحبيب الطبية'},
"viewAll": {"en": "View All", 'ar': 'عرض الكل'},
"view": {"en": "View", 'ar': 'عرض'},
@ -298,13 +298,13 @@ const Map localizedValues = {
"logs": {"en": "Logs", "ar": "السجلات"},
"textToSpeech": {"en": "How May I Help You?", "ar": "كيف يمكنني مساعدتك؟"},
"locationDialogMessage": {
"en": "Allow the HMG app to access your location will assist you in showing the hospitals according to the nearest to you.",
"en": "Allow the app to access your location will assist you in showing the hospitals according to the nearest to you.",
"ar": "السماح لتطبيق مجموعة الحبيب الطبية بالوصول إلى موقعك سيساعدك في إظهار المستشفيات وفقًا للأقرب إليك."
},
"user-view-requester": {"en": "User Wants to View Your Medical File", "ar": "أشخاص يرغبون في الاطلاع على ملفك الطبي"},
"user-view": {"en": "User Can View Your Medical File", "ar": "أشخاص مصرح لهم الاطلاع على ملفك الطبي"},
"parking": {"en": "Parking", "ar": "مواقف"},
"alhabiServices": {"en": "HMG Service", "ar": "خدمات الحبيب"},
"alhabiServices": {"en": "Our Service", "ar": "خدمات الحبيب"},
"parkingTitle": {
"en":
"Car service, car service, service to save parking information, return to it later, 1- By clicking on (Read the code), save the parking data. 2- By clicking on the button (view my car park), it shows you the cars location in Google Maps. 3- Read another position by pressing the Clear Position Data button.",
@ -824,7 +824,7 @@ const Map localizedValues = {
"Feedback": {"en": "Feedback", "ar": "رأيك يهمنا"},
"LiveChat": {"en": "Live Chat", "ar": "محادثة مباشرة"},
"Service": {"en": "Service", "ar": "خدمة"},
"HMGServiceLabel": {"en": "HMG Service", 'ar': 'خدمات الحبيب'},
"HMGServiceLabel": {"en": "Our Service", 'ar': 'خدمات الحبيب'},
"HealthWeatherIndicators": {"en": "Health Weather Indicators", 'ar': ' مؤشرات الطقس الصحية '},
"HealthTipsBasedOnCurrentWeather": {"en": "Health Tips Based On Current Weather", 'ar': ' نصائح صحية بناءاً على الطقس الحالي '},
"MoreDetails": {"en": "More details", "ar": " المزيد من التفاصيل "},
@ -889,12 +889,12 @@ const Map localizedValues = {
"blood-instruction": {"en": "Enter the required information, in order to register for Blood Donation Service", "ar": "ادخل المعلومات المطلوبة للتسجيل بخدمة التبرع بالدم"},
"view-terms": {"en": "To view the terms and conditions", "ar": "عرض الشروط والأحكام"},
"wantConnectHmgNetwork": {
"en": "Dear customer there is no internet access, do you want to connect with HMG network to use our app, make sure you are in range of HMG network",
"en": "Dear customer there is no internet access, do you want to connect with network to use our app, make sure you are in range of network",
"ar": "عزيز العميل لا يوجد اتصال بالإنترنت, هل تريد الاتصال بشبكة مستشفى د. سليمان الحبيب لاستخدام التطبيق. يجب عليك ان تكون في نطاق شبكة المستشفى"
},
"failedToAccessHmgServices": {"en": "Connected with HMG Network,\n\nBut failed to access HMG services", "ar": "Connected with HMG Network,\n\nBut failed to access HMG services"},
"failedToAccessHmgServices": {"en": "Connected with Network,\n\nBut failed to access services", "ar": "Connected with Network,\n\nBut failed to access services"},
"offerAndPackages": {"en": "Offers and Packages", "ar": "العروض والباقات"},
"offerAndPackagesDetails": {"en": "This service allows you to view all HMG Offers:", "ar": "This service allows you to view all HMG Offers:"},
"offerAndPackagesDetails": {"en": "This service allows you to view all Offers:", "ar": "This service allows you to view all Offers:"},
"InvoiceNo": {"en": "Invoice No", "ar": "رقم الفاتورة"},
"InvoiceDate": {"en": "Invoice Date", "ar": "تاريخ الفاتورة"},
"SpecialResult": {"en": " Special Result", "ar": "نتيجة خاصة"},
@ -1008,7 +1008,7 @@ const Map localizedValues = {
"waterTracker": {"en": "Water Tracker", "ar": "حساب كمية الماء"},
"h2o": {"en": "H2O", "ar": "استهلاك"},
"v-tour": {"en": "Virtual Tour", "ar": "جولة إفتراضية"},
"hmg-news": {"en": "HMG News", "ar": "أخبار المجموعة"},
"hmg-news": {"en": " News", "ar": "أخبار المجموعة"},
"blood-d": {"en": "Blood Donation", "ar": "تبرع بالدم"},
"symptomCheckerTitle": {"en": "Symptom Checker", "ar": "مدقق الأعراض"},
"latest-news": {"en": "Latest News", "ar": "أحدث الأخبار"},
@ -1335,9 +1335,9 @@ const Map localizedValues = {
"please_select_gender": {"en": "Please select gender", "ar": "يرجى تحديد الجنس"},
"covid-info": {
"en":
"Dr. Sulaiman Al Habib hospitals are conducting a test for the emerging corona virus and issuing travel certificates 24/7 in a short time and with high accuracy. Those wishing to benefit from this service can visit one of Dr. Sulaiman Al Habib branches to conduct a corona test within few minutes, and obtain the result within several hours. Corona Virus Covid 19 testing service with PCR technology to detect the virus according to the highest international standards and with the latest high-precision RT-PCR devices (American GeneXpert and others), That is approved by the Food and Drug Authority as well as by the Saudi Center for Infectious Diseases Prevention.",
"Hospitals are conducting a test for the emerging corona virus and issuing travel certificates 24/7 in a short time and with high accuracy. Those wishing to benefit from this service can visit one of branches to conduct a corona test within few minutes, and obtain the result within several hours. Corona Virus Covid 19 testing service with PCR technology to detect the virus according to the highest international standards and with the latest high-precision RT-PCR devices (American GeneXpert and others), That is approved by the Food and Drug Authority as well as by the Saudi Center for Infectious Diseases Prevention.",
"ar":
"تجري مستشفيات د. سليمان الحبيب فحص فيروس كورونا المستجد وتصدر شهادات السفر على مدار الساعة، طوال أيام الأسبوع، وبسرعة ودقة عالية. يمكن للراغبين في الاستفادة من هذه الخدمة زيارة أحد فروع مستشفيات د. سليمان الحبيب وإجراء فحص كورونا خلال بضع دقائق والحصول على النتائج خلال عدة ساعات خدمة فحص فيروس كورونا Covid 19 بتقنية PCR للكشف عن الفيروس وفقاً لأعلى المعايير العالمية وبأحدث أجهزة RT-PCR عالية الدقة (GeneXpert الأمريكي وغيره)، وهي طرق معتمدة من قبل هيئة الغذاء والدواء وكذلك من قبل المركز السعودي للوقاية من الأمراض المُعدية"
"تقوم المستشفيات بإجراء فحص فيروس كورونا المستجد وإصدار شهادات السفر على مدار الساعة وطوال أيام الأسبوع في وقت قصير وبدقة عالية، ويمكن للراغبين في الاستفادة من هذه الخدمة زيارة أحد الفروع لإجراء فحص كورونا خلال دقائق معدودة، والحصول على النتيجة خلال عدة ساعات. خدمة فحص فيروس كورونا كوفيد 19 بتقنية PCR للكشف عن الفيروس وفق أعلى المعايير العالمية وبأحدث أجهزة RT-PCR عالية الدقة (جينيكسبرت الأمريكية وغيرها)، المعتمدة من هيئة الغذاء والدواء وكذلك من المركز السعودي للوقاية من الأمراض المعدية."
},
"select-appo": {"en": "Kindly select one of the available appointments from below:", "ar": " يرجى اختيار أحد المواعيد المتاحة مما يلي:"},
"covid-alert-header": {"en": "Pay With-in 15 mins to confirm the appointment", "ar": "الرجاء اتمام عملية الدفع خلال 15 دقيقه لتاكيد الموعد"},
@ -1425,9 +1425,9 @@ const Map localizedValues = {
"type": {"en": "Type", "ar": "اكتب"},
"info-ereferral": {
"en":
"This service allows you to submit a Referral request from any health care providers either inside or outside the kingdom of Saudi Arabia to any of HMG Hospitals, by filling some of the patient's data and attaching the medical reports, moreover you can track the request status (Under process, Accepted or Rejected)",
"This service allows you to submit a Referral request from any health care providers either inside or outside the kingdom of Saudi Arabia to any of Hospitals, by filling some of the patient's data and attaching the medical reports, moreover you can track the request status (Under process, Accepted or Rejected)",
"ar":
"تتيح لك هذه الخدمة إرسال طلب إحالة من أي من مقدمي الرعاية الصحية سواء داخل المملكة العربية السعودية أو خارجها إلى أي من مستشفيات HMG ، عن طريق ملء بعض بيانات المراجع وإرفاق التقارير الطبية ، علاوة على ذلك يمكنك تتبع حالة الطلب (قيد المعالجة ، مقبول أو مرفوض)"
"تتيح لك هذه الخدمة إرسال طلب إحالة من أي من مقدمي الرعاية الصحية سواء داخل المملكة العربية السعودية أو خارجها إلى أي من مستشفيات ، عن طريق ملء بعض بيانات المراجع وإرفاق التقارير الطبية ، علاوة على ذلك يمكنك تتبع حالة الطلب (قيد المعالجة ، مقبول أو مرفوض)"
},
"er-consultation": {
"en": "This service allows you to make an online virtual consultation via video call directly with the doctor from anywhere at any time.",
@ -1805,7 +1805,7 @@ const Map localizedValues = {
"connectSubtitle": {"en": "With us", "ar": "معنا"},
"covidConsent": {
"en":
"Covid-19 Test feature allows you to book an appointment for the Covid-19 Lab test within HMG branches, where a swab sample will be collected & processed. Once the result has been processed, we shall notify you via SMS on your registered mobile number & the test result will also be available in the Lab Results section of this app. Please note that this result is only available to you & not publicly available to anyone else.",
"Covid-19 Test feature allows you to book an appointment for the Covid-19 Lab test within branches, where a swab sample will be collected & processed. Once the result has been processed, we shall notify you via SMS on your registered mobile number & the test result will also be available in the Lab Results section of this app. Please note that this result is only available to you & not publicly available to anyone else.",
"ar":
"تتيح لك ميزة اختبار كوفيد19 حجز موعد في احد فروع مجموعة الحبيب الطبية ، حيث سيتم اخذ عينة المسحة ومعالجتها. بمجرد معالجة النتيجة ، سنخطرك عبر رسالة نصية قصيرة على رقم هاتفك المحمول المسجل وستكون نتيجة الاختبار متاحة أيضًا على التطبيق في قسم نتائج المختبر. يرجى ملاحظة أن هذه النتيجة متاحة لك فقط وليست متاحة للجمهور او اي شخص آخر. الرجاء الموافقة للتأكيد والمتابعة."
},
@ -1824,7 +1824,7 @@ const Map localizedValues = {
},
"locationPermissionDialog": {
"en":
"Dr. Al Habib app collects location data to show the nearest HMG hospitals and ER Locations and provides health care services to your location and Health weather indicators service and the medication delivery.",
"Dr. Al Habib app collects location data to show the nearest hospitals and ER Locations and provides health care services to your location and Health weather indicators service and the medication delivery.",
"ar": "يحتاج تطبيق دكتور الحبيب إلى صلاحية الوصول الى الموقع لإظهار أقرب مستشفيات المجموعة، مواقع الطوارئ، تقديم خدمات الرعاية الصحية إلى موقعك، خدمة مؤشرات الطقس الصحية وكذلك خدمة توصيل الأدوية."
},
"calendarPermission": {
@ -1836,7 +1836,7 @@ const Map localizedValues = {
"ar": "يحتاج تطبيق دكتور الحبيب إلى صلاحية الوصول الى الصوت لتفعيل خدمة الأوامر الصوتية."
},
"wifiPermission": {
"en": "Dr. Al Habib app needs to access WiFi state permission to connect to the HMG WiFi network from within the app when you visit the hospital.",
"en": "Dr. Al Habib app needs to access WiFi state permission to connect to the WiFi network from within the app when you visit the hospital.",
"ar": "يحتاج تطبيق دكتور الحبيب إلى الوصول إلى الواي فاي للاتصال بشبكة الواي فاي في المجموعة عند زيارة المستشفى."
},
"physicalActivityPermission": {
@ -1891,11 +1891,11 @@ const Map localizedValues = {
"pharmaLiveCare": {"en": "Pharma LiveCare", "ar": "لايف كير الصيدلية"},
"pharmaLiveCare1": {"en": "What is Pharma LiveCare?", "ar": "ما هولايف كير الصيدلية؟"},
"pharmaLiveCareDesc1": {
"en": "Pharma LiveCare allows you to get consultation from your doctor virtually being in HMG Pharmacy booth.",
"en": "Pharma LiveCare allows you to get consultation from your doctor virtually being in Pharmacy booth.",
"ar": "تتيح لك خدمة لايف كير الصيدلية الحصول على استشارة من طبيبك المتواجد فعليًا في كشك صيدلية د.سليمان الحبيب."
},
"wherePharmaLiveCare": {"en": "Where can i find Pharma LiveCare?", "ar": "أين يمكنني أن أجد لايف كير الصيدلية؟"},
"pharmaLiveCareDesc2": {"en": "You can find the booth in HMG Pharmacies.", "ar": "يمكنك العثور على الكشك في صيدليات مستشفى د.سليمان الحبيب."},
"pharmaLiveCareDesc2": {"en": "You can find the booth in Pharmacies.", "ar": "يمكنك العثور على الكشك في صيدليات مستشفى د.سليمان الحبيب."},
"howPharmaLiveCare": {"en": "How can i use Pharma LiveCare?", "ar": "كيف يمكنني استخدام لايف كير الصيدلية؟"},
"pharmaLiveCareDesc3": {
"en": "Following the below steps you can easily benefit from the virtual consultation service:",
@ -2049,7 +2049,7 @@ const Map localizedValues = {
"communicationConsent": {"en": "COMMUNICATION VIA EMAIL, TEXT MESSAGES AND PHONE CALLS: ", "ar": "الاتصال عبر البريد الإلكتروني والرسائل النصية والمكالمات الهاتفية: "},
"generalConsent3": {
"en":
"I understand that the contact number or Email that I have provided on registration will be used for communication by the Hospital. I hereby agree to be notified by the Hospital through SMS, Email, phone calls or any other method, for appointments notifications, special promotions, new features or products, current HMG's medical services, and of any services introduced by the Hospital or any third party in the future or any modifications made to the services offered by the Hospital. And these messages may be submitted as evidence where the Hospital has the right to use at any time whatsoever and as it sees fit. I understand the risks of communicating by email and text messages, in particular the privacy risks. I understand that the Hospital cannot guarantee the security and confidentiality of email or text communication. The Hospital will not be responsible for messages that are not received or delivered due to technical failure, or for disclosure of confidential information unless caused by intentional misconduct.",
"I understand that the contact number or Email that I have provided on registration will be used for communication by the Hospital. I hereby agree to be notified by the Hospital through SMS, Email, phone calls or any other method, for appointments notifications, special promotions, new features or products, current medical services, and of any services introduced by the Hospital or any third party in the future or any modifications made to the services offered by the Hospital. And these messages may be submitted as evidence where the Hospital has the right to use at any time whatsoever and as it sees fit. I understand the risks of communicating by email and text messages, in particular the privacy risks. I understand that the Hospital cannot guarantee the security and confidentiality of email or text communication. The Hospital will not be responsible for messages that are not received or delivered due to technical failure, or for disclosure of confidential information unless caused by intentional misconduct.",
"ar":
"المستشفى أدرك بأن رقم الجوال الهاتف أو البريد الإلكتروني الذي قدمته في نموذج التسجيل سيستخدم كوسيلة اتصال بيني وبين | وأقر بموافقتي على قيام المستشفى بإخطاري عن طريق رسائل البريد أو الرسائل القصيرة أو البريد الإلكتروني أو المكالمات الهاتفية أو أي طريقة أخرى بالمواعيد والعروض الترويجية أو المميزات والمنتجات الخاصة بالمستشفى أو) خاصة بأي طرف خارجي) وبأي خدمات طبية تقدمها المجموعة أو قد يطرحها المستشفى في المستقبل أو أي تعديلات قد تطرأ على الخدمات المقدمة من قبل المستشفى. وتعتبر هذه الرسائل دليل إثبات يحق للمستشفى استخدامه في اي وقت يشاء. أفهم مخاطر التواصل عبر البريد الإلكتروني والرسائل النصية خاصة مخاطر الخصوصية وأدرك أن المستشفى لا يمكنه ضمان أمن وسرية البريد الإلكتروني أو الرسائل النصية ولن يكون المستشفى مسؤول عن الرسائل التي لم يتم استلامها أو تسليمها بسبب الفشل التقني أو الكشف عن المعلومات السرية ما لم يكن سببها سوء سلوك متعمد."
},
@ -2140,4 +2140,29 @@ const Map localizedValues = {
"download": {"en": "Download", "ar": "تحميل"},
"share": {"en": "Share", "ar": "يشارك"},
"byFace":{"en": "By Face", "ar": "حسب الوجه"},
"stress": {"en": "Stress", "ar": "ضغط"},
"cvd": {"en": "Cardiovascular Disease (CVD) Risk", "ar": "مخاطر أمراض القلب والأوعية الدموية (CVD)"},
"generalWellness": {"en": "General Wellness", "ar": "العافية العامة"},
"BMI": {"en": "BMI", "ar": "مؤشر كتله الجسم"},
"respiratoryRate": {"en": "Respiratory Rate", "ar": "معدل التنفس"},
"oxygenSaturation": {"en": "Oxygen Saturation", "ar": "تشبع الأكسجين"},
"scanning": {"en": "Scanning", "ar": "المسح الضوئي"},
"normal": {"en": "Normal", "ar": "عادي"},
"poor": {"en": "Poor", "ar": "فقير"},
"low": {"en": "Low", "ar": "منخفض"},
"atRisk": {"en": "At Risk", "ar": "في خطر"},
"high": {"en": "High", "ar": "عال"},
"moderatelyHigh": {"en": "Moderately high", "ar": "مرتفع بشكل معتدل"},
"possiblyLow": {"en": "Possibly low", "ar": "ربما منخفض"},
"slightylyHigh": {"en": "Slightly high", "ar": "مرتفع قليلا"},
'frameRate': {'ar': 'معدل الإطارات', 'en': 'FrameRate'},
'movement': {'ar': 'الحركة', 'en': 'Movement'},
'centered': {'ar': 'مركّز', 'en': 'Centered'},
'lighting': {'ar': 'الإضاءة', 'en': 'Lighting'},
'scanningConditions': {'ar': 'شروط المسح', 'en': 'Scanning Conditions'},
'serverReady': {'ar': 'الخادم جاهز', 'en': 'Server Ready'},
'analyzingData': {'ar': 'تحليل البيانات...', 'en': 'Analyzing Data...'},
'collectingData': {'ar': 'جمع البيانات...', 'en': 'Collecting Data...'},
'waitingData': {'ar': 'انتظار البيانات...', 'en': 'Waiting Data...'},
};

@ -31,8 +31,8 @@ class ProjectViewModel extends BaseViewModel {
}
AppSharedPreferences sharedPref = AppSharedPreferences();
Locale _appLocale = Locale('ar');
String currentLanguage = 'ar';
Locale _appLocale = Locale('en');
String currentLanguage = 'en';
bool _isArabic = true;
bool isInternetConnection = true;
bool isLoading = false;

@ -164,7 +164,8 @@ class _MyApp extends State<MyApp> {
navigatorKey: locator<NavigationService>().navigatorKey,
showSemanticsDebugger: false,
title: 'Dr. AlHabib',
locale: projectProvider.appLocal,
// locale: projectProvider.appLocal,
locale: Locale('en'),
localizationsDelegates: [
TranslationBaseDelegate(),
GlobalMaterialLocalizations.delegate,

@ -68,10 +68,10 @@ class _AllHabibMedicalSevicePage2State extends State<AllHabibMedicalSevicePage2>
hmgServices.add(new HmgServices(0, TranslationBase.of(context).book, TranslationBase.of(context).appointmentLabel, "assets/images/new/book appointment.svg", isLogin));
hmgServices.add(new HmgServices(1, TranslationBase.of(context).liveCare, TranslationBase.of(context).onlineConsulting, "assets/images/new/Live_Care.svg", isLogin));
hmgServices.add(new HmgServices(2, TranslationBase.of(context).emergencyTitle, TranslationBase.of(context).emergencySubtitle, "assets/images/new/emergency.svg", isLogin));
hmgServices.add(new HmgServices(3, TranslationBase.of(context).hhcHome, TranslationBase.of(context).healthCare, "assets/images/new/HHC.svg", isLogin));
// hmgServices.add(new HmgServices(2, TranslationBase.of(context).emergencyTitle, TranslationBase.of(context).emergencySubtitle, "assets/images/new/emergency.svg", isLogin));
// hmgServices.add(new HmgServices(3, TranslationBase.of(context).hhcHome, TranslationBase.of(context).healthCare, "assets/images/new/HHC.svg", isLogin));
hmgServices.add(new HmgServices(4, TranslationBase.of(context).checkup, TranslationBase.of(context).comprehensive, "assets/images/new/comprehensive_checkup.svg", isLogin));
hmgServices.add(new HmgServices(5, TranslationBase.of(context).pharmacyTitle, TranslationBase.of(context).pharmacySubtitle, "assets/images/new/Pharmacy.svg", isLogin));
// hmgServices.add(new HmgServices(5, TranslationBase.of(context).pharmacyTitle, TranslationBase.of(context).pharmacySubtitle, "assets/images/new/Pharmacy.svg", isLogin));
hmgServices.add(new HmgServices(6, TranslationBase.of(context).medicalFileTitle2, TranslationBase.of(context).medicalFileSubtitle, "assets/images/new/medical file.svg", isLogin));
hmgServices.add(new HmgServices(7, TranslationBase.of(context).familyTitle, TranslationBase.of(context).familySubtitle, "assets/images/new/my family.svg", isLogin));

@ -255,6 +255,7 @@ class _InPatientPendingAdvancePaymentState extends State<InPatientPendingAdvance
int clinicID = projectViewModel.isPatientAdmitted ? projectViewModel.getAdmissionInfoResponseModel.clinicID! : 17;
service
.getInPatientPaymentLink(
widget.inPatientAdvanceResponseModel.responseInpatientAdvanceInfo![0].paymentRequestID!,
projectViewModel.inPatientProjectID,
// projectViewModel.getAdmissionInfoResponseModel.admissionNo!,
projectViewModel.isPatientAdmitted ? projectViewModel.getAdmissionInfoResponseModel.admissionRequestNo! : projectViewModel.getAdmissionRequestInfoResponseModel.admissionRequestNo!,

@ -43,7 +43,7 @@ class _AppUpdatePageState extends State<AppUpdatePage> {
),
Container(
margin: EdgeInsets.only(top: 5.0, bottom: 5.0),
child: SvgPicture.asset("assets/images/new-design/HMG_logo.svg", fit: BoxFit.fill),
child: Image.asset("assets/images/new/vida_logo.png", fit: BoxFit.fill),
),
Container(
margin: EdgeInsets.only(top: 10.0, left: 10.0, right: 10.0),

@ -472,8 +472,8 @@ class _CallScreenState extends State<CallScreen> {
],
),
);
if (errorType == Errors.SessionJoinFailed || errorType == Errors.SessionDisconnecting) {
Timer(
// if (errorType == Errors.SessionJoinFailed || errorType == Errors.SessionDisconncting) {
Timer(
const Duration(milliseconds: 1000),
() => Navigator.pop(context),
// Navigator.popAndPushNamed(
@ -482,7 +482,7 @@ class _CallScreenState extends State<CallScreen> {
// arguments: JoinArguments(args.isJoin, sessionName.value, sessionPassword.value, args.displayName, args.sessionIdleTimeoutMins, args.role),
// ),
);
}
// }
},
);

@ -55,15 +55,16 @@ class _HomePageFragment2State extends State<HomePageFragment2> {
hmgServices.add(HmgServices(0, TranslationBase.of(context).book, TranslationBase.of(context).appointmentLabel, "assets/images/new/book appointment.svg", isLogin));
hmgServices.add(HmgServices(1, TranslationBase.of(context).liveCare, TranslationBase.of(context).onlineConsulting, "assets/images/new/Live_Care.svg", isLogin));
hmgServices.add(HmgServices(111, TranslationBase.of(context).vitalSign, TranslationBase.of(context).byFace, "assets/images/new/facial-recognition.svg", isLogin));
projectViewModel.isIndoorNavigationEnabled
? hmgServices.add(HmgServices(2, TranslationBase.of(context).hospitalNavigationTitle, TranslationBase.of(context).hospitalNavigationSubtitle, "assets/images/new/indoor_nav_home.svg", isLogin,
isLocked: !projectViewModel.havePrivilege(107)))
: hmgServices.add(HmgServices(2, TranslationBase.of(context).emergencyTitle, TranslationBase.of(context).emergencySubtitle, "assets/images/new/emergency.svg", isLogin));
hmgServices.add(
HmgServices(9, TranslationBase.of(context).emergency, TranslationBase.of(context).checkinOptions, "assets/images/new/emergency.svg", isLogin, isLocked: !projectViewModel.havePrivilege(108)));
hmgServices.add(HmgServices(3, TranslationBase.of(context).hhcHome, TranslationBase.of(context).healthCare, "assets/images/new/HHC.svg", isLogin));
// hmgServices.add(
// HmgServices(9, TranslationBase.of(context).emergency, TranslationBase.of(context).checkinOptions, "assets/images/new/emergency.svg", isLogin, isLocked: !projectViewModel.havePrivilege(108)));
// hmgServices.add(HmgServices(3, TranslationBase.of(context).hhcHome, TranslationBase.of(context).healthCare, "assets/images/new/HHC.svg", isLogin));
hmgServices.add(HmgServices(4, TranslationBase.of(context).checkup, TranslationBase.of(context).comprehensive, "assets/images/new/comprehensive_checkup.svg", isLogin));
hmgServices.add(HmgServices(5, TranslationBase.of(context).online, TranslationBase.of(context).payment, "assets/images/new/paymentMethods.png", isLogin));
hmgServices.add(HmgServices(6, TranslationBase.of(context).ereferralTitle, TranslationBase.of(context).ereferralSubtitle, "assets/images/new/E_Referral.svg", isLogin));
@ -231,19 +232,19 @@ class _HomePageFragment2State extends State<HomePageFragment2> {
height: 1,
color: Color(0xFFC7C7C7),
),
Container(
width: double.infinity,
height: MediaQuery.of(context).size.width * 0.3,
padding: EdgeInsets.only(left: 20, right: 20, top: 14, bottom: 14),
color: Colors.white,
child: Row(
children: [
offersButton(),
mWidth(10),
hmgButton(),
],
),
),
// Container(
// width: double.infinity,
// height: MediaQuery.of(context).size.width * 0.3,
// padding: EdgeInsets.only(left: 20, right: 20, top: 14, bottom: 14),
// color: Colors.white,
// child: Row(
// children: [
// // offersButton(),
// mWidth(10),
// // hmgButton(),
// ],
// ),
// ),
Divider(
height: 1,
color: Color(0xFFC7C7C7),
@ -376,263 +377,263 @@ class _HomePageFragment2State extends State<HomePageFragment2> {
);
}
Widget offersButton() {
final bypassPrivilageCheck = false;
return Expanded(
flex: 1,
child: InkWell(
onTap: () {
// Navigator.of(context).push(MaterialPageRoute(builder: (context) => ErOptions(isAppbar: true)));
Navigator.push(context, FadePage(page: ErOptions(isAppbar: true)));
},
child: Stack(
children: [
Container(
width: double.infinity,
height: double.infinity,
clipBehavior: Clip.antiAlias,
decoration: containerRadiusWithGradientServices(20, lightColor: CustomColors.lightGreyColor, darkColor: CustomColors.lightGreyColor),
child: Stack(
children: [
Container(
width: double.infinity,
height: double.infinity,
// color: Color(0xFF2B353E),
decoration: containerRadius(CustomColors.accentColor, 20),
),
Container(
width: double.infinity,
height: double.infinity,
clipBehavior: Clip.antiAlias,
decoration: projectViewModel.isArabic
? containerBottomRightRadiusWithGradientForAr(60, lightColor: CustomColors.lightGreyColor, darkColor: CustomColors.lightGreyColor)
: containerBottomRightRadiusWithGradient(60, lightColor: CustomColors.lightGreyColor, darkColor: CustomColors.lightGreyColor),
child: Stack(
children: [
SvgPicture.asset(
"assets/images/new/strips.svg",
width: double.infinity,
height: double.infinity,
fit: BoxFit.cover,
),
],
),
),
projectViewModel.isArabic
? Positioned(
left: 20,
top: 12,
child: Opacity(
opacity: 0.5,
child: SvgPicture.asset(
"assets/images/new/emergency_services_back.svg",
height: MediaQuery.of(context).size.width * 0.14,
),
),
)
: Positioned(
right: 20,
top: 12,
child: Opacity(
opacity: 0.5,
child: SvgPicture.asset(
"assets/images/new/emergency_services_back.svg",
height: MediaQuery.of(context).size.width * 0.14,
),
),
),
Container(
width: double.infinity,
height: double.infinity,
padding: EdgeInsets.all(SizeConfig.widthMultiplier! * 3.4),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Container(
child: SvgPicture.asset(
"assets/images/new/emergency_services.svg",
height: MediaQuery.of(context).size.width * 0.08,
),
),
mFlex(1),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
TranslationBase.of(context).emergencyServices,
style: TextStyle(
color: Colors.black,
fontSize: 14,
fontWeight: FontWeight.bold,
letterSpacing: -0.45,
height: 1,
),
),
projectViewModel.isArabic ? mHeight(5) : Container(),
Text(
TranslationBase.of(context).emergencyServicesSubtitle,
style: TextStyle(
color: Colors.black,
fontSize: 9,
fontWeight: FontWeight.w600,
letterSpacing: -0.27,
height: projectViewModel.isArabic ? 0.2 : 1,
),
),
],
),
],
),
),
],
),
),
// projectViewModel.havePrivilege(82) || bypassPrivilageCheck
// ? Container()
// : Container(
// width: double.infinity,
// height: double.infinity,
// clipBehavior: Clip.antiAlias,
// decoration: containerRadiusWithGradientServices(20, lightColor: CustomColors.lightGreyColor.withOpacity(0.7), darkColor: CustomColors.lightGreyColor.withOpacity(0.7)),
// child: Icon(
// Icons.lock_outline,
// size: 40,
// ),
// )
],
),
),
);
}
Widget hmgButton() {
return Expanded(
flex: 1,
child: InkWell(
onTap: () {
if (projectViewModel.havePrivilege(100)) widget.onPharmacyClick!();
},
child: Stack(children: [
Container(
width: double.infinity,
height: double.infinity,
clipBehavior: Clip.antiAlias,
decoration: containerRadiusWithGradientServices(20, lightColor: CustomColors.lightGreyColor, darkColor: CustomColors.lightGreyColor),
child: Stack(
children: [
Container(
width: double.infinity,
height: double.infinity,
// color: Color(0xFF2B353E),
decoration: containerRadius(Color(0xFF359846), 20),
),
Container(
width: double.infinity,
height: double.infinity,
clipBehavior: Clip.antiAlias,
decoration: projectViewModel.isArabic
? containerBottomRightRadiusWithGradientForAr(60, lightColor: CustomColors.lightGreyColor, darkColor: CustomColors.lightGreyColor)
: containerBottomRightRadiusWithGradient(60, lightColor: CustomColors.lightGreyColor, darkColor: CustomColors.lightGreyColor),
child: Stack(
children: [
SvgPicture.asset(
"assets/images/new/strips.svg",
width: double.infinity,
height: double.infinity,
fit: BoxFit.cover,
),
],
),
),
projectViewModel.isArabic
? Positioned(
left: 20,
top: 12,
child: Opacity(
opacity: 0.25,
child: SvgPicture.asset(
"assets/images/new/Pharmacy.svg",
height: MediaQuery.of(context).size.width * 0.15,
),
),
)
: Positioned(
right: 20,
top: 12,
child: Opacity(
opacity: 0.25,
child: SvgPicture.asset(
"assets/images/new/Pharmacy.svg",
height: MediaQuery.of(context).size.width * 0.15,
),
),
),
Container(
width: double.infinity,
height: double.infinity,
padding: EdgeInsets.all(SizeConfig.widthMultiplier! * 3.4),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Container(
child: SvgPicture.asset(
"assets/images/new/Pharmacy.svg",
height: MediaQuery.of(context).size.width * 0.08,
),
),
mFlex(1),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
TranslationBase.of(context).onlinePharmacy,
style: TextStyle(
color: Colors.black,
fontSize: 14,
fontWeight: FontWeight.bold,
letterSpacing: -0.45,
height: 1,
),
),
projectViewModel.isArabic ? mHeight(5) : Container(),
Text(
TranslationBase.of(context).ecommerceSolution,
style: TextStyle(
color: Colors.black,
fontSize: 9,
fontWeight: FontWeight.w600,
letterSpacing: -0.27,
height: projectViewModel.isArabic ? 0.2 : 1,
),
),
],
),
],
),
),
],
),
),
projectViewModel.havePrivilege(100)
? Container()
: Container(
width: double.infinity,
height: double.infinity,
clipBehavior: Clip.antiAlias,
decoration: containerRadiusWithGradientServices(20, lightColor: CustomColors.lightGreyColor.withOpacity(0.7), darkColor: CustomColors.lightGreyColor.withOpacity(0.7)),
child: Icon(
Icons.lock_outline,
size: 40,
),
)
]),
),
);
}
// Widget offersButton() {
// final bypassPrivilageCheck = false;
// return Expanded(
// flex: 1,
// child: InkWell(
// onTap: () {
// // Navigator.of(context).push(MaterialPageRoute(builder: (context) => ErOptions(isAppbar: true)));
// Navigator.push(context, FadePage(page: ErOptions(isAppbar: true)));
// },
// child: Stack(
// children: [
// Container(
// width: double.infinity,
// height: double.infinity,
// clipBehavior: Clip.antiAlias,
// decoration: containerRadiusWithGradientServices(20, lightColor: CustomColors.lightGreyColor, darkColor: CustomColors.lightGreyColor),
// child: Stack(
// children: [
// Container(
// width: double.infinity,
// height: double.infinity,
// // color: Color(0xFF2B353E),
// decoration: containerRadius(CustomColors.accentColor, 20),
// ),
// Container(
// width: double.infinity,
// height: double.infinity,
// clipBehavior: Clip.antiAlias,
// decoration: projectViewModel.isArabic
// ? containerBottomRightRadiusWithGradientForAr(60, lightColor: CustomColors.lightGreyColor, darkColor: CustomColors.lightGreyColor)
// : containerBottomRightRadiusWithGradient(60, lightColor: CustomColors.lightGreyColor, darkColor: CustomColors.lightGreyColor),
// child: Stack(
// children: [
// SvgPicture.asset(
// "assets/images/new/strips.svg",
// width: double.infinity,
// height: double.infinity,
// fit: BoxFit.cover,
// ),
// ],
// ),
// ),
// projectViewModel.isArabic
// ? Positioned(
// left: 20,
// top: 12,
// child: Opacity(
// opacity: 0.5,
// child: SvgPicture.asset(
// "assets/images/new/emergency_services_back.svg",
// height: MediaQuery.of(context).size.width * 0.14,
// ),
// ),
// )
// : Positioned(
// right: 20,
// top: 12,
// child: Opacity(
// opacity: 0.5,
// child: SvgPicture.asset(
// "assets/images/new/emergency_services_back.svg",
// height: MediaQuery.of(context).size.width * 0.14,
// ),
// ),
// ),
// Container(
// width: double.infinity,
// height: double.infinity,
// padding: EdgeInsets.all(SizeConfig.widthMultiplier! * 3.4),
// child: Column(
// crossAxisAlignment: CrossAxisAlignment.start,
// mainAxisAlignment: MainAxisAlignment.center,
// children: [
// Container(
// child: SvgPicture.asset(
// "assets/images/new/emergency_services.svg",
// height: MediaQuery.of(context).size.width * 0.08,
// ),
// ),
// mFlex(1),
// Column(
// crossAxisAlignment: CrossAxisAlignment.start,
// mainAxisAlignment: MainAxisAlignment.center,
// children: [
// Text(
// TranslationBase.of(context).emergencyServices,
// style: TextStyle(
// color: Colors.black,
// fontSize: 14,
// fontWeight: FontWeight.bold,
// letterSpacing: -0.45,
// height: 1,
// ),
// ),
// projectViewModel.isArabic ? mHeight(5) : Container(),
// Text(
// TranslationBase.of(context).emergencyServicesSubtitle,
// style: TextStyle(
// color: Colors.black,
// fontSize: 9,
// fontWeight: FontWeight.w600,
// letterSpacing: -0.27,
// height: projectViewModel.isArabic ? 0.2 : 1,
// ),
// ),
// ],
// ),
// ],
// ),
// ),
// ],
// ),
// ),
// // projectViewModel.havePrivilege(82) || bypassPrivilageCheck
// // ? Container()
// // : Container(
// // width: double.infinity,
// // height: double.infinity,
// // clipBehavior: Clip.antiAlias,
// // decoration: containerRadiusWithGradientServices(20, lightColor: CustomColors.lightGreyColor.withOpacity(0.7), darkColor: CustomColors.lightGreyColor.withOpacity(0.7)),
// // child: Icon(
// // Icons.lock_outline,
// // size: 40,
// // ),
// // )
// ],
// ),
// ),
// );
// }
//
// Widget hmgButton() {
// return Expanded(
// flex: 1,
// child: InkWell(
// onTap: () {
// if (projectViewModel.havePrivilege(100)) widget.onPharmacyClick!();
// },
// child: Stack(children: [
// Container(
// width: double.infinity,
// height: double.infinity,
// clipBehavior: Clip.antiAlias,
// decoration: containerRadiusWithGradientServices(20, lightColor: CustomColors.lightGreyColor, darkColor: CustomColors.lightGreyColor),
// child: Stack(
// children: [
// Container(
// width: double.infinity,
// height: double.infinity,
// // color: Color(0xFF2B353E),
// decoration: containerRadius(Color(0xFF359846), 20),
// ),
// Container(
// width: double.infinity,
// height: double.infinity,
// clipBehavior: Clip.antiAlias,
// decoration: projectViewModel.isArabic
// ? containerBottomRightRadiusWithGradientForAr(60, lightColor: CustomColors.lightGreyColor, darkColor: CustomColors.lightGreyColor)
// : containerBottomRightRadiusWithGradient(60, lightColor: CustomColors.lightGreyColor, darkColor: CustomColors.lightGreyColor),
// child: Stack(
// children: [
// SvgPicture.asset(
// "assets/images/new/strips.svg",
// width: double.infinity,
// height: double.infinity,
// fit: BoxFit.cover,
// ),
// ],
// ),
// ),
// projectViewModel.isArabic
// ? Positioned(
// left: 20,
// top: 12,
// child: Opacity(
// opacity: 0.25,
// child: SvgPicture.asset(
// "assets/images/new/Pharmacy.svg",
// height: MediaQuery.of(context).size.width * 0.15,
// ),
// ),
// )
// : Positioned(
// right: 20,
// top: 12,
// child: Opacity(
// opacity: 0.25,
// child: SvgPicture.asset(
// "assets/images/new/Pharmacy.svg",
// height: MediaQuery.of(context).size.width * 0.15,
// ),
// ),
// ),
// Container(
// width: double.infinity,
// height: double.infinity,
// padding: EdgeInsets.all(SizeConfig.widthMultiplier! * 3.4),
// child: Column(
// crossAxisAlignment: CrossAxisAlignment.start,
// mainAxisAlignment: MainAxisAlignment.center,
// children: [
// Container(
// child: SvgPicture.asset(
// "assets/images/new/Pharmacy.svg",
// height: MediaQuery.of(context).size.width * 0.08,
// ),
// ),
// mFlex(1),
// Column(
// crossAxisAlignment: CrossAxisAlignment.start,
// mainAxisAlignment: MainAxisAlignment.center,
// children: [
// Text(
// TranslationBase.of(context).onlinePharmacy,
// style: TextStyle(
// color: Colors.black,
// fontSize: 14,
// fontWeight: FontWeight.bold,
// letterSpacing: -0.45,
// height: 1,
// ),
// ),
// projectViewModel.isArabic ? mHeight(5) : Container(),
// Text(
// TranslationBase.of(context).ecommerceSolution,
// style: TextStyle(
// color: Colors.black,
// fontSize: 9,
// fontWeight: FontWeight.w600,
// letterSpacing: -0.27,
// height: projectViewModel.isArabic ? 0.2 : 1,
// ),
// ),
// ],
// ),
// ],
// ),
// ),
// ],
// ),
// ),
// projectViewModel.havePrivilege(100)
// ? Container()
// : Container(
// width: double.infinity,
// height: double.infinity,
// clipBehavior: Clip.antiAlias,
// decoration: containerRadiusWithGradientServices(20, lightColor: CustomColors.lightGreyColor.withOpacity(0.7), darkColor: CustomColors.lightGreyColor.withOpacity(0.7)),
// child: Icon(
// Icons.lock_outline,
// size: 40,
// ),
// )
// ]),
// ),
// );
// }
Widget getInpatientButton() {
return Container(

@ -526,13 +526,13 @@ class _HomePageState extends State<HomePage> {
SizedBox(
height: 20,
),
Texts(
TranslationBase.of(context).onlinePharmacy,
textAlign: TextAlign.center,
color: Colors.white,
fontWeight: FontWeight.w700,
fontSize: SizeConfig.textMultiplier! * 1.55,
)
// Texts(
// TranslationBase.of(context).onlinePharmacy,
// textAlign: TextAlign.center,
// color: Colors.white,
// fontWeight: FontWeight.w700,
// fontSize: SizeConfig.textMultiplier! * 1.55,
// )
],
),
),

@ -9,13 +9,20 @@ import 'package:diplomaticquarterapp/pages/conference/zoom/call_screen.dart';
import 'package:diplomaticquarterapp/theme/colors.dart';
import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart';
import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/uitl/utils_new.dart';
import 'package:diplomaticquarterapp/vital_signs/GenderSelector.dart';
import 'package:diplomaticquarterapp/vital_signs/vital_sign.dart';
import 'package:diplomaticquarterapp/widgets/buttons/defaultButton.dart';
import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart';
import 'package:firebase_crashlytics/firebase_crashlytics.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:provider/provider.dart';
import 'package:url_launcher/url_launcher.dart';
import 'package:url_launcher/url_launcher_string.dart';
import 'package:vital_sign_camera/vital_sign_camera.dart';
import 'fragments/home_page_fragment2.dart';
import 'landing_page_pharmcy.dart';
@ -34,6 +41,12 @@ class _HomePageState2 extends State<HomePage2> {
PharmacyModuleViewModel pharmacyModuleViewModel = locator<PharmacyModuleViewModel>();
late ProjectViewModel projectViewModel;
TextEditingController weightTextController = new TextEditingController();
TextEditingController heightTextController = new TextEditingController();
TextEditingController ageTextController = new TextEditingController();
String radioValue = "";
@override
void initState() {
super.initState();
@ -45,36 +58,148 @@ class _HomePageState2 extends State<HomePage2> {
return BaseView<DashboardViewModel>(
onModelReady: (model) => model.getPatientRadOrders(),
builder: (_, model, wi) => Container(
color: CustomColors.backgroudGreyColor,
builder: (_, model, wi) => Scaffold(
resizeToAvoidBottomInset: true,
// color: CustomColors.backgroudGreyColor,
// color: Colors.yellow,
child: SingleChildScrollView(
physics: BouncingScrollPhysics(),
child: Column(
children: [
HomePageFragment2(
model,
onLoginClick: () {
widget.onLoginClick!();
// FirebaseCrashlytics.instance.crash();
// Navigator.pushNamed(
// context,
// "zoom_call_page",
// arguments: CallArguments("h9qkpf02", "123", "Patient", "40", "1", false),
// );
},
onPharmacyClick: () {
// getPharmacyToken(model);
Uri uri = Uri.parse(PHARMACY_REDIRECT_URL);
launchUrl(uri, mode: LaunchMode.externalApplication);
},
onMedicalFileClick: () {
widget.onMedicalFileClick!();
},
)
],
// child:
// SingleChildScrollView(
// physics: BouncingScrollPhysics(),
body: SafeArea(
child: SingleChildScrollView(
child: Container(
height: MediaQuery.of(context).size.height,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/images/HealthSnap/background.png"),
fit: BoxFit.cover,
),
),
// decoration: BoxDecoration(
// gradient: LinearGradient(
// begin: Alignment.topRight,
// end: Alignment.bottomLeft,
// // stops: [0.1, 0.3, 0.5],
// colors: [
// Color(0xff2B35E),
// Color(0xff596C7C),
// ],
// ),
// ),
child: Stack(
children: [
// SvgPicture.asset("assets/images/HealthSnap/background.svg", height: MediaQuery.sizeOf(context).height,width: MediaQuery.sizeOf(context).width),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
mHeight(24.0),
SvgPicture.asset(
'assets/images/HealthSnap/logo3.svg',
width: 80,
height: 80,
),
mHeight(82.0),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
"Welcome To",
style: TextStyle(color: Colors.white, fontSize: 24, letterSpacing: 1.28, fontWeight: FontWeight.normal),
),
Text(
"HealthSnap",
style: TextStyle(color: Colors.white, fontSize: 26, letterSpacing: 1.28, fontWeight: FontWeight.bold),
),
mHeight(84.0),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
GenderSelector(vectorUrl: 'assets/images/HealthSnap/female.svg', isSelected: radioValue == "female", onTap: (){
setState(() {
radioValue = "female";
});
}),
mWidth(24),
GenderSelector(vectorUrl: 'assets/images/HealthSnap/male.svg', isSelected: radioValue == "male", onTap: (){
setState(() {
radioValue = "male";
});
})
],
),
mHeight(64.0),
Row(
children: [
Expanded(
child: inputWidget(TranslationBase.of(context).weightAdd + " (kg)", "Enter", weightTextController),
),
mWidth(8),
Expanded(
child: inputWidget(TranslationBase.of(context).height + " (cm)", "Enter", heightTextController),
),
],
),
mHeight(16.0),
inputWidget(TranslationBase.of(context).age, "Enter", ageTextController),
mHeight(16.0),
// inputWidget(TranslationBase.of(context).weightAdd + " (kg)", "Enter", weightTextController),
// mHeight(16.0),
// inputWidget(TranslationBase.of(context).height + " (cm)", "Enter", heightTextController),
// mHeight(16.0),
DefaultButton(
TranslationBase.of(context).start,
(ageTextController.text == "" || weightTextController.text == "" || heightTextController.text == "")
? null
: () {
final UserInfo userInfo = UserInfo(
age: double.parse(ageTextController.text),
gender: radioValue == "male" ? Gender.male : Gender.female,
weight: double.parse(weightTextController.text),
// kg, Optional
height: double.parse(heightTextController.text),
// cm, Optional
waistCircumference: 0,
// cm Optional
userId: 'dbd13e86-47f4-4a43-85f6-cf62fa750117');
Navigator.push(context, FadePage(page: VitalSigns(userInfo: userInfo)));
},
color: CustomColors.accentColor,
disabledColor: CustomColors.grey,
),
],
),
// HomePageFragment2(
// model,
// onLoginClick: () {
// widget.onLoginClick!();
// // FirebaseCrashlytics.instance.crash();
// // Navigator.pushNamed(
// // context,
// // "zoom_call_page",
// // arguments: CallArguments("h9qkpf02", "123", "Patient", "40", "1", false),
// // );
// },
// onPharmacyClick: () {
// // getPharmacyToken(model);
// Uri uri = Uri.parse(PHARMACY_REDIRECT_URL);
// launchUrl(uri, mode: LaunchMode.externalApplication);
// },
// onMedicalFileClick: () {
// widget.onMedicalFileClick!();
// },
// )
],
),
),
],
),
),
),
),
// ),
),
);
}
@ -101,4 +226,86 @@ class _HomePageState2 extends State<HomePage2> {
navigateToCovidDriveThru() {
Navigator.push(context, FadePage(page: CovidDrivethruLocation()));
}
Widget inputWidget(String _labelText, String _hintText, TextEditingController _controller, {String? prefix, bool isEnable = true, bool hasSelection = false}) {
return Container(
padding: EdgeInsets.only(left: 16, right: 16, bottom: 10, top: 10),
alignment: Alignment.center,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(15),
color: CustomColors.appBackgroudGreyColor,
border: Border.all(
color: Color(0xffefefef),
width: 1,
),
),
child: InkWell(
onTap: hasSelection ? () {} : null,
child: Row(
children: [
Expanded(
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
_labelText,
style: TextStyle(
fontSize: 11,
fontWeight: FontWeight.w600,
color: Color(0xff2B353E),
letterSpacing: -0.44,
),
),
TextField(
enabled: isEnable,
scrollPadding: EdgeInsets.zero,
keyboardType: TextInputType.number,
controller: _controller,
onChanged: (value) => {},
style: TextStyle(
fontSize: 14,
height: 21 / 14,
fontWeight: FontWeight.w400,
color: Color(0xff2B353E),
letterSpacing: -0.44,
),
decoration: InputDecoration(
isDense: true,
hintText: _hintText,
hintStyle: TextStyle(
fontSize: 14,
height: 21 / 14,
fontWeight: FontWeight.w400,
color: Color(0xff575757),
letterSpacing: -0.56,
),
prefixIconConstraints: BoxConstraints(minWidth: 50),
prefixIcon: prefix == null
? null
: Text(
"+" + prefix,
style: TextStyle(
fontSize: 14,
height: 21 / 14,
fontWeight: FontWeight.w500,
color: Color(0xff2E303A),
letterSpacing: -0.56,
),
),
contentPadding: EdgeInsets.zero,
border: InputBorder.none,
focusedBorder: InputBorder.none,
enabledBorder: InputBorder.none,
),
),
],
),
),
if (hasSelection) Icon(Icons.keyboard_arrow_down_outlined),
],
),
),
);
}
}

@ -479,96 +479,101 @@ class _LandingPageState extends State<LandingPage> with WidgetsBindingObserver {
model = Provider.of<ToDoCountProviderModel>(context);
// currentTab == 0 ? 45 : 0.0
return Scaffold(
appBar: currentTab == 0
? PreferredSize(
preferredSize: Size.fromHeight(currentTab == 0 ? 45 : 0.0),
child: AppBar(
elevation: 0,
backgroundColor: CustomColors.backgroudGreyColor,
//Changed By Aamir
// textTheme: TextTheme(
// headline6: TextStyle(color: Theme.of(context).textTheme.headline1!.color, fontWeight: FontWeight.bold),
// ),
title: Text(
getText(currentTab).toUpperCase(),
style: TextStyle(
fontWeight: FontWeight.bold,
color: currentTab == 0 ? CustomColors.backgroudGreyColor : CustomColors.accentColor,
// : Theme.of(context).textTheme.headline1!.color,
fontFamily: projectViewModel.isArabic ? 'Cairo' : 'Poppins'),
// bold: true,
),
leading: Builder(
builder: (BuildContext context) {
return new Stack(
children: <Widget>[
currentTab == 0
? IconButton(
icon: SvgPicture.asset("assets/images/new/menu.svg"),
// color: Theme.of(context).textTheme.headline1!.color,
color: CustomColors.white,
onPressed: () => Scaffold.of(context).openDrawer(),
)
: IconButton(
icon: Icon(Icons.arrow_back),
onPressed: () {
setState(() {
currentTab = 0;
});
pageController.jumpToPage(0);
},
),
projectViewModel.isLogin && model.notificationsCount != null && !projectViewModel.isLoginChild
? Positioned(
right: projectViewModel.isArabic ? 35 : 0,
top: 5,
child: new Container(
padding: EdgeInsets.all(4),
decoration: new BoxDecoration(
color: CustomColors.accentColor,
borderRadius: BorderRadius.circular(20),
),
constraints: BoxConstraints(
minWidth: 20,
minHeight: 20,
),
child: Text(
model.notificationsCount.toString(),
style: TextStyle(
color: Colors.white,
fontSize: projectViewModel.isArabic ? 8 : 9,
),
textAlign: TextAlign.center,
),
),
)
: SizedBox()
],
);
},
),
actions: [
// IconButton(
// //iconSize: 70,
// icon: Icon(
// projectViewModel.isLogin ? Icons.settings : Icons.login,
// color: Theme.of(context).textTheme.headline1.color,
// ),
// onPressed: () {
// if (projectViewModel.isLogin)
// Navigator.of(context).pushNamed(
// SETTINGS,
// );
// else
// login();
// }, //do something,
// )
],
centerTitle: true,
),
)
: null,
drawer: SafeArea(child: AppDrawer()),
appBar:
// currentTab == 0
// ?
// PreferredSize(
// preferredSize: Size.fromHeight(currentTab == 0 ? 45 : 0.0),
// child: AppBar(
// elevation: 0,
// backgroundColor: CustomColors.backgroudGreyColor,
// //Changed By Aamir
// // textTheme: TextTheme(
// // headline6: TextStyle(color: Theme.of(context).textTheme.headline1!.color, fontWeight: FontWeight.bold),
// // ),
// title: Text(
// getText(currentTab).toUpperCase(),
// style: TextStyle(
// fontWeight: FontWeight.bold,
// color: currentTab == 0 ? CustomColors.backgroudGreyColor : CustomColors.accentColor,
// // : Theme.of(context).textTheme.headline1!.color,
// fontFamily: projectViewModel.isArabic ? 'Cairo' : 'Poppins'),
// // bold: true,
// ),
// leading: Builder(
// builder: (BuildContext context) {
// return new Stack(
// children: <Widget>[
// // currentTab == 0
// // ?
// // IconButton(
// // icon: SvgPicture.asset("assets/images/new/menu.svg"),
// // // color: Theme.of(context).textTheme.headline1!.color,
// // color: CustomColors.white,
// // onPressed: () => Scaffold.of(context).openDrawer(),
// // )
// // :
// // IconButton(
// // icon: Icon(Icons.arrow_back),
// // onPressed: () {
// // setState(() {
// // currentTab = 0;
// // });
// // pageController.jumpToPage(0);
// // },
// // ),
// projectViewModel.isLogin && model.notificationsCount != null && !projectViewModel.isLoginChild
// ? Positioned(
// right: projectViewModel.isArabic ? 35 : 0,
// top: 5,
// child: new Container(
// padding: EdgeInsets.all(4),
// decoration: new BoxDecoration(
// color: CustomColors.accentColor,
// borderRadius: BorderRadius.circular(20),
// ),
// constraints: BoxConstraints(
// minWidth: 20,
// minHeight: 20,
// ),
// child: Text(
// model.notificationsCount.toString(),
// style: TextStyle(
// color: Colors.white,
// fontSize: projectViewModel.isArabic ? 8 : 9,
// ),
// textAlign: TextAlign.center,
// ),
// ),
// )
// : SizedBox()
// ],
// );
// },
// ),
// actions: [
// // IconButton(
// // //iconSize: 70,
// // icon: Icon(
// // projectViewModel.isLogin ? Icons.settings : Icons.login,
// // color: Theme.of(context).textTheme.headline1.color,
// // ),
// // onPressed: () {
// // if (projectViewModel.isLogin)
// // Navigator.of(context).pushNamed(
// // SETTINGS,
// // );
// // else
// // login();
// // }, //do something,
// // )
// ],
// centerTitle: true,
// ),
// )
// :
null,
// drawer: SafeArea(child: AppDrawer()),
extendBody: false,
body: WillPopScope(
onWillPop: onWillPop,
@ -615,20 +620,22 @@ class _LandingPageState extends State<LandingPage> with WidgetsBindingObserver {
),
RobotIcon()
])),
bottomNavigationBar: BottomNavBar(
changeIndex: changeCurrentTab,
index: currentTab,
),
// bottomNavigationBar: BottomNavBar(
// changeIndex: changeCurrentTab,
// index: currentTab,
// ),
floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
floatingActionButton: (projectViewModel.havePrivilege(34) && currentTab == 0)
? FloatingButton(
elevation: true,
onTap: () {
changeCurrentTab(2);
projectViewModel.analytics.appointment.book_appointment();
},
)
: null);
floatingActionButton:
// (projectViewModel.havePrivilege(34) && currentTab == 0)
// ? FloatingButton(
// elevation: true,
// onTap: () {
// changeCurrentTab(2);
// projectViewModel.analytics.appointment.book_appointment();
// },
// )
// :
null);
}
triggerRobot() {

@ -41,6 +41,7 @@ import 'package:diplomaticquarterapp/uitl/penguin_method_channel.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/uitl/utils.dart';
import 'package:diplomaticquarterapp/uitl/utils_new.dart';
import 'package:diplomaticquarterapp/vital_signs/result_screen.dart';
import 'package:diplomaticquarterapp/vital_signs/vital_sign.dart';
import 'package:diplomaticquarterapp/widgets/dialogs/covid_consent_dialog.dart';
import 'package:diplomaticquarterapp/widgets/dialogs/location_selection_dialog.dart';
@ -50,6 +51,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:url_launcher/url_launcher.dart';
import 'package:vital_sign_camera/vital_sign_camera.dart';
import '../../../locator.dart';
import '../landing_page_pharmcy.dart';
@ -229,11 +231,16 @@ class ServicesView extends StatelessWidget {
locator<GAnalytics>().hmgServices.logServiceName('book appointment');
} else if (hmgServices.action == 1) {
openLiveCare(context);
} else if (hmgServices.action == 111) {
// Navigator.push(context, FadePage(page: VitalSigns()));
} else if (hmgServices.action == 2) {
//todo for temporary basis
// Navigator.push(context, FadePage(page: VitalSigns()));
// Navigator.push(context, FadePage(page: ResultScreen(
// healthResult: Health(null, null, VitalSign(92,1, 1, null,null,null,null,null,null,null,null,null, null,null,null,null), null,null,),
// )));
// initPenguinSDK();
if (projectViewModel.isIndoorNavigationEnabled) {
if (!isLocked) openNavigationProjectSelection(context);
} else {

@ -242,7 +242,7 @@ class _ConfirmLogin extends State<ConfirmLogin> {
else
Column(mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: <Widget>[
Image.asset(
'assets/images/habib-logo.png',
'assets/images/new/vida_logo.png',
height: 90,
width: 90,
),

@ -44,8 +44,8 @@ class _WelcomeLogin extends State<WelcomeLogin> {
SizedBox(height: 12),
Row(
children: [
SvgPicture.asset(
"assets/images/new/hmg_icon.svg",
Image.asset(
"assets/images/new/vida_logo.png",
height: 62,
width: 62,
),

@ -184,11 +184,12 @@ class ClinicListService extends BaseService {
return Future.value(localRes);
}
Future<Map> getInPatientPaymentLink(int projectID, int admissionNo, int orderID, String name, String email, num amount, String nationalID, int clinicID, context) async {
Future<Map> getInPatientPaymentLink(int paymentRequestID, int projectID, int admissionNo, int orderID, String name, String email, num amount, String nationalID, int clinicID, context) async {
Map<String, dynamic> request;
// request = {"ProjectID": projectID, "AdmissionReqNo": admissionReqNo, "AdmissionNo": admissionNo};
request = {
"PaymentRequestId": paymentRequestID,
"ProjectID": projectID,
"ClientOrderID": orderID,
"OrderDescription": "InPatient Advance Payment",

@ -172,7 +172,7 @@ class PayfortService extends BaseService {
customerName: customerName!,
customerEmail: customerEmail!,
// orderDescription: orderDescription!,
orderDescription: "Dr. Sulaiman Al Habib Hospital",
orderDescription: "Vida Mobile App",
sdkToken: sdkTokenResponse?.sdkToken ?? '',
merchantReference: merchantReference!,
currency: currency,

@ -100,9 +100,9 @@ class _SplashScreenState extends State<SplashScreen> {
Padding(
padding: EdgeInsets.symmetric(horizontal: 53),
child: Image.asset(
'assets/images/new/hmg_logo.png',
'assets/images/new/vida_logo.png',
fit: BoxFit.fitWidth,
width: MediaQuery.of(context).size.width,
width:120,
),
),
Align(
@ -110,18 +110,18 @@ class _SplashScreenState extends State<SplashScreen> {
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Text(
TranslationBase.of(context).poweredBy,
style: TextStyle(fontSize: 14, fontWeight: FontWeight.w400, color: Color(0xff333C45), letterSpacing: -0.56, height: 16 / 14),
),
// Text(
// TranslationBase.of(context).poweredBy,
// style: TextStyle(fontSize: 14, fontWeight: FontWeight.w400, color: Color(0xff333C45), letterSpacing: -0.56, height: 16 / 14),
// ),
SizedBox(
height: 5,
),
SvgPicture.asset(
'assets/images/new/cloud_logo.svg',
width: 40,
height: 40,
),
// SvgPicture.asset(
// 'assets/images/new/cloud_logo.svg',
// width: 40,
// height: 40,
// ),
SizedBox(
height: 7,
),

@ -18,7 +18,7 @@ class CustomColors {
static const Color pharmacyGreyColor = Color(0xFFDBDBDB);
static const Color backgroudGreyColor = Color(0xFFEFEFEF);
static const Color appBackgroudGreyColor = Color(0xFFF7F7F7);
static const Color appBackgroudGrey2Color = Color(0xFFF8F8F8);
static const Color appBackgroudGrey2Color = Color(0xFFFAFAFA);
static const Color green = Color(0xFF359846);
static const Color orange = Color(0xFFCC9B14);
static const Color darkOrange = Color(0xFFE16F17);

@ -70,9 +70,10 @@ class AppToast {
child: toast,
gravity: ToastGravity.TOP,
toastDuration: Duration(seconds: timeInSeconds),
positionedToastBuilder: (context, child) {
return Positioned(top: 50, left: 10, right: 10, child: child);
});
// positionedToastBuilder: (context, child) {
// return Positioned(top: 50, left: 10, right: 10, child: child);
// }
);
// Fluttertoast.showToast(msg: message, toastLength: toastLength, gravity: toastGravity, timeInSecForIosWeb: timeInSeconds, backgroundColor: Colors.red, textColor: textColor, fontSize: fontSize);
}

@ -3044,7 +3044,62 @@ class TranslationBase {
String get download => localizedValues["download"][locale.languageCode];
String get share => localizedValues["share"][locale.languageCode];
String get scanning => localizedValues["scanning"][locale.languageCode];
String get normal => localizedValues["normal"][locale.languageCode];
String get poor => localizedValues["poor"][locale.languageCode];
String get high => localizedValues["high"][locale.languageCode];
String get low => localizedValues["low"][locale.languageCode];
String get atRisk => localizedValues["atRisk"][locale.languageCode];
String get slightlyHigh => localizedValues["slightlyHigh"][locale.languageCode];
String get possiblyLow => localizedValues["possiblyLow"][locale.languageCode];
String get moderatelyHigh => localizedValues["moderatelyHigh"][locale.languageCode];
String get oxygenSaturation => localizedValues["oxygenSaturation"][locale.languageCode];
String get stress => localizedValues["stress"][locale.languageCode];
String get respiratoryRate => localizedValues["respiratoryRate"][locale.languageCode];
String get BMI => localizedValues["bmi"][locale.languageCode];
String get generalWellness => localizedValues["generalWellness"][locale.languageCode];
String get cvd => localizedValues["cvd"][locale.languageCode];
String get frameRate => localizedValues['frameRate'][locale.languageCode];
String get movement => localizedValues['movement'][locale.languageCode];
String get centered => localizedValues['centered'][locale.languageCode];
String get lighting => localizedValues['lighting'][locale.languageCode];
String get scanningConditions => localizedValues['scanningConditions'][locale.languageCode];
String get serverReady => localizedValues['serverReady'][locale.languageCode];
String get analyzingData => localizedValues['analyzingData']?[locale.languageCode] ?? '';
String get collectingData => localizedValues['collectingData']?[locale.languageCode] ?? '';
String get waitingData => localizedValues['waitingData']?[locale.languageCode] ?? '';
String get byFace => localizedValues["byFace"][locale.languageCode];
String getValue(String name) {
switch (name) {
case 'normal':
return normal;
case 'poor':
return poor;
case 'good':
return good;
case 'excellent':
return excellent;
case 'high':
return high;
case 'low':
return low;
case 'atRisk':
return atRisk;
case 'slightlyHigh':
return slightlyHigh;
case 'possiblyLow':
return possiblyLow;
case 'moderatelyHigh':
return moderatelyHigh;
case 'systolic-lng':
return systolicLng;
case 'diastolic-lng':
return diastolicLng;
default:
throw ArgumentError('Invalid name: $name');
}
}
}
class TranslationBaseDelegate extends LocalizationsDelegate<TranslationBase> {

@ -0,0 +1,42 @@
import 'package:diplomaticquarterapp/theme/colors.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
class GenderSelector extends StatelessWidget{
final String vectorUrl;
final bool isSelected;
final VoidCallback onTap;
const GenderSelector({super.key, required this.vectorUrl, required this.isSelected, required this.onTap});
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: (){
onTap();
},
behavior: HitTestBehavior.opaque,
child: SizedBox(
height: 120,width: 120,
child: Material(
shape: RoundedRectangleBorder(
side: isSelected?BorderSide(width: 5, color: CustomColors.accentColor): BorderSide.none,
borderRadius: BorderRadius.circular(100),
),
child: Material(
color: Colors.white,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(100),
),
child: Padding(
padding: const EdgeInsets.all(22.0),
child: SvgPicture.asset(vectorUrl, ),
),
),
),
),
);
}
}

@ -0,0 +1,28 @@
import 'package:flutter/material.dart';
class BackHomeButton extends StatelessWidget {
final void Function() onPressed;
final Size deviceSize;
const BackHomeButton({
Key? key,
required this.onPressed,
required this.deviceSize,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return Align(
alignment: Alignment.topLeft,
child: Container(
margin: EdgeInsets.fromLTRB(15, deviceSize.height * 0.05, 0, 0),
child: IconButton(
icon: const Icon(Icons.arrow_back),
color: Colors.white,
iconSize: 25,
onPressed: onPressed,
),
),
);
}
}

@ -0,0 +1,477 @@
import 'dart:math';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/uitl/utils.dart';
import 'package:flutter/material.dart';
enum ResultTypes { criticalLow, low, normal, high, criticalHigh }
class ItemResultCardWidget extends StatelessWidget {
final Widget child;
const ItemResultCardWidget({
Key? key,
required this.child,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return Row(
children: [
Expanded(
child: Padding(
padding: const EdgeInsets.only(left: 12, right: 12, bottom: 12),
child: child,
),
),
],
);
}
}
class CustomResultProgressBar extends StatelessWidget {
final double percentage;
final String value;
final ResultTypes type;
final bool showAtRisk;
const CustomResultProgressBar(
{Key? key,
required this.percentage,
required this.value,
required this.type,
this.showAtRisk = false})
: super(key: key);
@override
Widget build(BuildContext context) {
return LayoutBuilder(builder: (context, constraints) {
final double totalWidth = constraints.maxWidth;
final double spacing = 2;
final double tooltipPosition = (totalWidth * (percentage / 100)).clamp(0, totalWidth - 50);
return Stack(
children: [
Row(
children: [
_buildResultBar(
flex: 2,
color: Color(0xFFDE7676),
title: "Poor",
),
SizedBox(
width: spacing,
),
_buildResultBar(
flex: 3,
color: Color(0xff84d368),
title: "Good",
),
SizedBox(
width: spacing,
),
_buildResultBar(
flex: 2,
color: Color(0xFF14a45f),
title: "Excellent",
),
SizedBox(
width: spacing,
),
Visibility(
visible: showAtRisk,
child: _buildResultBar(
flex: 2,
color: Color(0xFFE82626),
title: "At Risk",
),
),
// SizedBox(
// width: spacing,
// ),
// _buildResultBar(
// flex: 3,
// color: Color(0xFFDE7676),
// title: "Critical High",
// ),
],
),
Positioned(
left: tooltipPosition,
top: 33,
child: Column(
children: [
TextCloud(
text: "${value}",
color: percentage == 4
? Color(0xFFDE7676)
: percentage == 40
? Color(0xff84d368)
: percentage == 85
? Color(0xFFE82626)
: Color(0xFF14a45f),
// color: type == ResultTypes.criticalLow || type == ResultTypes.criticalHigh
// ? Color(0xFFDE7676)
// : type == ResultTypes.low || type == ResultTypes.high
// ? Color(0xFFEAB157)
// : type == ResultTypes.normal
// ? Color(0xFF09AA28)
// : Color(0xFF09AA28),
width: 50,
height: 20,
padding: EdgeInsets.zero,
axisDirection: AxisDirection.up,
),
],
),
),
],
);
});
}
Widget _buildResultBar({
required int flex,
required Color color,
required String title,
}) {
return Expanded(
flex: flex,
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(
title,
style: const TextStyle(fontSize: 10, fontFamily: 'Poppins', letterSpacing: -0.24, fontWeight: FontWeight.w500),
textAlign: TextAlign.center,
),
const SizedBox(height: 5),
Container(
height: 5,
decoration: BoxDecoration(
color: color,
borderRadius: BorderRadius.all(Radius.circular(10)),
),
),
],
),
);
}
}
class TextCloud extends StatelessWidget {
final String text; // write here box content
final Color color; // Set box Color
final EdgeInsets padding; // Set content padding
final double width; // Box width
final double height; // Box Height
final AxisDirection axisDirection; // Set triangle location up,left,right,down
final double locationOfArrow; // set between 0 and 1, If 0.5 is set triangle position will be centered
const TextCloud({
super.key,
required this.text,
this.color = Colors.white,
this.padding = const EdgeInsets.all(10),
this.width = 200,
this.height = 100,
this.axisDirection = AxisDirection.down,
this.locationOfArrow = 0.5,
});
@override
Widget build(BuildContext context) {
Size arrowSize = const Size(12, 12);
return Stack(
clipBehavior: Clip.none,
children: [
Container(
width: width,
height: height,
padding: padding,
decoration: BoxDecoration(
color: color,
borderRadius: BorderRadius.circular(10),
),
child: Center(
child: Text(
text,
style: TextStyle(color: Colors.white, fontSize: 12),
)),
),
Builder(builder: (context) {
double angle = 0;
switch (axisDirection) {
case AxisDirection.left:
angle = pi * -0.5;
break;
case AxisDirection.up:
angle = pi * -2;
break;
case AxisDirection.right:
angle = pi * 0.5;
break;
case AxisDirection.down:
angle = pi;
break;
default:
angle = 0;
}
return Positioned(
left: axisDirection == AxisDirection.left
? -arrowSize.width + 5
: (axisDirection == AxisDirection.up || axisDirection == AxisDirection.down ? width * locationOfArrow - arrowSize.width / 2 : null),
right: axisDirection == AxisDirection.right ? -arrowSize.width + 5 : null,
top: axisDirection == AxisDirection.up
? -arrowSize.width + 5
: (axisDirection == AxisDirection.right || axisDirection == AxisDirection.left ? height * locationOfArrow - arrowSize.width / 2 : null),
bottom: axisDirection == AxisDirection.down ? -arrowSize.width + 5 : null,
child: Transform.rotate(
angle: angle,
child: CustomPaint(
size: arrowSize,
painter: ArrowPaint(color: color),
),
),
);
})
],
);
}
}
class ArrowPaint extends CustomPainter {
final Color color;
ArrowPaint({required this.color});
@override
void paint(Canvas canvas, Size size) {
Path path_0 = Path();
path_0.moveTo(size.width * 0.5745375, size.height * 0.06573708);
path_0.lineTo(size.width * 0.9813667, size.height * 0.8794000);
path_0.cubicTo(size.width * 1.001950, size.height * 0.9205625, size.width * 0.9852625, size.height * 0.9706208, size.width * 0.9441000, size.height * 0.9912000);
path_0.cubicTo(size.width * 0.9325250, size.height * 0.9969875, size.width * 0.9197667, size.height, size.width * 0.9068292, size.height);
path_0.lineTo(size.width * 0.09316958, size.height);
path_0.cubicTo(size.width * 0.04714583, size.height, size.width * 0.009836208, size.height * 0.9626917, size.width * 0.009836208, size.height * 0.9166667);
path_0.cubicTo(size.width * 0.009836208, size.height * 0.9037292, size.width * 0.01284829, size.height * 0.8909708, size.width * 0.01863392, size.height * 0.8794000);
path_0.lineTo(size.width * 0.4254625, size.height * 0.06573708);
path_0.cubicTo(size.width * 0.4460458, size.height * 0.02457225, size.width * 0.4961042, size.height * 0.007886875, size.width * 0.5372667, size.height * 0.02846929);
path_0.cubicTo(size.width * 0.5533958, size.height * 0.03653296, size.width * 0.5664708, size.height * 0.04961000, size.width * 0.5745375, size.height * 0.06573708);
path_0.close();
Paint paint_0_fill = Paint()..style = PaintingStyle.fill;
paint_0_fill.color = color;
canvas.drawPath(path_0, paint_0_fill);
}
@override
bool shouldRepaint(covariant CustomPainter oldDelegate) {
return true;
}
}
class ItemResultCardWidgetWithParamsVitalSign extends StatelessWidget {
final String title;
final String subTitle;
final String note;
final String source;
final String referenceRange;
final double percentage;
final String buttonText;
final ResultTypes type;
final bool isArabic;
final bool showAtRisk;
final Function()? onButtonPressed;
const ItemResultCardWidgetWithParamsVitalSign({
Key? key,
required this.title,
required this.subTitle,
required this.referenceRange,
required this.percentage,
required this.note,
required this.source,
required this.buttonText,
required this.type,
this.onButtonPressed,
this.isArabic = false,
this.showAtRisk = false,
}) : super(key: key);
@override
Widget build(BuildContext context) {
final fontFamily = isArabic ? 'Cairo' : 'Poppins';
return Container(
// margin: const EdgeInsets.only(left: 0, right: 0, top: 11),
// decoration: BoxDecoration(
// borderRadius: const BorderRadius.all(Radius.circular(10)),
// border: Border(
// left: BorderSide(
// color: type == ResultTypes.criticalLow || type == ResultTypes.criticalHigh
// ? Color(0xFFDE7676)
// : type == ResultTypes.low || type == ResultTypes.high
// ? Color(0xFFEAB157)
// : type == ResultTypes.normal
// ? Color(0xFF09AA28)
// : Color(0xFF09AA28),
// width: MediaQuery.of(context).size.width * 0.015,
// ),
// ),
// color: Colors.white,
// boxShadow: [
// BoxShadow(
// color: Colors.grey.withOpacity(0.2),
// spreadRadius: 2,
// blurRadius: 5,
// offset: const Offset(0, 3),
// ),
// ],
// ),
child: Padding(
padding: const EdgeInsets.all(0.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.max,
children: [
// Title Row
// Row(
// mainAxisAlignment: MainAxisAlignment.spaceBetween,
// children: [
// Text(
// title,
// style: TextStyle(
// fontSize: 16,
// fontFamily: fontFamily,
// fontWeight: FontWeight.w600,
// color: const Color(0xff2E303A),
// letterSpacing: -0.64,
// height: 16 / 25,
// ),
// ),
// GestureDetector(
// onTap: onButtonPressed,
// child: Utils.tableColumnValueWithUnderLine(TranslationBase.of(context).viewFlowChart, isLast: true, isCapitable: false),
// ),
// ],
// ),
// const SizedBox(height: 8),
// Row(
// crossAxisAlignment: CrossAxisAlignment.start,
// children: [
// ResultStatusWidget(type: type),
// SizedBox(width: 5),
// Column(
// crossAxisAlignment: CrossAxisAlignment.start,
// children: [
// Text(
// subTitle,
// style: TextStyle(fontSize: 14, fontFamily: fontFamily, fontWeight: FontWeight.w600, color: const Color(0xff2E303A), letterSpacing: -0.56),
// ),
// Text(
// "Reference Range \n $referenceRange",
// style: TextStyle(
// fontSize: 10,
// fontFamily: fontFamily,
// fontWeight: FontWeight.w600,
// color: const Color(0xff2E303A),
// letterSpacing: -0.4,
// ),
// ),
// ],
// ),
// ],
// ),
// const SizedBox(height: 10),
// Progress Bar
SizedBox(
height: 55,
// width: 220,
width: MediaQuery.of(context).size.width * 0.66,
child: CustomResultProgressBar(
percentage: percentage,
value: subTitle,
type: type,
showAtRisk: showAtRisk),
),
// const SizedBox(height: 12),
// Note Section
// if (note.isNotEmpty)
// Column(
// crossAxisAlignment: CrossAxisAlignment.start,
// children: [
// const Divider(color: Color(0xFFEFEFEF), thickness: 1),
// const SizedBox(height: 10),
// Text(
// "Notes:",
// style: TextStyle(
// fontSize: 12,
// color: const Color(0xFF2E303A),
// letterSpacing: -0.4,
// fontWeight: FontWeight.bold,
// ),
// ),
// Text(
// note,
// style: TextStyle(
// fontSize: 12,
// color: const Color(0xFF575757),
// letterSpacing: -0.4,
// fontWeight: FontWeight.bold,
// ),
// ),
// ],
// ),
const SizedBox(height: 3),
],
),
),
);
}
}
class ResultStatusWidget extends StatelessWidget {
final ResultTypes type;
const ResultStatusWidget({
Key? key,
required this.type,
}) : super(key: key);
@override
Widget build(BuildContext context) {
Color? color;
IconData? icon;
switch (type) {
case ResultTypes.criticalLow:
color = const Color(0xFFDE7676);
icon = Icons.arrow_circle_down;
break;
case ResultTypes.low:
color = const Color(0xFFEAB157);
icon = Icons.arrow_circle_down;
break;
case ResultTypes.criticalHigh:
color = const Color(0xFFDE7676);
icon = Icons.arrow_circle_up;
break;
case ResultTypes.high:
color = const Color(0xFFEAB157);
icon = Icons.arrow_circle_up;
break;
case ResultTypes.normal:
color = const Color(0xFF09AA28);
icon = Icons.check_circle;
break;
}
// Return the icon if defined, otherwise a placeholder widget
return icon != null
? Icon(
icon,
color: color,
)
: const SizedBox(); // Use SizedBox to keep the layout consistent
}
}

@ -0,0 +1,87 @@
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:vital_sign_camera/vital_sign_camera.dart';
class BoundingBoxWidget extends StatelessWidget {
final Size deviceSize;
final NormalizedFaceBox? facebox;
final VideoFrameInfo? videoFrameInfo;
const BoundingBoxWidget({
Key? key,
required this.deviceSize,
required this.facebox,
required this.videoFrameInfo,
}) : super(key: key);
@override
Widget build(BuildContext context) {
if (facebox == null || videoFrameInfo == null) {
return Container();
}
// Get a map with left, top, width, and height of the bounding box for the face
Map boundingBox = computeBoundingBox();
return Positioned(
left: boundingBox['left'],
top: boundingBox['top'],
child: Container(
width: boundingBox['width'],
height: boundingBox['height'],
decoration: BoxDecoration(
border: Border.all(
color: Colors.red,
width: 2,
)),
),
);
}
// Helper function to compute the left, top, width, and height of the bounding box
Map computeBoundingBox() {
double width = videoFrameInfo!.width;
double height = videoFrameInfo!.height;
double windowWidth = deviceSize.width;
double windowHeight = deviceSize.height;
double screenAspectRatio = deviceSize.aspectRatio;
double frameAspectRatio = width / height;
int xTransform = 1;
if (Platform.isAndroid) {
xTransform = -1;
}
double scale = 1;
if (screenAspectRatio < frameAspectRatio) {
scale = windowHeight / height;
} else {
scale = windowWidth / width;
}
Map scaledFrameBounds = {
'x': (windowWidth - scale * width) / 2,
'y': (windowHeight - scale * height) / 2,
'width': scale * width,
'height': scale * height,
};
double x = facebox!.xCenter - facebox!.width / 2;
double y = facebox!.yCenter - facebox!.height / 2;
if (xTransform < 0) {
x = 1 - x - facebox!.width;
}
Map result = {
'left': scaledFrameBounds['x'] + x * scaledFrameBounds['width'],
'top': scaledFrameBounds['y'] + y * scaledFrameBounds['height'],
'width': facebox!.width * scaledFrameBounds['width'],
'height': facebox!.height * scaledFrameBounds['height'],
};
return result;
}
}

@ -0,0 +1,34 @@
import 'package:flutter/material.dart';
class Button extends StatelessWidget {
final void Function() onPressed;
final Size deviceSize;
final String title;
final Alignment alignment;
final EdgeInsets margin;
const Button({
Key? key,
required this.onPressed,
required this.deviceSize,
required this.title,
required this.alignment,
required this.margin,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return Align(
alignment: alignment,
child: Container(
margin: margin,
child: ElevatedButton(
onPressed: onPressed,
child: Text(
title,
style: const TextStyle(fontSize: 18),
),
),
));
}
}

@ -0,0 +1,23 @@
import 'package:flutter/material.dart';
class Error extends StatelessWidget {
final dynamic error;
final int? errorCode;
const Error({
Key? key,
this.error,
this.errorCode,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return Center(
child: Text(
"$error $errorCode",
style: const TextStyle(color: Colors.white),
textAlign: TextAlign.center,
),
);
}
}

@ -0,0 +1,222 @@
// import 'package:flutter/material.dart';
// import 'package:vital_sign_camera/vital_sign_camera.dart';
// import 'vital_sign_widget.dart';
//
// class HealthResultWidget extends StatelessWidget {
// final Size deviceSize;
// final void Function() onTap;
// final Health? healthResult;
//
// late final VitalSign? _vitalSign;
// late final HolisticAnalysis? _holisticAnalysis;
// late final CardiovascularRisks? _cardiovascularRisks;
// late final CovidRisk? _covidRisk;
// late final ScanParameters? _scanParameters;
//
// HealthResultWidget({
// Key? key,
// required this.deviceSize,
// required this.onTap,
// required this.healthResult,
// }) : super(key: key) {
// _vitalSign = healthResult?.vitalSigns;
// _holisticAnalysis = healthResult?.holisticHealth;
// _cardiovascularRisks = healthResult?.risks?.cardiovascularRisks;
// _covidRisk = healthResult?.risks?.covidRisk;
// _scanParameters = healthResult?.scanParameters;
// }
//
// @override
// Widget build(BuildContext context) {
// return Positioned(
// top: deviceSize.height * 0.07,
// left: deviceSize.width * 0.05,
// child: GestureDetector(
// onTap: onTap,
// child: SizedBox(
// width: deviceSize.width * 0.9,
// child: Container(
// color: Colors.black38,
// child: Padding(
// padding: const EdgeInsets.all(15),
// child: Column(
// crossAxisAlignment: CrossAxisAlignment.start,
// children: [
// Container(
// margin: const EdgeInsets.fromLTRB(0, 0, 0, 10),
// child: const Text(
// "Vital Signs",
// style: TextStyle(
// fontSize: 15,
// color: Colors.amber,
// fontWeight: FontWeight.bold,
// ),
// ),
// ),
// VitalSignWidget(
// vitalSignName: "Heart Rate",
// vitalSignValue: formatValueToTwoDp(
// healthResult?.vitalSigns.heartRate)),
// VitalSignWidget(
// vitalSignName: "SPO2",
// vitalSignValue: formatValueToTwoDp(
// healthResult?.vitalSigns.spo2)),
// VitalSignWidget(
// vitalSignName: "IBI",
// vitalSignValue: formatValueToTwoDp(
// healthResult?.vitalSigns.ibi)),
// if (_vitalSign?.stress != null)
// VitalSignWidget(
// vitalSignName: "Stress",
// vitalSignValue: formatValueToTwoDp(
// healthResult?.vitalSigns.stress)),
// if (_vitalSign?.respiratoryRate != null)
// VitalSignWidget(
// vitalSignName: "Respiratory Rate",
// vitalSignValue: formatValueToTwoDp(
// healthResult
// ?.vitalSigns.respiratoryRate)),
// if (_vitalSign?.hrvRmssd != null)
// VitalSignWidget(
// vitalSignName: "HRV RMSSD",
// vitalSignValue: formatValueToTwoDp(
// healthResult?.vitalSigns.hrvRmssd)),
// if (_vitalSign?.hrvSdnn != null)
// VitalSignWidget(
// vitalSignName: "HRV SDNN",
// vitalSignValue: formatValueToTwoDp(
// healthResult?.vitalSigns.hrvSdnn)),
// if (_vitalSign?.temperature != null)
// VitalSignWidget(
// vitalSignName: "Temperature",
// vitalSignValue: formatValueToTwoDp(
// healthResult?.vitalSigns.temperature)),
// if (_vitalSign?.bloodPressure != null)
// VitalSignWidget(
// vitalSignName: "Blood Pressure",
// vitalSignValue:
// healthResult?.vitalSigns.bloodPressure ??
// ""),
// if (_vitalSign?.bloodPressureSystolic != null)
// VitalSignWidget(
// vitalSignName: "Blood Pressure Systolic",
// vitalSignValue: formatValueToTwoDp(
// healthResult
// ?.vitalSigns.bloodPressureSystolic)),
// if (_vitalSign?.bloodPressureDiastolic != null)
// VitalSignWidget(
// vitalSignName: "Blood Pressure Diastolic",
// vitalSignValue: formatValueToTwoDp(
// healthResult
// ?.vitalSigns.bloodPressureDiastolic)),
// if (_holisticAnalysis != null)
// Container(
// margin: const EdgeInsets.fromLTRB(0, 25, 0, 10),
// child: const Text(
// "Holistic Analysis",
// style: TextStyle(
// fontSize: 15,
// color: Colors.amber,
// fontWeight: FontWeight.bold,
// ),
// ),
// ),
// if (_holisticAnalysis != null &&
// _holisticAnalysis?.bmi != null)
// VitalSignWidget(
// vitalSignName: "BMI",
// vitalSignValue: formatValueToTwoDp(
// healthResult?.holisticHealth?.bmi)),
// if (_holisticAnalysis != null &&
// _holisticAnalysis?.generalWellness != null)
// VitalSignWidget(
// vitalSignName: "General Wellness",
// vitalSignValue: formatValueToTwoDp(
// healthResult
// ?.holisticHealth?.generalWellness)),
// if (_cardiovascularRisks != null)
// Container(
// margin: const EdgeInsets.fromLTRB(0, 25, 0, 10),
// child: const Text(
// "Cardiovascular Risks",
// style: TextStyle(
// fontSize: 15,
// color: Colors.amber,
// fontWeight: FontWeight.bold,
// ),
// ),
// ),
// if (_cardiovascularRisks != null)
// VitalSignWidget(
// vitalSignName: "General",
// vitalSignValue: formatValueToTwoDp(
// healthResult?.risks?.cardiovascularRisks
// ?.generalRisk)),
// if (_cardiovascularRisks != null)
// VitalSignWidget(
// vitalSignName: "Congestive Heart Failure",
// vitalSignValue: formatValueToTwoDp(
// healthResult?.risks?.cardiovascularRisks
// ?.congestiveHeartFailure)),
// if (_cardiovascularRisks != null)
// VitalSignWidget(
// vitalSignName: "Coronary Heart Disease",
// vitalSignValue: formatValueToTwoDp(
// healthResult?.risks?.cardiovascularRisks
// ?.coronaryHeartDisease)),
// if (_cardiovascularRisks != null)
// VitalSignWidget(
// vitalSignName: "Intermittent Claudication",
// vitalSignValue: formatValueToTwoDp(
// healthResult?.risks?.cardiovascularRisks
// ?.intermittentClaudication)),
// if (_cardiovascularRisks != null)
// VitalSignWidget(
// vitalSignName: "Stroke",
// vitalSignValue: formatValueToTwoDp(
// healthResult?.risks?.cardiovascularRisks
// ?.stroke)),
// if (_covidRisk != null)
// Container(
// margin: const EdgeInsets.fromLTRB(0, 25, 0, 10),
// child: const Text(
// "Covid Risks",
// style: TextStyle(
// fontSize: 15,
// color: Colors.amber,
// fontWeight: FontWeight.bold,
// ),
// ),
// ),
// if (_covidRisk != null)
// VitalSignWidget(
// vitalSignName: "Risk",
// vitalSignValue: formatValueToTwoDp(
// healthResult
// ?.risks?.covidRisk?.covidRisk)),
// if (_scanParameters != null)
// Container(
// margin: const EdgeInsets.fromLTRB(0, 25, 0, 10),
// child: const Text(
// "Scan Parameters",
// style: TextStyle(
// fontSize: 15,
// color: Colors.amber,
// fontWeight: FontWeight.bold,
// ),
// ),
// ),
// if (_scanParameters != null)
// VitalSignWidget(
// vitalSignName: "Signal Quality",
// vitalSignValue: formatValueToTwoDp(
// healthResult
// ?.scanParameters?.signalQuality)),
// ])))),
// ));
// }
//
// String formatValueToTwoDp(double? value) {
// return (value != null) ? value.toStringAsFixed(2) : "";
// }
// }

@ -0,0 +1,37 @@
import 'package:flutter/material.dart';
class ScanCondition extends StatelessWidget {
final String scanConditionName;
final bool isConditionSatisfied;
const ScanCondition({
Key? key,
required this.scanConditionName, // condition
required this.isConditionSatisfied, // status
}) : super(key: key);
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.fromLTRB(0, 5, 0, 0),
child: Row(
children: [
(isConditionSatisfied)
? Image.asset('assets/images/checkmark.png', width: 14)
: Image.asset('assets/images/crossmark.png', width: 14),
Padding(
padding: const EdgeInsets.fromLTRB(5, 0, 0, 0),
child: Text(
scanConditionName,
style: const TextStyle(
fontSize: 14,
color: Colors.white,
fontWeight: FontWeight.bold,
),
),
),
],
),
);
}
}

@ -0,0 +1,93 @@
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:flutter/material.dart';
import 'package:vital_sign_camera/vital_sign_camera.dart';
import 'scan_condition.dart';
class ScanConditionChecklist extends StatelessWidget {
final ScanConditions conditions; // ScanCondition
const ScanConditionChecklist({
Key? key,
required this.deviceSize,
required this.conditions, // ScanCondition
}) : super(key: key);
final Size deviceSize;
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 16.0),
child: Material(
color: Color(0xFF596C7C).withOpacity(0.7),
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)),
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 32),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
TranslationBase.of(context).scanningConditions,
style: TextStyle(
fontSize: 15,
color: Colors.white,
fontWeight: FontWeight.bold,
),
),
Padding(
padding: const EdgeInsets.fromLTRB(0, 10, 0, 0),
child: Row(
children: [
Expanded(
child: Column(
children: [
ScanCondition(
scanConditionName:
TranslationBase.of(context).lighting,
isConditionSatisfied: conditions.lighting,
),
ScanCondition(
scanConditionName:
TranslationBase.of(context).distance,
isConditionSatisfied: conditions.distance,
),
ScanCondition(
scanConditionName:
TranslationBase.of(context).centered,
isConditionSatisfied: conditions.centered,
),
],
),
),
Expanded(
child: Column(
children: [
ScanCondition(
scanConditionName:
TranslationBase.of(context).movement,
isConditionSatisfied: conditions.movement,
),
ScanCondition(
scanConditionName:
TranslationBase.of(context).frameRate,
isConditionSatisfied: conditions.frameRate,
),
ScanCondition(
scanConditionName:
TranslationBase.of(context).serverReady,
isConditionSatisfied: conditions.serverReady,
),
],
),
),
],
),
),
],
),
),
),
);
}
}

@ -0,0 +1,68 @@
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:flutter/material.dart';
import 'package:vital_sign_camera/vital_sign_camera.dart';
class ScanStatus extends StatelessWidget {
final GetHealthStage? stage;
final double? remainingTime;
const ScanStatus({
Key? key,
required this.stage,
required this.remainingTime,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.end,
children: [
DefaultTextStyle(
style: const TextStyle(
fontSize: 14,
color: Colors.white,
),
child: Text(
getRemainingTime(),
style: const TextStyle(
fontSize: 14,
color: Colors.white,
),
),
),
DefaultTextStyle(
style: const TextStyle(
fontSize: 14,
color: Colors.white,
),
child: Text(
getScanStage(context),
style: const TextStyle(
fontSize: 14,
color: Colors.white,
),
),
),
],
),
);
}
String getScanStage(context) {
if (stage == GetHealthStage.waitingData) {
return TranslationBase.of(context).waitingData;
} else if (stage == GetHealthStage.collectingData) {
return TranslationBase.of(context).collectingData;
} else if (stage == GetHealthStage.analyzingData) {
return TranslationBase.of(context).analyzingData;
}
return ''; // idle
}
String getRemainingTime() {
return (remainingTime != null && remainingTime != double.infinity)
? remainingTime!.toStringAsFixed(0)
: "";
}
}

@ -0,0 +1,31 @@
import 'package:diplomaticquarterapp/theme/colors.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/buttons/defaultButton.dart';
import 'package:flutter/material.dart';
class StartButton extends StatelessWidget {
final void Function() onPressed;
final bool disabled;
const StartButton({
Key? key,
required this.onPressed,
required this.disabled,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.only(right: 16.0, left: 16, bottom: 12),
child: DefaultButton(
TranslationBase.of(context).start,
(disabled)
? null
: () {
if (!disabled) onPressed();
},
color: Color(0xFF2B353E),
disabledColor: Colors.grey,
));
}
}

@ -0,0 +1,459 @@
import 'package:diplomaticquarterapp/theme/colors.dart';
import 'package:diplomaticquarterapp/vital_signs/components/barWidget.dart';
import 'package:diplomaticquarterapp/vital_signs/data/vitals_benchmark.dart';
import 'package:flutter/material.dart';
class VitalSignWidget extends StatelessWidget {
final String vitalSignName;
final String vitalSignValue;
final String vectorUrl;
final dynamic condition;
final Map<String, dynamic>? lookupValues;
final Map<String, dynamic>? bloodPressureValues;
final Color? textColor;
final String vitalName;
const VitalSignWidget({
Key? key,
required this.vitalSignName,
required this.vitalSignValue,
required this.vitalName,
this.textColor,
required this.condition,
required this.vectorUrl,
this.lookupValues,
this.bloodPressureValues,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return Container(
child: Card(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(8),
),
color: Colors.white,
elevation: 2,
shadowColor: CustomColors.lightGreyColor,
child: Container(
decoration: BoxDecoration(
borderRadius: const BorderRadius.all(Radius.circular(8)),
border: Border(
left: BorderSide(
color: condition is RangeConditionWithTitle ? getColor(condition.current.interpretation) : getColor(condition.systolic?.systolic.interpretation),
// type == ResultTypes.criticalLow || type == ResultTypes.criticalHigh
// ?
// Color(0xFFDE7676),
// : type == ResultTypes.low || type == ResultTypes.high
// ? Color(0xFFEAB157)
// : type == ResultTypes.normal
// ? Color(0xFF09AA28)
// : Color(0xFF09AA28),
width: MediaQuery.of(context).size.width * 0.015,
),
),
color: Colors.white,
boxShadow: [
BoxShadow(
color: Colors.grey.withOpacity(0.2),
spreadRadius: 2,
blurRadius: 5,
offset: const Offset(0, 3),
),
],
),
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 8),
child: Column(crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [
Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
vitalSignName,
textAlign: TextAlign.start,
style: TextStyle(
fontSize: 18,
fontWeight: FontWeight.w600,
color: textColor ?? Colors.white,
),
),
),
// SizedBox(
// height: 8,
// ),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Container(
padding: const EdgeInsets.symmetric(horizontal: 8.0),
transform: Matrix4.translationValues(0.0, -8.0, 0.0),
width: 80,
child: Text(
"$vitalSignValue ${condition.unit}",
textAlign: TextAlign.start,
style: TextStyle(
fontSize: 14,
color: CustomColors.grey,
fontWeight: FontWeight.bold,
),
),
),
// if (condition is RangeConditionWithTitle)
ItemResultCardWidgetWithParamsVitalSign(
title: "Creatinine",
subTitle: vitalSignValue,
referenceRange: "64-104",
// percentage: 4,
percentage: getPercentage(vitalName, vitalSignValue, condition is RangeConditionWithTitle ? condition.current.interpretation : condition.systolic?.systolic.interpretation),
note: "Mayoclinic is the source of pediatrics value",
source: "source",
buttonText: "Click",
showAtRisk: vitalName == 'bmi',
type: ResultTypes.criticalLow)
// else if (condition is RangeConditionForBloodPressure)
// Status(
// status: "${TranslationBase.of(context).getValue(condition.systolic?.systolic.interpretation ?? '')}",
// originalData: condition.systolic?.systolic.interpretation ?? '',
// )
// Text(
// "${TranslationBase.of(context).getValue(condition.current?.quantitativeInterpretation ?? '')}",
// style: TextStyle(
// fontSize: 14,
// color: textColor ?? Colors.white,
// fontWeight: FontWeight.w500,
// ),
// ),
],
),
// SizedBox(
// height: 8,
// ),
// SizedBox(
// height: 30,
// child: Row(mainAxisSize: MainAxisSize.max, children: [
if (condition is RangeConditionWithTitle)
// SizedBox(
// height: 30,
// child: Row(mainAxisSize: MainAxisSize.max, children: [
// Expanded(
// flex: 1,
// child: ListView.separated(
// separatorBuilder: (_, __) => SizedBox(
// width: 8,
// ),
// scrollDirection: Axis.horizontal,
// shrinkWrap: true,
// itemCount: condition.condition?.length ?? 0,
// itemBuilder: (_, index) => RangeWidget(
// title: condition.condition?[index].title ?? 'test',
// isSelected: condition.condition?[index].isInRange(vitalSignValue) == true,
// originalData: condition.current?.interpretation ?? '',
// ),
// ),
// ),
// ]),
// ),
// ItemResultCardWidgetWithParamsVitalSign(
// title: "Creatinine",
// subTitle: vitalSignValue,
// referenceRange: "64-104",
// // percentage: 4,
// percentage: getPercentage(vitalName, vitalSignValue),
// note: "Mayoclinic is the source of pediatrics value",
// source: "source",
// buttonText: "Click",
// type: ResultTypes.criticalLow),
// Flexible(
// flex: 1,
// child: ListView.separated(
// physics: NeverScrollableScrollPhysics(),
// separatorBuilder: (_, __) => SizedBox(
// width: 8,
// ),
// shrinkWrap: true,
// itemCount: lookupValues?.length ?? 0,
// itemBuilder: (_, index) {
// var key = lookupValues?.keys.elementAt(index);
// return RangeWidget(
// title: key ?? '',
// values: lookupValues?[key] ?? [],
// isSelected: false,
// );
// }),
// ),
if (condition is RangeConditionForBloodPressure)
SizedBox(
height: 30,
child: Row(mainAxisSize: MainAxisSize.max, children: [
Expanded(
flex: 1,
child: ListView.separated(
separatorBuilder: (_, __) => SizedBox(
width: 8,
),
scrollDirection: Axis.horizontal,
shrinkWrap: true,
itemCount: condition.condition?.length ?? 0,
itemBuilder: (_, currentIndex) {
var title = condition.condition?[currentIndex].quotient ?? '';
return RangeWidget(
title: title,
isSelected: condition.condition?[currentIndex]?.getValue("systolic-lng")?.isSelected == true,
originalData: condition.systolic?.systolic.interpretation ?? '',
);
}),
),
]),
),
// Flexible(
// flex: 1,
// child: ListView.separated(
// separatorBuilder: (_, __) => SizedBox(
// width: 8,
// ),
// physics: NeverScrollableScrollPhysics(),
// shrinkWrap: true,
// itemCount: bloodPressure.length ?? 0,
// itemBuilder: (_, index) {
// // return RangeWidget(
// // title: key??'',
// // values: lookupValues?[key]??[],isSelected: false,
// // );
// return Column(
// children: [
// Row(
// mainAxisAlignment: MainAxisAlignment.spaceBetween,
// children: [
// Text(
// TranslationBase.of(context)
// .getValue(bloodPressure[index] ?? ''),
// textAlign: TextAlign.center,
// style:
// TextStyle(color: Colors.black, fontSize: 16),
// ),
//
// Status(
// status:
// "${TranslationBase.of(context).getValue(condition.getValue(bloodPressure[index])?.quantitativeInterpretation ?? '')}",
// originalData:condition.getValue(bloodPressure[index])?.quantitativeInterpretation ?? '' ,
// )
// ],
// ),
// SizedBox(height: 16),
// SizedBox(
// height: 30,
// child: Row(
// mainAxisSize: MainAxisSize.max,
// children: [
// Expanded(
// flex: 1,
// child: ListView.separated(
// separatorBuilder: (_, __) => SizedBox(
// width: 8,
// ),
// scrollDirection: Axis.horizontal,
// shrinkWrap: true,
// itemCount:
// condition.condition?.length ?? 0,
// itemBuilder: (_, currentIndex) {
// var title = condition
// .condition?[currentIndex]
// .getValue(
// bloodPressure[index]).title ??
// '';
// return RangeWidget(
// title: title,
// isSelected: condition
// .condition?[currentIndex]
// ?.getValue(
// bloodPressure[index])
// ?.isSelected ==
// true,
// );
// }),
// ),
// ]),
// ),
// SizedBox(height: 16),
// // SizedBox(
// // height:220,
// // child: ListView.separated(
// // separatorBuilder: (_, __) => SizedBox(
// // width: 8,
// // ),
// // physics: NeverScrollableScrollPhysics(),
// // shrinkWrap: true,
// // itemCount: bloodPressureValues?[key]?.length ?? 0,
// // itemBuilder: (_, index) {
// // var title = bloodPressureValues?[key]?.keys.elementAt(index);
// //
// // return RangeWidget(
// // title: title ?? '',
// // values: bloodPressureValues?[key]?[title] ?? [],
// // isSelected: false,
// // );
// // }))
// ],
// );
// }),
// ),
// ]),
// ),
// SizedBox(
// height: 8,
// ),
// Row(
// mainAxisAlignment: MainAxisAlignment.spaceBetween,
// children: [
// Text(
// TranslationBase.of(context).getValue(
// condition.condition?.first.interpretation ?? ''),
// style: TextStyle(
// fontSize: 14,
// color: textColor ?? Colors.white,
// fontWeight: FontWeight.w500,
// ),
// ),
// Text(
// TranslationBase.of(context).getValue(
// condition.condition?.last.interpretation ?? ''),
// style: TextStyle(
// fontSize: 14,
// color: textColor ?? Colors.white,
// fontWeight: FontWeight.w500,
// ),
// ),
// ],
// ),
// SizedBox(
// height: 8,
// ),
]),
),
),
),
);
}
double getPercentage(String vitalName, String value, String interpretationValue) {
double percent = 0;
switch (interpretationValue) {
case "poor":
case "atRisk":
percent = 4;
case "good":
percent = 40;
case "excellent":
if (vitalName == 'bmi')
percent = 55;
else
percent = 75;
}
if (interpretationValue == "atRisk" && vitalName == 'bmi') percent = 85;
return percent;
}
getColor(title) {
switch (title) {
case "excellent":
return Color(0xFF14a45f);
case "good":
return Color(0xff84d368);
case "poor":
return Color(0xFFDE7676);
case "atRisk":
return Color(0xFFE82626);
}
}
}
class RangeWidget extends StatelessWidget {
final String title;
final bool isSelected;
final String originalData;
const RangeWidget({super.key, required this.title, required this.isSelected, required this.originalData});
@override
Widget build(BuildContext context) {
return SizedBox(
height: 30,
child: Material(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(3),
),
// color: Color(0xFF359846),
color: (isSelected) ? getColor(originalData) : CustomColors.lightGreyColor,
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Center(
child: Text(
title,
textAlign: TextAlign.center,
style: TextStyle(color: (isSelected) ? Colors.white : Colors.black, fontSize: 12),
),
),
),
),
);
}
getColor(title) {
switch (title) {
case "excellent":
return Color(0xFF14a45f);
case "good":
return Color(0xff84d368);
case "poor":
return Color(0xFFDE7676);
case "atRisk":
return Color(0xFFa2494b);
}
}
}
class Status extends StatelessWidget {
final String status;
final String originalData;
const Status({super.key, required this.status, required this.originalData});
@override
Widget build(BuildContext context) {
return Material(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(3),
),
// color: Color(0xFF359846),
color: getColor(originalData),
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 6),
child: Text(status,
style: TextStyle(
color: Colors.white,
fontSize: 12,
fontWeight: FontWeight.w600,
)),
));
}
getColor(title) {
switch (title) {
case "excellent":
return Color(0xFF275b45);
case "good":
return Color(0xFF507a3d);
case "poor":
return Color(0xFFa86452);
case "atRisk":
return Color(0xFFa2494b);
}
}
}

@ -0,0 +1,565 @@
var vital = {
"HR": {
"unit": "bpm",
"values": [
{
"min": 0,
"max": 60,
"interpretation": "atRisk",
"quantitativeInterpretation": "low",
"title": "< 60"
},
{
"min": 80,
"max": 100,
"interpretation": "poor",
"quantitativeInterpretation": "normal",
"title": "80-100"
},
{
"min": 60,
"max": 80,
"interpretation": "excellent",
"quantitativeInterpretation": "normal",
"title": "60-80"
},
{
"min": 100,
"max": 0,
"interpretation": "atRisk",
"quantitativeInterpretation": "high",
"title": "≥ 100"
},
]
},"hrvv": {
"unit": "ms",
"values":[
{
"min": 0,
"max": 10.8,
"interpretation": "atRisk",
"quantitativeInterpretation": "low",
"title": "< 10.8"
},
{
"min": 10.8,
"max": 35.0,
"interpretation": "poor",
"quantitativeInterpretation": "low",
"title": "10.8-16.4"
},
{
"min": 35.0,
"max": 51.5,
"interpretation": "good",
"quantitativeInterpretation": "normal",
"title": "35.0-51.5"
},
{
"min": 51.5,
"max": 0,
"interpretation": "excellent",
"quantitativeInterpretation": "normal",
"title": "≥ 51.5"
}
]
},
"Sp02": {
"unit": "%",
"values": [
{
"min": 0,
"max": 90,
"interpretation": "atRisk",
"quantitativeInterpretation": "low",
"title": "≥ 90"
},
{
"min": 90,
"max": 95,
"interpretation": "poor",
"quantitativeInterpretation": "possiblyLow",
"title": "90-95"
},
{
"min": 95,
"max": 97,
"interpretation": "good",
"quantitativeInterpretation": "normal",
"title": "95-97"
},
{
"min": 97,
"max": 100,
"interpretation": "excellent",
"quantitativeInterpretation": "normal",
"isMaxIncluded": true,
"title": "97-100"
}
]
},
"blood_pressure": {
"unit": "mmHg",
"values": [
{
"quotient": "0-90",
"systolic-lng": {
"min": 0,
"max": 90,
"interpretation": "atRisk",
"quantitativeInterpretation": "low",
"title": "0-90",
"heading": "systolic-lng"
},
"diastolic-lng": {
"min": 0,
"max": 60,
"interpretation": "atRisk",
"quantitativeInterpretation": "low",
"title": "0-60",
"heading": "diastolic-lng"
}
},
{
"quotient": "90-120",
"systolic-lng": {
"min": 90,
"max": 120,
"interpretation": "excellent",
"quantitativeInterpretation": "normal",
"title": "90-120",
"heading": "systolic-lng"
},
"diastolic-lng": {
"min": 60,
"max": 70,
"interpretation": "excellent",
"quantitativeInterpretation": "normal",
"title": "60-70",
"heading": "diastolic-lng"
}
},
{
"quotient": "120-130",
"systolic-lng": {
"min": 120,
"max": 130,
"interpretation": "good",
"quantitativeInterpretation": "normal",
"title": "120-130",
"heading": "systolic-lng"
},
"diastolic-lng": {
"min": 70,
"max": 80,
"interpretation": "good",
"quantitativeInterpretation": "normal",
"title": "70-80",
"heading": "diastolic-lng"
}
},
{
"quotient": "130-140",
"systolic-lng": {
"min": 130,
"max": 140,
"interpretation": "poor",
"quantitativeInterpretation": "slightlyHigh",
"title": "130-140",
"heading": "systolic-lng"
},
"diastolic-lng": {
"min": 80,
"max": 90,
"interpretation": "poor",
"quantitativeInterpretation": "normal",
"title": "80-90",
"heading": "diastolic-lng"
}
},
{
"quotient": "≥ 140 /90",
"systolic-lng": {
"min": 140,
"max": 0,
"interpretation": "atRisk",
"quantitativeInterpretation": "high",
"title": "140-200",
"heading": "systolic-lng"
},
"diastolic-lng": {
"min": 90,
"max": 200,
"interpretation": "atRisk",
"quantitativeInterpretation": "high",
"title": "≥ 90",
"heading": "diastolic-lng"
}
}
]
},
"bmi": {
"unit": "",
"values": [
{
"min": 0,
"max": 18.5,
"interpretation": "poor",
"quantitativeInterpretation": "normal",
"title": "< 18.5"
},
{
"min": 18.5,
"max": 25,
"interpretation": "excellent",
"quantitativeInterpretation": "normal",
"title": "25-30"
},{
"min": 25,
"max": 30,
"interpretation": "good",
"quantitativeInterpretation": "normal",
"title": "25-30"
},
{
"min": 30,
"max": 40,
"interpretation": "atRisk",
"quantitativeInterpretation": "high",
"title": "30-40"
},
{
"min": 40,
"max": 0,
"interpretation": "atRisk",
"quantitativeInterpretation": "high",
"title": "≥40"
},
]
},
"respiratoryRate": {
"unit": "bpm",
"values": [
{
"min": 0,
"max": 12,
"interpretation": "poor",
"quantitativeInterpretation": "low",
"title": "< 12"
},
{
"min": 12,
"max": 20,
"interpretation": "excellent",
"quantitativeInterpretation": "normal",
"title": "25-30"
},
{
"min": 20,
"max": 0,
"interpretation": "poor",
"quantitativeInterpretation": "high",
"title": "≥ 20"
},
]
},
"cvd": {
"unit": "%",
"values": [
{
"min": 0,
"max": 1,
"interpretation": "excellent",
"quantitativeInterpretation": "normal",
"title": "< 1"
},
{
"min": 1,
"max": 10,
"interpretation": "Average",
"quantitativeInterpretation": "slightlyHigh",
"title": "1-10"
},
{
"min": 10,
"max": 20,
"interpretation": "poor",
"quantitativeInterpretation": "moderatelyHigh",
"title": "10-20"
},
{
"min": 20,
"max": 0,
"interpretation": "atRisk",
"quantitativeInterpretation": " high",
"title": "≥ 20"
},
]
},
"generalWellness": {
"unit": "",
"values": [
{
"min": 0,
"max": 40,
"interpretation": "poor",
"quantitativeInterpretation": "low",
"title": "< 40"
},
{
"min": 40,
"max": 80,
"interpretation": "good",
"quantitativeInterpretation": "normal",
"title": "40-80"
},
{
"min": 80,
"max": 100,
"interpretation": "excellent",
"quantitativeInterpretation": "normal",
"title": "80-100",
"isMaxIncluded": true
},
]
},
"stressLevel": {
"unit": "",
"values": [
{
"min": 0,
"max": 2,
"interpretation": "excellent",
"quantitativeInterpretation": "normal",
"title": "0-2"
},
{
"min": 2,
"max": 3,
"interpretation": "good",
"quantitativeInterpretation": "normal",
"title": "2-3"
},
{
"min": 3,
"max": 0,
"interpretation": "poor",
"quantitativeInterpretation": "high",
"title": "80-100",
},
]
},
};
var vitalValues = {
"HR": {
"excellent": ["60-80"],
"poor": ["80-100"],
"atRisk": ["< 60", "≥ 100"]
},
"hrvv": {
"excellent": ["≥ 51.5"],
"good": ["35.0-51.5"],
"poor": ["10.8-16.4"],
"atRisk": ["< 10.8"]
},
"Sp02": {
"excellent": ["97-100"],
"good": ["95-97"],
"poor": ["90-95"],
"atRisk": ["≥ 90"]
},
"blood_pressure": {
"systolic-lng": {
"excellent": ["90-120"],
"good": ["120-130"],
"poor": ["130-140"],
"atRisk": ["0-90", "140-200"]
},
"diastolic-lng": {
"excellent": ["60-70"],
"good": ["70-80"],
"poor": ["80-90"],
"atRisk": ["0-60", "≥ 90"]
}
},
// "bmi": {
// "unit": "",
// "values": [
// {
// "min": 0,
// "max": 18.5,
// "interpretation": "poor",
// "quantitativeInterpretation": "normal",
// "title": "< 18.5"
// },
// {
// "min": 18.5,
// "max": 25,
// "interpretation": "excellent",
// "quantitativeInterpretation": "normal",
// "title": "25-30"
// },{
// "min": 25,
// "max": 30,
// "interpretation": "poor",
// "quantitativeInterpretation": "normal",
// "title": "25-30"
// },
// {
// "min": 30,
// "max": 40,
// "interpretation": "atRisk",
// "quantitativeInterpretation": "high",
// "title": "30-40"
// },
// {
// "min": 40,
// "max": 0,
// "interpretation": "atRisk",
// "quantitativeInterpretation": "high",
// "title": "≥40"
// },
// ]
"bmi": {
"excellent":["18.5-25"],
"poor": ["< 18.5", "25-30"],
"atRisk": ["30-40", "≥40"],
},
"respiratoryRate": {
"excellent": ["25-30"],
"poor": ["< 12", "≥ 20"]
},
"cvd": {
"excellent": ["< 1"],
"Average": ["1-10"],
"poor": ["10-20"],
"atRisk": ["≥ 20"]
},
"generalWellness": {
"excellent": ["80-100"],
"good": ["40-80"],
"poor": ["< 40"]
},
"stressLevel": {
"excellent": ["0-2"],
"good": ["2-3"],
"poor": ["80-100"]
}
};
var bloodPressure = ["systolic-lng", "diastolic-lng"];
class RangeConditionWithTitle {
String? unit;
List<RangeCondition>? condition;
RangeCondition? current;
RangeConditionWithTitle({this.unit, this.condition});
RangeConditionWithTitle.fromJson(Map<String, dynamic> json, String formatValueToTwoDp) {
this.unit = json['unit'];
var conditions = json['values'] as List?;
this.condition =
conditions?.map((item) => RangeCondition.fromJson(item,formatValueToTwoDp)).toList();
print("the value is $formatValueToTwoDp");
current = condition?.where((element)=>element.isSelected == true).first;
}
}
class RangeConditionForBloodPressure {
String? unit;
List<BloodPressure>? condition;
BloodPressure? systolic;
BloodPressure? diastolic;
RangeCondition? getValue(String key){
switch(key){
case 'systolic-lng':
return systolic?.systolic;
case 'diastolic-lng':
return diastolic?.diastolic;
}
}
RangeConditionForBloodPressure({this.unit, this.condition});
RangeConditionForBloodPressure.fromJson(
Map<String, dynamic> json, String formatValueToTwoDp) {
this.unit = json['unit'];
var conditions = json['values'] as List?;
this.condition = conditions
?.map((item) => BloodPressure.fromJson(item, formatValueToTwoDp))
.toList();
print("the value is $formatValueToTwoDp");
systolic = condition
?.where((element) =>
element.systolic?.isSelected == true
).first;
diastolic = condition
?.where((element) =>
element.diastolic?.isSelected == true
).first;
}
}
class BloodPressure {
RangeCondition? systolic;
RangeCondition? diastolic;
String? quotient;
BloodPressure.fromJson(Map<String, dynamic> json, String selectedValue) {
systolic = RangeCondition.fromJson(json['systolic-lng'], selectedValue.split("/")[0]);
diastolic = RangeCondition.fromJson(json['diastolic-lng'], selectedValue.split("/")[1]);
quotient = json['quotient'] ?? '';
}
RangeCondition? getValue(String key) {
switch (key) {
case 'systolic-lng':
return this.systolic;
case 'diastolic-lng':
return this.diastolic;
}
}
}
class RangeCondition {
String? heading;
double? min;
double? max;
bool? isMaxIncluded;
String? interpretation;
String? quantitativeInterpretation;
String? title;
bool? isSelected;
RangeCondition(this.min, this.max, this.interpretation,
this.quantitativeInterpretation, this.isMaxIncluded);
RangeCondition.fromJson(Map<String, dynamic> json, String selectedValue) {
min = json['min'].toDouble();
max = json['max'].toDouble();
interpretation = json['interpretation'];
quantitativeInterpretation = json['quantitativeInterpretation'];
isMaxIncluded = json['isMaxIncluded'];
title = json['title'];
isSelected = isInRange(selectedValue);
heading = json['heading'];
}
bool isInRange(String data) {
num value = num.parse(data);
if (max == 0 && min != 0) return value >= min!;
if (min == 0 && max != 0) return value < max!;
if (isMaxIncluded == true) return value >= min! && value <= max!;
return value >= min! && value < max!;
}
}

@ -0,0 +1,306 @@
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/vital_signs/data/vitals_benchmark.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/material.dart';
import 'package:vital_sign_camera/vital_sign_camera.dart';
import 'components/vital_sign_widget.dart';
class ResultScreen extends StatelessWidget {
final Health? healthResult;
late final VitalSign? _vitalSign;
late final HolisticAnalysis? _holisticAnalysis;
late final CardiovascularRisks? _cardiovascularRisks;
late final CovidRisk? _covidRisk;
late final ScanParameters? _scanParameters;
ResultScreen({
Key? key,
required this.healthResult,
}) : super(key: key) {
_vitalSign = healthResult?.vitalSigns;
_holisticAnalysis = healthResult?.holisticHealth;
_cardiovascularRisks = healthResult?.risks?.cardiovascularRisks;
_covidRisk = healthResult?.risks?.covidRisk;
_scanParameters = healthResult?.scanParameters;
}
@override
Widget build(BuildContext context) {
final deviceSize = MediaQuery.of(context).size;
const textColor = Color.fromARGB(255, 0, 0, 0);
return AppScaffold(
isShowAppBar: true,
appBarTitle: TranslationBase.of(context).result,
showNewAppBar: true,
showNewAppBarTitle: true,
overrideUserLogin: true,
backgroundColor: Color(0xffF8F8F8),
appBarIcons: [
Center(
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 16),
child: Text(
"Scan Quality: ${_scanParameters!.signalQuality.toStringAsFixed(0)}%",
style: TextStyle(color: Colors.black, fontSize: 14, letterSpacing: -0.68, fontWeight: FontWeight.bold),
),
),
),
],
body: SingleChildScrollView(
child: Padding(
padding: const EdgeInsets.all(15),
child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
if (_holisticAnalysis != null && _holisticAnalysis?.generalWellness != null)
VitalSignWidget(
textColor: textColor,
lookupValues: vitalValues['generalWellness']!,
vitalSignName: TranslationBase.of(context).generalWellness,
condition: RangeConditionWithTitle.fromJson(vital['generalWellness']!, formatValueToTwoDp(healthResult?.holisticHealth?.generalWellness)),
vitalSignValue: formatValueToTwoDp(healthResult?.holisticHealth?.generalWellness),
vectorUrl: 'assets/images/svg/wellness.svg',
vitalName: "generalWellness",
), //wellness
if (_vitalSign?.stress != null)
VitalSignWidget(
textColor: textColor,
vitalSignName: TranslationBase.of(context).stress,
condition: RangeConditionWithTitle.fromJson(vital['stressLevel']!, formatValueToTwoDp(healthResult?.vitalSigns.stress)),
lookupValues: vitalValues['stressLevel']!,
vitalSignValue: formatValueToTwoDp(healthResult?.vitalSigns.stress),
vectorUrl: 'assets/images/svg/stress.svg',
vitalName: "stressLevel",
),
VitalSignWidget(
textColor: textColor,
vitalSignName: TranslationBase.of(context).pulseTitle,
condition: RangeConditionWithTitle.fromJson(vital['HR']!, formatValueToTwoDp(healthResult?.vitalSigns.heartRate)),
lookupValues: vitalValues['HR']!,
vitalSignValue: formatValueToTwoDp(healthResult?.vitalSigns.heartRate),
vectorUrl: 'assets/images/svg/heartrate.svg',
vitalName: "HR",
),
//heart rate
if (_vitalSign?.bloodPressure != null)
VitalSignWidget(
textColor: textColor,
vitalSignName: "Blood Pressure",
condition: RangeConditionForBloodPressure.fromJson(vital['blood_pressure']!, healthResult?.vitalSigns.bloodPressure ?? ""),
bloodPressureValues: vitalValues['blood_pressure']!,
vitalSignValue: healthResult?.vitalSigns.bloodPressure ?? "",
vectorUrl: 'assets/images/svg/bloodpressure.svg',
vitalName: "blood_pressure",
),
if (_vitalSign?.hrvSdnn != null)
VitalSignWidget(
vectorUrl: 'assets/images/svg/heartrate.svg',
textColor: textColor,
vitalSignName: "HRV SDNN",
lookupValues: vitalValues['hrvv']!,
condition: RangeConditionWithTitle.fromJson(vital['hrvv']!, formatValueToTwoDp(healthResult?.vitalSigns.hrvSdnn)),
vitalName: "hrvv",
vitalSignValue: formatValueToTwoDp(healthResult?.vitalSigns.hrvSdnn)),
//oxygen
VitalSignWidget(
textColor: textColor,
lookupValues: vitalValues['Sp02']!,
vitalName: "Sp02",
vitalSignName: TranslationBase.of(context).oxygenSaturation,
condition: RangeConditionWithTitle.fromJson(vital['Sp02']!, formatValueToTwoDp(healthResult?.vitalSigns.spo2)),
vitalSignValue: formatValueToTwoDp(healthResult?.vitalSigns.spo2),
vectorUrl: 'assets/images/svg/oxygen.svg',
),
if (_vitalSign?.respiratoryRate != null)
VitalSignWidget(
textColor: textColor,
lookupValues: vitalValues['respiratoryRate']!,
vitalName: "respiratoryRate",
vitalSignName: TranslationBase.of(context).respiratoryRate,
condition: RangeConditionWithTitle.fromJson(vital['respiratoryRate']!, formatValueToTwoDp(healthResult?.vitalSigns.respiratoryRate)),
vitalSignValue: formatValueToTwoDp(healthResult?.vitalSigns.respiratoryRate),
vectorUrl: 'assets/images/svg/breathing.svg',
),
if (_holisticAnalysis != null && _holisticAnalysis?.bmi != null)
VitalSignWidget(
textColor: textColor,
lookupValues: vitalValues['bmi']!,
vitalName: "bmi",
vitalSignName: TranslationBase.of(context).BMI,
condition: RangeConditionWithTitle.fromJson(vital['bmi']!, formatValueToTwoDp(healthResult?.holisticHealth?.bmi)),
vitalSignValue: formatValueToTwoDp(healthResult?.holisticHealth?.bmi),
vectorUrl: 'assets/images/svg/bmi.svg',
),
// VitalSignWidget(
// textColor: textColor,
// vitalSignName: "IBI",
// condition: RangeConditionWithTitle.fromJson(vital['HR']!),
// vitalSignValue:
// formatValueToTwoDp(healthResult?.vitalSigns.ibi)),
// if (_vitalSign?.hrvRmssd != null)
// VitalSignWidget(
// textColor: textColor,
// vitalSignName: "HRV RMSSD",
// vitalSignValue: formatValueToTwoDp(
// healthResult?.vitalSigns.hrvRmssd)),
// if (_vitalSign?.temperature != null)
// VitalSignWidget(
// textColor: textColor,
// vitalSignName: "Temperature",
// vitalSignValue: formatValueToTwoDp(
// healthResult?.vitalSigns.temperature)),
// if (_vitalSign?.bloodPressureSystolic != null)
// VitalSignWidget(
// textColor: textColor,
// vitalSignName: "Blood Pressure Systolic",
// vitalSignValue: formatValueToTwoDp(healthResult
// ?.vitalSigns.bloodPressureSystolic)),
// if (_vitalSign?.bloodPressureDiastolic != null)
// VitalSignWidget(
// textColor: textColor,
// vitalSignName: "Blood Pressure Diastolic",
// vitalSignValue: formatValueToTwoDp(healthResult
// ?.vitalSigns.bloodPressureDiastolic)),
// if (_holisticAnalysis != null)
// Container(
// margin: const EdgeInsets.fromLTRB(0, 25, 0, 10),
// child: const Text(
// "Holistic Analysis",
// style: TextStyle(
// fontSize: 15,
// color: Colors.amber,
// fontWeight: FontWeight.bold,
// ),
// ),
// ),
// if (_holisticAnalysis != null &&
// _holisticAnalysis?.absi != null)
// VitalSignWidget(
// textColor: textColor,
// vitalSignName: "ABSI",
// vitalSignValue: formatValueToTwoDp(
// healthResult?.holisticHealth?.absi)),
// if (_holisticAnalysis != null &&
// _holisticAnalysis?.cardiacWorkload != null)
// VitalSignWidget(
// textColor: textColor,
// vitalSignName: "Cardiac Workload",
// vitalSignValue: formatValueToTwoDp(
// healthResult?.holisticHealth?.cardiacWorkload)),
// if (_holisticAnalysis != null &&
// _holisticAnalysis?.pulseRespiratoryQuotient != null)
// VitalSignWidget(
// textColor: textColor,
// vitalSignName: "Pulse Respiratory Quotient",
// vitalSignValue: formatValueToTwoDp(healthResult
// ?.holisticHealth?.pulseRespiratoryQuotient)),
// if (_holisticAnalysis != null &&
// _holisticAnalysis?.waistToHeightRatio != null)
// VitalSignWidget(
// textColor: textColor,
// vitalSignName: "Waist to Height Ratio",
// vitalSignValue: formatValueToTwoDp(healthResult
// ?.holisticHealth?.waistToHeightRatio)),
// if (_cardiovascularRisks != null)
// Container(
// margin: const EdgeInsets.fromLTRB(0, 25, 0, 10),
// child: const Text(
// "Cardiovascular Risks",
// style: TextStyle(
// fontSize: 15,
// color: Colors.amber,
// fontWeight: FontWeight.bold,
// ),
// ),
// ),
// if (_cardiovascularRisks != null)
// VitalSignWidget(
// textColor: textColor,
// vitalSignName: TranslationBase.of(context).cvd,
// condition: RangeConditionWithTitle.fromJson(vital['cvd']!, formatValueToTwoDp(healthResult
// ?.risks?.cardiovascularRisks?.generalRisk)),
// vitalSignValue: formatValueToTwoDp(healthResult
// ?.risks?.cardiovascularRisks?.generalRisk),
// vectorUrl: 'assets/images/svg/heartrate.svg',),
// if (_cardiovascularRisks != null)
// VitalSignWidget(
// textColor: textColor,
// vitalSignName: "Congestive Heart Failure",
// vitalSignValue: formatValueToTwoDp(healthResult
// ?.risks
// ?.cardiovascularRisks
// ?.congestiveHeartFailure)),
// if (_cardiovascularRisks != null)
// VitalSignWidget(
// textColor: textColor,
// vitalSignName: "Coronary Heart Disease",
// vitalSignValue: formatValueToTwoDp(healthResult
// ?.risks
// ?.cardiovascularRisks
// ?.coronaryHeartDisease)),
// if (_cardiovascularRisks != null)
// VitalSignWidget(
// textColor: textColor,
// vitalSignName: "Intermittent Claudication",
// vitalSignValue: formatValueToTwoDp(healthResult
// ?.risks
// ?.cardiovascularRisks
// ?.intermittentClaudication)),
// if (_cardiovascularRisks != null)
// VitalSignWidget(
// textColor: textColor,
// vitalSignName: "Stroke",
// vitalSignValue: formatValueToTwoDp(healthResult
// ?.risks?.cardiovascularRisks?.stroke)),
// if (_covidRisk != null)
// Container(
// margin: const EdgeInsets.fromLTRB(0, 25, 0, 10),
// child: const Text(
// "Covid Risks",
// style: TextStyle(
// fontSize: 15,
// color: Colors.amber,
// fontWeight: FontWeight.bold,
// ),
// ),
// ),
// if (_covidRisk != null)
// VitalSignWidget(
// textColor: textColor,
// vitalSignName: "Risk",
// vitalSignValue: formatValueToTwoDp(
// healthResult?.risks?.covidRisk?.covidRisk)),
// if (_scanParameters != null)
// Container(
// margin: const EdgeInsets.fromLTRB(0, 25, 0, 10),
// child: const Text(
// "Scan Parameters",
// style: TextStyle(
// fontSize: 15,
// color: Colors.amber,
// fontWeight: FontWeight.bold,
// ),
// ),
// ),
// if (_scanParameters != null)
// VitalSignWidget(
// textColor: textColor,
// vitalSignName: "Signal Quality",
// vitalSignValue: formatValueToTwoDp(
// healthResult?.scanParameters?.signalQuality)),
]),
),
),
);
}
String formatValueToTwoDp(double? value) {
return (value != null) ? value.toStringAsFixed(2) : "";
}
}

@ -1,14 +1,43 @@
import 'dart:math';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:lottie/lottie.dart';
import 'package:vital_sign_camera/vital_sign_camera.dart';
// import 'package:wakelock/wakelock.dart';
import '../uitl/translations_delegate_base.dart';
import 'components/scan_condition_checklist.dart';
import 'components/scan_status.dart';
import 'components/start_button.dart';
import 'result_screen.dart';
// import 'package:lottie/lottie.dart';
// final UserInfo userInfo = UserInfo(
// age: 30,
// gender: Gender.male,
// weight: 75,
// // kg, Optional
// height: 164,
// // cm, Optional
// waistCircumference: 83,
// // cm Optional
// userId: 'dbd13e86-47f4-4a43-85f6-cf62fa750117');
final VitalSignCameraConfig config = VitalSignCameraConfig(apiKey: 'nIsZO45woSXSfIxsL1t79MWeIpsnGQr6B941MSF2', serverId: ServerId.awsEnterpriseProd);
class VitalSigns extends StatefulWidget {
const VitalSigns({super.key});
const VitalSigns({super.key, required this.userInfo});
final UserInfo userInfo;
@override
State<VitalSigns> createState() => _VitalSignState();
State<VitalSigns> createState() => _VitalSignsState();
}
class _VitalSignState extends State<VitalSigns> {
class _VitalSignsState extends State<VitalSigns> with RouteAware {
late final VitalSignCameraController _vitalSignCameraController;
late Future<CameraDevice?> cameraDevice;
@ -16,10 +45,9 @@ class _VitalSignState extends State<VitalSigns> {
void initState() {
super.initState();
cameraDevice = getFrontCamera();
// Wakelock.enable(); // keep the screen awake
}
double? _heartRate;
Future<CameraDevice?> getFrontCamera() async {
if (CameraPermissionStatus.authorized != await requestCameraPermission()) {
return null;
@ -27,44 +55,365 @@ class _VitalSignState extends State<VitalSigns> {
return queryCameraDevice(CameraPosition.front);
}
bool startedScanning = false; // set true when start button is pressed, set false when health result is tapped or error occurs
bool isAllConditionsMet = false; // check for the 6 scan conditions before enabling the start button
ScanConditions? _conditions;
GetHealthStage? _scanningStage;
double? _remainingTime;
Health? _healthResult;
NormalizedFaceBox? _normalizedFaceBox;
VideoFrameInfo? _videoFrameInfo;
dynamic _error;
int? _errorCode;
bool isCameraActive = true;
bool _showedHealthResult = false;
@override
void didChangeDependencies() {
super.didChangeDependencies();
// routeObserver.subscribe(this, ModalRoute.of(context)!);
}
@override
void dispose() {
// routeObserver.unsubscribe(this);
super.dispose();
}
@override
void didPushNext() {
setState(() {
isCameraActive = false;
});
}
@override
void didPopNext() {
setState(() {
isCameraActive = true;
startedScanning = false;
_healthResult = null;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Stack(children: [
VitalSignCamera(
onCreated: _onVitalSignCameraCreated,
isActive: true,
userInfo: UserInfo(
age: 30, gender: Gender.male, userId: '__YOUR_USER_ID__'),
config: VitalSignCameraConfig(apiKey: '__YOUR_API_KEY__'),
device: cameraDevice,
onVideoFrameProcessed: _onVideoFrameProcessed),
Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(
onPressed: () {
setState(() {
_vitalSignCameraController.startScanning();
});
},
child: const Text('start')),
Text('Heart rate: $_heartRate'),
],
final deviceSize = MediaQuery.of(context).size;
return Stack(
children: [
VitalSignCamera(onCreated: _onVitalSignCameraCreated, isActive: isCameraActive, userInfo: widget.userInfo, config: config, device: cameraDevice, onVideoFrameProcessed: _onVideoFrameProcessed),
if (_scanningStage != GetHealthStage.idle) // show remaining time count down during scan
Align(
alignment: Alignment.bottomCenter,
child: Padding(
padding: const EdgeInsets.only(bottom: 16.0),
child: ScanStatus(stage: _scanningStage, remainingTime: _remainingTime),
)),
if (mounted)
Column(children: [
Expanded(
child: CircularOverlay(
state: (_scanningStage == null || _scanningStage == GetHealthStage.idle) ? AnimationState.stop : AnimationState.playing,
)),
// Lottie.asset('assets/breathing.json', width: 200, height: 200, fit: BoxFit.fill),
if (_conditions != null) ScanConditionChecklist(deviceSize: deviceSize, conditions: _conditions!),
SizedBox(
height: 16,
),
),
]),
if (_scanningStage == GetHealthStage.idle && isCameraActive) // show start button only when it is not scanning
...{
StartButton(
onPressed: () {
setState(() {
_vitalSignCameraController.startScanning();
startedScanning = true;
_healthResult = null;
_showedHealthResult = false;
});
},
disabled: !isAllConditionsMet,
),
} else
SizedBox(
height: 55,
)
]),
Padding(
padding: const EdgeInsetsDirectional.only(top: 32.0, start: 14),
child: GestureDetector(
onTap: () {
Navigator.pop(context);
},
child: SvgPicture.asset(
'assets/images/svg/cross.svg',
width: 32,
height: 32,
)),
)
],
);
// return Scaffold(
// body: Stack(
// children: [
// VitalSignCamera(
// onCreated: _onVitalSignCameraCreated,
// isActive: isCameraActive,
// userInfo: userInfo,
// config: config,
// device: cameraDevice,
// onVideoFrameProcessed: _onVideoFrameProcessed),
// // A back button to navigate back to previous screen
// if (_scanningStage == GetHealthStage.idle && !startedScanning)
// BackHomeButton(
// onPressed: () {
// setState(() {
// isCameraActive = false;
// });
// Navigator.pop(context);
// },
// deviceSize: deviceSize),
// // A button to toggle isCameraActive
// if (_scanningStage == GetHealthStage.idle && !startedScanning)
// Button(
// onPressed: () {
// setState(() {
// isCameraActive = !isCameraActive;
// });
// },
// deviceSize: deviceSize,
// title: "Toggle isCameraActive",
// alignment: Alignment.topRight,
// margin: EdgeInsets.fromLTRB(
// 0, deviceSize.height * 0.05, deviceSize.width * 0.05, 0)),
// if (!isCameraActive)
// const Center(
// child: Text(
// "Camera is not active.",
// textAlign: TextAlign.center,
// ))
// else
// Stack(children: [
// if (_scanningStage == GetHealthStage.idle &&
// isCameraActive) // show start button only when it is not scanning
// StartButton(
// onPressed: () {
// setState(() {
// _vitalSignCameraController.startScanning();
// startedScanning = true;
// _healthResult = null;
// _showedHealthResult = false;
// });
// },
// disabled: !isAllConditionsMet,
// ),
// if (_conditions != null &&
// _scanningStage == GetHealthStage.idle &&
// !startedScanning) // show scan conditions checking only when it is not scanning or showing health result
// ScanConditionChecklist(
// deviceSize: deviceSize, conditions: _conditions!),
// if (_scanningStage !=
// GetHealthStage
// .idle) // show remaining time count down during scan
// ScanStatus(
// stage: _scanningStage, remainingTime: _remainingTime),
// if (!startedScanning ||
// _healthResult ==
// null) // show bounding box before and during scan, but not when health result is shown
// BoundingBoxWidget(
// deviceSize: deviceSize,
// facebox: _normalizedFaceBox,
// videoFrameInfo: _videoFrameInfo),
// if (_error != null) Error(error: _error, errorCode: _errorCode),
// ])
// ],
// ),
// );
}
void _onVideoFrameProcessed(VideoFrameProcessedEvent event) {
// setState(() {
// _heartRate = event.healthResult?.health?.vitalSigns.heartRate;
// });
if (!_showedHealthResult && _healthResult == null && event.healthResult?.health != null) {
_showedHealthResult = true;
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => ResultScreen(
healthResult: _healthResult,
),
),
);
}
setState(() {
_conditions = event.scanConditions;
isAllConditionsMet = checkIfAllScanConditionsMet();
_scanningStage = event.healthResult?.stage;
_remainingTime = event.healthResult?.remainingTime;
_healthResult = event.healthResult?.health;
_normalizedFaceBox = event.faceBox;
_videoFrameInfo = event.videoFrameInfo;
_error = event.healthResult?.error;
_errorCode = event.healthResult?.errorCode;
if (_error != null) {
// when error occurs, reshow condition checklist & disabled start button
startedScanning = false;
isAllConditionsMet = false;
}
});
}
bool checkIfAllScanConditionsMet() {
if (_conditions?.centered == true &&
_conditions?.distance == true &&
_conditions?.frameRate == true &&
_conditions?.lighting == true &&
_conditions?.movement == true &&
_conditions?.serverReady == true) {
return true;
} else {
return false;
}
}
void _onVitalSignCameraCreated(VitalSignCameraController controller) {
_vitalSignCameraController = controller;
}
}
enum AnimationState { playing, stop }
class CircularOverlay extends StatefulWidget {
final AnimationState state;
const CircularOverlay({Key? key, this.state = AnimationState.stop}) : super(key: key);
@override
State<CircularOverlay> createState() => _CircularOverlayState();
}
class _CircularOverlayState extends State<CircularOverlay> with SingleTickerProviderStateMixin {
late AnimationController _controller;
@override
void didChangeDependencies() {
if (widget.state == AnimationState.playing) {
_controller.forward(from: 0);
} else {
_controller.stop();
}
}
@override
void didUpdateWidget(CircularOverlay oldWidget) {
if (widget.state == AnimationState.playing) {
_controller.repeat();
} else {
_controller.stop();
}
}
@override
void initState() {
super.initState();
_controller = AnimationController(
vsync: this,
duration: const Duration(seconds: 8),
);
_controller.stop();
if (widget.state == AnimationState.playing) {
_controller.forward(from: 0);
} else {
_controller.stop();
}
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return AnimatedBuilder(
animation: _controller,
builder: (context, child) {
return CustomPaint(
painter: CircularBarsPainter(animationValue: _controller.value),
size: Size(MediaQuery.sizeOf(context).width * .9, MediaQuery.sizeOf(context).height * .8),
);
},
);
}
}
class CircularBarsPainter extends CustomPainter {
final double animationValue;
CircularBarsPainter({required this.animationValue});
@override
void paint(Canvas canvas, Size size) {
final center = Offset(size.width / 2, size.height / 1.8);
final radius = min(size.width / 2, size.height / 2);
final barPaint = Paint()
..color = Colors.white
..strokeWidth = 4
..style = PaintingStyle.stroke;
const numberOfBars = 64;
final angleIncrement = 2 * pi / numberOfBars;
for (int i = 0; i < numberOfBars; i++) {
final angle = i * angleIncrement + (animationValue * 2 * pi);
final start = Offset(
center.dx + radius * cos(angle),
center.dy + radius * sin(angle),
);
final end = Offset(
center.dx + (radius - 20) * cos(angle),
center.dy + (radius - 20) * sin(angle),
);
canvas.drawLine(start, end, barPaint);
}
}
@override
bool shouldRepaint(CircularBarsPainter oldDelegate) {
return oldDelegate.animationValue != animationValue;
}
}
class OvalOverlayPainter extends CustomPainter {
@override
void paint(Canvas canvas, Size size) {
final Paint overlayPaint = Paint()
..color = Colors.white.withOpacity(0.1)
..style = PaintingStyle.fill;
canvas.drawRect(
Rect.fromLTWH(0, 0, size.width, size.height),
overlayPaint,
);
final Rect ovalRect = Rect.fromCenter(
center: Offset(size.width / 2, size.height / 2),
width: size.width * 0.9,
height: size.height,
);
final Path ovalPath = Path()..addOval(ovalRect);
canvas.clipPath(ovalPath, doAntiAlias: true);
canvas.drawRect(
Rect.fromLTWH(0, 0, size.width, size.height),
Paint()..blendMode = BlendMode.clear,
);
}
@override
bool shouldRepaint(covariant CustomPainter oldDelegate) {
return false;
}
}

@ -0,0 +1,455 @@
import 'dart:math';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/uitl/utils.dart';
import 'package:flutter/material.dart';
enum ResultTypes { criticalLow, low, normal, high, criticalHigh }
class ItemResultCardWidget extends StatelessWidget {
final Widget child;
const ItemResultCardWidget({
Key? key,
required this.child,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return Row(
children: [
Expanded(
child: Padding(
padding: const EdgeInsets.only(left: 12, right: 12, bottom: 12),
child: child,
),
),
],
);
}
}
class CustomResultProgressBar extends StatelessWidget {
final double percentage;
final String value;
final ResultTypes type;
const CustomResultProgressBar({Key? key, required this.percentage, required this.value, required this.type}) : super(key: key);
@override
Widget build(BuildContext context) {
return LayoutBuilder(builder: (context, constraints) {
final double totalWidth = constraints.maxWidth;
final double spacing = 2;
final double tooltipPosition = (totalWidth * (percentage / 100)).clamp(0, totalWidth - 50);
return Stack(
children: [
Row(
children: [
_buildResultBar(
flex: 3,
color: Color(0xFFDE7676),
title: "Critical Low",
),
SizedBox(
width: spacing,
),
_buildResultBar(
flex: 2,
color: Color(0xFFEAB157),
title: "Low",
),
SizedBox(
width: spacing,
),
_buildResultBar(
flex: 5,
color: Color(0xFF09AA28),
title: "Normal",
),
SizedBox(
width: spacing,
),
_buildResultBar(
flex: 2,
color: Color(0xFFEAB157),
title: "High",
),
SizedBox(
width: spacing,
),
_buildResultBar(
flex: 3,
color: Color(0xFFDE7676),
title: "Critical High",
),
],
),
Positioned(
left: tooltipPosition,
top: 33,
child: Column(
children: [
TextCloud(
text: "${value}",
color: type == ResultTypes.criticalLow || type == ResultTypes.criticalHigh
? Color(0xFFDE7676)
: type == ResultTypes.low || type == ResultTypes.high
? Color(0xFFEAB157)
: type == ResultTypes.normal
? Color(0xFF09AA28)
: Color(0xFF09AA28),
width: 60,
height: 20,
padding: EdgeInsets.zero,
axisDirection: AxisDirection.up,
),
],
),
),
],
);
});
}
Widget _buildResultBar({
required int flex,
required Color color,
required String title,
}) {
return Expanded(
flex: flex,
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(
title,
style: const TextStyle(fontSize: 10, fontFamily: 'Poppins', letterSpacing: -0.24, fontWeight: FontWeight.w500),
textAlign: TextAlign.center,
),
const SizedBox(height: 5),
Container(
height: 5,
decoration: BoxDecoration(
color: color,
borderRadius: BorderRadius.all(Radius.circular(10)),
),
),
],
),
);
}
}
class TextCloud extends StatelessWidget {
final String text; // write here box content
final Color color; // Set box Color
final EdgeInsets padding; // Set content padding
final double width; // Box width
final double height; // Box Height
final AxisDirection axisDirection; // Set triangle location up,left,right,down
final double locationOfArrow; // set between 0 and 1, If 0.5 is set triangle position will be centered
const TextCloud({
super.key,
required this.text,
this.color = Colors.white,
this.padding = const EdgeInsets.all(10),
this.width = 200,
this.height = 100,
this.axisDirection = AxisDirection.down,
this.locationOfArrow = 0.5,
});
@override
Widget build(BuildContext context) {
Size arrowSize = const Size(12, 12);
return Stack(
clipBehavior: Clip.none,
children: [
Container(
width: width,
height: height,
padding: padding,
decoration: BoxDecoration(
color: color,
borderRadius: BorderRadius.circular(10),
),
child: Center(
child: Text(
text,
style: TextStyle(color: Colors.white),
)),
),
Builder(builder: (context) {
double angle = 0;
switch (axisDirection) {
case AxisDirection.left:
angle = pi * -0.5;
break;
case AxisDirection.up:
angle = pi * -2;
break;
case AxisDirection.right:
angle = pi * 0.5;
break;
case AxisDirection.down:
angle = pi;
break;
default:
angle = 0;
}
return Positioned(
left: axisDirection == AxisDirection.left
? -arrowSize.width + 5
: (axisDirection == AxisDirection.up || axisDirection == AxisDirection.down ? width * locationOfArrow - arrowSize.width / 2 : null),
right: axisDirection == AxisDirection.right ? -arrowSize.width + 5 : null,
top: axisDirection == AxisDirection.up
? -arrowSize.width + 5
: (axisDirection == AxisDirection.right || axisDirection == AxisDirection.left ? height * locationOfArrow - arrowSize.width / 2 : null),
bottom: axisDirection == AxisDirection.down ? -arrowSize.width + 5 : null,
child: Transform.rotate(
angle: angle,
child: CustomPaint(
size: arrowSize,
painter: ArrowPaint(color: color),
),
),
);
})
],
);
}
}
class ArrowPaint extends CustomPainter {
final Color color;
ArrowPaint({required this.color});
@override
void paint(Canvas canvas, Size size) {
Path path_0 = Path();
path_0.moveTo(size.width * 0.5745375, size.height * 0.06573708);
path_0.lineTo(size.width * 0.9813667, size.height * 0.8794000);
path_0.cubicTo(size.width * 1.001950, size.height * 0.9205625, size.width * 0.9852625, size.height * 0.9706208, size.width * 0.9441000, size.height * 0.9912000);
path_0.cubicTo(size.width * 0.9325250, size.height * 0.9969875, size.width * 0.9197667, size.height, size.width * 0.9068292, size.height);
path_0.lineTo(size.width * 0.09316958, size.height);
path_0.cubicTo(size.width * 0.04714583, size.height, size.width * 0.009836208, size.height * 0.9626917, size.width * 0.009836208, size.height * 0.9166667);
path_0.cubicTo(size.width * 0.009836208, size.height * 0.9037292, size.width * 0.01284829, size.height * 0.8909708, size.width * 0.01863392, size.height * 0.8794000);
path_0.lineTo(size.width * 0.4254625, size.height * 0.06573708);
path_0.cubicTo(size.width * 0.4460458, size.height * 0.02457225, size.width * 0.4961042, size.height * 0.007886875, size.width * 0.5372667, size.height * 0.02846929);
path_0.cubicTo(size.width * 0.5533958, size.height * 0.03653296, size.width * 0.5664708, size.height * 0.04961000, size.width * 0.5745375, size.height * 0.06573708);
path_0.close();
Paint paint_0_fill = Paint()..style = PaintingStyle.fill;
paint_0_fill.color = color;
canvas.drawPath(path_0, paint_0_fill);
}
@override
bool shouldRepaint(covariant CustomPainter oldDelegate) {
return true;
}
}
class ItemResultCardWidgetWithParams extends StatelessWidget {
final String title;
final String subTitle;
final String note;
final String source;
final String referenceRange;
final double percentage;
final String buttonText;
final ResultTypes type;
final bool isArabic;
final Function()? onButtonPressed;
const ItemResultCardWidgetWithParams({
Key? key,
required this.title,
required this.subTitle,
required this.referenceRange,
required this.percentage,
required this.note,
required this.source,
required this.buttonText,
required this.type,
this.onButtonPressed,
this.isArabic = false,
}) : super(key: key);
@override
Widget build(BuildContext context) {
final fontFamily = isArabic ? 'Cairo' : 'Poppins';
return Container(
margin: const EdgeInsets.only(left: 21, right: 21, top: 21),
decoration: BoxDecoration(
borderRadius: const BorderRadius.all(Radius.circular(10)),
border: Border(
left: BorderSide(
color: type == ResultTypes.criticalLow || type == ResultTypes.criticalHigh
? Color(0xFFDE7676)
: type == ResultTypes.low || type == ResultTypes.high
? Color(0xFFEAB157)
: type == ResultTypes.normal
? Color(0xFF09AA28)
: Color(0xFF09AA28),
width: MediaQuery.of(context).size.width * 0.015,
),
),
color: Colors.white,
boxShadow: [
BoxShadow(
color: Colors.grey.withOpacity(0.2),
spreadRadius: 2,
blurRadius: 5,
offset: const Offset(0, 3),
),
],
),
child: Padding(
padding: const EdgeInsets.all(12.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.max,
children: [
// Title Row
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
title,
style: TextStyle(
fontSize: 16,
fontFamily: fontFamily,
fontWeight: FontWeight.w600,
color: const Color(0xff2E303A),
letterSpacing: -0.64,
height: 16 / 25,
),
),
GestureDetector(
onTap: onButtonPressed,
child: Utils.tableColumnValueWithUnderLine(TranslationBase.of(context).viewFlowChart, isLast: true, isCapitable: false),
),
],
),
const SizedBox(height: 8),
Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
ResultStatusWidget(type: type),
SizedBox(width: 5),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
subTitle,
style: TextStyle(fontSize: 14, fontFamily: fontFamily, fontWeight: FontWeight.w600, color: const Color(0xff2E303A), letterSpacing: -0.56),
),
Text(
"Reference Range \n $referenceRange",
style: TextStyle(
fontSize: 10,
fontFamily: fontFamily,
fontWeight: FontWeight.w600,
color: const Color(0xff2E303A),
letterSpacing: -0.4,
),
),
],
),
],
),
const SizedBox(height: 10),
// Progress Bar
SizedBox(
height: 55,
child: CustomResultProgressBar(
percentage: percentage,
value: subTitle,
type: type,
),
),
const SizedBox(height: 12),
// Note Section
if (note.isNotEmpty)
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const Divider(color: Color(0xFFEFEFEF), thickness: 1),
const SizedBox(height: 10),
Text(
"Notes:",
style: TextStyle(
fontSize: 12,
color: const Color(0xFF2E303A),
letterSpacing: -0.4,
fontWeight: FontWeight.bold,
),
),
Text(
note,
style: TextStyle(
fontSize: 12,
color: const Color(0xFF575757),
letterSpacing: -0.4,
fontWeight: FontWeight.bold,
),
),
],
),
const SizedBox(height: 3),
],
),
),
);
}
}
class ResultStatusWidget extends StatelessWidget {
final ResultTypes type;
const ResultStatusWidget({
Key? key,
required this.type,
}) : super(key: key);
@override
Widget build(BuildContext context) {
Color? color;
IconData? icon;
switch (type) {
case ResultTypes.criticalLow:
color = const Color(0xFFDE7676);
icon = Icons.arrow_circle_down;
break;
case ResultTypes.low:
color = const Color(0xFFEAB157);
icon = Icons.arrow_circle_down;
break;
case ResultTypes.criticalHigh:
color = const Color(0xFFDE7676);
icon = Icons.arrow_circle_up;
break;
case ResultTypes.high:
color = const Color(0xFFEAB157);
icon = Icons.arrow_circle_up;
break;
case ResultTypes.normal:
color = const Color(0xFF09AA28);
icon = Icons.check_circle;
break;
}
// Return the icon if defined, otherwise a placeholder widget
return icon != null
? Icon(
icon,
color: color,
)
: const SizedBox(); // Use SizedBox to keep the layout consistent
}
}

@ -119,10 +119,10 @@ class _AppDrawerState extends State<AppDrawer> {
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
SvgPicture.asset(
"assets/images/new/logo.svg",
height: 60,
width: 60,
Image.asset(
"assets/images/new/vida_logo.png",
height: 65,
width: 100,
),
IconButton(
icon: Icon(Icons.clear),
@ -508,27 +508,27 @@ class _AppDrawerState extends State<AppDrawer> {
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
TranslationBase.of(context).poweredBy,
style: TextStyle(
color: Color(0xFF989898),
fontSize: 13,
letterSpacing: -0.54,
fontWeight: FontWeight.w600,
),
),
// Text(
// TranslationBase.of(context).poweredBy,
// style: TextStyle(
// color: Color(0xFF989898),
// fontSize: 13,
// letterSpacing: -0.54,
// fontWeight: FontWeight.w600,
// ),
// ),
mWidth(2),
Text(
"Cloud Solutions",
style: TextStyle(
color: Color(0xff2E303A),
fontSize: 13,
letterSpacing: -0.54,
fontWeight: FontWeight.w600,
),
),
// Text(
// "Cloud Solutions",
// style: TextStyle(
// color: Color(0xff2E303A),
// fontSize: 13,
// letterSpacing: -0.54,
// fontWeight: FontWeight.w600,
// ),
// ),
mWidth(16),
SvgPicture.asset("assets/images/new/cloud_logo.svg"),
// SvgPicture.asset("assets/images/new/cloud_logo.svg"),
],
),
),

@ -8,8 +8,8 @@ class HabibLogoWidget extends StatelessWidget {
Widget build(BuildContext context) {
return Row(
children: [
SvgPicture.asset(
"assets/images/new/hmg_icon.svg",
Image.asset(
"assets/images/new/vida_logo.png",
height: 62,
width: 62,
),

@ -83,6 +83,7 @@ class AppScaffold extends StatefulWidget {
final int? currentTab;
final bool isShowPharmacyAppbar;
final Widget? customAppBar;
final bool overrideUserLogin;
AppScaffold setOnAppBarCartClick(VoidCallback onClick) {
_onCartClick = onClick;
@ -130,7 +131,8 @@ class AppScaffold extends StatefulWidget {
this.backButtonTab,
this.changeCurrentTab,
this.currentTab,
this.isShowPharmacyAppbar = false});
this.isShowPharmacyAppbar = false,
this.overrideUserLogin= false});
@override
_AppScaffoldState createState() => _AppScaffoldState();
@ -216,7 +218,7 @@ class _AppScaffoldState extends State<AppScaffold> {
AppGlobal.context = context;
PharmacyPagesViewModel pagesViewModel = Provider.of(context);
bool isUserNotLogin = (!Provider.of<ProjectViewModel>(context, listen: false).isLogin && widget.isShowDecPage);
bool isUserNotLogin = (widget.overrideUserLogin)?false:(!Provider.of<ProjectViewModel>(context, listen: false).isLogin && widget.isShowDecPage);
return Scaffold(
backgroundColor: widget.backgroundColor ?? CustomColors.appBackgroudGrey2Color,

@ -0,0 +1 @@
rootProject.name = 'vital_sign_camera'

@ -0,0 +1,23 @@
package ai.panoptic.vital_sign_camera
import android.content.Context
import android.os.Build
import android.util.Log
import androidx.annotation.RequiresApi
import androidx.lifecycle.Lifecycle
import io.flutter.plugin.common.BinaryMessenger
import io.flutter.plugin.common.StandardMessageCodec
import io.flutter.plugin.platform.PlatformView
import io.flutter.plugin.platform.PlatformViewFactory
class VitalSignCameraFactory(private val messenger: BinaryMessenger, private val lifecycle: Lifecycle) :
PlatformViewFactory(StandardMessageCodec.INSTANCE) {
val TAG = "VitalSignCameraFactory"
@RequiresApi(Build.VERSION_CODES.O)
override fun create(context: Context, id: Int, o: Any?): PlatformView {
val props = o as Map<String, Any>
return FlutterVitalSignCamera(context, messenger, id, props, lifecycle)
}
}

@ -0,0 +1,38 @@
.idea/
.vagrant/
.sconsign.dblite
.svn/
.DS_Store
*.swp
profile
DerivedData/
build/
GeneratedPluginRegistrant.h
GeneratedPluginRegistrant.m
.generated/
*.pbxuser
*.mode1v3
*.mode2v3
*.perspectivev3
!default.pbxuser
!default.mode1v3
!default.mode2v3
!default.perspectivev3
xcuserdata
*.moved-aside
*.pyc
*sync/
Icon?
.tags*
/Flutter/Generated.xcconfig
/Flutter/ephemeral/
/Flutter/flutter_export_environment.sh

@ -0,0 +1,289 @@
//
// FlutterVitalSignCamera.swift
// vital_sign_camera
//
// Created by Eddie Lau on 24/1/2023.
//
import Foundation
import Flutter
import UIKit
import PromiseKit
import VitalSignEngineCore
class FlutterVitalSignCamera: NSObject, FlutterPlatformView {
private var camera: VitalSignCamera
private var methodChannel: FlutterMethodChannel
private var eventSink: FlutterEventSink?
func view() -> UIView {
return camera
}
init(
frame: CGRect,
viewIdentifier viewId: Int64,
arguments args: Any?,
binaryMessenger messenger: FlutterBinaryMessenger
) {
methodChannel = FlutterMethodChannel(name: "ai.panoptic/channel/flutter_vital_sign_camera_\(viewId)", binaryMessenger: messenger)
camera = VitalSignCamera(frame: frame)
super.init()
camera.faceDetector = MLKitFaceDetector()
camera.configure(args: args, onVideoFrameProcessed: onVideoFrameProcessed)
methodChannel.setMethodCallHandler(onMethodCall)
let channel = FlutterEventChannel(name: "ai.panoptic/channel/flutter_vital_sign_camera_processed_frame_event_\(viewId)", binaryMessenger: messenger)
channel.setStreamHandler(self)
}
func onMethodCall(call: FlutterMethodCall, result: @escaping FlutterResult) {
switch(call.method){
case "startScanning":
NSLog("FlutterVitalSignCamera: startScanning")
camera.startScanning().done {
result(nil)
}.catch { error in
result(FlutterError(code: "\(error.code)", message: error.message, details: nil))
}
case "stopScanning":
NSLog("FlutterVitalSignCamera: stopScanning")
camera.stopScanning().done {
result(nil)
}.catch { error in
result(FlutterError(code: "\(error.code)", message: error.message, details: nil))
}
case "configure":
NSLog("FlutterVitalSignCamera: configure \(call.arguments ?? "nil")")
camera.configure(args: call.arguments, onVideoFrameProcessed: onVideoFrameProcessed)
default:
result(FlutterMethodNotImplemented)
}
}
func onVideoFrameProcessed(result: ProcessResult) {
let flutterMap = result.dictionary.flutterMap
guard let eventSink = eventSink else {
return
}
eventSink(flutterMap)
}
}
extension FlutterVitalSignCamera: FlutterStreamHandler {
func onListen(withArguments arguments: Any?, eventSink events: @escaping FlutterEventSink) -> FlutterError? {
eventSink = events
return nil
}
func onCancel(withArguments arguments: Any?) -> FlutterError? {
eventSink = nil
return nil
}
}
extension VitalSignCamera {
func configure(args:Any?, onVideoFrameProcessed:@escaping (ProcessResult)->Void) {
if let args = args as? [String:Any] {
configure(dict: args, onVideoFrameProcessed: onVideoFrameProcessed)
} else {
NSLog("Error: Invalid props: \(args ?? "nil")")
}
}
func configure(dict:Dictionary<String,Any>, onVideoFrameProcessed:@escaping (ProcessResult)->Void) {
var device:CameraDevice?
if let id = dict["id"] as? String {
device = VitalSignCamera.availableCameraDevices().first { $0.id == id }
}
var isActive = false
if let isActiveNumber = dict["isActive"] as? NSNumber {
isActive = isActiveNumber.boolValue
}
guard let userInfoDict = dict["userInfo"] as? Dictionary<String,Any>,
let userInfo = UserInfo(flutterMap: userInfoDict) else {
NSLog("Error: Invalid userInfo: \(dict["userInfo"] ?? "nil")")
return
}
guard let configDict = dict["config"] as? NSDictionary,
let config = VitalSignEngineConfig(flutterMap: configDict) else {
NSLog("Error: Invalid config: \(dict["config"] ?? "nil")")
return
}
let previewLayerGravity:PreviewLayerGravity = {
if let previewLayerGravityNum = dict["previewLayerGravity"] as? NSNumber,
let previewLayerGravity = PreviewLayerGravity(number: previewLayerGravityNum) {
return previewLayerGravity
}
return PreviewLayerGravity.resizeAspectFill
}()
configure { camera in
camera.device = device
camera.isActive = isActive
camera.userInfo = userInfo
camera.config = config
camera.previewLayerGravity = previewLayerGravity
camera.onVideoFrameProcessed = onVideoFrameProcessed
}
}
}
extension UserInfo {
init?(flutterMap:Dictionary<String,Any>) {
guard let genderObj = flutterMap["gender"] as? NSNumber else {
NSLog("Error: Invalid gender: \(flutterMap["gender"] ?? "nil")")
return nil
}
guard let gender = Gender(rawValue: genderObj.intValue) else {
NSLog("Error: Invalid gender: \(flutterMap["gender"] ?? "nil")")
return nil
}
guard let ageObj = flutterMap["age"] as? NSNumber else {
NSLog("Error: Invalid age: \(flutterMap["age"] ?? "nil")")
return nil
}
let age = ageObj.doubleValue
guard let userIdObj = flutterMap["userId"] as? NSString else {
NSLog("Error: Invalid userId: \(flutterMap["userId"] ?? "nil")")
return nil
}
self.init(
gender: gender,
age: age,
weight: (flutterMap["weight"] as? NSNumber)?.doubleValue,
height: (flutterMap["height"] as? NSNumber)?.doubleValue,
smoking: (flutterMap["smoker"] as? NSNumber)?.boolValue,
hypertension: Hypertension(hasHypertension: (flutterMap["hypertension"] as? NSNumber)?.boolValue),
bpMedication: (flutterMap["bpMedication"] as? NSNumber)?.boolValue,
diabetic: Diabetic(hasDiabetic: (flutterMap["diabetic"] as? NSNumber)?.boolValue),
waistCircumference: (flutterMap["waistCircumference"] as? NSNumber)?.doubleValue,
appUserId: flutterMap["appUserId"] as? String,
userId: userIdObj as String
)
}
}
extension Diabetic {
init?(hasDiabetic:Bool?) {
guard let hasDiabetic = hasDiabetic else {
return nil
}
if (hasDiabetic) {
self = .type1
} else {
self = .no
}
}
}
extension Hypertension {
init?(hasHypertension:Bool?) {
guard let hasHypertension = hasHypertension else {
return nil
}
if (hasHypertension) {
self = .stage1
} else {
self = .no
}
}
}
extension VitalSignEngineConfig {
init?(flutterMap: NSDictionary) {
/*
public var errorExpirationTime: TimeInterval?
*/
guard let map = flutterMap as? [String:Any] else {
NSLog("Error: Invalid config: \(flutterMap)")
return nil
}
let serverIdObj = map["serverId"] as? NSNumber
let serverId = serverIdObj != nil ? ServerId(rawValue: serverIdObj!.intValue) : nil
let dataCollectionDuration = map["dataCollectionDuration"] as? NSNumber
let dataSendingDuration = map["dataSendingDuration"] as? NSNumber
let dataSendingRate = map["dataSendingRate"] as? NSNumber
let dataWindowDuration = map["dataWindowDuration"] as? NSNumber
let apiKey = map["apiKey"] as? NSString
let faceLostTimeout = map["faceLostTimeout"] as? NSNumber
let errorExpirationTime = map["errorExpirationTime"] as? NSNumber
self.init(
serverId: serverId,
dataCollectionDuration: dataCollectionDuration?.doubleValue,
dataSendingDuration: dataSendingDuration?.doubleValue,
dataSendingRate: dataSendingRate?.doubleValue,
dataWindowDuration: dataWindowDuration?.doubleValue,
apiKey: apiKey as String?,
faceLostTimeout: faceLostTimeout?.doubleValue,
errorExpirationTime: errorExpirationTime?.doubleValue
)
}
}
extension PreviewLayerGravity {
init?(number: NSNumber) {
if (number.intValue == 0) {
self = .resizeAspectFill
} else if (number.intValue == 1) {
self = .resizeAspect
} else {
return nil
}
}
}
func toFlutterValue(value:Any) -> Any {
if let boolValue = value as? Bool {
return NSNumber(value: boolValue)
} else if let doubleValue = value as? Double {
return NSNumber(value: doubleValue)
} else if let intValue = value as? Int {
return NSNumber(value: intValue)
} else if let int32Value = value as? Int32 {
return NSNumber(value: int32Value)
} else if let stringValue = value as? String {
return stringValue
} else if let map = value as? [String:Any] {
return map.flutterMap
} else if let array = value as? [Any] {
return array.map { toFlutterValue(value: $0) }
} else {
return value
}
}
extension Dictionary<String,Any> {
var flutterMap:[String:Any] {
var map = [String:Any]()
keys.forEach { key in
map[key] = toFlutterValue(value: self[key]!)
}
return map
}
}

@ -0,0 +1,47 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>AvailableLibraries</key>
<array>
<dict>
<key>BinaryPath</key>
<string>VitalSignEngineCore.framework/VitalSignEngineCore</string>
<key>DebugSymbolsPath</key>
<string>dSYMs</string>
<key>LibraryIdentifier</key>
<string>ios-arm64</string>
<key>LibraryPath</key>
<string>VitalSignEngineCore.framework</string>
<key>SupportedArchitectures</key>
<array>
<string>arm64</string>
</array>
<key>SupportedPlatform</key>
<string>ios</string>
</dict>
<dict>
<key>BinaryPath</key>
<string>VitalSignEngineCore.framework/VitalSignEngineCore</string>
<key>DebugSymbolsPath</key>
<string>dSYMs</string>
<key>LibraryIdentifier</key>
<string>ios-x86_64-simulator</string>
<key>LibraryPath</key>
<string>VitalSignEngineCore.framework</string>
<key>SupportedArchitectures</key>
<array>
<string>x86_64</string>
</array>
<key>SupportedPlatform</key>
<string>ios</string>
<key>SupportedPlatformVariant</key>
<string>simulator</string>
</dict>
</array>
<key>CFBundlePackageType</key>
<string>XFWK</string>
<key>XCFrameworkFormatVersion</key>
<string>1.0</string>
</dict>
</plist>

@ -0,0 +1,521 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>files</key>
<dict>
<key>Base.lproj/Settings.storyboardc/2rd-HR-hIS-view-RZ6-1m-lpj.nib</key>
<data>
DlX1ov7q5g11ecY5Aps+/droo8M=
</data>
<key>Base.lproj/Settings.storyboardc/33y-Fu-8eO-view-QTb-QW-4kt.nib</key>
<data>
MQc4ycI9hcuSqtrFyBDkFp9SbdQ=
</data>
<key>Base.lproj/Settings.storyboardc/5qf-l9-Bpt-view-lhE-xR-CfP.nib</key>
<data>
8UOg8TxqBGqy9eTwPLDRx+n5ROk=
</data>
<key>Base.lproj/Settings.storyboardc/AVI-Sr-bRj-view-fsz-RU-5qo.nib</key>
<data>
8L7XYRvTiiuCNRy9uCevQiK+c8g=
</data>
<key>Base.lproj/Settings.storyboardc/Info.plist</key>
<data>
o+0ubj7CZACC4YUDlutmD/FOssc=
</data>
<key>Base.lproj/Settings.storyboardc/UINavigationController-siC-xZ-ohv.nib</key>
<data>
HbItXk+fdFNmjnnjvSNER2qNalA=
</data>
<key>Base.lproj/Settings.storyboardc/UITableViewController-2rd-HR-hIS.nib</key>
<data>
cH78RC3lRwc9lqvY6NO6dh+LDuI=
</data>
<key>Base.lproj/Settings.storyboardc/UITableViewController-33y-Fu-8eO.nib</key>
<data>
Wv0FmElDgVwxyHfQg0dVh5gOZz4=
</data>
<key>Base.lproj/Settings.storyboardc/UITableViewController-5qf-l9-Bpt.nib</key>
<data>
05hXWFPNBMFvKa/QGHHX7jeZk1k=
</data>
<key>Base.lproj/Settings.storyboardc/UITableViewController-AVI-Sr-bRj.nib</key>
<data>
IQ6Q3fPzcXh4Ac7Vh4y+m3QDdaM=
</data>
<key>Base.lproj/Settings.storyboardc/UITableViewController-X40-UA-27w.nib</key>
<data>
KFMokAoeV647g58ePqRaYhWv60k=
</data>
<key>Base.lproj/Settings.storyboardc/UITableViewController-lvC-jH-Oee.nib</key>
<data>
926RX3dTGWx7FV7VBfKdGbgntUo=
</data>
<key>Base.lproj/Settings.storyboardc/UITableViewController-rrE-mW-kkd.nib</key>
<data>
4fXkddGY7hX2bm9jUdLPg++CW08=
</data>
<key>Base.lproj/Settings.storyboardc/X40-UA-27w-view-dHV-IZ-101.nib</key>
<data>
xd6IKfbmTjrgUvv8kp3L5qnralc=
</data>
<key>Base.lproj/Settings.storyboardc/lvC-jH-Oee-view-hFr-Eu-EPX.nib</key>
<data>
HIJ/PFe3xcSy3UuJJ7nNI3JEUxk=
</data>
<key>Base.lproj/Settings.storyboardc/rrE-mW-kkd-view-jSQ-O0-3rP.nib</key>
<data>
IWe3izwkk2psNBBJ2sowS1eXTC8=
</data>
<key>Base.lproj/Settings.storyboardc/vU1-Um-10o-view-kVG-Zg-msn.nib</key>
<data>
XNHpbWcnqGvpxMnbT7KRhBn/5P0=
</data>
<key>Headers/VitalSignEngineCore-Swift.h</key>
<data>
Cgeyaqzpktx52m7dkRc2BOpHj+M=
</data>
<key>Info.plist</key>
<data>
Wehu7kSuoAeDcfbNuPsXlFJHyKk=
</data>
<key>Modules/VitalSignEngineCore.swiftmodule/x86_64-apple-ios-simulator.abi.json</key>
<data>
EOEHbSNtPKXpxewOjRgS5UAeO/c=
</data>
<key>Modules/VitalSignEngineCore.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface</key>
<data>
7tbL4/vTEf4dq/odGgDY7QuhO7o=
</data>
<key>Modules/VitalSignEngineCore.swiftmodule/x86_64-apple-ios-simulator.swiftdoc</key>
<data>
1YeE1UoLmWikKYm7aJTfKyuOPss=
</data>
<key>Modules/VitalSignEngineCore.swiftmodule/x86_64-apple-ios-simulator.swiftinterface</key>
<data>
7tbL4/vTEf4dq/odGgDY7QuhO7o=
</data>
<key>Modules/VitalSignEngineCore.swiftmodule/x86_64-apple-ios-simulator.swiftmodule</key>
<data>
Hyxie32rmUNCm6rfCxmPAtzrWS4=
</data>
<key>Modules/module.modulemap</key>
<data>
H4W7X/Ori5z0/DLyBmRIHfsqoW0=
</data>
<key>en.lproj/Localizable.strings</key>
<dict>
<key>hash</key>
<data>
JjW5goFEk4rLGwgbsFdIb77963c=
</data>
<key>optional</key>
<true/>
</dict>
<key>en.lproj/Settings.strings</key>
<dict>
<key>hash</key>
<data>
ghu5nCE2WhVAqtKLmh6ZSNXGUNs=
</data>
<key>optional</key>
<true/>
</dict>
<key>video_for_simulator.mov</key>
<data>
xGCn3pZccdHuxEpMT9Ty6IpQswY=
</data>
<key>zh-HK.lproj/Localizable.strings</key>
<dict>
<key>hash</key>
<data>
vbGclobSSiQAaj11PDC+uOY/uhc=
</data>
<key>optional</key>
<true/>
</dict>
<key>zh-HK.lproj/Settings.strings</key>
<dict>
<key>hash</key>
<data>
/nrp+p8TQubWuI19v2cfbXG3bTQ=
</data>
<key>optional</key>
<true/>
</dict>
<key>zh-Hans.lproj/Localizable.strings</key>
<dict>
<key>hash</key>
<data>
pa8dPk7vY6e0ezzEr4Km2znkYXo=
</data>
<key>optional</key>
<true/>
</dict>
<key>zh-Hans.lproj/Settings.strings</key>
<dict>
<key>hash</key>
<data>
r18wFxW+CzxwkANdgWZz/Wrsn2w=
</data>
<key>optional</key>
<true/>
</dict>
<key>zh-Hant.lproj/Localizable.strings</key>
<dict>
<key>hash</key>
<data>
vbGclobSSiQAaj11PDC+uOY/uhc=
</data>
<key>optional</key>
<true/>
</dict>
<key>zh-Hant.lproj/Settings.strings</key>
<dict>
<key>hash</key>
<data>
/nrp+p8TQubWuI19v2cfbXG3bTQ=
</data>
<key>optional</key>
<true/>
</dict>
</dict>
<key>files2</key>
<dict>
<key>Base.lproj/Settings.storyboardc/2rd-HR-hIS-view-RZ6-1m-lpj.nib</key>
<dict>
<key>hash2</key>
<data>
6UqeKX29VyBukl1h73a2B5lqSMXM7SLm27q9Epqfl0o=
</data>
</dict>
<key>Base.lproj/Settings.storyboardc/33y-Fu-8eO-view-QTb-QW-4kt.nib</key>
<dict>
<key>hash2</key>
<data>
4WUQzfqysn2notPjP+iMtC1kGv5i1TlZxDDjMw762sc=
</data>
</dict>
<key>Base.lproj/Settings.storyboardc/5qf-l9-Bpt-view-lhE-xR-CfP.nib</key>
<dict>
<key>hash2</key>
<data>
3tsNb1TynPV4jP8eLNY7oYUXQ8XufStmGoClUxeut+k=
</data>
</dict>
<key>Base.lproj/Settings.storyboardc/AVI-Sr-bRj-view-fsz-RU-5qo.nib</key>
<dict>
<key>hash2</key>
<data>
rKgWJy6gY5JR2wqvGEW97XuWhWpdY18oUYtY26YnDAM=
</data>
</dict>
<key>Base.lproj/Settings.storyboardc/Info.plist</key>
<dict>
<key>hash2</key>
<data>
Lfs3i8pilnv7p97l6teqeiPulahMyvKir++zGdfNFi8=
</data>
</dict>
<key>Base.lproj/Settings.storyboardc/UINavigationController-siC-xZ-ohv.nib</key>
<dict>
<key>hash2</key>
<data>
AeXV1+FMVpr7sjaaPIa85qZRjiLnFcu2OapvfkSbmFQ=
</data>
</dict>
<key>Base.lproj/Settings.storyboardc/UITableViewController-2rd-HR-hIS.nib</key>
<dict>
<key>hash2</key>
<data>
BmbkkpoOPGavqEaX2s8IRznQuJG3ZRrpToUjkf2OW2g=
</data>
</dict>
<key>Base.lproj/Settings.storyboardc/UITableViewController-33y-Fu-8eO.nib</key>
<dict>
<key>hash2</key>
<data>
r2L54zbeqH31x5rt/9Og/Gxrh/v5I0EQIzzgs8F5XvM=
</data>
</dict>
<key>Base.lproj/Settings.storyboardc/UITableViewController-5qf-l9-Bpt.nib</key>
<dict>
<key>hash2</key>
<data>
0SDimIQWuI3TVkE5SZzdcvlrWwCku/b1IyI98vZSI6I=
</data>
</dict>
<key>Base.lproj/Settings.storyboardc/UITableViewController-AVI-Sr-bRj.nib</key>
<dict>
<key>hash2</key>
<data>
DgMA3jMJ7qfESjpw1zSsIB/xWgn1XiBe/INXFT1IFis=
</data>
</dict>
<key>Base.lproj/Settings.storyboardc/UITableViewController-X40-UA-27w.nib</key>
<dict>
<key>hash2</key>
<data>
XWf9vby9yh//gBzBJxbNWPzBlxzW09djTCRmLwJdSek=
</data>
</dict>
<key>Base.lproj/Settings.storyboardc/UITableViewController-lvC-jH-Oee.nib</key>
<dict>
<key>hash2</key>
<data>
iWiODb3GEr4QVCx7KGeP0W4pg874oyE/BA2BeLovNAc=
</data>
</dict>
<key>Base.lproj/Settings.storyboardc/UITableViewController-rrE-mW-kkd.nib</key>
<dict>
<key>hash2</key>
<data>
4EEDOg2plUzrQgohBWf0L9xYpKgiv6KN69VmPWnFKmQ=
</data>
</dict>
<key>Base.lproj/Settings.storyboardc/X40-UA-27w-view-dHV-IZ-101.nib</key>
<dict>
<key>hash2</key>
<data>
ylq1U3Tmk9jt5epbca2+mjKmPhVroBEYoSVbrY0Eivo=
</data>
</dict>
<key>Base.lproj/Settings.storyboardc/lvC-jH-Oee-view-hFr-Eu-EPX.nib</key>
<dict>
<key>hash2</key>
<data>
ZX8HTCH1jPmC0/XnzN2JgeJIt1KFIrBQZ0+nTG98d9Q=
</data>
</dict>
<key>Base.lproj/Settings.storyboardc/rrE-mW-kkd-view-jSQ-O0-3rP.nib</key>
<dict>
<key>hash2</key>
<data>
lWMbq05IoCg8jRapjGtpO8sVO4KK7lP+ZoZ4F5zLGdA=
</data>
</dict>
<key>Base.lproj/Settings.storyboardc/vU1-Um-10o-view-kVG-Zg-msn.nib</key>
<dict>
<key>hash2</key>
<data>
D7MDZLZ3dgPYif/8jzhw/0X8xxK0zQi5BTPEcvsLbB8=
</data>
</dict>
<key>Headers/VitalSignEngineCore-Swift.h</key>
<dict>
<key>hash2</key>
<data>
D/Qqm2iuCa8pyzYDySM8sXDTEci5eFMqmAjll+u8JKk=
</data>
</dict>
<key>Modules/VitalSignEngineCore.swiftmodule/x86_64-apple-ios-simulator.abi.json</key>
<dict>
<key>hash2</key>
<data>
mNR8nzjlC5AOrKrIADM7eVAyIciXEDWgeLkIeAgXhRw=
</data>
</dict>
<key>Modules/VitalSignEngineCore.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface</key>
<dict>
<key>hash2</key>
<data>
MvRvSG8uFeTMX7EMytrfYIsjE3Uq/ItOK4PKwV9zhOI=
</data>
</dict>
<key>Modules/VitalSignEngineCore.swiftmodule/x86_64-apple-ios-simulator.swiftdoc</key>
<dict>
<key>hash2</key>
<data>
X2642qYx/sxLipHl7q9eUkTcz0ffENvmLZYHfyfY2Do=
</data>
</dict>
<key>Modules/VitalSignEngineCore.swiftmodule/x86_64-apple-ios-simulator.swiftinterface</key>
<dict>
<key>hash2</key>
<data>
MvRvSG8uFeTMX7EMytrfYIsjE3Uq/ItOK4PKwV9zhOI=
</data>
</dict>
<key>Modules/VitalSignEngineCore.swiftmodule/x86_64-apple-ios-simulator.swiftmodule</key>
<dict>
<key>hash2</key>
<data>
JkRKqR9nqkfWCsoIpQU/cSSs0o1jo9ZpJQSzejaYOKE=
</data>
</dict>
<key>Modules/module.modulemap</key>
<dict>
<key>hash2</key>
<data>
nMoAubewPDJNJjqZL6PZBElC7M8p3Tk0uDkB8+Slh8Y=
</data>
</dict>
<key>en.lproj/Localizable.strings</key>
<dict>
<key>hash2</key>
<data>
QrXMgghjBTXRSvFMUnrNKKviu2bVwCvCIw6x/0NxJ+4=
</data>
<key>optional</key>
<true/>
</dict>
<key>en.lproj/Settings.strings</key>
<dict>
<key>hash2</key>
<data>
kf4wZrE3eIFcKMHGteXjvdaAjVq66HQb3TOI/5X4fuc=
</data>
<key>optional</key>
<true/>
</dict>
<key>video_for_simulator.mov</key>
<dict>
<key>hash2</key>
<data>
TutAEU/GGl/BP67ffkZKsoWD1iC/xCkbElVgv+BGyZU=
</data>
</dict>
<key>zh-HK.lproj/Localizable.strings</key>
<dict>
<key>hash2</key>
<data>
DcL8ikA0bN+9lI7/salx04eGeosijL5biwSBVr+8H78=
</data>
<key>optional</key>
<true/>
</dict>
<key>zh-HK.lproj/Settings.strings</key>
<dict>
<key>hash2</key>
<data>
56y8muLdb8wQl7DMNwERIWBwLRpsbWoC1xgk3NPufEo=
</data>
<key>optional</key>
<true/>
</dict>
<key>zh-Hans.lproj/Localizable.strings</key>
<dict>
<key>hash2</key>
<data>
TKPfabZnaOrV3VA1XqjR6SqsWZvTcMUyUzZBQ6goBb8=
</data>
<key>optional</key>
<true/>
</dict>
<key>zh-Hans.lproj/Settings.strings</key>
<dict>
<key>hash2</key>
<data>
0A5Y7ZjUhASI3ZW0gLqoZNubDsKQNcbexBJcHOsC/FQ=
</data>
<key>optional</key>
<true/>
</dict>
<key>zh-Hant.lproj/Localizable.strings</key>
<dict>
<key>hash2</key>
<data>
DcL8ikA0bN+9lI7/salx04eGeosijL5biwSBVr+8H78=
</data>
<key>optional</key>
<true/>
</dict>
<key>zh-Hant.lproj/Settings.strings</key>
<dict>
<key>hash2</key>
<data>
56y8muLdb8wQl7DMNwERIWBwLRpsbWoC1xgk3NPufEo=
</data>
<key>optional</key>
<true/>
</dict>
</dict>
<key>rules</key>
<dict>
<key>^.*</key>
<true/>
<key>^.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^version.plist$</key>
<true/>
</dict>
<key>rules2</key>
<dict>
<key>.*\.dSYM($|/)</key>
<dict>
<key>weight</key>
<real>11</real>
</dict>
<key>^(.*/)?\.DS_Store$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>2000</real>
</dict>
<key>^.*</key>
<true/>
<key>^.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^Info\.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^PkgInfo$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^embedded\.provisionprofile$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
<key>^version\.plist$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
</dict>
</dict>
</plist>

@ -0,0 +1,183 @@
/* Class = "UILabel"; text = "Continuously monitors exposure levels and automatically adjusts exposure when necessary."; ObjectID = "2ad-p5-WH5"; */
"2ad-p5-WH5.text" = "持續監測曝光水平並在必要時自動調整曝光。";
/* Class = "UILabel"; text = "White Balance"; ObjectID = "4ie-UM-xw1"; */
"4ie-UM-xw1.text" = "白平衡";
/* Class = "UILabel"; text = "Front"; ObjectID = "55X-XR-Xoe"; */
"55X-XR-Xoe.text" = "前置";
/* Class = "UITableViewController"; text = "Preview Layer Gravity"; ObjectID = "5qf-l9-Bpt"; */
"5qf-l9-Bpt.title" = "相機預覽展示形式";
/* Class = "UILabel"; text = "Show the camera preview by preserving its aspect ratio and fits it within the layer's bounds."; ObjectID = "6I3-ak-vEx"; */
"6I3-ak-vEx.text" = "按比例顯示相機預覽,並使其限制在圖層的範圍內。";
/* Class = "UILabel"; text = "Continuous Auto"; ObjectID = "6yD-61-CEf"; */
"6yD-61-CEf.text" = "連續自動";
/* Class = "UILabel"; text = "White Balance"; ObjectID = "77e-kN-xI5"; */
"77e-kN-xI5.text" = "白平衡";
/* Class = "UILabel"; text = "Preview Gravity"; ObjectID = "7AW-UQ-WfA"; */
"7AW-UQ-WfA.text" = "相機預覽展示形式";
/* Class = "UILabel"; text = "Lens Aperture"; ObjectID = "7ZB-LO-AYF"; */
"7ZB-LO-AYF.text" = "鏡頭光圈";
/* Class = "UINavigationItem"; text = "Preview Gravity"; ObjectID = "7aV-Vw-b2w"; */
"7aV-Vw-b2w.title" = "相機預覽展示形式";
/* Class = "UINavigationItem"; text = "Camera"; ObjectID = "8D6-fu-CJu"; */
"8D6-fu-CJu.title" = "相機";
/* Class = "UILabel"; text = "Medium"; ObjectID = "9xa-bl-6eJ"; */
"9xa-bl-6eJ.text" = "中等品質";
/* Class = "UITableViewSection"; text = "Camera"; ObjectID = "AKs-Pq-lcR"; */
"AKs-Pq-lcR.headerTitle" = "相機";
/* Class = "UILabel"; text = "640x480"; ObjectID = "B6a-KT-T4m"; */
"B6a-KT-T4m.text" = "640x480";
/* Class = "UILabel"; text = "Face Detector"; ObjectID = "Byq-a3-CTH"; */
"Byq-a3-CTH.text" = "人臉辨識";
/* Class = "UILabel"; text = "1920x1080"; ObjectID = "Dp9-9b-EEt"; */
"Dp9-9b-EEt.text" = "1920x1080";
/* Class = "UILabel"; text = "A mode that locks the white balance state."; ObjectID = "FOH-2X-R88"; */
"FOH-2X-R88.text" = "一種鎖定白平衡狀態的模式。";
/* Class = "UILabel"; text = "Duration"; ObjectID = "FPh-cx-ffz"; */
"FPh-cx-ffz.text" = "持續時間";
/* Class = "UILabel"; text = "Exposure"; ObjectID = "Hmc-Mc-AME"; */
"Hmc-Mc-AME.text" = "曝光";
/* Class = "UILabel"; text = "Resolution"; ObjectID = "J12-De-6Ah"; */
"J12-De-6Ah.text" = "解析度";
/* Class = "UITextField"; text = "100"; ObjectID = "J2A-ot-v0j"; */
"J2A-ot-v0j.text" = "100";
/* Class = "UILabel"; text = "30 fps"; ObjectID = "J5t-dB-TfS"; */
"J5t-dB-TfS.text" = "30 fps";
/* Class = "UILabel"; text = "Frame Rate"; ObjectID = "JgS-aW-Prv"; */
"JgS-aW-Prv.text" = "幀率";
/* Class = "UILabel"; text = "Video Size"; ObjectID = "KJ4-Uw-4AI"; */
"KJ4-Uw-4AI.text" = "視頻尺寸";
/* Class = "UILabel"; text = "Locked"; ObjectID = "Nuf-3J-OLu"; */
"Nuf-3J-OLu.text" = "鎖定";
/* Class = "UILabel"; text = "Frame Rate"; ObjectID = "RKd-LF-IM5"; */
"RKd-LF-IM5.text" = "幀率";
/* Class = "UILabel"; text = "Resize Aspect"; ObjectID = "Rz5-6b-y0h"; */
"Rz5-6b-y0h.text" = "按比例調整";
/* Class = "UILabel"; text = "f1.0"; ObjectID = "SxX-36-5NN"; */
"SxX-36-5NN.text" = "f1.0";
/* Class = "UILabel"; text = "Exposure"; ObjectID = "Szo-Pj-jno"; */
"Szo-Pj-jno.text" = "曝光";
/* Class = "UILabel"; text = "ISO"; ObjectID = "TTb-bW-pMN"; */
"TTb-bW-pMN.text" = "ISO";
/* Class = "UILabel"; text = "Camera"; ObjectID = "WaU-wB-ecv"; */
"WaU-wB-ecv.text" = "相機";
/* Class = "UITableViewController"; text = "White Balance"; ObjectID = "X40-UA-27w"; */
"X40-UA-27w.title" = "白平衡";
/* Class = "UINavigationItem"; text = "Settings"; ObjectID = "Xje-kQ-L0P"; */
"Xje-kQ-L0P.title" = "設定";
/* Class = "UIBarButtonItem"; text = "Close"; ObjectID = "XvT-YW-xBL"; */
"XvT-YW-xBL.title" = "關閉";
/* Class = "UILabel"; text = "Locked"; ObjectID = "YGU-l8-ZMR"; */
"YGU-l8-ZMR.text" = "鎖定";
/* Class = "UILabel"; text = "Format"; ObjectID = "YPv-nc-7nK"; */
"YPv-nc-7nK.text" = "格式";
/* Class = "UILabel"; text = "Locked"; ObjectID = "YrA-Y0-l1z"; */
"YrA-Y0-l1z.text" = "鎖定";
/* Class = "UINavigationItem"; text = "Format"; ObjectID = "Z09-mH-385"; */
"Z09-mH-385.title" = "格式";
/* Class = "UILabel"; text = "Camera On/Off"; ObjectID = "ZiN-q3-8Cs"; */
"ZiN-q3-8Cs.text" = "相機 開/關";
/* Class = "UINavigationItem"; text = "White Balance"; ObjectID = "b1A-7E-zBH"; */
"b1A-7E-zBH.title" = "白平衡";
/* Class = "UILabel"; text = "100"; ObjectID = "b1L-VE-boz"; */
"b1L-VE-boz.text" = "100";
/* Class = "UINavigationItem"; text = "Exposure"; ObjectID = "bwF-Fn-XeY"; */
"bwF-Fn-XeY.title" = "曝光";
/* Class = "UIButton"; text = "Test"; ObjectID = "cC0-N9-hxt"; */
"cC0-N9-hxt.configuration.title" = "測試";
/* Class = "UIButton"; text = "Button"; ObjectID = "cC0-N9-hxt"; */
"cC0-N9-hxt.normalTitle" = "測試";
/* Class = "UISegmentedControl"; text = "sec"; ObjectID = "fSu-H9-Cz9"; */
"fSu-H9-Cz9.segmentTitles[0]" = "秒";
/* Class = "UISegmentedControl"; text = "ms"; ObjectID = "fSu-H9-Cz9"; */
"fSu-H9-Cz9.segmentTitles[1]" = "毫秒";
/* Class = "UISegmentedControl"; text = "μs"; ObjectID = "fSu-H9-Cz9"; */
"fSu-H9-Cz9.segmentTitles[2]" = "微秒";
/* Class = "UILabel"; text = "Locked"; ObjectID = "fty-cZ-huK"; */
"fty-cZ-huK.text" = "鎖定";
/* Class = "UILabel"; text = "Auto (10ms)"; ObjectID = "hVI-M7-yVe"; */
"hVI-M7-yVe.text" = "自動10毫秒";
/* Class = "UILabel"; text = "Camera Name"; ObjectID = "if3-5B-xPF"; */
"if3-5B-xPF.text" = "相機名稱";
/* Class = "UILabel"; text = "Unit"; ObjectID = "l6D-7r-DH5"; */
"l6D-7r-DH5.text" = "單位";
/* Class = "UINavigationItem"; text = "Camera Test"; ObjectID = "lZ7-W3-MRS"; */
"lZ7-W3-MRS.title" = "相機測試";
/* Class = "UILabel"; text = "8ms"; ObjectID = "lct-8a-Lqk"; */
"lct-8a-Lqk.text" = "8毫秒";
/* Class = "UITableViewController"; text = "Camera"; ObjectID = "lvC-jH-Oee"; */
"lvC-jH-Oee.title" = "相機";
/* Class = "UILabel"; text = "Resize Aspect Fill"; ObjectID = "mod-K3-RQU"; */
"mod-K3-RQU.text" = "按比例填充";
/* Class = "UILabel"; text = "HD 1920x1080"; ObjectID = "nbm-4k-ihb"; */
"nbm-4k-ihb.text" = "HD 1920x1080";
/* Class = "UILabel"; text = "30 fps"; ObjectID = "pKS-rd-Dx6"; */
"pKS-rd-Dx6.text" = "30 fps";
/* Class = "UILabel"; text = "Exposure Duration"; ObjectID = "soE-ah-Y4f"; */
"soE-ah-Y4f.text" = "曝光時間";
/* Class = "UILabel"; text = "30 fps"; ObjectID = "u82-lR-lTP"; */
"u82-lR-lTP.text" = "30 fps";
/* Class = "UILabel"; text = "100"; ObjectID = "y9H-1I-dYX"; */
"y9H-1I-dYX.text" = "100";
/* Class = "UILabel"; text = "ISO"; ObjectID = "yOn-QG-KiO"; */
"yOn-QG-KiO.text" = "ISO";

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleIdentifier</key>
<string>com.apple.xcode.dsym.ai.panoptic.VitalSignObjCFramework</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundlePackageType</key>
<string>dSYM</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleVersion</key>
<string>1</string>
</dict>
</plist>

@ -0,0 +1,86 @@
---
triple: 'arm64-apple-darwin'
binary-path: '/Users/eddie/Library/Developer/Xcode/DerivedData/VitalSignEngine-fpcalwthewvozcfkzzhwpfgjeekq/Build/Intermediates.noindex/ArchiveIntermediates/VitalSignObjCFramework/InstallationBuildProductsLocation/Library/Frameworks/VitalSignObjCFramework.framework/VitalSignObjCFramework'
relocations:
- { offsetInCU: 0x33, offset: 0x33, size: 0x8, addend: 0x0, symName: _VitalSignObjCFrameworkVersionString, symObjAddr: 0x0, symBinAddr: 0x129D0, symSize: 0x0 }
- { offsetInCU: 0x67, offset: 0x67, size: 0x8, addend: 0x0, symName: _VitalSignObjCFrameworkVersionNumber, symObjAddr: 0x40, symBinAddr: 0x12A10, symSize: 0x0 }
- { offsetInCU: 0x183D9, offset: 0x18455, size: 0x8, addend: 0x0, symName: '-[SkinDetector initWithStrength:]', symObjAddr: 0x0, symBinAddr: 0x8000, symSize: 0xA8 }
- { offsetInCU: 0x18420, offset: 0x1849C, size: 0x8, addend: 0x0, symName: '-[SkinDetector reset]', symObjAddr: 0xA8, symBinAddr: 0x80A8, symSize: 0x8 }
- { offsetInCU: 0x18453, offset: 0x184CF, size: 0x8, addend: 0x0, symName: '-[SkinDetector thresholdComputed]', symObjAddr: 0xB0, symBinAddr: 0x80B0, symSize: 0x20 }
- { offsetInCU: 0x185D9, offset: 0x18655, size: 0x8, addend: 0x0, symName: '-[SkinDetector computeThreshold:fast:rough:]', symObjAddr: 0xD0, symBinAddr: 0x80D0, symSize: 0x12C }
- { offsetInCU: 0x19146, offset: 0x191C2, size: 0x8, addend: 0x0, symName: __ZN2cv3MatD1Ev, symObjAddr: 0x1FC, symBinAddr: 0x81FC, symSize: 0x94 }
- { offsetInCU: 0x191C8, offset: 0x19244, size: 0x8, addend: 0x0, symName: '-[SkinDetector getSkin:filtKernSize:error:]', symObjAddr: 0x290, symBinAddr: 0x8290, symSize: 0x2C8 }
- { offsetInCU: 0x1957E, offset: 0x195FA, size: 0x8, addend: 0x0, symName: '-[SkinDetector strength]', symObjAddr: 0x558, symBinAddr: 0x8558, symSize: 0x8 }
- { offsetInCU: 0x195B3, offset: 0x1962F, size: 0x8, addend: 0x0, symName: '-[SkinDetector setStrength:]', symObjAddr: 0x560, symBinAddr: 0x8560, symSize: 0x8 }
- { offsetInCU: 0x213E, offset: 0x1B8CC, size: 0x8, addend: 0x0, symName: __ZNSt3__119piecewise_constructE, symObjAddr: 0x6654, symBinAddr: 0x12A54, symSize: 0x0 }
- { offsetInCU: 0xD2BA, offset: 0x26A48, size: 0x8, addend: 0x0, symName: __ZNSt3__111__introsortINS_17_ClassicAlgPolicyERPFbNS_6vectorIdNS_9allocatorIdEEEES5_EPS5_Lb0EEEvT1_SA_T0_NS_15iterator_traitsISA_E15difference_typeEb, symObjAddr: 0x325C, symBinAddr: 0xB82C, symSize: 0x438 }
- { offsetInCU: 0xE5FE, offset: 0x27D8C, size: 0x8, addend: 0x0, symName: __ZNSt3__126__insertion_sort_unguardedB8ue170006INS_17_ClassicAlgPolicyERPFbNS_6vectorIdNS_9allocatorIdEEEES5_EPS5_EEvT1_SA_T0_, symObjAddr: 0x3918, symBinAddr: 0xBEE8, symSize: 0x218 }
- { offsetInCU: 0xF5DF, offset: 0x28D6D, size: 0x8, addend: 0x0, symName: __ZNSt3__111__sift_downB8ue170006INS_17_ClassicAlgPolicyERPFbNS_6vectorIdNS_9allocatorIdEEEES5_EPS5_EEvT1_OT0_NS_15iterator_traitsISA_E15difference_typeESA_, symObjAddr: 0x55A0, symBinAddr: 0xDB70, symSize: 0x418 }
- { offsetInCU: 0x11158, offset: 0x2A8E6, size: 0x8, addend: 0x0, symName: __ZNSt3__117__floyd_sift_downB8ue170006INS_17_ClassicAlgPolicyERPFbNS_6vectorIdNS_9allocatorIdEEEES5_EPS5_EET1_SA_OT0_NS_15iterator_traitsISA_E15difference_typeE, symObjAddr: 0x5AC8, symBinAddr: 0xE098, symSize: 0x16C }
- { offsetInCU: 0x11925, offset: 0x2B0B3, size: 0x8, addend: 0x0, symName: __ZNSt3__131__partition_with_equals_on_leftB8ue170006INS_17_ClassicAlgPolicyEPNS_6vectorIdNS_9allocatorIdEEEERPFbS5_S5_EEET0_SA_SA_T1_, symObjAddr: 0x3F9C, symBinAddr: 0xC56C, symSize: 0x4E4 }
- { offsetInCU: 0x1433B, offset: 0x2DAC9, size: 0x8, addend: 0x0, symName: __ZNSt3__132__partition_with_equals_on_rightB8ue170006INS_17_ClassicAlgPolicyEPNS_6vectorIdNS_9allocatorIdEEEERPFbS5_S5_EEENS_4pairIT0_bEESB_SB_T1_, symObjAddr: 0x4480, symBinAddr: 0xCA50, symSize: 0x460 }
- { offsetInCU: 0x16724, offset: 0x2FEB2, size: 0x8, addend: 0x0, symName: __ZNSt3__127__insertion_sort_incompleteB8ue170006INS_17_ClassicAlgPolicyERPFbNS_6vectorIdNS_9allocatorIdEEEES5_EPS5_EEbT1_SA_T0_, symObjAddr: 0x48E0, symBinAddr: 0xCEB0, symSize: 0x420 }
- { offsetInCU: 0x1B2C4, offset: 0x34A52, size: 0x8, addend: 0x0, symName: __ZNSt3__119__allocate_at_leastB8ue170006INS_9allocatorIdEEEENS_19__allocation_resultINS_16allocator_traitsIT_E7pointerEEERS5_m, symObjAddr: 0x2F70, symBinAddr: 0xB540, symSize: 0x34 }
- { offsetInCU: 0x1B356, offset: 0x34AE4, size: 0x8, addend: 0x0, symName: __ZNSt3__16vectorINS0_IdNS_9allocatorIdEEEENS1_IS3_EEE26__swap_out_circular_bufferERNS_14__split_bufferIS3_RS4_EE, symObjAddr: 0x2FA4, symBinAddr: 0xB574, symSize: 0x74 }
- { offsetInCU: 0x1B399, offset: 0x34B27, size: 0x8, addend: 0x0, symName: __ZNSt3__119__allocate_at_leastB8ue170006INS_9allocatorINS_6vectorIdNS1_IdEEEEEEEENS_19__allocation_resultINS_16allocator_traitsIT_E7pointerEEERS8_m, symObjAddr: 0x302C, symBinAddr: 0xB5FC, symSize: 0x44 }
- { offsetInCU: 0x1B441, offset: 0x34BCF, size: 0x8, addend: 0x0, symName: __ZNSt3__142__uninitialized_allocator_move_if_noexceptB8ue170006INS_9allocatorINS_6vectorIdNS1_IdEEEEEENS_16reverse_iteratorIPS4_EES8_S8_EET2_RT_T0_T1_S9_, symObjAddr: 0x3070, symBinAddr: 0xB640, symSize: 0xA8 }
- { offsetInCU: 0x1B8CB, offset: 0x35059, size: 0x8, addend: 0x0, symName: __ZNSt3__120__throw_length_errorB8ue170006EPKc, symObjAddr: 0x2A38, symBinAddr: 0xB008, symSize: 0x50 }
- { offsetInCU: 0x1B980, offset: 0x3510E, size: 0x8, addend: 0x0, symName: __ZNSt3__127__tree_balance_after_insertB8ue170006IPNS_16__tree_node_baseIPvEEEEvT_S5_, symObjAddr: 0x2D04, symBinAddr: 0xB2D4, symSize: 0x198 }
- { offsetInCU: 0x1BDA3, offset: 0x35531, size: 0x8, addend: 0x0, symName: __ZNSt3__142__uninitialized_allocator_move_if_noexceptB8ue170006INS_9allocatorINS_6vectorIdNS1_IdEEEEEENS_16reverse_iteratorIPS4_EES8_S8_EET2_RT_T0_T1_S9_, symObjAddr: 0x3070, symBinAddr: 0xB640, symSize: 0xA8 }
- { offsetInCU: 0x1C2CF, offset: 0x35A5D, size: 0x8, addend: 0x0, symName: __ZNSt3__17__sort3B8ue170006INS_17_ClassicAlgPolicyERPFbNS_6vectorIdNS_9allocatorIdEEEES5_EPS5_EEjT1_SA_SA_T0_, symObjAddr: 0x3B30, symBinAddr: 0xC100, symSize: 0x46C }
- { offsetInCU: 0x1E639, offset: 0x37DC7, size: 0x8, addend: 0x0, symName: __ZNSt3__17__sort4B8ue170006INS_17_ClassicAlgPolicyERPFbNS_6vectorIdNS_9allocatorIdEEEES5_EPS5_EEvT1_SA_SA_SA_T0_, symObjAddr: 0x4D00, symBinAddr: 0xD2D0, symSize: 0x2C0 }
- { offsetInCU: 0x1FBB9, offset: 0x39347, size: 0x8, addend: 0x0, symName: __ZNSt3__17__sort5B8ue170006INS_17_ClassicAlgPolicyERPFbNS_6vectorIdNS_9allocatorIdEEEES5_EPS5_EEvT1_SA_SA_SA_SA_T0_, symObjAddr: 0x4FC0, symBinAddr: 0xD590, symSize: 0x398 }
- { offsetInCU: 0x21854, offset: 0x3AFE2, size: 0x8, addend: 0x0, symName: __ZNSt3__116__insertion_sortB8ue170006INS_17_ClassicAlgPolicyERPFbNS_6vectorIdNS_9allocatorIdEEEES5_EPS5_EEvT1_SA_T0_, symObjAddr: 0x3694, symBinAddr: 0xBC64, symSize: 0x284 }
- { offsetInCU: 0x228B8, offset: 0x3C046, size: 0x8, addend: 0x0, symName: __ZNSt3__119__partial_sort_implB8ue170006INS_17_ClassicAlgPolicyERPFbNS_6vectorIdNS_9allocatorIdEEEES5_EPS5_S9_EET1_SA_SA_T2_OT0_, symObjAddr: 0x53A8, symBinAddr: 0xD978, symSize: 0x1F8 }
- { offsetInCU: 0x23398, offset: 0x3CB26, size: 0x8, addend: 0x0, symName: __ZNSt3__110__pop_heapB8ue170006INS_17_ClassicAlgPolicyEPFbNS_6vectorIdNS_9allocatorIdEEEES5_EPS5_EEvT1_S9_RT0_NS_15iterator_traitsIS9_E15difference_typeE, symObjAddr: 0x59B8, symBinAddr: 0xDF88, symSize: 0x110 }
- { offsetInCU: 0x23927, offset: 0x3D0B5, size: 0x8, addend: 0x0, symName: __ZNSt3__19__sift_upB8ue170006INS_17_ClassicAlgPolicyERPFbNS_6vectorIdNS_9allocatorIdEEEES5_EPS5_EEvT1_SA_OT0_NS_15iterator_traitsISA_E15difference_typeE, symObjAddr: 0x5C34, symBinAddr: 0xE204, symSize: 0x220 }
- { offsetInCU: 0x25026, offset: 0x3E7B4, size: 0x8, addend: 0x0, symName: __ZSt28__throw_bad_array_new_lengthB8ue170006v, symObjAddr: 0x2AAC, symBinAddr: 0xB07C, symSize: 0x28 }
- { offsetInCU: 0x2757E, offset: 0x40D0C, size: 0x8, addend: 0x0, symName: __ZNSt3__16vectorINS0_IdNS_9allocatorIdEEEENS1_IS3_EEE26__swap_out_circular_bufferERNS_14__split_bufferIS3_RS4_EE, symObjAddr: 0x2FA4, symBinAddr: 0xB574, symSize: 0x74 }
- { offsetInCU: 0x297A3, offset: 0x42F31, size: 0x8, addend: 0x0, symName: __ZN8panoptic12SkinDetectorC2Ed, symObjAddr: 0x0, symBinAddr: 0x8670, symSize: 0x18 }
- { offsetInCU: 0x297CF, offset: 0x42F5D, size: 0x8, addend: 0x0, symName: __ZN8panoptic12SkinDetectorC2Ed, symObjAddr: 0x0, symBinAddr: 0x8670, symSize: 0x18 }
- { offsetInCU: 0x297EE, offset: 0x42F7C, size: 0x8, addend: 0x0, symName: __ZN8panoptic12SkinDetectorC2Ed, symObjAddr: 0x0, symBinAddr: 0x8670, symSize: 0x18 }
- { offsetInCU: 0x2983B, offset: 0x42FC9, size: 0x8, addend: 0x0, symName: __ZN8panoptic12SkinDetectorC1Ed, symObjAddr: 0x18, symBinAddr: 0x8688, symSize: 0x18 }
- { offsetInCU: 0x29877, offset: 0x43005, size: 0x8, addend: 0x0, symName: __ZN8panoptic12SkinDetectorC1Ed, symObjAddr: 0x18, symBinAddr: 0x8688, symSize: 0x18 }
- { offsetInCU: 0x2989D, offset: 0x4302B, size: 0x8, addend: 0x0, symName: __ZN8panoptic12SkinDetectorC1Ed, symObjAddr: 0x18, symBinAddr: 0x8688, symSize: 0x18 }
- { offsetInCU: 0x298BC, offset: 0x4304A, size: 0x8, addend: 0x0, symName: __ZN8panoptic12SkinDetectorC1Ed, symObjAddr: 0x18, symBinAddr: 0x8688, symSize: 0x18 }
- { offsetInCU: 0x2B595, offset: 0x44D23, size: 0x8, addend: 0x0, symName: __ZN8panoptic12SkinDetector17compute_thresholdERN2cv3MatEbb, symObjAddr: 0x30, symBinAddr: 0x86A0, symSize: 0x2464 }
- { offsetInCU: 0x3528D, offset: 0x4EA1B, size: 0x8, addend: 0x0, symName: __ZNSt3__16__treeINS_12__value_typeIidEENS_19__map_value_compareIiS2_NS_4lessIiEELb1EEENS_9allocatorIS2_EEE25__emplace_unique_key_argsIiJRKNS_21piecewise_construct_tENS_5tupleIJRKiEEENSE_IJEEEEEENS_4pairINS_15__tree_iteratorIS2_PNS_11__tree_nodeIS2_PvEElEEbEERKT_DpOT0_, symObjAddr: 0x2BF0, symBinAddr: 0xB1C0, symSize: 0xC0 }
- { offsetInCU: 0x355DF, offset: 0x4ED6D, size: 0x8, addend: 0x0, symName: __ZNSt3__16__treeINS_12__value_typeIidEENS_19__map_value_compareIiS2_NS_4lessIiEELb1EEENS_9allocatorIS2_EEE25__emplace_unique_key_argsIiJRKNS_21piecewise_construct_tENS_5tupleIJOiEEENSE_IJEEEEEENS_4pairINS_15__tree_iteratorIS2_PNS_11__tree_nodeIS2_PvEElEEbEERKT_DpOT0_, symObjAddr: 0x2E9C, symBinAddr: 0xB46C, symSize: 0xC0 }
- { offsetInCU: 0x35931, offset: 0x4F0BF, size: 0x8, addend: 0x0, symName: __ZL13vector_extendIdEvRNSt3__16vectorIT_NS0_9allocatorIS2_EEEES6_, symObjAddr: 0x2AD4, symBinAddr: 0xB0A4, symSize: 0x100 }
- { offsetInCU: 0x35DBC, offset: 0x4F54A, size: 0x8, addend: 0x0, symName: __ZL13compare_tupleNSt3__16vectorIdNS_9allocatorIdEEEES3_, symObjAddr: 0x2BD4, symBinAddr: 0xB1A4, symSize: 0x1C }
- { offsetInCU: 0x35DD9, offset: 0x4F567, size: 0x8, addend: 0x0, symName: __ZNSt3__114__split_bufferINS_6vectorIdNS_9allocatorIdEEEERNS2_IS4_EEED2Ev, symObjAddr: 0x3190, symBinAddr: 0xB760, symSize: 0x34 }
- { offsetInCU: 0x35EF5, offset: 0x4F683, size: 0x8, addend: 0x0, symName: __ZNSt3__16vectorIdNS_9allocatorIdEEE16__init_with_sizeB8ue170006IPdS5_EEvT_T0_m, symObjAddr: 0x5E54, symBinAddr: 0xE424, symSize: 0x78 }
- { offsetInCU: 0x3635B, offset: 0x4FAE9, size: 0x8, addend: 0x0, symName: __ZNSt3__16vectorINS0_IdNS_9allocatorIdEEEENS1_IS3_EEE16__destroy_vectorclB8ue170006Ev, symObjAddr: 0x5ECC, symBinAddr: 0xE49C, symSize: 0x40 }
- { offsetInCU: 0x36449, offset: 0x4FBD7, size: 0x8, addend: 0x0, symName: __ZNSt3__16__treeINS_12__value_typeIidEENS_19__map_value_compareIiS2_NS_4lessIiEELb1EEENS_9allocatorIS2_EEE7destroyEPNS_11__tree_nodeIS2_PvEE, symObjAddr: 0x5F60, symBinAddr: 0xE530, symSize: 0x40 }
- { offsetInCU: 0x36594, offset: 0x4FD22, size: 0x8, addend: 0x0, symName: __ZNKSt3__16vectorIdNS_9allocatorIdEEE20__throw_length_errorB8ue170006Ev, symObjAddr: 0x2F5C, symBinAddr: 0xB52C, symSize: 0x14 }
- { offsetInCU: 0x365BE, offset: 0x4FD4C, size: 0x8, addend: 0x0, symName: __ZNSt3__119__allocate_at_leastB8ue170006INS_9allocatorIdEEEENS_19__allocation_resultINS_16allocator_traitsIT_E7pointerEEERS5_m, symObjAddr: 0x2F70, symBinAddr: 0xB540, symSize: 0x34 }
- { offsetInCU: 0x365C9, offset: 0x4FD57, size: 0x8, addend: 0x0, symName: __ZNKSt3__16vectorINS0_IdNS_9allocatorIdEEEENS1_IS3_EEE20__throw_length_errorB8ue170006Ev, symObjAddr: 0x3018, symBinAddr: 0xB5E8, symSize: 0x14 }
- { offsetInCU: 0x365F3, offset: 0x4FD81, size: 0x8, addend: 0x0, symName: __ZNSt3__119__allocate_at_leastB8ue170006INS_9allocatorINS_6vectorIdNS1_IdEEEEEEEENS_19__allocation_resultINS_16allocator_traitsIT_E7pointerEEERS8_m, symObjAddr: 0x302C, symBinAddr: 0xB5FC, symSize: 0x44 }
- { offsetInCU: 0x365FE, offset: 0x4FD8C, size: 0x8, addend: 0x0, symName: __ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2B8ue170006ILi0EEEPKc, symObjAddr: 0x2984, symBinAddr: 0xAF54, symSize: 0xA0 }
- { offsetInCU: 0x3699E, offset: 0x5012C, size: 0x8, addend: 0x0, symName: __ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE20__throw_length_errorB8ue170006Ev, symObjAddr: 0x2A24, symBinAddr: 0xAFF4, symSize: 0x14 }
- { offsetInCU: 0x36A66, offset: 0x501F4, size: 0x8, addend: 0x0, symName: __ZN8panoptic12SkinDetector8get_skinERN2cv3MatEdS3_, symObjAddr: 0x2528, symBinAddr: 0xAB04, symSize: 0x430 }
- { offsetInCU: 0x3770C, offset: 0x50E9A, size: 0x8, addend: 0x0, symName: __ZN8panoptic12SkinDetector5resetEv, symObjAddr: 0x2958, symBinAddr: 0xAF34, symSize: 0x8 }
- { offsetInCU: 0x37734, offset: 0x50EC2, size: 0x8, addend: 0x0, symName: __ZN8panoptic12SkinDetector18threshold_computedEv, symObjAddr: 0x2960, symBinAddr: 0xAF3C, symSize: 0x18 }
- { offsetInCU: 0x37942, offset: 0x510D0, size: 0x8, addend: 0x0, symName: __ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE20__throw_length_errorB8ue170006Ev, symObjAddr: 0x2A24, symBinAddr: 0xAFF4, symSize: 0x14 }
- { offsetInCU: 0x3796C, offset: 0x510FA, size: 0x8, addend: 0x0, symName: __ZNSt3__120__throw_length_errorB8ue170006EPKc, symObjAddr: 0x2A38, symBinAddr: 0xB008, symSize: 0x50 }
- { offsetInCU: 0x37977, offset: 0x51105, size: 0x8, addend: 0x0, symName: __ZNSt12length_errorC1B8ue170006EPKc, symObjAddr: 0x2A88, symBinAddr: 0xB058, symSize: 0x24 }
- { offsetInCU: 0x37A03, offset: 0x51191, size: 0x8, addend: 0x0, symName: __ZL13compare_tupleNSt3__16vectorIdNS_9allocatorIdEEEES3_, symObjAddr: 0x2BD4, symBinAddr: 0xB1A4, symSize: 0x1C }
- { offsetInCU: 0x37A43, offset: 0x511D1, size: 0x8, addend: 0x0, symName: __ZL13compare_tupleNSt3__16vectorIdNS_9allocatorIdEEEES3_, symObjAddr: 0x2BD4, symBinAddr: 0xB1A4, symSize: 0x1C }
- { offsetInCU: 0x37D43, offset: 0x514D1, size: 0x8, addend: 0x0, symName: __ZNSt3__16__treeINS_12__value_typeIidEENS_19__map_value_compareIiS2_NS_4lessIiEELb1EEENS_9allocatorIS2_EEE16__insert_node_atEPNS_15__tree_end_nodeIPNS_16__tree_node_baseIPvEEEERSE_SE_, symObjAddr: 0x2CB0, symBinAddr: 0xB280, symSize: 0x54 }
- { offsetInCU: 0x38092, offset: 0x51820, size: 0x8, addend: 0x0, symName: __ZNSt3__128__exception_guard_exceptionsINS_29_AllocatorDestroyRangeReverseINS_9allocatorINS_6vectorIdNS2_IdEEEEEENS_16reverse_iteratorIPS5_EEEEED2B8ue170006Ev, symObjAddr: 0x3118, symBinAddr: 0xB6E8, symSize: 0x34 }
- { offsetInCU: 0x380D3, offset: 0x51861, size: 0x8, addend: 0x0, symName: __ZNKSt3__129_AllocatorDestroyRangeReverseINS_9allocatorINS_6vectorIdNS1_IdEEEEEENS_16reverse_iteratorIPS4_EEEclB8ue170006Ev, symObjAddr: 0x314C, symBinAddr: 0xB71C, symSize: 0x44 }
- { offsetInCU: 0x383CF, offset: 0x51B5D, size: 0x8, addend: 0x0, symName: __ZNSt3__114__split_bufferINS_6vectorIdNS_9allocatorIdEEEERNS2_IS4_EEE17__destruct_at_endB8ue170006EPS4_, symObjAddr: 0x31C4, symBinAddr: 0xB794, symSize: 0x58 }
- { offsetInCU: 0x385EB, offset: 0x51D79, size: 0x8, addend: 0x0, symName: __ZNSt3__16vectorIdNS_9allocatorIdEEE11__vallocateB8ue170006Em, symObjAddr: 0x321C, symBinAddr: 0xB7EC, symSize: 0x40 }
- { offsetInCU: 0x38659, offset: 0x51DE7, size: 0x8, addend: 0x0, symName: __ZNSt3__111__introsortINS_17_ClassicAlgPolicyERPFbNS_6vectorIdNS_9allocatorIdEEEES5_EPS5_Lb0EEEvT1_SA_T0_NS_15iterator_traitsISA_E15difference_typeEb, symObjAddr: 0x325C, symBinAddr: 0xB82C, symSize: 0x438 }
- { offsetInCU: 0x38766, offset: 0x51EF4, size: 0x8, addend: 0x0, symName: __ZNSt3__16vectorIdNS_9allocatorIdEEE13__move_assignERS3_NS_17integral_constantIbLb1EEE, symObjAddr: 0x5358, symBinAddr: 0xD928, symSize: 0x50 }
- { offsetInCU: 0x38A71, offset: 0x521FF, size: 0x8, addend: 0x0, symName: __ZNSt3__16vectorINS0_IdNS_9allocatorIdEEEENS1_IS3_EEE7__clearB8ue170006Ev, symObjAddr: 0x5F0C, symBinAddr: 0xE4DC, symSize: 0x54 }
- { offsetInCU: 0x8C4F, offset: 0x5B144, size: 0x8, addend: 0x0, symName: __Z11quickselectPdii, symObjAddr: 0x0, symBinAddr: 0xE66C, symSize: 0x7C }
- { offsetInCU: 0x8CF9, offset: 0x5B1EE, size: 0x8, addend: 0x0, symName: __Z9partitionPdii, symObjAddr: 0x7C, symBinAddr: 0xE6E8, symSize: 0x60 }
- { offsetInCU: 0x8DF5, offset: 0x5B2EA, size: 0x8, addend: 0x0, symName: __Z4swapPdS_, symObjAddr: 0xDC, symBinAddr: 0xE748, symSize: 0x14 }
- { offsetInCU: 0x910A, offset: 0x5B5FF, size: 0x8, addend: 0x0, symName: '+[CVHelper crop:withRect:]', symObjAddr: 0xF0, symBinAddr: 0xE75C, symSize: 0x2CC }
- { offsetInCU: 0x9B19, offset: 0x5C00E, size: 0x8, addend: 0x0, symName: '+[CVHelper rgbMean:]', symObjAddr: 0x450, symBinAddr: 0xEA28, symSize: 0xA5C }
- { offsetInCU: 0xAF51, offset: 0x5D446, size: 0x8, addend: 0x0, symName: '+[CVHelper brightness:]', symObjAddr: 0xEAC, symBinAddr: 0xF484, symSize: 0xAC0 }
- { offsetInCU: 0xC21E, offset: 0x5E713, size: 0x8, addend: 0x0, symName: '+[CVHelper resizeToRgbUsing:of:]', symObjAddr: 0x196C, symBinAddr: 0xFF44, symSize: 0xC58 }
- { offsetInCU: 0xD852, offset: 0x5FD47, size: 0x8, addend: 0x0, symName: '+[CVHelper resizeToYuvUsing:of:]', symObjAddr: 0x25C4, symBinAddr: 0x10B9C, symSize: 0xBD8 }
- { offsetInCU: 0xEEF0, offset: 0x613E5, size: 0x8, addend: 0x0, symName: '+[CVHelper resizeToRgbFloatUsing:of:]', symObjAddr: 0x319C, symBinAddr: 0x11774, symSize: 0xC58 }
...

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save