booth 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (383) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +11 -0
  3. data/LICENSE.md +1 -2
  4. data/README.md +37 -6
  5. data/app/assets/images/booth/browsers/README.md +1 -2
  6. data/app/assets/images/booth/browsers/chrome.svg +1 -1
  7. data/app/assets/images/booth/browsers/edge.svg +1 -1
  8. data/app/assets/images/booth/browsers/firefox.svg +1 -1
  9. data/app/assets/images/booth/browsers/opera.svg +1 -1
  10. data/app/assets/images/booth/browsers/safari.svg +1 -1
  11. data/app/assets/images/booth/fido/passkey_mark_a.svg +10 -0
  12. data/app/assets/images/booth/fido/passkey_mark_a_black.svg +32 -0
  13. data/app/assets/images/booth/fido/passkey_mark_a_reverse.svg +33 -0
  14. data/app/assets/images/booth/fido/passkey_mark_a_white.svg +32 -0
  15. data/app/assets/images/booth/fido/passkey_mark_b_black.svg +1 -0
  16. data/app/assets/images/booth/platforms/android.svg +1 -6
  17. data/app/assets/images/booth/platforms/apple.svg +1 -6
  18. data/app/assets/images/booth/platforms/linux.svg +1 -6
  19. data/app/assets/images/booth/platforms/windows.svg +1 -6
  20. data/app/assets/javascripts/booth/authentication.js +29 -0
  21. data/app/assets/javascripts/booth/authentication.js.map +1 -0
  22. data/app/assets/javascripts/booth/error.js +38 -0
  23. data/app/assets/javascripts/booth/error.js.map +1 -0
  24. data/app/assets/javascripts/booth/form.js +78 -0
  25. data/app/assets/javascripts/booth/form.js.map +1 -0
  26. data/app/assets/javascripts/booth/gui.js +53 -0
  27. data/app/assets/javascripts/booth/gui.js.map +1 -0
  28. data/app/assets/javascripts/booth/registration.js +29 -0
  29. data/app/assets/javascripts/booth/registration.js.map +1 -0
  30. data/app/assets/javascripts/booth/setup.js +14 -0
  31. data/app/assets/javascripts/booth/verification.js +49 -0
  32. data/app/assets/javascripts/booth/verification.js.map +1 -0
  33. data/app/assets/javascripts/declarations/authentication.d.ts +6 -0
  34. data/app/assets/javascripts/declarations/error.d.ts +36 -0
  35. data/app/assets/javascripts/declarations/form.d.ts +8 -0
  36. data/app/assets/javascripts/declarations/gui.d.ts +4 -0
  37. data/app/assets/javascripts/declarations/registration.d.ts +6 -0
  38. data/app/assets/javascripts/declarations/setup.d.ts +3 -0
  39. data/app/assets/javascripts/declarations/verification.d.ts +6 -0
  40. data/app/assets/javascripts/src/authentication.ts +41 -0
  41. data/app/assets/javascripts/src/error.ts +35 -0
  42. data/app/assets/javascripts/src/form.ts +90 -0
  43. data/app/assets/javascripts/src/gui.ts +59 -0
  44. data/app/assets/javascripts/src/registration.ts +44 -0
  45. data/app/assets/javascripts/src/verification.ts +61 -0
  46. data/app/assets/stylesheets/booth/booth.css +3 -0
  47. data/config/importmap.rb +11 -0
  48. data/config/locales/de.yml +14 -38
  49. data/config/locales/en.yml +17 -36
  50. data/data/combined_aaguid.json +1 -0
  51. data/lib/booth/adminland/credentials/create.rb +10 -12
  52. data/lib/booth/adminland/credentials/index.rb +31 -0
  53. data/lib/booth/adminland/onboardings/create.rb +24 -15
  54. data/lib/booth/adminland/onboardings/destroy.rb +8 -4
  55. data/lib/booth/adminland/onboardings/find.rb +52 -45
  56. data/lib/booth/adminland/onboardings/find_unconsumed.rb +61 -0
  57. data/lib/booth/adminland/onboardings/index.rb +6 -3
  58. data/lib/booth/adminland/periodic_cleanup.rb +7 -2
  59. data/lib/booth/adminland.rb +17 -18
  60. data/lib/booth/coercers/domain.rb +11 -0
  61. data/lib/booth/coercers/request.rb +51 -0
  62. data/lib/booth/coercers/scope.rb +11 -0
  63. data/lib/booth/comparisons/domain.rb +38 -0
  64. data/lib/booth/comparisons/scope.rb +38 -0
  65. data/lib/booth/concerns/action.rb +25 -13
  66. data/lib/booth/concerns/transition.rb +5 -2
  67. data/lib/booth/configuration.rb +14 -73
  68. data/lib/booth/configure.rb +3 -10
  69. data/lib/booth/{audits/register → core/audit}/completed_onboarding.rb +8 -6
  70. data/lib/booth/core/audit/credential_created.rb +24 -0
  71. data/lib/booth/core/audit/logout.rb +24 -0
  72. data/lib/booth/core/authenticators/confirm.rb +30 -0
  73. data/lib/booth/core/authenticators/step.rb +24 -0
  74. data/lib/booth/core/cooldowns/distance_of_time.rb +50 -0
  75. data/lib/booth/core/cooldowns/strategies/exponential.rb +88 -0
  76. data/lib/booth/core/cooldowns/strategies/global.rb +66 -0
  77. data/lib/booth/core/cooldowns/strategies/result.rb +27 -0
  78. data/lib/booth/core/credentials/create.rb +32 -0
  79. data/lib/booth/core/credentials/find_by_username.rb +63 -0
  80. data/lib/booth/core/credentials/index.rb +15 -0
  81. data/lib/booth/core/credentials/webauth_challenge.rb +37 -0
  82. data/lib/booth/core/geolocation.rb +25 -0
  83. data/lib/booth/core/onboardings/find.rb +92 -0
  84. data/lib/booth/core/onboardings/step.rb +19 -0
  85. data/lib/booth/core/remotes/get.rb +45 -0
  86. data/lib/booth/core/remotes/respond.rb +82 -0
  87. data/lib/booth/core/remotes/set_for_login.rb +31 -0
  88. data/lib/booth/core/sessions/create_and_login.rb +63 -0
  89. data/lib/booth/core/sessions/historical_locations.rb +22 -0
  90. data/lib/booth/core/sessions/index.rb +66 -0
  91. data/lib/booth/core/sessions/revoke.rb +59 -0
  92. data/lib/booth/core/sessions/revoke_all_others.rb +49 -0
  93. data/lib/booth/core/sessions/to_passport.rb +35 -0
  94. data/lib/booth/core/webauth/authentication_verification.rb +76 -0
  95. data/lib/booth/core/webauth/options_for_create.rb +56 -0
  96. data/lib/booth/core/webauth/options_for_get.rb +30 -0
  97. data/lib/booth/core/webauth/provider.rb +36 -0
  98. data/lib/booth/core/webauth/registration_verification.rb +100 -0
  99. data/lib/booth/credential.rb +35 -0
  100. data/lib/booth/engine.rb +15 -4
  101. data/lib/booth/errors.rb +2 -0
  102. data/lib/booth/hooks/after_fetch.rb +14 -6
  103. data/lib/booth/hooks/before_logout.rb +5 -3
  104. data/lib/booth/hooks/serialize_from_session.rb +13 -5
  105. data/lib/booth/hooks/serialize_into_session.rb +6 -3
  106. data/lib/booth/logging.rb +13 -42
  107. data/lib/booth/models/application_record.rb +3 -0
  108. data/lib/booth/models/audit.rb +10 -11
  109. data/lib/booth/models/authenticator.rb +6 -9
  110. data/lib/booth/models/credential.rb +17 -20
  111. data/lib/booth/models/onboarding.rb +16 -39
  112. data/lib/booth/models/{contest.rb → remote.rb} +13 -14
  113. data/lib/booth/models/remotes/scopes/recently_created.rb +26 -0
  114. data/lib/booth/models/remotes/scopes/recently_responded.rb +35 -0
  115. data/lib/booth/models/session.rb +15 -10
  116. data/lib/booth/models/user_agent.rb +2 -0
  117. data/lib/booth/request.rb +43 -22
  118. data/lib/booth/requests/agent.rb +3 -1
  119. data/lib/booth/requests/authentication.rb +15 -5
  120. data/lib/booth/requests/ip.rb +4 -2
  121. data/lib/booth/requests/return_path.rb +4 -2
  122. data/lib/booth/requests/session.rb +6 -4
  123. data/lib/booth/requests/storage.rb +5 -31
  124. data/lib/booth/requests/storages/login.rb +35 -29
  125. data/lib/booth/requests/storages/registration.rb +2 -0
  126. data/lib/booth/requests/storages/webauth.rb +3 -0
  127. data/lib/booth/requests/sudo.rb +6 -50
  128. data/lib/booth/routes/userland.rb +13 -59
  129. data/lib/booth/syntaxes/domain.rb +46 -0
  130. data/lib/booth/syntaxes/email.rb +11 -8
  131. data/lib/booth/syntaxes/ip.rb +6 -4
  132. data/lib/booth/syntaxes/remote_code.rb +60 -0
  133. data/lib/booth/syntaxes/scope.rb +7 -3
  134. data/lib/booth/syntaxes/secret_key.rb +8 -6
  135. data/lib/booth/syntaxes/username.rb +23 -10
  136. data/lib/booth/syntaxes/uuid.rb +3 -1
  137. data/lib/booth/test.rb +27 -22
  138. data/lib/booth/testing/incorporation_test_case.rb +29 -0
  139. data/lib/booth/testing/shortcuts.rb +77 -0
  140. data/lib/booth/testing/support/assert_all_partials_were_covered.rb +69 -0
  141. data/lib/booth/testing/support/assert_logged_in.rb +68 -0
  142. data/lib/booth/{test → testing}/support/assert_logged_out.rb +7 -4
  143. data/lib/booth/testing/support/assert_partial.rb +56 -0
  144. data/lib/booth/{test → testing}/support/force_login.rb +10 -4
  145. data/lib/booth/{test → testing}/support/get_session_value.rb +8 -6
  146. data/lib/booth/testing/support/scenario.rb +23 -0
  147. data/lib/booth/testing/support/shortcuts/create_and_onboard.rb +56 -0
  148. data/lib/booth/testing/support/shortcuts/login_with_passkey.rb +55 -0
  149. data/lib/booth/testing/support/shortcuts/register_new_passkey.rb +51 -0
  150. data/lib/booth/testing/support/soft_reset_session.rb +24 -0
  151. data/lib/booth/testing/support/virtual_authenticators/create.rb +34 -0
  152. data/lib/booth/testing/support/virtual_authenticators/destroy.rb +20 -0
  153. data/lib/booth/testing/support/virtual_authenticators/enable.rb +24 -0
  154. data/lib/booth/testing/support/virtual_authenticators/load.rb +38 -0
  155. data/lib/booth/testing/support/virtual_authenticators/manager.rb +124 -0
  156. data/lib/booth/testing/support/visit.rb +62 -0
  157. data/lib/booth/testing/userland/login_remotely.rb +100 -0
  158. data/lib/booth/testing/userland/onboarding_first_time.rb +81 -0
  159. data/lib/booth/testing/userland/onboarding_to_reset_passkeys.rb +129 -0
  160. data/lib/booth/testing/userland/registration_with_passkey.rb +93 -0
  161. data/lib/booth/testing/userland/registration_without_passkey.rb +101 -0
  162. data/lib/booth/testing/userland/sessions_manage_behavior.rb +68 -0
  163. data/lib/booth/testing/userland/sessions_revoke_all_others.rb +17 -0
  164. data/lib/booth/testing/userland/sessions_revoke_one.rb +17 -0
  165. data/lib/booth/testing/userland.rb +36 -0
  166. data/lib/booth/to_struct.rb +9 -2
  167. data/lib/booth/userland/extract_flash_messages.rb +10 -3
  168. data/lib/booth/userland/logins/create.rb +8 -6
  169. data/lib/booth/userland/logins/destroy.rb +23 -6
  170. data/lib/booth/userland/logins/new.rb +23 -25
  171. data/lib/booth/userland/logins/transitions/create/choose_username.rb +62 -27
  172. data/lib/booth/userland/logins/transitions/create/skip_remotes.rb +18 -14
  173. data/lib/booth/userland/logins/transitions/create/webauth_authentication_initiation.rb +54 -48
  174. data/lib/booth/userland/logins/transitions/create/webauth_authentication_verification.rb +62 -58
  175. data/lib/booth/userland/logins/transitions/new/already_logged_in.rb +4 -3
  176. data/lib/booth/userland/logins/transitions/new/fallible.rb +4 -0
  177. data/lib/booth/userland/logins/transitions/new/{mode_username_and_password.rb → missing_authenticators.rb} +5 -4
  178. data/lib/booth/userland/logins/transitions/new/mode_username_and_webauth.rb +6 -4
  179. data/lib/booth/userland/logins/transitions/new/no_username_chosen.rb +3 -1
  180. data/lib/booth/userland/logins/transitions/new/remote_session_available.rb +20 -13
  181. data/lib/booth/userland/logins/transitions/new/timed_out.rb +3 -1
  182. data/lib/booth/userland/onboardings/show.rb +65 -39
  183. data/lib/booth/userland/onboardings/update.rb +46 -38
  184. data/lib/booth/userland/registrations/create.rb +51 -20
  185. data/lib/booth/userland/registrations/new.rb +6 -7
  186. data/lib/booth/userland/remotes/show.rb +56 -0
  187. data/lib/booth/userland/{personal_contests → remotes}/update.rb +5 -3
  188. data/lib/booth/userland/sessions/destroy_one_or_other.rb +3 -16
  189. data/lib/booth/userland/sessions/index.rb +4 -2
  190. data/lib/booth/userland/sessions/show.rb +5 -6
  191. data/lib/booth/userland/sessions/transitions/destroy/enter_webauth.rb +8 -6
  192. data/lib/booth/userland/sessions/transitions/destroy/webauth_authentication_initiation.rb +8 -6
  193. data/lib/booth/userland/sessions/transitions/destroy/webauth_authentication_verification.rb +7 -5
  194. data/lib/booth/userland/sessions/transitions/show/enter_webauth.rb +8 -6
  195. data/lib/booth/userland/webauths/create.rb +20 -17
  196. data/lib/booth/userland/webauths/destroy.rb +6 -16
  197. data/lib/booth/userland/webauths/guards/sudo.rb +10 -5
  198. data/lib/booth/userland/webauths/index.rb +4 -2
  199. data/lib/booth/userland/webauths/new.rb +7 -22
  200. data/lib/booth/userland/webauths/sudo.rb +3 -1
  201. data/lib/booth/userland/webauths/transitions/create/authentication_initiation.rb +8 -11
  202. data/lib/booth/userland/webauths/transitions/create/authentication_verification.rb +11 -13
  203. data/lib/booth/userland/webauths/transitions/create/choose_nickname.rb +8 -5
  204. data/lib/booth/userland/webauths/transitions/create/registration_initiation.rb +15 -14
  205. data/lib/booth/userland/webauths/transitions/create/registration_verification.rb +34 -28
  206. data/lib/booth/userland/webauths/transitions/create/reset.rb +2 -0
  207. data/lib/booth/userland/webauths/transitions/new/step.rb +3 -1
  208. data/lib/booth/userland/webauths/transitions/sudo/authentication_initiation.rb +5 -10
  209. data/lib/booth/userland/webauths/transitions/sudo/authentication_verification.rb +4 -2
  210. data/lib/booth/userland.rb +53 -109
  211. data/lib/booth/version.rb +3 -1
  212. data/lib/booth.rb +6 -236
  213. data/lib/generators/booth/migration/migration_generator.rb +2 -1
  214. data/lib/generators/booth/migration/templates/add_credential_to_users.erb +6 -4
  215. data/lib/generators/booth/migration/templates/create_booth_tables.erb +61 -72
  216. metadata +124 -571
  217. data/app/assets/config/booth_manifest.js +0 -15
  218. data/app/assets/images/booth/browsers/internet_explorer.svg +0 -1
  219. data/app/assets/javascripts/booth/all.js +0 -162
  220. data/app/assets/javascripts/booth/all.js.map +0 -1
  221. data/app/assets/javascripts/booth/booth.ts +0 -194
  222. data/app/assets/javascripts/booth/webauthn-json.ts +0 -99
  223. data/lib/booth/adminland/recoveries/consume.rb +0 -70
  224. data/lib/booth/audits/register/added_otp.rb +0 -22
  225. data/lib/booth/audits/register/changed_otp.rb +0 -22
  226. data/lib/booth/audits/register/correct_otp.rb +0 -42
  227. data/lib/booth/audits/register/correct_password.rb +0 -43
  228. data/lib/booth/audits/register/logout.rb +0 -22
  229. data/lib/booth/audits/register/requested_password_reset.rb +0 -22
  230. data/lib/booth/audits/register/wrong_otp.rb +0 -22
  231. data/lib/booth/audits/register/wrong_password.rb +0 -25
  232. data/lib/booth/authenticators/confirm.rb +0 -34
  233. data/lib/booth/authenticators/credential_mode_after_confirmation.rb +0 -25
  234. data/lib/booth/authenticators/step.rb +0 -19
  235. data/lib/booth/contests/get.rb +0 -36
  236. data/lib/booth/contests/respond.rb +0 -78
  237. data/lib/booth/contests/set_for_login.rb +0 -28
  238. data/lib/booth/cooldowns/distance_of_time.rb +0 -46
  239. data/lib/booth/cooldowns/otp.rb +0 -22
  240. data/lib/booth/cooldowns/password.rb +0 -44
  241. data/lib/booth/cooldowns/password_reset.rb +0 -24
  242. data/lib/booth/cooldowns/strategies/exponential.rb +0 -82
  243. data/lib/booth/cooldowns/strategies/global.rb +0 -62
  244. data/lib/booth/cooldowns/strategies/result.rb +0 -22
  245. data/lib/booth/credentials/create.rb +0 -28
  246. data/lib/booth/credentials/create_with_onboarding.rb +0 -26
  247. data/lib/booth/credentials/find_by_username.rb +0 -45
  248. data/lib/booth/credentials/mode.rb +0 -69
  249. data/lib/booth/credentials/modes/otp_addable.rb +0 -23
  250. data/lib/booth/credentials/modes/otp_changeable.rb +0 -23
  251. data/lib/booth/credentials/modes/otp_manageable.rb +0 -17
  252. data/lib/booth/credentials/modes/otp_removable.rb +0 -23
  253. data/lib/booth/credentials/modes/password_addable.rb +0 -29
  254. data/lib/booth/credentials/modes/password_changeable.rb +0 -31
  255. data/lib/booth/credentials/modes/password_manageable.rb +0 -17
  256. data/lib/booth/credentials/modes/password_removable.rb +0 -24
  257. data/lib/booth/credentials/modes/password_removal_requires_user_verifiable_webauth.rb +0 -16
  258. data/lib/booth/credentials/modes/webauth_addable.rb +0 -26
  259. data/lib/booth/credentials/modes/webauth_manageable.rb +0 -16
  260. data/lib/booth/credentials/modes/webauth_removable.rb +0 -25
  261. data/lib/booth/credentials/otp_authentication.rb +0 -59
  262. data/lib/booth/credentials/password_authentication.rb +0 -72
  263. data/lib/booth/credentials/webauth_challenge.rb +0 -28
  264. data/lib/booth/geolocation.rb +0 -20
  265. data/lib/booth/logger.rb +0 -41
  266. data/lib/booth/method_object.rb +0 -73
  267. data/lib/booth/mode.rb +0 -22
  268. data/lib/booth/models/concerns/modeable.rb +0 -50
  269. data/lib/booth/models/concerns/otpable.rb +0 -37
  270. data/lib/booth/models/concerns/passwordable.rb +0 -58
  271. data/lib/booth/models/contests/scopes/recently_created.rb +0 -23
  272. data/lib/booth/models/contests/scopes/recently_responded.rb +0 -32
  273. data/lib/booth/models/password_reset.rb +0 -41
  274. data/lib/booth/models/recovery.rb +0 -32
  275. data/lib/booth/models/registration.rb +0 -10
  276. data/lib/booth/modes/base.rb +0 -25
  277. data/lib/booth/modes/username_and_password.rb +0 -7
  278. data/lib/booth/modes/username_and_webauth.rb +0 -7
  279. data/lib/booth/modes/username_password_and_otp.rb +0 -7
  280. data/lib/booth/modes/username_password_and_webauth.rb +0 -7
  281. data/lib/booth/onboardings/find.rb +0 -35
  282. data/lib/booth/onboardings/propagate_to_credential.rb +0 -63
  283. data/lib/booth/onboardings/step.rb +0 -68
  284. data/lib/booth/password_resets/create.rb +0 -57
  285. data/lib/booth/password_resets/find.rb +0 -36
  286. data/lib/booth/password_resets/propagate_to_credential.rb +0 -36
  287. data/lib/booth/password_resets/step.rb +0 -18
  288. data/lib/booth/recoveries/create.rb +0 -45
  289. data/lib/booth/requests/storages/otp.rb +0 -54
  290. data/lib/booth/requests/storages/password.rb +0 -49
  291. data/lib/booth/requests/storages/password_reset.rb +0 -35
  292. data/lib/booth/requests/storages/recovery.rb +0 -35
  293. data/lib/booth/sessions/create_and_login.rb +0 -46
  294. data/lib/booth/sessions/historical_locations.rb +0 -18
  295. data/lib/booth/sessions/index.rb +0 -59
  296. data/lib/booth/sessions/revoke.rb +0 -51
  297. data/lib/booth/sessions/revoke_all_others.rb +0 -43
  298. data/lib/booth/sessions/to_passport.rb +0 -51
  299. data/lib/booth/syntaxes/contest_code.rb +0 -58
  300. data/lib/booth/syntaxes/otp.rb +0 -57
  301. data/lib/booth/syntaxes/scope_comparison.rb +0 -28
  302. data/lib/booth/test/helpers.rb +0 -63
  303. data/lib/booth/test/support/assert_all_partials_were_covered.rb +0 -63
  304. data/lib/booth/test/support/assert_logged_in.rb +0 -49
  305. data/lib/booth/test/support/assert_partial.rb +0 -29
  306. data/lib/booth/test/support/otp_code_from_session.rb +0 -30
  307. data/lib/booth/test/support/soft_reset_session.rb +0 -22
  308. data/lib/booth/test/userland/logins/missing_authenticators.rb +0 -72
  309. data/lib/booth/test/userland/logins/missing_onboarding.rb +0 -35
  310. data/lib/booth/test/userland/logins/username_and_password.rb +0 -40
  311. data/lib/booth/test/userland/logins/username_and_webauth.rb +0 -75
  312. data/lib/booth/test/userland/logins/username_password_and_otp.rb +0 -45
  313. data/lib/booth/test/userland/logins/username_password_and_webauth.rb +0 -86
  314. data/lib/booth/test/userland/onboardings/already_logged_in.rb +0 -64
  315. data/lib/booth/test/userland/onboardings/otp.rb +0 -63
  316. data/lib/booth/test/userland/onboardings/password.rb +0 -49
  317. data/lib/booth/test/userland/onboardings/timeout.rb +0 -47
  318. data/lib/booth/test/userland/otps/manage.rb +0 -86
  319. data/lib/booth/test/userland/password_resets/reset.rb +0 -102
  320. data/lib/booth/test/userland.rb +0 -38
  321. data/lib/booth/test/webauthn/disable.rb +0 -17
  322. data/lib/booth/test/webauthn/enable.rb +0 -19
  323. data/lib/booth/test/webauthn/virtual_authenticators/create.rb +0 -38
  324. data/lib/booth/test/webauthn/virtual_authenticators/destroy.rb +0 -20
  325. data/lib/booth/userland/logins/transitions/create/enter_otp.rb +0 -70
  326. data/lib/booth/userland/logins/transitions/create/verify_password.rb +0 -70
  327. data/lib/booth/userland/logins/transitions/new/mode_first_time.rb +0 -20
  328. data/lib/booth/userland/logins/transitions/new/mode_username_password_and_otp.rb +0 -24
  329. data/lib/booth/userland/logins/transitions/new/mode_username_password_and_webauth.rb +0 -24
  330. data/lib/booth/userland/onboardings/transitions/update/choose_mode.rb +0 -58
  331. data/lib/booth/userland/onboardings/transitions/update/choose_password.rb +0 -41
  332. data/lib/booth/userland/onboardings/transitions/update/choose_webauth_nickname.rb +0 -50
  333. data/lib/booth/userland/onboardings/transitions/update/confirm_otp.rb +0 -58
  334. data/lib/booth/userland/onboardings/transitions/update/confirm_password.rb +0 -49
  335. data/lib/booth/userland/onboardings/transitions/update/register_otp.rb +0 -31
  336. data/lib/booth/userland/onboardings/transitions/update/reset_otp.rb +0 -40
  337. data/lib/booth/userland/onboardings/transitions/update/reset_password.rb +0 -35
  338. data/lib/booth/userland/onboardings/transitions/update/reset_webauth.rb +0 -46
  339. data/lib/booth/userland/onboardings/transitions/update/webauth_authentication_initiation.rb +0 -40
  340. data/lib/booth/userland/onboardings/transitions/update/webauth_authentication_verification.rb +0 -59
  341. data/lib/booth/userland/onboardings/transitions/update/webauth_registration_initiation.rb +0 -46
  342. data/lib/booth/userland/onboardings/transitions/update/webauth_registration_verification.rb +0 -56
  343. data/lib/booth/userland/otps/destroy.rb +0 -42
  344. data/lib/booth/userland/otps/edit.rb +0 -72
  345. data/lib/booth/userland/otps/guards/manageable.rb +0 -21
  346. data/lib/booth/userland/otps/guards/sudo.rb +0 -23
  347. data/lib/booth/userland/otps/show.rb +0 -36
  348. data/lib/booth/userland/otps/sudo.rb +0 -51
  349. data/lib/booth/userland/otps/transitions/update/confirm.rb +0 -84
  350. data/lib/booth/userland/otps/transitions/update/register.rb +0 -40
  351. data/lib/booth/userland/otps/transitions/update/reset.rb +0 -31
  352. data/lib/booth/userland/otps/update.rb +0 -34
  353. data/lib/booth/userland/password_resets/create.rb +0 -73
  354. data/lib/booth/userland/password_resets/guards/logged_out.rb +0 -21
  355. data/lib/booth/userland/password_resets/new.rb +0 -57
  356. data/lib/booth/userland/password_resets/show.rb +0 -77
  357. data/lib/booth/userland/password_resets/transitions/update/choose_password.rb +0 -48
  358. data/lib/booth/userland/password_resets/transitions/update/confirm_password.rb +0 -54
  359. data/lib/booth/userland/password_resets/transitions/update/reset_password.rb +0 -29
  360. data/lib/booth/userland/password_resets/update.rb +0 -65
  361. data/lib/booth/userland/passwords/destroy.rb +0 -41
  362. data/lib/booth/userland/passwords/edit.rb +0 -54
  363. data/lib/booth/userland/passwords/guards/manageable.rb +0 -21
  364. data/lib/booth/userland/passwords/guards/removable.rb +0 -21
  365. data/lib/booth/userland/passwords/guards/sudo.rb +0 -21
  366. data/lib/booth/userland/passwords/remove.rb +0 -34
  367. data/lib/booth/userland/passwords/show.rb +0 -32
  368. data/lib/booth/userland/passwords/sudo.rb +0 -55
  369. data/lib/booth/userland/passwords/transitions/remove/step.rb +0 -27
  370. data/lib/booth/userland/passwords/transitions/update/choose_password.rb +0 -62
  371. data/lib/booth/userland/passwords/transitions/update/confirm_password.rb +0 -82
  372. data/lib/booth/userland/passwords/update.rb +0 -33
  373. data/lib/booth/userland/personal_contests/show.rb +0 -60
  374. data/lib/booth/userland/recoveries/create.rb +0 -48
  375. data/lib/booth/userland/recoveries/new.rb +0 -35
  376. data/lib/booth/userland/sessions/transitions/destroy/enter_password.rb +0 -50
  377. data/lib/booth/userland/sessions/transitions/destroy/verify_password.rb +0 -83
  378. data/lib/booth/userland/webauths/guards/manageable.rb +0 -21
  379. data/lib/booth/webauth/authentication_verification.rb +0 -68
  380. data/lib/booth/webauth/demand_user_verification.rb +0 -29
  381. data/lib/booth/webauth/options_for_create.rb +0 -46
  382. data/lib/booth/webauth/options_for_get.rb +0 -29
  383. data/lib/generators/booth/migration/templates/create_booth_mode_types.erb +0 -20
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 277fda68ddc0994bf94d53a2c403eed2f8a4b7222df9e517030e4c54118104c6
4
- data.tar.gz: 3374a71fe3d15ec5896cb8ee645ab9f509f69d3ede4755d9b03d66e5b5c9db5f
3
+ metadata.gz: 1c668536c8bd588ea518b1033cbb609ee2fe4eff849e66a507fcdea560968268
4
+ data.tar.gz: ff67cfaf633cffb7975257ec93332ae5e7283b331a78b789303ce993604c8a71
5
5
  SHA512:
6
- metadata.gz: dc0575e08fa20689ebe590d42a0347b86c880176ea0420f17b0a7de4b1ad8693e998d4886c16c4197ce570376172fc66c2fcf55508923e71b58cc8e65639d025
7
- data.tar.gz: 2c226f46885aee67f171c7661be1e8493513c6f8771c46fcaf2163bd31414734342c21fd5a4c9b8f61144a32d6563ac4c6cd8609c72d174b38380f218ed12ab9
6
+ metadata.gz: 81b4366d2c6654c79402b09731420fd4782587b59c1ce8cf68da4f4a81dfabca495270ef1c8d3869814d150450d8b2539d4068f18182ef3daa85dc01a9b481fd
7
+ data.tar.gz: 2d54c3e7c590331026916e29ad51c90605e8b0bda7a93efdb49ea4a9b51be06229a4a0ebfbded4b7e2c90e487a32e1225812ff72888f23db50406cbd2e31bfee
data/CHANGELOG.md CHANGED
@@ -1,3 +1,14 @@
1
+ # main
2
+
3
+ ```
4
+ def change
5
+ add_column :booth_authenticators, :aaguid, :uuid
6
+ add_column :booth_authenticators, :attachment, :string
7
+ add_column :booth_authenticators, :issuer, :string
8
+ end
9
+
10
+ ```
11
+
1
12
  # 0.0.1
2
13
 
3
14
  First publication for experimentation.
data/LICENSE.md CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2019-2022 halo https://github.com/halo/booth
3
+ Copyright (c) halo https://github.com/halo/booth
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -19,4 +19,3 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
19
  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
20
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
21
  SOFTWARE.
22
-
data/README.md CHANGED
@@ -1,3 +1,26 @@
1
+ TODO:
2
+ - Throttling
3
+ - Don't log sensitive params (remote codes)
4
+ -
5
+
6
+
7
+ - PostgreSQL
8
+ - Rails Engine (not optimized for other rack-apps)
9
+ - No OAuth (unlike OmniAuth)
10
+ - focus on username + passkey
11
+
12
+ - No halting
13
+ - Table ownerhsip like ActiveStorage
14
+ - No magic (no Mixins, no meta-programming)
15
+ - Simple (uses Method Objects that do one thing and do it well, returning mostly immutable Data objects, file size averages around 45 lines)
16
+ - So if need be, I suppose you can ingest the entire code base in an hour and know how it works.
17
+ - focus on privacy (no residential keys)
18
+
19
+ - may need to add `127.0.0.1 alpha.localhost` to /etc/hosts for tests to pass
20
+
21
+
22
+ - Devise makes you own the views and controllers eventually
23
+
1
24
 
2
25
 
3
26
  # Setup DB and run tests
@@ -16,7 +39,7 @@ bin/rails test:system
16
39
  bin/rails test
17
40
 
18
41
  # Run one developer integration test
19
- bin/rails test --name test_booth_test_userland_otps_manage
42
+ bin/rails test --name test_booth_test_userland_webauths_manage
20
43
  ```
21
44
 
22
45
  Debugging webauthn: log/crmux.log
@@ -26,12 +49,12 @@ Debugging webauthn: log/crmux.log
26
49
  # Generate documentation
27
50
 
28
51
  ```sh
29
- gem install yardoc
30
- yard server --reload
52
+ bin/docs
31
53
  ```
32
54
 
33
55
  # Public API
34
56
 
57
+
35
58
  ```ruby
36
59
  # As long as you only call methods in these modules,
37
60
  # you are using the supported API of Booth.
@@ -50,12 +73,15 @@ Booth::Test.some_method
50
73
 
51
74
  # Brainstorming data models
52
75
 
76
+ We rely on subdomains for tenanting, because subdomains can have CNAME (avoids A-records).
77
+ Avoid discoverable passkeys because one may have several accounts on one site. Automation confuses.
78
+ Timing attacks: irrelevant because we always reveal whether a username exists or not.
53
79
 
54
80
  User (email) (you own that)
55
81
 
56
82
  Things that can initiate a session:
57
83
 
58
- (A) Credential (username/password)
84
+ (A) Credential (username)
59
85
  (B) Registration (name, email)
60
86
  (C) Incognito User
61
87
 
@@ -128,6 +154,9 @@ Employees can incognito login as users and other employees
128
154
  And if you have direct access to our database, then why would you even try to reset a user account?
129
155
  You already have all user data.
130
156
 
157
+ - Annoying Sudo mode even when just signed in a minute ago:
158
+ https://youtu.be/XP-76tYy2m4?t=1878
159
+
131
160
  # Use Cases
132
161
 
133
162
  Given an email address, send an invitiation link
@@ -205,8 +234,6 @@ id = Booth::Credentials.create scope: :admin
205
234
  MyUser.create credential_id: id
206
235
  ```
207
236
 
208
- ### Generate Onboarding
209
-
210
237
 
211
238
 
212
239
  ---
@@ -339,7 +366,11 @@ The risk of Alice physically loosing the hardware key is comparable to the risk
339
366
  An attacker knowing that Alice does *not* login passwordlessly is unproblematic. Because the password might still be combined with with 2FA.
340
367
 
341
368
  We do not rely on [Resident Keys](https://developers.yubico.com/WebAuthn/WebAuthn_Developer_Guide/Resident_Keys.html) to protect the user's privacy. But we always demand [user verification](https://developers.yubico.com/WebAuthn/WebAuthn_Developer_Guide/User_Presence_vs_User_Verification.html) for passwordless logins.
369
+ Quote from Yubico:
370
+
371
+ > If an unauthorized user is able to get a hold of the FIDO2 authenticator, they could use the same command to see what relying parties that the authenticator is registered with. This could compromise privacy for the user, as it provides a list of sites the user accesses.
342
372
 
373
+ (See https://developers.yubico.com/WebAuthn/WebAuthn_Developer_Guide/Resident_Keys.html )
343
374
 
344
375
 
345
376
 
@@ -1,2 +1 @@
1
- Downloaded from https://github.com/alrra/browser-logos
2
- Update with `rake download_logos`
1
+ Update with `rake booth:logos`
@@ -1 +1 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="-10 -10 276 276"><linearGradient id="a" x1="145" x2="34" y1="253" y2="61" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#1e8e3e"/><stop offset="1" stop-color="#34a853"/></linearGradient><linearGradient id="b" x1="111" x2="222" y1="254" y2="62" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#fcc934"/><stop offset="1" stop-color="#fbbc04"/></linearGradient><linearGradient id="c" x1="17" x2="239" y1="80" y2="80" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#d93025"/><stop offset="1" stop-color="#ea4335"/></linearGradient><circle cx="128" cy="128" r="64" fill="#fff"/><path fill="url(#a)" d="M96 183.4A63.7 63.7 0 0 1 72.6 160L17.2 64A128 128 0 0 0 128 256l55.4-96A64 64 0 0 1 96 183.4Z"/><path fill="url(#b)" d="M192 128a63.7 63.7 0 0 1-8.6 32L128 256A128 128 0 0 0 238.9 64h-111a64 64 0 0 1 64 64Z"/><circle cx="128" cy="128" r="52" fill="#1a73e8"/><path fill="url(#c)" d="M96 72.6a63.7 63.7 0 0 1 32-8.6h110.8a128 128 0 0 0-221.7 0l55.5 96A64 64 0 0 1 96 72.6Z"/></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" viewBox="0 0 190 190"><linearGradient id="d" x1="28.3" x2="80.8" y1="75" y2="44.4" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#a52714" stop-opacity=".6"/><stop offset=".7" stop-color="#a52714" stop-opacity="0"/></linearGradient><linearGradient id="f" x1="109.9" x2="51.5" y1="164.5" y2="130.3" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#055524" stop-opacity=".4"/><stop offset=".3" stop-color="#055524" stop-opacity="0"/></linearGradient><linearGradient id="h" x1="121.9" x2="136.6" y1="49.8" y2="114.1" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ea6100" stop-opacity=".3"/><stop offset=".7" stop-color="#ea6100" stop-opacity="0"/></linearGradient><radialGradient id="a" cx="91.2" cy="55" r="84.1" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#3e2723" stop-opacity=".2"/><stop offset="1" stop-color="#3e2723" stop-opacity="0"/></radialGradient><radialGradient xlink:href="#a" id="i" cx="20.9" cy="47.5" r="78"/><radialGradient id="j" cx="94.8" cy="95.1" r="87.9" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#263238" stop-opacity=".2"/><stop offset="1" stop-color="#263238" stop-opacity="0"/></radialGradient><radialGradient id="k" cx="33.3" cy="31" r="176.8" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#fff" stop-opacity=".1"/><stop offset="1" stop-color="#fff" stop-opacity="0"/></radialGradient><clipPath id="b"><circle cx="95" cy="95" r="88"/></clipPath><g clip-path="url(#b)"><use xlink:href="#c" fill="#db4437"/><use xlink:href="#c" fill="url(#d)"/><use xlink:href="#e" fill="#0f9d58"/><use xlink:href="#e" fill="url(#f)"/><use xlink:href="#g" fill="#ffcd40"/><use xlink:href="#g" fill="url(#h)"/><g fill-opacity=".1"><path fill="#3e2723" d="M61.3 114.7 21 47.4l39 67.8z"/><path fill="#263238" d="m128.8 116.3-.8-.4-37.3 67 38.3-67z"/></g><path id="e" d="M7 183h83.8l39-39v-29H60.2L7 23.5z"/><path id="g" d="m95 55 34.6 60L91 183h92V55z"/><path id="c" d="M21 7v108h39.4L95 55h88V7z"/><path fill="url(#a)" d="M95 55v21l78.4-21z"/><path fill="url(#i)" d="m21 47.5 57.2 57.2L60.4 115z"/><path fill="url(#j)" d="m90.8 183 21-78.3 17.8 10.3z"/><circle cx="95" cy="95" r="40" fill="#f1f1f1"/><circle cx="95" cy="95" r="32" fill="#4285f4"/><circle cx="95" cy="95" r="88" fill="url(#k)"/><g fill="#3e2723" fill-opacity=".1"><path fill="#fff" d="M129.6 115a40 40 0 0 1-69.2 0L7 24.5 60.4 116a40 40 0 0 0 69.2 0z"/><path d="M96 55h-.5a40 40 0 1 1 0 80h.5c22 0 40-18 40-40s-18-40-40-40m-1 127a88 88 0 0 0 88-87.5v.5A88 88 0 0 1 7 95v-.5A88 88 0 0 0 95 182"/><g fill-opacity=".2"><path fill="#fff" d="M130 116.3a39.3 39.3 0 0 0 3.4-32 38 38 0 0 1-3.8 30.7L92 183l38.2-66.5zM95 8a88 88 0 0 1 88 87.5V95A88 88 0 0 0 7 95v.5A88 88 0 0 1 95 8"/><path d="M95 54c-22 0-40 18-40 40v1c0-22 18-40 40-40h88v-1z"/></g></g></g></svg>
@@ -1 +1 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 27600 27600"><linearGradient id="A" gradientUnits="userSpaceOnUse"/><linearGradient id="B" x1="6870" x2="24704" y1="18705" y2="18705" xlink:href="#A"><stop offset="0" stop-color="#0c59a4"/><stop offset="1" stop-color="#114a8b"/></linearGradient><linearGradient id="C" x1="16272" x2="5133" y1="10968" y2="23102" xlink:href="#A"><stop offset="0" stop-color="#1b9de2"/><stop offset=".16" stop-color="#1595df"/><stop offset=".67" stop-color="#0680d7"/><stop offset="1" stop-color="#0078d4"/></linearGradient><radialGradient id="D" cx="16720" cy="18747" r="9538" xlink:href="#A"><stop offset=".72" stop-opacity="0"/><stop offset=".95" stop-opacity=".53"/><stop offset="1"/></radialGradient><radialGradient id="E" cx="7130" cy="19866" r="14324" gradientTransform="matrix(.14843 -.98892 .79688 .1196 -8759 25542)" xlink:href="#A"><stop offset=".76" stop-opacity="0"/><stop offset=".95" stop-opacity=".5"/><stop offset="1"/></radialGradient><radialGradient id="F" cx="2523" cy="4680" r="20243" gradientTransform="matrix(-.03715 .99931 -2.12836 -.07913 13579 3530)" xlink:href="#A"><stop offset="0" stop-color="#35c1f1"/><stop offset=".11" stop-color="#34c1ed"/><stop offset=".23" stop-color="#2fc2df"/><stop offset=".31" stop-color="#2bc3d2"/><stop offset=".67" stop-color="#36c752"/></radialGradient><radialGradient id="G" cx="24247" cy="7758" r="9734" gradientTransform="matrix(.28109 .95968 -.78353 .22949 24510 -16292)" xlink:href="#A"><stop offset="0" stop-color="#66eb6e"/><stop offset="1" stop-color="#66eb6e" stop-opacity="0"/></radialGradient><path id="H" d="M24105 20053a9345 9345 0 01-1053 472 10202 10202 0 01-3590 646c-4732 0-8855-3255-8855-7432 0-1175 680-2193 1643-2729-4280 180-5380 4640-5380 7253 0 7387 6810 8137 8276 8137 791 0 1984-230 2704-456l130-44a12834 12834 0 006660-5282c220-350-168-757-535-565z"/><path id="I" d="M11571 25141a7913 7913 0 01-2273-2137 8145 8145 0 01-1514-4740 8093 8093 0 013093-6395 8082 8082 0 011373-859c312-148 846-414 1554-404a3236 3236 0 012569 1297 3184 3184 0 01636 1866c0-21 2446-7960-8005-7960-4390 0-8004 4166-8004 7820 0 2319 538 4170 1212 5604a12833 12833 0 007684 6757 12795 12795 0 003908 610c1414 0 2774-233 4045-656a7575 7575 0 01-6278-803z"/><path id="J" d="M16231 15886c-80 105-330 250-330 566 0 260 170 512 472 723 1438 1003 4149 868 4156 868a5954 5954 0 003027-839 6147 6147 0 001133-850 6180 6180 0 001910-4437c26-2242-796-3732-1133-4392-2120-4141-6694-6525-11668-6525-7011 0-12703 5635-12798 12620 47-3654 3679-6605 7996-6605 350 0 2346 34 4200 1007 1634 858 2490 1894 3086 2921 618 1067 728 2415 728 2952s-271 1333-780 1990z"/><use fill="url(#B)" xlink:href="#H"/><use fill="url(#D)" opacity=".35" xlink:href="#H"/><use fill="url(#C)" xlink:href="#I"/><use fill="url(#E)" opacity=".4" xlink:href="#I"/><use fill="url(#F)" xlink:href="#J"/><use fill="url(#G)" xlink:href="#J"/></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="1000 1000 25599.6 25600"><linearGradient id="a" gradientUnits="userSpaceOnUse"/><linearGradient xlink:href="#a" id="d" x1="6870" x2="24704" y1="18705" y2="18705"><stop offset="0" stop-color="#0c59a4"/><stop offset="1" stop-color="#114a8b"/></linearGradient><linearGradient xlink:href="#a" id="g" x1="16272" x2="5133" y1="10968" y2="23102"><stop offset="0" stop-color="#1b9de2"/><stop offset=".16" stop-color="#1595df"/><stop offset=".67" stop-color="#0680d7"/><stop offset="1" stop-color="#0078d4"/></linearGradient><radialGradient xlink:href="#a" id="e" cx="16720" cy="18747" r="9538"><stop offset=".72" stop-opacity="0"/><stop offset=".95" stop-opacity=".53"/><stop offset="1"/></radialGradient><radialGradient xlink:href="#a" id="h" cx="7130" cy="19866" r="14324" gradientTransform="matrix(.14843 -.98892 .79688 .1196 -8759 25542)"><stop offset=".76" stop-opacity="0"/><stop offset=".95" stop-opacity=".5"/><stop offset="1"/></radialGradient><radialGradient xlink:href="#a" id="j" cx="2523" cy="4680" r="20243" gradientTransform="matrix(-.03715 .99931 -2.12836 -.07913 13579 3530)"><stop offset="0" stop-color="#35c1f1"/><stop offset=".11" stop-color="#34c1ed"/><stop offset=".23" stop-color="#2fc2df"/><stop offset=".31" stop-color="#2bc3d2"/><stop offset=".67" stop-color="#36c752"/></radialGradient><radialGradient xlink:href="#a" id="k" cx="24247" cy="7758" r="9734" gradientTransform="matrix(.28109 .95968 -.78353 .22949 24510 -16292)"><stop offset="0" stop-color="#66eb6e"/><stop offset="1" stop-color="#66eb6e" stop-opacity="0"/></radialGradient><path id="b" d="M24105 20053a9345 9345 0 0 1-1053 472 10202 10202 0 0 1-3590 646c-4732 0-8855-3255-8855-7432 0-1175 680-2193 1643-2729-4280 180-5380 4640-5380 7253 0 7387 6810 8137 8276 8137 791 0 1984-230 2704-456l130-44a12834 12834 0 0 0 6660-5282c220-350-168-757-535-565"/><path id="f" d="M11571 25141a7913 7913 0 0 1-2273-2137 8145 8145 0 0 1-1514-4740 8093 8093 0 0 1 3093-6395 8082 8082 0 0 1 1373-859c312-148 846-414 1554-404a3236 3236 0 0 1 2569 1297 3184 3184 0 0 1 636 1866c0-21 2446-7960-8005-7960-4390 0-8004 4166-8004 7820 0 2319 538 4170 1212 5604a12833 12833 0 0 0 7684 6757 12795 12795 0 0 0 3908 610c1414 0 2774-233 4045-656a7575 7575 0 0 1-6278-803"/><path id="i" d="M16231 15886c-80 105-330 250-330 566 0 260 170 512 472 723 1438 1003 4149 868 4156 868a5954 5954 0 0 0 3027-839 6147 6147 0 0 0 1133-850 6180 6180 0 0 0 1910-4437c26-2242-796-3732-1133-4392-2120-4141-6694-6525-11668-6525-7011 0-12703 5635-12798 12620 47-3654 3679-6605 7996-6605 350 0 2346 34 4200 1007 1634 858 2490 1894 3086 2921 618 1067 728 2415 728 2952s-271 1333-780 1990z"/><use xlink:href="#b" fill="url(#d)"/><use xlink:href="#b" fill="url(#e)" opacity=".35"/><use xlink:href="#f" fill="url(#g)"/><use xlink:href="#f" fill="url(#h)" opacity=".4"/><use xlink:href="#i" fill="url(#j)"/><use xlink:href="#i" fill="url(#k)"/></svg>
@@ -1 +1 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 51500 51500"><radialGradient id="b" cx="87.4%" cy="-12.9%" r="128%" gradientTransform="matrix(.8 0 0 1 .18 .13)"><stop offset=".13" stop-color="#ffbd4f"/><stop offset=".28" stop-color="#ff980e"/><stop offset=".47" stop-color="#ff3750"/><stop offset=".78" stop-color="#eb0878"/><stop offset=".86" stop-color="#e50080"/></radialGradient><radialGradient id="d" cx="49%" cy="40%" r="128%" gradientTransform="matrix(.82 0 0 1 .09 0)"><stop offset=".3" stop-color="#960e18"/><stop offset=".35" stop-color="#b11927" stop-opacity=".74"/><stop offset=".43" stop-color="#db293d" stop-opacity=".34"/><stop offset=".5" stop-color="#f5334b" stop-opacity=".1"/><stop offset=".53" stop-color="#ff3750" stop-opacity="0"/></radialGradient><radialGradient id="e" cx="48%" cy="-12%" r="140%"><stop offset=".13" stop-color="#fff44f"/><stop offset=".53" stop-color="#ff980e"/></radialGradient><radialGradient id="f" cx="22.76%" cy="110.11%" r="100%"><stop offset=".35" stop-color="#3a8ee6"/><stop offset=".67" stop-color="#9059ff"/><stop offset="1" stop-color="#c139e6"/></radialGradient><radialGradient id="h" cx="52%" cy="33%" r="59%" gradientTransform="scale(.9 1)"><stop offset=".21" stop-color="#9059ff" stop-opacity="0"/><stop offset=".97" stop-color="#6e008b" stop-opacity=".6"/></radialGradient><radialGradient id="i" cx="210%" cy="-100%" r="290%"><stop offset=".1" stop-color="#ffe226"/><stop offset=".79" stop-color="#ff7139"/></radialGradient><radialGradient id="j" cx="84%" cy="-41%" r="180%"><stop offset=".11" stop-color="#fff44f"/><stop offset=".46" stop-color="#ff980e"/><stop offset=".72" stop-color="#ff3647"/><stop offset=".9" stop-color="#e31587"/></radialGradient><radialGradient id="k" cx="16.1%" cy="-18.6%" r="348.8%" gradientTransform="matrix(.10453 .46743 -.99452 .04913 -.05 -.26)"><stop offset="0" stop-color="#fff44f"/><stop offset=".3" stop-color="#ff980e"/><stop offset=".57" stop-color="#ff3647"/><stop offset=".74" stop-color="#e31587"/></radialGradient><radialGradient id="l" cx="18.9%" cy="-42.5%" r="238.4%"><stop offset=".14" stop-color="#fff44f"/><stop offset=".48" stop-color="#ff980e"/><stop offset=".66" stop-color="#ff3647"/><stop offset=".9" stop-color="#e31587"/></radialGradient><radialGradient id="m" cx="159.3%" cy="-44.72%" r="313.1%"><stop offset=".09" stop-color="#fff44f"/><stop offset=".63" stop-color="#ff980e"/></radialGradient><linearGradient id="a" x1="87.25%" x2="9.4%" y1="15.5%" y2="93.1%"><stop offset=".05" stop-color="#fff44f"/><stop offset=".37" stop-color="#ff980e"/><stop offset=".53" stop-color="#ff3647"/><stop offset=".7" stop-color="#e31587"/></linearGradient><linearGradient id="n" x1="80%" x2="18%" y1="14%" y2="84%"><stop offset=".17" stop-color="#fff44f" stop-opacity=".8"/><stop offset=".6" stop-color="#fff44f" stop-opacity="0"/></linearGradient><path id="c" d="M47870 16735c-1044-2512-3160-5224-4820-6082 1352 2650 2134 5310 2433 7294 0-6 2 5 4 22l4 26c2268 6147 1032 12398-748 16218-2754 5910-9420 11967-19857 11670-11276-318-21210-8683-23064-19643-338-1728 0-2605 170-4008-207 1080-286 1394-390 3315l-2 123c0 13270 10760 24030 24032 24030 11887 0 21756-8630 23690-19963l110-927c477-4120-53-8453-1560-12075z"/><path id="g" d="M25677 21050c-40 598-2150 2660-2890 2660-6834 0-7943 4133-7943 4133 303 3480 2726 6348 5660 7865 134 70 270 130 405 193a13277 13277 0 00706 289 10674 10674 0 003127 603c11978 562 14300-14320 5655-18640 2213-385 4510 505 5794 1407-2100-3672-6025-6150-10530-6150-285 0-564 24-844 43a12025 12025 0 00-6614 2549c366 310 780 724 1650 1583 1630 1606 5813 3270 5822 3465z"/><path fill="url(#a)" d="M47870 16735c-1044-2512-3160-5224-4820-6082 1352 2650 2134 5310 2433 7294l5 40c-2718-6773-7325-9505-11088-15452l-566-920a7372 7372 0 01-265-497 4370 4370 0 01-359-950 63 63 0 00-55-65 82 82 0 00-45 0l-12 7-17 10 10-14c-6037 3536-8085 10076-8274 13350a12025 12025 0 00-6614 2548 7136 7136 0 00-622-470 11134 11134 0 01-68-5873c-2468 1124-4390 2900-5785 4470h-10c-953-1206-886-5187-832-6018-10-52-710 363-802 425a17507 17507 0 00-2349 2012 21048 21048 0 00-2244 2692l-1 3v-3a20284 20284 0 00-3225 7280l-32 160a39700 39700 0 00-237 1500l-5 52a22907 22907 0 00-390 3316l-1 120c0 13270 10760 24030 24032 24030 11887 0 21756-8630 23690-19963l110-927c477-4120-53-8453-1560-12075zM20170 35545c113 53 220 112 334 164l16 10a12620 12620 0 01-350-174zm5506-14493zm19813-3060l-3-23 4 26z"/><use fill="url(#b)" xlink:href="#c"/><use fill="url(#d)" xlink:href="#c"/><path fill="url(#e)" d="M36192 19560l150 110a13070 13070 0 00-2231-2911C26640 9290 32150 563 33080 120l10-13c-6037 3535-8085 10076-8273 13348 280-20 560-43 844-43 4505 0 8430 2477 10530 6150z"/><use fill="url(#f)" xlink:href="#g"/><use fill="url(#h)" xlink:href="#g"/><path fill="url(#i)" d="M17083 15204a24404 24404 0 01498 330 11134 11134 0 01-67-5874c-2470 1125-4390 2900-5785 4470 115-3 3600-66 5354 1074z"/><path fill="url(#j)" d="M1822 26240c1855 10960 11788 19325 23063 19644 10437 296 17104-5762 19858-11670 1780-3820 3016-10070 748-16218v-2l-4-24c-2-17-4-28-4-22l5 40c853 5566-1980 10958-6405 14604l-13 30c-8625 7023-16878 4237-18550 3097a14410 14410 0 01-350-174c-5028-2403-7105-6984-6660-10913-4245 0-5693-3580-5693-3580s3812-2718 8836-355c4653 2190 9023 355 9023 354-10-195-4192-1860-5822-3465-872-860-1285-1272-1652-1583a7136 7136 0 00-622-470 28293 28293 0 00-498-330c-1753-1140-5240-1076-5355-1073h-10c-953-1207-886-5188-832-6020-10-50-710 363-802 426a17507 17507 0 00-2349 2012 21048 21048 0 00-2244 2692l-1 3v-3a20284 20284 0 00-3225 7280c-10 52-865 3784-444 5720z"/><path fill="url(#k)" d="M34110 16760a13070 13070 0 012231 2910l360 296c5450 5020 2594 12120 2380 12626 4426-3646 7258-9038 6405-14604-2716-6774-7323-9506-11086-15453l-566-920a7372 7372 0 01-265-497 4370 4370 0 01-359-950 63 63 0 00-55-65 82 82 0 00-45 0l-12 7-17 10c-930 443-6440 9170 1030 16640z"/><path fill="url(#l)" d="M36702 19965a4743 4743 0 00-360-295l-150-110c-1283-900-3580-1792-5794-1407 8644 4322 6323 19203-5655 18640a10674 10674 0 01-3127-603 13451 13451 0 01-706-289 9064 9064 0 01-405-193l16 10c1670 1140 9924 3925 18550-3097l13-30c213-506 3068-7606-2380-12626z"/><path fill="url(#m)" d="M14844 27844s1110-4133 7943-4133c740 0 2850-2062 2890-2660s-4370 1836-9023-354c-5024-2363-8836 354-8836 354s1448 3580 5693 3580c-445 3930 1632 8510 6660 10913 113 53 218 112 334 164-2935-1517-5358-4384-5660-7865z"/><path fill="url(#n)" d="M47870 16735c-1044-2512-3160-5224-4820-6082 1352 2650 2134 5310 2433 7294l5 40c-2718-6773-7325-9505-11088-15452l-566-920a7372 7372 0 01-265-497 4370 4370 0 01-359-950 63 63 0 00-55-65 82 82 0 00-45 0l-12 7-17 10 10-14c-6037 3536-8085 10076-8274 13350 280-20 560-43 845-43 4505 0 8430 2477 10530 6148-1284-900-3580-1792-5795-1407 8644 4322 6323 19203-5655 18640a10674 10674 0 01-3127-603 13451 13451 0 01-706-289 9064 9064 0 01-405-193l17 10a14410 14410 0 01-350-174c112 53 218 112 333 164-2935-1517-5358-4384-5660-7865 0 0 1108-4133 7942-4133 740 0 2850-2062 2890-2660-10-195-4190-1860-5822-3465-870-860-1285-1272-1650-1583a7136 7136 0 00-623-470 11134 11134 0 01-67-5873c-2470 1124-4390 2900-5785 4470h-10c-953-1207-886-5187-832-6020-10-50-710 363-802 426a17507 17507 0 00-2349 2012 21048 21048 0 00-2243 2692l-1 3v-3a20284 20284 0 00-3225 7280l-32 160a39787 39787 0 00-277 1515c-2 18 2-17 0 0a27956 27956 0 00-355 3353l-3 122c0 13270 10760 24030 24032 24030 11887 0 21756-8630 23690-19963l110-927c477-4120-53-8453-1560-12075zm-2384 1234l4 26v-2l-4-24z"/></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" viewBox="8.06 -0.07 495.87 512.11"><g transform="translate(.697 .72)scale(.98198)"><linearGradient id="a" x1="470.559" x2="50.986" y1="438.589" y2="33.772" gradientTransform="matrix(.982 0 0 -.982 -1.496 510.756)" gradientUnits="userSpaceOnUse"><stop offset=".048" style="stop-color:#fff44f"/><stop offset=".111" style="stop-color:#ffe847"/><stop offset=".225" style="stop-color:#ffc830"/><stop offset=".368" style="stop-color:#ff980e"/><stop offset=".401" style="stop-color:#ff8b16"/><stop offset=".462" style="stop-color:#ff672a"/><stop offset=".534" style="stop-color:#ff3647"/><stop offset=".705" style="stop-color:#e31587"/></linearGradient><path d="M494.1 174.3c-11-26.4-33.3-55-50.7-64 12.4 24.1 21.1 50 25.6 76.7v.4c-28.6-71.2-77-100-116.6-162.5-2-3.2-4-6.3-6-9.7-1.1-1.9-2-3.6-2.8-5.2-1.6-3.2-2.9-6.5-3.8-10 0-.3-.2-.6-.6-.7h-.5l-.1.1s-.1.1-.2.1l.1-.2c-63.5 37.2-85 106-87 140.4-25.4 1.7-49.6 11.1-69.6 26.8-2.1-1.8-4.3-3.4-6.5-4.9-5.8-20.2-6-41.5-.7-61.8-23.3 11.3-44 27.3-60.8 47h-.1c-10-12.7-9.3-54.6-8.7-63.3q-4.5 1.8-8.4 4.5c-8.8 6.3-17.1 13.4-24.7 21.2-8.7 8.8-16.6 18.3-23.6 28.3-16.2 23-27.8 49-33.9 76.6l-.3 1.7c-.5 2.2-2.2 13.4-2.5 15.8 0 .2 0 .4-.1.6C9.4 243.7 8 255.3 7.5 267v1.3c.2 139.6 113.6 252.5 253.2 252.3 122.8-.2 227.7-88.6 248.6-209.6.4-3.3.8-6.5 1.1-9.8 5.3-43-.3-86.6-16.3-126.9M202.8 372.2c1.2.6 2.3 1.2 3.5 1.7l.2.1c-1.2-.6-2.4-1.2-3.7-1.8m266.3-184.6v-.2z" style="fill:url(#a)"/><radialGradient id="b" cx="-7667.514" cy="9141.38" r="526.888" gradientTransform="matrix(.982 0 0 -.982 7973.807 9034.763)" gradientUnits="userSpaceOnUse"><stop offset=".129" style="stop-color:#ffbd4f"/><stop offset=".186" style="stop-color:#ffac31"/><stop offset=".247" style="stop-color:#ff9d17"/><stop offset=".283" style="stop-color:#ff980e"/><stop offset=".403" style="stop-color:#ff563b"/><stop offset=".467" style="stop-color:#ff3750"/><stop offset=".71" style="stop-color:#f5156c"/><stop offset=".782" style="stop-color:#eb0878"/><stop offset=".86" style="stop-color:#e50080"/></radialGradient><path d="M494.1 174.3c-11-26.4-33.3-55-50.7-64 12.4 24.1 21.1 50 25.6 76.7v.5c19.5 55.7 16.7 116.9-7.9 170.6-29 62.2-99.1 125.9-208.8 122.7-118.5-3.4-223-91.4-242.5-206.6-3.6-18.2 0-27.4 1.8-42.2-2.4 11.5-3.8 23.1-4.1 34.9v1.3c.2 139.6 113.6 252.5 253.2 252.3 122.9-.1 227.7-88.5 248.7-209.5.4-3.3.8-6.5 1.1-9.8 5.2-43-.4-86.6-16.4-126.9" style="fill:url(#b)"/><radialGradient id="c" cx="-7866.73" cy="8922.242" r="526.888" gradientTransform="matrix(.982 0 0 -.982 7973.807 9034.763)" gradientUnits="userSpaceOnUse"><stop offset=".3" style="stop-color:#960e18"/><stop offset=".351" style="stop-color:#b11927;stop-opacity:.74"/><stop offset=".435" style="stop-color:#db293d;stop-opacity:.343"/><stop offset=".497" style="stop-color:#f5334b;stop-opacity:9.400000e-02"/><stop offset=".53" style="stop-color:#ff3750;stop-opacity:0"/></radialGradient><path d="M494.1 174.3c-11-26.4-33.3-55-50.7-64 12.4 24.1 21.1 50 25.6 76.7v.5c19.5 55.7 16.7 116.9-7.9 170.6-29 62.2-99.1 125.9-208.8 122.7-118.5-3.4-223-91.4-242.5-206.6-3.6-18.2 0-27.4 1.8-42.2-2.4 11.5-3.8 23.1-4.1 34.9v1.3c.2 139.6 113.6 252.5 253.2 252.3 122.9-.1 227.7-88.5 248.7-209.5.4-3.3.8-6.5 1.1-9.8 5.2-43-.4-86.6-16.4-126.9" style="fill:url(#c)"/><radialGradient id="d" cx="-7800.325" cy="9260.909" r="381.667" gradientTransform="matrix(.982 0 0 -.982 7973.807 9034.763)" gradientUnits="userSpaceOnUse"><stop offset=".132" style="stop-color:#fff44f"/><stop offset=".252" style="stop-color:#ffdc3e"/><stop offset=".506" style="stop-color:#ff9d12"/><stop offset=".526" style="stop-color:#ff980e"/></radialGradient><path d="M371.3 204c.5.4 1.1.8 1.6 1.2-6.3-11.3-14.3-21.6-23.5-30.6C270.8 96 328.8 4.2 338.5-.5l.1-.1c-63.5 37.2-85 106-87 140.4 2.9-.2 5.9-.4 8.9-.4 45.9 0 88.2 24.7 110.8 64.6" style="fill:url(#d)"/><radialGradient id="e" cx="-7926.495" cy="8782.792" r="250.858" gradientTransform="matrix(.982 0 0 -.982 7973.807 9034.763)" gradientUnits="userSpaceOnUse"><stop offset=".353" style="stop-color:#3a8ee6"/><stop offset=".472" style="stop-color:#5c79f0"/><stop offset=".669" style="stop-color:#9059ff"/><stop offset="1" style="stop-color:#c139e6"/></radialGradient><path d="M260.7 219.7c-.4 6.3-22.6 28-30.4 28-71.9 0-83.5 43.5-83.5 43.5 3.2 36.6 28.7 66.8 59.5 82.7 1.4.7 2.8 1.4 4.3 2 2.5 1.1 4.9 2.1 7.4 3 10.6 3.7 21.7 5.9 32.9 6.3 126 5.9 150.4-150.6 59.5-196.1 21.4-2.8 43.2 2.5 60.9 14.8-22.6-39.9-64.9-64.6-110.7-64.7-3 0-5.9.2-8.9.4-25.4 1.7-49.6 11.1-69.6 26.8 3.9 3.3 8.2 7.6 17.4 16.6 17.1 17.1 61.1 34.6 61.2 36.7" style="fill:url(#e)"/><radialGradient id="f" cx="-7931.817" cy="8971.409" r="133.026" gradientTransform="matrix(.9545 -.2308 -.27 -1.1175 10267.805 8423.169)" gradientUnits="userSpaceOnUse"><stop offset=".206" style="stop-color:#9059ff;stop-opacity:0"/><stop offset=".278" style="stop-color:#8c4ff3;stop-opacity:6.400000e-02"/><stop offset=".747" style="stop-color:#7716a8;stop-opacity:.45"/><stop offset=".975" style="stop-color:#6e008b;stop-opacity:.6"/></radialGradient><path d="M260.7 219.7c-.4 6.3-22.6 28-30.4 28-71.9 0-83.5 43.5-83.5 43.5 3.2 36.6 28.7 66.8 59.5 82.7 1.4.7 2.8 1.4 4.3 2 2.5 1.1 4.9 2.1 7.4 3 10.6 3.7 21.7 5.9 32.9 6.3 126 5.9 150.4-150.6 59.5-196.1 21.4-2.8 43.2 2.5 60.9 14.8-22.6-39.9-64.9-64.6-110.7-64.7-3 0-5.9.2-8.9.4-25.4 1.7-49.6 11.1-69.6 26.8 3.9 3.3 8.2 7.6 17.4 16.6 17.1 17.1 61.1 34.6 61.2 36.7" style="fill:url(#f)"/><radialGradient id="g" cx="-7873.37" cy="9161.301" r="180.498" gradientTransform="matrix(.982 0 0 -.982 7973.807 9034.763)" gradientUnits="userSpaceOnUse"><stop offset="0" style="stop-color:#ffe226"/><stop offset=".121" style="stop-color:#ffdb27"/><stop offset=".295" style="stop-color:#ffc82a"/><stop offset=".502" style="stop-color:#ffa930"/><stop offset=".732" style="stop-color:#ff7e37"/><stop offset=".792" style="stop-color:#ff7139"/></radialGradient><path d="M170.3 158.2c2 1.3 3.7 2.4 5.2 3.5-5.8-20.2-6-41.5-.7-61.8-23.3 11.3-44 27.3-60.8 47 1.2 0 37.9-.7 56.3 11.3" style="fill:url(#g)"/><radialGradient id="h" cx="-7727.279" cy="9280.831" r="770.116" gradientTransform="matrix(.982 0 0 -.982 7973.807 9034.763)" gradientUnits="userSpaceOnUse"><stop offset=".113" style="stop-color:#fff44f"/><stop offset=".456" style="stop-color:#ff980e"/><stop offset=".622" style="stop-color:#ff5634"/><stop offset=".716" style="stop-color:#ff3647"/><stop offset=".904" style="stop-color:#e31587"/></radialGradient><path d="M9.8 274.3c19.5 115.2 124 203.3 242.5 206.6C362 484 432.1 420.3 461.1 358.2c24.5-53.7 27.3-114.8 7.9-170.6v-.4.4c9 58.5-20.8 115.2-67.4 153.6l-.1.3c-90.7 73.9-177.5 44.6-195 32.6-1.2-.6-2.5-1.2-3.7-1.8-52.9-25.3-74.7-73.4-70-114.8-25.6.4-49.1-14.4-59.9-37.7 28.2-17.3 63.4-18.7 92.9-3.7 29.9 13.6 64 14.9 94.9 3.7-.1-2.1-44.1-19.6-61.2-36.5-9.2-9-13.5-13.4-17.4-16.6-2.1-1.8-4.3-3.4-6.5-4.9-1.5-1-3.2-2.1-5.2-3.5-18.4-12-55.1-11.3-56.3-11.3h-.1c-10-12.7-9.3-54.6-8.7-63.3q-4.5 1.8-8.4 4.5c-8.8 6.3-17.1 13.4-24.7 21.2-8.7 8.7-16.6 18.2-23.7 28.3-16.2 23-27.8 49-33.9 76.6-.3.4-9.2 39.7-4.8 60" style="fill:url(#h)"/><radialGradient id="i" cx="-7976.017" cy="9823.985" r="564.057" gradientTransform="matrix(.1031 .9771 .6412 -.06776 -5155.366 8422.637)" gradientUnits="userSpaceOnUse"><stop offset="0" style="stop-color:#fff44f"/><stop offset=".06" style="stop-color:#ffe847"/><stop offset=".168" style="stop-color:#ffc830"/><stop offset=".304" style="stop-color:#ff980e"/><stop offset=".356" style="stop-color:#ff8b16"/><stop offset=".455" style="stop-color:#ff672a"/><stop offset=".57" style="stop-color:#ff3647"/><stop offset=".737" style="stop-color:#e31587"/></radialGradient><path d="M349.4 174.5c9.2 9.1 17.1 19.4 23.5 30.6 1.4 1 2.7 2.1 3.8 3.1C434 261 404 335.7 401.7 341c46.5-38.3 76.3-95 67.3-153.6-28.6-71.3-77.1-100-116.6-162.6-2-3.2-4-6.3-6-9.7-1.1-1.9-2-3.6-2.8-5.2-1.6-3.2-2.9-6.5-3.8-10 0-.3-.2-.6-.6-.7h-.5l-.1.1s-.1.1-.2.1c-9.8 4.6-67.8 96.4 10.8 175z" style="fill:url(#i)"/><radialGradient id="j" cx="-7873.37" cy="9094.897" r="480.72" gradientTransform="matrix(.982 0 0 -.982 7973.807 9034.763)" gradientUnits="userSpaceOnUse"><stop offset=".137" style="stop-color:#fff44f"/><stop offset=".48" style="stop-color:#ff980e"/><stop offset=".592" style="stop-color:#ff5634"/><stop offset=".655" style="stop-color:#ff3647"/><stop offset=".904" style="stop-color:#e31587"/></radialGradient><path d="M376.6 208.3c-1.1-1-2.4-2.1-3.8-3.1-.5-.4-1-.8-1.6-1.2-17.8-12.3-39.5-17.6-60.9-14.8 90.9 45.5 66.5 202-59.5 196.1-11.2-.5-22.3-2.6-32.9-6.3-2.5-.9-4.9-1.9-7.4-3-1.4-.7-2.9-1.3-4.3-2l.2.1c17.6 12 104.3 41.3 195-32.6l.1-.3c2.4-5.4 32.4-80-24.9-132.9" style="fill:url(#j)"/><radialGradient id="k" cx="-7747.201" cy="9068.334" r="526.17" gradientTransform="matrix(.982 0 0 -.982 7973.807 9034.763)" gradientUnits="userSpaceOnUse"><stop offset=".094" style="stop-color:#fff44f"/><stop offset=".231" style="stop-color:#ffe141"/><stop offset=".509" style="stop-color:#ffaf1e"/><stop offset=".626" style="stop-color:#ff980e"/></radialGradient><path d="M146.7 291.1s11.7-43.5 83.5-43.5c7.8 0 30-21.7 30.4-28-30.9 11.2-65 9.9-94.9-3.7-29.5-15-64.7-13.6-92.9 3.7 10.8 23.3 34.2 38 59.9 37.7-4.7 41.3 17.2 89.5 70 114.8 1.2.6 2.3 1.2 3.5 1.7-30.8-15.9-56.3-46.1-59.5-82.7" style="fill:url(#k)"/><linearGradient id="l" x1="465.416" x2="108.463" y1="440.741" y2="83.722" gradientTransform="matrix(.982 0 0 -.982 -1.496 510.756)" gradientUnits="userSpaceOnUse"><stop offset=".167" style="stop-color:#fff44f;stop-opacity:.8"/><stop offset=".266" style="stop-color:#fff44f;stop-opacity:.634"/><stop offset=".489" style="stop-color:#fff44f;stop-opacity:.217"/><stop offset=".6" style="stop-color:#fff44f;stop-opacity:0"/></linearGradient><path d="M494.1 174.3c-11-26.4-33.3-55-50.7-64 12.4 24.1 21.1 50 25.6 76.7v.4c-28.6-71.2-77-100-116.6-162.5-2-3.2-4-6.3-6-9.7-1.1-1.9-2-3.6-2.8-5.2-1.6-3.2-2.9-6.5-3.8-10 0-.3-.2-.6-.6-.7h-.5l-.1.1s-.1.1-.2.1l.1-.2c-63.5 37.2-85 106-87 140.4 2.9-.2 5.9-.4 8.9-.4 45.8.1 88.1 24.8 110.7 64.7-17.8-12.3-39.5-17.6-60.9-14.8 90.9 45.5 66.5 202-59.5 196.1-11.2-.5-22.3-2.6-32.9-6.3-2.5-.9-4.9-1.9-7.4-3-1.4-.7-2.9-1.3-4.3-2l.2.1c-1.2-.6-2.5-1.2-3.7-1.8 1.2.6 2.3 1.2 3.5 1.7-30.9-16-56.3-46.1-59.5-82.7 0 0 11.7-43.5 83.5-43.5 7.8 0 30-21.7 30.4-28-.1-2.1-44.1-19.6-61.2-36.5-9.2-9-13.5-13.4-17.4-16.6-2.1-1.8-4.3-3.4-6.5-4.9-5.8-20.2-6-41.5-.7-61.8-23.3 11.3-44 27.3-60.8 47h.1c-10-12.7-9.3-54.6-8.7-63.3q-4.5 1.8-8.4 4.5c-8.8 6.3-17.1 13.4-24.7 21.2-8.7 8.8-16.6 18.3-23.6 28.3-16.2 23-27.8 49-33.9 76.6l-.3 1.7c-.5 2.2-2.6 13.5-2.9 15.9-2 11.7-3.2 23.4-3.7 35.2v1.3C8 408 121.4 520.9 261 520.7c122.8-.2 227.6-88.6 248.6-209.6.4-3.3.8-6.5 1.1-9.8 5-43-.6-86.7-16.6-127m-25.1 13v.3z" style="fill:url(#l)"/></g></svg>
@@ -1 +1 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1090 1090"><linearGradient id="a" x1="461" x2="461" y1="59" y2="1033" gradientUnits="userSpaceOnUse"><stop offset=".6" stop-color="#ff1b2d"/><stop offset="1" stop-color="#a70014"/></linearGradient><linearGradient id="b" x1="714" x2="714" y1="116" y2="978" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#9c0000"/><stop offset=".7" stop-color="#ff4b4b"/></linearGradient><path fill="url(#a)" d="M545 42.5a502.5 502.5 0 10334.9 877.1 362.4 362.4 0 01-201.4 61.5c-119.7 0-226.8-59.4-299-153-55.6-65.6-91.5-162.5-94-271.3V533c2.5-108.8 38.4-205.8 94-271.3 72-93.6 179.3-153 299-153 73.6 0 142.5 22.5 201.4 61.6a500.8 500.8 0 00-333-127.9h-2z"/><path fill="url(#b)" d="M379.6 261.8c46-54.4 105.7-87.3 170.7-87.3 146.3 0 265 166 265 370.4 0 204.6-118.6 370.4-265 370.4-65 0-124.6-32.8-170.7-87.2 72 93.6 179.2 153 299 153A363 363 0 00880 919.6 501 501 0 001047.5 545a501.1 501.1 0 00-167.6-374.6 362.4 362.4 0 00-201.4-61.5c-119.7 0-226.8 59.4-299 153"/></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" viewBox="0 0 512 512"><g transform="scale(.048)"><linearGradient id="a" x1="112824.305" x2="112824.305" y1="-50348.805" y2="-60686.363" gradientTransform="matrix(.048 0 0 -.048 -971.833 -2242.833)" gradientUnits="userSpaceOnUse"><stop offset=".3" style="stop-color:#ff1b2d"/><stop offset=".438" style="stop-color:#fa1a2c"/><stop offset=".594" style="stop-color:#ed1528"/><stop offset=".758" style="stop-color:#d60e21"/><stop offset=".927" style="stop-color:#b70519"/><stop offset="1" style="stop-color:#a70014"/></linearGradient><path d="M3577.6 8339.2c-589.9-696.5-971.7-1724.8-997.3-2880v-251.7c25.6-1155.2 407.5-2183.5 997.3-2880C4343.5 1334.4 5480.5 704 6749.9 704c780.8 0 1512.5 238.9 2137.6 653.9C7948.8 517.3 6711.5 5.3 5353.6 0h-20.3C2388.3 0 0 2388.3 0 5333.3c0 2860.8 2251.7 5194.7 5079.5 5326.9 84.3 4.3 168.5 6.4 253.9 6.4 1365.3 0 2611.2-513.1 3554.1-1356.8-625.1 413.9-1355.7 652.8-2137.6 652.8-1269.4.1-2406.4-630.3-3172.3-1623.4" style="fill:url(#a)"/><linearGradient id="b" x1="168624.297" x2="168624.297" y1="-63042.582" y2="-72185.563" gradientTransform="matrix(.048 0 0 -.048 -971.833 -2242.833)" gradientUnits="userSpaceOnUse"><stop offset="0" style="stop-color:#9c0000"/><stop offset=".7" style="stop-color:#ff4b4b"/></linearGradient><path d="M3577.6 2327.5c489.6-578.1 1121.1-925.9 1812.3-925.9 1553.1 0 2810.7 1760 2810.7 3931.7S6941.9 9265.1 5389.9 9265.1c-690.1 0-1322.7-348.8-1812.3-925.9 765.9 993.1 1902.9 1623.5 3172.3 1623.5 780.8 0 1512.5-238.9 2137.6-652.8 1092.3-977.1 1779.2-2396.8 1779.2-3976.5s-686.9-2999.5-1779.2-3975.5C8262.4 942.9 7531.7 704 6749.9 704c-1269.4 0-2406.4 630.4-3172.3 1623.5" style="fill:url(#b)"/></g></svg>
@@ -1 +1 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 5120 5120"><linearGradient id="a" x2="0" y2="100%"><stop offset="0" stop-color="#19d7ff"/><stop offset="1" stop-color="#1e64f0"/></linearGradient><g fill="#fff"><rect width="5130" height="5120" rx="1050"/><circle cx="2560" cy="2560" r="2240" fill="url(#a)"/><path fill="red" d="M4090 1020 2370 2370l4e2 4e2z"/><path d="M1020 4090l1350-1720 4e2 4e2z"/></g><path stroke="#fff" stroke-width="30" d="M2560 540v330m0 3370v330m350-4e3-57 325m-586 3318-57 327M3250 662l-113 310M1984 4138l-113 310m339-3878 57 325m586 3318 57 327M1870 662l113 310m1152 3166 113 310M1552 810l166 286m1685 2918 165 286M1265 1010l212 253m2166 2582 212 253M1015 1258l253 212m2582 2168 253 212M813 1548l286 165m2920 1685 286 165M665 1866l310 113m3166 1150 310 113M574 2202l326 58m3320 588 325 57M545 2555h330m3370 0h330M575 2905l325-57m3320-586 325-57M668 3245l310-113m3165-1152 310-113M815 3563l286-165m2920-1685 286-165M1016 3850l253-212m2580-2166 253-212M1262 41e2l212-253m2166-2582 212-253M1552 43e2l166-286m1685-2918 165-286M2384 548l16 180m320 3656 16 180M2038 610l47 174m950 3544 47 174M1708 730l76 163m1550 3326 77 163M1404 904l103 148m2106 3006 103 148M1135 1130l127 127m2596 2596 127 127M910 14e2l148 103m3006 2107 146 1e2M734 1703l163 76m3326 1550 163 77M614 2033l174 47m3544 950 174 47M553 2380l180 16m3656 320 180 16m-4014 0 180-16m3656-320 180-16M614 3077l174-47m3544-950 174-47M734 3407l163-76m3326-1550 163-76M910 3710l148-103m3006-2107 146-1e2M1404 4206l103-148m2105-3006 104-148M1708 4380l77-163M3335 890l77-163M2038 45e2l47-174m950-3544 47-174m-698 3952 16-180m320-3656 16-180"/></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 5120 5120"><linearGradient id="a" x2="0" y2="100%"><stop offset="0" stop-color="#19d7ff"/><stop offset="1" stop-color="#1e64f0"/></linearGradient><g fill="#fff"><rect width="5130" height="5120" rx="1050"/><circle cx="2560" cy="2560" r="2240" fill="url(#a)"/><path fill="red" d="M4090 1020 2370 2370l400 400z"/><path d="m1020 4090 1350-1720 400 400z"/></g><path stroke="#fff" stroke-width="30" d="M2560 540v330m0 3370v330m350-4000-57 325m-586 3318-57 327M3250 662l-113 310M1984 4138l-113 310m339-3878 57 325m586 3318 57 327M1870 662l113 310m1152 3166 113 310M1552 810l166 286m1685 2918 165 286M1265 1010l212 253m2166 2582 212 253M1015 1258l253 212m2582 2168 253 212M813 1548l286 165m2920 1685 286 165M665 1866l310 113m3166 1150 310 113M574 2202l326 58m3320 588 325 57M545 2555h330m3370 0h330M575 2905l325-57m3320-586 325-57M668 3245l310-113m3165-1152 310-113M815 3563l286-165m2920-1685 286-165M1016 3850l253-212m2580-2166 253-212M1262 4100l212-253m2166-2582 212-253M1552 4300l166-286m1685-2918 165-286M2384 548l16 180m320 3656 16 180M2038 610l47 174m950 3544 47 174M1708 730l76 163m1550 3326 77 163M1404 904l103 148m2106 3006 103 148M1135 1130l127 127m2596 2596 127 127M910 1400l148 103m3006 2107 146 100M734 1703l163 76m3326 1550 163 77M614 2033l174 47m3544 950 174 47M553 2380l180 16m3656 320 180 16m-4014 0 180-16m3656-320 180-16M614 3077l174-47m3544-950 174-47M734 3407l163-76m3326-1550 163-76M910 3710l148-103m3006-2107 146-100M1404 4206l103-148m2105-3006 104-148M1708 4380l77-163M3335 890l77-163M2038 4500l47-174m950-3544 47-174m-698 3952 16-180m320-3656 16-180"/></svg>
@@ -0,0 +1,10 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
3
+ <svg width="100%" height="100%" viewBox="0 0 900 900" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
4
+ <g transform="matrix(4.16667,0,0,4.16667,0,0)">
5
+ <path d="M142.139,101.615C146.162,101.615 149.423,98.211 149.423,94.011C149.423,89.81 146.162,86.405 142.139,86.405C138.116,86.405 134.854,89.81 134.854,94.011C134.854,98.211 138.116,101.615 142.139,101.615ZM172.318,96.787C172.318,110.572 163.839,122.289 152.027,126.563L159.17,138.396L148.603,151.398L159.17,164.103L142.127,186.969L130.113,174.154L130.113,125.693C119.429,120.841 111.959,109.724 111.959,96.787C111.959,79.387 125.471,65.28 142.139,65.28C158.807,65.28 172.318,79.387 172.318,96.787Z" style="fill:rgb(231,172,34);"/>
6
+ <path d="M172.412,96.883C172.412,110.502 164.158,122.111 152.587,126.552L159.171,138.396L149.44,151.398L159.171,164.103L142.141,187.158L142.141,101.615C146.163,101.615 149.424,98.21 149.424,94.011C149.424,89.811 146.163,86.406 142.141,86.405L142.141,65.28C158.858,65.28 172.412,79.429 172.412,96.883Z" style="fill:rgb(209,146,42);"/>
7
+ <path d="M120.237,131.433C110.485,123.429 103.941,111.132 103.041,97.162L50.798,97.162C39.841,97.162 30.959,106.175 30.959,117.293L30.959,142.458C30.959,148.017 35.4,152.524 40.878,152.524L110.317,152.524C115.796,152.524 120.237,148.017 120.237,142.458L120.237,131.433Z" style="fill:rgb(3,4,4);"/>
8
+ <path d="M73.16,91.126C70.739,90.668 68.34,90.232 66.05,89.268C57.399,85.644 52.358,78.947 50.73,69.496C49.607,63.028 50.135,56.628 52.755,50.573C56.475,41.971 63.145,37.315 71.905,35.732C77.145,34.792 82.362,34.998 87.403,36.879C94.997,39.7 100.082,45.136 102.437,53.119C104.815,61.17 104.462,69.221 100.875,76.836C97.154,84.796 90.66,89.062 82.449,90.737C81.767,90.874 81.084,91.011 80.402,91.15C78.003,91.126 75.582,91.126 73.16,91.126Z" style="fill:rgb(19,18,18);fill-rule:nonzero;"/>
9
+ </g>
10
+ </svg>
@@ -0,0 +1,32 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 28.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
4
+ viewBox="0 0 216 216" style="enable-background:new 0 0 216 216;" xml:space="preserve">
5
+ <style type="text/css">
6
+ .st0{fill:none;}
7
+ .st1{fill-rule:evenodd;clip-rule:evenodd;fill:#353535;}
8
+ .st2{fill-rule:evenodd;clip-rule:evenodd;}
9
+ .st3{fill:#141313;}
10
+ </style>
11
+ <g id="Layer_1">
12
+ </g>
13
+ <g id="Isolation_Mode">
14
+ <rect class="st0" width="216" height="216"/>
15
+ <g>
16
+ <g>
17
+ <path class="st1" d="M172.32,96.79c0,13.78-8.48,25.5-20.29,29.78l7.14,11.83l-10.57,13l10.57,12.71l-17.04,22.87l-12.01-12.82
18
+ v-25.9v-22.56c-10.68-4.85-18.15-15.97-18.15-28.91c0-17.4,13.51-31.51,30.18-31.51C158.81,65.28,172.32,79.39,172.32,96.79z
19
+ M142.14,101.61c4.02,0,7.28-3.4,7.28-7.6c0-4.2-3.26-7.61-7.28-7.61s-7.28,3.4-7.28,7.61
20
+ C134.85,98.21,138.12,101.61,142.14,101.61z"/>
21
+ <path class="st2" d="M172.41,96.88c0,13.62-8.25,25.23-19.83,29.67l6.58,11.84l-9.73,13l9.73,12.71l-17.03,23.05v-25.9v-32.77
22
+ v-26.87c4.02,0,7.28-3.41,7.28-7.6c0-4.2-3.26-7.61-7.28-7.61V65.28C158.86,65.28,172.41,79.43,172.41,96.88z"/>
23
+ <path class="st2" d="M120.24,131.43c-9.75-8-16.3-20.3-17.2-34.27H50.8c-10.96,0-19.84,9.01-19.84,20.13v25.17
24
+ c0,5.56,4.44,10.07,9.92,10.07h69.44c5.48,0,9.92-4.51,9.92-10.07V131.43z"/>
25
+ <path class="st3" d="M73.16,91.13c-2.42-0.46-4.82-0.89-7.11-1.86C57.4,85.64,52.36,78.95,50.73,69.5
26
+ c-1.12-6.47-0.59-12.87,2.03-18.92c3.72-8.6,10.39-13.26,19.15-14.84c5.24-0.94,10.46-0.73,15.5,1.15
27
+ c7.59,2.82,12.68,8.26,15.03,16.24c2.38,8.05,2.03,16.1-1.56,23.72c-3.72,7.96-10.21,12.23-18.42,13.9
28
+ c-0.68,0.14-1.37,0.27-2.05,0.41C78,91.13,75.58,91.13,73.16,91.13z"/>
29
+ </g>
30
+ </g>
31
+ </g>
32
+ </svg>
@@ -0,0 +1,33 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 28.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
4
+ viewBox="0 0 216 216" style="enable-background:new 0 0 216 216;" xml:space="preserve">
5
+ <style type="text/css">
6
+ .st0{fill:none;}
7
+ .st1{fill-rule:evenodd;clip-rule:evenodd;fill:#E7AC22;}
8
+ .st2{fill-rule:evenodd;clip-rule:evenodd;fill:#CF912A;}
9
+ .st3{fill-rule:evenodd;clip-rule:evenodd;fill:#FFFFFF;}
10
+ .st4{fill:#FFFFFF;}
11
+ </style>
12
+ <g id="Layer_1">
13
+ </g>
14
+ <g id="Isolation_Mode">
15
+ <rect class="st0" width="216" height="216"/>
16
+ <g>
17
+ <g>
18
+ <path class="st1" d="M172.32,96.79c0,13.78-8.48,25.5-20.29,29.78l7.14,11.83l-10.57,13l10.57,12.71l-17.04,22.87l-12.01-12.82
19
+ v-25.9v-22.56c-10.68-4.85-18.15-15.97-18.15-28.91c0-17.4,13.51-31.51,30.18-31.51C158.81,65.28,172.32,79.39,172.32,96.79z
20
+ M142.14,101.61c4.02,0,7.28-3.4,7.28-7.6c0-4.2-3.26-7.61-7.28-7.61s-7.28,3.4-7.28,7.61
21
+ C134.85,98.21,138.12,101.61,142.14,101.61z"/>
22
+ <path class="st2" d="M172.41,96.88c0,13.62-8.25,25.23-19.83,29.67l6.58,11.84l-9.73,13l9.73,12.71l-17.03,23.05v-25.9v-32.77
23
+ v-26.87c4.02,0,7.28-3.41,7.28-7.6c0-4.2-3.26-7.61-7.28-7.61V65.28C158.86,65.28,172.41,79.43,172.41,96.88z"/>
24
+ <path class="st3" d="M120.24,131.43c-9.75-8-16.3-20.3-17.2-34.27H50.8c-10.96,0-19.84,9.01-19.84,20.13v25.17
25
+ c0,5.56,4.44,10.07,9.92,10.07h69.44c5.48,0,9.92-4.51,9.92-10.07V131.43z"/>
26
+ <path class="st4" d="M73.16,91.13c-2.42-0.46-4.82-0.89-7.11-1.86C57.4,85.64,52.36,78.95,50.73,69.5
27
+ c-1.12-6.47-0.59-12.87,2.03-18.92c3.72-8.6,10.39-13.26,19.15-14.84c5.24-0.94,10.46-0.73,15.5,1.15
28
+ c7.59,2.82,12.68,8.26,15.03,16.24c2.38,8.05,2.03,16.1-1.56,23.72c-3.72,7.96-10.21,12.23-18.42,13.9
29
+ c-0.68,0.14-1.37,0.27-2.05,0.41C78,91.13,75.58,91.13,73.16,91.13z"/>
30
+ </g>
31
+ </g>
32
+ </g>
33
+ </svg>
@@ -0,0 +1,32 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 28.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
4
+ viewBox="0 0 216 216" style="enable-background:new 0 0 216 216;" xml:space="preserve">
5
+ <style type="text/css">
6
+ .st0{fill:none;}
7
+ .st1{fill-rule:evenodd;clip-rule:evenodd;fill:#FFFFFF;}
8
+ .st2{fill-rule:evenodd;clip-rule:evenodd;fill:#DAD9D9;}
9
+ .st3{fill:#FFFFFF;}
10
+ </style>
11
+ <g id="Layer_1">
12
+ </g>
13
+ <g id="Isolation_Mode">
14
+ <rect class="st0" width="216" height="216"/>
15
+ <g>
16
+ <g>
17
+ <path class="st1" d="M172.32,96.79c0,13.78-8.48,25.5-20.29,29.78l7.14,11.83l-10.57,13l10.57,12.71l-17.04,22.87l-12.01-12.82
18
+ v-25.9v-22.56c-10.68-4.85-18.15-15.97-18.15-28.91c0-17.4,13.51-31.51,30.18-31.51C158.81,65.28,172.32,79.39,172.32,96.79z
19
+ M142.14,101.61c4.02,0,7.28-3.4,7.28-7.6c0-4.2-3.26-7.61-7.28-7.61s-7.28,3.4-7.28,7.61
20
+ C134.85,98.21,138.12,101.61,142.14,101.61z"/>
21
+ <path class="st2" d="M172.41,96.88c0,13.62-8.25,25.23-19.83,29.67l6.58,11.84l-9.73,13l9.73,12.71l-17.03,23.05v-25.9v-32.77
22
+ v-26.87c4.02,0,7.28-3.41,7.28-7.6c0-4.2-3.26-7.61-7.28-7.61V65.28C158.86,65.28,172.41,79.43,172.41,96.88z"/>
23
+ <path class="st1" d="M120.24,131.43c-9.75-8-16.3-20.3-17.2-34.27H50.8c-10.96,0-19.84,9.01-19.84,20.13v25.17
24
+ c0,5.56,4.44,10.07,9.92,10.07h69.44c5.48,0,9.92-4.51,9.92-10.07V131.43z"/>
25
+ <path class="st3" d="M73.16,91.13c-2.42-0.46-4.82-0.89-7.11-1.86C57.4,85.64,52.36,78.95,50.73,69.5
26
+ c-1.12-6.47-0.59-12.87,2.03-18.92c3.72-8.6,10.39-13.26,19.15-14.84c5.24-0.94,10.46-0.73,15.5,1.15
27
+ c7.59,2.82,12.68,8.26,15.03,16.24c2.38,8.05,2.03,16.1-1.56,23.72c-3.72,7.96-10.21,12.23-18.42,13.9
28
+ c-0.68,0.14-1.37,0.27-2.05,0.41C78,91.13,75.58,91.13,73.16,91.13z"/>
29
+ </g>
30
+ </g>
31
+ </g>
32
+ </svg>
@@ -0,0 +1 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" viewBox="0 0 151 153" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><g><g><g><g><path d="M100.78,0l-51.42,0c-27.26,0 -49.36,22.43 -49.36,50.09l0,52.18c0,27.66 22.1,50.09 49.36,50.09l51.42,0c27.26,0 49.36,-22.43 49.36,-50.09l0,-52.18c0,-27.67 -22.1,-50.09 -49.36,-50.09Z" style="fill-rule:nonzero;"/></g><path d="M127.14,69.76c0,9.8 -6.03,18.13 -14.42,21.17l5.08,8.41l-7.51,9.24l7.51,9.03l-12.12,16.26l-8.54,-9.11l0,-34.45c-7.59,-3.45 -12.91,-11.35 -12.91,-20.55c0,-12.37 9.61,-22.4 21.45,-22.4c11.85,0.01 21.46,10.03 21.46,22.4Zm-21.46,3.44c2.86,0 5.18,-2.42 5.18,-5.41c0,-2.99 -2.32,-5.41 -5.18,-5.41c-2.86,0 -5.18,2.42 -5.18,5.41c0,2.99 2.32,5.41 5.18,5.41Z" style="fill:#fff;"/><path d="M127.2,69.83c0,9.68 -5.87,17.93 -14.09,21.09l4.68,8.42l-6.92,9.24l6.92,9.03l-12.11,16.39l0,-60.81c2.86,0 5.18,-2.42 5.18,-5.41c0,-2.99 -2.32,-5.41 -5.18,-5.41l0,-15c11.89,-0 21.52,10.05 21.52,22.46Z" style="fill:#dad9d9;"/><path d="M90.11,94.39c-6.93,-5.69 -11.58,-14.43 -12.22,-24.36l-37.14,0c-7.79,0 -14.1,6.41 -14.1,14.31l0,17.89c0,3.95 3.16,7.16 7.05,7.16l49.36,0c3.89,0 7.05,-3.2 7.05,-7.16l-0,-7.84Z" style="fill:#fff;"/><path d="M56.65,65.74c-1.72,-0.33 -3.43,-0.64 -5.05,-1.32c-6.15,-2.58 -9.73,-7.34 -10.89,-14.06c-0.8,-4.6 -0.42,-9.15 1.44,-13.45c2.64,-6.11 7.39,-9.43 13.61,-10.55c3.72,-0.67 7.43,-0.52 11.02,0.82c5.4,2.01 9.01,5.87 10.69,11.55c1.69,5.72 1.44,11.45 -1.11,16.86c-2.64,5.66 -7.26,8.69 -13.1,9.88c-0.49,0.1 -0.97,0.2 -1.46,0.29c-1.71,-0.02 -3.43,-0.02 -5.15,-0.02Z" style="fill:#fff;fill-rule:nonzero;"/></g></g></g></svg>
@@ -1,6 +1 @@
1
- <svg xmlns="http://www.w3.org/2000/svg"
2
- aria-label="Android" role="img"
3
- viewBox="0 0 512 512" ><rect
4
- width="512" height="512"
5
- rx="15%"
6
- fill="#fff"/><path d="m338.2 305.7a14.9 14.9 0 1 1 14.9-14.9 14.9 14.9 0 0 1-14.9 14.9m-164.3 0a14.9 14.9 0 1 1 14.9-14.9 14.9 14.9 0 0 1-14.9 14.9m169.6-89.5 29.7-51.5a6.2 6.2 0 1 0-10.7-6.2l-30.1 52.1c-23-10.5-48.8-16.3-76.4-16.3s-53.4 5.9-76.4 16.3l-30.1-52.1a6.2 6.2 0 1 0-10.7 6.2l29.7 51.5c-51 27.7-85.9 79.4-91 140.4h357c-5.1-61-40-112.7-91-140.4" fill="#3ddc84"/></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" viewBox="0.03 112.41 512 287.17"><path d="m447.9 460.9 42.5-73.6c2.4-4.1.9-9.4-3.1-11.8-4.1-2.4-9.4-1-11.7 3.1l-43 74.5c-32.8-15-69.8-23.4-109.5-23.4s-76.7 8.4-109.5 23.4l-43-74.5c-2.4-4.1-7.6-5.5-11.8-3.1-4.1 2.4-5.5 7.6-3.1 11.8l42.5 73.6C124.8 500.6 75.2 574.7 67 661.5h512c-8.2-86.8-57.8-160.9-131.1-200.6M205.4 589.6c-11.9 0-21.5-9.6-21.5-21.5s9.6-21.5 21.5-21.5 21.5 9.6 21.5 21.5c0 11.8-9.6 21.5-21.5 21.5m235.1 0c-11.9 0-21.5-9.6-21.5-21.5s9.6-21.5 21.5-21.5 21.5 9.6 21.5 21.5c0 11.8-9.7 21.5-21.5 21.5" style="fill:#32de84" transform="translate(-66.97 -261.92)"/></svg>
@@ -1,6 +1 @@
1
- <svg xmlns="http://www.w3.org/2000/svg"
2
- aria-label="Apple" role="img"
3
- viewBox="0 0 512 512"><rect
4
- width="512" height="512"
5
- rx="15%"
6
- fill="#555"/><path fill="#f2f2f2" d="M410 334s-10 29-30 59c-5 9-29 43-58 43-21 0-35-15-62-15-33 0-46 15-67 15-11 1-22-5-34-16-77-73-81-181-52-225 18-29 48-47 81-48 26 0 54 17 65 17 8 0 50-20 74-18 33 3 56 15 73 38-49 24-66 117 10 150zM329 56c8 32-27 93-79 90-3-43 34-87 79-90z"/></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" viewBox="47.6 0 416.8 512"><path d="M451.1 174.6c-3 2.3-55.4 31.8-55.4 97.5 0 76 66.7 102.9 68.7 103.5-.3 1.6-10.6 36.8-35.2 72.7-21.9 31.5-44.8 63-79.6 63s-43.8-20.2-84-20.2c-39.2 0-53.1 20.9-84.9 20.9s-54.1-29.2-79.6-65c-29.6-42.1-53.5-107.5-53.5-169.5 0-99.5 64.7-152.3 128.4-152.3 33.8 0 62.1 22.2 83.3 22.2 20.2 0 51.8-23.6 90.3-23.6 14.6 0 67 1.3 101.5 50.8m-119.8-93c15.9-18.9 27.2-45.1 27.2-71.3 0-3.6-.3-7.3-1-10.3-25.9 1-56.7 17.3-75.3 38.8-14.6 16.6-28.2 42.8-28.2 69.4 0 4 .7 8 1 9.3 1.6.3 4.3.7 7 .7 23.2-.1 52.4-15.6 69.3-36.6"/></svg>