From 91861ec9e5fb4c3a26d24e9926362cedd95d4164 Mon Sep 17 00:00:00 2001 From: seraphim <18ycm9tx@anonaddy.me> Date: Sat, 25 Jul 2026 18:30:48 +0700 Subject: new dotfiles: helium; --- .../net.imput.helium/BrowserMetrics-spare.pma | Bin 0 -> 4194304 bytes .../CertificateRevocation/10655/LICENSE | 27 + .../10655/_metadata/verified_contents.json | 1 + .../CertificateRevocation/10655/crl-set | Bin 0 -> 1673999 bytes .../CertificateRevocation/10655/manifest.json | 5 + .../CertificateRevocation/10656/LICENSE | 27 + .../10656/_metadata/verified_contents.json | 1 + .../CertificateRevocation/10656/crl-set | Bin 0 -> 1671668 bytes .../CertificateRevocation/10656/manifest.json | 5 + .../CertificateRevocation/10657/LICENSE | 27 + .../10657/_metadata/verified_contents.json | 1 + .../CertificateRevocation/10657/crl-set | Bin 0 -> 1668821 bytes .../CertificateRevocation/10657/manifest.json | 5 + .../CertificateRevocation/10658/LICENSE | 27 + .../10658/_metadata/verified_contents.json | 1 + .../CertificateRevocation/10658/crl-set | Bin 0 -> 1665916 bytes .../CertificateRevocation/10658/manifest.json | 5 + .../CertificateRevocation/10659/LICENSE | 27 + .../10659/_metadata/verified_contents.json | 1 + .../CertificateRevocation/10659/crl-set | Bin 0 -> 1663581 bytes .../CertificateRevocation/10659/manifest.json | 5 + .../ab208bbd-c222-42b6-84be-c3716e66c149.dmp | Bin 0 -> 122024 bytes .../ab208bbd-c222-42b6-84be-c3716e66c149.meta | Bin 0 -> 32 bytes .../net.imput.helium/Crash Reports/settings.dat | Bin 0 -> 40 bytes .../Default/.org.chromium.Chromium.1F1JI3 | 1 + .../Default/.org.chromium.Chromium.EEq65z | 1 + .../Default/.org.chromium.Chromium.L5b1Sq | 1 + .../Default/.org.chromium.Chromium.UCYqcY | 1 + .../net.imput.helium/Default/Account Web Data | Bin 0 -> 77824 bytes .../Default/Account Web Data-journal | 0 .../net.imput.helium/Default/Affiliation Database | Bin 0 -> 53248 bytes .../Default/Affiliation Database-journal | 0 .../Default/AutofillAiModelCache/LOCK | 0 .../Default/AutofillAiModelCache/LOG | 0 .../Default/AutofillAiModelCache/LOG.old | 0 .../Default/AutofillStrikeDatabase/LOCK | 0 .../Default/AutofillStrikeDatabase/LOG | 0 .../Default/AutofillStrikeDatabase/LOG.old | 0 .../Default/BookmarkMergedSurfaceOrdering | 2 + .../.config/net.imput.helium/Default/Bookmarks | 164 + .../.config/net.imput.helium/Default/Bookmarks.bak | 164 + .../net.imput.helium/Default/BudgetDatabase/LOCK | 0 .../net.imput.helium/Default/BudgetDatabase/LOG | 0 .../Default/BudgetDatabase/LOG.old | 0 .../Default/ClientCertificates/LOCK | 0 .../Default/ClientCertificates/LOG | 0 .../Default/ClientCertificates/LOG.old | 0 .../.config/net.imput.helium/Default/Cookies | Bin 0 -> 262144 bytes .../net.imput.helium/Default/Cookies-journal | 0 .../.config/net.imput.helium/Default/DIPS | Bin 0 -> 49152 bytes .../.config/net.imput.helium/Default/DIPS-wal | Bin 0 -> 4120032 bytes .../fgmjlmbojbkmdpofahffgcpkhkngfpef/rules.fbs | Bin 0 -> 1451 bytes .../fgmjlmbojbkmdpofahffgcpkhkngfpef/rules.json | 1 + .../Default/DawnGraphiteCache/data_0 | Bin 0 -> 8192 bytes .../Default/DawnGraphiteCache/data_1 | Bin 0 -> 270336 bytes .../Default/DawnGraphiteCache/data_2 | Bin 0 -> 8192 bytes .../Default/DawnGraphiteCache/data_3 | Bin 0 -> 8192 bytes .../Default/DawnGraphiteCache/index | Bin 0 -> 262512 bytes .../Default/DawnWebGPUCache/data_0 | Bin 0 -> 8192 bytes .../Default/DawnWebGPUCache/data_1 | Bin 0 -> 270336 bytes .../Default/DawnWebGPUCache/data_2 | Bin 0 -> 8192 bytes .../Default/DawnWebGPUCache/data_3 | Bin 0 -> 8192 bytes .../net.imput.helium/Default/DawnWebGPUCache/index | Bin 0 -> 262512 bytes .../net.imput.helium/Default/Extension Cookies | Bin 0 -> 20480 bytes .../Default/Extension Cookies-journal | 0 .../Default/Extension Rules/000003.log | Bin 0 -> 1406 bytes .../Default/Extension Rules/CURRENT | 1 + .../net.imput.helium/Default/Extension Rules/LOCK | 0 .../net.imput.helium/Default/Extension Rules/LOG | 3 + .../Default/Extension Rules/LOG.old | 3 + .../Default/Extension Rules/MANIFEST-000001 | Bin 0 -> 41 bytes .../Default/Extension Scripts/000003.log | Bin 0 -> 703 bytes .../Default/Extension Scripts/CURRENT | 1 + .../Default/Extension Scripts/LOCK | 0 .../net.imput.helium/Default/Extension Scripts/LOG | 3 + .../Default/Extension Scripts/LOG.old | 3 + .../Default/Extension Scripts/MANIFEST-000001 | Bin 0 -> 41 bytes .../Default/Extension State/000005.ldb | Bin 0 -> 3989323 bytes .../Default/Extension State/000020.ldb | Bin 0 -> 11534 bytes .../Default/Extension State/000023.ldb | Bin 0 -> 1008731 bytes .../Default/Extension State/000026.ldb | Bin 0 -> 2643427 bytes .../Default/Extension State/000028.log | Bin 0 -> 1628637 bytes .../Default/Extension State/000029.ldb | Bin 0 -> 1843293 bytes .../Default/Extension State/CURRENT | 1 + .../net.imput.helium/Default/Extension State/LOCK | 0 .../net.imput.helium/Default/Extension State/LOG | 3 + .../Default/Extension State/LOG.old | 6 + .../Default/Extension State/MANIFEST-000001 | Bin 0 -> 1372 bytes .../0.7.2_0/@types/index.d.ts | 5 + .../0.7.2_0/_metadata/verified_contents.json | 1 + .../0.7.2_0/background.html | 2 + .../0.7.2_0/background.mjs | 76 + .../0.7.2_0/donation.css | 51 + .../0.7.2_0/iconfont/MaterialIconsOutlined.woff2 | Bin 0 -> 223384 bytes .../0.7.2_0/iconfont/material-icons.css | 23 + .../0.7.2_0/images/bmc-logo.svg | 6 + .../0.7.2_0/images/icon128.png | Bin 0 -> 8277 bytes .../0.7.2_0/images/icon16.png | Bin 0 -> 737 bytes .../0.7.2_0/images/icon32.png | Bin 0 -> 1665 bytes .../0.7.2_0/images/icon48.png | Bin 0 -> 2738 bytes .../0.7.2_0/images/paypal-logo.svg | 18 + .../0.7.2_0/manifest.json | 30 + .../0.7.2_0/modules/cookie_format.mjs | 49 + .../0.7.2_0/modules/get_all_cookies.mjs | 35 + .../0.7.2_0/modules/save_to_file.mjs | 30 + .../0.7.2_0/popup-options.css | 17 + .../0.7.2_0/popup.css | 116 + .../0.7.2_0/popup.dark.css | 30 + .../0.7.2_0/popup.html | 107 + .../0.7.2_0/popup.mjs | 138 + .../0.7.2_0/table-nowrap.js | 14 + .../2.4.2_0/_metadata/verified_contents.json | 1 + .../2.4.2_0/background_scripts/all_commands.js | 619 + .../2.4.2_0/background_scripts/bg_utils.js | 19 + .../2.4.2_0/background_scripts/commands.js | 501 + .../background_scripts/completion/completers.js | 811 + .../background_scripts/completion/ranking.js | 165 + .../completion/search_engines.js | 266 + .../completion/search_wrapper.js | 171 + .../2.4.2_0/background_scripts/exclusions.js | 78 + .../2.4.2_0/background_scripts/main.js | 933 + .../2.4.2_0/background_scripts/marks.js | 131 + .../2.4.2_0/background_scripts/tab_operations.js | 118 + .../2.4.2_0/background_scripts/tab_recency.js | 139 + .../background_scripts/user_search_engines.js | 53 + .../2.4.2_0/content_scripts/file_urls.css | 6 + .../2.4.2_0/content_scripts/hud.js | 278 + .../2.4.2_0/content_scripts/link_hints.js | 1559 ++ .../2.4.2_0/content_scripts/marks.js | 138 + .../2.4.2_0/content_scripts/mode.js | 327 + .../2.4.2_0/content_scripts/mode_find.js | 511 + .../2.4.2_0/content_scripts/mode_insert.js | 142 + .../2.4.2_0/content_scripts/mode_key_handler.js | 149 + .../2.4.2_0/content_scripts/mode_normal.js | 553 + .../2.4.2_0/content_scripts/mode_visual.js | 615 + .../2.4.2_0/content_scripts/scroller.js | 470 + .../2.4.2_0/content_scripts/ui_component.js | 209 + .../2.4.2_0/content_scripts/vimium.css | 282 + .../2.4.2_0/content_scripts/vimium_frontend.js | 505 + .../2.4.2_0/content_scripts/vomnibar.js | 87 + .../2.4.2_0/icons/action_disabled.svg | 1 + .../2.4.2_0/icons/action_disabled_16.png | Bin 0 -> 524 bytes .../2.4.2_0/icons/action_disabled_32.png | Bin 0 -> 1032 bytes .../2.4.2_0/icons/action_enabled.svg | 1 + .../2.4.2_0/icons/action_enabled_16.png | Bin 0 -> 422 bytes .../2.4.2_0/icons/action_enabled_32.png | Bin 0 -> 779 bytes .../2.4.2_0/icons/action_partial.svg | 1 + .../2.4.2_0/icons/action_partial_16.png | Bin 0 -> 436 bytes .../2.4.2_0/icons/action_partial_32.png | Bin 0 -> 819 bytes .../2.4.2_0/icons/icon.svg | 1 + .../2.4.2_0/icons/icon128.png | Bin 0 -> 10315 bytes .../2.4.2_0/icons/icon16.png | Bin 0 -> 885 bytes .../2.4.2_0/icons/icon48.png | Bin 0 -> 3451 bytes .../2.4.2_0/lib/chrome_api_stubs.js | 83 + .../2.4.2_0/lib/dom_utils.js | 570 + .../2.4.2_0/lib/find_mode_history.js | 64 + .../2.4.2_0/lib/handler_stack.js | 172 + .../2.4.2_0/lib/keyboard_utils.js | 154 + .../2.4.2_0/lib/rect.js | 113 + .../2.4.2_0/lib/settings.js | 275 + .../2.4.2_0/lib/types.js | 14 + .../2.4.2_0/lib/url_utils.js | 135 + .../2.4.2_0/lib/utils.js | 413 + .../2.4.2_0/manifest.json | 49 + .../2.4.2_0/pages/action.css | 60 + .../2.4.2_0/pages/action.html | 101 + .../2.4.2_0/pages/action.js | 168 + .../2.4.2_0/pages/all_content_scripts.js | 27 + .../2.4.2_0/pages/command_listing.css | 117 + .../2.4.2_0/pages/command_listing.html | 61 + .../2.4.2_0/pages/command_listing.js | 85 + .../2.4.2_0/pages/doc.css | 16 + .../2.4.2_0/pages/doc_search_completion.html | 59 + .../2.4.2_0/pages/doc_search_completion.js | 53 + .../2.4.2_0/pages/exclusion_rules_editor.js | 69 + .../2.4.2_0/pages/help_dialog_page.css | 169 + .../2.4.2_0/pages/help_dialog_page.html | 109 + .../2.4.2_0/pages/help_dialog_page.js | 217 + .../2.4.2_0/pages/hud_page.css | 72 + .../2.4.2_0/pages/hud_page.html | 18 + .../2.4.2_0/pages/hud_page.js | 236 + .../2.4.2_0/pages/key_mappings.css | 52 + .../2.4.2_0/pages/options.css | 439 + .../2.4.2_0/pages/options.html | 282 + .../2.4.2_0/pages/options.js | 372 + .../2.4.2_0/pages/ui_component_messenger.js | 71 + .../2.4.2_0/pages/vomnibar_page.css | 194 + .../2.4.2_0/pages/vomnibar_page.html | 19 + .../2.4.2_0/pages/vomnibar_page.js | 476 + .../2.4.2_0/resources/tlds.txt | 1591 ++ .../3.0.8_0/README.md | 16 + .../3.0.8_0/_locales/de/messages.json | 21 + .../3.0.8_0/_locales/en/messages.json | 21 + .../_metadata/generated_indexed_rulesets/_ruleset1 | Bin 0 -> 883 bytes .../3.0.8_0/_metadata/verified_contents.json | 1 + .../3.0.8_0/background/healthcheck.js | 19 + .../3.0.8_0/background/main.js | 215 + .../3.0.8_0/background/settings.js | 76 + .../3.0.8_0/css/content.css | 3 + .../3.0.8_0/icons/sp_icon_128.png | Bin 0 -> 2536 bytes .../3.0.8_0/icons/sp_icon_16.png | Bin 0 -> 496 bytes .../3.0.8_0/icons/sp_icon_48.png | Bin 0 -> 1144 bytes .../3.0.8_0/js/content.js | 227 + .../3.0.8_0/manifest.json | 53 + .../3.0.8_0/rules_1.json | 18 + .../3.0.8_0/service_worker.js | 5 + .../1.0.3_0/_metadata/verified_contents.json | 1 + .../1.0.3_0/content-scripts/initialize.js | 415 + .../1.0.3_0/images/logo.png | Bin 0 -> 1410 bytes .../1.0.3_0/images/logo128.png | Bin 0 -> 1961 bytes .../1.0.3_0/images/logo16.png | Bin 0 -> 407 bytes .../1.0.3_0/images/logo48.png | Bin 0 -> 906 bytes .../1.0.3_0/images/slider-steps.svg | 9 + .../1.0.3_0/manifest.json | 23 + .../1.0.3_0/popups/main/main.css | 870 + .../1.0.3_0/popups/main/main.html | 625 + .../1.0.3_0/popups/main/main.js | 2049 ++ .../1.10.3_0/_locales/bg/messages.json | 1481 + .../1.10.3_0/_locales/ca/messages.json | 1481 + .../1.10.3_0/_locales/cs/messages.json | 1429 + .../1.10.3_0/_locales/da/messages.json | 1481 + .../1.10.3_0/_locales/de/messages.json | 1481 + .../1.10.3_0/_locales/el/messages.json | 1481 + .../1.10.3_0/_locales/en/messages.json | 1481 + .../1.10.3_0/_locales/en_GB/messages.json | 1481 + .../1.10.3_0/_locales/es/messages.json | 1481 + .../1.10.3_0/_locales/et/messages.json | 1301 + .../1.10.3_0/_locales/fi/messages.json | 1481 + .../1.10.3_0/_locales/fr/messages.json | 1481 + .../1.10.3_0/_locales/he/messages.json | 1481 + .../1.10.3_0/_locales/hu/messages.json | 1481 + .../1.10.3_0/_locales/id/messages.json | 1481 + .../1.10.3_0/_locales/it/messages.json | 1481 + .../1.10.3_0/_locales/ja/messages.json | 1481 + .../1.10.3_0/_locales/ko/messages.json | 1481 + .../1.10.3_0/_locales/la/messages.json | 1210 + .../1.10.3_0/_locales/lt/messages.json | 1481 + .../1.10.3_0/_locales/my/messages.json | 1381 + .../1.10.3_0/_locales/nb/messages.json | 1481 + .../1.10.3_0/_locales/nl/messages.json | 1481 + .../1.10.3_0/_locales/pl/messages.json | 1481 + .../1.10.3_0/_locales/pt/messages.json | 1353 + .../1.10.3_0/_locales/pt_BR/messages.json | 1481 + .../1.10.3_0/_locales/pt_PT/messages.json | 1481 + .../1.10.3_0/_locales/ro/messages.json | 1481 + .../1.10.3_0/_locales/ru/messages.json | 1481 + .../1.10.3_0/_locales/sl/messages.json | 1381 + .../1.10.3_0/_locales/sv/messages.json | 1481 + .../1.10.3_0/_locales/tr/messages.json | 1481 + .../1.10.3_0/_locales/uk/messages.json | 1481 + .../1.10.3_0/_locales/vi/messages.json | 1481 + .../1.10.3_0/_locales/zh_CN/messages.json | 1481 + .../1.10.3_0/_locales/zh_TW/messages.json | 1481 + .../1.10.3_0/_metadata/verified_contents.json | 1 + .../1.10.3_0/background/background_service.js | 22 + .../1.10.3_0/background/browserAction.js | 103 + .../1.10.3_0/background/client.js | 464 + .../1.10.3_0/background/event.js | 309 + .../1.10.3_0/background/httpauth.js | 107 + .../1.10.3_0/background/init.js | 130 + .../1.10.3_0/background/keepass.js | 1055 + .../1.10.3_0/background/nacl-util.min.js | 1 + .../1.10.3_0/background/nacl.min.js | 1 + .../1.10.3_0/background/offscreen.js | 31 + .../1.10.3_0/background/page.js | 478 + .../1.10.3_0/background/tabs.js | 216 + .../1.10.3_0/bootstrap/bootstrap.min.css | 5 + .../1.10.3_0/bootstrap/bootstrap.min.js | 6 + .../1.10.3_0/common/browser-polyfill.min.js | 8 + .../1.10.3_0/common/global.js | 230 + .../1.10.3_0/common/global_ui.js | 29 + .../1.10.3_0/common/sites.js | 303 + .../1.10.3_0/common/translate.js | 34 + .../1.10.3_0/content/autocomplete.js | 408 + .../1.10.3_0/content/banner.js | 476 + .../1.10.3_0/content/credential-autocomplete.js | 49 + .../1.10.3_0/content/custom-fields-banner.js | 827 + .../1.10.3_0/content/fields.js | 679 + .../1.10.3_0/content/fill.js | 500 + .../1.10.3_0/content/form.js | 297 + .../1.10.3_0/content/icon-handler.js | 249 + .../1.10.3_0/content/icon.js | 67 + .../1.10.3_0/content/keepassxc-browser.js | 1024 + .../1.10.3_0/content/observer-helper.js | 408 + .../1.10.3_0/content/passkeys-inject.js | 127 + .../1.10.3_0/content/passkeys-utils.js | 140 + .../1.10.3_0/content/passkeys.js | 250 + .../1.10.3_0/content/pwgen.js | 163 + .../1.10.3_0/content/totp-autocomplete.js | 40 + .../1.10.3_0/content/totp-field.js | 192 + .../1.10.3_0/content/ui.js | 357 + .../1.10.3_0/content/username-field.js | 167 + .../1.10.3_0/css/autocomplete.css | 172 + .../1.10.3_0/css/banner.css | 230 + .../1.10.3_0/css/button.css | 58 + .../1.10.3_0/css/colors.css | 116 + .../1.10.3_0/css/define.css | 61 + .../1.10.3_0/css/notification.css | 82 + .../1.10.3_0/css/pwgen.css | 21 + .../1.10.3_0/css/totp.css | 21 + .../1.10.3_0/css/username.css | 51 + .../1.10.3_0/fonts/fork-awesome.min.css | 12 + .../1.10.3_0/fonts/forkawesome-webfont.woff2 | Bin 0 -> 91624 bytes .../1.10.3_0/icons/custom_login_fields.svg | 17 + .../1.10.3_0/icons/disconnected.svg | 1 + .../1.10.3_0/icons/help.svg | 1 + .../1.10.3_0/icons/keepassxc-dark_128x128.png | Bin 0 -> 8558 bytes .../1.10.3_0/icons/keepassxc-dark_16x16.png | Bin 0 -> 821 bytes .../1.10.3_0/icons/keepassxc-dark_18x18.png | Bin 0 -> 966 bytes .../1.10.3_0/icons/keepassxc-dark_19x19.png | Bin 0 -> 1052 bytes .../1.10.3_0/icons/keepassxc-dark_32x32.png | Bin 0 -> 1986 bytes .../1.10.3_0/icons/keepassxc-dark_36x36.png | Bin 0 -> 2216 bytes .../1.10.3_0/icons/keepassxc-dark_38x38.png | Bin 0 -> 2337 bytes .../1.10.3_0/icons/keepassxc-dark_48x48.png | Bin 0 -> 2993 bytes .../1.10.3_0/icons/keepassxc-dark_64x64.png | Bin 0 -> 4032 bytes .../1.10.3_0/icons/keepassxc.svg | 113 + .../1.10.3_0/icons/keepassxc_128x128.png | Bin 0 -> 10288 bytes .../1.10.3_0/icons/keepassxc_16x16.png | Bin 0 -> 830 bytes .../1.10.3_0/icons/keepassxc_18x18.png | Bin 0 -> 926 bytes .../1.10.3_0/icons/keepassxc_19x19.png | Bin 0 -> 1047 bytes .../1.10.3_0/icons/keepassxc_32x32.png | Bin 0 -> 1946 bytes .../1.10.3_0/icons/keepassxc_36x36.png | Bin 0 -> 2087 bytes .../1.10.3_0/icons/keepassxc_38x38.png | Bin 0 -> 2640 bytes .../1.10.3_0/icons/keepassxc_48x48.png | Bin 0 -> 3088 bytes .../1.10.3_0/icons/keepassxc_64x64.png | Bin 0 -> 4477 bytes .../1.10.3_0/icons/keepassxc_96x96.png | Bin 0 -> 8065 bytes .../1.10.3_0/icons/key.svg | 1 + .../1.10.3_0/icons/locked.svg | 1 + .../1.10.3_0/icons/otp.svg | 1 + .../1.10.3_0/icons/toolbar/colored/icon_bang.png | Bin 0 -> 4697 bytes .../1.10.3_0/icons/toolbar/colored/icon_bang.svg | 1 + .../1.10.3_0/icons/toolbar/colored/icon_cross.png | Bin 0 -> 4512 bytes .../1.10.3_0/icons/toolbar/colored/icon_cross.svg | 1 + .../1.10.3_0/icons/toolbar/colored/icon_dark.png | Bin 0 -> 4548 bytes .../1.10.3_0/icons/toolbar/colored/icon_dark.svg | 1 + .../1.10.3_0/icons/toolbar/colored/icon_locked.png | Bin 0 -> 4720 bytes .../1.10.3_0/icons/toolbar/colored/icon_locked.svg | 1 + .../icons/toolbar/colored/icon_new_bang.png | Bin 0 -> 5378 bytes .../icons/toolbar/colored/icon_new_bang.svg | 1 + .../icons/toolbar/colored/icon_new_cross.png | Bin 0 -> 5161 bytes .../icons/toolbar/colored/icon_new_cross.svg | 1 + .../icons/toolbar/colored/icon_new_locked.png | Bin 0 -> 5389 bytes .../icons/toolbar/colored/icon_new_locked.svg | 1 + .../icons/toolbar/colored/icon_new_normal.png | Bin 0 -> 5381 bytes .../icons/toolbar/colored/icon_new_normal.svg | 1 + .../1.10.3_0/icons/toolbar/colored/icon_normal.png | Bin 0 -> 4652 bytes .../1.10.3_0/icons/toolbar/colored/icon_normal.svg | 1 + .../1.10.3_0/icons/toolbar/dark/icon_bang.png | Bin 0 -> 2891 bytes .../1.10.3_0/icons/toolbar/dark/icon_bang.svg | 1 + .../1.10.3_0/icons/toolbar/dark/icon_cross.png | Bin 0 -> 3071 bytes .../1.10.3_0/icons/toolbar/dark/icon_cross.svg | 1 + .../1.10.3_0/icons/toolbar/dark/icon_dark.png | Bin 0 -> 2644 bytes .../1.10.3_0/icons/toolbar/dark/icon_dark.svg | 1 + .../1.10.3_0/icons/toolbar/dark/icon_locked.png | Bin 0 -> 3108 bytes .../1.10.3_0/icons/toolbar/dark/icon_locked.svg | 1 + .../1.10.3_0/icons/toolbar/dark/icon_new_bang.png | Bin 0 -> 3794 bytes .../1.10.3_0/icons/toolbar/dark/icon_new_bang.svg | 1 + .../1.10.3_0/icons/toolbar/dark/icon_new_cross.png | Bin 0 -> 3980 bytes .../1.10.3_0/icons/toolbar/dark/icon_new_cross.svg | 1 + .../icons/toolbar/dark/icon_new_locked.png | Bin 0 -> 4007 bytes .../icons/toolbar/dark/icon_new_locked.svg | 1 + .../icons/toolbar/dark/icon_new_normal.png | Bin 0 -> 3467 bytes .../icons/toolbar/dark/icon_new_normal.svg | 1 + .../1.10.3_0/icons/toolbar/dark/icon_normal.png | Bin 0 -> 2541 bytes .../1.10.3_0/icons/toolbar/dark/icon_normal.svg | 1 + .../1.10.3_0/icons/toolbar/light/icon_bang.png | Bin 0 -> 3693 bytes .../1.10.3_0/icons/toolbar/light/icon_bang.svg | 1 + .../1.10.3_0/icons/toolbar/light/icon_cross.png | Bin 0 -> 3950 bytes .../1.10.3_0/icons/toolbar/light/icon_cross.svg | 1 + .../1.10.3_0/icons/toolbar/light/icon_dark.png | Bin 0 -> 3701 bytes .../1.10.3_0/icons/toolbar/light/icon_dark.svg | 1 + .../1.10.3_0/icons/toolbar/light/icon_locked.png | Bin 0 -> 3874 bytes .../1.10.3_0/icons/toolbar/light/icon_locked.svg | 1 + .../1.10.3_0/icons/toolbar/light/icon_new_bang.png | Bin 0 -> 4462 bytes .../1.10.3_0/icons/toolbar/light/icon_new_bang.svg | 1 + .../icons/toolbar/light/icon_new_cross.png | Bin 0 -> 4706 bytes .../icons/toolbar/light/icon_new_cross.svg | 1 + .../icons/toolbar/light/icon_new_locked.png | Bin 0 -> 4625 bytes .../icons/toolbar/light/icon_new_locked.svg | 1 + .../icons/toolbar/light/icon_new_normal.png | Bin 0 -> 4304 bytes .../icons/toolbar/light/icon_new_normal.svg | 1 + .../1.10.3_0/icons/toolbar/light/icon_normal.png | Bin 0 -> 3540 bytes .../1.10.3_0/icons/toolbar/light/icon_normal.svg | 1 + .../1.10.3_0/managed_storage.json | 216 + .../1.10.3_0/manifest.json | 116 + .../1.10.3_0/offscreen/offscreen.html | 7 + .../1.10.3_0/offscreen/offscreen.js | 9 + .../1.10.3_0/options/getting_started.css | 19 + .../1.10.3_0/options/getting_started.html | 114 + .../1.10.3_0/options/getting_started.js | 61 + .../1.10.3_0/options/http-auth-dialog.png | Bin 0 -> 17539 bytes .../1.10.3_0/options/options.css | 307 + .../1.10.3_0/options/options.html | 1138 + .../1.10.3_0/options/options.js | 1008 + .../1.10.3_0/options/shortcuts.css | 74 + .../1.10.3_0/options/shortcuts.html | 82 + .../1.10.3_0/options/shortcuts.js | 199 + .../1.10.3_0/popups/popup.css | 216 + .../1.10.3_0/popups/popup.html | 147 + .../1.10.3_0/popups/popup.js | 167 + .../1.10.3_0/popups/popup_functions.js | 64 + .../1.10.3_0/popups/popup_httpauth.html | 65 + .../1.10.3_0/popups/popup_httpauth.js | 54 + .../1.10.3_0/popups/popup_login.html | 63 + .../1.10.3_0/popups/popup_login.js | 80 + .../1.4.4_0/LICENSE.txt | 675 + .../1.4.4_0/_locales/am/messages.json | 734 + .../1.4.4_0/_locales/ar/messages.json | 734 + .../1.4.4_0/_locales/bg/messages.json | 734 + .../1.4.4_0/_locales/bn/messages.json | 734 + .../1.4.4_0/_locales/ca/messages.json | 734 + .../1.4.4_0/_locales/cs/messages.json | 734 + .../1.4.4_0/_locales/da/messages.json | 734 + .../1.4.4_0/_locales/de/messages.json | 734 + .../1.4.4_0/_locales/el/messages.json | 734 + .../1.4.4_0/_locales/en/messages.json | 734 + .../1.4.4_0/_locales/eo/messages.json | 734 + .../1.4.4_0/_locales/es/messages.json | 734 + .../1.4.4_0/_locales/et/messages.json | 734 + .../1.4.4_0/_locales/fa/messages.json | 734 + .../1.4.4_0/_locales/fi/messages.json | 734 + .../1.4.4_0/_locales/fil/messages.json | 734 + .../1.4.4_0/_locales/fr/messages.json | 734 + .../1.4.4_0/_locales/gu/messages.json | 734 + .../1.4.4_0/_locales/he/messages.json | 734 + .../1.4.4_0/_locales/hi/messages.json | 734 + .../1.4.4_0/_locales/hr/messages.json | 734 + .../1.4.4_0/_locales/hu/messages.json | 734 + .../1.4.4_0/_locales/id/messages.json | 734 + .../1.4.4_0/_locales/it/messages.json | 734 + .../1.4.4_0/_locales/ja/messages.json | 734 + .../1.4.4_0/_locales/kn/messages.json | 734 + .../1.4.4_0/_locales/ko/messages.json | 734 + .../1.4.4_0/_locales/lt/messages.json | 734 + .../1.4.4_0/_locales/lv/messages.json | 734 + .../1.4.4_0/_locales/ml/messages.json | 734 + .../1.4.4_0/_locales/mr/messages.json | 734 + .../1.4.4_0/_locales/ms/messages.json | 734 + .../1.4.4_0/_locales/nb/messages.json | 734 + .../1.4.4_0/_locales/nl/messages.json | 734 + .../1.4.4_0/_locales/no/messages.json | 734 + .../1.4.4_0/_locales/pl/messages.json | 734 + .../1.4.4_0/_locales/pt_BR/messages.json | 734 + .../1.4.4_0/_locales/pt_PT/messages.json | 734 + .../1.4.4_0/_locales/ro/messages.json | 734 + .../1.4.4_0/_locales/ru/messages.json | 734 + .../1.4.4_0/_locales/sk/messages.json | 734 + .../1.4.4_0/_locales/sl/messages.json | 734 + .../1.4.4_0/_locales/sr/messages.json | 734 + .../1.4.4_0/_locales/sv/messages.json | 734 + .../1.4.4_0/_locales/sw/messages.json | 734 + .../1.4.4_0/_locales/ta/messages.json | 734 + .../1.4.4_0/_locales/te/messages.json | 734 + .../1.4.4_0/_locales/th/messages.json | 734 + .../1.4.4_0/_locales/tr/messages.json | 734 + .../1.4.4_0/_locales/uk/messages.json | 734 + .../1.4.4_0/_locales/vi/messages.json | 734 + .../1.4.4_0/_locales/zh_CN/messages.json | 734 + .../1.4.4_0/_locales/zh_TW/messages.json | 734 + .../1.4.4_0/_metadata/verified_contents.json | 1 + .../1.4.4_0/about.html | 66 + .../1.4.4_0/asset-viewer.html | 21 + .../1.4.4_0/assets/assets.json | 59 + .../mirror1.malwaredomains.com/files/README.md | 3 + .../mirror1.malwaredomains.com/files/justdomains | 26858 +++++++++++++++++++ .../assets/thirdparties/pgl.yoyo.org/as/README.md | 29 + .../assets/thirdparties/pgl.yoyo.org/as/serverlist | 3583 +++ .../publicsuffix.org/list/effective_tld_names.dat | 13556 ++++++++++ .../someonewhocares.org/hosts/hosts.txt | 14964 +++++++++++ .../thirdparties/winhelp2002.mvps.org/hosts.txt | 10066 +++++++ .../www.malwaredomainlist.com/hostslist/README.md | 3 + .../www.malwaredomainlist.com/hostslist/hosts.txt | 1110 + .../1.4.4_0/assets/umatrix/recipes_en.txt | 335 + .../1.4.4_0/background.html | 38 + .../1.4.4_0/cloud-ui.html | 21 + .../1.4.4_0/css/cloud-ui.css | 89 + .../1.4.4_0/css/codemirror.css | 28 + .../1.4.4_0/css/common.css | 113 + .../1.4.4_0/css/dashboard-common.css | 81 + .../1.4.4_0/css/dashboard.css | 63 + .../1.4.4_0/css/fa-icons.css | 106 + .../1.4.4_0/css/fonts/Roboto_Condensed/LICENSE.txt | 202 + .../Roboto_Condensed/RobotoCondensed-Light.ttf | Bin 0 -> 141384 bytes .../Roboto_Condensed/RobotoCondensed-Regular.ttf | Bin 0 -> 140396 bytes .../1.4.4_0/css/hosts-files.css | 165 + .../1.4.4_0/css/logger-ui.css | 425 + .../1.4.4_0/css/main-blocked.css | 116 + .../1.4.4_0/css/popup.css | 649 + .../1.4.4_0/css/raw-settings.css | 20 + .../1.4.4_0/css/scope-selector.css | 84 + .../1.4.4_0/css/user-rules.css | 85 + .../1.4.4_0/dashboard.html | 32 + .../1.4.4_0/hosts-files.html | 78 + .../1.4.4_0/img/browsericons/icon19-0.png | Bin 0 -> 817 bytes .../1.4.4_0/img/browsericons/icon19-1.png | Bin 0 -> 830 bytes .../1.4.4_0/img/browsericons/icon19-10.png | Bin 0 -> 840 bytes .../1.4.4_0/img/browsericons/icon19-11.png | Bin 0 -> 814 bytes .../1.4.4_0/img/browsericons/icon19-12.png | Bin 0 -> 829 bytes .../1.4.4_0/img/browsericons/icon19-13.png | Bin 0 -> 825 bytes .../1.4.4_0/img/browsericons/icon19-14.png | Bin 0 -> 808 bytes .../1.4.4_0/img/browsericons/icon19-15.png | Bin 0 -> 822 bytes .../1.4.4_0/img/browsericons/icon19-16.png | Bin 0 -> 808 bytes .../1.4.4_0/img/browsericons/icon19-17.png | Bin 0 -> 792 bytes .../1.4.4_0/img/browsericons/icon19-18.png | Bin 0 -> 761 bytes .../1.4.4_0/img/browsericons/icon19-19.png | Bin 0 -> 534 bytes .../1.4.4_0/img/browsericons/icon19-2.png | Bin 0 -> 836 bytes .../1.4.4_0/img/browsericons/icon19-3.png | Bin 0 -> 836 bytes .../1.4.4_0/img/browsericons/icon19-4.png | Bin 0 -> 827 bytes .../1.4.4_0/img/browsericons/icon19-5.png | Bin 0 -> 837 bytes .../1.4.4_0/img/browsericons/icon19-6.png | Bin 0 -> 833 bytes .../1.4.4_0/img/browsericons/icon19-7.png | Bin 0 -> 823 bytes .../1.4.4_0/img/browsericons/icon19-8.png | Bin 0 -> 818 bytes .../1.4.4_0/img/browsericons/icon19-9.png | Bin 0 -> 830 bytes .../1.4.4_0/img/browsericons/icon19-off.png | Bin 0 -> 777 bytes .../1.4.4_0/img/browsericons/icon38-off.png | Bin 0 -> 2255 bytes .../1.4.4_0/img/cloud.png | Bin 0 -> 5017 bytes .../1.4.4_0/img/fontawesome/LICENSE.txt | 25 + .../1.4.4_0/img/fontawesome/fontawesome-defs.svg | 61 + .../1.4.4_0/img/icon_128.png | Bin 0 -> 9449 bytes .../1.4.4_0/img/icon_16.png | Bin 0 -> 616 bytes .../1.4.4_0/img/icon_64.png | Bin 0 -> 5483 bytes .../1.4.4_0/img/matrix-group-hide.png | Bin 0 -> 253 bytes .../1.4.4_0/img/matrix-group-hline.png | Bin 0 -> 178 bytes .../1.4.4_0/img/matrix-group-show.png | Bin 0 -> 257 bytes .../1.4.4_0/img/permanent-black-small-cb.png | Bin 0 -> 159 bytes .../1.4.4_0/img/permanent-black-small.png | Bin 0 -> 243 bytes .../1.4.4_0/img/permanent-white-small-cb.png | Bin 0 -> 151 bytes .../1.4.4_0/img/permanent-white-small.png | Bin 0 -> 246 bytes .../1.4.4_0/js/about.js | 146 + .../1.4.4_0/js/asset-viewer.js | 45 + .../1.4.4_0/js/assets.js | 935 + .../1.4.4_0/js/background.js | 227 + .../1.4.4_0/js/browsercache.js | 62 + .../1.4.4_0/js/cloud-ui.js | 209 + .../1.4.4_0/js/contentscript-no-inline-script.js | 62 + .../1.4.4_0/js/contentscript-no-workers.js | 62 + .../1.4.4_0/js/contentscript-start.js | 96 + .../1.4.4_0/js/contentscript.js | 552 + .../1.4.4_0/js/cookies.js | 557 + .../1.4.4_0/js/dashboard-common.js | 40 + .../1.4.4_0/js/dashboard.js | 55 + .../1.4.4_0/js/fa-icons.js | 52 + .../1.4.4_0/js/hosts-files.js | 464 + .../1.4.4_0/js/httpsb.js | 96 + .../1.4.4_0/js/i18n.js | 208 + .../1.4.4_0/js/liquid-dict.js | 199 + .../1.4.4_0/js/logger-ui.js | 1232 + .../1.4.4_0/js/logger.js | 90 + .../1.4.4_0/js/main-blocked.js | 177 + .../1.4.4_0/js/matrix.js | 886 + .../1.4.4_0/js/messaging.js | 1034 + .../1.4.4_0/js/pagestats.js | 268 + .../1.4.4_0/js/popup.js | 1592 ++ .../1.4.4_0/js/raw-settings.js | 115 + .../1.4.4_0/js/recipe-manager.js | 272 + .../1.4.4_0/js/scope-selector.js | 152 + .../1.4.4_0/js/settings.js | 195 + .../1.4.4_0/js/start.js | 115 + .../1.4.4_0/js/storage.js | 991 + .../1.4.4_0/js/tab.js | 742 + .../1.4.4_0/js/traffic.js | 664 + .../1.4.4_0/js/udom.js | 728 + .../1.4.4_0/js/uritools.js | 417 + .../1.4.4_0/js/user-rules.js | 536 + .../1.4.4_0/js/usersettings.js | 60 + .../1.4.4_0/js/utils.js | 109 + .../1.4.4_0/js/vapi-background.js | 812 + .../1.4.4_0/js/vapi-client.js | 253 + .../1.4.4_0/js/vapi-common.js | 214 + .../1.4.4_0/js/vapi-webrequest.js | 198 + .../1.4.4_0/lib/codemirror/LICENSE | 21 + .../1.4.4_0/lib/codemirror/README.md | 49 + .../1.4.4_0/lib/codemirror/addon/merge/merge.css | 119 + .../1.4.4_0/lib/codemirror/addon/merge/merge.js | 1002 + .../lib/codemirror/addon/selection/active-line.js | 72 + .../1.4.4_0/lib/codemirror/lib/codemirror.css | 346 + .../1.4.4_0/lib/codemirror/lib/codemirror.js | 9693 +++++++ .../1.4.4_0/lib/diff/README.md | 34 + .../1.4.4_0/lib/diff/swatinem_diff.js | 207 + .../1.4.4_0/lib/publicsuffixlist.js | 343 + .../1.4.4_0/lib/punycode.js | 530 + .../1.4.4_0/logger-ui.html | 85 + .../1.4.4_0/main-blocked.html | 43 + .../1.4.4_0/manifest.json | 43 + .../1.4.4_0/popup.html | 129 + .../1.4.4_0/raw-settings.html | 34 + .../1.4.4_0/settings.html | 126 + .../1.4.4_0/user-rules.html | 68 + .../3.3.0_0/_locales/ar/messages.json | 161 + .../3.3.0_0/_locales/bn/messages.json | 160 + .../3.3.0_0/_locales/bs/messages.json | 160 + .../3.3.0_0/_locales/cs/messages.json | 160 + .../3.3.0_0/_locales/de/messages.json | 160 + .../3.3.0_0/_locales/delete.py | 75 + .../3.3.0_0/_locales/en/messages.json | 160 + .../3.3.0_0/_locales/eo/messages.json | 145 + .../3.3.0_0/_locales/es/messages.json | 160 + .../3.3.0_0/_locales/fa/messages.json | 137 + .../3.3.0_0/_locales/fi/messages.json | 160 + .../3.3.0_0/_locales/fil/messages.json | 137 + .../3.3.0_0/_locales/filter.py | 60 + .../3.3.0_0/_locales/fr/messages.json | 160 + .../3.3.0_0/_locales/gl/messages.json | 160 + .../3.3.0_0/_locales/hi/messages.json | 2 + .../3.3.0_0/_locales/hr/messages.json | 160 + .../3.3.0_0/_locales/hu/messages.json | 137 + .../3.3.0_0/_locales/id/messages.json | 160 + .../3.3.0_0/_locales/it/messages.json | 160 + .../3.3.0_0/_locales/ja/messages.json | 160 + .../3.3.0_0/_locales/jv/messages.json | 145 + .../3.3.0_0/_locales/ko/messages.json | 145 + .../3.3.0_0/_locales/lv/messages.json | 95 + .../3.3.0_0/_locales/nb_NO/messages.json | 145 + .../3.3.0_0/_locales/nl/messages.json | 160 + .../3.3.0_0/_locales/pl/messages.json | 160 + .../3.3.0_0/_locales/pt/messages.json | 145 + .../3.3.0_0/_locales/pt_BR/messages.json | 160 + .../3.3.0_0/_locales/ro/messages.json | 157 + .../3.3.0_0/_locales/ru/messages.json | 160 + .../3.3.0_0/_locales/sr/messages.json | 160 + .../3.3.0_0/_locales/ta/messages.json | 137 + .../3.3.0_0/_locales/tr/messages.json | 160 + .../3.3.0_0/_locales/uk/messages.json | 160 + .../3.3.0_0/_locales/vi/messages.json | 145 + .../3.3.0_0/_locales/zh_Hans/messages.json | 160 + .../3.3.0_0/_locales/zh_Hant/messages.json | 160 + .../3.3.0_0/assets/images/about-icon-light.svg | 1 + .../3.3.0_0/assets/images/about-icon.svg | 1 + .../3.3.0_0/assets/images/baiduTieba-icon.svg | 72 + .../3.3.0_0/assets/images/bandcamp-icon.svg | 1 + .../3.3.0_0/assets/images/bilibili-icon-light.svg | 1 + .../3.3.0_0/assets/images/bilibili-icon.svg | 1 + .../3.3.0_0/assets/images/bluesky-icon.svg | 1 + .../3.3.0_0/assets/images/chatGpt-icon-light.svg | 10 + .../3.3.0_0/assets/images/chatGpt-icon.svg | 1 + .../3.3.0_0/assets/images/chefkoch-icon.svg | 43 + .../3.3.0_0/assets/images/coub-icon.svg | 44 + .../3.3.0_0/assets/images/deviantArt-icon.svg | 474 + .../3.3.0_0/assets/images/fandom-icon.svg | 1 + .../3.3.0_0/assets/images/geeksForGeeks-icon.svg | 39 + .../3.3.0_0/assets/images/general-icon-light.svg | 1 + .../3.3.0_0/assets/images/general-icon.svg | 1 + .../3.3.0_0/assets/images/genius-icon.svg | 1 + .../3.3.0_0/assets/images/github-icon-light.svg | 1 + .../3.3.0_0/assets/images/github-icon.svg | 1 + .../3.3.0_0/assets/images/gitlab-icon.svg | 1 + .../3.3.0_0/assets/images/goodreads-icon-light.svg | 1 + .../3.3.0_0/assets/images/goodreads-icon.svg | 1 + .../3.3.0_0/assets/images/ifunny-icon.svg | 1 + .../3.3.0_0/assets/images/imdb-icon.svg | 1 + .../3.3.0_0/assets/images/imgur-icon.svg | 1 + .../3.3.0_0/assets/images/instagram-icon.svg | 1 + .../3.3.0_0/assets/images/instructables-icon.svg | 1 + .../3.3.0_0/assets/images/knowyourmeme-icon.svg | 1 + .../3.3.0_0/assets/images/libredirect-128.png | Bin 0 -> 3445 bytes .../3.3.0_0/assets/images/libredirect-16.png | Bin 0 -> 483 bytes .../3.3.0_0/assets/images/libredirect-32.png | Bin 0 -> 931 bytes .../3.3.0_0/assets/images/libredirect-48.png | Bin 0 -> 1385 bytes .../3.3.0_0/assets/images/libredirect-64.png | Bin 0 -> 2040 bytes .../3.3.0_0/assets/images/libredirect-96.png | Bin 0 -> 2929 bytes .../3.3.0_0/assets/images/libredirect.png | Bin 0 -> 42515 bytes .../3.3.0_0/assets/images/libredirect.svg | 1 + .../3.3.0_0/assets/images/maps-icon-light.svg | 1 + .../3.3.0_0/assets/images/maps-icon.svg | 1 + .../3.3.0_0/assets/images/medium-icon.svg | 1 + .../3.3.0_0/assets/images/meet-icon-light.svg | 1 + .../3.3.0_0/assets/images/meet-icon.svg | 1 + .../3.3.0_0/assets/images/mozhi-icon.svg | 154 + .../3.3.0_0/assets/images/office-icon-light.svg | 1 + .../3.3.0_0/assets/images/office-icon.svg | 1 + .../3.3.0_0/assets/images/pastebin-icon-light.svg | 101 + .../3.3.0_0/assets/images/pastebin-icon.svg | 2 + .../3.3.0_0/assets/images/peertube-icon.svg | 1 + .../3.3.0_0/assets/images/pinterest-icon.svg | 1 + .../3.3.0_0/assets/images/pixiv-icon.svg | 1 + .../3.3.0_0/assets/images/quora-icon.svg | 1 + .../3.3.0_0/assets/images/reddit-icon.svg | 1 + .../3.3.0_0/assets/images/reuters-icon.svg | 1 + .../3.3.0_0/assets/images/search-icon-light.svg | 1 + .../3.3.0_0/assets/images/search-icon.svg | 1 + .../3.3.0_0/assets/images/sendFiles-icon-light.svg | 1 + .../3.3.0_0/assets/images/sendFiles-icon.svg | 1 + .../3.3.0_0/assets/images/snopes-icon.svg | 1 + .../3.3.0_0/assets/images/soundcloud-icon.svg | 1 + .../assets/images/stackOverflow-icon-light.svg | 1 + .../3.3.0_0/assets/images/stackOverflow-icon.svg | 1 + .../3.3.0_0/assets/images/tekstowo-icon.svg | 1 + .../3.3.0_0/assets/images/tenor-icon.svg | 1 + .../assets/images/textStorage-icon-light.svg | 1 + .../3.3.0_0/assets/images/textStorage-icon.svg | 1 + .../3.3.0_0/assets/images/threads-icon-light.svg | 21 + .../3.3.0_0/assets/images/threads-icon.svg | 18 + .../3.3.0_0/assets/images/tiktok-icon.svg | 1 + .../3.3.0_0/assets/images/translate-icon-light.svg | 1 + .../3.3.0_0/assets/images/translate-icon.svg | 1 + .../3.3.0_0/assets/images/tumblr-icon.svg | 1 + .../3.3.0_0/assets/images/twitch-icon.svg | 1 + .../3.3.0_0/assets/images/twitter-icon.svg | 1 + .../3.3.0_0/assets/images/ultimateGuitar-icon.svg | 1 + .../3.3.0_0/assets/images/urbanDictionary-icon.svg | 1 + .../assets/images/waybackMachine-icon-light.svg | 1 + .../3.3.0_0/assets/images/waybackMachine-icon.svg | 1 + .../3.3.0_0/assets/images/wikipedia-icon.svg | 1 + .../3.3.0_0/assets/images/wolframAlpha-icon.svg | 1 + .../3.3.0_0/assets/images/youtube-icon.svg | 1 + .../3.3.0_0/assets/images/youtubeMusic-icon.svg | 1 + .../3.3.0_0/assets/javascripts/services.js | 1108 + .../3.3.0_0/assets/javascripts/utils.js | 297 + .../3.3.0_0/config.json | 1526 ++ .../3.3.0_0/manifest.json | 86 + .../3.3.0_0/pages/background/background.html | 7 + .../3.3.0_0/pages/background/background.js | 361 + .../3.3.0_0/pages/components/Button.svelte | 35 + .../3.3.0_0/pages/components/Checkbox.svelte | 52 + .../3.3.0_0/pages/components/Input.svelte | 46 + .../3.3.0_0/pages/components/Label.svelte | 18 + .../3.3.0_0/pages/components/Row.svelte | 12 + .../3.3.0_0/pages/components/Select.svelte | 34 + .../pages/fonts/Inter-VariableFont_slnt,wght.ttf | Bin 0 -> 803384 bytes .../pages/fonts/Vazirmatn-VariableFont_wght.ttf | Bin 0 -> 285620 bytes .../3.3.0_0/pages/fonts/styles.css | 13 + .../3.3.0_0/pages/icons/AboutIcon.svelte | 11 + .../3.3.0_0/pages/icons/AddIcon.svelte | 7 + .../3.3.0_0/pages/icons/AutoPickIcon.svelte | 11 + .../3.3.0_0/pages/icons/CloseIcon.svelte | 7 + .../3.3.0_0/pages/icons/CopyIcon.svelte | 12 + .../3.3.0_0/pages/icons/ExportIcon.svelte | 12 + .../3.3.0_0/pages/icons/GeneralIcon.svelte | 13 + .../3.3.0_0/pages/icons/ImportIcon.svelte | 12 + .../3.3.0_0/pages/icons/PingIcon.svelte | 12 + .../3.3.0_0/pages/icons/RedirectIcon.svelte | 10 + .../pages/icons/RedirectToOriginalIcon.svelte | 13 + .../3.3.0_0/pages/icons/ResetIcon.svelte | 16 + .../3.3.0_0/pages/icons/ServicesIcon.svelte | 11 + .../3.3.0_0/pages/icons/SettingsIcon.svelte | 15 + .../3.3.0_0/pages/icons/SwitchInstanceIcon.svelte | 15 + .../3.3.0_0/pages/messages/build/bundle.css | 2 + .../3.3.0_0/pages/messages/build/bundle.js | 2 + .../3.3.0_0/pages/messages/build/bundle.js.map | 1 + .../3.3.0_0/pages/messages/index.html | 14 + .../3.3.0_0/pages/messages_src/App.svelte | 134 + .../3.3.0_0/pages/messages_src/main.js | 7 + .../3.3.0_0/pages/messages_src/stores.js | 5 + .../3.3.0_0/pages/options/build/bundle.css | 17 + .../3.3.0_0/pages/options/build/bundle.js | 2 + .../3.3.0_0/pages/options/build/bundle.js.map | 1 + .../3.3.0_0/pages/options/index.html | 17 + .../3.3.0_0/pages/options_src/App.svelte | 101 + .../pages/options_src/General/Exceptions.svelte | 110 + .../pages/options_src/General/General.svelte | 98 + .../options_src/General/SettingsButtons.svelte | 110 + .../pages/options_src/Services/FrontendIcon.svelte | 41 + .../pages/options_src/Services/Instances.svelte | 310 + .../pages/options_src/Services/RedirectType.svelte | 102 + .../pages/options_src/Services/ServiceIcon.svelte | 40 + .../pages/options_src/Services/Services.svelte | 274 + .../3.3.0_0/pages/options_src/Sidebar.svelte | 69 + .../3.3.0_0/pages/options_src/main.js | 7 + .../3.3.0_0/pages/options_src/stores.js | 4 + .../3.3.0_0/pages/options_src/url.js | 38 + .../3.3.0_0/pages/popup/build/bundle.css | 6 + .../3.3.0_0/pages/popup/build/bundle.js | 2 + .../3.3.0_0/pages/popup/build/bundle.js.map | 1 + .../3.3.0_0/pages/popup/index.html | 17 + .../3.3.0_0/pages/popup_src/App.svelte | 78 + .../3.3.0_0/pages/popup_src/Buttons.svelte | 243 + .../3.3.0_0/pages/popup_src/components/Row.svelte | 12 + .../pages/popup_src/components/ServiceIcon.svelte | 40 + .../pages/popup_src/components/Switch.svelte | 81 + .../3.3.0_0/pages/popup_src/main.js | 7 + .../3.3.0_0/pages/popup_src/stores.js | 5 + .../3.3.0_0/updates/updates.xml | 6 + .../11.1.0_0/_locales/ca/messages.json | 2944 ++ .../11.1.0_0/_locales/de/messages.json | 2944 ++ .../11.1.0_0/_locales/en/messages.json | 2944 ++ .../11.1.0_0/_locales/es/messages.json | 2944 ++ .../11.1.0_0/_locales/fr/messages.json | 2944 ++ .../11.1.0_0/_locales/it/messages.json | 2944 ++ .../11.1.0_0/_locales/nl/messages.json | 2944 ++ .../11.1.0_0/_locales/pl/messages.json | 2944 ++ .../11.1.0_0/_locales/pt_BR/messages.json | 2944 ++ .../11.1.0_0/_locales/pt_PT/messages.json | 2944 ++ .../11.1.0_0/_locales/ru/messages.json | 2944 ++ .../11.1.0_0/_locales/uk/messages.json | 2944 ++ .../11.1.0_0/_metadata/verified_contents.json | 1 + .../assets/emojibase-data/emojis/de/data.json | 1 + .../assets/emojibase-data/emojis/en/data.json | 1 + .../assets/emojibase-data/emojis/es/data.json | 1 + .../assets/emojibase-data/emojis/fr/data.json | 1 + .../assets/emojibase-data/emojis/it/data.json | 1 + .../assets/emojibase-data/emojis/nl/data.json | 1 + .../assets/emojibase-data/emojis/pl/data.json | 1 + .../assets/emojibase-data/emojis/pt/data.json | 1 + .../assets/emojibase-data/emojis/ru/data.json | 1 + .../assets/emojibase-data/emojis/uk/data.json | 1 + .../assets/emojibase-data/keywords/de/data.json | 1 + .../assets/emojibase-data/keywords/en/data.json | 1 + .../assets/emojibase-data/keywords/es/data.json | 1 + .../assets/emojibase-data/keywords/fr/data.json | 1 + .../assets/emojibase-data/keywords/it/data.json | 1 + .../assets/emojibase-data/keywords/nl/data.json | 1 + .../assets/emojibase-data/keywords/pl/data.json | 1 + .../assets/emojibase-data/keywords/pt/data.json | 1 + .../assets/emojibase-data/keywords/ru/data.json | 1 + .../assets/emojibase-data/keywords/uk/data.json | 1 + .../assets/fonts/Roboto-Mono-latin-bold.woff2 | Bin 0 -> 12288 bytes .../fonts/Source-Sans-Pro-cycrillic-bold-mac.woff2 | Bin 0 -> 7484 bytes .../fonts/Source-Sans-Pro-cycrillic-bold-win.woff2 | Bin 0 -> 9540 bytes .../Source-Sans-Pro-cycrillic-ext-bold-mac.woff2 | Bin 0 -> 5224 bytes .../Source-Sans-Pro-cycrillic-ext-bold-win.woff2 | Bin 0 -> 6696 bytes .../fonts/Source-Sans-Pro-cycrillic-ext-mac.woff2 | Bin 0 -> 5360 bytes ...urce-Sans-Pro-cycrillic-ext-semi-bold-mac.woff2 | Bin 0 -> 5268 bytes ...urce-Sans-Pro-cycrillic-ext-semi-bold-win.woff2 | Bin 0 -> 6816 bytes .../fonts/Source-Sans-Pro-cycrillic-ext-win.woff2 | Bin 0 -> 6868 bytes .../fonts/Source-Sans-Pro-cycrillic-mac.woff2 | Bin 0 -> 7748 bytes .../Source-Sans-Pro-cycrillic-semi-bold-mac.woff2 | Bin 0 -> 7584 bytes .../Source-Sans-Pro-cycrillic-semi-bold-win.woff2 | Bin 0 -> 9696 bytes .../fonts/Source-Sans-Pro-cycrillic-win.woff2 | Bin 0 -> 9684 bytes .../fonts/Source-Sans-Pro-greek-bold-mac.woff2 | Bin 0 -> 6696 bytes .../fonts/Source-Sans-Pro-greek-bold-win.woff2 | Bin 0 -> 8280 bytes .../fonts/Source-Sans-Pro-greek-ext-bold-mac.woff2 | Bin 0 -> 6244 bytes .../fonts/Source-Sans-Pro-greek-ext-bold-win.woff2 | Bin 0 -> 7360 bytes .../fonts/Source-Sans-Pro-greek-ext-mac.woff2 | Bin 0 -> 6348 bytes .../Source-Sans-Pro-greek-ext-semi-bold-mac.woff2 | Bin 0 -> 6320 bytes .../Source-Sans-Pro-greek-ext-semi-bold-win.woff2 | Bin 0 -> 7244 bytes .../fonts/Source-Sans-Pro-greek-ext-win.woff2 | Bin 0 -> 7376 bytes .../assets/fonts/Source-Sans-Pro-greek-mac.woff2 | Bin 0 -> 6840 bytes .../Source-Sans-Pro-greek-semi-bold-mac.woff2 | Bin 0 -> 6644 bytes .../Source-Sans-Pro-greek-semi-bold-win.woff2 | Bin 0 -> 8248 bytes .../assets/fonts/Source-Sans-Pro-greek-win.woff2 | Bin 0 -> 8444 bytes .../fonts/Source-Sans-Pro-latin-bold-mac.woff2 | Bin 0 -> 12976 bytes .../fonts/Source-Sans-Pro-latin-bold-win.woff2 | Bin 0 -> 15764 bytes .../fonts/Source-Sans-Pro-latin-ext-bold-mac.woff2 | Bin 0 -> 12168 bytes .../fonts/Source-Sans-Pro-latin-ext-bold-win.woff2 | Bin 0 -> 14808 bytes .../fonts/Source-Sans-Pro-latin-ext-mac.woff2 | Bin 0 -> 12352 bytes .../Source-Sans-Pro-latin-ext-semi-bold-mac.woff2 | Bin 0 -> 12160 bytes .../Source-Sans-Pro-latin-ext-semi-bold-win.woff2 | Bin 0 -> 15016 bytes .../fonts/Source-Sans-Pro-latin-ext-win.woff2 | Bin 0 -> 14960 bytes .../assets/fonts/Source-Sans-Pro-latin-mac.woff2 | Bin 0 -> 13324 bytes .../Source-Sans-Pro-latin-semi-bold-mac.woff2 | Bin 0 -> 13108 bytes .../Source-Sans-Pro-latin-semi-bold-win.woff2 | Bin 0 -> 15948 bytes .../assets/fonts/Source-Sans-Pro-latin-win.woff2 | Bin 0 -> 16112 bytes .../Source-Sans-Pro-vietnamese-bold-mac.woff2 | Bin 0 -> 4480 bytes .../Source-Sans-Pro-vietnamese-bold-win.woff2 | Bin 0 -> 5676 bytes .../fonts/Source-Sans-Pro-vietnamese-mac.woff2 | Bin 0 -> 4592 bytes .../Source-Sans-Pro-vietnamese-semi-bold-mac.woff2 | Bin 0 -> 4520 bytes .../Source-Sans-Pro-vietnamese-semi-bold-win.woff2 | Bin 0 -> 5784 bytes .../fonts/Source-Sans-Pro-vietnamese-win.woff2 | Bin 0 -> 5804 bytes .../assets/images/16/black/add_on_icon_16_ai.svg | 3 + .../images/16/black/add_on_icon_16_black_logo.svg | 1 + .../images/16/black/add_on_icon_16_missing.svg | 3 + .../images/16/black/add_on_icon_16_scissors.svg | 6 + .../assets/images/16/special/add_on_icon_16_ai.svg | 3 + .../16/special/add_on_icon_16_blue_picky.svg | 1 + .../images/16/special/add_on_icon_16_premium.svg | 1 + .../add_on_icon_16_special_switch_active.svg | 1 + .../add_on_icon_16_special_switch_inactive.svg | 1 + .../images/16/white/add_on_icon_16_white_logo.svg | 1 + .../white/add_on_icon_16_white_switch_active.svg | 1 + .../white/add_on_icon_16_white_switch_inactive.svg | 1 + .../images/20/black/add_on_icon_20_black_add.svg | 1 + .../20/black/add_on_icon_20_black_add_circle.svg | 1 + .../20/black/add_on_icon_20_black_ai_tools.svg | 4 + .../20/black/add_on_icon_20_black_arrow_left.svg | 4 + .../20/black/add_on_icon_20_black_arrow_right.svg | 4 + .../20/black/add_on_icon_20_black_basic_error.svg | 1 + .../20/black/add_on_icon_20_black_blocked.svg | 1 + .../20/black/add_on_icon_20_black_bookmark.svg | 1 + .../images/20/black/add_on_icon_20_black_check.svg | 3 + .../20/black/add_on_icon_20_black_check_circle.svg | 1 + .../20/black/add_on_icon_20_black_chevron_down.svg | 1 + .../black/add_on_icon_20_black_chevron_right.svg | 1 + .../20/black/add_on_icon_20_black_chevron_up.svg | 1 + .../20/black/add_on_icon_20_black_close_circle.svg | 1 + .../20/black/add_on_icon_20_black_close_filled.svg | 1 + .../20/black/add_on_icon_20_black_close_small.svg | 1 + .../20/black/add_on_icon_20_black_dictionary.svg | 1 + .../20/black/add_on_icon_20_black_disable.svg | 3 + .../black/add_on_icon_20_black_disable_circle.svg | 1 + .../add_on_icon_20_black_disabled_website.svg | 1 + .../add_on_icon_20_black_experimental_settings.svg | 1 + .../20/black/add_on_icon_20_black_feedback.svg | 1 + .../images/20/black/add_on_icon_20_black_gear.svg | 1 + .../20/black/add_on_icon_20_black_glasses.svg | 1 + .../images/20/black/add_on_icon_20_black_globe.svg | 1 + .../images/20/black/add_on_icon_20_black_help.svg | 1 + .../images/20/black/add_on_icon_20_black_info.svg | 1 + .../20/black/add_on_icon_20_black_kebab_menu.svg | 3 + .../20/black/add_on_icon_20_black_loading.svg | 3 + .../20/black/add_on_icon_20_black_locked.svg | 1 + .../20/black/add_on_icon_20_black_lollipop.png | Bin 0 -> 16592 bytes .../20/black/add_on_icon_20_black_lollipop.svg | 1 + .../black/add_on_icon_20_black_magic_toolbox.svg | 3 + .../20/black/add_on_icon_20_black_new_window.svg | 1 + .../images/20/black/add_on_icon_20_black_pause.svg | 1 + .../20/black/add_on_icon_20_black_privacy.svg | 3 + .../20/black/add_on_icon_20_black_reload.svg | 5 + .../images/20/black/add_on_icon_20_black_save.svg | 1 + .../20/black/add_on_icon_20_black_synonyms.svg | 1 + .../images/20/black/add_on_icon_20_black_trash.svg | 1 + .../add_on_icon_20_black_uppercase_ignore.svg | 1 + .../black/add_on_icon_20_black_user_statistics.svg | 7 + .../20/black/add_on_icon_20_black_view_default.svg | 1 + .../20/black/add_on_icon_20_black_view_left.svg | 1 + .../20/black/add_on_icon_20_black_view_right.svg | 1 + .../20/black/add_on_icon_20_black_view_scroll.svg | 1 + .../20/special/add_on_icon_20_blue_arrow_down.svg | 1 + .../20/special/add_on_icon_20_blue_arrow_left.svg | 4 + .../20/special/add_on_icon_20_blue_arrow_right.svg | 4 + .../20/special/add_on_icon_20_blue_check.svg | 1 + .../special/add_on_icon_20_blue_chevron_down.svg | 1 + .../20/special/add_on_icon_20_blue_expand.svg | 1 + .../20/special/add_on_icon_20_blue_insert.svg | 3 + .../20/special/add_on_icon_20_blue_narrow_down.svg | 1 + .../20/special/add_on_icon_20_color_logo.svg | 1 + .../20/special/add_on_icon_20_orange_check.svg | 1 + .../images/20/special/add_on_icon_20_premium.svg | 3 + .../images/20/white/add_on_icon_20_white_add.svg | 1 + .../20/white/add_on_icon_20_white_add_circle.svg | 1 + .../20/white/add_on_icon_20_white_ai_tools.svg | 4 + .../20/white/add_on_icon_20_white_ai_tools_2.svg | 9 + .../20/white/add_on_icon_20_white_arrow_left.svg | 4 + .../20/white/add_on_icon_20_white_arrow_right.svg | 4 + .../20/white/add_on_icon_20_white_basic_error.svg | 1 + .../20/white/add_on_icon_20_white_blocked.svg | 1 + .../20/white/add_on_icon_20_white_bookmark.svg | 1 + .../images/20/white/add_on_icon_20_white_check.svg | 3 + .../20/white/add_on_icon_20_white_check_circle.svg | 1 + .../20/white/add_on_icon_20_white_chevron_down.svg | 1 + .../20/white/add_on_icon_20_white_chevron_up.svg | 1 + .../20/white/add_on_icon_20_white_close_circle.svg | 1 + .../20/white/add_on_icon_20_white_close_filled.svg | 1 + .../20/white/add_on_icon_20_white_close_small.svg | 1 + .../20/white/add_on_icon_20_white_dictionary.svg | 1 + .../20/white/add_on_icon_20_white_disable.svg | 3 + .../white/add_on_icon_20_white_disable_circle.svg | 1 + .../add_on_icon_20_white_disabled_website.svg | 1 + .../20/white/add_on_icon_20_white_expand.svg | 1 + .../add_on_icon_20_white_experimental_settings.svg | 1 + .../20/white/add_on_icon_20_white_feedback.svg | 1 + .../images/20/white/add_on_icon_20_white_gear.svg | 1 + .../20/white/add_on_icon_20_white_glasses.svg | 1 + .../images/20/white/add_on_icon_20_white_globe.svg | 1 + .../images/20/white/add_on_icon_20_white_help.svg | 1 + .../images/20/white/add_on_icon_20_white_info.svg | 1 + .../20/white/add_on_icon_20_white_kebab_menu.svg | 3 + .../20/white/add_on_icon_20_white_loading.svg | 3 + .../20/white/add_on_icon_20_white_locked.svg | 1 + .../20/white/add_on_icon_20_white_lollipop.png | Bin 0 -> 39332 bytes .../20/white/add_on_icon_20_white_lollipop.svg | 1 + .../images/20/white/add_on_icon_20_white_lt.svg | 1 + .../white/add_on_icon_20_white_magic_toolbox.svg | 3 + .../20/white/add_on_icon_20_white_narrow_down.svg | 1 + .../20/white/add_on_icon_20_white_new_window.svg | 1 + .../images/20/white/add_on_icon_20_white_pause.svg | 1 + .../20/white/add_on_icon_20_white_premium.svg | 3 + .../20/white/add_on_icon_20_white_privacy.svg | 3 + .../20/white/add_on_icon_20_white_reload.svg | 5 + .../20/white/add_on_icon_20_white_rephrasing.svg | 3 + .../images/20/white/add_on_icon_20_white_save.svg | 1 + .../20/white/add_on_icon_20_white_synonyms.svg | 1 + .../images/20/white/add_on_icon_20_white_trash.svg | 1 + .../add_on_icon_20_white_uppercase_ignore.svg | 1 + .../white/add_on_icon_20_white_user_statistics.svg | 7 + .../20/white/add_on_icon_20_white_view_default.svg | 1 + .../20/white/add_on_icon_20_white_view_left.svg | 1 + .../20/white/add_on_icon_20_white_view_right.svg | 1 + .../white/add_on_icon_20_white_view_scroll-to.svg | 1 + .../20/white/add_on_icon_20_white_view_scroll.svg | 1 + .../background-skeleton-loading-dark-mode.webp | Bin 0 -> 5022 bytes .../backgrounds/background-skeleton-loading.webp | Bin 0 -> 7134 bytes .../assets/images/backgrounds/elements.svg | 1 + .../11.1.0_0/assets/images/card-drag-handle.svg | 3 + .../11.1.0_0/assets/images/favicon.ico | Bin 0 -> 1150 bytes .../11.1.0_0/assets/images/flags/ar.svg | 1 + .../11.1.0_0/assets/images/flags/ast-es.svg | 1 + .../11.1.0_0/assets/images/flags/be-by.svg | 1 + .../11.1.0_0/assets/images/flags/br-fr.svg | 1 + .../assets/images/flags/ca-es-valencia.svg | 1 + .../11.1.0_0/assets/images/flags/ca-es.svg | 1 + .../11.1.0_0/assets/images/flags/crh-ua.svg | 1 + .../11.1.0_0/assets/images/flags/da-dk.svg | 1 + .../11.1.0_0/assets/images/flags/de-at.svg | 1 + .../11.1.0_0/assets/images/flags/de-ch.svg | 1 + .../11.1.0_0/assets/images/flags/de-de.svg | 1 + .../11.1.0_0/assets/images/flags/el-gr.svg | 1 + .../11.1.0_0/assets/images/flags/en-au.svg | 1 + .../11.1.0_0/assets/images/flags/en-ca.svg | 1 + .../11.1.0_0/assets/images/flags/en-gb.svg | 1 + .../11.1.0_0/assets/images/flags/en-nz.svg | 1 + .../11.1.0_0/assets/images/flags/en-us.svg | 1 + .../11.1.0_0/assets/images/flags/en-za.svg | 1 + .../11.1.0_0/assets/images/flags/eo.svg | 1 + .../11.1.0_0/assets/images/flags/es.svg | 1 + .../11.1.0_0/assets/images/flags/eu.svg | 1 + .../11.1.0_0/assets/images/flags/fa.svg | 1 + .../11.1.0_0/assets/images/flags/fr.svg | 1 + .../11.1.0_0/assets/images/flags/ga-ie.svg | 1 + .../11.1.0_0/assets/images/flags/gl-es.svg | 1 + .../11.1.0_0/assets/images/flags/globe_dark.svg | 1 + .../11.1.0_0/assets/images/flags/globe_white.svg | 1 + .../11.1.0_0/assets/images/flags/it.svg | 1 + .../11.1.0_0/assets/images/flags/ja-jp.svg | 1 + .../11.1.0_0/assets/images/flags/km-kh.svg | 1 + .../11.1.0_0/assets/images/flags/nl.svg | 1 + .../11.1.0_0/assets/images/flags/no.svg | 1 + .../11.1.0_0/assets/images/flags/not_found.svg | 1 + .../11.1.0_0/assets/images/flags/oc.svg | 1 + .../11.1.0_0/assets/images/flags/pl-pl.svg | 1 + .../11.1.0_0/assets/images/flags/pt-ao.svg | 1 + .../11.1.0_0/assets/images/flags/pt-br.svg | 1 + .../11.1.0_0/assets/images/flags/pt-mz.svg | 1 + .../11.1.0_0/assets/images/flags/pt-pt.svg | 1 + .../11.1.0_0/assets/images/flags/ro-ro.svg | 1 + .../11.1.0_0/assets/images/flags/ru-ru.svg | 1 + .../11.1.0_0/assets/images/flags/sk-sk.svg | 1 + .../11.1.0_0/assets/images/flags/sl-si.svg | 1 + .../11.1.0_0/assets/images/flags/sv.svg | 1 + .../11.1.0_0/assets/images/flags/ta-in.svg | 1 + .../11.1.0_0/assets/images/flags/tl-ph.svg | 1 + .../11.1.0_0/assets/images/flags/uk-ua.svg | 1 + .../11.1.0_0/assets/images/flags/zh-cn.svg | 1 + .../11.1.0_0/assets/images/hint-arrow.png | Bin 0 -> 410 bytes .../11.1.0_0/assets/images/icons/drag.svg | 12 + .../11.1.0_0/assets/images/icons/icon128.png | Bin 0 -> 13799 bytes .../11.1.0_0/assets/images/icons/icon128_white.png | Bin 0 -> 902 bytes .../11.1.0_0/assets/images/icons/icon16.png | Bin 0 -> 417 bytes .../11.1.0_0/assets/images/icons/icon16_white.png | Bin 0 -> 214 bytes .../11.1.0_0/assets/images/icons/icon32.png | Bin 0 -> 608 bytes .../11.1.0_0/assets/images/icons/icon32_white.png | Bin 0 -> 316 bytes .../11.1.0_0/assets/images/icons/icon48.png | Bin 0 -> 2810 bytes .../11.1.0_0/assets/images/icons/icon48_white.png | Bin 0 -> 406 bytes .../11.1.0_0/assets/images/icons/icon64.png | Bin 0 -> 4487 bytes .../11.1.0_0/assets/images/icons/icon64_white.png | Bin 0 -> 641 bytes .../illustrations/color/color_dialog_disabled.svg | 1 + .../illustrations/color/color_dialog_errors.svg | 1 + .../color/color_dialog_language_not_supported.svg | 1 + .../illustrations/color/color_dialog_no_errors.svg | 1 + .../color/color_dialog_scroll_hint.gif | Bin 0 -> 22460 bytes .../color/color_dialog_text_too_long.svg | 1 + .../color/color_dialog_text_too_short.svg | 1 + .../illustrations/color/color_dialog_update.svg | 1 + .../color/desktop_app_teaser_illustration_mac.png | Bin 0 -> 5913 bytes .../desktop_app_teaser_illustration_windows.png | Bin 0 -> 5236 bytes .../illustrations/color/google_docs_teaser.svg | 1 + .../illustrations/color/google_slides_teaser.svg | 1 + .../images/illustrations/color/mascot-2x.png | Bin 0 -> 3430 bytes .../images/illustrations/color/mascot-error-2x.png | Bin 0 -> 5535 bytes .../images/illustrations/color/mascot-error.png | Bin 0 -> 3578 bytes .../images/illustrations/color/mascot-happy-2x.png | Bin 0 -> 5829 bytes .../images/illustrations/color/mascot-happy.png | Bin 0 -> 3716 bytes .../images/illustrations/color/mascot-sad-2x.png | Bin 0 -> 3618 bytes .../images/illustrations/color/mascot-sad.png | Bin 0 -> 5694 bytes .../illustrations/color/mascot-weeping-2x.png | Bin 0 -> 3024 bytes .../images/illustrations/color/mascot-weeping.png | Bin 0 -> 1631 bytes .../assets/images/illustrations/color/mascot.png | Bin 0 -> 5455 bytes .../images/illustrations/color/overleaf_teaser.svg | 1 + .../color/rephrasing_illustration-2x.png | Bin 0 -> 14793 bytes .../color/rephrasing_illustration.png | Bin 0 -> 5883 bytes .../color/rephrasing_illustration_de-2x.png | Bin 0 -> 14735 bytes .../color/rephrasing_illustration_de.png | Bin 0 -> 5983 bytes .../color/rephrasing_illustration_es-2x.png | Bin 0 -> 14014 bytes .../color/rephrasing_illustration_es.png | Bin 0 -> 5667 bytes .../color/rephrasing_illustration_fr-2x.png | Bin 0 -> 14400 bytes .../color/rephrasing_illustration_fr.png | Bin 0 -> 6011 bytes .../color/rephrasing_illustration_pt-2x.png | Bin 0 -> 14189 bytes .../color/rephrasing_illustration_pt.png | Bin 0 -> 5405 bytes .../images/illustrations/color/undo-button.svg | 1 + .../images/illustrations/white/white_add.svg | 1 + .../illustrations/white/white_dialog_disabled.svg | 1 + .../illustrations/white/white_dialog_errors.svg | 1 + .../white/white_dialog_language_not_supported.svg | 1 + .../illustrations/white/white_dialog_no_errors.svg | 1 + .../white/white_dialog_text_too_long.svg | 1 + .../white/white_dialog_text_too_short.svg | 1 + .../illustrations/white/white_dialog_update.svg | 1 + .../images/illustrations/white/white_failure.svg | 1 + .../images/illustrations/white/white_no_errors.svg | 1 + .../images/illustrations/white/white_premium.svg | 1 + .../assets/images/logos/logo_color_circle.svg | 1 + .../images/logos/logo_color_with_background.svg | 1 + .../11.1.0_0/assets/images/lt-favicon-color.png | Bin 0 -> 390 bytes .../images/lt-favicon-color_notification.png | Bin 0 -> 434 bytes .../11.1.0_0/assets/images/lt-favicon-white.png | Bin 0 -> 291 bytes .../images/lt-favicon-white_notification.png | Bin 0 -> 422 bytes .../assets/images/lt-logo_gdocs_selected.svg | 1 + .../assets/images/lt-logo_gdocs_unselected.svg | 1 + .../assets/images/messages/message_turn_on.gif | Bin 0 -> 613809 bytes .../images/messages/message_turn_on_safari.gif | Bin 0 -> 289616 bytes .../11.1.0_0/assets/images/ratings/thumpsdown.svg | 1 + .../11.1.0_0/assets/images/ratings/thumpsup.svg | 1 + .../11.1.0_0/assets/images/stores/chrome_store.svg | 1 + .../11.1.0_0/assets/images/stores/edge_store.svg | 1 + .../assets/images/stores/firefox_store.svg | 1 + .../11.1.0_0/assets/images/stores/opera_store.svg | 1 + .../11.1.0_0/assets/images/stores/safari_store.svg | 1 + .../11.1.0_0/assets/images/toolbarStates/done.svg | 1 + .../images/toolbarStates/error_counts_white.png | Bin 0 -> 5674 bytes .../assets/images/toolbarStates/loading.webp | Bin 0 -> 25270 bytes .../assets/images/toolbarStates/progress.gif | Bin 0 -> 1498 bytes .../assets/images/toolbarStates/progress_2x.gif | Bin 0 -> 2394 bytes .../assets/images/toolbarStates/text_too_long.svg | 1 + .../assets/images/toolbarStates/toolbar_failed.png | Bin 0 -> 173 bytes .../toolbar_language_not_supported.svg | 1 + .../toolbarStates/toolbar_permission_required.svg | 1 + .../assets/images/toolbarStates/turnoff.svg | 1 + .../11.1.0_0/assets/images/toolbarStates/wave.svg | 1 + .../images/toolbox/contextual-cursor-icon-dark.svg | 4 + .../toolbox/contextual-cursor-icon-light.svg | 4 + .../assets/images/toolbox/lollipop-icon-gdocs.svg | 1 + .../assets/images/toolbox/lollipop-icon.svg | 1 + .../images/toolbox/lollipop-onboarding-lt.svg | 52 + .../images/toolbox/lollipop-onboarding-lt.webp | Bin 0 -> 546544 bytes .../11.1.0_0/assets/libs/segment.srx | 9108 +++++++ .../assets/toolbox/keywords/en/keywords.json | 7043 +++++ .../11.1.0_0/background.js | 42 + .../11.1.0_0/changelog/changelog.css | 900 + .../11.1.0_0/changelog/changelog.html | 506 + .../11.1.0_0/changelog/changelog.js | 34 + .../2023/big/changelog-big-illustration_ai.png | Bin 0 -> 36573 bytes .../big/changelog-big-illustration_desktop_mac.png | Bin 0 -> 182789 bytes .../changelog-big-illustration_desktop_windows.png | Bin 0 -> 215366 bytes .../changelog-big-illustration_french_version.png | Bin 0 -> 31934 bytes .../big/changelog-big-illustration_statistics.png | Bin 0 -> 36789 bytes .../changelog-big-illustration_user_mgmt_de.png | Bin 0 -> 37735 bytes .../changelog-big-illustration_user_mgmt_en.png | Bin 0 -> 34108 bytes .../changelog-big-illustration_user_mgmt_es.png | Bin 0 -> 34040 bytes .../changelog-big-illustration_user_mgmt_fr.png | Bin 0 -> 34507 bytes .../changelog-big-illustration_user_mgmt_nl.png | Bin 0 -> 34077 bytes .../changelog-big-illustration_user_mgmt_pt.png | Bin 0 -> 34491 bytes ...changelog-big-illustration_writing_goals_de.png | Bin 0 -> 36785 bytes ...changelog-big-illustration_writing_goals_en.png | Bin 0 -> 35234 bytes ...changelog-big-illustration_writing_goals_es.png | Bin 0 -> 34821 bytes ...changelog-big-illustration_writing_goals_fr.png | Bin 0 -> 35081 bytes ...changelog-big-illustration_writing_goals_nl.png | Bin 0 -> 37261 bytes ...changelog-big-illustration_writing_goals_pt.png | Bin 0 -> 35568 bytes .../2023/small/changelog-illustration_ai.png | Bin 0 -> 2409 bytes .../small/changelog-illustration_desktop_mac.png | Bin 0 -> 4962 bytes .../changelog-illustration_desktop_windows.png | Bin 0 -> 2675 bytes .../changelog-illustration_french_version.png | Bin 0 -> 7279 bytes .../small/changelog-illustration_statistics.png | Bin 0 -> 2550 bytes .../small/changelog-illustration_user_mgmt.png | Bin 0 -> 2664 bytes .../2023/small/changelog-illustration_word.png | Bin 0 -> 8006 bytes .../small/changelog-illustration_writing_goals.png | Bin 0 -> 2643 bytes .../11.1.0_0/changelog/images/ai_sparks.svg | 1 + .../11.1.0_0/changelog/images/button_ios.png | Bin 0 -> 12125 bytes .../11.1.0_0/changelog/images/button_mac.png | Bin 0 -> 4595 bytes .../11.1.0_0/changelog/images/button_windows.png | Bin 0 -> 2154 bytes .../images/changelog-background_confetti.jpg | Bin 0 -> 187846 bytes .../images/changelog-background_services.png | Bin 0 -> 56116 bytes .../changelog-big-illustration_business_de.png | Bin 0 -> 51811 bytes .../changelog-big-illustration_business_en.png | Bin 0 -> 51491 bytes .../changelog-big-illustration_business_es.png | Bin 0 -> 51847 bytes .../changelog-big-illustration_business_fr.png | Bin 0 -> 51751 bytes .../changelog-big-illustration_business_nl.png | Bin 0 -> 51576 bytes .../changelog-big-illustration_business_pt.png | Bin 0 -> 52301 bytes .../changelog-big-illustration_desktop_mac_de.png | Bin 0 -> 149658 bytes .../changelog-big-illustration_desktop_mac_en.png | Bin 0 -> 150881 bytes .../changelog-big-illustration_desktop_mac_es.png | Bin 0 -> 150923 bytes .../changelog-big-illustration_desktop_mac_fr.png | Bin 0 -> 149092 bytes .../changelog-big-illustration_desktop_mac_nl.png | Bin 0 -> 147845 bytes .../changelog-big-illustration_desktop_mac_pt.png | Bin 0 -> 147945 bytes .../changelog-big-illustration_desktop_windows.png | Bin 0 -> 29934 bytes ...angelog-big-illustration_desktop_windows_de.png | Bin 0 -> 30086 bytes ...angelog-big-illustration_desktop_windows_en.png | Bin 0 -> 29734 bytes .../changelog-big-illustration_libreoffice_en.png | Bin 0 -> 74393 bytes .../changelog-big-illustration_mobile_de.png | Bin 0 -> 239172 bytes .../changelog-big-illustration_mobile_en.png | Bin 0 -> 197297 bytes .../images/changelog-big-illustration_overleaf.svg | 1 + .../changelog-big-illustration_paraphrasing_de.png | Bin 0 -> 113290 bytes .../changelog-big-illustration_paraphrasing_en.png | Bin 0 -> 113957 bytes .../changelog-big-illustration_paraphrasing_es.png | Bin 0 -> 75267 bytes .../changelog-big-illustration_paraphrasing_fr.png | Bin 0 -> 73839 bytes .../changelog-big-illustration_paraphrasing_nl.png | Bin 0 -> 49321 bytes .../changelog-big-illustration_paraphrasing_pt.png | Bin 0 -> 111611 bytes .../images/changelog-big-illustration_slides.svg | 1 + .../changelog-big-illustration_style_guide_de.png | Bin 0 -> 40947 bytes .../changelog-big-illustration_style_guide_en.png | Bin 0 -> 40891 bytes .../changelog-big-illustration_style_guide_es.png | Bin 0 -> 41206 bytes .../changelog-big-illustration_style_guide_fr.png | Bin 0 -> 41518 bytes .../changelog-big-illustration_style_guide_nl.png | Bin 0 -> 42588 bytes .../changelog-big-illustration_style_guide_pt.png | Bin 0 -> 42509 bytes .../images/changelog-big-illustration_team.png | Bin 0 -> 83572 bytes .../changelog-big-illustration_thunderbird.png | Bin 0 -> 77585 bytes .../images/changelog-big-illustration_word.png | Bin 0 -> 122324 bytes .../images/changelog-illustration_app.png | Bin 0 -> 5465 bytes .../images/changelog-illustration_editor.png | Bin 0 -> 2322 bytes .../images/changelog-illustration_french.png | Bin 0 -> 9056 bytes .../images/changelog-illustration_libreoffice.png | Bin 0 -> 3415 bytes .../images/changelog-illustration_macos_app.png | Bin 0 -> 17538 bytes .../images/changelog-illustration_mobile.png | Bin 0 -> 5581 bytes .../images/changelog-illustration_overleaf.png | Bin 0 -> 3565 bytes .../images/changelog-illustration_paraphrasing.png | Bin 0 -> 4369 bytes .../images/changelog-illustration_slides.png | Bin 0 -> 3414 bytes .../images/changelog-illustration_spanish.png | Bin 0 -> 8235 bytes .../images/changelog-illustration_style.png | Bin 0 -> 4134 bytes .../images/changelog-illustration_style_guide.png | Bin 0 -> 3887 bytes .../images/changelog-illustration_team.png | Bin 0 -> 2655 bytes .../images/changelog-illustration_thunderbird.png | Bin 0 -> 4517 bytes .../images/changelog-illustration_translate.png | Bin 0 -> 3490 bytes .../images/changelog-illustration_word.png | Bin 0 -> 3754 bytes .../11.1.0_0/changelog/images/changelog-logo.svg | 1 + .../changelog/images/changelog-logo_no-claim.svg | 1 + .../changelog/images/changelog_2021_style_de.mp4 | Bin 0 -> 848481 bytes .../changelog/images/changelog_2021_style_en.mp4 | Bin 0 -> 788299 bytes .../changelog/images/changelog_2021_style_es.mp4 | Bin 0 -> 836853 bytes .../changelog/images/changelog_2021_style_fr.mp4 | Bin 0 -> 833512 bytes .../changelog/images/changelog_icon_lt.svg | 1 + .../11.1.0_0/changelog/images/eu_flag.svg | 1 + .../changelog/images/spanish-premium-video.mp4 | Bin 0 -> 127100 bytes .../11.1.0_0/chunks/116.8b7e94.js | 1 + .../11.1.0_0/chunks/275.f1d017.js | 1 + .../11.1.0_0/chunks/282.788b18.js | 1 + .../11.1.0_0/chunks/315.3883be.js | 1 + .../11.1.0_0/chunks/962.b5d5fd.js | 1 + .../11.1.0_0/common/base.css | 551 + .../11.1.0_0/common/fonts.css | 366 + .../11.1.0_0/common/loadFonts.js | 1 + .../11.1.0_0/common/smoothscroll.js | 667 + .../11.1.0_0/content.js | 181 + .../content/editors/google/gdocs-content.js | 1 + .../content/editors/google/gslides-content.js | 1 + .../11.1.0_0/content/executor.js | 1 + .../11.1.0_0/content/languagetool/injector.js | 1 + .../11.1.0_0/content/outlook/content.js | 1 + .../11.1.0_0/content/safari/injector.js | 1 + .../11.1.0_0/content/styles/lollipop.css | 543 + .../11.1.0_0/content/styles/shadow.css | 12532 +++++++++ .../11.1.0_0/content/styles/styles.css | 12630 +++++++++ .../11.1.0_0/content/thunderbird/content.js | 1 + .../11.1.0_0/core/TextFieldV2/ARCHITECTURE.md | 323 + .../core/language-detection/language-router.md | 464 + .../11.1.0_0/core/models/segment.xml | 6998 +++++ .../11.1.0_0/extension-loader.js | 1 + .../11.1.0_0/feedbackForm/feedbackForm.css | 861 + .../11.1.0_0/feedbackForm/feedbackForm.html | 56 + .../11.1.0_0/feedbackForm/feedbackForm.js | 36 + .../11.1.0_0/libs/segment.srx | 9108 +++++++ .../11.1.0_0/lollipop/demo.html | 135 + .../11.1.0_0/lollipop/test_cases.html | 83 + .../11.1.0_0/managed_settings.json | 43 + .../11.1.0_0/manifest.json | 90 + .../11.1.0_0/options/options.css | 4444 +++ .../11.1.0_0/options/options.html | 619 + .../11.1.0_0/options/options.js | 79 + .../11.1.0_0/popup/popup.css | 1729 ++ .../11.1.0_0/popup/popup.html | 136 + .../11.1.0_0/popup/popup.js | 143 + .../additional-error-suggestion.tsx | 141 + .../react/components/card-base/card-base.tsx | 371 + .../components/card-base/custom-card-base.tsx | 106 + .../react/components/card-base/drag-handle.tsx | 39 + .../react/components/card-content/card-content.tsx | 178 + .../react/components/countdown/countdown.tsx | 71 + .../11.1.0_0/react/components/diff/diff.tsx | 69 + .../components/editor-card/custom-editor-card.tsx | 62 + .../react/components/editor-card/editor-card.tsx | 206 + .../components/error-boundary/error-boundary.tsx | 30 + .../components/error-content/error-content.tsx | 540 + .../fix-sentence-content/fix-sentence-content.tsx | 119 + .../11.1.0_0/react/components/icon/icon.tsx | 288 + .../keyboard-navigation-hint.tsx | 26 + .../keyboard-navigation/keyboard-navigation.tsx | 278 + .../components/loading-content/loading-content.tsx | 41 + .../react/components/mascot-says/mascot-says.tsx | 36 + .../11.1.0_0/react/components/menu/menu.tsx | 71 + .../paraphrasing-content/paraphrasing-content.tsx | 448 + .../rephrase-content/rephrase-content.tsx | 35 + .../rephrasing-teaser/rephrasing-teaser.tsx | 91 + .../components/scrollable-area/scrollable-area.tsx | 74 + .../sentence-splitting-content.tsx | 67 + .../synonyms-content/synonyms-content.tsx | 212 + .../components/toolbox-content/toolbox-content.tsx | 292 + .../react/views/editor-card/editor-card.tsx | 34 + .../11.1.0_0/react/views/icon/icon.tsx | 40 + .../11.1.0_0/react/views/menu/menu.tsx | 13 + .../11.1.0_0/toolbox/toolbox.css | 4141 +++ .../11.1.0_0/toolbox/toolbox.html | 55 + .../11.1.0_0/toolbox/toolbox.js | 98 + .../11.1.0_0/trial/trial.js | 34 + .../11.1.0_0/validator/loadValidator.js | 1 + .../11.1.0_0/validator/validator.css | 258 + .../11.1.0_0/validator/validator.html | 69 + .../11.1.0_0/validator/validator.js | 133 + .../11.1.0_0/welcome/loginRedirectUri.html | 23 + .../11.1.0_0/welcome/loginRedirectUri.js | 1 + .../11.1.0_0/welcome/managedLoginRedirectUri.html | 23 + .../11.1.0_0/welcome/managedLoginRedirectUri.js | 1 + .../11.1.0_0/welcome/templates/index.html | 15 + .../11.1.0_0/welcome/welcome.css | 1288 + .../11.1.0_0/welcome/welcome.js | 1 + .../.config/net.imput.helium/Default/Favicons | Bin 0 -> 2326528 bytes .../net.imput.helium/Default/Favicons-journal | 0 .../Feature Engagement Tracker/AvailabilityDB/LOCK | 0 .../Feature Engagement Tracker/AvailabilityDB/LOG | 0 .../AvailabilityDB/LOG.old | 0 .../Feature Engagement Tracker/EventDB/LOCK | 0 .../Default/Feature Engagement Tracker/EventDB/LOG | 0 .../Feature Engagement Tracker/EventDB/LOG.old | 0 .../Default/File System/000/t/.usage | Bin 0 -> 24 bytes .../Default/File System/000/t/Paths/000003.log | 0 .../Default/File System/000/t/Paths/CURRENT | 1 + .../Default/File System/000/t/Paths/LOCK | 0 .../Default/File System/000/t/Paths/LOG | 2 + .../File System/000/t/Paths/MANIFEST-000001 | Bin 0 -> 41 bytes .../Default/File System/001/t/.usage | Bin 0 -> 24 bytes .../Default/File System/001/t/02/00000263 | 1 + .../Default/File System/001/t/Paths/000003.log | Bin 0 -> 120542 bytes .../Default/File System/001/t/Paths/CURRENT | 1 + .../Default/File System/001/t/Paths/LOCK | 0 .../Default/File System/001/t/Paths/LOG | 3 + .../Default/File System/001/t/Paths/LOG.old | 3 + .../File System/001/t/Paths/MANIFEST-000001 | Bin 0 -> 41 bytes .../Default/File System/002/t/.usage | Bin 0 -> 24 bytes .../Default/File System/002/t/Paths/000003.log | Bin 0 -> 1998 bytes .../Default/File System/002/t/Paths/CURRENT | 1 + .../Default/File System/002/t/Paths/LOCK | 0 .../Default/File System/002/t/Paths/LOG | 3 + .../Default/File System/002/t/Paths/LOG.old | 3 + .../File System/002/t/Paths/MANIFEST-000001 | Bin 0 -> 41 bytes .../Default/File System/003/t/.usage | Bin 0 -> 24 bytes .../Default/File System/003/t/Paths/000003.log | Bin 0 -> 832 bytes .../Default/File System/003/t/Paths/CURRENT | 1 + .../Default/File System/003/t/Paths/LOCK | 0 .../Default/File System/003/t/Paths/LOG | 2 + .../File System/003/t/Paths/MANIFEST-000001 | Bin 0 -> 41 bytes .../Default/File System/004/t/.usage | Bin 0 -> 24 bytes .../Default/File System/004/t/Paths/000003.log | 0 .../Default/File System/004/t/Paths/CURRENT | 1 + .../Default/File System/004/t/Paths/LOCK | 0 .../Default/File System/004/t/Paths/LOG | 2 + .../File System/004/t/Paths/MANIFEST-000001 | Bin 0 -> 41 bytes .../Default/File System/Origins/000003.log | Bin 0 -> 404 bytes .../Default/File System/Origins/CURRENT | 1 + .../Default/File System/Origins/LOCK | 0 .../Default/File System/Origins/LOG | 3 + .../Default/File System/Origins/LOG.old | 3 + .../Default/File System/Origins/MANIFEST-000001 | Bin 0 -> 41 bytes .../Default/GCM Store/Encryption/000003.log | 0 .../Default/GCM Store/Encryption/CURRENT | 1 + .../Default/GCM Store/Encryption/LOCK | 0 .../Default/GCM Store/Encryption/LOG | 3 + .../Default/GCM Store/Encryption/LOG.old | 3 + .../Default/GCM Store/Encryption/MANIFEST-000001 | Bin 0 -> 41 bytes .../net.imput.helium/Default/GPUCache/data_0 | Bin 0 -> 8192 bytes .../net.imput.helium/Default/GPUCache/data_1 | Bin 0 -> 270336 bytes .../net.imput.helium/Default/GPUCache/data_2 | Bin 0 -> 8192 bytes .../net.imput.helium/Default/GPUCache/data_3 | Bin 0 -> 8192 bytes .../net.imput.helium/Default/GPUCache/index | Bin 0 -> 262512 bytes .../.config/net.imput.helium/Default/History | Bin 0 -> 5373952 bytes .../net.imput.helium/Default/History-journal | Bin 0 -> 8720 bytes .../1/00/10 | Bin 0 -> 1262814 bytes .../1/00/11 | Bin 0 -> 1143367 bytes .../1/00/12 | Bin 0 -> 3023410 bytes .../1/00/13 | Bin 0 -> 206110 bytes .../1/00/14 | Bin 0 -> 748467 bytes .../1/00/15 | Bin 0 -> 783104 bytes .../1/00/16 | Bin 0 -> 1866236 bytes .../1/00/17 | Bin 0 -> 156115 bytes .../1/00/18 | Bin 0 -> 133155 bytes .../1/00/19 | Bin 0 -> 170006 bytes .../1/00/1a | Bin 0 -> 1645318 bytes .../1/00/1b | Bin 0 -> 85539 bytes .../1/00/1c | Bin 0 -> 4437524 bytes .../1/00/1d | Bin 0 -> 7531181 bytes .../1/00/4 | Bin 0 -> 104605 bytes .../1/00/a8 | Bin 0 -> 85457 bytes .../1/00/c | Bin 0 -> 73107 bytes .../1/00/d | Bin 0 -> 309514 bytes .../1/00/e | Bin 0 -> 252758 bytes .../1/00/f | Bin 0 -> 66965 bytes .../1/01/140 | Bin 0 -> 104551 bytes .../1/01/162 | Bin 0 -> 1853896 bytes .../1/01/174 | Bin 0 -> 843324 bytes .../1/01/18a | Bin 0 -> 169840 bytes .../1/01/18b | Bin 0 -> 156163 bytes .../1/01/18c | Bin 0 -> 3027092 bytes .../1/01/18d | Bin 0 -> 1263951 bytes .../1/01/18e | Bin 0 -> 372765 bytes .../1/01/18f | Bin 0 -> 309445 bytes .../1/01/190 | Bin 0 -> 133428 bytes .../1/01/191 | Bin 0 -> 73115 bytes .../1/01/192 | Bin 0 -> 1143483 bytes .../1/01/193 | Bin 0 -> 253466 bytes .../1/01/194 | Bin 0 -> 66965 bytes .../1/01/195 | Bin 0 -> 205986 bytes .../1/01/1a1 | Bin 0 -> 68244 bytes .../1/01/1aa | Bin 0 -> 1154565 bytes .../1/01/1ad | Bin 0 -> 746328 bytes .../1/01/1ae | Bin 0 -> 1642121 bytes .../1/01/1af | Bin 0 -> 783364 bytes .../1/01/1b0 | Bin 0 -> 7872846 bytes .../1/01/1b1 | Bin 0 -> 8260496 bytes .../000030.log | Bin 0 -> 1465744 bytes .../000033.ldb | Bin 0 -> 120975 bytes .../CURRENT | 1 + .../LOCK | 0 .../LOG | 3 + .../LOG.old | 9 + .../MANIFEST-000001 | Bin 0 -> 2236 bytes .../000011.log | Bin 0 -> 285 bytes .../000013.ldb | Bin 0 -> 998 bytes .../CURRENT | 1 + .../LOCK | 0 .../LOG | 3 + .../LOG.old | 3 + .../MANIFEST-000001 | Bin 0 -> 507 bytes .../2/00/b | Bin 0 -> 280825 bytes .../000004.log | Bin 0 -> 6115 bytes .../000005.ldb | Bin 0 -> 6193 bytes .../CURRENT | 1 + .../LOCK | 0 .../LOG | 3 + .../LOG.old | 3 + .../MANIFEST-000001 | Bin 0 -> 250 bytes .../1/00/2 | Bin 0 -> 3576105 bytes .../000004.log | 0 .../000005.ldb | Bin 0 -> 1711 bytes .../CURRENT | 1 + .../LOCK | 0 .../LOG | 6 + .../MANIFEST-000001 | Bin 0 -> 82 bytes .../https_app.tuta.com_0.indexeddb.blob/3/00/3 | Bin 0 -> 152541 bytes .../000014.log | 0 .../000016.ldb | Bin 0 -> 6213 bytes .../https_app.tuta.com_0.indexeddb.leveldb/CURRENT | 1 + .../https_app.tuta.com_0.indexeddb.leveldb/LOCK | 0 .../https_app.tuta.com_0.indexeddb.leveldb/LOG | 15 + .../https_app.tuta.com_0.indexeddb.leveldb/LOG.old | 3 + .../MANIFEST-000001 | Bin 0 -> 705 bytes .../000003.log | Bin 0 -> 2469 bytes .../CURRENT | 1 + .../LOCK | 0 .../LOG | 3 + .../LOG.old | 3 + .../MANIFEST-000001 | Bin 0 -> 23 bytes .../1/00/b | Bin 0 -> 283113 bytes .../000004.log | Bin 0 -> 2499 bytes .../000005.ldb | Bin 0 -> 5455 bytes .../CURRENT | 1 + .../LOCK | 0 .../LOG | 3 + .../LOG.old | 3 + .../MANIFEST-000001 | Bin 0 -> 250 bytes .../000003.log | Bin 0 -> 1718128 bytes .../CURRENT | 1 + .../LOCK | 0 .../https_chat.routstr.com_0.indexeddb.leveldb/LOG | 2 + .../MANIFEST-000001 | Bin 0 -> 23 bytes .../https_claude.ai_0.indexeddb.leveldb/000004.log | 0 .../https_claude.ai_0.indexeddb.leveldb/000005.ldb | Bin 0 -> 4936 bytes .../https_claude.ai_0.indexeddb.leveldb/CURRENT | 1 + .../https_claude.ai_0.indexeddb.leveldb/LOCK | 0 .../https_claude.ai_0.indexeddb.leveldb/LOG | 7 + .../https_claude.ai_0.indexeddb.leveldb/LOG.old | 2 + .../MANIFEST-000001 | Bin 0 -> 141 bytes .../000004.log | Bin 0 -> 95 bytes .../000005.ldb | Bin 0 -> 8362 bytes .../CURRENT | 1 + .../https_docs.google.com_0.indexeddb.leveldb/LOCK | 0 .../https_docs.google.com_0.indexeddb.leveldb/LOG | 3 + .../LOG.old | 3 + .../MANIFEST-000001 | Bin 0 -> 117 bytes .../https_drive.google.com_0.indexeddb.blob/1/00/8 | Bin 0 -> 193286 bytes .../https_drive.google.com_0.indexeddb.blob/1/00/9 | Bin 0 -> 800646 bytes .../000004.log | 0 .../000005.ldb | Bin 0 -> 457203 bytes .../CURRENT | 1 + .../LOCK | 0 .../https_drive.google.com_0.indexeddb.leveldb/LOG | 6 + .../MANIFEST-000001 | Bin 0 -> 104 bytes .../https_duck.ai_0.indexeddb.blob/1/00/2 | Bin 0 -> 16965 bytes .../https_duck.ai_0.indexeddb.blob/1/00/3 | Bin 0 -> 237157 bytes .../https_duck.ai_0.indexeddb.blob/1/00/4 | Bin 0 -> 368917 bytes .../https_duck.ai_0.indexeddb.blob/1/00/5 | Bin 0 -> 98900 bytes .../https_duck.ai_0.indexeddb.blob/1/00/6 | Bin 0 -> 116369 bytes .../https_duck.ai_0.indexeddb.leveldb/000011.log | Bin 0 -> 870159 bytes .../https_duck.ai_0.indexeddb.leveldb/000013.ldb | Bin 0 -> 165612 bytes .../https_duck.ai_0.indexeddb.leveldb/CURRENT | 1 + .../https_duck.ai_0.indexeddb.leveldb/LOCK | 0 .../https_duck.ai_0.indexeddb.leveldb/LOG | 3 + .../https_duck.ai_0.indexeddb.leveldb/LOG.old | 3 + .../MANIFEST-000001 | Bin 0 -> 635 bytes .../000007.log | Bin 0 -> 452150 bytes .../000009.ldb | Bin 0 -> 88203 bytes .../https_github.com_0.indexeddb.leveldb/CURRENT | 1 + .../https_github.com_0.indexeddb.leveldb/LOCK | 0 .../https_github.com_0.indexeddb.leveldb/LOG | 3 + .../https_github.com_0.indexeddb.leveldb/LOG.old | 3 + .../MANIFEST-000001 | Bin 0 -> 1965 bytes .../000003.log | Bin 0 -> 187388 bytes .../https_grainrad.com_0.indexeddb.leveldb/CURRENT | 1 + .../https_grainrad.com_0.indexeddb.leveldb/LOCK | 0 .../https_grainrad.com_0.indexeddb.leveldb/LOG | 3 + .../https_grainrad.com_0.indexeddb.leveldb/LOG.old | 2 + .../MANIFEST-000001 | Bin 0 -> 23 bytes .../https_habr.com_0.indexeddb.leveldb/000007.log | 0 .../https_habr.com_0.indexeddb.leveldb/000009.ldb | Bin 0 -> 648 bytes .../https_habr.com_0.indexeddb.leveldb/CURRENT | 1 + .../https_habr.com_0.indexeddb.leveldb/LOCK | 0 .../https_habr.com_0.indexeddb.leveldb/LOG | 15 + .../https_habr.com_0.indexeddb.leveldb/LOG.old | 3 + .../MANIFEST-000001 | Bin 0 -> 249 bytes .../000003.log | Bin 0 -> 23853 bytes .../CURRENT | 1 + .../LOCK | 0 .../LOG | 2 + .../MANIFEST-000001 | Bin 0 -> 23 bytes .../https_lumo.proton.me_0.indexeddb.blob/1/03/304 | Bin 0 -> 231983 bytes .../https_lumo.proton.me_0.indexeddb.blob/3/00/11 | Bin 0 -> 109120 bytes .../https_lumo.proton.me_0.indexeddb.blob/3/00/13 | Bin 0 -> 99364 bytes .../https_lumo.proton.me_0.indexeddb.blob/3/00/15 | Bin 0 -> 90032 bytes .../https_lumo.proton.me_0.indexeddb.blob/3/00/17 | Bin 0 -> 79616 bytes .../https_lumo.proton.me_0.indexeddb.blob/3/00/19 | Bin 0 -> 79700 bytes .../https_lumo.proton.me_0.indexeddb.blob/3/00/1b | Bin 0 -> 96404 bytes .../https_lumo.proton.me_0.indexeddb.blob/3/00/1d | Bin 0 -> 591688 bytes .../https_lumo.proton.me_0.indexeddb.blob/3/00/1f | Bin 0 -> 133504 bytes .../https_lumo.proton.me_0.indexeddb.blob/3/00/21 | Bin 0 -> 183044 bytes .../https_lumo.proton.me_0.indexeddb.blob/3/00/23 | Bin 0 -> 92400 bytes .../https_lumo.proton.me_0.indexeddb.blob/3/00/25 | Bin 0 -> 76536 bytes .../https_lumo.proton.me_0.indexeddb.blob/3/00/27 | Bin 0 -> 120644 bytes .../https_lumo.proton.me_0.indexeddb.blob/3/00/29 | Bin 0 -> 65620 bytes .../https_lumo.proton.me_0.indexeddb.blob/3/00/2b | Bin 0 -> 85704 bytes .../https_lumo.proton.me_0.indexeddb.blob/3/00/2d | Bin 0 -> 73148 bytes .../https_lumo.proton.me_0.indexeddb.blob/3/00/2f | Bin 0 -> 84752 bytes .../https_lumo.proton.me_0.indexeddb.blob/3/00/3 | Bin 0 -> 99000 bytes .../https_lumo.proton.me_0.indexeddb.blob/3/00/31 | Bin 0 -> 265008 bytes .../https_lumo.proton.me_0.indexeddb.blob/3/00/33 | Bin 0 -> 138764 bytes .../https_lumo.proton.me_0.indexeddb.blob/3/00/35 | Bin 0 -> 106800 bytes .../https_lumo.proton.me_0.indexeddb.blob/3/00/5 | Bin 0 -> 596804 bytes .../https_lumo.proton.me_0.indexeddb.blob/3/00/7 | Bin 0 -> 80464 bytes .../https_lumo.proton.me_0.indexeddb.blob/3/00/9 | Bin 0 -> 122272 bytes .../https_lumo.proton.me_0.indexeddb.blob/3/00/b | Bin 0 -> 77384 bytes .../https_lumo.proton.me_0.indexeddb.blob/3/00/d | Bin 0 -> 95760 bytes .../https_lumo.proton.me_0.indexeddb.blob/3/00/f | Bin 0 -> 79788 bytes .../https_lumo.proton.me_0.indexeddb.blob/3/00/ff | Bin 0 -> 209096 bytes .../https_lumo.proton.me_0.indexeddb.blob/3/02/28f | Bin 0 -> 91594 bytes .../https_lumo.proton.me_0.indexeddb.blob/3/07/73c | Bin 0 -> 134396 bytes .../https_lumo.proton.me_0.indexeddb.blob/3/08/8ce | Bin 0 -> 116656 bytes .../https_lumo.proton.me_0.indexeddb.blob/3/09/996 | Bin 0 -> 171546 bytes .../000862.log | Bin 0 -> 3054580 bytes .../000864.ldb | Bin 0 -> 2136698 bytes .../000865.ldb | Bin 0 -> 903902 bytes .../CURRENT | 1 + .../https_lumo.proton.me_0.indexeddb.leveldb/LOCK | 0 .../https_lumo.proton.me_0.indexeddb.leveldb/LOG | 58 + .../LOG.old | 80 + .../MANIFEST-000001 | Bin 0 -> 88166 bytes .../000004.log | Bin 0 -> 1326337 bytes .../000005.ldb | Bin 0 -> 2945 bytes .../CURRENT | 1 + .../https_mail.google.com_0.indexeddb.leveldb/LOCK | 0 .../https_mail.google.com_0.indexeddb.leveldb/LOG | 3 + .../LOG.old | 3 + .../MANIFEST-000001 | Bin 0 -> 72 bytes .../https_mail.proton.me_0.indexeddb.blob/1/00/17 | Bin 0 -> 251146 bytes .../000012.ldb | Bin 0 -> 980 bytes .../000044.log | Bin 0 -> 9232 bytes .../000046.ldb | Bin 0 -> 1516 bytes .../CURRENT | 1 + .../https_mail.proton.me_0.indexeddb.leveldb/LOCK | 0 .../https_mail.proton.me_0.indexeddb.leveldb/LOG | 3 + .../LOG.old | 4 + .../MANIFEST-000001 | Bin 0 -> 2509 bytes .../https_mynixos.com_0.indexeddb.blob/4/00/2 | Bin 0 -> 42190156 bytes .../000004.log | Bin 0 -> 4788 bytes .../000005.ldb | Bin 0 -> 1268 bytes .../https_mynixos.com_0.indexeddb.leveldb/CURRENT | 1 + .../https_mynixos.com_0.indexeddb.leveldb/LOCK | 0 .../https_mynixos.com_0.indexeddb.leveldb/LOG | 6 + .../MANIFEST-000001 | Bin 0 -> 112 bytes .../000004.log | 0 .../000005.ldb | Bin 0 -> 7722 bytes .../https_novelai.net_0.indexeddb.leveldb/CURRENT | 1 + .../https_novelai.net_0.indexeddb.leveldb/LOCK | 0 .../https_novelai.net_0.indexeddb.leveldb/LOG | 7 + .../https_novelai.net_0.indexeddb.leveldb/LOG.old | 3 + .../MANIFEST-000001 | Bin 0 -> 97 bytes .../000004.log | 0 .../000005.ldb | Bin 0 -> 909 bytes .../CURRENT | 1 + .../https_openrouter.ai_0.indexeddb.leveldb/LOCK | 0 .../https_openrouter.ai_0.indexeddb.leveldb/LOG | 6 + .../MANIFEST-000001 | Bin 0 -> 110 bytes .../000004.log | 0 .../000005.ldb | Bin 0 -> 10111 bytes .../CURRENT | 1 + .../LOCK | 0 .../LOG | 7 + .../LOG.old | 2 + .../MANIFEST-000001 | Bin 0 -> 109 bytes .../000003.log | Bin 0 -> 1720 bytes .../CURRENT | 1 + .../LOCK | 0 .../LOG | 2 + .../MANIFEST-000001 | Bin 0 -> 23 bytes .../https_spotubedl.com_0.indexeddb.blob/1/00/2 | Bin 0 -> 9031391 bytes .../000003.log | Bin 0 -> 10963 bytes .../CURRENT | 1 + .../https_spotubedl.com_0.indexeddb.leveldb/LOCK | 0 .../https_spotubedl.com_0.indexeddb.leveldb/LOG | 3 + .../LOG.old | 3 + .../MANIFEST-000001 | Bin 0 -> 23 bytes .../https_windows93.net_0.indexeddb.blob/1/00/cf | Bin 0 -> 996488 bytes .../https_windows93.net_0.indexeddb.blob/2/00/10 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/11 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/12 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/13 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/14 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/15 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/16 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/17 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/18 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/19 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/1a | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/1b | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/1c | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/1d | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/1e | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/1f | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/2 | 6 + .../https_windows93.net_0.indexeddb.blob/2/00/20 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/21 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/22 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/23 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/24 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/25 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/26 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/27 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/28 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/29 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/2a | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/2b | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/2c | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/2d | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/2e | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/2f | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/3 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/30 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/31 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/32 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/33 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/34 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/35 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/36 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/37 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/38 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/39 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/3a | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/3b | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/3c | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/3d | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/3e | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/3f | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/4 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/40 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/41 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/42 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/43 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/44 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/45 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/46 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/47 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/48 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/49 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/4a | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/4b | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/4c | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/4d | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/4e | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/4f | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/5 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/50 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/51 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/52 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/53 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/54 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/55 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/56 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/57 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/58 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/59 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/5a | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/5b | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/5c | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/5d | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/5e | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/5f | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/6 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/60 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/61 | 1 + .../https_windows93.net_0.indexeddb.blob/2/00/62 | 8 + .../https_windows93.net_0.indexeddb.blob/2/00/63 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/64 | 6 + .../https_windows93.net_0.indexeddb.blob/2/00/66 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/67 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/68 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/69 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/6a | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/6b | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/6c | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/6d | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/6e | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/6f | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/7 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/70 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/71 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/72 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/73 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/74 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/75 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/76 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/77 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/78 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/79 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/7a | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/7b | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/7c | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/7d | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/7e | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/7f | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/8 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/80 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/81 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/82 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/83 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/84 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/85 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/86 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/87 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/88 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/89 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/8a | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/8b | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/8c | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/8d | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/8e | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/8f | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/9 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/90 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/91 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/92 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/93 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/94 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/95 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/96 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/97 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/98 | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/9a | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/9b | 6222 +++++ .../https_windows93.net_0.indexeddb.blob/2/00/9c | 2401 ++ .../https_windows93.net_0.indexeddb.blob/2/00/9d | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/9e | 296 + .../https_windows93.net_0.indexeddb.blob/2/00/a | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/b | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/c | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/d | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/e | 3 + .../https_windows93.net_0.indexeddb.blob/2/00/f | 3 + .../000004.log | 0 .../000005.ldb | Bin 0 -> 122818 bytes .../CURRENT | 1 + .../https_windows93.net_0.indexeddb.leveldb/LOCK | 0 .../https_windows93.net_0.indexeddb.leveldb/LOG | 6 + .../MANIFEST-000001 | Bin 0 -> 94 bytes .../000006.log | 0 .../000008.ldb | Bin 0 -> 929 bytes .../https_www.avito.ru_0.indexeddb.leveldb/CURRENT | 1 + .../https_www.avito.ru_0.indexeddb.leveldb/LOCK | 0 .../https_www.avito.ru_0.indexeddb.leveldb/LOG | 18 + .../MANIFEST-000001 | Bin 0 -> 504 bytes .../000004.log | 0 .../000005.ldb | Bin 0 -> 1319 bytes .../CURRENT | 1 + .../LOCK | 0 .../LOG | 6 + .../MANIFEST-000001 | Bin 0 -> 84 bytes .../000003.log | Bin 0 -> 6554 bytes .../CURRENT | 1 + .../https_www.fandom.com_0.indexeddb.leveldb/LOCK | 0 .../https_www.fandom.com_0.indexeddb.leveldb/LOG | 3 + .../LOG.old | 2 + .../MANIFEST-000001 | Bin 0 -> 23 bytes .../000003.log | Bin 0 -> 211784 bytes .../https_www.kimi.com_0.indexeddb.leveldb/CURRENT | 1 + .../https_www.kimi.com_0.indexeddb.leveldb/LOCK | 0 .../https_www.kimi.com_0.indexeddb.leveldb/LOG | 3 + .../https_www.kimi.com_0.indexeddb.leveldb/LOG.old | 2 + .../MANIFEST-000001 | Bin 0 -> 23 bytes .../https_www.kucoin.com_0.indexeddb.blob/2/00/3 | Bin 0 -> 147554 bytes .../https_www.kucoin.com_0.indexeddb.blob/2/00/5 | Bin 0 -> 230829 bytes .../000003.log | Bin 0 -> 7466 bytes .../CURRENT | 1 + .../https_www.kucoin.com_0.indexeddb.leveldb/LOCK | 0 .../https_www.kucoin.com_0.indexeddb.leveldb/LOG | 2 + .../MANIFEST-000001 | Bin 0 -> 23 bytes .../000018.log | Bin 0 -> 1015431 bytes .../000020.ldb | Bin 0 -> 241156 bytes .../https_www.ozon.ru_0.indexeddb.leveldb/CURRENT | 1 + .../https_www.ozon.ru_0.indexeddb.leveldb/LOCK | 0 .../https_www.ozon.ru_0.indexeddb.leveldb/LOG | 3 + .../https_www.ozon.ru_0.indexeddb.leveldb/LOG.old | 3 + .../MANIFEST-000001 | Bin 0 -> 6726 bytes .../000055.log | Bin 0 -> 1909515 bytes .../000057.ldb | Bin 0 -> 28014 bytes .../CURRENT | 1 + .../LOCK | 0 .../LOG | 3 + .../LOG.old | 39 + .../MANIFEST-000001 | Bin 0 -> 6051 bytes .../000056.log | 0 .../000059.ldb | Bin 0 -> 3488 bytes .../CURRENT | 1 + .../LOCK | 0 .../LOG | 209 + .../MANIFEST-000001 | Bin 0 -> 4495 bytes .../16/00/10 | Bin 0 -> 186834 bytes .../000137.ldb | Bin 0 -> 123251 bytes .../000138.log | Bin 0 -> 42681 bytes .../000139.ldb | Bin 0 -> 1768840 bytes .../CURRENT | 1 + .../https_www.youtube.com_0.indexeddb.leveldb/LOCK | 0 .../https_www.youtube.com_0.indexeddb.leveldb/LOG | 24 + .../LOG.old | 30 + .../MANIFEST-000001 | Bin 0 -> 12484 bytes .../.config/net.imput.helium/Default/LOCK | 0 .../.config/net.imput.helium/Default/LOG | 0 .../.config/net.imput.helium/Default/LOG.old | 0 .../blockjmkbacgjkknlgpkjjiijinjdanf/001261.ldb | Bin 0 -> 1465 bytes .../blockjmkbacgjkknlgpkjjiijinjdanf/001262.ldb | Bin 0 -> 3787321 bytes .../blockjmkbacgjkknlgpkjjiijinjdanf/001263.ldb | Bin 0 -> 2857982 bytes .../blockjmkbacgjkknlgpkjjiijinjdanf/001264.ldb | Bin 0 -> 2460583 bytes .../blockjmkbacgjkknlgpkjjiijinjdanf/001265.ldb | Bin 0 -> 2593093 bytes .../blockjmkbacgjkknlgpkjjiijinjdanf/001266.ldb | Bin 0 -> 2348124 bytes .../blockjmkbacgjkknlgpkjjiijinjdanf/001267.ldb | Bin 0 -> 2271511 bytes .../blockjmkbacgjkknlgpkjjiijinjdanf/001268.ldb | Bin 0 -> 2676125 bytes .../blockjmkbacgjkknlgpkjjiijinjdanf/001269.log | Bin 0 -> 9366 bytes .../blockjmkbacgjkknlgpkjjiijinjdanf/001271.ldb | Bin 0 -> 2120286 bytes .../blockjmkbacgjkknlgpkjjiijinjdanf/001272.ldb | Bin 0 -> 8061649 bytes .../blockjmkbacgjkknlgpkjjiijinjdanf/001273.ldb | Bin 0 -> 12656892 bytes .../blockjmkbacgjkknlgpkjjiijinjdanf/001274.ldb | Bin 0 -> 2366432 bytes .../blockjmkbacgjkknlgpkjjiijinjdanf/CURRENT | 1 + .../blockjmkbacgjkknlgpkjjiijinjdanf/LOCK | 0 .../blockjmkbacgjkknlgpkjjiijinjdanf/LOG | 79 + .../blockjmkbacgjkknlgpkjjiijinjdanf/LOG.old | 58 + .../MANIFEST-000001 | Bin 0 -> 96045 bytes .../eimadpbcbfnmbkopoojfekhnkhdbieeh/000005.ldb | Bin 0 -> 2028697 bytes .../eimadpbcbfnmbkopoojfekhnkhdbieeh/000027.ldb | Bin 0 -> 7031 bytes .../eimadpbcbfnmbkopoojfekhnkhdbieeh/000028.log | Bin 0 -> 1960773 bytes .../eimadpbcbfnmbkopoojfekhnkhdbieeh/000029.ldb | Bin 0 -> 2483184 bytes .../eimadpbcbfnmbkopoojfekhnkhdbieeh/CURRENT | 1 + .../eimadpbcbfnmbkopoojfekhnkhdbieeh/LOCK | 0 .../eimadpbcbfnmbkopoojfekhnkhdbieeh/LOG | 27 + .../eimadpbcbfnmbkopoojfekhnkhdbieeh/LOG.old | 21 + .../MANIFEST-000001 | Bin 0 -> 1042 bytes .../fgmjlmbojbkmdpofahffgcpkhkngfpef/000003.log | Bin 0 -> 290 bytes .../fgmjlmbojbkmdpofahffgcpkhkngfpef/CURRENT | 1 + .../fgmjlmbojbkmdpofahffgcpkhkngfpef/LOCK | 0 .../fgmjlmbojbkmdpofahffgcpkhkngfpef/LOG | 3 + .../fgmjlmbojbkmdpofahffgcpkhkngfpef/LOG.old | 2 + .../MANIFEST-000001 | Bin 0 -> 41 bytes .../fhkphphbadjkepgfljndicmgdlndmoke/000003.log | Bin 0 -> 50 bytes .../fhkphphbadjkepgfljndicmgdlndmoke/CURRENT | 1 + .../fhkphphbadjkepgfljndicmgdlndmoke/LOCK | 0 .../fhkphphbadjkepgfljndicmgdlndmoke/LOG | 3 + .../fhkphphbadjkepgfljndicmgdlndmoke/LOG.old | 3 + .../MANIFEST-000001 | Bin 0 -> 41 bytes .../fjkmabmdepjfammlpliljpnbhleegehm/000003.log | Bin 0 -> 161 bytes .../fjkmabmdepjfammlpliljpnbhleegehm/CURRENT | 1 + .../fjkmabmdepjfammlpliljpnbhleegehm/LOCK | 0 .../fjkmabmdepjfammlpliljpnbhleegehm/LOG | 3 + .../fjkmabmdepjfammlpliljpnbhleegehm/LOG.old | 3 + .../MANIFEST-000001 | Bin 0 -> 41 bytes .../ghmbeldphafepmbegfdlkpapadhbakde/000005.ldb | Bin 0 -> 4983620 bytes .../ghmbeldphafepmbegfdlkpapadhbakde/000272.ldb | Bin 0 -> 1693029 bytes .../ghmbeldphafepmbegfdlkpapadhbakde/000274.ldb | Bin 0 -> 5023102 bytes .../ghmbeldphafepmbegfdlkpapadhbakde/000275.log | Bin 0 -> 198152 bytes .../ghmbeldphafepmbegfdlkpapadhbakde/000276.ldb | Bin 0 -> 3419403 bytes .../ghmbeldphafepmbegfdlkpapadhbakde/CURRENT | 1 + .../ghmbeldphafepmbegfdlkpapadhbakde/LOCK | 0 .../ghmbeldphafepmbegfdlkpapadhbakde/LOG | 171 + .../ghmbeldphafepmbegfdlkpapadhbakde/LOG.old | 213 + .../MANIFEST-000001 | Bin 0 -> 11080 bytes .../lanfdkkpgfjfdikkncbnojekcppdebfp/000003.log | Bin 0 -> 50 bytes .../lanfdkkpgfjfdikkncbnojekcppdebfp/CURRENT | 1 + .../lanfdkkpgfjfdikkncbnojekcppdebfp/LOCK | 0 .../lanfdkkpgfjfdikkncbnojekcppdebfp/LOG | 3 + .../lanfdkkpgfjfdikkncbnojekcppdebfp/LOG.old | 3 + .../MANIFEST-000001 | Bin 0 -> 41 bytes .../nljkibfhlpcnanjgbnlnbjecgicbjkge/000003.log | Bin 0 -> 13000 bytes .../nljkibfhlpcnanjgbnlnbjecgicbjkge/CURRENT | 1 + .../nljkibfhlpcnanjgbnlnbjecgicbjkge/LOCK | 0 .../nljkibfhlpcnanjgbnlnbjecgicbjkge/LOG | 3 + .../nljkibfhlpcnanjgbnlnbjecgicbjkge/LOG.old | 3 + .../MANIFEST-000001 | Bin 0 -> 41 bytes .../oboonakemofpalcgghocfoadofidjkkk/000003.log | Bin 0 -> 88715 bytes .../oboonakemofpalcgghocfoadofidjkkk/CURRENT | 1 + .../oboonakemofpalcgghocfoadofidjkkk/LOCK | 0 .../oboonakemofpalcgghocfoadofidjkkk/LOG | 3 + .../oboonakemofpalcgghocfoadofidjkkk/LOG.old | 3 + .../MANIFEST-000001 | Bin 0 -> 41 bytes .../ogfcmafjalglgifnmanfmnieipoejdcf/000003.log | Bin 0 -> 2784797 bytes .../ogfcmafjalglgifnmanfmnieipoejdcf/CURRENT | 1 + .../ogfcmafjalglgifnmanfmnieipoejdcf/LOCK | 0 .../ogfcmafjalglgifnmanfmnieipoejdcf/LOG | 3 + .../ogfcmafjalglgifnmanfmnieipoejdcf/LOG.old | 3 + .../MANIFEST-000001 | Bin 0 -> 41 bytes .../oladmjdebphlnjjcnomfhhbfdldiimaf/000003.log | Bin 0 -> 64923 bytes .../oladmjdebphlnjjcnomfhhbfdldiimaf/CURRENT | 1 + .../oladmjdebphlnjjcnomfhhbfdldiimaf/LOCK | 0 .../oladmjdebphlnjjcnomfhhbfdldiimaf/LOG | 3 + .../oladmjdebphlnjjcnomfhhbfdldiimaf/LOG.old | 3 + .../MANIFEST-000001 | Bin 0 -> 41 bytes .../oldceeleldhonbafppcapldpdifcinji/000003.log | Bin 0 -> 1856720 bytes .../oldceeleldhonbafppcapldpdifcinji/CURRENT | 1 + .../oldceeleldhonbafppcapldpdifcinji/LOCK | 0 .../oldceeleldhonbafppcapldpdifcinji/LOG | 3 + .../oldceeleldhonbafppcapldpdifcinji/LOG.old | 3 + .../MANIFEST-000001 | Bin 0 -> 41 bytes .../olnbjpaejebpnokblkepbphhembdicik/000003.log | Bin 0 -> 50 bytes .../olnbjpaejebpnokblkepbphhembdicik/CURRENT | 1 + .../olnbjpaejebpnokblkepbphhembdicik/LOCK | 0 .../olnbjpaejebpnokblkepbphhembdicik/LOG | 3 + .../olnbjpaejebpnokblkepbphhembdicik/LOG.old | 3 + .../MANIFEST-000001 | Bin 0 -> 41 bytes .../Default/Local Storage/leveldb/000005.ldb | Bin 0 -> 10783 bytes .../Default/Local Storage/leveldb/001192.ldb | Bin 0 -> 2781026 bytes .../Default/Local Storage/leveldb/001193.ldb | Bin 0 -> 1370378 bytes .../Default/Local Storage/leveldb/001195.ldb | Bin 0 -> 18617 bytes .../Default/Local Storage/leveldb/001197.ldb | Bin 0 -> 18738 bytes .../Default/Local Storage/leveldb/001199.log | Bin 0 -> 645 bytes .../Default/Local Storage/leveldb/001200.ldb | Bin 0 -> 22394 bytes .../Default/Local Storage/leveldb/CURRENT | 1 + .../Default/Local Storage/leveldb/LOCK | 0 .../Default/Local Storage/leveldb/LOG | 6 + .../Default/Local Storage/leveldb/LOG.old | 52 + .../Default/Local Storage/leveldb/MANIFEST-000001 | Bin 0 -> 88624 bytes .../.config/net.imput.helium/Default/Login Data | Bin 0 -> 40960 bytes .../Default/Login Data For Account | Bin 0 -> 40960 bytes .../Default/Login Data For Account-journal | 0 .../net.imput.helium/Default/Login Data-journal | 0 .../blockjmkbacgjkknlgpkjjiijinjdanf/000003.log | Bin 0 -> 5092 bytes .../blockjmkbacgjkknlgpkjjiijinjdanf/CURRENT | 1 + .../blockjmkbacgjkknlgpkjjiijinjdanf/LOCK | 0 .../blockjmkbacgjkknlgpkjjiijinjdanf/LOG | 3 + .../blockjmkbacgjkknlgpkjjiijinjdanf/LOG.old | 3 + .../MANIFEST-000001 | Bin 0 -> 41 bytes .../oboonakemofpalcgghocfoadofidjkkk/000003.log | Bin 0 -> 1254 bytes .../oboonakemofpalcgghocfoadofidjkkk/CURRENT | 1 + .../oboonakemofpalcgghocfoadofidjkkk/LOCK | 0 .../oboonakemofpalcgghocfoadofidjkkk/LOG | 3 + .../oboonakemofpalcgghocfoadofidjkkk/LOG.old | 3 + .../MANIFEST-000001 | Bin 0 -> 41 bytes .../oldceeleldhonbafppcapldpdifcinji/000003.log | Bin 0 -> 646 bytes .../oldceeleldhonbafppcapldpdifcinji/CURRENT | 1 + .../oldceeleldhonbafppcapldpdifcinji/LOCK | 0 .../oldceeleldhonbafppcapldpdifcinji/LOG | 3 + .../oldceeleldhonbafppcapldpdifcinji/LOG.old | 3 + .../MANIFEST-000001 | Bin 0 -> 41 bytes .../net.imput.helium/Default/MediaDeviceSalts | Bin 0 -> 24576 bytes .../Default/MediaDeviceSalts-journal | 0 .../Default/Network Action Predictor | Bin 0 -> 688128 bytes .../Default/Network Action Predictor-journal | 0 .../Default/Network Persistent State | 1 + .../Default/PersistentOriginTrials/LOCK | 0 .../Default/PersistentOriginTrials/LOG | 0 .../Default/PersistentOriginTrials/LOG.old | 0 .../Default/Platform Notifications/000003.log | Bin 0 -> 1195 bytes .../Default/Platform Notifications/CURRENT | 1 + .../Default/Platform Notifications/LOCK | 0 .../Default/Platform Notifications/LOG | 3 + .../Default/Platform Notifications/LOG.old | 3 + .../Default/Platform Notifications/MANIFEST-000001 | Bin 0 -> 41 bytes .../.config/net.imput.helium/Default/Preferences | 1 + .../.config/net.imput.helium/Default/PreferredApps | 1 + .../.config/net.imput.helium/Default/README | 1 + .../Default/SCT Auditing Pending Reports | 1 + .../net.imput.helium/Default/Secure Preferences | 1 + .../Segmentation Platform/SegmentInfoDB/LOCK | 0 .../Segmentation Platform/SegmentInfoDB/LOG | 0 .../Segmentation Platform/SegmentInfoDB/LOG.old | 0 .../Default/Segmentation Platform/SignalDB/LOCK | 0 .../Default/Segmentation Platform/SignalDB/LOG | 0 .../Default/Segmentation Platform/SignalDB/LOG.old | 0 .../SignalStorageConfigDB/LOCK | 0 .../SignalStorageConfigDB/LOG | 0 .../SignalStorageConfigDB/LOG.old | 0 .../net.imput.helium/Default/ServerCertificate | Bin 0 -> 20480 bytes .../Default/ServerCertificate-journal | 0 .../5d38329751e8525d_0 | Bin 0 -> 440 bytes .../167ac202-830b-4cc9-823a-c0eef551d304/index | Bin 0 -> 24 bytes .../index-dir/the-real-index | Bin 0 -> 72 bytes .../index.txt | Bin 0 -> 178 bytes .../ca2b8576-224d-4751-85f1-ceb55d54a591/index | Bin 0 -> 24 bytes .../index-dir/the-real-index | Bin 0 -> 48 bytes .../index.txt | Bin 0 -> 152 bytes .../70c13bf7-078b-4e9c-ba3b-5f9bf375ae96/index | Bin 0 -> 24 bytes .../index-dir/the-real-index | Bin 0 -> 48 bytes .../075aeca7e556c651_0 | Bin 0 -> 8616 bytes .../075aeca7e556c651_1 | Bin 0 -> 3471 bytes .../0a41c5226f4ea45c_0 | Bin 0 -> 735670 bytes .../0fc09f38b2295ac0_0 | Bin 0 -> 79751 bytes .../0fc09f38b2295ac0_1 | Bin 0 -> 169764 bytes .../1f3240a2dd73eca6_0 | Bin 0 -> 15176 bytes .../1f3240a2dd73eca6_1 | Bin 0 -> 30666 bytes .../2932e1153c64eb30_0 | Bin 0 -> 14930 bytes .../35dcfa5da122dc3f_0 | Bin 0 -> 10691682 bytes .../35dcfa5da122dc3f_1 | Bin 0 -> 20538660 bytes .../44acd6df7b0f6c29_0 | Bin 0 -> 526356 bytes .../48234e7037907372_0 | Bin 0 -> 104709 bytes .../48234e7037907372_1 | Bin 0 -> 38220 bytes .../61bbe64726f600d2_0 | Bin 0 -> 29091 bytes .../61bbe64726f600d2_1 | Bin 0 -> 11790 bytes .../6be34d05411f8a58_0 | Bin 0 -> 6666 bytes .../6be34d05411f8a58_1 | Bin 0 -> 11822 bytes .../80dca37114654a65_0 | Bin 0 -> 121303 bytes .../80dca37114654a65_1 | Bin 0 -> 94323 bytes .../8300925a06792860_0 | Bin 0 -> 3161 bytes .../8300925a06792860_1 | Bin 0 -> 3418 bytes .../846f31c2d5d83610_0 | Bin 0 -> 51984 bytes .../846f31c2d5d83610_1 | Bin 0 -> 111260 bytes .../a23df982d61b6504_0 | Bin 0 -> 39158 bytes .../a23df982d61b6504_1 | Bin 0 -> 92586 bytes .../a9e53d396796cb16_0 | Bin 0 -> 1836 bytes .../c037cc6d848ee571_0 | Bin 0 -> 9598 bytes .../c548304d03e754fa_0 | Bin 0 -> 8410 bytes .../c548304d03e754fa_1 | Bin 0 -> 10390 bytes .../c6b55a8840308240_0 | Bin 0 -> 10129 bytes .../c6b55a8840308240_1 | Bin 0 -> 21214 bytes .../cf370ffc2f4673ee_0 | Bin 0 -> 2561516 bytes .../cf370ffc2f4673ee_1 | Bin 0 -> 1740201 bytes .../da12145b12f3c5e5_0 | Bin 0 -> 2936629 bytes .../de9318660da488d9_0 | Bin 0 -> 71387 bytes .../de9318660da488d9_1 | Bin 0 -> 33821 bytes .../e293b17b64b4e482_0 | Bin 0 -> 5404 bytes .../754e3171-62ad-49e1-9eb1-5b252d428161/index | Bin 0 -> 24 bytes .../index-dir/the-real-index | Bin 0 -> 576 bytes .../00ba5fc263b59bcc_0 | Bin 0 -> 1411 bytes .../0222ffa3c71a476b_0 | Bin 0 -> 1975 bytes .../027c813f28eb3d53_0 | Bin 0 -> 1561 bytes .../02ce44654c978c4c_0 | Bin 0 -> 1651 bytes .../04babee2bfa8b48c_0 | Bin 0 -> 1834 bytes .../06c49d2fa0ad4bcd_0 | Bin 0 -> 1614 bytes .../08000439b4130129_0 | Bin 0 -> 2084 bytes .../0b3bd81b114681fa_0 | Bin 0 -> 1550 bytes .../0b8c705721509f10_0 | Bin 0 -> 1526 bytes .../0db7075bc130b313_0 | Bin 0 -> 1652 bytes .../0dbec196046ed063_0 | Bin 0 -> 1717 bytes .../0e68ef3e3bc686b2_0 | Bin 0 -> 1564 bytes .../0f1e03ffbe4a08f3_0 | Bin 0 -> 1599 bytes .../10d52c8541d8e931_0 | Bin 0 -> 1617 bytes .../1410946c5e325198_0 | Bin 0 -> 2022 bytes .../16559ac9c884651f_0 | Bin 0 -> 1520 bytes .../166a5b768db2d6dc_0 | Bin 0 -> 1450 bytes .../179872ac4492afa0_0 | Bin 0 -> 1444 bytes .../1ada7ade10cca105_0 | Bin 0 -> 1753 bytes .../21d60d8d92bf19bf_0 | Bin 0 -> 1624 bytes .../22063dd5403b833c_0 | Bin 0 -> 1444 bytes .../2532623a88776236_0 | Bin 0 -> 1380 bytes .../2e2413a06637b0ec_0 | Bin 0 -> 1417 bytes .../3107558eea9ba321_0 | Bin 0 -> 1430 bytes .../364b223b1bc79872_0 | Bin 0 -> 1799 bytes .../366f560b67a386ee_0 | Bin 0 -> 1492 bytes .../375db0c2ac836167_0 | Bin 0 -> 1479 bytes .../3761f940ae901389_0 | Bin 0 -> 12930 bytes .../383152c2a19b4e8f_0 | Bin 0 -> 1703 bytes .../3865648767564005_0 | Bin 0 -> 1454 bytes .../38720ab1369ba567_0 | Bin 0 -> 1649 bytes .../3900fd29baef0480_0 | Bin 0 -> 2028 bytes .../3941d9264340cece_0 | Bin 0 -> 1412 bytes .../3dd738a47abc8dee_0 | Bin 0 -> 1705 bytes .../40a9bd45a75375db_0 | Bin 0 -> 1472 bytes .../422d408262aa1cbc_0 | Bin 0 -> 1503 bytes .../445287d025921e6f_0 | Bin 0 -> 2790 bytes .../44fdad3a201128f8_0 | Bin 0 -> 1495 bytes .../4816386a87d7566c_0 | Bin 0 -> 1672 bytes .../482a0b7ae2b00776_0 | Bin 0 -> 1496 bytes .../4b32244f47a52aa1_0 | Bin 0 -> 1870 bytes .../4bfb0fd95edd59d2_0 | Bin 0 -> 1516 bytes .../4c4800b635ae2098_0 | Bin 0 -> 1499 bytes .../4c9a3bb214971f6c_0 | Bin 0 -> 1864 bytes .../4eceab7d2e5e75bd_0 | Bin 0 -> 1418 bytes .../50aef4afc8eb2221_0 | Bin 0 -> 1311 bytes .../50ec495042a41f6d_0 | Bin 0 -> 1398 bytes .../5399a0cd57faade2_0 | Bin 0 -> 2989 bytes .../54920af5f79603ff_0 | Bin 0 -> 1438 bytes .../551f311ce70a041a_0 | Bin 0 -> 1745 bytes .../55248bf5cdb1f722_0 | Bin 0 -> 1491 bytes .../577dbf0b91a4fd20_0 | Bin 0 -> 1381 bytes .../57976939f24b399a_0 | Bin 0 -> 1679 bytes .../598bb08c9f41a7b9_0 | Bin 0 -> 2342 bytes .../63650b2efa24c917_0 | Bin 0 -> 1494 bytes .../6635a01024910e7c_0 | Bin 0 -> 1689 bytes .../6b991611054a2e9f_0 | Bin 0 -> 1526 bytes .../6e7ceb2d0629c0d2_0 | Bin 0 -> 1462 bytes .../766415f99b4c6b7d_0 | Bin 0 -> 1222 bytes .../76d092187417e324_0 | Bin 0 -> 1895 bytes .../7a80e0d12aa14c6c_0 | Bin 0 -> 1453 bytes .../7e048a4ec5b9e1d4_0 | Bin 0 -> 1924 bytes .../7e9e9637312f4527_0 | Bin 0 -> 1554 bytes .../7f4dd8a89067dd14_0 | Bin 0 -> 1570 bytes .../8059ab2dc6262984_0 | Bin 0 -> 1418 bytes .../8383e54a78e96fc0_0 | Bin 0 -> 1513 bytes .../83c00149b31ccab3_0 | Bin 0 -> 1227 bytes .../842bceedb8c09930_0 | Bin 0 -> 1578 bytes .../87b78db93ca06597_0 | Bin 0 -> 1441 bytes .../88a5e52ddb6d6d2c_0 | Bin 0 -> 1736 bytes .../88c1d03bb90903c8_0 | Bin 0 -> 1680 bytes .../8ab4bfc157c68e03_0 | Bin 0 -> 1560 bytes .../8b74f42ca7f9d4ce_0 | Bin 0 -> 1480 bytes .../8ba42d1959e21094_0 | Bin 0 -> 1548 bytes .../8ba930f6d3763aad_0 | Bin 0 -> 1775 bytes .../8df5c0290e6e7d6b_0 | Bin 0 -> 1425 bytes .../901cda61dbe1c72b_0 | Bin 0 -> 1430 bytes .../91bffe440af90184_0 | Bin 0 -> 1523 bytes .../92f3fbe0cc645cda_0 | Bin 0 -> 1510 bytes .../94dd7ef9d668d39f_0 | Bin 0 -> 1418 bytes .../9527542be48ffabc_0 | Bin 0 -> 1449 bytes .../95db89fc6a02f451_0 | Bin 0 -> 1535 bytes .../963ed8c33def50bf_0 | Bin 0 -> 2989 bytes .../96aec6e9ae26248e_0 | Bin 0 -> 1241 bytes .../97de5abfe883dbcf_0 | Bin 0 -> 1555 bytes .../986d0106ec1842ce_0 | Bin 0 -> 1398 bytes .../98a16392447e67ac_0 | Bin 0 -> 1517 bytes .../9e14eade795efe8c_0 | Bin 0 -> 1559 bytes .../9f4ad6f7051df145_0 | Bin 0 -> 1750 bytes .../9fd5f62bf71b3d75_0 | Bin 0 -> 4412 bytes .../a10e102536afddc3_0 | Bin 0 -> 1684 bytes .../a14b1d1ba3ffefc8_0 | Bin 0 -> 1703 bytes .../a1962e8c0da37551_0 | Bin 0 -> 1926 bytes .../a6b7c04cc881aa8f_0 | Bin 0 -> 1653 bytes .../a6f27ff03ba78ebe_0 | Bin 0 -> 1692 bytes .../a85adbefb300ab4e_0 | Bin 0 -> 1398 bytes .../a8861e49fb8957aa_0 | Bin 0 -> 1442 bytes .../a9b4668151d3b918_0 | Bin 0 -> 1385 bytes .../aa2af9656088cce5_0 | Bin 0 -> 1726 bytes .../aab204e4e2e6cad8_0 | Bin 0 -> 1561 bytes .../ac4be60b26fb5511_0 | Bin 0 -> 1612 bytes .../afbf989a8c95bf2e_0 | Bin 0 -> 1442 bytes .../b2141b088ee5e98c_0 | Bin 0 -> 1487 bytes .../b3f87b55d8dbfa47_0 | Bin 0 -> 1432 bytes .../b5f29d0312456036_0 | Bin 0 -> 2069 bytes .../bc145685a6573d8d_0 | Bin 0 -> 1522 bytes .../bca21f99472447f3_0 | Bin 0 -> 1663 bytes .../bcefea0b5feaa3e6_0 | Bin 0 -> 1435 bytes .../be519e977a6323d2_0 | Bin 0 -> 1635 bytes .../be581dea90cddde7_0 | Bin 0 -> 1565 bytes .../bfcfe1973eae70a6_0 | Bin 0 -> 2071 bytes .../c09d11a05755e8de_0 | Bin 0 -> 1487 bytes .../c30f776ad1595b83_0 | Bin 0 -> 1427 bytes .../c3d986f17b5dc565_0 | Bin 0 -> 1469 bytes .../c50c2efcca9c8010_0 | Bin 0 -> 1488 bytes .../c7348c3f4f98c4ab_0 | Bin 0 -> 1449 bytes .../c82aed60a977e45b_0 | Bin 0 -> 1609 bytes .../c8b473e0f9374235_0 | Bin 0 -> 1642 bytes .../c8f84126e8a205d3_0 | Bin 0 -> 2326 bytes .../c9adc58020b2b3de_0 | Bin 0 -> 1508 bytes .../ca5a67fda3466f4d_0 | Bin 0 -> 1516 bytes .../cb47929bcd785350_0 | Bin 0 -> 1588 bytes .../cd85acb1c0e5f8f6_0 | Bin 0 -> 1569 bytes .../cde968a267e2506f_0 | Bin 0 -> 1788 bytes .../ce5fdc792b67fd6e_0 | Bin 0 -> 2187 bytes .../d3d3117da1954c11_0 | Bin 0 -> 1627 bytes .../d48cca5b61f158fe_0 | Bin 0 -> 2272 bytes .../d57fe2c6b1537486_0 | Bin 0 -> 1794 bytes .../d949b6a948217766_0 | Bin 0 -> 1586 bytes .../db4b978e1d037149_0 | Bin 0 -> 1576 bytes .../db529ccd665da8b5_0 | Bin 0 -> 1629 bytes .../dc1d8d198ab144a4_0 | Bin 0 -> 1730 bytes .../dc1f0d705c07825e_0 | Bin 0 -> 1729 bytes .../dd15da64bd340266_0 | Bin 0 -> 10127 bytes .../dec87465aca36c9e_0 | Bin 0 -> 1496 bytes .../e00a14b7237f316a_0 | Bin 0 -> 1791 bytes .../e0679885439abda2_0 | Bin 0 -> 1656 bytes .../e31f7a7e623b4b27_0 | Bin 0 -> 3929 bytes .../e8b90ca167b6e771_0 | Bin 0 -> 11410 bytes .../e8c610db15382c0d_0 | Bin 0 -> 1474 bytes .../e8f209bb953d0431_0 | Bin 0 -> 1463 bytes .../e939b9c74705d0f2_0 | Bin 0 -> 1696 bytes .../e9cc87730829e287_0 | Bin 0 -> 2348 bytes .../ea8caa098b6387ff_0 | Bin 0 -> 1568 bytes .../eaffc3a9ed933df4_0 | Bin 0 -> 1516 bytes .../ecf4f84b241d1325_0 | Bin 0 -> 1507 bytes .../ee0df4a02bea74ec_0 | Bin 0 -> 1581 bytes .../f355a1c9fc9dac63_0 | Bin 0 -> 1876 bytes .../f549ece535126cd0_0 | Bin 0 -> 1675 bytes .../f587f3bec747896f_0 | Bin 0 -> 1532 bytes .../f6f13d7893cf7781_0 | Bin 0 -> 1586 bytes .../f7d87e9c65f44131_0 | Bin 0 -> 2113 bytes .../f9bc7061061e4803_0 | Bin 0 -> 2906 bytes .../fad7b2239e784870_0 | Bin 0 -> 1627 bytes .../fc496558f77f6d37_0 | Bin 0 -> 1601 bytes .../fdd89d27c13f85e5_0 | Bin 0 -> 2189 bytes .../ff7d190261fb21f8_0 | Bin 0 -> 1509 bytes .../fff368752d794b37_0 | Bin 0 -> 1427 bytes .../df02438d-ec97-49fc-befe-d7f04c7c0bc6/index | Bin 0 -> 24 bytes .../index-dir/the-real-index | Bin 0 -> 3840 bytes .../index.txt | Bin 0 -> 419 bytes .../006a538dedf500bb_0 | Bin 0 -> 1506 bytes .../0175f3f40ba8dbde_0 | Bin 0 -> 1500 bytes .../1721bd4f8fb2cadc_0 | Bin 0 -> 1500 bytes .../17b8036994926313_0 | Bin 0 -> 1503 bytes .../25dc4c03e53ce621_0 | Bin 0 -> 2862 bytes .../335c73116c925d69_0 | Bin 0 -> 4576 bytes .../35479c8993a56980_0 | Bin 0 -> 1420 bytes .../3ae70dcea11c2fbe_0 | Bin 0 -> 1501 bytes .../3b5be9cfbf996496_0 | Bin 0 -> 1425 bytes .../3bafac095fd25cbd_0 | Bin 0 -> 2422 bytes .../4569c647f3e546ae_0 | Bin 0 -> 2403 bytes .../4d67962a65e63981_0 | Bin 0 -> 2189 bytes .../586a022384e46803_0 | Bin 0 -> 3527 bytes .../5dae2ab319d8aac9_0 | Bin 0 -> 1514 bytes .../5de9374d0d33bce6_0 | Bin 0 -> 1503 bytes .../61660244c8309188_0 | Bin 0 -> 2475 bytes .../6ea1cb40f0aee2a6_0 | Bin 0 -> 2315 bytes .../713851498c4150dc_0 | Bin 0 -> 1500 bytes .../802e042d69cb5b9f_0 | Bin 0 -> 2336 bytes .../8cec4c83eb238125_0 | Bin 0 -> 1505 bytes .../90064f6e62ae2b4c_0 | Bin 0 -> 1730 bytes .../938f804276fb35f1_0 | Bin 0 -> 1499 bytes .../93df658616c97d06_0 | Bin 0 -> 1427 bytes .../a9699016563b8209_0 | Bin 0 -> 1506 bytes .../ac7ba52fac0e95e1_0 | Bin 0 -> 2681 bytes .../b3393d462f0043ad_0 | Bin 0 -> 2772 bytes .../c1599dde8bade953_0 | Bin 0 -> 1426 bytes .../d588d824228ac415_0 | Bin 0 -> 2573 bytes .../d75edc2286fae9b7_0 | Bin 0 -> 1502 bytes .../ea578ddc3dc3c687_0 | Bin 0 -> 2602 bytes .../ec116a03a65112e6_0 | Bin 0 -> 2056 bytes .../ecac73213fcefcdf_0 | Bin 0 -> 1424 bytes .../fcddaeca4ec70adb_0 | Bin 0 -> 1501 bytes .../5e478eeb-1820-4299-b857-8a957d5454ff/index | Bin 0 -> 24 bytes .../index-dir/the-real-index | Bin 0 -> 840 bytes .../index.txt | Bin 0 -> 215 bytes .../dbaaafcc074f9ed9_0 | Bin 0 -> 43063 bytes .../2b37bdcb-00c6-4891-9af4-00f62af17426/index | Bin 0 -> 24 bytes .../index-dir/the-real-index | Bin 0 -> 72 bytes .../index.txt | Bin 0 -> 140 bytes .../07f8e196a7727a3f_0 | Bin 0 -> 16117 bytes .../0cb5dd327b96a31b_0 | Bin 0 -> 224362 bytes .../0fc5bdde6f53153f_0 | Bin 0 -> 114400 bytes .../14b6e0546d8edd38_0 | Bin 0 -> 69912 bytes .../1568eaad9cefb057_0 | Bin 0 -> 1042375 bytes .../1568eaad9cefb057_1 | Bin 0 -> 1050365 bytes .../1a84c0fdb8f29ecd_0 | Bin 0 -> 9401 bytes .../29e34f22d379c8ec_0 | Bin 0 -> 181159 bytes .../312b41ec91efbbbb_0 | Bin 0 -> 11526 bytes .../3190d25e17d196d1_0 | Bin 0 -> 42682 bytes .../3af3cabdea0ce2f3_0 | Bin 0 -> 190510 bytes .../43dd297a4824c424_0 | Bin 0 -> 15881 bytes .../5445d97c0ba39932_0 | Bin 0 -> 28000 bytes .../5b520f29f907e97a_0 | Bin 0 -> 400808 bytes .../5b70ab48f346dff6_0 | Bin 0 -> 2090270 bytes .../5be730099e2d1e3e_0 | Bin 0 -> 25874 bytes .../5c160c98f6b0e2e8_0 | Bin 0 -> 327786 bytes .../5f232009d9ee7634_0 | Bin 0 -> 1597228 bytes .../60e679941208711d_0 | Bin 0 -> 8575 bytes .../6ac2a5ce1f87808c_0 | Bin 0 -> 10078 bytes .../762f62de057c0fc9_0 | Bin 0 -> 14695 bytes .../7e575746073c75ed_0 | Bin 0 -> 13699 bytes .../88a307d09a45768c_0 | Bin 0 -> 10481 bytes .../8c92e2fa07a9121e_0 | Bin 0 -> 2071400 bytes .../8c92e2fa07a9121e_1 | Bin 0 -> 3134492 bytes .../90ec518fba35891f_0 | Bin 0 -> 1749812 bytes .../90ec518fba35891f_1 | Bin 0 -> 2864434 bytes .../9119b3cc47548319_0 | Bin 0 -> 18111 bytes .../9460a6ba2daa3295_0 | Bin 0 -> 38023 bytes .../9460a6ba2daa3295_1 | Bin 0 -> 32715 bytes .../a2b53de7eaf727e9_0 | Bin 0 -> 15391 bytes .../a5d6bcce35bc7475_0 | Bin 0 -> 234396 bytes .../b03dced0dcd88b1e_0 | Bin 0 -> 8813 bytes .../b6165d9548afde92_0 | Bin 0 -> 86069 bytes .../b7e105217bc9c5e5_0 | Bin 0 -> 2279677 bytes .../c392b1e5fb08c126_0 | Bin 0 -> 12581 bytes .../d7946d00f2e1376a_0 | Bin 0 -> 397328 bytes .../d85b5e5c4acd813e_0 | Bin 0 -> 269066 bytes .../d9d8fbf977dedb59_0 | Bin 0 -> 8629 bytes .../de28351e2ea658a2_0 | Bin 0 -> 10183 bytes .../df7ab6ba53ea4e7a_0 | Bin 0 -> 12437 bytes .../e6eb93dca5412515_0 | Bin 0 -> 28523 bytes .../e7e2abc4e5a3e0aa_0 | Bin 0 -> 38198 bytes .../fbd95b051be10bd6_0 | Bin 0 -> 14635 bytes .../fc9eb799ae313e7f_0 | Bin 0 -> 52941 bytes .../2f157599-d077-4b86-81b0-ce3863b5f858/index | Bin 0 -> 24 bytes .../index-dir/the-real-index | Bin 0 -> 1032 bytes .../29213d2ab33b53bc_0 | Bin 0 -> 288471 bytes .../50fdf5b3-4e70-4cf9-baf9-7249bbf80c0a/index | Bin 0 -> 24 bytes .../index-dir/the-real-index | Bin 0 -> 72 bytes .../6bd2b74669b9987c_0 | Bin 0 -> 2086667 bytes .../6bd2b74669b9987c_1 | Bin 0 -> 3140324 bytes .../7f8a0389b51446e6_0 | Bin 0 -> 1019005 bytes .../7f8a0389b51446e6_1 | Bin 0 -> 1028013 bytes .../8c05ecc7896ae8de_0 | Bin 0 -> 38051 bytes .../8c05ecc7896ae8de_1 | Bin 0 -> 32675 bytes .../b076fcad9d02efd1_0 | Bin 0 -> 1600971 bytes .../b076fcad9d02efd1_1 | Bin 0 -> 2768682 bytes .../59a16354-cfa0-42ed-a44b-cc3b49e17c5a/index | Bin 0 -> 24 bytes .../index-dir/the-real-index | Bin 0 -> 144 bytes .../054440bf2c331c43_0 | Bin 0 -> 4230736 bytes .../44569690086fd740_0 | Bin 0 -> 4230751 bytes .../e00244a1c1d66cf5_0 | Bin 0 -> 4230729 bytes .../861a2246-b5c6-4feb-a8e6-64f0f16a2064/index | Bin 0 -> 24 bytes .../index-dir/the-real-index | Bin 0 -> 120 bytes .../010090a4715f7982_0 | Bin 0 -> 1579 bytes .../0178ed80ba166694_0 | Bin 0 -> 1429 bytes .../01d1bd9d3481613b_0 | Bin 0 -> 1527 bytes .../028a34c713cffa8e_0 | Bin 0 -> 1422 bytes .../029acfe340af5384_0 | Bin 0 -> 1410 bytes .../0325bbbffc847ef9_0 | Bin 0 -> 1390 bytes .../03bc795eaff9b5cd_0 | Bin 0 -> 1361 bytes .../03de6d80e67b0c21_0 | Bin 0 -> 1396 bytes .../03e814ec520f66f0_0 | Bin 0 -> 1379 bytes .../0566c36e9d66c629_0 | Bin 0 -> 1437 bytes .../05adfe7bf452189e_0 | Bin 0 -> 1392 bytes .../06693067e337341a_0 | Bin 0 -> 1328 bytes .../06b37557aa4cd1fd_0 | Bin 0 -> 1470 bytes .../07274db1f47b1bb4_0 | Bin 0 -> 1512 bytes .../077a9cbf6788c7d1_0 | Bin 0 -> 1284 bytes .../07df800e6fd2e4b5_0 | Bin 0 -> 1445 bytes .../0809a6f55fed9f3d_0 | Bin 0 -> 1351 bytes .../08621f8de27fc09d_0 | Bin 0 -> 1491 bytes .../08c00414b0740128_0 | Bin 0 -> 1632 bytes .../08ff00bec6ec0013_0 | Bin 0 -> 1590 bytes .../097055410aa8a2ba_0 | Bin 0 -> 1335 bytes .../0a8fb9475f3b996b_0 | Bin 0 -> 1388 bytes .../0ab70eadeaf07b89_0 | Bin 0 -> 1409 bytes .../0ac6ce1f2227e805_0 | Bin 0 -> 1340 bytes .../0ac92cfcd164c6aa_0 | Bin 0 -> 1416 bytes .../0b0f1db4427bcd14_0 | Bin 0 -> 1191 bytes .../0b6b46031efba167_0 | Bin 0 -> 1508 bytes .../0b6c9873335e9d78_0 | Bin 0 -> 1448 bytes .../0b78ec7f18bf27f8_0 | Bin 0 -> 1317 bytes .../0c1f9942b5049920_0 | Bin 0 -> 1498 bytes .../0d5b342f3c27ae46_0 | Bin 0 -> 1478 bytes .../0d706a3735b5c179_0 | Bin 0 -> 1336 bytes .../0dd991f1c793b330_0 | Bin 0 -> 1398 bytes .../0ed0588b1aeed822_0 | Bin 0 -> 1356 bytes .../10a6de262188cabc_0 | Bin 0 -> 1382 bytes .../11ff41e2c72c2a0b_0 | Bin 0 -> 1394 bytes .../1326682a85b8839c_0 | Bin 0 -> 1329 bytes .../13e636b6c483e1b5_0 | Bin 0 -> 1377 bytes .../164a06b5da754d80_0 | Bin 0 -> 1592 bytes .../1651158d19b17e1a_0 | Bin 0 -> 1484 bytes .../16a55b1b63681512_0 | Bin 0 -> 1332 bytes .../1797898dbf9abe3d_0 | Bin 0 -> 1746 bytes .../1848b8431f464bbc_0 | Bin 0 -> 1353 bytes .../18d0a3e4115b15f9_0 | Bin 0 -> 1213 bytes .../18ecd22745dd139f_0 | Bin 0 -> 1394 bytes .../197548d334d866a6_0 | Bin 0 -> 1593 bytes .../1b75cec76c4aed75_0 | Bin 0 -> 1308 bytes .../1b90a8d8469ff377_0 | Bin 0 -> 1331 bytes .../1bf9b16217d3cd8e_0 | Bin 0 -> 1640 bytes .../1cdf58bab8d09377_0 | Bin 0 -> 1438 bytes .../1d8d40c8bd53afc0_0 | Bin 0 -> 5288 bytes .../1f64274428bc3ad0_0 | Bin 0 -> 1412 bytes .../1fb712b8196b1476_0 | Bin 0 -> 1391 bytes .../1ff0767ed2f79efa_0 | Bin 0 -> 1395 bytes .../2162042b78dab24e_0 | Bin 0 -> 1507 bytes .../226d42dee542a505_0 | Bin 0 -> 1580 bytes .../2291a5b924b9e143_0 | Bin 0 -> 1474 bytes .../244ff8db75afbcee_0 | Bin 0 -> 1375 bytes .../24692dc296675274_0 | Bin 0 -> 1389 bytes .../261fb8495be0de84_0 | Bin 0 -> 1407 bytes .../26e40f14db914a7d_0 | Bin 0 -> 1555 bytes .../27ae31930a5f4c88_0 | Bin 0 -> 1729 bytes .../27feded4fc28f7b1_0 | Bin 0 -> 2825 bytes .../283a01c1fd5fcc90_0 | Bin 0 -> 1593 bytes .../28a1a4eb95900cc5_0 | Bin 0 -> 1355 bytes .../28aeb8e6927f88bf_0 | Bin 0 -> 1465 bytes .../29bf4019111fdf9e_0 | Bin 0 -> 1391 bytes .../2a47eea8f2be94d4_0 | Bin 0 -> 1347 bytes .../2a515c4601a460b5_0 | Bin 0 -> 1520 bytes .../2b944482863d9787_0 | Bin 0 -> 1393 bytes .../2cdeeba0c8388ef1_0 | Bin 0 -> 1360 bytes .../2dc85643336d7c98_0 | Bin 0 -> 1340 bytes .../2dda1e0469cf29d5_0 | Bin 0 -> 1431 bytes .../2e5fdb2b74aabf38_0 | Bin 0 -> 1398 bytes .../2ea26e623c043319_0 | Bin 0 -> 1330 bytes .../2ea68d59259117ae_0 | Bin 0 -> 1301 bytes .../2ec697a6a7916a4b_0 | Bin 0 -> 1390 bytes .../2f20eeb0f78a12cb_0 | Bin 0 -> 1429 bytes .../2f7904bd5ff48aa4_0 | Bin 0 -> 1725 bytes .../2fb23db919cbac4f_0 | Bin 0 -> 1409 bytes .../2fc8d15c7838f3d1_0 | Bin 0 -> 1344 bytes .../2ff2dc5711b5b44b_0 | Bin 0 -> 1346 bytes .../300c4a7acfaae0e6_0 | Bin 0 -> 1413 bytes .../30c3f5d24b89073e_0 | Bin 0 -> 1597 bytes .../3146046935712b98_0 | Bin 0 -> 1566 bytes .../316a18f2391b96b6_0 | Bin 0 -> 1336 bytes .../323c59764f29d1a6_0 | Bin 0 -> 1380 bytes .../32c00850e582741e_0 | Bin 0 -> 1449 bytes .../3375bf704893c9df_0 | Bin 0 -> 1409 bytes .../34d132cebace4bb8_0 | Bin 0 -> 1819 bytes .../35b1864f8dca267e_0 | Bin 0 -> 1312 bytes .../35c50d72a0d9abe2_0 | Bin 0 -> 1474 bytes .../35d5ee3785bf2d41_0 | Bin 0 -> 1522 bytes .../36b306a09b9baa69_0 | Bin 0 -> 1341 bytes .../374ef6e0c7130fbc_0 | Bin 0 -> 1316 bytes .../37b299fcd53f078a_0 | Bin 0 -> 1640 bytes .../3a45eb408a7d9681_0 | Bin 0 -> 1337 bytes .../3a707dfcd239013f_0 | Bin 0 -> 1713 bytes .../3a7363b2769e7ce9_0 | Bin 0 -> 1418 bytes .../3ba354e4df139a39_0 | Bin 0 -> 1465 bytes .../3c150c2dd87fd6e8_0 | Bin 0 -> 1546 bytes .../3c6a323d9eaf2d02_0 | Bin 0 -> 1415 bytes .../3cbf65811b564b6e_0 | Bin 0 -> 1412 bytes .../3cc5185e299fa410_0 | Bin 0 -> 2776 bytes .../3d2883b151058934_0 | Bin 0 -> 1346 bytes .../3d9cc84221ab7d0e_0 | Bin 0 -> 1376 bytes .../3db535d43555d95d_0 | Bin 0 -> 1423 bytes .../3e083bdfa59388de_0 | Bin 0 -> 1477 bytes .../3e6b96474e4cd9e2_0 | Bin 0 -> 1408 bytes .../3e8f5891b6a76580_0 | Bin 0 -> 1357 bytes .../3ee555b7d09662f9_0 | Bin 0 -> 1474 bytes .../3f7ed6652d14748c_0 | Bin 0 -> 1349 bytes .../3fa3b9230004c5ac_0 | Bin 0 -> 1492 bytes .../40000ad0b2717f89_0 | Bin 0 -> 1362 bytes .../401c9ecb66380e7d_0 | Bin 0 -> 1369 bytes .../403b044f976196b0_0 | Bin 0 -> 1379 bytes .../405dcfa581a33f6f_0 | Bin 0 -> 2150 bytes .../40e5dd3864b40061_0 | Bin 0 -> 1331 bytes .../417b0661fb6da4cc_0 | Bin 0 -> 1547 bytes .../4249a405b758e6b0_0 | Bin 0 -> 67506 bytes .../43030d4dfc53606e_0 | Bin 0 -> 1277 bytes .../434b43f63be1082a_0 | Bin 0 -> 1510 bytes .../435dc7180587c2f9_0 | Bin 0 -> 1244 bytes .../440beaeaa3e9275f_0 | Bin 0 -> 1232 bytes .../44a0f1f0d4716da8_0 | Bin 0 -> 1273 bytes .../44abacfeac6e3a3c_0 | Bin 0 -> 1855 bytes .../461d0538bcde61a9_0 | Bin 0 -> 1389 bytes .../462cff8c40a19469_0 | Bin 0 -> 1325 bytes .../467bfef644ed08fb_0 | Bin 0 -> 1440 bytes .../46a7a4fd8de8ac15_0 | Bin 0 -> 1697 bytes .../46ad973d0ddad864_0 | Bin 0 -> 1522 bytes .../47317d65fc0a6c95_0 | Bin 0 -> 1558 bytes .../473d8294e4f39459_0 | Bin 0 -> 1377 bytes .../47409dfcbc7bc816_0 | Bin 0 -> 1658 bytes .../47974f690887fe0b_0 | Bin 0 -> 1393 bytes .../47c5c28cdfafc410_0 | Bin 0 -> 1537 bytes .../48ebd49fcb59fa62_0 | Bin 0 -> 1305 bytes .../491eed5273dbc6f8_0 | Bin 0 -> 1510 bytes .../49380de47cda0142_0 | Bin 0 -> 1419 bytes .../49be4907b4618b49_0 | Bin 0 -> 1510 bytes .../4a351c50eda1dabe_0 | Bin 0 -> 1352 bytes .../4a762ea7b29f0040_0 | Bin 0 -> 1418 bytes .../4aefc6516c8f09ef_0 | Bin 0 -> 1422 bytes .../4af99deb3627b3af_0 | Bin 0 -> 1357 bytes .../4b3718bc5ce62ed0_0 | Bin 0 -> 1525 bytes .../4cd488b0eb39b812_0 | Bin 0 -> 1379 bytes .../4ce7b5a39f349938_0 | Bin 0 -> 1322 bytes .../4e68236ef8433dee_0 | Bin 0 -> 1681 bytes .../4ec86f3c7b50ea9a_0 | Bin 0 -> 1438 bytes .../4ecfb74cc2c5020c_0 | Bin 0 -> 1782 bytes .../4f2214c1205d9ee6_0 | Bin 0 -> 1272 bytes .../4f3d92a68bac1d08_0 | Bin 0 -> 2763 bytes .../4fcb373f2c5c0cc8_0 | Bin 0 -> 1308 bytes .../4fecf1bfc69078c9_0 | Bin 0 -> 1544 bytes .../4ff568a32f1bc060_0 | Bin 0 -> 1174 bytes .../50727972d197bdd1_0 | Bin 0 -> 1441 bytes .../5094b1a41ec0992f_0 | Bin 0 -> 1430 bytes .../5281c83d55a5a3f4_0 | Bin 0 -> 1406 bytes .../52faaed1e72cd26d_0 | Bin 0 -> 1401 bytes .../539ea2533efe9124_0 | Bin 0 -> 1414 bytes .../55092d5b76a5235f_0 | Bin 0 -> 1688 bytes .../55c4d626167ca37f_0 | Bin 0 -> 1275 bytes .../55f3f5be082df174_0 | Bin 0 -> 1350 bytes .../5633b14a24918a87_0 | Bin 0 -> 1320 bytes .../563911f0d5a08805_0 | Bin 0 -> 1472 bytes .../564a4f7cac02234f_0 | Bin 0 -> 1326 bytes .../5770f37e1158342e_0 | Bin 0 -> 1354 bytes .../5908a9b715d02910_0 | Bin 0 -> 1520 bytes .../5b493bdce9741e12_0 | Bin 0 -> 1796 bytes .../5b4eca0ef8b63d80_0 | Bin 0 -> 1538 bytes .../5bd1bc949f7a282e_0 | Bin 0 -> 1304 bytes .../5c1d26f609f4a349_0 | Bin 0 -> 1377 bytes .../5d568e9f3bb60999_0 | Bin 0 -> 1654 bytes .../5d5dd0ce098b82ae_0 | Bin 0 -> 1318 bytes .../5dbdfe1f78d89ed2_0 | Bin 0 -> 1572 bytes .../5e286de0854046c5_0 | Bin 0 -> 1451 bytes .../5e929df8ffd0b512_0 | Bin 0 -> 1524 bytes .../5f648b8e8da959f6_0 | Bin 0 -> 1386 bytes .../60ada439c219d85e_0 | Bin 0 -> 1361 bytes .../60adb161b062547a_0 | Bin 0 -> 1367 bytes .../615467575aab9d58_0 | Bin 0 -> 1300 bytes .../617852fb06aeced7_0 | Bin 0 -> 1370 bytes .../62f1430b6f83f2a3_0 | Bin 0 -> 1554 bytes .../633a9a70ca8b5383_0 | Bin 0 -> 1377 bytes .../63eb77e2513cd8f1_0 | Bin 0 -> 1648 bytes .../63f1c8a683f8225f_0 | Bin 0 -> 1762 bytes .../63fa8b17283be32b_0 | Bin 0 -> 1537 bytes .../641ba44fc9dde0d4_0 | Bin 0 -> 1372 bytes .../645c0ebb2a0520ec_0 | Bin 0 -> 1359 bytes .../64ab34cc8d5979a8_0 | Bin 0 -> 1379 bytes .../64c8b49a96602142_0 | Bin 0 -> 1268 bytes .../6538f081994b8744_0 | Bin 0 -> 1492 bytes .../65b92e377b0fa843_0 | Bin 0 -> 1437 bytes .../66632c13c1c475ba_0 | Bin 0 -> 1426 bytes .../6717b2b093e246cf_0 | Bin 0 -> 1328 bytes .../675f5ef490d855c2_0 | Bin 0 -> 1402 bytes .../67be1e13eeec2e8c_0 | Bin 0 -> 1186 bytes .../67e02db3cc4d7172_0 | Bin 0 -> 1474 bytes .../68a0bd0feff1417f_0 | Bin 0 -> 1489 bytes .../68e48aaaa8eed872_0 | Bin 0 -> 1409 bytes .../69a622ddc4de2de2_0 | Bin 0 -> 1428 bytes .../69d908bdfea092f3_0 | Bin 0 -> 1474 bytes .../69dc9c00c1096539_0 | Bin 0 -> 1184 bytes .../6a31717497945fd8_0 | Bin 0 -> 1703 bytes .../6aafea8d6e8c80c9_0 | Bin 0 -> 52203 bytes .../6ada150ef7f7b66a_0 | Bin 0 -> 1310 bytes .../6b35672256f5dbf9_0 | Bin 0 -> 1484 bytes .../6b73951b12bcfe24_0 | Bin 0 -> 1527 bytes .../6c0f23f3a776038a_0 | Bin 0 -> 1360 bytes .../6c199ef7952f1cb9_0 | Bin 0 -> 1301 bytes .../6cbae82b29f486c0_0 | Bin 0 -> 1334 bytes .../6d1299026d44f445_0 | Bin 0 -> 1382 bytes .../6d2c7a73bf56d82e_0 | Bin 0 -> 1327 bytes .../6d6746ffdfe2c5da_0 | Bin 0 -> 1454 bytes .../6ea5cd00d1ef5c5e_0 | Bin 0 -> 1344 bytes .../6eafb1f8e4d27046_0 | Bin 0 -> 1331 bytes .../6f45dc32b64d35e3_0 | Bin 0 -> 1226 bytes .../6f7792d088936b71_0 | Bin 0 -> 1419 bytes .../6fecedabc9999d8b_0 | Bin 0 -> 1366 bytes .../70012114dc1d1d88_0 | Bin 0 -> 1460 bytes .../706accb2deacecdf_0 | Bin 0 -> 1406 bytes .../7087aada1f4066c7_0 | Bin 0 -> 1320 bytes .../70f0928214687af3_0 | Bin 0 -> 1453 bytes .../71471beeeb832013_0 | Bin 0 -> 1304 bytes .../71880fa819250839_0 | Bin 0 -> 1380 bytes .../71af3ff0da25ecb4_0 | Bin 0 -> 1463 bytes .../72efb03b6e76c5de_0 | Bin 0 -> 1341 bytes .../74229e2379833847_0 | Bin 0 -> 1411 bytes .../74d8507a8531f02b_0 | Bin 0 -> 1403 bytes .../750927c19c5edcba_0 | Bin 0 -> 1342 bytes .../75106a26e2dd80d4_0 | Bin 0 -> 1417 bytes .../751bebd4610d5d4c_0 | Bin 0 -> 1403 bytes .../76337b91b4900a25_0 | Bin 0 -> 1401 bytes .../76f4c5a18d2a4d54_0 | Bin 0 -> 1304 bytes .../7748de2aa7cf2ea4_0 | Bin 0 -> 1376 bytes .../7865ed43b8d1f6db_0 | Bin 0 -> 1476 bytes .../78ab97b6c49538cd_0 | Bin 0 -> 1331 bytes .../79a0e6d190a1bf69_0 | Bin 0 -> 1300 bytes .../79dd64d3d88a9e7d_0 | Bin 0 -> 1391 bytes .../7b11897a6e627caa_0 | Bin 0 -> 1374 bytes .../7b37f1b48b6d925c_0 | Bin 0 -> 1403 bytes .../7c6d2d12385f9ee0_0 | Bin 0 -> 1524 bytes .../7cb72d2bdce685df_0 | Bin 0 -> 1315 bytes .../7d76fe340dfdbc4e_0 | Bin 0 -> 1441 bytes .../7e1ae7aeaa77a535_0 | Bin 0 -> 1847 bytes .../7e7adf60d84afd18_0 | Bin 0 -> 1356 bytes .../7f588195f082f356_0 | Bin 0 -> 1344 bytes .../7fbb5007ff08fd98_0 | Bin 0 -> 1344 bytes .../80227b644439b542_0 | Bin 0 -> 1388 bytes .../818c23c29ee1a73b_0 | Bin 0 -> 1350 bytes .../82a15928af9ccafe_0 | Bin 0 -> 1694 bytes .../82a24d405442f878_0 | Bin 0 -> 4971 bytes .../8397b39bab574872_0 | Bin 0 -> 1454 bytes .../845bfef2605ef371_0 | Bin 0 -> 1361 bytes .../851e9d42098ef1c5_0 | Bin 0 -> 1614 bytes .../855be4791a76b056_0 | Bin 0 -> 1311 bytes .../858b1b97724823ac_0 | Bin 0 -> 1417 bytes .../8637c8296b939632_0 | Bin 0 -> 1454 bytes .../87cd4e61fddcd966_0 | Bin 0 -> 1332 bytes .../87f3bed1bdda23b6_0 | Bin 0 -> 1373 bytes .../88a44733befdfde4_0 | Bin 0 -> 1365 bytes .../88f7d898076d4e73_0 | Bin 0 -> 1403 bytes .../89aa94d34fed7381_0 | Bin 0 -> 1313 bytes .../8bc3812d75d08ee6_0 | Bin 0 -> 1300 bytes .../8c6f07b5576b4aab_0 | Bin 0 -> 1558 bytes .../8c7edcd939fc7e83_0 | Bin 0 -> 1599 bytes .../8ce3ef412d22aad1_0 | Bin 0 -> 1319 bytes .../8cf4139cfdfbfc8d_0 | Bin 0 -> 1562 bytes .../8d537950d77cd7c7_0 | Bin 0 -> 1420 bytes .../8db29d494e6bd315_0 | Bin 0 -> 1456 bytes .../8ee7c4a577f7a0de_0 | Bin 0 -> 1450 bytes .../8f16ca910597cc7a_0 | Bin 0 -> 1397 bytes .../8fe77c96e12c0e82_0 | Bin 0 -> 1571 bytes .../90380676b30f51d7_0 | Bin 0 -> 1330 bytes .../90404dc2347f9dab_0 | Bin 0 -> 1396 bytes .../904d9d11ab898cc9_0 | Bin 0 -> 1532 bytes .../906a12dea99dea37_0 | Bin 0 -> 1611 bytes .../90c1259cd9567b5a_0 | Bin 0 -> 1601 bytes .../9136a8b19fc17c26_0 | Bin 0 -> 1255 bytes .../92b1a249fe90382f_0 | Bin 0 -> 1363 bytes .../93fcaad73df22088_0 | Bin 0 -> 1407 bytes .../94351c9a10539573_0 | Bin 0 -> 1474 bytes .../94a97651f25813ea_0 | Bin 0 -> 1420 bytes .../97c2222de82aabb7_0 | Bin 0 -> 1378 bytes .../989b1c0e817cb740_0 | Bin 0 -> 1384 bytes .../9944e43e0af2504f_0 | Bin 0 -> 1462 bytes .../9991dcbe73719eb6_0 | Bin 0 -> 1388 bytes .../99c7c14f7c842aee_0 | Bin 0 -> 1494 bytes .../9a1d5e2e19cd6830_0 | Bin 0 -> 1409 bytes .../9ad2d6a2d0d34d8b_0 | Bin 0 -> 5100 bytes .../9bbcd130c76ca82b_0 | Bin 0 -> 1365 bytes .../9c1a47b65557b3c7_0 | Bin 0 -> 1423 bytes .../9c44bf9d9f6d5046_0 | Bin 0 -> 1804 bytes .../9c797756525c3a9d_0 | Bin 0 -> 1514 bytes .../9d1cfc17ee75085f_0 | Bin 0 -> 1488 bytes .../9e0164d9f9c21b2b_0 | Bin 0 -> 1549 bytes .../9e208c9945614b0a_0 | Bin 0 -> 1366 bytes .../9f6242da93cf9a60_0 | Bin 0 -> 1558 bytes .../9fafcd5b7c4c7d46_0 | Bin 0 -> 1378 bytes .../9fe159871d0f34b1_0 | Bin 0 -> 1861 bytes .../9fe60c30216cae9f_0 | Bin 0 -> 1415 bytes .../9fe6d760ee68bde4_0 | Bin 0 -> 1355 bytes .../a09e183f013c55f9_0 | Bin 0 -> 1523 bytes .../a111af295948c13b_0 | Bin 0 -> 1507 bytes .../a22c8b7fdc93ba7b_0 | Bin 0 -> 1702 bytes .../a2516d049d3061eb_0 | Bin 0 -> 1370 bytes .../a3210a474dbf3470_0 | Bin 0 -> 1741 bytes .../a441a981da270027_0 | Bin 0 -> 1563 bytes .../a5e8235022e3ffb2_0 | Bin 0 -> 1388 bytes .../a6e6bd77279ec2d1_0 | Bin 0 -> 1567 bytes .../a98098b99e7d2869_0 | Bin 0 -> 1606 bytes .../a9d4becd3632d6ee_0 | Bin 0 -> 1229 bytes .../a9ef7b7d112096fb_0 | Bin 0 -> 1532 bytes .../aa4267498c1bdb8e_0 | Bin 0 -> 1456 bytes .../abb42dd22bb398d8_0 | Bin 0 -> 1501 bytes .../ac8d4fbbff1e4511_0 | Bin 0 -> 1278 bytes .../ac8f3a08baae84c7_0 | Bin 0 -> 1511 bytes .../accbc6b98658fec3_0 | Bin 0 -> 1438 bytes .../acf7596d327c576c_0 | Bin 0 -> 1251 bytes .../ad02fae9789df093_0 | Bin 0 -> 1332 bytes .../ad14117198bec082_0 | Bin 0 -> 1352 bytes .../ae369f724076d110_0 | Bin 0 -> 1243 bytes .../ae902f024ac9b001_0 | Bin 0 -> 1340 bytes .../ae9af5c89b53f7b7_0 | Bin 0 -> 1371 bytes .../aea414ab5074aa6c_0 | Bin 0 -> 1498 bytes .../aec58053023a88ac_0 | Bin 0 -> 1350 bytes .../af11397f610def1d_0 | Bin 0 -> 1320 bytes .../af2753ca257c8835_0 | Bin 0 -> 1288 bytes .../af616d40a7566670_0 | Bin 0 -> 1437 bytes .../af66c8b1d2edf140_0 | Bin 0 -> 1512 bytes .../afb1287c332f9b5b_0 | Bin 0 -> 1315 bytes .../b0b96b9337ec0f01_0 | Bin 0 -> 1502 bytes .../b0fcfb2205e12b8c_0 | Bin 0 -> 1430 bytes .../b11399c2d34b65ec_0 | Bin 0 -> 1400 bytes .../b13f8d35dd4416ee_0 | Bin 0 -> 1485 bytes .../b17089788610695d_0 | Bin 0 -> 1430 bytes .../b20fb40450b8df8d_0 | Bin 0 -> 1294 bytes .../b253d9782a04fa24_0 | Bin 0 -> 1319 bytes .../b25fb755218203c7_0 | Bin 0 -> 1393 bytes .../b27f4456a0893c22_0 | Bin 0 -> 1328 bytes .../b334d6f43db7225f_0 | Bin 0 -> 1555 bytes .../b375963a13a8ca2a_0 | Bin 0 -> 1365 bytes .../b3b3268a576e2217_0 | Bin 0 -> 1629 bytes .../b4b3413faa63c5c9_0 | Bin 0 -> 1342 bytes .../b535d4da7e56c833_0 | Bin 0 -> 1323 bytes .../b5384dfe649ae3c9_0 | Bin 0 -> 1427 bytes .../b57d38814d61150e_0 | Bin 0 -> 1231 bytes .../b5db8021d45d1a84_0 | Bin 0 -> 1335 bytes .../b60781e5744b2a1c_0 | Bin 0 -> 1357 bytes .../b64bde2f4d5986c7_0 | Bin 0 -> 1326 bytes .../b6994106f42f340a_0 | Bin 0 -> 1293 bytes .../b70da7e783de3e3f_0 | Bin 0 -> 1331 bytes .../b71ed6589c7be093_0 | Bin 0 -> 1595 bytes .../b754d8e55cf362ea_0 | Bin 0 -> 1380 bytes .../b7909cb8f6e30f6f_0 | Bin 0 -> 1571 bytes .../b7c6fd9fbd20ecaf_0 | Bin 0 -> 1304 bytes .../b84030228bcea101_0 | Bin 0 -> 1270 bytes .../b852063f83c7b9f0_0 | Bin 0 -> 1356 bytes .../b8c0761c78dae0e5_0 | Bin 0 -> 1514 bytes .../b8d3986c9b1abcef_0 | Bin 0 -> 1526 bytes .../b923d597daf5f5da_0 | Bin 0 -> 1588 bytes .../b9a3f2fc12e61701_0 | Bin 0 -> 1404 bytes .../b9fc73196a15de83_0 | Bin 0 -> 1407 bytes .../ba5bae53b65d3bc7_0 | Bin 0 -> 1484 bytes .../bb61669531d4e58d_0 | Bin 0 -> 1549 bytes .../bbd63dece1bdf1f8_0 | Bin 0 -> 1581 bytes .../bc1b9eab080caf12_0 | Bin 0 -> 1371 bytes .../bcb692b2d63ab273_0 | Bin 0 -> 1292 bytes .../bd35d25df8e8d68c_0 | Bin 0 -> 1446 bytes .../bd9efb0b6d94f452_0 | Bin 0 -> 1590 bytes .../bdcc4a26b93e80bf_0 | Bin 0 -> 1345 bytes .../bdefb43552790deb_0 | Bin 0 -> 1346 bytes .../bdf98845dbf92cf7_0 | Bin 0 -> 1426 bytes .../bf08f2433cc99fa1_0 | Bin 0 -> 1436 bytes .../bf77de102b70e497_0 | Bin 0 -> 1619 bytes .../bff5dc42912015d2_0 | Bin 0 -> 1654 bytes .../c338bdddb184f703_0 | Bin 0 -> 1377 bytes .../c380b0c4841aa25b_0 | Bin 0 -> 1367 bytes .../c3c9632fba0bd8d7_0 | Bin 0 -> 1398 bytes .../c441dfa2465b5fa6_0 | Bin 0 -> 1195 bytes .../c4515313351f1df3_0 | Bin 0 -> 1438 bytes .../c4e866e94b70e9ac_0 | Bin 0 -> 1460 bytes .../c5765227c22fbdf2_0 | Bin 0 -> 1439 bytes .../c587a83357030b91_0 | Bin 0 -> 1430 bytes .../c591d07e12a43bf2_0 | Bin 0 -> 1434 bytes .../c5bb406ae3cf31e5_0 | Bin 0 -> 1486 bytes .../c6c9e29b3412b09c_0 | Bin 0 -> 1468 bytes .../c7a30a85a85d0ee9_0 | Bin 0 -> 1430 bytes .../c884bad1d888a6ca_0 | Bin 0 -> 1466 bytes .../c9393eb9835030ef_0 | Bin 0 -> 1440 bytes .../c9d81d6c12c3977f_0 | Bin 0 -> 1474 bytes .../cb5b394264a7b03f_0 | Bin 0 -> 1372 bytes .../cbdb9df688ab59c1_0 | Bin 0 -> 1537 bytes .../cbe8c6cc8cdf4253_0 | Bin 0 -> 1307 bytes .../cc839ca63759a933_0 | Bin 0 -> 1511 bytes .../cd49d7961e20a6a1_0 | Bin 0 -> 1401 bytes .../cd5860071fc9af25_0 | Bin 0 -> 1567 bytes .../cfcf69a2a44c3240_0 | Bin 0 -> 1361 bytes .../d01e08504cf7f0d2_0 | Bin 0 -> 1562 bytes .../d08588d1c7114cf6_0 | Bin 0 -> 1282 bytes .../d120c6efa03f7bcf_0 | Bin 0 -> 1344 bytes .../d162575e51be1b1b_0 | Bin 0 -> 1332 bytes .../d1628889ec2280b2_0 | Bin 0 -> 1505 bytes .../d1958a4c2322ae80_0 | Bin 0 -> 1432 bytes .../d1d74df0e0804e09_0 | Bin 0 -> 1400 bytes .../d25dd5c26ab005c4_0 | Bin 0 -> 1508 bytes .../d266e92b0ea7b46d_0 | Bin 0 -> 1365 bytes .../d28e10a752b14040_0 | Bin 0 -> 1694 bytes .../d2b0ca3185c63611_0 | Bin 0 -> 1493 bytes .../d3150e10cc3f8100_0 | Bin 0 -> 1354 bytes .../d32c1ae48c08773b_0 | Bin 0 -> 1421 bytes .../d41452f8148bab4f_0 | Bin 0 -> 1486 bytes .../d4890a4a0126077f_0 | Bin 0 -> 1670 bytes .../d5d07c05706867e3_0 | Bin 0 -> 5120 bytes .../d63ecd498f2df031_0 | Bin 0 -> 1410 bytes .../d6b435b13658ad79_0 | Bin 0 -> 1514 bytes .../d724a6a489355fd7_0 | Bin 0 -> 1360 bytes .../d7614f8e699d7af7_0 | Bin 0 -> 2810 bytes .../d7860e993a5630c3_0 | Bin 0 -> 1458 bytes .../d7c1eb09513b88dc_0 | Bin 0 -> 67500 bytes .../d7ee02e163765039_0 | Bin 0 -> 1315 bytes .../d85ab24a940b886b_0 | Bin 0 -> 1471 bytes .../d868e21a071aaa88_0 | Bin 0 -> 1536 bytes .../d86a30efba8dca7d_0 | Bin 0 -> 1578 bytes .../d877c081a5e74446_0 | Bin 0 -> 1423 bytes .../d904d5df8bcc2368_0 | Bin 0 -> 1406 bytes .../da9bf1b664b212e4_0 | Bin 0 -> 1371 bytes .../daf657e3d886e3f5_0 | Bin 0 -> 1473 bytes .../db9869d05db04f19_0 | Bin 0 -> 1327 bytes .../dc0b85e29399b7db_0 | Bin 0 -> 1446 bytes .../dd86e516f7ea18c3_0 | Bin 0 -> 1421 bytes .../de38962cd1ad8145_0 | Bin 0 -> 1384 bytes .../df1566ee5748d5c8_0 | Bin 0 -> 1531 bytes .../df29d983c7787c30_0 | Bin 0 -> 1401 bytes .../e06cabc98b1c4b25_0 | Bin 0 -> 1466 bytes .../e072450abf56cd4e_0 | Bin 0 -> 1409 bytes .../e1a11641a222cb84_0 | Bin 0 -> 1283 bytes .../e1b0a3fbeffc9be3_0 | Bin 0 -> 1468 bytes .../e2539ce4c4b91c64_0 | Bin 0 -> 52879 bytes .../e27dc59ce1a1362c_0 | Bin 0 -> 1443 bytes .../e51b347d4c00be5c_0 | Bin 0 -> 1304 bytes .../e56ddf935567f7ef_0 | Bin 0 -> 1459 bytes .../e6a4d86dbe08b13e_0 | Bin 0 -> 1380 bytes .../e783970fc7df1fe0_0 | Bin 0 -> 1510 bytes .../e8fca6e5aa54903c_0 | Bin 0 -> 1464 bytes .../e909f7c6df34fa61_0 | Bin 0 -> 1598 bytes .../e90b160176cd82b1_0 | Bin 0 -> 1709 bytes .../e97e0c67bace2cf0_0 | Bin 0 -> 1761 bytes .../e97f8dab42e0d8e7_0 | Bin 0 -> 1451 bytes .../e9953b743f7c2f41_0 | Bin 0 -> 1454 bytes .../ea213b800075ab34_0 | Bin 0 -> 1437 bytes .../ea7647fca069f90f_0 | Bin 0 -> 1366 bytes .../eae1d667c105527a_0 | Bin 0 -> 1357 bytes .../eaf75b8fe5189380_0 | Bin 0 -> 1387 bytes .../ebfec19c01a2e65b_0 | Bin 0 -> 1503 bytes .../eccb5f0dcff7ac51_0 | Bin 0 -> 1403 bytes .../ed35e8f7da1e5e18_0 | Bin 0 -> 1395 bytes .../ed88fc92ee703cf0_0 | Bin 0 -> 1684 bytes .../edc4373b200da25f_0 | Bin 0 -> 1396 bytes .../ee829bf4f42f1888_0 | Bin 0 -> 1551 bytes .../ef2982b5975e4296_0 | Bin 0 -> 1354 bytes .../ef5b2db1a8142fc9_0 | Bin 0 -> 1462 bytes .../efbc196a4dfb22aa_0 | Bin 0 -> 1388 bytes .../efd475c526c9c1d8_0 | Bin 0 -> 1529 bytes .../f016fbdaf514b269_0 | Bin 0 -> 1609 bytes .../f1263cdcb28a2882_0 | Bin 0 -> 1443 bytes .../f22388deab1c296d_0 | Bin 0 -> 1766 bytes .../f267e80a6f81f4b5_0 | Bin 0 -> 1411 bytes .../f2b90e027d21b687_0 | Bin 0 -> 1332 bytes .../f3f5fbc2f09835ce_0 | Bin 0 -> 1355 bytes .../f4e079ef6a9cdb5e_0 | Bin 0 -> 1368 bytes .../f529e18a77966546_0 | Bin 0 -> 1438 bytes .../f5a310cc8b2edd28_0 | Bin 0 -> 1742 bytes .../f5beb7f811387224_0 | Bin 0 -> 1732 bytes .../f66df915c89a519d_0 | Bin 0 -> 1458 bytes .../f6c0156a2fea2845_0 | Bin 0 -> 1572 bytes .../f6f4d65c2f0747df_0 | Bin 0 -> 1453 bytes .../f71b17f7ebd58e9d_0 | Bin 0 -> 1358 bytes .../f791b588370f3828_0 | Bin 0 -> 1466 bytes .../f7ae4156a119fb28_0 | Bin 0 -> 1625 bytes .../f877fef425749231_0 | Bin 0 -> 1494 bytes .../f8901d129c274bed_0 | Bin 0 -> 1427 bytes .../f895d0a6446241da_0 | Bin 0 -> 1440 bytes .../f8d79728ff97f661_0 | Bin 0 -> 1388 bytes .../f8e0d7196e603f5c_0 | Bin 0 -> 1378 bytes .../fa4ed36594c5557d_0 | Bin 0 -> 1236 bytes .../fb0c98a284d9915a_0 | Bin 0 -> 1347 bytes .../fb96252ef371bd49_0 | Bin 0 -> 1445 bytes .../fcbc1da413162718_0 | Bin 0 -> 1654 bytes .../fd1abaa0e6192be7_0 | Bin 0 -> 1431 bytes .../fd5f5589973f3caa_0 | Bin 0 -> 1330 bytes .../fe0825ba0022493e_0 | Bin 0 -> 1436 bytes .../fe0863a94af0f7c9_0 | Bin 0 -> 1519 bytes .../fe756b47c45a5730_0 | Bin 0 -> 1562 bytes .../fe8c580bed1de761_0 | Bin 0 -> 1374 bytes .../febdb5cc1f915199_0 | Bin 0 -> 1374 bytes .../ff36c015dd67add3_0 | Bin 0 -> 1399 bytes .../ffa1cfeb1d201a97_0 | Bin 0 -> 1474 bytes .../a57a7ca5-6305-4460-ac5e-392e618ce994/index | Bin 0 -> 24 bytes .../index-dir/the-real-index | Bin 0 -> 12000 bytes .../54024a26d3ccf712_0 | Bin 0 -> 4208817 bytes .../82d930988f59e1ff_0 | Bin 0 -> 4208795 bytes .../b867624a40faea70_0 | Bin 0 -> 4208801 bytes .../b233e79b-4fec-44b8-8960-0d6d7a955e83/index | Bin 0 -> 24 bytes .../index-dir/the-real-index | Bin 0 -> 120 bytes .../a006053cee55d015_0 | Bin 0 -> 288641 bytes .../f8395d38-0733-4946-8c64-9f377902fab2/index | Bin 0 -> 24 bytes .../index-dir/the-real-index | Bin 0 -> 72 bytes .../index.txt | Bin 0 -> 1127 bytes .../0c44e4c4c8c8ada1_0 | Bin 0 -> 244734 bytes .../0c888c0b749b9e33_0 | Bin 0 -> 388391 bytes .../0c888c0b749b9e33_1 | Bin 0 -> 271022 bytes .../0de650566a5514e3_0 | Bin 0 -> 5277 bytes .../10c1bc332814f1db_0 | Bin 0 -> 599757 bytes .../1354b5f7c2a856d5_0 | Bin 0 -> 1188609 bytes .../1354b5f7c2a856d5_1 | Bin 0 -> 361256 bytes .../156ecf8e0a19058c_0 | Bin 0 -> 86354 bytes .../20d3bc6daf5f3440_0 | Bin 0 -> 338578 bytes .../241897cbcb541b52_0 | Bin 0 -> 424068 bytes .../262e9df1e2d15d47_0 | Bin 0 -> 60518 bytes .../2786d125441c365a_0 | Bin 0 -> 170148 bytes .../2786d125441c365a_1 | Bin 0 -> 98762 bytes .../2997514a15f97019_0 | Bin 0 -> 106534 bytes .../2ee8d95c51d3b7d1_0 | Bin 0 -> 48467 bytes .../2ee8d95c51d3b7d1_1 | Bin 0 -> 35759 bytes .../30fdbcf80e02e088_0 | Bin 0 -> 1755061 bytes .../3655b57a8feb677c_0 | Bin 0 -> 1368144 bytes .../371e8f851c4af508_0 | Bin 0 -> 20768 bytes .../38fe1561e2002ceb_0 | Bin 0 -> 54713 bytes .../3aef9bfd971876ae_0 | Bin 0 -> 21567 bytes .../3aef9bfd971876ae_1 | Bin 0 -> 11920 bytes .../3c0f455159e10c2a_0 | Bin 0 -> 82251 bytes .../41771143ca47bf5d_0 | Bin 0 -> 3614 bytes .../42690ef93d41a7f6_0 | Bin 0 -> 450627 bytes .../42690ef93d41a7f6_1 | Bin 0 -> 399545 bytes .../4553ba12b187f4c1_0 | Bin 0 -> 157174 bytes .../4b4ab5e2e8e51017_0 | Bin 0 -> 7018 bytes .../4b59694a60068a9a_0 | Bin 0 -> 95974 bytes .../50bc2a822f0bd3f9_0 | Bin 0 -> 204542 bytes .../50bc2a822f0bd3f9_1 | Bin 0 -> 115753 bytes .../519787191582cd5e_0 | Bin 0 -> 262503 bytes .../5212c900c21f2442_0 | Bin 0 -> 3042 bytes .../550e41bd70b0ee0e_0 | Bin 0 -> 189418 bytes .../5d515bd553f8e102_0 | Bin 0 -> 1944303 bytes .../5ef247a383493ff1_0 | Bin 0 -> 847 bytes .../60681db93a93ab4b_0 | Bin 0 -> 468512 bytes .../628700c977a167ab_0 | Bin 0 -> 93436 bytes .../65fcb4b93f8cfb33_0 | Bin 0 -> 104256 bytes .../65fcb4b93f8cfb33_1 | Bin 0 -> 92613 bytes .../6918f0b1f2066aad_0 | Bin 0 -> 6293 bytes .../691c63d6eab671fe_0 | Bin 0 -> 997226 bytes .../69c5c36f0b081f4a_0 | Bin 0 -> 407645 bytes .../69c5c36f0b081f4a_1 | Bin 0 -> 247709 bytes .../6b913fea10b54c71_0 | Bin 0 -> 422904 bytes .../6cae3579b4d1c390_0 | Bin 0 -> 1580439 bytes .../6d164b319dcb74a4_0 | Bin 0 -> 368217 bytes .../6edf68457c8bfe1f_0 | Bin 0 -> 887 bytes .../6fbb7fa7d8d2930e_0 | Bin 0 -> 286029 bytes .../70a9ee61830d7cc2_0 | Bin 0 -> 95720 bytes .../70a9ee61830d7cc2_1 | Bin 0 -> 65676 bytes .../714a04bda77fc715_0 | Bin 0 -> 38963 bytes .../71795f3195364dc8_0 | Bin 0 -> 99463 bytes .../72465c1d1abe1a64_0 | Bin 0 -> 457376 bytes .../78fb11ed10f5f2f5_0 | Bin 0 -> 26697 bytes .../798b0126b0fa8b30_0 | Bin 0 -> 9263 bytes .../798b0126b0fa8b30_1 | Bin 0 -> 6677 bytes .../835577074314aced_0 | Bin 0 -> 500865 bytes .../835577074314aced_1 | Bin 0 -> 481303 bytes .../855623f4c52e90d5_0 | Bin 0 -> 136728 bytes .../855623f4c52e90d5_1 | Bin 0 -> 134475 bytes .../863db226d286a226_0 | Bin 0 -> 1379 bytes .../882359eb8f40badd_0 | Bin 0 -> 84077 bytes .../882359eb8f40badd_1 | Bin 0 -> 49961 bytes .../892df032d6d084e4_0 | Bin 0 -> 1611 bytes .../892df032d6d084e4_1 | Bin 0 -> 1450 bytes .../8dd5c96853e60ff8_0 | Bin 0 -> 70468 bytes .../8dd5c96853e60ff8_1 | Bin 0 -> 44511 bytes .../8f5c3973168e9cd7_0 | Bin 0 -> 684982 bytes .../913158a8fa01b685_0 | Bin 0 -> 3537713 bytes .../92f3e7b6cfd21174_0 | Bin 0 -> 53008 bytes .../92f3e7b6cfd21174_1 | Bin 0 -> 92627 bytes .../94034c254cff5cf4_0 | Bin 0 -> 29078 bytes .../94034c254cff5cf4_1 | Bin 0 -> 19270 bytes .../980b45a396a84b64_0 | Bin 0 -> 35969 bytes .../980b45a396a84b64_1 | Bin 0 -> 54952 bytes .../9f9fe787af5267bb_0 | Bin 0 -> 1657 bytes .../a06c7758aa595dab_0 | Bin 0 -> 162884 bytes .../a2bb1795da26e56f_0 | Bin 0 -> 144169 bytes .../a2ec65f3093378d5_0 | Bin 0 -> 38434 bytes .../a2ec65f3093378d5_1 | Bin 0 -> 54282 bytes .../a6d86813558e38bb_0 | Bin 0 -> 900342 bytes .../a8d2a8f40acd0424_0 | Bin 0 -> 384402 bytes .../a8d2a8f40acd0424_1 | Bin 0 -> 274817 bytes .../b2ee940d308dea2e_0 | Bin 0 -> 91443 bytes .../b2ee940d308dea2e_1 | Bin 0 -> 48830 bytes .../b35e5bbd39c36bd3_0 | Bin 0 -> 148279 bytes .../b35e5bbd39c36bd3_1 | Bin 0 -> 105075 bytes .../beefeca20bbb79de_0 | Bin 0 -> 117564 bytes .../beefeca20bbb79de_1 | Bin 0 -> 65388 bytes .../c020baaa4a2cd60e_0 | Bin 0 -> 539432 bytes .../c0c3c1efb78cf3b4_0 | Bin 0 -> 7061 bytes .../c5e4712ce6d0b5b7_0 | Bin 0 -> 358810 bytes .../c7b579a7fc76cc83_0 | Bin 0 -> 525609 bytes .../ccae21030651acbd_0 | Bin 0 -> 27644 bytes .../ccae21030651acbd_1 | Bin 0 -> 32278 bytes .../ce182d4e15a26d65_0 | Bin 0 -> 1421 bytes .../ce182d4e15a26d65_1 | Bin 0 -> 1408 bytes .../d76753c35e47b9a6_0 | Bin 0 -> 84159 bytes .../d76753c35e47b9a6_1 | Bin 0 -> 55158 bytes .../dcb1afafccfd5e4d_0 | Bin 0 -> 240692 bytes .../e160ce32c72e95b5_0 | Bin 0 -> 537184 bytes .../e24e9ac859acc440_0 | Bin 0 -> 170058 bytes .../e7a0602c472ef959_0 | Bin 0 -> 28236 bytes .../f1a2f898505fe7bc_0 | Bin 0 -> 162888 bytes .../f1a2f898505fe7bc_1 | Bin 0 -> 219511 bytes .../f32c33e67d0bd51d_0 | Bin 0 -> 243858 bytes .../f9f18fce84316c15_0 | Bin 0 -> 59486 bytes .../fce29a6c31af62bc_0 | Bin 0 -> 9274 bytes .../fce29a6c31af62bc_1 | Bin 0 -> 6226 bytes .../63b1b16d-3189-4b5f-9213-9048e2d49fc5/index | Bin 0 -> 24 bytes .../index-dir/the-real-index | Bin 0 -> 1992 bytes .../index.txt | Bin 0 -> 175 bytes .../5c44c608e968d1a2_0 | Bin 0 -> 414958 bytes .../03be0e10-8edb-4fe6-8ad1-f9d13347f67d/index | Bin 0 -> 24 bytes .../index-dir/the-real-index | Bin 0 -> 72 bytes .../d1fcfabdff80b26e_0 | Bin 0 -> 424581 bytes .../1bf07e59-9e36-49d5-824f-921b7a4b4370/index | Bin 0 -> 24 bytes .../index-dir/the-real-index | Bin 0 -> 72 bytes .../589cab1e-5f40-449d-8fb8-541d1be495b1/index | Bin 0 -> 24 bytes .../index-dir/the-real-index | Bin 0 -> 48 bytes .../19b26a2a946d82ed_0 | Bin 0 -> 288309 bytes .../e69a596848720b01_0 | Bin 0 -> 143462 bytes .../b1e4fbda-fbe9-4cd3-bbf1-e98a67c9f8f1/index | Bin 0 -> 24 bytes .../index-dir/the-real-index | Bin 0 -> 96 bytes .../index.txt | Bin 0 -> 476 bytes .../034c6ddbca1c01dc_0 | Bin 0 -> 2301 bytes .../0587c5e59af811eb_0 | Bin 0 -> 741 bytes .../07d177d7cb118f9d_0 | Bin 0 -> 1781 bytes .../09a3f479389b2f3e_0 | Bin 0 -> 4788 bytes .../0ae4079e81991306_0 | Bin 0 -> 3406 bytes .../0ae4079e81991306_1 | Bin 0 -> 8266 bytes .../0cbc2ee61c9e90ce_0 | Bin 0 -> 1487 bytes .../10bdd7a5a8e0f8d0_0 | Bin 0 -> 744 bytes .../14965a1c8f5f8d7a_0 | Bin 0 -> 1364 bytes .../15f9beff407d072d_0 | Bin 0 -> 907 bytes .../192c2092560ae10c_0 | Bin 0 -> 7507 bytes .../1b0872fee1f9d4e0_0 | Bin 0 -> 1520 bytes .../1d49f95a84be5ac1_0 | Bin 0 -> 6996 bytes .../1d49f95a84be5ac1_1 | Bin 0 -> 17990 bytes .../21207c6a01baab90_0 | Bin 0 -> 6765 bytes .../27cb7f0323a443b5_0 | Bin 0 -> 792 bytes .../2c5ff5da48d32502_0 | Bin 0 -> 6199 bytes .../2c5ff5da48d32502_1 | Bin 0 -> 13053 bytes .../2fb909d30c4feb9b_0 | Bin 0 -> 848 bytes .../316a1136edb9ae89_0 | Bin 0 -> 4020 bytes .../31c4f4ef122216fd_0 | Bin 0 -> 2059 bytes .../3237b092b8893c71_0 | Bin 0 -> 915 bytes .../337829bd96c0bb0c_0 | Bin 0 -> 5618 bytes .../337829bd96c0bb0c_1 | Bin 0 -> 12069 bytes .../3793732114425c02_0 | Bin 0 -> 6192 bytes .../39bc77af21c7a055_0 | Bin 0 -> 14672 bytes .../3f6b73d560506067_0 | Bin 0 -> 1336 bytes .../40050dc4a21d289d_0 | Bin 0 -> 2086 bytes .../400d4bf2f85979ca_0 | Bin 0 -> 1223 bytes .../400d4bf2f85979ca_1 | Bin 0 -> 1346 bytes .../41862b87ea43192a_0 | Bin 0 -> 1558 bytes .../41ac76c57e72009e_0 | Bin 0 -> 867 bytes .../445133e5733d278a_0 | Bin 0 -> 1913 bytes .../4ad26e4762e51e37_0 | Bin 0 -> 1823 bytes .../4ef4bf98570f5e7c_0 | Bin 0 -> 1456 bytes .../5492342daad87031_0 | Bin 0 -> 1502 bytes .../55e6f5660736d734_0 | Bin 0 -> 1198 bytes .../55e6f5660736d734_1 | Bin 0 -> 1361 bytes .../5751807d7822f320_0 | Bin 0 -> 6542 bytes .../5751807d7822f320_1 | Bin 0 -> 15673 bytes .../584532a04040a579_0 | Bin 0 -> 845 bytes .../5b826b1aaaa18c6d_0 | Bin 0 -> 3600 bytes .../5eaea9cee2153b18_0 | Bin 0 -> 780 bytes .../6202cf6b8c76390b_0 | Bin 0 -> 798 bytes .../6202cf6b8c76390b_1 | Bin 0 -> 828 bytes .../63176c280e1f2620_0 | Bin 0 -> 2842 bytes .../694364d94928f43e_0 | Bin 0 -> 667 bytes .../6bdf0c55fd64fbff_0 | Bin 0 -> 3340 bytes .../70dd1232aa1dc49a_0 | Bin 0 -> 2379 bytes .../710a090431817783_0 | Bin 0 -> 858 bytes .../759937651cf59aed_0 | Bin 0 -> 1148 bytes .../767b47419e493d42_0 | Bin 0 -> 1751 bytes .../7ddd4bb8ec080cab_0 | Bin 0 -> 6013 bytes .../7ddd4bb8ec080cab_1 | Bin 0 -> 5708 bytes .../81f94cb2c2a30976_0 | Bin 0 -> 1365 bytes .../83302bec4944bf86_0 | Bin 0 -> 5145 bytes .../8444d9b9710f63a7_0 | Bin 0 -> 2907 bytes .../9575c9466e2f27f5_0 | Bin 0 -> 10981 bytes .../9575c9466e2f27f5_1 | Bin 0 -> 18534 bytes .../9a12e1ddedf443a3_0 | Bin 0 -> 17221 bytes .../a06a529bf5188b81_0 | Bin 0 -> 3021 bytes .../a06a529bf5188b81_1 | Bin 0 -> 5595 bytes .../a5c10a00111ac550_0 | Bin 0 -> 3821 bytes .../a5fd86fffc86886e_0 | Bin 0 -> 3747 bytes .../a5fd86fffc86886e_1 | Bin 0 -> 10131 bytes .../a6aa9ae962be64c8_0 | Bin 0 -> 2242 bytes .../a6aa9ae962be64c8_1 | Bin 0 -> 4526 bytes .../a8102c20e3dfa22d_0 | Bin 0 -> 3229 bytes .../a8102c20e3dfa22d_1 | Bin 0 -> 8651 bytes .../af432948523ffc36_0 | Bin 0 -> 1367 bytes .../b094bc4de53b94b9_0 | Bin 0 -> 1573 bytes .../b3250c239391a92f_0 | Bin 0 -> 1661 bytes .../bcebf0d2726cd7d0_0 | Bin 0 -> 1687 bytes .../bec09916227584ae_0 | Bin 0 -> 1405 bytes .../bf3c3a1a8ab24f5c_0 | Bin 0 -> 2065 bytes .../c389b5211f3327c2_0 | Bin 0 -> 687 bytes .../c3e9132f62a2f24c_0 | Bin 0 -> 1657 bytes .../c62e8a3d503b863a_0 | Bin 0 -> 3944 bytes .../c7e7aaa9e27d30d8_0 | Bin 0 -> 2980 bytes .../ccd3166c8fe34364_0 | Bin 0 -> 1424 bytes .../cdacfed793b166c9_0 | Bin 0 -> 13763 bytes .../d061642eeac34211_0 | Bin 0 -> 2511 bytes .../d16ba1100e823add_0 | Bin 0 -> 5351 bytes .../d5a711f4aa681eba_0 | Bin 0 -> 1295727 bytes .../d5a711f4aa681eba_1 | Bin 0 -> 1390502 bytes .../d9c32ce3dbcf7a51_0 | Bin 0 -> 1110 bytes .../e439822d42c03eba_0 | Bin 0 -> 935 bytes .../ebd61f32f4bb8c70_0 | Bin 0 -> 86647 bytes .../ec4a483d21dd3ff0_0 | Bin 0 -> 4090 bytes .../ec4a483d21dd3ff0_1 | Bin 0 -> 8230 bytes .../ef296d5201d80c31_0 | Bin 0 -> 2661 bytes .../f3beb061b9aeb818_0 | Bin 0 -> 3070 bytes .../f5a1c24cd06dd4f5_0 | Bin 0 -> 2998 bytes .../f74f7b59e3071ae4_0 | Bin 0 -> 8555 bytes .../f74f7b59e3071ae4_1 | Bin 0 -> 24326 bytes .../fecc356fc600484c_0 | Bin 0 -> 1205 bytes .../ffc0fee7b67a2edc_0 | Bin 0 -> 1620 bytes .../4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/index | Bin 0 -> 24 bytes .../index-dir/the-real-index | Bin 0 -> 1968 bytes .../index.txt | Bin 0 -> 232 bytes .../010e2aa41be96f1c_0 | Bin 0 -> 8526 bytes .../036f5a255bfb08b0_0 | Bin 0 -> 131280 bytes .../046fcb9530154a4b_0 | Bin 0 -> 27693 bytes .../07c2a39150f403f8_0 | Bin 0 -> 9907 bytes .../0981e7fe4cf5c25a_0 | Bin 0 -> 740117 bytes .../09a82bddfd94214f_0 | Bin 0 -> 2826 bytes .../0b045482ed4b93db_0 | Bin 0 -> 40023 bytes .../0d449a67befa201d_0 | Bin 0 -> 21648 bytes .../0fefb1ceaeaf5098_0 | Bin 0 -> 99420 bytes .../118f514158558b6a_0 | Bin 0 -> 22415 bytes .../14f236b4ae130bc8_0 | Bin 0 -> 3408 bytes .../15c77db8fa93e72b_0 | Bin 0 -> 3127 bytes .../16af324cd017e896_0 | Bin 0 -> 20986 bytes .../189c8e2d792208bb_0 | Bin 0 -> 5259 bytes .../1d8eca990891ece2_0 | Bin 0 -> 25863 bytes .../21aab6fd892c2a4a_0 | Bin 0 -> 27267 bytes .../24a5591fdb8d6859_0 | Bin 0 -> 9393 bytes .../285dcbb4d87aea56_0 | Bin 0 -> 6266 bytes .../28efa1b838c69775_0 | Bin 0 -> 66717 bytes .../2c42e38f7a4f0eb1_0 | Bin 0 -> 71171 bytes .../2e041b1d682c46ac_0 | Bin 0 -> 11536 bytes .../32e048919195f790_0 | Bin 0 -> 33884 bytes .../3775017a28af54b0_0 | Bin 0 -> 8591 bytes .../398a220eefdaaa79_0 | Bin 0 -> 50120 bytes .../39d4d76ff1b2e13f_0 | Bin 0 -> 1612 bytes .../3ad853c9fdd19ec7_0 | Bin 0 -> 117641 bytes .../3be6db09689668a0_0 | Bin 0 -> 9850 bytes .../3c87e42e0ee9666a_0 | Bin 0 -> 2691 bytes .../3f9f6310fd3c5f1f_0 | Bin 0 -> 22396 bytes .../3fdc9d5ddceff950_0 | Bin 0 -> 3325 bytes .../43039a715f84c6dd_0 | Bin 0 -> 57324 bytes .../4304a31bd22aa08b_0 | Bin 0 -> 6143 bytes .../43a1daa1c514d4a8_0 | Bin 0 -> 6190 bytes .../463810f33351c7d3_0 | Bin 0 -> 6244 bytes .../4715e9ba39cb3d9c_0 | Bin 0 -> 10650 bytes .../481d60447e0af49e_0 | Bin 0 -> 79104 bytes .../4b4c63d8abd570ec_0 | Bin 0 -> 3155 bytes .../4b8c146d8a8a25f8_0 | Bin 0 -> 22438 bytes .../4ca0583dcf7e13b0_0 | Bin 0 -> 6085 bytes .../5881428d47454c97_0 | Bin 0 -> 42496 bytes .../58e7b394d456505f_0 | Bin 0 -> 4894 bytes .../5a7584c974f0c78b_0 | Bin 0 -> 54765 bytes .../5b4380e594b33a1b_0 | Bin 0 -> 3653 bytes .../5b6d22d979ebc753_0 | Bin 0 -> 121939 bytes .../6237dba18060f3ff_0 | Bin 0 -> 61468 bytes .../64b081f2a238b90d_0 | Bin 0 -> 3272 bytes .../6521771cc9b6ca2a_0 | Bin 0 -> 2306 bytes .../68db37ea074f7a80_0 | Bin 0 -> 26375 bytes .../6ff546fa3a5e8807_0 | Bin 0 -> 20758 bytes .../721c7dbf8a1bfdf7_0 | Bin 0 -> 25779 bytes .../73b376e03e29ff27_0 | Bin 0 -> 58182 bytes .../775f273f09f4344c_0 | Bin 0 -> 21450 bytes .../7ab751f11d6acb5c_0 | Bin 0 -> 128501 bytes .../7b460b10ec5a9b07_0 | Bin 0 -> 3756 bytes .../8288c38a1acdb8fa_0 | Bin 0 -> 3270 bytes .../83e18fff80d5211a_0 | Bin 0 -> 42558 bytes .../85b40064e623738f_0 | Bin 0 -> 55678 bytes .../870af6496c3bda8b_0 | Bin 0 -> 6208 bytes .../98390d09e8c6a97d_0 | Bin 0 -> 3085 bytes .../9850de720ec00922_0 | Bin 0 -> 118506 bytes .../996754ef9d3bc530_0 | Bin 0 -> 59101 bytes .../9a722f391e682c9e_0 | Bin 0 -> 213746 bytes .../9f9b39e1821bbeb0_0 | Bin 0 -> 52783 bytes .../a31f055d9b390624_0 | Bin 0 -> 27019 bytes .../aafa214d475b08d4_0 | Bin 0 -> 2494 bytes .../abcbd2ecbf8bb923_0 | Bin 0 -> 140597 bytes .../aed0a671853608a3_0 | Bin 0 -> 4896 bytes .../b3f521cb6b89c79a_0 | Bin 0 -> 12263 bytes .../b6feda5769cf1d94_0 | Bin 0 -> 3635 bytes .../b75fa98e7f699f0c_0 | Bin 0 -> 3099 bytes .../bb291547536af813_0 | Bin 0 -> 2179 bytes .../bc48797fa37441ae_0 | Bin 0 -> 4700 bytes .../c3e1e7363f0c7da7_0 | Bin 0 -> 29595 bytes .../c53ff7118f924ad0_0 | Bin 0 -> 410232 bytes .../c66af30274639a3f_0 | Bin 0 -> 5261 bytes .../c751bb5b15c6a36d_0 | Bin 0 -> 28331 bytes .../ca3e8050d22ad0af_0 | Bin 0 -> 22211 bytes .../ce9dc6717599ee3f_0 | Bin 0 -> 33531 bytes .../d073a59aeee8ddbf_0 | Bin 0 -> 2996 bytes .../d33730ed1f8cc046_0 | Bin 0 -> 36694 bytes .../d8ced88380b30889_0 | Bin 0 -> 10772 bytes .../da537dc2790fe606_0 | Bin 0 -> 5777 bytes .../da568aa26c9caefb_0 | Bin 0 -> 368039 bytes .../deb95f8f6d598448_0 | Bin 0 -> 28104 bytes .../df32ba27f27a019b_0 | Bin 0 -> 79149 bytes .../dfa7b72693b3362f_0 | Bin 0 -> 38236 bytes .../e34be89f97399391_0 | Bin 0 -> 79189 bytes .../e72841ac9f1f9397_0 | Bin 0 -> 2371 bytes .../e90aab69514b2968_0 | Bin 0 -> 56991 bytes .../ea7a46c4086106dc_0 | Bin 0 -> 3370 bytes .../eae50c186db28a9d_0 | Bin 0 -> 51630 bytes .../edd8a0ed102e61dc_0 | Bin 0 -> 17810 bytes .../edfb706d30168794_0 | Bin 0 -> 22472 bytes .../efd150d0e378ac5f_0 | Bin 0 -> 3463 bytes .../f1f630e35f9accab_0 | Bin 0 -> 4188 bytes .../f3ae579bf9e517ec_0 | Bin 0 -> 14866 bytes .../f79fe639651d3334_0 | Bin 0 -> 31190 bytes .../fa061e1cbc1b40a2_0 | Bin 0 -> 12477 bytes .../fff3c320501c2141_0 | Bin 0 -> 10632 bytes .../f1dcab9c-c52b-4438-9405-9ae56e42c738/index | Bin 0 -> 24 bytes .../index-dir/the-real-index | Bin 0 -> 2424 bytes .../index.txt | Bin 0 -> 227 bytes .../00e21cce40be2887_0 | Bin 0 -> 789 bytes .../00f054370cc4d95e_0 | Bin 0 -> 8890 bytes .../024f1406b71919bb_0 | Bin 0 -> 782 bytes .../032c092253d4cb7e_0 | Bin 0 -> 1151 bytes .../0614f28a1a74a65e_0 | Bin 0 -> 1379 bytes .../067d93e8c8fadb1f_0 | Bin 0 -> 1048 bytes .../07a5a327dfcebe0b_0 | Bin 0 -> 3979 bytes .../09b5bc0bc33e2ebd_0 | Bin 0 -> 774 bytes .../0aab74dd13a7ec98_0 | Bin 0 -> 9645 bytes .../0be6979c730980ae_0 | Bin 0 -> 3230 bytes .../0d474291750582ec_0 | Bin 0 -> 2785 bytes .../0e19879486bf9a69_0 | Bin 0 -> 994 bytes .../1004d1e2f4b1d18e_0 | Bin 0 -> 778 bytes .../14a58e07e1b749e4_0 | Bin 0 -> 780 bytes .../156cec31acf2c45d_0 | Bin 0 -> 1443 bytes .../16c95698ab267681_0 | Bin 0 -> 1051 bytes .../18f37a84ca266a79_0 | Bin 0 -> 1215 bytes .../199e590df0d19782_0 | Bin 0 -> 792 bytes .../1bc976e736105ea7_0 | Bin 0 -> 786 bytes .../1ceb285f297627eb_0 | Bin 0 -> 1412 bytes .../1d813428989a99eb_0 | Bin 0 -> 1195 bytes .../205b18f3ee52d95d_0 | Bin 0 -> 786 bytes .../21532d19c0fcc24f_0 | Bin 0 -> 1182 bytes .../241189d344b3c547_0 | Bin 0 -> 785 bytes .../2442001e36350cd7_0 | Bin 0 -> 2030 bytes .../245bdd1f09655e5c_0 | Bin 0 -> 782 bytes .../24cc03f601530def_0 | Bin 0 -> 779 bytes .../25e207f5a83d5621_0 | Bin 0 -> 2046 bytes .../26e97aea58c16df0_0 | Bin 0 -> 48921 bytes .../28a3dca279ffb8ce_0 | Bin 0 -> 1344 bytes .../2b5d2a0652cbbef4_0 | Bin 0 -> 1206 bytes .../30944830c7c7d015_0 | Bin 0 -> 770 bytes .../30c9f6cd24aeecaa_0 | Bin 0 -> 5932 bytes .../36cdd3c30b1ce569_0 | Bin 0 -> 1028 bytes .../378e888e22f37133_0 | Bin 0 -> 2996 bytes .../383d122a1d384799_0 | Bin 0 -> 778 bytes .../386921f56fcc00f6_0 | Bin 0 -> 1035 bytes .../38c7495a87818852_0 | Bin 0 -> 786 bytes .../390baeeeb49e1b46_0 | Bin 0 -> 786 bytes .../3911b6bb960d5dba_0 | Bin 0 -> 5163 bytes .../39c8446d4b6ed0f3_0 | Bin 0 -> 809 bytes .../3ba7954e152570bb_0 | Bin 0 -> 2955 bytes .../3cfaefe3440af4b9_0 | Bin 0 -> 1237 bytes .../3e39c5f26a9faa53_0 | Bin 0 -> 790 bytes .../3f05103c9db5c7ec_0 | Bin 0 -> 786 bytes .../3f78a34f60e4ea5c_0 | Bin 0 -> 1150 bytes .../41a8c960f93a27c2_0 | Bin 0 -> 1136 bytes .../4267a5201fb73900_0 | Bin 0 -> 785 bytes .../46ee7a8d9a644a71_0 | Bin 0 -> 774 bytes .../4858f2ed18beac69_0 | Bin 0 -> 1137 bytes .../48aef4e2e7cdb905_0 | Bin 0 -> 1040 bytes .../497b464009271593_0 | Bin 0 -> 781 bytes .../4df411110640b594_0 | Bin 0 -> 776 bytes .../56f5a0d6d5d6fd2f_0 | Bin 0 -> 1015 bytes .../56fb54514aadd8b6_0 | Bin 0 -> 790 bytes .../591ce1c8ffa9fc91_0 | Bin 0 -> 778 bytes .../5a4bedf49ab00462_0 | Bin 0 -> 774 bytes .../5aa8e3f0072842ee_0 | Bin 0 -> 1287 bytes .../5b5db0d35f953ca6_0 | Bin 0 -> 796 bytes .../5cd59ce3323b055e_0 | Bin 0 -> 90364 bytes .../5cd59ce3323b055e_1 | Bin 0 -> 132231 bytes .../5f09c8f8738d50e1_0 | Bin 0 -> 790 bytes .../5f87160deb37ef79_0 | Bin 0 -> 1270 bytes .../612836579c828552_0 | Bin 0 -> 781 bytes .../63e12c564a03d553_0 | Bin 0 -> 3288 bytes .../651e62789627002b_0 | Bin 0 -> 5383 bytes .../660d0f16611c5eaf_0 | Bin 0 -> 1351 bytes .../69af36bc9adc9559_0 | Bin 0 -> 2458 bytes .../6a2a8817d7dfe967_0 | Bin 0 -> 3580 bytes .../6b75162ab42246d9_0 | Bin 0 -> 12455 bytes .../6c767a5b774596bf_0 | Bin 0 -> 5904 bytes .../6d1d386369c73097_0 | Bin 0 -> 778 bytes .../6d55b5184df1443d_0 | Bin 0 -> 793 bytes .../6dc5fb92b0c2e213_0 | Bin 0 -> 3480 bytes .../6ff144cc889e32e3_0 | Bin 0 -> 2213 bytes .../72acf894c8f003ae_0 | Bin 0 -> 2973 bytes .../72d4ad6693d4faeb_0 | Bin 0 -> 2410 bytes .../72d938f9de4fbd0e_0 | Bin 0 -> 1049 bytes .../79d881ec45f1385d_0 | Bin 0 -> 1030 bytes .../7d85976da1ebefa5_0 | Bin 0 -> 1903 bytes .../7dad506d561013c3_0 | Bin 0 -> 2456 bytes .../7fcaf93cb76b3cce_0 | Bin 0 -> 1853 bytes .../8107cdc3f1a5f26a_0 | Bin 0 -> 7260 bytes .../84426eb28ee2def4_0 | Bin 0 -> 2256 bytes .../8467e5b4d552544f_0 | Bin 0 -> 1139 bytes .../84d2cd0ba826f9f3_0 | Bin 0 -> 3077 bytes .../86343b01e9ed1171_0 | Bin 0 -> 802 bytes .../8641ce2afb064cac_0 | Bin 0 -> 909 bytes .../89c16cbfdc962990_0 | Bin 0 -> 1164 bytes .../8c849de8ba01eea8_0 | Bin 0 -> 1409 bytes .../8c8845abe90bff9b_0 | Bin 0 -> 791 bytes .../8e039e3ac9d9b077_0 | Bin 0 -> 1714 bytes .../8f3c192d9e696a00_0 | Bin 0 -> 2485 bytes .../904e1af19450b1f8_0 | Bin 0 -> 27461 bytes .../90f3607369d9aa12_0 | Bin 0 -> 786 bytes .../910d6b6d3da4cf8b_0 | Bin 0 -> 793 bytes .../91245d97397c554c_0 | Bin 0 -> 1185 bytes .../91b877e671f9175d_0 | Bin 0 -> 782 bytes .../92f66b46ad5828df_0 | Bin 0 -> 774 bytes .../9538eac50d24be2a_0 | Bin 0 -> 841 bytes .../9689990f42775cbe_0 | Bin 0 -> 1703 bytes .../96af1e3ef3ba4c75_0 | Bin 0 -> 36231 bytes .../980ad0ea88d78bfe_0 | Bin 0 -> 1400 bytes .../9973e4080770f2a6_0 | Bin 0 -> 816 bytes .../99a25c32c2a8d2b8_0 | Bin 0 -> 786 bytes .../9a9aa34380687509_0 | Bin 0 -> 786 bytes .../9ab71bb7289f997a_0 | Bin 0 -> 1075 bytes .../9b4ec36135c842dd_0 | Bin 0 -> 1228 bytes .../a1ae36dc42e083da_0 | Bin 0 -> 2257 bytes .../a277d7b883b6d65b_0 | Bin 0 -> 23331 bytes .../a3c93992ec13e47f_0 | Bin 0 -> 8735 bytes .../a43ac071a6293829_0 | Bin 0 -> 21006 bytes .../a43ac071a6293829_1 | Bin 0 -> 26249 bytes .../a62a768aa3c80e0a_0 | Bin 0 -> 778 bytes .../a77f3337093c70be_0 | Bin 0 -> 265707 bytes .../a8c360760f799ccb_0 | Bin 0 -> 786 bytes .../aac95bacd3df4d2c_0 | Bin 0 -> 1273 bytes .../ab39f7b6a3b5fe10_0 | Bin 0 -> 766 bytes .../ab7b816ea3629258_0 | Bin 0 -> 778 bytes .../ab8aaff42b0a5ce9_0 | Bin 0 -> 807 bytes .../ac507ccd6f3a2b02_0 | Bin 0 -> 791 bytes .../b1560b4b5fd1e983_0 | Bin 0 -> 787 bytes .../b1593fbea8e92b53_0 | Bin 0 -> 1581 bytes .../b15de68cc0cd4f98_0 | Bin 0 -> 2867 bytes .../b16e387f944d9a66_0 | Bin 0 -> 1083 bytes .../b2606b201af181a1_0 | Bin 0 -> 777 bytes .../b36609bb002518b7_0 | Bin 0 -> 1464 bytes .../b7a517426c7f0357_0 | Bin 0 -> 1240 bytes .../b7fbafe94d0c224a_0 | Bin 0 -> 1091 bytes .../b7fc7441308b400c_0 | Bin 0 -> 786 bytes .../b88d5e775dcffa07_0 | Bin 0 -> 1075 bytes .../b8a7959989537868_0 | Bin 0 -> 793 bytes .../b92a81493a1dc65e_0 | Bin 0 -> 2292 bytes .../bade2413f0ecbd45_0 | Bin 0 -> 989 bytes .../bb7804956a5f7788_0 | Bin 0 -> 3016 bytes .../bd09d29ac6d50633_0 | Bin 0 -> 1441 bytes .../bd96509006ee329a_0 | Bin 0 -> 1272 bytes .../be1b3f73bc0be0ed_0 | Bin 0 -> 2888 bytes .../be615f32826a8ebf_0 | Bin 0 -> 3115 bytes .../c484bbda3db4256d_0 | Bin 0 -> 4640 bytes .../c5450fb2d6388908_0 | Bin 0 -> 1028 bytes .../c5669de7dde57b60_0 | Bin 0 -> 35299 bytes .../c5b031dd49d15c9e_0 | Bin 0 -> 1399 bytes .../c77a5944ac39fcff_0 | Bin 0 -> 762 bytes .../c7fdb981e3285e1c_0 | Bin 0 -> 6029 bytes .../cb37d1d24d7dfa62_0 | Bin 0 -> 1063 bytes .../cb77df34ea397361_0 | Bin 0 -> 1307 bytes .../cc15c5e19d80ec08_0 | Bin 0 -> 1123 bytes .../cc1abda097f32e8b_0 | Bin 0 -> 2259 bytes .../ccc4f9ee47fe15d1_0 | Bin 0 -> 1320 bytes .../cf9ac69b9795ce19_0 | Bin 0 -> 795 bytes .../d070bbde8c88abd3_0 | Bin 0 -> 12398 bytes .../d0b3549017e33c47_0 | Bin 0 -> 769 bytes .../d3a19edb12a88d34_0 | Bin 0 -> 2823 bytes .../d4fa9fb903c96d92_0 | Bin 0 -> 769 bytes .../d50ab87eabb90640_0 | Bin 0 -> 766 bytes .../d577667594e92b64_0 | Bin 0 -> 778 bytes .../d5b78e5ea8882938_0 | Bin 0 -> 1170 bytes .../d5eec4896e346682_0 | Bin 0 -> 1027 bytes .../d690f836d97cce6e_0 | Bin 0 -> 2522 bytes .../d73e8c92c395887b_0 | Bin 0 -> 798 bytes .../d7792e69c71d0e14_0 | Bin 0 -> 9373 bytes .../d7ecf8f72f904980_0 | Bin 0 -> 800 bytes .../d85c114ff6aae5c1_0 | Bin 0 -> 1317 bytes .../d92e984bb6b9ad3f_0 | Bin 0 -> 782 bytes .../db5c43018f4a6c06_0 | Bin 0 -> 1158 bytes .../dc2c51c50848cd06_0 | Bin 0 -> 786 bytes .../dd190ed1b2d42539_0 | Bin 0 -> 1095 bytes .../df9bba31f07b2dad_0 | Bin 0 -> 1341 bytes .../dfc12e7656e36032_0 | Bin 0 -> 1119 bytes .../e47bac881e000593_0 | Bin 0 -> 4142 bytes .../e61b842bd5087d39_0 | Bin 0 -> 1048 bytes .../e6800195e7abc532_0 | Bin 0 -> 789 bytes .../e765b5a72e123d47_0 | Bin 0 -> 3234 bytes .../e7923c7275f78e4b_0 | Bin 0 -> 793 bytes .../e8b657841ef5c2e0_0 | Bin 0 -> 1196 bytes .../ea066f3cf174ce77_0 | Bin 0 -> 3759 bytes .../eb693ad74ff2dbf6_0 | Bin 0 -> 782 bytes .../eb82738b5af68423_0 | Bin 0 -> 809 bytes .../eeaf0b05507ff81d_0 | Bin 0 -> 1342 bytes .../f19b290d38d0a932_0 | Bin 0 -> 1500 bytes .../f1f40d668edc875d_0 | Bin 0 -> 784 bytes .../f24cf282a9966cf1_0 | Bin 0 -> 1106 bytes .../f27f338bac1305f7_0 | Bin 0 -> 798 bytes .../f2b472eaa88aaf62_0 | Bin 0 -> 1137 bytes .../f47b53f55fa81242_0 | Bin 0 -> 809 bytes .../f5c619d43d285d68_0 | Bin 0 -> 1033 bytes .../f82f5adf8b0ed008_0 | Bin 0 -> 1435 bytes .../f89128014a67d1e4_0 | Bin 0 -> 2506 bytes .../f99333e8b7c429b7_0 | Bin 0 -> 776 bytes .../fbadd0b77df04db0_0 | Bin 0 -> 778 bytes .../fe40d0277e4cfcca_0 | Bin 0 -> 779 bytes .../fe7b6673ab44ee0c_0 | Bin 0 -> 11209 bytes .../ff224f44abbfe29a_0 | Bin 0 -> 142537 bytes .../79cc46bd-ec3b-49cc-84e7-ca0b4927c265/index | Bin 0 -> 24 bytes .../index-dir/the-real-index | Bin 0 -> 4656 bytes .../0029f2d25a32abd2_0 | Bin 0 -> 1139 bytes .../002f08f275657b42_0 | Bin 0 -> 2005 bytes .../002f08f275657b42_1 | Bin 0 -> 1630 bytes .../0060f98a002bd41b_0 | Bin 0 -> 1205 bytes .../00bfc277edfa4aca_0 | Bin 0 -> 11410 bytes .../00fa58c1b46e4a3f_0 | Bin 0 -> 608 bytes .../0123e6fbcb8793d0_0 | Bin 0 -> 583 bytes .../01339410823c5ef1_0 | Bin 0 -> 1470 bytes .../013e0257c24b883c_0 | Bin 0 -> 682 bytes .../018931f401e5e2fc_0 | Bin 0 -> 4120 bytes .../018931f401e5e2fc_1 | Bin 0 -> 3739 bytes .../0190a5f2ba813975_0 | Bin 0 -> 668 bytes .../0200c1b5ff6b18f1_0 | Bin 0 -> 759 bytes .../0272e8cafda516b5_0 | Bin 0 -> 576 bytes .../028c0bb138cd246f_0 | Bin 0 -> 1318 bytes .../02a12436af2b00e6_0 | Bin 0 -> 516 bytes .../02ed6a31e1c0c930_0 | Bin 0 -> 589 bytes .../030dce102f89bbfb_0 | Bin 0 -> 842 bytes .../0352f5d2fe9df2e1_0 | Bin 0 -> 529 bytes .../036bb5b108b732b9_0 | Bin 0 -> 895 bytes .../03fca120d959cb82_0 | Bin 0 -> 1746 bytes .../03ffc940b2f92d23_0 | Bin 0 -> 1494 bytes .../03ffc940b2f92d23_1 | Bin 0 -> 742 bytes .../044600a727a9eaad_0 | Bin 0 -> 624 bytes .../04cb7676af8631a4_0 | Bin 0 -> 626 bytes .../05123e9d5ca4bb40_0 | Bin 0 -> 1360 bytes .../0547c35d653701bc_0 | Bin 0 -> 881 bytes .../05b2a682c531d21b_0 | Bin 0 -> 824 bytes .../05e6ab9f9f35cf4b_0 | Bin 0 -> 6263 bytes .../05e6ab9f9f35cf4b_1 | Bin 0 -> 1645 bytes .../060cd1f132138a54_0 | Bin 0 -> 7885 bytes .../060cd1f132138a54_1 | Bin 0 -> 4316 bytes .../061539260d58d2ca_0 | Bin 0 -> 588 bytes .../067633486eeab1ab_0 | Bin 0 -> 1307 bytes .../06dc1e2342f5188c_0 | Bin 0 -> 3384 bytes .../079b1ce0ffa49d99_0 | Bin 0 -> 2727 bytes .../08269b400d633386_0 | Bin 0 -> 702 bytes .../083a51b7139af6b6_0 | Bin 0 -> 2569 bytes .../083a51b7139af6b6_1 | Bin 0 -> 2885 bytes .../08ad48d638a934c5_0 | Bin 0 -> 996 bytes .../09b000fb3ad014ce_0 | Bin 0 -> 1494 bytes .../09b000fb3ad014ce_1 | Bin 0 -> 1006 bytes .../09cb3fd7d2f474de_0 | Bin 0 -> 9125 bytes .../09d6f31c68de0560_0 | Bin 0 -> 573 bytes .../09f894df8e4f26ec_0 | Bin 0 -> 960 bytes .../0a13c6b91d38f9a3_0 | Bin 0 -> 2027 bytes .../0a13c6b91d38f9a3_1 | Bin 0 -> 3110 bytes .../0ab392b26659de1b_0 | Bin 0 -> 1612 bytes .../0ae0eb2748d7cc9d_0 | Bin 0 -> 1546 bytes .../0b524744f7fb081a_0 | Bin 0 -> 2803 bytes .../0b524744f7fb081a_1 | Bin 0 -> 1647 bytes .../0b92d7aa3137a9d7_0 | Bin 0 -> 869 bytes .../0ba0102bdce0a7bd_0 | Bin 0 -> 673 bytes .../0c460ff2680b84be_0 | Bin 0 -> 568 bytes .../0c708723bd6fb49b_0 | Bin 0 -> 2787 bytes .../0c708723bd6fb49b_1 | Bin 0 -> 2642 bytes .../0c8142858c8a8cd6_0 | Bin 0 -> 3618 bytes .../0cafc0c761e2aa86_0 | Bin 0 -> 940 bytes .../0d2d2d097885f082_0 | Bin 0 -> 1896 bytes .../0d9a03656e34d0df_0 | Bin 0 -> 1686 bytes .../0dcdd33dd73bb2a5_0 | Bin 0 -> 562 bytes .../0dd278968560fe40_0 | Bin 0 -> 646 bytes .../0dff3d8b28599dea_0 | Bin 0 -> 1108 bytes .../0e691394da245915_0 | Bin 0 -> 14059 bytes .../0e691394da245915_1 | Bin 0 -> 3176 bytes .../0e9fcc4bf5209cb3_0 | Bin 0 -> 1502 bytes .../0e9fcc4bf5209cb3_1 | Bin 0 -> 782 bytes .../0eae9661bef1aec1_0 | Bin 0 -> 2766 bytes .../0f494170c89d6c68_0 | Bin 0 -> 1265 bytes .../0fe3bdbdeefbfeba_0 | Bin 0 -> 799 bytes .../10b0bcaf44441eb6_0 | Bin 0 -> 580 bytes .../10fa69ea87abb8e8_0 | Bin 0 -> 2258 bytes .../1103408f901a4630_0 | Bin 0 -> 721 bytes .../11d4267d4579a4cc_0 | Bin 0 -> 23044 bytes .../1335bc41a2ff5741_0 | Bin 0 -> 749 bytes .../13fab61b84493ab7_0 | Bin 0 -> 3129 bytes .../140de549ed0b11a6_0 | Bin 0 -> 1454 bytes .../149fc7f20f4249b6_0 | Bin 0 -> 14117 bytes .../149fc7f20f4249b6_1 | Bin 0 -> 4678 bytes .../16183a7a01cc5ae9_0 | Bin 0 -> 2522 bytes .../163d17361f599a4a_0 | Bin 0 -> 738 bytes .../16a6931310311f0b_0 | Bin 0 -> 857 bytes .../16ce655a2fb17f9d_0 | Bin 0 -> 779 bytes .../17216002a6f88b31_0 | Bin 0 -> 743 bytes .../17265df2fe87a1d0_0 | Bin 0 -> 1034 bytes .../1772d2edb20d0a5a_0 | Bin 0 -> 3261 bytes .../1772d2edb20d0a5a_1 | Bin 0 -> 970 bytes .../1786025e2308b5ff_0 | Bin 0 -> 3291 bytes .../17d74b8f97bc2876_0 | Bin 0 -> 1140 bytes .../18620f0cae546637_0 | Bin 0 -> 4164 bytes .../18c59afe2306594c_0 | Bin 0 -> 1051 bytes .../18e4757eeb070a4d_0 | Bin 0 -> 4399 bytes .../18eb19b8e9390b88_0 | Bin 0 -> 1051 bytes .../194fdbd0630cd2be_0 | Bin 0 -> 636 bytes .../1957b52a86294ed5_0 | Bin 0 -> 1356 bytes .../19da1491fe9e160c_0 | Bin 0 -> 578 bytes .../1aa1dbd18e49fbc3_0 | Bin 0 -> 791 bytes .../1aee571026244a25_0 | Bin 0 -> 680 bytes .../1b1127aeece6cde9_0 | Bin 0 -> 597 bytes .../1c1f0903174d921d_0 | Bin 0 -> 2371 bytes .../1c1f0903174d921d_1 | Bin 0 -> 3772 bytes .../1c251a94bb693aae_0 | Bin 0 -> 2748 bytes .../1c251a94bb693aae_1 | Bin 0 -> 909 bytes .../1c3fa28db0528c79_0 | Bin 0 -> 12776 bytes .../1c3fa28db0528c79_1 | Bin 0 -> 8053 bytes .../1c7ac1cbf051b90d_0 | Bin 0 -> 4218 bytes .../1d045de85ea81295_0 | Bin 0 -> 5075 bytes .../1d08ce0054bc5804_0 | Bin 0 -> 3318 bytes .../1d697042fd67c7c4_0 | Bin 0 -> 643 bytes .../1d9863f220fc0316_0 | Bin 0 -> 922 bytes .../1e1cac68e8f3b2a0_0 | Bin 0 -> 727 bytes .../1e5c6f69467d8e22_0 | Bin 0 -> 586 bytes .../1e7f5c08b8e4e380_0 | Bin 0 -> 11964 bytes .../1e994007c405cc00_0 | Bin 0 -> 6156 bytes .../1eb8fb93bda3177f_0 | Bin 0 -> 4744 bytes .../1ed246a826f4aafa_0 | Bin 0 -> 8846 bytes .../1ed609ce142ced2e_0 | Bin 0 -> 8393 bytes .../1f0ebace0b125963_0 | Bin 0 -> 12386 bytes .../1f0ebace0b125963_1 | Bin 0 -> 1504 bytes .../1f3a0298ba271c55_0 | Bin 0 -> 18482 bytes .../1f468e6d025b3a23_0 | Bin 0 -> 6449 bytes .../1f468e6d025b3a23_1 | Bin 0 -> 1361 bytes .../1f5fd83b5a400f00_0 | Bin 0 -> 568 bytes .../1ff8b4449b1b0b30_0 | Bin 0 -> 4859 bytes .../20c4958cd97d5229_0 | Bin 0 -> 3924 bytes .../2117a1853e3f2a48_0 | Bin 0 -> 496 bytes .../213bbaf68fef2863_0 | Bin 0 -> 3919 bytes .../214920e746c10d56_0 | Bin 0 -> 1847 bytes .../214920e746c10d56_1 | Bin 0 -> 1441 bytes .../218cde139e656e46_0 | Bin 0 -> 1673 bytes .../218cde139e656e46_1 | Bin 0 -> 1718 bytes .../21ea6092fc4bf3dd_0 | Bin 0 -> 1822100 bytes .../2229509e3c7389b0_0 | Bin 0 -> 3813 bytes .../223d93c86e069699_0 | Bin 0 -> 2301 bytes .../2326bf1acb02c4c9_0 | Bin 0 -> 623 bytes .../23704bd9e3ade0ef_0 | Bin 0 -> 8417 bytes .../23704bd9e3ade0ef_1 | Bin 0 -> 4348 bytes .../23c64c660a0a8fed_0 | Bin 0 -> 4848 bytes .../23c64c660a0a8fed_1 | Bin 0 -> 1430 bytes .../2412ef7c8fdd497c_0 | Bin 0 -> 2196 bytes .../252cedcfc269a8c6_0 | Bin 0 -> 3715 bytes .../255c1f570a9ac27f_0 | Bin 0 -> 719 bytes .../25d4654c18020a5f_0 | Bin 0 -> 742 bytes .../2642a301765867df_0 | Bin 0 -> 9480 bytes .../26a5fa2c779e8415_0 | Bin 0 -> 692 bytes .../26ce1c765f56c8db_0 | Bin 0 -> 1052 bytes .../26e8a59c8fcff3f0_0 | Bin 0 -> 1312 bytes .../26e97aea58c16df0_0 | Bin 0 -> 48921 bytes .../270a3b619e0b65d9_0 | Bin 0 -> 502 bytes .../27293f4cb3e5fb7b_0 | Bin 0 -> 4342 bytes .../27dfd07fdddb1709_0 | Bin 0 -> 624 bytes .../27f7367222e0da93_0 | Bin 0 -> 2619 bytes .../27f7367222e0da93_1 | Bin 0 -> 733 bytes .../2801bb1aedb09ace_0 | Bin 0 -> 7528 bytes .../287c729ce1ee8237_0 | Bin 0 -> 605 bytes .../28b81e937341619f_0 | Bin 0 -> 682 bytes .../296c80be20dea0a5_0 | Bin 0 -> 5397 bytes .../299df59e8be54456_0 | Bin 0 -> 603 bytes .../29aad51301923671_0 | Bin 0 -> 8579 bytes .../29aad51301923671_1 | Bin 0 -> 4712 bytes .../29b50be7d5337b1d_0 | Bin 0 -> 651 bytes .../29d87ddbfb35acf6_0 | Bin 0 -> 743 bytes .../2ac4d343560088f3_0 | Bin 0 -> 861 bytes .../2bcb750390e70bca_0 | Bin 0 -> 690 bytes .../2c4dab2b8ea118be_0 | Bin 0 -> 556 bytes .../2c53bf15dc7d382a_0 | Bin 0 -> 1172 bytes .../2c654035e96392f8_0 | Bin 0 -> 753 bytes .../2cd3da05b34a0731_0 | Bin 0 -> 3721 bytes .../2ced7c471d3a9946_0 | Bin 0 -> 2234 bytes .../2d774716df65c34a_0 | Bin 0 -> 7495 bytes .../2d774716df65c34a_1 | Bin 0 -> 1132 bytes .../2d9085399ce1a5ed_0 | Bin 0 -> 1557 bytes .../2d9085399ce1a5ed_1 | Bin 0 -> 847 bytes .../2e7ea4941198751f_0 | Bin 0 -> 32143 bytes .../2e7ea4941198751f_1 | Bin 0 -> 9535 bytes .../2f01738de10e6772_0 | Bin 0 -> 3005 bytes .../2f01738de10e6772_1 | Bin 0 -> 3368 bytes .../2f0b8132c4bea2d5_0 | Bin 0 -> 721 bytes .../2f36fea9267ddd83_0 | Bin 0 -> 2032 bytes .../2f36fea9267ddd83_1 | Bin 0 -> 972 bytes .../309fa92a4c877c18_0 | Bin 0 -> 946 bytes .../30defcbb2bb6aa1a_0 | Bin 0 -> 541 bytes .../30ec39545b49aa54_0 | Bin 0 -> 7396 bytes .../30f19ca12e91f02e_0 | Bin 0 -> 5427 bytes .../31ef5bfbc2973709_0 | Bin 0 -> 632 bytes .../31fa29da9e851988_0 | Bin 0 -> 1885 bytes .../3205bb7c7de7440e_0 | Bin 0 -> 4129 bytes .../327888b40b67cc95_0 | Bin 0 -> 1493 bytes .../327888b40b67cc95_1 | Bin 0 -> 815 bytes .../328ff6eb2a5d587d_0 | Bin 0 -> 914 bytes .../32a84721a1d1bbcd_0 | Bin 0 -> 9404 bytes .../32a84721a1d1bbcd_1 | Bin 0 -> 2686 bytes .../32db6c56ea3cab09_0 | Bin 0 -> 1543 bytes .../32db6c56ea3cab09_1 | Bin 0 -> 604 bytes .../32e2c4b5c8de7abc_0 | Bin 0 -> 1093 bytes .../33015423ba7c63d2_0 | Bin 0 -> 568 bytes .../332cda7d6f4a42b9_0 | Bin 0 -> 1709 bytes .../3440ac044f1e5236_0 | Bin 0 -> 720 bytes .../346c38803b756847_0 | Bin 0 -> 1768 bytes .../34a00ae2cb52aaa2_0 | Bin 0 -> 8806 bytes .../34a00ae2cb52aaa2_1 | Bin 0 -> 3243 bytes .../34a5891628d242a3_0 | Bin 0 -> 556 bytes .../35109e92146d357c_0 | Bin 0 -> 1198 bytes .../35165c2f6e8cc8c4_0 | Bin 0 -> 703 bytes .../351e690514b3f9f9_0 | Bin 0 -> 3192 bytes .../3520a085242b09d4_0 | Bin 0 -> 966 bytes .../359de2112885354f_0 | Bin 0 -> 2310 bytes .../35d8f8ef9ddf1a49_0 | Bin 0 -> 2288 bytes .../35d8f8ef9ddf1a49_1 | Bin 0 -> 1852 bytes .../35ed223cbb44bb43_0 | Bin 0 -> 993 bytes .../3601fc5e4ed5eae7_0 | Bin 0 -> 1462 bytes .../3601fc5e4ed5eae7_1 | Bin 0 -> 1629 bytes .../368f830949aa58eb_0 | Bin 0 -> 3230 bytes .../368f830949aa58eb_1 | Bin 0 -> 1572 bytes .../36be1a8943e9ce00_0 | Bin 0 -> 605 bytes .../36cbc364191c11b8_0 | Bin 0 -> 641 bytes .../36d751db5dcff1d4_0 | Bin 0 -> 11028 bytes .../3729fa0efaba8337_0 | Bin 0 -> 561 bytes .../37a2e3af74472b10_0 | Bin 0 -> 1204 bytes .../37ac4620a94296fc_0 | Bin 0 -> 6860 bytes .../37d5b7fdee7b3957_0 | Bin 0 -> 5128 bytes .../37fba6cce54ae226_0 | Bin 0 -> 3380 bytes .../383741e63b3c3fcf_0 | Bin 0 -> 581 bytes .../38d6cb3d1fd3e617_0 | Bin 0 -> 5262 bytes .../38d6cb3d1fd3e617_1 | Bin 0 -> 2099 bytes .../38e76d0bd76a6156_0 | Bin 0 -> 670 bytes .../39284b91d360f619_0 | Bin 0 -> 681 bytes .../3968e94bb1142bd1_0 | Bin 0 -> 3016 bytes .../3968e94bb1142bd1_1 | Bin 0 -> 1228 bytes .../39e55388dd2cd8ce_0 | Bin 0 -> 917 bytes .../39f29f70914b766a_0 | Bin 0 -> 7235 bytes .../3a36b62cb22790ee_0 | Bin 0 -> 1181 bytes .../3a375421f5b86832_0 | Bin 0 -> 2871 bytes .../3ac437491273e126_0 | Bin 0 -> 826 bytes .../3ae44b1bd13dea04_0 | Bin 0 -> 8268 bytes .../3ae44b1bd13dea04_1 | Bin 0 -> 2763 bytes .../3b4076ed28bf3ff9_0 | Bin 0 -> 2026 bytes .../3b7912069836d716_0 | Bin 0 -> 561 bytes .../3bd551ff103c88f9_0 | Bin 0 -> 787 bytes .../3bfeb15cbdef351a_0 | Bin 0 -> 422 bytes .../3c73470c8c7f7540_0 | Bin 0 -> 8114 bytes .../3cc701eb0bb46d8a_0 | Bin 0 -> 2988 bytes .../3cd4d1aba768e9a3_0 | Bin 0 -> 4152 bytes .../3d8db76e54542eb6_0 | Bin 0 -> 626 bytes .../3e8ca313dcb4c07c_0 | Bin 0 -> 3158 bytes .../3e8ca313dcb4c07c_1 | Bin 0 -> 1530 bytes .../3f0c43b19fefd04e_0 | Bin 0 -> 919 bytes .../3f8fec17670984bc_0 | Bin 0 -> 861 bytes .../40379f8a76ee5e7e_0 | Bin 0 -> 623 bytes .../40835d6c70a3caf3_0 | Bin 0 -> 596 bytes .../423c6a390bd3a2bf_0 | Bin 0 -> 1852 bytes .../423c6a390bd3a2bf_1 | Bin 0 -> 940 bytes .../42d7834e47109bf2_0 | Bin 0 -> 1760 bytes .../42d7834e47109bf2_1 | Bin 0 -> 831 bytes .../42ed82c5d02ee71e_0 | Bin 0 -> 871 bytes .../430186e3ae37db9f_0 | Bin 0 -> 2235 bytes .../430186e3ae37db9f_1 | Bin 0 -> 1173 bytes .../433ea32573445487_0 | Bin 0 -> 7186 bytes .../4398cc970337c9ad_0 | Bin 0 -> 791 bytes .../43ef5d7cd2c866c1_0 | Bin 0 -> 665 bytes .../441c19ea6513a67b_0 | Bin 0 -> 2354 bytes .../441dbcf906d5a240_0 | Bin 0 -> 14178 bytes .../441dbcf906d5a240_1 | Bin 0 -> 9368 bytes .../44262c51d3d12e24_0 | Bin 0 -> 565 bytes .../442ea9873de73825_0 | Bin 0 -> 8396 bytes .../442ea9873de73825_1 | Bin 0 -> 3024 bytes .../446bf7a0b1addcee_0 | Bin 0 -> 1924 bytes .../446bf7a0b1addcee_1 | Bin 0 -> 1769 bytes .../44fe6e5da27e61a9_0 | Bin 0 -> 523 bytes .../45106d1b736a68de_0 | Bin 0 -> 637 bytes .../4543164c1801b580_0 | Bin 0 -> 3511 bytes .../45708144a6589cd8_0 | Bin 0 -> 1639 bytes .../45cc1d6a521e450c_0 | Bin 0 -> 4597 bytes .../45decc49c21c7c0d_0 | Bin 0 -> 507 bytes .../45ef9b37931d8030_0 | Bin 0 -> 14790 bytes .../45ef9b37931d8030_1 | Bin 0 -> 3690 bytes .../46daff1a02f68a93_0 | Bin 0 -> 1038 bytes .../477ff50f7da93a5e_0 | Bin 0 -> 645 bytes .../479fb9e5a39b1284_0 | Bin 0 -> 738 bytes .../483d75c6d14950fd_0 | Bin 0 -> 707 bytes .../48783723bd618fbe_0 | Bin 0 -> 878 bytes .../48a4020f6b284e62_0 | Bin 0 -> 2526 bytes .../4930349ac5bdaf95_0 | Bin 0 -> 2195 bytes .../4957ba728b0ac39e_0 | Bin 0 -> 719 bytes .../4958efe9b332199c_0 | Bin 0 -> 3867 bytes .../49688aceaaefb3df_0 | Bin 0 -> 620 bytes .../4a8ad21154d46fbb_0 | Bin 0 -> 615 bytes .../4aa2d86b26a106a0_0 | Bin 0 -> 623 bytes .../4ad58c86c2e48186_0 | Bin 0 -> 596 bytes .../4bc352ec78088335_0 | Bin 0 -> 595 bytes .../4c4ada0c551d767a_0 | Bin 0 -> 4862 bytes .../4c4ada0c551d767a_1 | Bin 0 -> 2562 bytes .../4c5c6bd7a9741ebd_0 | Bin 0 -> 631 bytes .../4c76c7a80ba540eb_0 | Bin 0 -> 9293 bytes .../4c76c7a80ba540eb_1 | Bin 0 -> 4142 bytes .../4d137094407c24a0_0 | Bin 0 -> 757 bytes .../4df4ea25148b7b8e_0 | Bin 0 -> 738 bytes .../4df88a55ff5250bc_0 | Bin 0 -> 587 bytes .../4dfeccea386878c4_0 | Bin 0 -> 754 bytes .../4ea940e7f43148c7_0 | Bin 0 -> 721 bytes .../4eda6d38ed73d9d1_0 | Bin 0 -> 838 bytes .../4f0ce9a8c9e2930b_0 | Bin 0 -> 11150 bytes .../4f0ce9a8c9e2930b_1 | Bin 0 -> 4403 bytes .../4f749a73f475f6d5_0 | Bin 0 -> 553 bytes .../4fb0c0644e3bf4d0_0 | Bin 0 -> 1431 bytes .../4ff28143e0cd3056_0 | Bin 0 -> 1210 bytes .../50346c50993be916_0 | Bin 0 -> 725 bytes .../50a1b2693e9d288c_0 | Bin 0 -> 4202 bytes .../50af2e27d9533067_0 | Bin 0 -> 1556 bytes .../50af2e27d9533067_1 | Bin 0 -> 1013 bytes .../50bd74e43006d7a4_0 | Bin 0 -> 7489 bytes .../50db13ff9f8667ab_0 | Bin 0 -> 14078 bytes .../50eac6dd39abc46f_0 | Bin 0 -> 2953 bytes .../511546c9988cc4fe_0 | Bin 0 -> 1682 bytes .../511546c9988cc4fe_1 | Bin 0 -> 941 bytes .../51293e64f4e52df5_0 | Bin 0 -> 7939 bytes .../513798a24a123cc0_0 | Bin 0 -> 2308 bytes .../513798a24a123cc0_1 | Bin 0 -> 1110 bytes .../51b8b055cd711c5f_0 | Bin 0 -> 3488 bytes .../52263b053b1db3da_0 | Bin 0 -> 611 bytes .../523c3e245e4f70e7_0 | Bin 0 -> 11744 bytes .../523c3e245e4f70e7_1 | Bin 0 -> 1960 bytes .../5294478d0a0367f3_0 | Bin 0 -> 5693 bytes .../5294478d0a0367f3_1 | Bin 0 -> 1132 bytes .../530a4540ff95fd2b_0 | Bin 0 -> 5296 bytes .../530a4540ff95fd2b_1 | Bin 0 -> 2110 bytes .../5352d092b301e582_0 | Bin 0 -> 1594 bytes .../5352d092b301e582_1 | Bin 0 -> 2330 bytes .../53d2718175b5aa2f_0 | Bin 0 -> 1888 bytes .../53dcc8c2cdc22d84_0 | Bin 0 -> 1844 bytes .../54c82ca00a765499_0 | Bin 0 -> 1827 bytes .../550a151211aa8f30_0 | Bin 0 -> 5456 bytes .../558dcf1ca073b89b_0 | Bin 0 -> 2141 bytes .../559d85e976248450_0 | Bin 0 -> 1784 bytes .../56817d23267114b4_0 | Bin 0 -> 753 bytes .../5681a580a4199e26_0 | Bin 0 -> 499 bytes .../56ba56576f463004_0 | Bin 0 -> 623 bytes .../56ef9bf95d4188cd_0 | Bin 0 -> 7718 bytes .../5753937e31914f96_0 | Bin 0 -> 832 bytes .../578286609c84b497_0 | Bin 0 -> 6355 bytes .../578286609c84b497_1 | Bin 0 -> 1963 bytes .../58a87ecb873c3675_0 | Bin 0 -> 1460 bytes .../593d430f03719714_0 | Bin 0 -> 3041 bytes .../593d430f03719714_1 | Bin 0 -> 2704 bytes .../594387e4de1e5c1e_0 | Bin 0 -> 617 bytes .../59ac1d5195bb3577_0 | Bin 0 -> 604 bytes .../5a21aad954e0afae_0 | Bin 0 -> 5885 bytes .../5b72246585668d70_0 | Bin 0 -> 3511 bytes .../5bf99169d8879d37_0 | Bin 0 -> 495 bytes .../5cc8d7e7d0dd1720_0 | Bin 0 -> 599 bytes .../5cee58eb648aa5c8_0 | Bin 0 -> 637 bytes .../5d09415e3243f24e_0 | Bin 0 -> 1982 bytes .../5d09415e3243f24e_1 | Bin 0 -> 1236 bytes .../5d16a9b9cda9567a_0 | Bin 0 -> 4951 bytes .../5f88581bdada8542_0 | Bin 0 -> 6254 bytes .../5f88581bdada8542_1 | Bin 0 -> 3128 bytes .../5fd5b294855d7cda_0 | Bin 0 -> 1077 bytes .../6064b216d87f43d9_0 | Bin 0 -> 70102 bytes .../6064b216d87f43d9_1 | Bin 0 -> 19084 bytes .../608952a8032e1ec1_0 | Bin 0 -> 555 bytes .../60dfc55d1cb18e8d_0 | Bin 0 -> 671 bytes .../6103be495c9f0fbc_0 | Bin 0 -> 2062 bytes .../61567a85339bb980_0 | Bin 0 -> 2660 bytes .../61567a85339bb980_1 | Bin 0 -> 1994 bytes .../61d28c54d0ec7235_0 | Bin 0 -> 2702 bytes .../61d28c54d0ec7235_1 | Bin 0 -> 827 bytes .../622bbe9538001149_0 | Bin 0 -> 2163 bytes .../622c3eb7c328ffa7_0 | Bin 0 -> 1336 bytes .../62530ba030521b41_0 | Bin 0 -> 1228 bytes .../6257246058c5daca_0 | Bin 0 -> 2216 bytes .../6257246058c5daca_1 | Bin 0 -> 1037 bytes .../630e1ef315d4eae4_0 | Bin 0 -> 1117 bytes .../6369cd0c4f4efa54_0 | Bin 0 -> 701 bytes .../638d2c465a2107ff_0 | Bin 0 -> 10327 bytes .../638d2c465a2107ff_1 | Bin 0 -> 2967 bytes .../63928f50535c43cb_0 | Bin 0 -> 801 bytes .../63c5894ef2b17e65_0 | Bin 0 -> 3303 bytes .../63c5894ef2b17e65_1 | Bin 0 -> 1573 bytes .../63f45554a75111e1_0 | Bin 0 -> 1056 bytes .../65fb2e1e36f904d4_0 | Bin 0 -> 872 bytes .../66fa204a4a3af845_0 | Bin 0 -> 1398 bytes .../6748bd2791a82ace_0 | Bin 0 -> 681 bytes .../6779c8cf5996acd2_0 | Bin 0 -> 679 bytes .../67a270c93ddf5110_0 | Bin 0 -> 17803 bytes .../687aacc61a31345e_0 | Bin 0 -> 1525 bytes .../687aacc61a31345e_1 | Bin 0 -> 981 bytes .../689713d3d9f1f849_0 | Bin 0 -> 4353 bytes .../689713d3d9f1f849_1 | Bin 0 -> 2260 bytes .../690b42100d768bd9_0 | Bin 0 -> 2300 bytes .../6933f8d6a19d88d2_0 | Bin 0 -> 832 bytes .../693ce182b99514f7_0 | Bin 0 -> 669 bytes .../69833ebf814237d4_0 | Bin 0 -> 1431 bytes .../69c6c36317e440b8_0 | Bin 0 -> 595 bytes .../6a2c1946aea9644f_0 | Bin 0 -> 953 bytes .../6a510fbb89996a66_0 | Bin 0 -> 941 bytes .../6b2fdd0fbd3bbfc7_0 | Bin 0 -> 1280 bytes .../6b5d77b1fc19ca67_0 | Bin 0 -> 9405 bytes .../6b85f2e2f2700469_0 | Bin 0 -> 7122 bytes .../6b85f2e2f2700469_1 | Bin 0 -> 1120 bytes .../6c1a923c3f5e4386_0 | Bin 0 -> 3042 bytes .../6c9b68f7a5653067_0 | Bin 0 -> 4777 bytes .../6c9b68f7a5653067_1 | Bin 0 -> 4349 bytes .../6cef2d941e597d5b_0 | Bin 0 -> 8723 bytes .../6d0b16cdfeafa1c5_0 | Bin 0 -> 6867 bytes .../6d0b16cdfeafa1c5_1 | Bin 0 -> 1012 bytes .../6d35bcaf282781c8_0 | Bin 0 -> 626 bytes .../6d501ac5aff10014_0 | Bin 0 -> 1582 bytes .../6d501ac5aff10014_1 | Bin 0 -> 1534 bytes .../6dc9be6ef6e95267_0 | Bin 0 -> 3310 bytes .../6dd07335af55eab8_0 | Bin 0 -> 578 bytes .../6e7215e4cdc435e9_0 | Bin 0 -> 859 bytes .../6ef2a81e16c38afb_0 | Bin 0 -> 776 bytes .../6f4334a34f4742a1_0 | Bin 0 -> 20222 bytes .../6f4334a34f4742a1_1 | Bin 0 -> 5462 bytes .../6f735d18a1a7b74c_0 | Bin 0 -> 530 bytes .../6f8154c008242b03_0 | Bin 0 -> 830 bytes .../6fdcd334ac038785_0 | Bin 0 -> 16047 bytes .../709ada9ae5fb541a_0 | Bin 0 -> 611 bytes .../70a104efec749d67_0 | Bin 0 -> 625 bytes .../70cb160a1daf5cca_0 | Bin 0 -> 539 bytes .../70e39730015bd97e_0 | Bin 0 -> 1056 bytes .../710a0d8f4af3c06b_0 | Bin 0 -> 3115 bytes .../710f3bf109e786c2_0 | Bin 0 -> 1350 bytes .../71535f26b12fd340_0 | Bin 0 -> 715 bytes .../724abf01c0317399_0 | Bin 0 -> 570 bytes .../7276d2f32074745c_0 | Bin 0 -> 2358 bytes .../7276d2f32074745c_1 | Bin 0 -> 973 bytes .../72f182534350f588_0 | Bin 0 -> 738 bytes .../7366ddd9f0884914_0 | Bin 0 -> 644 bytes .../7367c5cb771233a8_0 | Bin 0 -> 741 bytes .../7377f1fde208cacb_0 | Bin 0 -> 7797 bytes .../73a3e5feeaa5011c_0 | Bin 0 -> 2277 bytes .../73a3e5feeaa5011c_1 | Bin 0 -> 1080 bytes .../73bb0f71f3489db6_0 | Bin 0 -> 12340 bytes .../73e4875ff7bd7187_0 | Bin 0 -> 2531 bytes .../73e4875ff7bd7187_1 | Bin 0 -> 2690 bytes .../73f43bddd46e592a_0 | Bin 0 -> 1508 bytes .../73f43bddd46e592a_1 | Bin 0 -> 1043 bytes .../74ae0f61809ac93d_0 | Bin 0 -> 1170 bytes .../74ec99204c680827_0 | Bin 0 -> 30758 bytes .../75477707732d500a_0 | Bin 0 -> 1507 bytes .../75477707732d500a_1 | Bin 0 -> 1953 bytes .../75a6730445717086_0 | Bin 0 -> 745 bytes .../75bf7056994f5803_0 | Bin 0 -> 820 bytes .../761a19a7074ebbb0_0 | Bin 0 -> 1094 bytes .../7673b54be5292216_0 | Bin 0 -> 7487 bytes .../7673b54be5292216_1 | Bin 0 -> 7226 bytes .../771dd3b94603084a_0 | Bin 0 -> 556 bytes .../775f84da77276e29_0 | Bin 0 -> 1926 bytes .../775f84da77276e29_1 | Bin 0 -> 1431 bytes .../77c4eaee97194d59_0 | Bin 0 -> 742 bytes .../7861b8ce232c1a4d_0 | Bin 0 -> 1002 bytes .../791d3989e0f391b9_0 | Bin 0 -> 4082 bytes .../791d3989e0f391b9_1 | Bin 0 -> 1584 bytes .../79245308382c592d_0 | Bin 0 -> 738 bytes .../793e9860b573049c_0 | Bin 0 -> 702 bytes .../79a70a9339047192_0 | Bin 0 -> 814 bytes .../79b77c552a5424c6_0 | Bin 0 -> 601 bytes .../79bb30391c135ba7_0 | Bin 0 -> 931 bytes .../7a23f72341f3cffc_0 | Bin 0 -> 1383 bytes .../7a50acac93fa5ec2_0 | Bin 0 -> 871 bytes .../7a71361415c9bcd6_0 | Bin 0 -> 7420 bytes .../7a81bba7c04b569f_0 | Bin 0 -> 591 bytes .../7a991df0b1ae8f88_0 | Bin 0 -> 679 bytes .../7ae4aa9b72af7540_0 | Bin 0 -> 1933 bytes .../7ae4aa9b72af7540_1 | Bin 0 -> 1216 bytes .../7afd228e4121c55a_0 | Bin 0 -> 1203 bytes .../7b4b87d57d64f35c_0 | Bin 0 -> 4686 bytes .../7b4b87d57d64f35c_1 | Bin 0 -> 3275 bytes .../7b8d42b73cc6ae75_0 | Bin 0 -> 484 bytes .../7c0fc7e80bba5d20_0 | Bin 0 -> 1936 bytes .../7c0fc7e80bba5d20_1 | Bin 0 -> 867 bytes .../7cdfe013ff471e52_0 | Bin 0 -> 1349 bytes .../7dcac4522efbc8df_0 | Bin 0 -> 538 bytes .../7f32da8e30756b40_0 | Bin 0 -> 619 bytes .../7f4c1222dd5bf418_0 | Bin 0 -> 4816 bytes .../7f4c1222dd5bf418_1 | Bin 0 -> 1729 bytes .../7f4ed7f823ce75ba_0 | Bin 0 -> 870 bytes .../7fcd4916b14c515e_0 | Bin 0 -> 799 bytes .../7fd4d46ed6626f0b_0 | Bin 0 -> 621 bytes .../80a3f1dbb26dbfa1_0 | Bin 0 -> 5948 bytes .../820af54f7c5c23bf_0 | Bin 0 -> 1074 bytes .../829d6242931f2eb7_0 | Bin 0 -> 654 bytes .../8328b9dbba6b8fd9_0 | Bin 0 -> 1312 bytes .../83d8d0cef30499b4_0 | Bin 0 -> 1139 bytes .../84b4412ac28f79b0_0 | Bin 0 -> 3058 bytes .../84b4412ac28f79b0_1 | Bin 0 -> 1540 bytes .../84d7d25fb68bda01_0 | Bin 0 -> 668 bytes .../8580d4386b63cd1f_0 | Bin 0 -> 627 bytes .../85b23a16455bb50b_0 | Bin 0 -> 876 bytes .../85c46a97e0c7ca2f_0 | Bin 0 -> 766 bytes .../85ecf4d706b189a5_0 | Bin 0 -> 726 bytes .../867d404186e3cdbc_0 | Bin 0 -> 708 bytes .../86b5a45586e1e558_0 | Bin 0 -> 967 bytes .../86c90a3f346c51e2_0 | Bin 0 -> 630 bytes .../86f0e7a22ce97aab_0 | Bin 0 -> 584 bytes .../86f5389c6d8dcc17_0 | Bin 0 -> 611 bytes .../871adb95c81e1bb0_0 | Bin 0 -> 696 bytes .../8783f0e436853ee1_0 | Bin 0 -> 6515 bytes .../87948b1fbd98a139_0 | Bin 0 -> 2929 bytes .../87948b1fbd98a139_1 | Bin 0 -> 751 bytes .../87bc1fb8309724cb_0 | Bin 0 -> 5549 bytes .../87bc1fb8309724cb_1 | Bin 0 -> 4539 bytes .../881b14ed98c84387_0 | Bin 0 -> 1103 bytes .../8880cb1bd2411da9_0 | Bin 0 -> 2770 bytes .../88bb7aa99d5707e4_0 | Bin 0 -> 666 bytes .../8922ad6d8340114f_0 | Bin 0 -> 4625 bytes .../8922ad6d8340114f_1 | Bin 0 -> 2955 bytes .../89320be43f8b181b_0 | Bin 0 -> 2679 bytes .../89320be43f8b181b_1 | Bin 0 -> 2872 bytes .../896d0606f6f178f8_0 | Bin 0 -> 613 bytes .../89e36aa18eb949b0_0 | Bin 0 -> 575 bytes .../8a1311725ca33b2c_0 | Bin 0 -> 5570 bytes .../8a1311725ca33b2c_1 | Bin 0 -> 4901 bytes .../8a1dd71e45d70bec_0 | Bin 0 -> 5481 bytes .../8a5cb8368faaa817_0 | Bin 0 -> 1426 bytes .../8a67f25f0fe360d9_0 | Bin 0 -> 743 bytes .../8a7946ca343b182e_0 | Bin 0 -> 3028 bytes .../8adb8163cc75e963_0 | Bin 0 -> 4977 bytes .../8af0f5b7ff0e341a_0 | Bin 0 -> 6522 bytes .../8af0f5b7ff0e341a_1 | Bin 0 -> 3834 bytes .../8af60c358551eda6_0 | Bin 0 -> 5318 bytes .../8af60c358551eda6_1 | Bin 0 -> 3209 bytes .../8b6c53e4cf5916cd_0 | Bin 0 -> 8349 bytes .../8bf87ef5f2ada06f_0 | Bin 0 -> 617 bytes .../8c4d4b74b5fa40b8_0 | Bin 0 -> 1921 bytes .../8c4d4b74b5fa40b8_1 | Bin 0 -> 1034 bytes .../8c9249c4bc51caf4_0 | Bin 0 -> 8393 bytes .../8c9249c4bc51caf4_1 | Bin 0 -> 6038 bytes .../8dec7321af0f005d_0 | Bin 0 -> 1995 bytes .../8dec7321af0f005d_1 | Bin 0 -> 2597 bytes .../8e0e054a2a9dd2f2_0 | Bin 0 -> 603 bytes .../8e38e066d7953e27_0 | Bin 0 -> 1325 bytes .../8e962ea0a8d230c8_0 | Bin 0 -> 588 bytes .../8f31b5ae5902a058_0 | Bin 0 -> 6184 bytes .../8f31b5ae5902a058_1 | Bin 0 -> 2227 bytes .../8f55e19132053fb6_0 | Bin 0 -> 1560 bytes .../8f55e19132053fb6_1 | Bin 0 -> 742 bytes .../8f583e357cd7515f_0 | Bin 0 -> 5040 bytes .../8f583e357cd7515f_1 | Bin 0 -> 1514 bytes .../8f59bf79f2f5103f_0 | Bin 0 -> 16137 bytes .../8f59bf79f2f5103f_1 | Bin 0 -> 6564 bytes .../9061de6d910b03ce_0 | Bin 0 -> 2707 bytes .../90aca6c18f295dc4_0 | Bin 0 -> 858 bytes .../913c2b2f48f581c0_0 | Bin 0 -> 1607 bytes .../913c2b2f48f581c0_1 | Bin 0 -> 1551 bytes .../91410ce43700f7e9_0 | Bin 0 -> 702 bytes .../9159c7a5e4f0025e_0 | Bin 0 -> 1228 bytes .../9224c749c21fa128_0 | Bin 0 -> 924 bytes .../929187cccab5c250_0 | Bin 0 -> 2704 bytes .../929187cccab5c250_1 | Bin 0 -> 2631 bytes .../92bb10d4094904d9_0 | Bin 0 -> 665 bytes .../92c7dc0c7ce5c239_0 | Bin 0 -> 738 bytes .../9346b5f75f69dc72_0 | Bin 0 -> 1700 bytes .../9346b5f75f69dc72_1 | Bin 0 -> 1849 bytes .../935666e2b0d4bca2_0 | Bin 0 -> 3118 bytes .../935666e2b0d4bca2_1 | Bin 0 -> 1161 bytes .../935693ca843c6796_0 | Bin 0 -> 14134 bytes .../935693ca843c6796_1 | Bin 0 -> 8259 bytes .../9368859968915a05_0 | Bin 0 -> 6491 bytes .../939235324800599f_0 | Bin 0 -> 692 bytes .../941e8ff6e6cc956f_0 | Bin 0 -> 581 bytes .../94261ee719cd51bc_0 | Bin 0 -> 4419 bytes .../94261ee719cd51bc_1 | Bin 0 -> 5026 bytes .../943ab0ee2adc1def_0 | Bin 0 -> 2016 bytes .../943ab0ee2adc1def_1 | Bin 0 -> 991 bytes .../943d45722f6273e3_0 | Bin 0 -> 4356 bytes .../943d45722f6273e3_1 | Bin 0 -> 6685 bytes .../94b48dbed9bd9dcb_0 | Bin 0 -> 1576 bytes .../94bd25466474a148_0 | Bin 0 -> 113545 bytes .../9526b4eb4acd0495_0 | Bin 0 -> 2672 bytes .../9526b4eb4acd0495_1 | Bin 0 -> 837 bytes .../953ff05c6941df33_0 | Bin 0 -> 4920 bytes .../953ff05c6941df33_1 | Bin 0 -> 3459 bytes .../9543ecdd789d55a6_0 | Bin 0 -> 2208 bytes .../9543ecdd789d55a6_1 | Bin 0 -> 1802 bytes .../956aece011f4da22_0 | Bin 0 -> 1695 bytes .../956aece011f4da22_1 | Bin 0 -> 2932 bytes .../96b955ea2d155f3c_0 | Bin 0 -> 541 bytes .../96f31da99cc3e139_0 | Bin 0 -> 707 bytes .../9705713437c8bec9_0 | Bin 0 -> 498 bytes .../973345a0d41b9059_0 | Bin 0 -> 2713 bytes .../973345a0d41b9059_1 | Bin 0 -> 2241 bytes .../98ad008e1a1367da_0 | Bin 0 -> 2168 bytes .../98af4b8b6c524c38_0 | Bin 0 -> 3685 bytes .../98ec2f4e90ab1724_0 | Bin 0 -> 661 bytes .../98f1d6e4d1bf290c_0 | Bin 0 -> 1813 bytes .../98f1d6e4d1bf290c_1 | Bin 0 -> 2048 bytes .../991a6243628a1f15_0 | Bin 0 -> 2048 bytes .../9b030d0903524b0d_0 | Bin 0 -> 802 bytes .../9b409985cf9f40a5_0 | Bin 0 -> 13940 bytes .../9b409985cf9f40a5_1 | Bin 0 -> 7362 bytes .../9b41e595d8f8cefd_0 | Bin 0 -> 22062 bytes .../9b41e595d8f8cefd_1 | Bin 0 -> 8795 bytes .../9bdac4054f84355d_0 | Bin 0 -> 711 bytes .../9bebf014733b6009_0 | Bin 0 -> 592 bytes .../9c07b2a4783f7e98_0 | Bin 0 -> 1208 bytes .../9c18e98be1dd3353_0 | Bin 0 -> 15372 bytes .../9c2e64b2b71eed0e_0 | Bin 0 -> 712 bytes .../9c3ffbe79bd659f2_0 | Bin 0 -> 653 bytes .../9c6dd37c9de07c66_0 | Bin 0 -> 6342 bytes .../9c7e485fc0790948_0 | Bin 0 -> 723 bytes .../9d2bd8a83fee54dd_0 | Bin 0 -> 3976 bytes .../9d2bd8a83fee54dd_1 | Bin 0 -> 4285 bytes .../9d48d368db8a60b7_0 | Bin 0 -> 853 bytes .../9dde186cc9f2e85b_0 | Bin 0 -> 814 bytes .../9ea3450d37ed2352_0 | Bin 0 -> 613 bytes .../9eb60986e4e80f25_0 | Bin 0 -> 5381 bytes .../9ec07980ffd73bf1_0 | Bin 0 -> 940 bytes .../9f19fe9fbffd2b56_0 | Bin 0 -> 4723 bytes .../9f25813bdf5d93b8_0 | Bin 0 -> 1737 bytes .../9f3cbe27363af30e_0 | Bin 0 -> 690 bytes .../9f9e2855b8b4febf_0 | Bin 0 -> 617 bytes .../9fa241803209717e_0 | Bin 0 -> 761 bytes .../9fda719601763512_0 | Bin 0 -> 633 bytes .../a0020d97813369fa_0 | Bin 0 -> 779 bytes .../a038abca13edc87c_0 | Bin 0 -> 581 bytes .../a067a8610006159e_0 | Bin 0 -> 1577 bytes .../a067a8610006159e_1 | Bin 0 -> 775 bytes .../a0e855153df1f749_0 | Bin 0 -> 3766 bytes .../a0e855153df1f749_1 | Bin 0 -> 3178 bytes .../a0f1d4f28d0d8aa1_0 | Bin 0 -> 541 bytes .../a0fdd0cfdce94779_0 | Bin 0 -> 1181 bytes .../a153e94113c0c8d2_0 | Bin 0 -> 20526 bytes .../a166d859c95a24ac_0 | Bin 0 -> 9411 bytes .../a166d859c95a24ac_1 | Bin 0 -> 3919 bytes .../a1b6144a8cf24525_0 | Bin 0 -> 741 bytes .../a2db43c631cb0b05_0 | Bin 0 -> 1058 bytes .../a315689f925e88d6_0 | Bin 0 -> 988 bytes .../a376e7d024f4e39b_0 | Bin 0 -> 5685 bytes .../a3835c8816906f37_0 | Bin 0 -> 1230 bytes .../a3d1eb323ba120f7_0 | Bin 0 -> 2389 bytes .../a3d1eb323ba120f7_1 | Bin 0 -> 3737 bytes .../a41b3f13da5b1794_0 | Bin 0 -> 3801 bytes .../a41b3f13da5b1794_1 | Bin 0 -> 3247 bytes .../a41b8d1b7e3dd822_0 | Bin 0 -> 8433 bytes .../a41b8d1b7e3dd822_1 | Bin 0 -> 4377 bytes .../a4695f565d1d0241_0 | Bin 0 -> 1008 bytes .../a4d791a955b8f30e_0 | Bin 0 -> 3784 bytes .../a4fc30740db061d8_0 | Bin 0 -> 934 bytes .../a504595e2b4816bf_0 | Bin 0 -> 4907 bytes .../a504595e2b4816bf_1 | Bin 0 -> 3345 bytes .../a508ea0795a19684_0 | Bin 0 -> 3025 bytes .../a508ea0795a19684_1 | Bin 0 -> 3151 bytes .../a50a6632b3ebf93e_0 | Bin 0 -> 946 bytes .../a5328da85f586a61_0 | Bin 0 -> 2613 bytes .../a55841be88ec35dd_0 | Bin 0 -> 3112 bytes .../a56a6ba8806120ea_0 | Bin 0 -> 745 bytes .../a681072f69b0ecaa_0 | Bin 0 -> 2804 bytes .../a681072f69b0ecaa_1 | Bin 0 -> 4444 bytes .../a6e4ad14bbe4ad8d_0 | Bin 0 -> 3103 bytes .../a7228b5f391c7a0f_0 | Bin 0 -> 605 bytes .../a77065b4ee3f4a5f_0 | Bin 0 -> 2311 bytes .../a7fe7b590ba1833f_0 | Bin 0 -> 1955 bytes .../a7fe7b590ba1833f_1 | Bin 0 -> 809 bytes .../a8b73624ae458f78_0 | Bin 0 -> 1888 bytes .../a8b73624ae458f78_1 | Bin 0 -> 2243 bytes .../a8cd86eb6ad69dde_0 | Bin 0 -> 3165 bytes .../a8cd86eb6ad69dde_1 | Bin 0 -> 910 bytes .../a8ce478e6ad84c5c_0 | Bin 0 -> 928 bytes .../a8e27f6e0e0df5b1_0 | Bin 0 -> 571 bytes .../a8e8236e18f6b0bd_0 | Bin 0 -> 3180 bytes .../a8e8236e18f6b0bd_1 | Bin 0 -> 1593 bytes .../a949dd1a80ad35c8_0 | Bin 0 -> 643 bytes .../aa4bcc41d254ec4a_0 | Bin 0 -> 3336 bytes .../aa655f56c98a9fb7_0 | Bin 0 -> 851 bytes .../aa772af924db6617_0 | Bin 0 -> 708 bytes .../aae5d5a899f78778_0 | Bin 0 -> 10609 bytes .../aae5d5a899f78778_1 | Bin 0 -> 7370 bytes .../ab16558c2535aa72_0 | Bin 0 -> 2672 bytes .../ab16558c2535aa72_1 | Bin 0 -> 1112 bytes .../ab1e2f76020a766a_0 | Bin 0 -> 640 bytes .../ab2bc633da052bb2_0 | Bin 0 -> 989 bytes .../ab5ca508cb16c84d_0 | Bin 0 -> 7389 bytes .../ab5ca508cb16c84d_1 | Bin 0 -> 4068 bytes .../ab6543335d83780a_0 | Bin 0 -> 24773 bytes .../ab6543335d83780a_1 | Bin 0 -> 55810 bytes .../ab708ee3acec9c95_0 | Bin 0 -> 718 bytes .../abad9c1308674449_0 | Bin 0 -> 776 bytes .../abd69387730cac5e_0 | Bin 0 -> 870 bytes .../ace3914ac249e337_0 | Bin 0 -> 1002 bytes .../ad238eecabb3bf9e_0 | Bin 0 -> 2429 bytes .../ad238eecabb3bf9e_1 | Bin 0 -> 1057 bytes .../ad4507d804dd9d6a_0 | Bin 0 -> 6789 bytes .../ad4507d804dd9d6a_1 | Bin 0 -> 2316 bytes .../ad71aedc7abf259d_0 | Bin 0 -> 6949 bytes .../ad71aedc7abf259d_1 | Bin 0 -> 5573 bytes .../ad8ee33bdd6932e5_0 | Bin 0 -> 621 bytes .../ae4c0910f21b0635_0 | Bin 0 -> 5497 bytes .../ae4e2426f4ff6183_0 | Bin 0 -> 2377 bytes .../ae4e2426f4ff6183_1 | Bin 0 -> 1015 bytes .../aeeb8cf5fb2a6de3_0 | Bin 0 -> 1373 bytes .../af86404fe46d3b28_0 | Bin 0 -> 6868 bytes .../af86404fe46d3b28_1 | Bin 0 -> 2307 bytes .../afada5d77309b0f7_0 | Bin 0 -> 848 bytes .../b08ad2c2ca8c7c22_0 | Bin 0 -> 905 bytes .../b093cea241af3a23_0 | Bin 0 -> 641 bytes .../b09c1c29efe07bef_0 | Bin 0 -> 595 bytes .../b0d9d01c8e9ea336_0 | Bin 0 -> 573 bytes .../b14b6bfce58d986e_0 | Bin 0 -> 4836 bytes .../b1c1b8d2a7fe4624_0 | Bin 0 -> 629 bytes .../b2175ae8b2676b59_0 | Bin 0 -> 4316 bytes .../b28ad861f89acf5d_0 | Bin 0 -> 6020 bytes .../b2928123f79d79a9_0 | Bin 0 -> 1245 bytes .../b2a7e28c77d9921e_0 | Bin 0 -> 1273 bytes .../b2c0372f4f8ccbe3_0 | Bin 0 -> 708 bytes .../b31e9ea1a7f93e08_0 | Bin 0 -> 712 bytes .../b371c8e190a1c497_0 | Bin 0 -> 601 bytes .../b39534f082d77d4d_0 | Bin 0 -> 510 bytes .../b3ed5a76dbb503ff_0 | Bin 0 -> 739 bytes .../b3ffdaf2a35c0288_0 | Bin 0 -> 3413 bytes .../b3ffdaf2a35c0288_1 | Bin 0 -> 3425 bytes .../b41b26d417e9cbe8_0 | Bin 0 -> 3031 bytes .../b44d93c6d7dfc00b_0 | Bin 0 -> 1547 bytes .../b4707dd484d20875_0 | Bin 0 -> 1304 bytes .../b49966835b1c1d10_0 | Bin 0 -> 3355 bytes .../b4a7d44531733e15_0 | Bin 0 -> 652 bytes .../b4ebd754b60370ee_0 | Bin 0 -> 2140 bytes .../b51071849e6ce9bf_0 | Bin 0 -> 601 bytes .../b569d319c182cfa9_0 | Bin 0 -> 2318 bytes .../b5864e4dd88ab1bb_0 | Bin 0 -> 547 bytes .../b586b18c91f9637e_0 | Bin 0 -> 5522 bytes .../b586b18c91f9637e_1 | Bin 0 -> 2986 bytes .../b61cdeb0d09598c4_0 | Bin 0 -> 805 bytes .../b64275ad4710baf7_0 | Bin 0 -> 1299 bytes .../b667f98695f2a81b_0 | Bin 0 -> 14300 bytes .../b667f98695f2a81b_1 | Bin 0 -> 7535 bytes .../b68164526abeb644_0 | Bin 0 -> 7829 bytes .../b6bae416e9e7cc5a_0 | Bin 0 -> 5048 bytes .../b6e64b9c3602659d_0 | Bin 0 -> 1038 bytes .../b6ffeb292da0819c_0 | Bin 0 -> 12590 bytes .../b701495e737e9569_0 | Bin 0 -> 739 bytes .../b7d4456629fdcc6c_0 | Bin 0 -> 822 bytes .../b87e3c445a1b27d1_0 | Bin 0 -> 892 bytes .../b87e7d58490ffeb5_0 | Bin 0 -> 13450 bytes .../b87e7d58490ffeb5_1 | Bin 0 -> 3915 bytes .../b88bba09665a0a87_0 | Bin 0 -> 5468 bytes .../b88bba09665a0a87_1 | Bin 0 -> 3673 bytes .../b902796a9df3342c_0 | Bin 0 -> 885 bytes .../b9ba26b7e74f289b_0 | Bin 0 -> 771 bytes .../b9be2485870a645c_0 | Bin 0 -> 4153 bytes .../b9eb742f7013bee9_0 | Bin 0 -> 702 bytes .../b9f49f5909830590_0 | Bin 0 -> 2578 bytes .../ba0913046658d355_0 | Bin 0 -> 2501 bytes .../ba38d09f50e0773a_0 | Bin 0 -> 1608 bytes .../ba38d09f50e0773a_1 | Bin 0 -> 1230 bytes .../ba769caf586e4f43_0 | Bin 0 -> 7264 bytes .../ba769caf586e4f43_1 | Bin 0 -> 5321 bytes .../ba85fab75db0fd07_0 | Bin 0 -> 1451 bytes .../bac73a815d2b934b_0 | Bin 0 -> 609 bytes .../bac98421ca1c2fbf_0 | Bin 0 -> 4564 bytes .../bac98421ca1c2fbf_1 | Bin 0 -> 3443 bytes .../bacbc6a543d12f63_0 | Bin 0 -> 721 bytes .../bad971a94d1bf3bc_0 | Bin 0 -> 1775 bytes .../bb11e1c80bdeec13_0 | Bin 0 -> 636 bytes .../bbe514bd9c538202_0 | Bin 0 -> 3137 bytes .../bbe514bd9c538202_1 | Bin 0 -> 1808 bytes .../bc1462f5835e20b6_0 | Bin 0 -> 790 bytes .../bc19c956cdc8e800_0 | Bin 0 -> 1978 bytes .../bc4de8bb2541b7a9_0 | Bin 0 -> 636 bytes .../bd308d48551b6777_0 | Bin 0 -> 581 bytes .../bd6cde1a88919e5b_0 | Bin 0 -> 485 bytes .../bdc7473cd990ab7c_0 | Bin 0 -> 5271 bytes .../be37396559ceaaa7_0 | Bin 0 -> 3336 bytes .../be43730dbb112d78_0 | Bin 0 -> 1417 bytes .../be87d844c2185ee8_0 | Bin 0 -> 581 bytes .../beb08b8b616b7350_0 | Bin 0 -> 622 bytes .../beee568cdf52d56a_0 | Bin 0 -> 1889 bytes .../bef523ee264e03a6_0 | Bin 0 -> 859 bytes .../bf219a7ca4e0e2db_0 | Bin 0 -> 7648 bytes .../bf219a7ca4e0e2db_1 | Bin 0 -> 5492 bytes .../bfb7c6494f596d9b_0 | Bin 0 -> 612 bytes .../c00520fa3d8342ea_0 | Bin 0 -> 529 bytes .../c0aa0869e28cef03_0 | Bin 0 -> 1610 bytes .../c0aa0869e28cef03_1 | Bin 0 -> 946 bytes .../c0c2523c2b3017cd_0 | Bin 0 -> 730 bytes .../c0ceb5ed324b6776_0 | Bin 0 -> 28124 bytes .../c0ceb5ed324b6776_1 | Bin 0 -> 9774 bytes .../c0ef5dd2efa3d2da_0 | Bin 0 -> 17382 bytes .../c0ef5dd2efa3d2da_1 | Bin 0 -> 7553 bytes .../c0efb48a0f36bdf1_0 | Bin 0 -> 5238 bytes .../c1bd60a45b969535_0 | Bin 0 -> 1585 bytes .../c1d389498d5bc95d_0 | Bin 0 -> 715 bytes .../c20571520725e922_0 | Bin 0 -> 1423 bytes .../c234dbc237cce573_0 | Bin 0 -> 794 bytes .../c24b50ddf3ec84ff_0 | Bin 0 -> 1234 bytes .../c2d910d9ca7c4ab1_0 | Bin 0 -> 13270 bytes .../c2d910d9ca7c4ab1_1 | Bin 0 -> 3275 bytes .../c3c96fce7d5d5ef9_0 | Bin 0 -> 20168 bytes .../c3dcbced2b346b1b_0 | Bin 0 -> 4130 bytes .../c4416666390b391b_0 | Bin 0 -> 853 bytes .../c4dee0122d776aa5_0 | Bin 0 -> 667 bytes .../c5b15f6e0914c805_0 | Bin 0 -> 676 bytes .../c5c6ad7dd2359d4f_0 | Bin 0 -> 582 bytes .../c5f96edcfce451c6_0 | Bin 0 -> 5335 bytes .../c7045a4ec00ab0b3_0 | Bin 0 -> 1867 bytes .../c7045a4ec00ab0b3_1 | Bin 0 -> 857 bytes .../c77197cb4bd026f5_0 | Bin 0 -> 669 bytes .../c827eb10d2414485_0 | Bin 0 -> 3364 bytes .../c8835d6c8deb1c6f_0 | Bin 0 -> 600 bytes .../c8a5b36a20bc2678_0 | Bin 0 -> 1093 bytes .../c8ab493167cdb6e5_0 | Bin 0 -> 4822 bytes .../c8ab493167cdb6e5_1 | Bin 0 -> 2084 bytes .../c8b84b7342bfebbc_0 | Bin 0 -> 742 bytes .../c8e635c5956b864f_0 | Bin 0 -> 1163 bytes .../c8f81912308f826b_0 | Bin 0 -> 5073 bytes .../ca1e309e702a76ed_0 | Bin 0 -> 8249 bytes .../ca1e309e702a76ed_1 | Bin 0 -> 4448 bytes .../ca46c2aa81ec7047_0 | Bin 0 -> 926 bytes .../ca8ed88bcbbbd3f2_0 | Bin 0 -> 711 bytes .../caf1cd3ed85eb74e_0 | Bin 0 -> 597 bytes .../cb0fab0ad9057d4e_0 | Bin 0 -> 614 bytes .../cb2c203e1e0f4c74_0 | Bin 0 -> 4399 bytes .../cb2c203e1e0f4c74_1 | Bin 0 -> 3224 bytes .../cb7fbe610da855b5_0 | Bin 0 -> 739 bytes .../cc180057d87fdd33_0 | Bin 0 -> 2309 bytes .../cc180057d87fdd33_1 | Bin 0 -> 1003 bytes .../ccd6c7a530b4f930_0 | Bin 0 -> 5491 bytes .../ccd6c7a530b4f930_1 | Bin 0 -> 2325 bytes .../cd47fc03a4aba6dc_0 | Bin 0 -> 821 bytes .../cd572a1b4f793097_0 | Bin 0 -> 547 bytes .../cd5739b39908fc4f_0 | Bin 0 -> 1406 bytes .../cd7e9fefbddf335a_0 | Bin 0 -> 496 bytes .../cd9d3e7c148babcf_0 | Bin 0 -> 5877 bytes .../cd9f5daeb246bdd6_0 | Bin 0 -> 1210 bytes .../ce31d51328e39851_0 | Bin 0 -> 552 bytes .../ce667784c6e68c0f_0 | Bin 0 -> 1528 bytes .../ce667784c6e68c0f_1 | Bin 0 -> 627 bytes .../cec8de2e6b5a7044_0 | Bin 0 -> 618 bytes .../cf3abbbd2916e44b_0 | Bin 0 -> 811 bytes .../cf3c017c582b5bc8_0 | Bin 0 -> 1142 bytes .../cf825e02b94abade_0 | Bin 0 -> 1926 bytes .../cf825e02b94abade_1 | Bin 0 -> 796 bytes .../cfbfc04797ccda7b_0 | Bin 0 -> 3237 bytes .../d04f03283780f57f_0 | Bin 0 -> 1220 bytes .../d074796fe909fa7b_0 | Bin 0 -> 2164 bytes .../d07a75c19ff93b9c_0 | Bin 0 -> 2147 bytes .../d07a75c19ff93b9c_1 | Bin 0 -> 1212 bytes .../d0859f7e4aff67db_0 | Bin 0 -> 1174 bytes .../d09cecc3c8d96293_0 | Bin 0 -> 3946 bytes .../d09cecc3c8d96293_1 | Bin 0 -> 1543 bytes .../d2832816719c1956_0 | Bin 0 -> 872 bytes .../d3199c592bd51ecf_0 | Bin 0 -> 1508 bytes .../d38dd104113092a3_0 | Bin 0 -> 813 bytes .../d39d60dc00b7c5cd_0 | Bin 0 -> 6060 bytes .../d3f03da5ec12b7ee_0 | Bin 0 -> 782 bytes .../d58347d203ad869f_0 | Bin 0 -> 1908 bytes .../d58347d203ad869f_1 | Bin 0 -> 2238 bytes .../d5a54fa9ee890493_0 | Bin 0 -> 1297 bytes .../d66a38fb3dc673ce_0 | Bin 0 -> 4017 bytes .../d6ce347541d9648d_0 | Bin 0 -> 1151 bytes .../d738c395227b6276_0 | Bin 0 -> 922 bytes .../d73c2f40205ade4d_0 | Bin 0 -> 15086 bytes .../d73c2f40205ade4d_1 | Bin 0 -> 5743 bytes .../d743c97f71a60d6f_0 | Bin 0 -> 4714 bytes .../d757866a00c875a7_0 | Bin 0 -> 710 bytes .../d7babbddb18c59cc_0 | Bin 0 -> 2062 bytes .../d7babbddb18c59cc_1 | Bin 0 -> 1447 bytes .../d7e73c042cbaf5db_0 | Bin 0 -> 680 bytes .../d84c547bba67527e_0 | Bin 0 -> 754 bytes .../d8ba5d53d0a2e9a7_0 | Bin 0 -> 588 bytes .../d948e8b78554f2a0_0 | Bin 0 -> 4816 bytes .../d948e8b78554f2a0_1 | Bin 0 -> 5443 bytes .../d9b8fb7c3bb0bb46_0 | Bin 0 -> 3684 bytes .../dac293fe9d3f4e47_0 | Bin 0 -> 971 bytes .../db50568326c9b20d_0 | Bin 0 -> 2328 bytes .../db69f92d871865d3_0 | Bin 0 -> 1185 bytes .../db88765cff0fd9c9_0 | Bin 0 -> 1802 bytes .../dbcfc53af8ef8430_0 | Bin 0 -> 29308 bytes .../dca106f822cbb7b2_0 | Bin 0 -> 845 bytes .../dcff88ee0ba2b6d5_0 | Bin 0 -> 24251 bytes .../dcff88ee0ba2b6d5_1 | Bin 0 -> 8882 bytes .../dd66d0d0fda63b26_0 | Bin 0 -> 610 bytes .../dd6ee0fe8c6d4523_0 | Bin 0 -> 1086 bytes .../dd9596d3d7fa6c3d_0 | Bin 0 -> 2624 bytes .../dd9596d3d7fa6c3d_1 | Bin 0 -> 1115 bytes .../ddd3e4f93af24594_0 | Bin 0 -> 846 bytes .../de7a26eda1e9d5ad_0 | Bin 0 -> 3238 bytes .../de899a798cb45de2_0 | Bin 0 -> 864 bytes .../df74a43c5002ed52_0 | Bin 0 -> 2800 bytes .../df74a43c5002ed52_1 | Bin 0 -> 1742 bytes .../df923205969c250a_0 | Bin 0 -> 725 bytes .../dfbf502831b5bb8f_0 | Bin 0 -> 2293 bytes .../dff8fc5eefd2b200_0 | Bin 0 -> 522 bytes .../dff939b9f7314e39_0 | Bin 0 -> 14208 bytes .../dfff84b1c37f02d1_0 | Bin 0 -> 1641 bytes .../dfff84b1c37f02d1_1 | Bin 0 -> 1813 bytes .../e00382d87e81461f_0 | Bin 0 -> 932 bytes .../e013830503d2824a_0 | Bin 0 -> 5198 bytes .../e02a34609fadb397_0 | Bin 0 -> 617 bytes .../e08da9266b7bc35e_0 | Bin 0 -> 2803 bytes .../e08da9266b7bc35e_1 | Bin 0 -> 1373 bytes .../e0b087468fdc45a7_0 | Bin 0 -> 902 bytes .../e0bc01e123c1b662_0 | Bin 0 -> 641 bytes .../e136fd1109282d13_0 | Bin 0 -> 5187 bytes .../e136fd1109282d13_1 | Bin 0 -> 2921 bytes .../e15c3ac0484a41b6_0 | Bin 0 -> 580 bytes .../e1809aa1dec51752_0 | Bin 0 -> 2079 bytes .../e19f9695351856c7_0 | Bin 0 -> 3377 bytes .../e20180a84a0ba2ed_0 | Bin 0 -> 703 bytes .../e253de74f4d7a3a8_0 | Bin 0 -> 1227 bytes .../e25646a452fb0490_0 | Bin 0 -> 6699 bytes .../e2829f64a4e61c11_0 | Bin 0 -> 615 bytes .../e28b460f9c8fdd4b_0 | Bin 0 -> 1420 bytes .../e2bc1d57f58eb681_0 | Bin 0 -> 1648 bytes .../e2bc1d57f58eb681_1 | Bin 0 -> 894 bytes .../e2c516ac01f37f95_0 | Bin 0 -> 3007 bytes .../e2c516ac01f37f95_1 | Bin 0 -> 2486 bytes .../e2cff40e1dbe997a_0 | Bin 0 -> 859 bytes .../e305d432d2ecf44d_0 | Bin 0 -> 813 bytes .../e38751bbd8f58290_0 | Bin 0 -> 638 bytes .../e4f75c3a735f86ff_0 | Bin 0 -> 1687 bytes .../e4f75c3a735f86ff_1 | Bin 0 -> 1679 bytes .../e4fbeec63fe67d63_0 | Bin 0 -> 787 bytes .../e50a02fe3f712667_0 | Bin 0 -> 4207 bytes .../e589ee0b286def25_0 | Bin 0 -> 2256 bytes .../e589ee0b286def25_1 | Bin 0 -> 2526 bytes .../e5a54e20943590c7_0 | Bin 0 -> 767 bytes .../e5b373e7782ab510_0 | Bin 0 -> 5438 bytes .../e5b373e7782ab510_1 | Bin 0 -> 888 bytes .../e5c9cf1989b76ba1_0 | Bin 0 -> 3822 bytes .../e5c9cf1989b76ba1_1 | Bin 0 -> 1551 bytes .../e6baf625a3662f25_0 | Bin 0 -> 1676 bytes .../e6baf625a3662f25_1 | Bin 0 -> 1732 bytes .../e6cbfef54305e176_0 | Bin 0 -> 610 bytes .../e738d572b32a90c4_0 | Bin 0 -> 49480 bytes .../e799ad5644bd82e1_0 | Bin 0 -> 3628 bytes .../e799ad5644bd82e1_1 | Bin 0 -> 908 bytes .../e7e1aab3476bac96_0 | Bin 0 -> 743 bytes .../e886411785d45641_0 | Bin 0 -> 755 bytes .../e88ea8e12f6198ee_0 | Bin 0 -> 3764 bytes .../e88ea8e12f6198ee_1 | Bin 0 -> 1453 bytes .../e8fb0d04fb040780_0 | Bin 0 -> 4030 bytes .../e93ff4514e5e7f99_0 | Bin 0 -> 5321 bytes .../e9670b1447330333_0 | Bin 0 -> 12571 bytes .../e9670b1447330333_1 | Bin 0 -> 8819 bytes .../e99d688924ac6e22_0 | Bin 0 -> 662 bytes .../e9b105d97e8f10be_0 | Bin 0 -> 4395 bytes .../e9b105d97e8f10be_1 | Bin 0 -> 4271 bytes .../e9b596c5ceaf029f_0 | Bin 0 -> 1199 bytes .../ea35697d605d717b_0 | Bin 0 -> 692 bytes .../ea6e9425677b81ad_0 | Bin 0 -> 6711 bytes .../ea6e9425677b81ad_1 | Bin 0 -> 3215 bytes .../eb15c24530086e0c_0 | Bin 0 -> 2465 bytes .../eb15c24530086e0c_1 | Bin 0 -> 2575 bytes .../eb78ce0f85d8c407_0 | Bin 0 -> 1272 bytes .../ec356c6f232412e8_0 | Bin 0 -> 832 bytes .../ec87d2213fdaa13f_0 | Bin 0 -> 567 bytes .../ec9e4bdd9347694b_0 | Bin 0 -> 4231 bytes .../ecda1ae0d600ab28_0 | Bin 0 -> 5429 bytes .../ecfb82875bcc777a_0 | Bin 0 -> 999 bytes .../ed270477f6d1ece8_0 | Bin 0 -> 8427 bytes .../ed270477f6d1ece8_1 | Bin 0 -> 5427 bytes .../ed783c04af39baae_0 | Bin 0 -> 603 bytes .../ee19d828b2eb1dd4_0 | Bin 0 -> 690 bytes .../ee71eabb5532d76d_0 | Bin 0 -> 775 bytes .../eea5b951f3509e76_0 | Bin 0 -> 1716 bytes .../ef5361bebb951fda_0 | Bin 0 -> 32222 bytes .../ef5361bebb951fda_1 | Bin 0 -> 11142 bytes .../ef5887180c77f64f_0 | Bin 0 -> 2053 bytes .../f0b76897b3d3a7ff_0 | Bin 0 -> 600 bytes .../f1105ef47eb0a55a_0 | Bin 0 -> 15729 bytes .../f1105ef47eb0a55a_1 | Bin 0 -> 5978 bytes .../f12c1892975670ae_0 | Bin 0 -> 719 bytes .../f2123455665e159e_0 | Bin 0 -> 738 bytes .../f23051e1b37a541e_0 | Bin 0 -> 3405 bytes .../f2b8a88f7c04a3d0_0 | Bin 0 -> 3109 bytes .../f2b8a88f7c04a3d0_1 | Bin 0 -> 1370 bytes .../f2cff1f7ecaa14bc_0 | Bin 0 -> 1144 bytes .../f3271d1e36c34e51_0 | Bin 0 -> 5596 bytes .../f38fee92a1651aca_0 | Bin 0 -> 671 bytes .../f3c82aea08a79b27_0 | Bin 0 -> 6334 bytes .../f3f2391f5ce23d1e_0 | Bin 0 -> 630 bytes .../f43ac036cb54ce28_0 | Bin 0 -> 978 bytes .../f47bc38722ee1c81_0 | Bin 0 -> 2757 bytes .../f47bc38722ee1c81_1 | Bin 0 -> 2170 bytes .../f4d991309c62b54c_0 | Bin 0 -> 2730 bytes .../f4d991309c62b54c_1 | Bin 0 -> 1972 bytes .../f4ea72050b4078a7_0 | Bin 0 -> 2198 bytes .../f575b1617f383aca_0 | Bin 0 -> 718 bytes .../f5af34b25a339b8c_0 | Bin 0 -> 1880 bytes .../f5af34b25a339b8c_1 | Bin 0 -> 838 bytes .../f623fc8d42740b21_0 | Bin 0 -> 9499 bytes .../f671d11c42caa3ff_0 | Bin 0 -> 596 bytes .../f685684bc3d209d6_0 | Bin 0 -> 1906 bytes .../f69e2d16749c5942_0 | Bin 0 -> 27045 bytes .../f69e2d16749c5942_1 | Bin 0 -> 14504 bytes .../f726abc9102029ac_0 | Bin 0 -> 2427 bytes .../f726abc9102029ac_1 | Bin 0 -> 1390 bytes .../f79744824b297c34_0 | Bin 0 -> 53885 bytes .../f80d833dc31a25f0_0 | Bin 0 -> 1192 bytes .../f825b87d5ca26b02_0 | Bin 0 -> 1331 bytes .../f88ab9fbc82b8218_0 | Bin 0 -> 1162 bytes .../f8c96fac3f694495_0 | Bin 0 -> 1337 bytes .../f8ce970ea55d9009_0 | Bin 0 -> 762 bytes .../f8db1d8ec293bdbe_0 | Bin 0 -> 1491 bytes .../f8db1d8ec293bdbe_1 | Bin 0 -> 683 bytes .../f96bfa4a84f6aedb_0 | Bin 0 -> 637 bytes .../f9b63a35f54e6cc8_0 | Bin 0 -> 4278 bytes .../f9b63a35f54e6cc8_1 | Bin 0 -> 4859 bytes .../fb179cc2a184cdf7_0 | Bin 0 -> 908 bytes .../fb50f1b52c8fd94b_0 | Bin 0 -> 8537 bytes .../fb70769c8399b633_0 | Bin 0 -> 2183 bytes .../fca46082b1b5ab14_0 | Bin 0 -> 658 bytes .../fd93add5705ab1fa_0 | Bin 0 -> 2397 bytes .../fd93add5705ab1fa_1 | Bin 0 -> 1475 bytes .../fdfb8499b73a50dc_0 | Bin 0 -> 8967 bytes .../fdfb8499b73a50dc_1 | Bin 0 -> 1864 bytes .../fe1d084e0d35cba2_0 | Bin 0 -> 1116 bytes .../fe9c2783fbbacb79_0 | Bin 0 -> 8789 bytes .../ff3e757a43f44f33_0 | Bin 0 -> 1116 bytes .../ff4b34175737767b_0 | Bin 0 -> 1352 bytes .../ed9c4292-8564-4985-872f-806e6cda6b1e/index | Bin 0 -> 24 bytes .../index-dir/the-real-index | Bin 0 -> 19512 bytes .../index.txt | Bin 0 -> 229 bytes .../003e46dfa020b539_0 | Bin 0 -> 1915 bytes .../0c7647488b53391d_0 | Bin 0 -> 1364 bytes .../0fee90b3154d40dd_0 | Bin 0 -> 669 bytes .../119ed47a376f2651_0 | Bin 0 -> 4021 bytes .../12afb400e97448f9_0 | Bin 0 -> 743 bytes .../13699328ec436ec3_0 | Bin 0 -> 1557 bytes .../19780c06974eb96e_0 | Bin 0 -> 3405 bytes .../199da6d6a0c58d80_0 | Bin 0 -> 2979 bytes .../21089030b93822e5_0 | Bin 0 -> 1455 bytes .../236a3309f0f971ef_0 | Bin 0 -> 2087 bytes .../25c1936bf63a35e2_0 | Bin 0 -> 17222 bytes .../2694a384ac4cc33e_0 | Bin 0 -> 1405 bytes .../293c338c8bf853f1_0 | Bin 0 -> 2842 bytes .../294eb073b9e36aac_0 | Bin 0 -> 5618 bytes .../2c3b1663f8077631_0 | Bin 0 -> 858 bytes .../2cd404dad84a7922_0 | Bin 0 -> 3945 bytes .../32f71bb5ec2dfd99_0 | Bin 0 -> 6199 bytes .../3466720e09f2e20f_0 | Bin 0 -> 2377 bytes .../39e08aa58d9c7d7c_0 | Bin 0 -> 1365 bytes .../3b114891236fa3d9_0 | Bin 0 -> 3747 bytes .../3b114891236fa3d9_1 | Bin 0 -> 10131 bytes .../3df382128cef311b_0 | Bin 0 -> 2242 bytes .../3e6268b294412d61_0 | Bin 0 -> 845 bytes .../4222d76aef767290_0 | Bin 0 -> 5144 bytes .../439848e05d32573d_0 | Bin 0 -> 1689 bytes .../45118f9747c4892a_0 | Bin 0 -> 2066 bytes .../48eddf6b586c49b9_0 | Bin 0 -> 3230 bytes .../4bb5c1134bb09a25_0 | Bin 0 -> 2060 bytes .../5577af1e5aa23c4d_0 | Bin 0 -> 10982 bytes .../58172732236739b3_0 | Bin 0 -> 1149 bytes .../5cc53617e9805d93_0 | Bin 0 -> 2510 bytes .../5ef22106a5cbac93_0 | Bin 0 -> 3820 bytes .../67e08538bb1ea38c_0 | Bin 0 -> 3341 bytes .../6be50e6522c544ff_0 | Bin 0 -> 865 bytes .../7258704b683a1901_0 | Bin 0 -> 6996 bytes .../73da199e1b08c7b0_0 | Bin 0 -> 908 bytes .../75360191d8f453eb_0 | Bin 0 -> 86645 bytes .../77c768f386034b86_0 | Bin 0 -> 1223 bytes .../77c768f386034b86_1 | Bin 0 -> 1346 bytes .../82184a88fc250056_0 | Bin 0 -> 1205 bytes .../85a7fcc7a7cbd124_0 | Bin 0 -> 781 bytes .../87efe62f47145652_0 | Bin 0 -> 797 bytes .../87efe62f47145652_1 | Bin 0 -> 828 bytes .../892eeccba4b59f85_0 | Bin 0 -> 7506 bytes .../89af32d5ead849e2_0 | Bin 0 -> 6766 bytes .../8be08effbfba8e82_0 | Bin 0 -> 6014 bytes .../8be08effbfba8e82_1 | Bin 0 -> 5708 bytes .../8cd89069cda692fa_0 | Bin 0 -> 4001 bytes .../8ea4ca1ba0311bb4_0 | Bin 0 -> 4796 bytes .../91f5f98a82824752_0 | Bin 0 -> 5353 bytes .../928c2b25d52679e0_0 | Bin 0 -> 741 bytes .../93b19068f24a39eb_0 | Bin 0 -> 916 bytes .../994ce7ca59be49b5_0 | Bin 0 -> 793 bytes .../99e7f3c6d22b8a46_0 | Bin 0 -> 8556 bytes .../9b28781c6ee3f007_0 | Bin 0 -> 935 bytes .../a1c638fe9a98477f_0 | Bin 0 -> 1519 bytes .../a4fc085d7633f7f8_0 | Bin 0 -> 1656 bytes .../a56a3431222d973e_0 | Bin 0 -> 13853 bytes .../a56a3431222d973e_1 | Bin 0 -> 41531 bytes .../a9eb274094ab27d8_0 | Bin 0 -> 14672 bytes .../a9ec1dd51e9acf2b_0 | Bin 0 -> 848 bytes .../aca1a0ae1f0ed8af_0 | Bin 0 -> 688 bytes .../ad185eb55c0361b8_0 | Bin 0 -> 1111 bytes .../b6b41889d5ec8834_0 | Bin 0 -> 1662 bytes .../b9256146face4556_0 | Bin 0 -> 3599 bytes .../c1541e8df3abf73e_0 | Bin 0 -> 6452 bytes .../c1541e8df3abf73e_1 | Bin 0 -> 15841 bytes .../c2724c9f360aed77_0 | Bin 0 -> 2660 bytes .../c60bd809f05efb2d_0 | Bin 0 -> 1487 bytes .../ca27752d5234bd03_0 | Bin 0 -> 1501 bytes .../d1a1c0da3f7c2d50_0 | Bin 0 -> 3015 bytes .../d1a1c0da3f7c2d50_1 | Bin 0 -> 5595 bytes .../d8fb532cd3d79b9e_0 | Bin 0 -> 2999 bytes .../de344b189d5554a1_0 | Bin 0 -> 6186 bytes .../e090b6ab1241b621_0 | Bin 0 -> 2302 bytes .../e0c6a47d1292c33b_0 | Bin 0 -> 1295725 bytes .../e0c6a47d1292c33b_1 | Bin 0 -> 1545710 bytes .../e36af5d6edf1d44b_0 | Bin 0 -> 2914 bytes .../e88bb3bf086f15dd_0 | Bin 0 -> 1781 bytes .../ebff3f62aac2dcfd_0 | Bin 0 -> 1423 bytes .../f043a1e616999554_0 | Bin 0 -> 1197 bytes .../f043a1e616999554_1 | Bin 0 -> 1361 bytes .../f501f85093a60586_0 | Bin 0 -> 1336 bytes .../f7ebb963a3c873ef_0 | Bin 0 -> 1823 bytes .../f92ff1e61f7b6520_0 | Bin 0 -> 1367 bytes .../faf8e747d63a154c_0 | Bin 0 -> 3069 bytes .../fbae1f39235dc6fa_0 | Bin 0 -> 1621 bytes .../fed1ab16a3cca7be_0 | Bin 0 -> 1573 bytes .../ffbe24e1bc4c9e36_0 | Bin 0 -> 1751 bytes .../98af87df-2420-4aac-a03f-7fe038216441/index | Bin 0 -> 24 bytes .../index-dir/the-real-index | Bin 0 -> 1968 bytes .../index.txt | Bin 0 -> 232 bytes .../00d49b4d2587980b_0 | Bin 0 -> 13495 bytes .../0691678d2aaae303_0 | Bin 0 -> 85895 bytes .../0def118dbfd34d66_0 | Bin 0 -> 70750 bytes .../11127f2fe7d5c20b_0 | Bin 0 -> 23159 bytes .../17458aa7431ea693_0 | Bin 0 -> 2050 bytes .../27e033c33c6c2d70_0 | Bin 0 -> 11130 bytes .../2c596d4dac203c3a_0 | Bin 0 -> 62504 bytes .../306ce19568bd5862_0 | Bin 0 -> 55814 bytes .../312e55c27d50500a_0 | Bin 0 -> 11524 bytes .../31f0026bc83eaa8b_0 | Bin 0 -> 295170 bytes .../3550787ee3393fe4_0 | Bin 0 -> 380338 bytes .../3fe1746c4c6e609c_0 | Bin 0 -> 2050 bytes .../403708932b391e16_0 | Bin 0 -> 19571 bytes .../52d983a50eb8360f_0 | Bin 0 -> 13750 bytes .../551ee88b37d6fe88_0 | Bin 0 -> 252688 bytes .../595f9fcdb423d2a0_0 | Bin 0 -> 105361 bytes .../5a0af9654c6eb91e_0 | Bin 0 -> 27335 bytes .../5ae24d424d2370ef_0 | Bin 0 -> 64473 bytes .../61010eea16ca8cc3_0 | Bin 0 -> 1966 bytes .../61f93fcbd25e4a1c_0 | Bin 0 -> 91228 bytes .../62f8e3beac831923_0 | Bin 0 -> 74033 bytes .../6429e2e913547ffb_0 | Bin 0 -> 47960 bytes .../6b1a17bf6ed294bc_0 | Bin 0 -> 24979 bytes .../71b5a1796330c157_0 | Bin 0 -> 2179 bytes .../721b6df1b6e9066f_0 | Bin 0 -> 11794 bytes .../7454ae9888c49958_0 | Bin 0 -> 273983 bytes .../766234bef285fb50_0 | Bin 0 -> 1874 bytes .../77f7a4868a83c225_0 | Bin 0 -> 21930 bytes .../7babc87337125856_0 | Bin 0 -> 180510 bytes .../7c53e3148d519dcb_0 | Bin 0 -> 2515 bytes .../7e3595566a97799e_0 | Bin 0 -> 164332 bytes .../824feeeeab1e0c29_0 | Bin 0 -> 9743 bytes .../84afcdbeb0258dba_0 | Bin 0 -> 2856 bytes .../8e5802d93b21c0de_0 | Bin 0 -> 70216 bytes .../91dea6e779d99b27_0 | Bin 0 -> 41857 bytes .../9516e32044704bbf_0 | Bin 0 -> 166982 bytes .../9c1489e370657f77_0 | Bin 0 -> 113776 bytes .../a7a544366fabe60f_0 | Bin 0 -> 49971 bytes .../ab1a380089186474_0 | Bin 0 -> 6886 bytes .../aecd1be9e56c2119_0 | Bin 0 -> 83824 bytes .../b0a430d4637fdccf_0 | Bin 0 -> 145713 bytes .../b6b7e241b2bfd040_0 | Bin 0 -> 171533 bytes .../b96f102821ba86d9_0 | Bin 0 -> 50392 bytes .../bc8cf2acdc2f9225_0 | Bin 0 -> 177103 bytes .../bd4df23e502d12a5_0 | Bin 0 -> 2050 bytes .../be9256367f8f9ee6_0 | Bin 0 -> 307467 bytes .../ce8704f1c44d9f88_0 | Bin 0 -> 53854 bytes .../d05580d6490888ac_0 | Bin 0 -> 2177 bytes .../d1546d22654a128f_0 | Bin 0 -> 224198 bytes .../d3356420e76bf5cb_0 | Bin 0 -> 10087 bytes .../dd79010cb0591772_0 | Bin 0 -> 8106 bytes .../ddd50199ea01f2fe_0 | Bin 0 -> 2179 bytes .../dfeebfabf371b18b_0 | Bin 0 -> 15395 bytes .../e71bda0f52ebdb1e_0 | Bin 0 -> 133488 bytes .../fc22692f46c328ab_0 | Bin 0 -> 10918 bytes .../250ab7d9-0d84-4bc7-8cb4-0d4634211a71/index | Bin 0 -> 24 bytes .../index-dir/the-real-index | Bin 0 -> 1368 bytes .../031f48e0c36b9934_0 | Bin 0 -> 135792 bytes .../14860bebeafa40d1_0 | Bin 0 -> 201179 bytes .../26038abf687e8399_0 | Bin 0 -> 154877 bytes .../2afe578606b9339f_0 | Bin 0 -> 3938 bytes .../2d89c98debc14a6b_0 | Bin 0 -> 294172 bytes .../3917654c9f69b5b9_0 | Bin 0 -> 32299 bytes .../3adb0f728a11ebd5_0 | Bin 0 -> 1842 bytes .../447d923c5308216e_0 | Bin 0 -> 173968 bytes .../4d2d3ad5ecefae07_0 | Bin 0 -> 60528 bytes .../5d31591218d525c4_0 | Bin 0 -> 2035 bytes .../6232626923dea252_0 | Bin 0 -> 5117 bytes .../69ec0c209f5c0bfd_0 | Bin 0 -> 39187 bytes .../8f0f15f44625f6d9_0 | Bin 0 -> 75475 bytes .../92a8c13965c78dd0_0 | Bin 0 -> 57122 bytes .../932460eeef86b971_0 | Bin 0 -> 3819 bytes .../b36369ff7e371734_0 | Bin 0 -> 198657 bytes .../b3ade297ad8aebbd_0 | Bin 0 -> 36377 bytes .../be2ec7d709529a7d_0 | Bin 0 -> 1906 bytes .../dea45bcc02ee1249_0 | Bin 0 -> 113773 bytes .../eda3e39d4b0d1f86_0 | Bin 0 -> 6416 bytes .../f3b692f88bf245ea_0 | Bin 0 -> 380334 bytes .../2a666d8f-5250-47b0-b031-89b418a19cd5/index | Bin 0 -> 24 bytes .../index-dir/the-real-index | Bin 0 -> 552 bytes .../0e8fbbc4c2a40488_0 | Bin 0 -> 8435 bytes .../0e8fc5098f719e20_0 | Bin 0 -> 51618 bytes .../365f0f766426ff59_0 | Bin 0 -> 14711 bytes .../365f0f766426ff59_1 | Bin 0 -> 7362 bytes .../43d9b2a540277cdb_0 | Bin 0 -> 45313 bytes .../43d9b2a540277cdb_1 | Bin 0 -> 16718 bytes .../59a5ef5a5cf2bd1e_0 | Bin 0 -> 522371 bytes .../5ef034abc1264e2b_0 | Bin 0 -> 9503 bytes .../6693c148429d6419_0 | Bin 0 -> 87416 bytes .../a7d03ee421eb3dbd_0 | Bin 0 -> 81082 bytes .../b045d9f800cf10a4_0 | Bin 0 -> 132976 bytes .../b045d9f800cf10a4_1 | Bin 0 -> 76221 bytes .../bac2607142395d46_0 | Bin 0 -> 85640 bytes .../d6cd6f5619d0e4cc_0 | Bin 0 -> 192195 bytes .../d6cd6f5619d0e4cc_1 | Bin 0 -> 56448 bytes .../defe50f574a959f9_0 | Bin 0 -> 11876 bytes .../defe50f574a959f9_1 | Bin 0 -> 12557 bytes .../ef58de15a8856b1d_0 | Bin 0 -> 552938 bytes .../4629c00e-5327-4f5d-85a3-9f4bf412f654/index | Bin 0 -> 24 bytes .../index-dir/the-real-index | Bin 0 -> 360 bytes .../16b0914734cc3f9b_0 | Bin 0 -> 6321 bytes .../28d395390b4bef8e_0 | Bin 0 -> 81657 bytes .../2dba8e9bca54bd17_0 | Bin 0 -> 2146 bytes .../3867c8caf074e354_0 | Bin 0 -> 43697 bytes .../4203240924b11850_0 | Bin 0 -> 71757 bytes .../474683591fdad3c0_0 | Bin 0 -> 5406986 bytes .../5240b0b8ba9f46a7_0 | Bin 0 -> 28328 bytes .../529a6ee823e6cc5b_0 | Bin 0 -> 380367 bytes .../55ee7539ad979a66_0 | Bin 0 -> 57390 bytes .../63046f9727a836e1_0 | Bin 0 -> 64722 bytes .../649dfe80b869f136_0 | Bin 0 -> 129443 bytes .../661692201a84b692_0 | Bin 0 -> 1890 bytes .../69580f993d1ae8fb_0 | Bin 0 -> 5699 bytes .../6a1d47f6f150fa16_0 | Bin 0 -> 2108 bytes .../6fe717885e6a664a_0 | Bin 0 -> 203259 bytes .../7f0550dbf963f56b_0 | Bin 0 -> 41663 bytes .../7fec617899ac31b3_0 | Bin 0 -> 5491 bytes .../8f6b9e50046ca051_0 | Bin 0 -> 166720 bytes .../992556c964fe208b_0 | Bin 0 -> 56879 bytes .../9f34627a9fc4cb8e_0 | Bin 0 -> 278218 bytes .../a5f42fe1462b468d_0 | Bin 0 -> 2270 bytes .../a95d99aa9fa01c1b_0 | Bin 0 -> 4665 bytes .../aaa18642967f805b_0 | Bin 0 -> 2178 bytes .../ac1d2ecaa0e8d025_0 | Bin 0 -> 129514 bytes .../b6f363ff28e55219_0 | Bin 0 -> 74261 bytes .../babf317802428a63_0 | Bin 0 -> 78461 bytes .../c647507ef171d5d4_0 | Bin 0 -> 164250 bytes .../c8bf83be0b42493a_0 | Bin 0 -> 124698 bytes .../cc30867dd22dd55e_0 | Bin 0 -> 1876 bytes .../d62243b20640b1d2_0 | Bin 0 -> 1934 bytes .../db75fbd99b5ec8c8_0 | Bin 0 -> 32539 bytes .../e717dbc105c427c9_0 | Bin 0 -> 215112 bytes .../edff7b065b61b2d6_0 | Bin 0 -> 113791 bytes .../ef2334ffce031aae_0 | Bin 0 -> 2081 bytes .../f1c54b9b916b2c34_0 | Bin 0 -> 457615 bytes .../f95a7e4359d84de0_0 | Bin 0 -> 11105 bytes .../fa0c426140d219a6_0 | Bin 0 -> 2303 bytes .../606748f9-2def-4f33-9bf2-8c8b66d3ed12/index | Bin 0 -> 24 bytes .../index-dir/the-real-index | Bin 0 -> 936 bytes .../01f05e5eb1facff3_0 | Bin 0 -> 10913 bytes .../0b79a63456a1f811_0 | Bin 0 -> 5673 bytes .../1122af755e69c4c1_0 | Bin 0 -> 24803 bytes .../1f316d52f9d28644_0 | Bin 0 -> 106666 bytes .../34a86980a4dff60a_0 | Bin 0 -> 16582 bytes .../38f7ad1abc54bc06_0 | Bin 0 -> 2285 bytes .../468a6bd6dceb7784_0 | Bin 0 -> 77304 bytes .../5c363957aa88306a_0 | Bin 0 -> 20001 bytes .../5e1fe47bc2525c44_0 | Bin 0 -> 189556 bytes .../5ff1885ac233d554_0 | Bin 0 -> 24956 bytes .../66bc15050307eb3c_0 | Bin 0 -> 152409 bytes .../697b8cf8494c0f42_0 | Bin 0 -> 31331 bytes .../726185e5d82cc0e5_0 | Bin 0 -> 5336 bytes .../728054c067bfc372_0 | Bin 0 -> 203156 bytes .../72d259c506352de7_0 | Bin 0 -> 51525 bytes .../73571fb0028ab5ad_0 | Bin 0 -> 2181 bytes .../74be11ee2c6f4258_0 | Bin 0 -> 20954 bytes .../7509bff218b720b7_0 | Bin 0 -> 2384 bytes .../8666901963a78a4c_0 | Bin 0 -> 10894 bytes .../8d8b420db8dc117e_0 | Bin 0 -> 107384 bytes .../8e5272d35cf7f036_0 | Bin 0 -> 91782 bytes .../8fcb07737378dda6_0 | Bin 0 -> 1895 bytes .../933884e1185761e7_0 | Bin 0 -> 141539 bytes .../9475da2150d7cbe1_0 | Bin 0 -> 27155 bytes .../a224e0618f6bfe72_0 | Bin 0 -> 307462 bytes .../a6f0e8ef732b13c5_0 | Bin 0 -> 113771 bytes .../ac93898d279f19d7_0 | Bin 0 -> 46064 bytes .../c0015271b88adf13_0 | Bin 0 -> 164040 bytes .../c30938258fd10626_0 | Bin 0 -> 147377 bytes .../d20cfe171755615a_0 | Bin 0 -> 8669 bytes .../d72935c57c6a9125_0 | Bin 0 -> 7740 bytes .../d744fd56259648eb_0 | Bin 0 -> 2255 bytes .../e27ce15f3c17d0d9_0 | Bin 0 -> 77705 bytes .../e377758ed04bce0e_0 | Bin 0 -> 11075 bytes .../f9cd58d24d232cc6_0 | Bin 0 -> 12584 bytes .../ff48b3d550aff865_0 | Bin 0 -> 25586 bytes .../90dec3c3-4c39-4bb9-b7d3-cc4c9e03c5eb/index | Bin 0 -> 24 bytes .../index-dir/the-real-index | Bin 0 -> 912 bytes .../index.txt | Bin 0 -> 1373 bytes .../81f7e3e642548ca2_0 | Bin 0 -> 351 bytes .../424b3664-a6e4-404b-8cb1-6104cc670c6f/index | Bin 0 -> 24 bytes .../index-dir/the-real-index | Bin 0 -> 72 bytes .../index.txt | Bin 0 -> 149 bytes .../0fd96541ed099c97_0 | Bin 0 -> 3520 bytes .../0fd96541ed099c97_1 | Bin 0 -> 7158 bytes .../148ff62ef6e46ac2_0 | Bin 0 -> 3953 bytes .../148ff62ef6e46ac2_1 | Bin 0 -> 4541 bytes .../160cc6f20086b761_0 | Bin 0 -> 3718 bytes .../160cc6f20086b761_1 | Bin 0 -> 4163 bytes .../1c4824e0e654dabe_0 | Bin 0 -> 1188171 bytes .../203cb2053817cde5_0 | Bin 0 -> 9356 bytes .../203cb2053817cde5_1 | Bin 0 -> 18826 bytes .../3850996bebfb334c_0 | Bin 0 -> 1234881 bytes .../3850996bebfb334c_1 | Bin 0 -> 1096245 bytes .../3f715975503efc3a_0 | Bin 0 -> 587999 bytes .../3f715975503efc3a_1 | Bin 0 -> 380517 bytes .../44e9dc3025d793bc_0 | Bin 0 -> 1434 bytes .../485d544f4ff940ee_0 | Bin 0 -> 2410 bytes .../57402cbee8bf669c_0 | Bin 0 -> 3162 bytes .../63c86809628e4c21_0 | Bin 0 -> 2476 bytes .../63c86809628e4c21_1 | Bin 0 -> 3154 bytes .../75610e1557b27e82_0 | Bin 0 -> 8414 bytes .../801d3fe0de0d9b7b_0 | Bin 0 -> 1275 bytes .../8df682c653624fb5_0 | Bin 0 -> 42507 bytes .../8df682c653624fb5_1 | Bin 0 -> 20141 bytes .../9ed43819643dbfe2_0 | Bin 0 -> 10152 bytes .../aad15b9514d6acb6_0 | Bin 0 -> 43378 bytes .../ae780574eb3244ac_0 | Bin 0 -> 7888 bytes .../bd32dbbffcdebcd9_0 | Bin 0 -> 29186 bytes .../bdf0310b5fb9cb2c_0 | Bin 0 -> 2510 bytes .../d6f2aa8232324352_0 | Bin 0 -> 1789 bytes .../d7c2f178a3d8b5b5_0 | Bin 0 -> 798267 bytes .../d7c2f178a3d8b5b5_1 | Bin 0 -> 590085 bytes .../e2723294d8494736_0 | Bin 0 -> 3601 bytes .../f1a3746ef87aff81_0 | Bin 0 -> 1181 bytes .../f1a3746ef87aff81_1 | Bin 0 -> 811 bytes .../f78638f0e397944c_0 | Bin 0 -> 1283 bytes .../ef31a427-5db1-48ef-9cad-6588a5d84fde/index | Bin 0 -> 24 bytes .../index-dir/the-real-index | Bin 0 -> 624 bytes .../index.txt | Bin 0 -> 227 bytes .../0125450e1910eabc_0 | Bin 0 -> 97332 bytes .../0125450e1910eabc_1 | Bin 0 -> 213698 bytes .../01a2cce3dbf47a2d_0 | Bin 0 -> 13973 bytes .../02dc4a04d32539f7_0 | Bin 0 -> 12924 bytes .../03977ed293e4f244_0 | Bin 0 -> 5591 bytes .../03977ed293e4f244_1 | Bin 0 -> 7693 bytes .../040adbb193a1dd60_0 | Bin 0 -> 34705 bytes .../0546c7c63078d2d8_0 | Bin 0 -> 64763 bytes .../08b5d0ecdabcb20a_0 | Bin 0 -> 19839 bytes .../0a18bac32825a1d4_0 | Bin 0 -> 220661 bytes .../0a18bac32825a1d4_1 | Bin 0 -> 622461 bytes .../0b38ccfd0ec58227_0 | Bin 0 -> 109648 bytes .../0b38ccfd0ec58227_1 | Bin 0 -> 283674 bytes .../0edf76bd97e2b326_0 | Bin 0 -> 113780 bytes .../0edf76bd97e2b326_1 | Bin 0 -> 300147 bytes .../0f34d0ac4e01e170_0 | Bin 0 -> 190946 bytes .../0f34d0ac4e01e170_1 | Bin 0 -> 325691 bytes .../1402c0aabf09b6f0_0 | Bin 0 -> 1804 bytes .../1402c0aabf09b6f0_1 | Bin 0 -> 2718 bytes .../146cac7468eec933_0 | Bin 0 -> 14311 bytes .../17495c48da92b708_0 | Bin 0 -> 26335 bytes .../17e5dedcf6594252_0 | Bin 0 -> 28697 bytes .../18c18ffeb4113cdd_0 | Bin 0 -> 94205 bytes .../19466472951ab4fa_0 | Bin 0 -> 8816 bytes .../21e0dc7475920014_0 | Bin 0 -> 11493 bytes .../22dd3ebaf358bbff_0 | Bin 0 -> 20715 bytes .../22ed513d6a58054a_0 | Bin 0 -> 23497 bytes .../26f85a4dff718a8e_0 | Bin 0 -> 240278 bytes .../26f85a4dff718a8e_1 | Bin 0 -> 588285 bytes .../2813ef72e9650411_0 | Bin 0 -> 14314 bytes .../28b7eb6396fa4d6b_0 | Bin 0 -> 14677 bytes .../323cb44cb141b382_0 | Bin 0 -> 7310 bytes .../33d209fc507915fe_0 | Bin 0 -> 1390 bytes .../33d209fc507915fe_1 | Bin 0 -> 1622 bytes .../347dd6f38918ee04_0 | Bin 0 -> 13505 bytes .../3b6a9b9fd8e05f5c_0 | Bin 0 -> 17789 bytes .../3e6a00ff74ae9386_0 | Bin 0 -> 6030 bytes .../3f10a7efafddf14a_0 | Bin 0 -> 1182454 bytes .../3f10a7efafddf14a_1 | Bin 0 -> 3200548 bytes .../46d8ecb9987be4ce_0 | Bin 0 -> 4718 bytes .../481fa0c66ddec0b6_0 | Bin 0 -> 8762 bytes .../4c13bc11b8dbc101_0 | Bin 0 -> 54713 bytes .../4cc95acafe709be0_0 | Bin 0 -> 241349 bytes .../4cc95acafe709be0_1 | Bin 0 -> 529994 bytes .../4f172c3817a405dd_0 | Bin 0 -> 6994 bytes .../52c3a24bca405061_0 | Bin 0 -> 1756 bytes .../52c3a24bca405061_1 | Bin 0 -> 2210 bytes .../52e66d2b26a5f7dc_0 | Bin 0 -> 86600 bytes .../52ef80e11eb81c6c_0 | Bin 0 -> 17539 bytes .../55017344e7129e4f_0 | Bin 0 -> 5181 bytes .../55017344e7129e4f_1 | Bin 0 -> 12697 bytes .../583f36819ffe89d1_0 | Bin 0 -> 31871 bytes .../586b1b9d1a48c172_0 | Bin 0 -> 1006242 bytes .../586b1b9d1a48c172_1 | Bin 0 -> 1780245 bytes .../5a0a0f8e2f0a861c_0 | Bin 0 -> 12447 bytes .../5af21f46648da1ea_0 | Bin 0 -> 15815 bytes .../5e86944d7f1bb0e6_0 | Bin 0 -> 5518 bytes .../5f1675a86b62f9be_0 | Bin 0 -> 13485 bytes .../60449a8802448aef_0 | Bin 0 -> 8020 bytes .../615a77b72e968c89_0 | Bin 0 -> 135536 bytes .../615a77b72e968c89_1 | Bin 0 -> 335574 bytes .../6226d0dec43b599e_0 | Bin 0 -> 17645 bytes .../62d732e3f2717494_0 | Bin 0 -> 1345473 bytes .../62d732e3f2717494_1 | Bin 0 -> 2450594 bytes .../637522b941f01ebd_0 | Bin 0 -> 34605 bytes .../63a4c4e392ef79db_0 | Bin 0 -> 16718 bytes .../63a4c4e392ef79db_1 | Bin 0 -> 40397 bytes .../67bd9d03c0d05736_0 | Bin 0 -> 13141 bytes .../6eb90b3d58e5cfdb_0 | Bin 0 -> 32325 bytes .../70ca72818c980cb2_0 | Bin 0 -> 11445 bytes .../71564d5e50d67b7d_0 | Bin 0 -> 10746 bytes .../71da7f1782a5d72c_0 | Bin 0 -> 316729 bytes .../71da7f1782a5d72c_1 | Bin 0 -> 648154 bytes .../740ff11a684e162c_0 | Bin 0 -> 15517 bytes .../75c48dc4dda00eef_0 | Bin 0 -> 17135 bytes .../764c317f4113f80b_0 | Bin 0 -> 1593 bytes .../764c317f4113f80b_1 | Bin 0 -> 1981 bytes .../7a313c2d449c0976_0 | Bin 0 -> 8919 bytes .../7a313c2d449c0976_1 | Bin 0 -> 8733 bytes .../7ade3d42fb4302e2_0 | Bin 0 -> 180673 bytes .../7ade3d42fb4302e2_1 | Bin 0 -> 396925 bytes .../7b8986097a1886ab_0 | Bin 0 -> 3869 bytes .../7b8986097a1886ab_1 | Bin 0 -> 6085 bytes .../7c97795cbe1df3c1_0 | Bin 0 -> 13361 bytes .../7e399464258b3907_0 | Bin 0 -> 8358 bytes .../7eb276821699eaa7_0 | Bin 0 -> 9066 bytes .../7f659f57fef8475a_0 | Bin 0 -> 326624 bytes .../7f659f57fef8475a_1 | Bin 0 -> 599050 bytes .../80964424468d386e_0 | Bin 0 -> 8721 bytes .../81239d884ff0198c_0 | Bin 0 -> 12637 bytes .../82c172ad62fcff12_0 | Bin 0 -> 13319 bytes .../82cd4906ebd5eda2_0 | Bin 0 -> 1467 bytes .../82cd4906ebd5eda2_1 | Bin 0 -> 1493 bytes .../85afbe1d3465d2b6_0 | Bin 0 -> 18079 bytes .../87905c5b9ee6aea7_0 | Bin 0 -> 14391 bytes .../8903773b5330f7f4_0 | Bin 0 -> 94199 bytes .../89fdf6af2ee22665_0 | Bin 0 -> 264985 bytes .../89fdf6af2ee22665_1 | Bin 0 -> 498794 bytes .../8f8d5ea1a6537911_0 | Bin 0 -> 19771 bytes .../92fbdd92777f6b03_0 | Bin 0 -> 25635 bytes .../9ccc0d4c8548277a_0 | Bin 0 -> 253727 bytes .../9ccc0d4c8548277a_1 | Bin 0 -> 478898 bytes .../9de6a296704ffb84_0 | Bin 0 -> 20713 bytes .../a06fd660d3686847_0 | Bin 0 -> 16001 bytes .../a1f408b6e9cc2afe_0 | Bin 0 -> 45038 bytes .../a1f408b6e9cc2afe_1 | Bin 0 -> 105565 bytes .../a38476965a399589_0 | Bin 0 -> 71272 bytes .../a3eb2d13577642c0_0 | Bin 0 -> 1242 bytes .../a3eb2d13577642c0_1 | Bin 0 -> 845 bytes .../a47ba425ba4a9207_0 | Bin 0 -> 27371 bytes .../a8e751993ee89590_0 | Bin 0 -> 24213 bytes .../a95ded1ccf36dcef_0 | Bin 0 -> 86662 bytes .../a95ded1ccf36dcef_1 | Bin 0 -> 193930 bytes .../a99e87a1d8278b61_0 | Bin 0 -> 9590 bytes .../a99e87a1d8278b61_1 | Bin 0 -> 24412 bytes .../a9da1b65d3925796_0 | Bin 0 -> 1346 bytes .../a9da1b65d3925796_1 | Bin 0 -> 1336 bytes .../aba95e10ccf24d9c_0 | Bin 0 -> 3846 bytes .../aba95e10ccf24d9c_1 | Bin 0 -> 7149 bytes .../acdcb6b786a00cef_0 | Bin 0 -> 1267 bytes .../acdcb6b786a00cef_1 | Bin 0 -> 676 bytes .../ad7c8a325829963d_0 | Bin 0 -> 1312 bytes .../ad7c8a325829963d_1 | Bin 0 -> 1306 bytes .../ae7b24b5d89bf5d0_0 | Bin 0 -> 1407 bytes .../ae7b24b5d89bf5d0_1 | Bin 0 -> 1788 bytes .../b40d800f05cc7a96_0 | Bin 0 -> 3952 bytes .../b40d800f05cc7a96_1 | Bin 0 -> 8286 bytes .../b64d9747bc383caf_0 | Bin 0 -> 10245 bytes .../b64d9747bc383caf_1 | Bin 0 -> 8830 bytes .../b8cee710e3f6e98c_0 | Bin 0 -> 7286 bytes .../bad2f2a7534db05c_0 | Bin 0 -> 20569 bytes .../bc481626a1ef2420_0 | Bin 0 -> 30399 bytes .../bd210b1797761354_0 | Bin 0 -> 13071 bytes .../bd210b1797761354_1 | Bin 0 -> 27669 bytes .../be387f44b985c952_0 | Bin 0 -> 17499 bytes .../c0018e5fd591a1e0_0 | Bin 0 -> 174203 bytes .../c0018e5fd591a1e0_1 | Bin 0 -> 290354 bytes .../c2c13505b0b61977_0 | Bin 0 -> 34103 bytes .../c8ea23886d8cd93e_0 | Bin 0 -> 15221 bytes .../c955de13c32587de_0 | Bin 0 -> 7078 bytes .../ca131608b6e3d556_0 | Bin 0 -> 32439 bytes .../cb14199d558149cb_0 | Bin 0 -> 17887 bytes .../cb3a9b39482f3e6f_0 | Bin 0 -> 1226 bytes .../cb3a9b39482f3e6f_1 | Bin 0 -> 845 bytes .../cec40fe06223ffd3_0 | Bin 0 -> 20775 bytes .../d19b2a59c701a3a2_0 | Bin 0 -> 29167 bytes .../d45d23271b9fde02_0 | Bin 0 -> 109844 bytes .../d45d23271b9fde02_1 | Bin 0 -> 196933 bytes .../d4f2d77b98baddfb_0 | Bin 0 -> 13425 bytes .../d9a194d076f4af72_0 | Bin 0 -> 11965 bytes .../e17034bf986fe4a3_0 | Bin 0 -> 52461 bytes .../e1910354c99b1c01_0 | Bin 0 -> 11683 bytes .../e2cac9081a306121_0 | Bin 0 -> 8828 bytes .../e47d3c110a9907d5_0 | Bin 0 -> 12423 bytes .../e89271bd968c1b47_0 | Bin 0 -> 6566 bytes .../e9f22c100d18f5b6_0 | Bin 0 -> 7588 bytes .../ed9590e449ea0c3e_0 | Bin 0 -> 26419 bytes .../f1a95df9104e907b_0 | Bin 0 -> 20511 bytes .../f337c1ecab661205_0 | Bin 0 -> 126770 bytes .../f337c1ecab661205_1 | Bin 0 -> 356954 bytes .../f349693c28b74bea_0 | Bin 0 -> 6302 bytes .../f59a421f9c227f1f_0 | Bin 0 -> 44825 bytes .../f59a421f9c227f1f_1 | Bin 0 -> 127365 bytes .../f8366850a5a94fb3_0 | Bin 0 -> 376991 bytes .../f8366850a5a94fb3_1 | Bin 0 -> 989130 bytes .../f8e776ad01429482_0 | Bin 0 -> 8022 bytes .../f9e9a4904919eda8_0 | Bin 0 -> 30997 bytes .../c805c447-65eb-4963-b76b-7f9f51d54ba8/index | Bin 0 -> 24 bytes .../index-dir/the-real-index | Bin 0 -> 3000 bytes .../2bf5aec11725b9a2_0 | Bin 0 -> 12535 bytes .../d7b2c210-d890-4eb6-8b3b-d7292b78600b/index | Bin 0 -> 24 bytes .../index-dir/the-real-index | Bin 0 -> 72 bytes .../index.txt | Bin 0 -> 325 bytes .../Default/Service Worker/Database/000007.log | Bin 0 -> 294611 bytes .../Default/Service Worker/Database/000009.ldb | Bin 0 -> 24166 bytes .../Default/Service Worker/Database/CURRENT | 1 + .../Default/Service Worker/Database/LOCK | 0 .../Default/Service Worker/Database/LOG | 3 + .../Default/Service Worker/Database/LOG.old | 3 + .../Service Worker/Database/MANIFEST-000001 | Bin 0 -> 281 bytes .../Service Worker/ScriptCache/013888a1cda32b90_0 | Bin 0 -> 33249 bytes .../Service Worker/ScriptCache/013888a1cda32b90_1 | Bin 0 -> 35793 bytes .../Service Worker/ScriptCache/013c368bb699d56f_0 | Bin 0 -> 1813 bytes .../Service Worker/ScriptCache/044af04d79c148c3_0 | Bin 0 -> 9615 bytes .../Service Worker/ScriptCache/058316883d2f7b71_0 | Bin 0 -> 106502 bytes .../Service Worker/ScriptCache/058316883d2f7b71_1 | Bin 0 -> 280243 bytes .../Service Worker/ScriptCache/06940ca2418e5f06_0 | Bin 0 -> 2964 bytes .../Service Worker/ScriptCache/06940ca2418e5f06_1 | Bin 0 -> 4891 bytes .../Service Worker/ScriptCache/08b99d499107ba17_0 | Bin 0 -> 6218 bytes .../Service Worker/ScriptCache/08b99d499107ba17_1 | Bin 0 -> 6906 bytes .../Service Worker/ScriptCache/0ae129c33e7a30bd_0 | Bin 0 -> 11263 bytes .../Service Worker/ScriptCache/0ae129c33e7a30bd_1 | Bin 0 -> 18482 bytes .../Service Worker/ScriptCache/0c44624093b66f53_0 | Bin 0 -> 15621 bytes .../Service Worker/ScriptCache/0c44624093b66f53_1 | Bin 0 -> 47723 bytes .../Service Worker/ScriptCache/0caade6fa2d8bf23_0 | Bin 0 -> 33252 bytes .../Service Worker/ScriptCache/0caade6fa2d8bf23_1 | Bin 0 -> 35796 bytes .../Service Worker/ScriptCache/0cf3f179800b4457_0 | Bin 0 -> 2124 bytes .../Service Worker/ScriptCache/0da13b1c038160d5_0 | Bin 0 -> 4241 bytes .../Service Worker/ScriptCache/0da13b1c038160d5_1 | Bin 0 -> 4956 bytes .../Service Worker/ScriptCache/102500d27cb32586_0 | Bin 0 -> 1847 bytes .../Service Worker/ScriptCache/1182effa8ada5d43_0 | Bin 0 -> 1600 bytes .../Service Worker/ScriptCache/1306f5f30c73c0b3_0 | Bin 0 -> 5852 bytes .../Service Worker/ScriptCache/1306f5f30c73c0b3_1 | Bin 0 -> 8531 bytes .../Service Worker/ScriptCache/133ea22e2bddfb76_0 | Bin 0 -> 1344 bytes .../Service Worker/ScriptCache/135d7a5f7d09ad8d_0 | Bin 0 -> 966 bytes .../Service Worker/ScriptCache/1519277bde6e6fcc_0 | Bin 0 -> 4981 bytes .../Service Worker/ScriptCache/156dd7d6254da5d0_0 | Bin 0 -> 16824 bytes .../Service Worker/ScriptCache/156dd7d6254da5d0_1 | Bin 0 -> 11956 bytes .../Service Worker/ScriptCache/1837eff123ca8ac2_0 | Bin 0 -> 1787 bytes .../Service Worker/ScriptCache/18a1561446ac93fd_0 | Bin 0 -> 8528 bytes .../Service Worker/ScriptCache/18a1561446ac93fd_1 | Bin 0 -> 5988 bytes .../Service Worker/ScriptCache/18f9d5c11737329d_0 | Bin 0 -> 3142 bytes .../Service Worker/ScriptCache/1b02c078a626147f_0 | Bin 0 -> 1409 bytes .../Service Worker/ScriptCache/1b7188623db21aac_0 | Bin 0 -> 917 bytes .../Service Worker/ScriptCache/1cd36d092513b214_0 | Bin 0 -> 17572 bytes .../Service Worker/ScriptCache/1cd36d092513b214_1 | Bin 0 -> 14988 bytes .../Service Worker/ScriptCache/1e16eb87c66b3350_0 | Bin 0 -> 5990 bytes .../Service Worker/ScriptCache/1e16eb87c66b3350_1 | Bin 0 -> 13395 bytes .../Service Worker/ScriptCache/1eb3a60cf0b1da7e_0 | Bin 0 -> 4790 bytes .../Service Worker/ScriptCache/218b8a4c9ede14e1_0 | Bin 0 -> 3464 bytes .../Service Worker/ScriptCache/23469ac906fcc612_0 | Bin 0 -> 15620 bytes .../Service Worker/ScriptCache/23469ac906fcc612_1 | Bin 0 -> 47722 bytes .../Service Worker/ScriptCache/2379a50f1c0e50dd_0 | Bin 0 -> 6559 bytes .../Service Worker/ScriptCache/24c9909851fc5926_0 | Bin 0 -> 8465 bytes .../Service Worker/ScriptCache/251821f6166076c1_0 | Bin 0 -> 1377 bytes .../Service Worker/ScriptCache/251821f6166076c1_1 | Bin 0 -> 1692 bytes .../Service Worker/ScriptCache/262d13b3e17ceba1_0 | Bin 0 -> 745 bytes .../Service Worker/ScriptCache/26668990994d0f6b_0 | Bin 0 -> 18214 bytes .../Service Worker/ScriptCache/2853a1a255877bcc_0 | Bin 0 -> 2233 bytes .../Service Worker/ScriptCache/297ecea5cebb5dfe_0 | Bin 0 -> 4238 bytes .../Service Worker/ScriptCache/297ecea5cebb5dfe_1 | Bin 0 -> 4953 bytes .../Service Worker/ScriptCache/2a069ed0a4ed1071_0 | Bin 0 -> 5695 bytes .../Service Worker/ScriptCache/2a0afd649b00527b_0 | Bin 0 -> 15265 bytes .../Service Worker/ScriptCache/2a0afd649b00527b_1 | Bin 0 -> 20274 bytes .../Service Worker/ScriptCache/2a517dc2cdf7e28c_0 | Bin 0 -> 8596 bytes .../Service Worker/ScriptCache/2a9ed1164ac67a36_0 | Bin 0 -> 5059 bytes .../Service Worker/ScriptCache/2b8d5c4c22ca4073_0 | Bin 0 -> 1073 bytes .../Service Worker/ScriptCache/2cc80dabc69f58b6_0 | Bin 0 -> 2287 bytes .../Service Worker/ScriptCache/2ddf14d3ae0c5805_0 | Bin 0 -> 29134 bytes .../Service Worker/ScriptCache/2ed4c1475f68895f_0 | Bin 0 -> 15597 bytes .../Service Worker/ScriptCache/2ed4c1475f68895f_1 | Bin 0 -> 21684 bytes .../Service Worker/ScriptCache/3141fac51b5d083a_0 | Bin 0 -> 4957 bytes .../Service Worker/ScriptCache/3304de7a95b9153f_0 | Bin 0 -> 720 bytes .../Service Worker/ScriptCache/3382c1aeee847b7c_0 | Bin 0 -> 1327 bytes .../Service Worker/ScriptCache/36178b75a421e259_0 | Bin 0 -> 2555 bytes .../Service Worker/ScriptCache/37ba206b0e1633f3_0 | Bin 0 -> 528261 bytes .../Service Worker/ScriptCache/37ba206b0e1633f3_1 | Bin 0 -> 715395 bytes .../Service Worker/ScriptCache/3833d80714f52830_0 | Bin 0 -> 877 bytes .../Service Worker/ScriptCache/385b1e42bf04aac1_0 | Bin 0 -> 7697 bytes .../Service Worker/ScriptCache/385b1e42bf04aac1_1 | Bin 0 -> 5355 bytes .../Service Worker/ScriptCache/38ec7f73738fd2c6_0 | Bin 0 -> 115894 bytes .../Service Worker/ScriptCache/38ec7f73738fd2c6_1 | Bin 0 -> 282932 bytes .../Service Worker/ScriptCache/3993e359829516e8_0 | Bin 0 -> 862 bytes .../Service Worker/ScriptCache/3bc9470215d17382_0 | Bin 0 -> 923 bytes .../Service Worker/ScriptCache/3c6f2beab5d0ce26_0 | Bin 0 -> 2904 bytes .../Service Worker/ScriptCache/3c927e1978087ebb_0 | Bin 0 -> 23593 bytes .../Service Worker/ScriptCache/3c927e1978087ebb_1 | Bin 0 -> 73660 bytes .../Service Worker/ScriptCache/3e125fa608da7bad_0 | Bin 0 -> 2671 bytes .../Service Worker/ScriptCache/3e3f9622d382869d_0 | Bin 0 -> 1730 bytes .../Service Worker/ScriptCache/41e788d966e1d2b1_0 | Bin 0 -> 8649 bytes .../Service Worker/ScriptCache/41e8252939530d43_0 | Bin 0 -> 5022 bytes .../Service Worker/ScriptCache/41f6befdd9fcc98c_0 | Bin 0 -> 1051 bytes .../Service Worker/ScriptCache/4370832a070f5278_0 | Bin 0 -> 6610 bytes .../Service Worker/ScriptCache/4370832a070f5278_1 | Bin 0 -> 6988 bytes .../Service Worker/ScriptCache/4380d6a2dda10611_0 | Bin 0 -> 3916 bytes .../Service Worker/ScriptCache/4380d6a2dda10611_1 | Bin 0 -> 4651 bytes .../Service Worker/ScriptCache/442d051c77d2449e_0 | Bin 0 -> 28022 bytes .../Service Worker/ScriptCache/442d051c77d2449e_1 | Bin 0 -> 60435 bytes .../Service Worker/ScriptCache/44432df713ea1c72_0 | Bin 0 -> 1640 bytes .../Service Worker/ScriptCache/44aed90cfbcd8d61_0 | Bin 0 -> 2575 bytes .../Service Worker/ScriptCache/4577271cd6fb65a1_0 | Bin 0 -> 266104 bytes .../Service Worker/ScriptCache/4577271cd6fb65a1_1 | Bin 0 -> 277523 bytes .../Service Worker/ScriptCache/45b6179ac51ed29f_0 | Bin 0 -> 739 bytes .../Service Worker/ScriptCache/45c2f2fcb9072b47_0 | Bin 0 -> 5851 bytes .../Service Worker/ScriptCache/45c2f2fcb9072b47_1 | Bin 0 -> 8578 bytes .../Service Worker/ScriptCache/4698ecea4d4dad56_0 | Bin 0 -> 343694 bytes .../Service Worker/ScriptCache/4698ecea4d4dad56_1 | Bin 0 -> 708059 bytes .../Service Worker/ScriptCache/47a019969919f990_0 | Bin 0 -> 852 bytes .../Service Worker/ScriptCache/48aa8aea80d750f3_0 | Bin 0 -> 2489 bytes .../Service Worker/ScriptCache/48c4922ed6998d89_0 | Bin 0 -> 9690 bytes .../Service Worker/ScriptCache/48ce8f1371d5128c_0 | Bin 0 -> 5300 bytes .../Service Worker/ScriptCache/48ce8f1371d5128c_1 | Bin 0 -> 5780 bytes .../Service Worker/ScriptCache/49c299409541c61c_0 | Bin 0 -> 7112 bytes .../Service Worker/ScriptCache/49c299409541c61c_1 | Bin 0 -> 16235 bytes .../Service Worker/ScriptCache/49cfac9a80742bc0_0 | Bin 0 -> 6060 bytes .../Service Worker/ScriptCache/49cfac9a80742bc0_1 | Bin 0 -> 4507 bytes .../Service Worker/ScriptCache/4b8a113942c539ab_0 | Bin 0 -> 10653 bytes .../Service Worker/ScriptCache/4b8a113942c539ab_1 | Bin 0 -> 19524 bytes .../Service Worker/ScriptCache/4cb013792b196a35_0 | Bin 0 -> 10462 bytes .../Service Worker/ScriptCache/4cb013792b196a35_1 | Bin 0 -> 20417 bytes .../Service Worker/ScriptCache/4dfa3ff2fb787575_0 | Bin 0 -> 1880 bytes .../Service Worker/ScriptCache/50ea35dd219cf76e_0 | Bin 0 -> 706 bytes .../Service Worker/ScriptCache/5219fc78e566a322_0 | Bin 0 -> 1389 bytes .../Service Worker/ScriptCache/5225b9a2d2e15e1b_0 | Bin 0 -> 1301 bytes .../Service Worker/ScriptCache/57991272965254a5_0 | Bin 0 -> 3483 bytes .../Service Worker/ScriptCache/57991272965254a5_1 | Bin 0 -> 4524 bytes .../Service Worker/ScriptCache/59075d360e8ed9ea_0 | Bin 0 -> 7019 bytes .../Service Worker/ScriptCache/59075d360e8ed9ea_1 | Bin 0 -> 9292 bytes .../Service Worker/ScriptCache/5bc80cbabea43230_0 | Bin 0 -> 14852 bytes .../Service Worker/ScriptCache/5eb8846211eed115_0 | Bin 0 -> 1797 bytes .../Service Worker/ScriptCache/5ff352a104083529_0 | Bin 0 -> 876 bytes .../Service Worker/ScriptCache/60208d9987ff8fb0_0 | Bin 0 -> 10465 bytes .../Service Worker/ScriptCache/60208d9987ff8fb0_1 | Bin 0 -> 20420 bytes .../Service Worker/ScriptCache/61776f09435f6376_0 | Bin 0 -> 1838 bytes .../Service Worker/ScriptCache/618cf8002a861737_0 | Bin 0 -> 7917 bytes .../Service Worker/ScriptCache/61a7051dfbbcebbe_0 | Bin 0 -> 782 bytes .../Service Worker/ScriptCache/61f9776f3858baff_0 | Bin 0 -> 196896 bytes .../Service Worker/ScriptCache/61f9776f3858baff_1 | Bin 0 -> 509132 bytes .../Service Worker/ScriptCache/637002b0fd0607b7_0 | Bin 0 -> 13100 bytes .../Service Worker/ScriptCache/639d390b781e80ba_0 | Bin 0 -> 1230 bytes .../Service Worker/ScriptCache/63a0df86fcaca4f0_0 | Bin 0 -> 1307 bytes .../Service Worker/ScriptCache/65490edda5ace1d4_0 | Bin 0 -> 8106 bytes .../Service Worker/ScriptCache/65f57298359ce817_0 | Bin 0 -> 1326 bytes .../Service Worker/ScriptCache/665a1c6935535837_0 | Bin 0 -> 3862 bytes .../Service Worker/ScriptCache/665a1c6935535837_1 | Bin 0 -> 6380 bytes .../Service Worker/ScriptCache/66e98b5df3810dc6_0 | Bin 0 -> 1477 bytes .../Service Worker/ScriptCache/67a473248953641b_0 | Bin 0 -> 18805 bytes .../Service Worker/ScriptCache/67a473248953641b_1 | Bin 0 -> 39081 bytes .../Service Worker/ScriptCache/6c038e3570d6abf1_0 | Bin 0 -> 5851 bytes .../Service Worker/ScriptCache/6c038e3570d6abf1_1 | Bin 0 -> 8578 bytes .../Service Worker/ScriptCache/6f14b1eea746d0f6_0 | Bin 0 -> 5528 bytes .../Service Worker/ScriptCache/6f8ac775dbbd7415_0 | Bin 0 -> 15620 bytes .../Service Worker/ScriptCache/6f8ac775dbbd7415_1 | Bin 0 -> 47906 bytes .../Service Worker/ScriptCache/6f95edaef805d54f_0 | Bin 0 -> 1519 bytes .../Service Worker/ScriptCache/707c04bd94e53f60_0 | Bin 0 -> 920 bytes .../Service Worker/ScriptCache/7279dabb794b7bae_0 | Bin 0 -> 14252 bytes .../Service Worker/ScriptCache/7279dabb794b7bae_1 | Bin 0 -> 33595 bytes .../Service Worker/ScriptCache/736704c0a29ba0bd_0 | Bin 0 -> 8816 bytes .../Service Worker/ScriptCache/736704c0a29ba0bd_1 | Bin 0 -> 2460 bytes .../Service Worker/ScriptCache/75e158edced18ccc_0 | Bin 0 -> 2179 bytes .../Service Worker/ScriptCache/7786daf1823b575f_0 | Bin 0 -> 512 bytes .../Service Worker/ScriptCache/77d633a988788881_0 | Bin 0 -> 3732 bytes .../Service Worker/ScriptCache/77d633a988788881_1 | Bin 0 -> 8140 bytes .../Service Worker/ScriptCache/7911bddc8bea7af4_0 | Bin 0 -> 1715 bytes .../Service Worker/ScriptCache/7aa3cc8cc182ec3a_0 | Bin 0 -> 115898 bytes .../Service Worker/ScriptCache/7aa3cc8cc182ec3a_1 | Bin 0 -> 282948 bytes .../Service Worker/ScriptCache/7b4fd8111178d5b1_0 | Bin 0 -> 3481 bytes .../Service Worker/ScriptCache/7b4fd8111178d5b1_1 | Bin 0 -> 4522 bytes .../Service Worker/ScriptCache/800dc39137124ad7_0 | Bin 0 -> 831 bytes .../Service Worker/ScriptCache/8028206cd4382304_0 | Bin 0 -> 2734 bytes .../Service Worker/ScriptCache/80a7e74d1ee47371_0 | Bin 0 -> 2925 bytes .../Service Worker/ScriptCache/82d24e583257c1c5_0 | Bin 0 -> 2507 bytes .../Service Worker/ScriptCache/8459336f6f977b26_0 | Bin 0 -> 34831 bytes .../Service Worker/ScriptCache/846b510cc1d358ab_0 | Bin 0 -> 16288 bytes .../Service Worker/ScriptCache/846b510cc1d358ab_1 | Bin 0 -> 14100 bytes .../Service Worker/ScriptCache/847183a1bce65cbf_0 | Bin 0 -> 12784 bytes .../Service Worker/ScriptCache/861d3746da596b9a_0 | Bin 0 -> 646 bytes .../Service Worker/ScriptCache/865231c3208b5685_0 | Bin 0 -> 18693 bytes .../Service Worker/ScriptCache/865231c3208b5685_1 | Bin 0 -> 9604 bytes .../Service Worker/ScriptCache/873e9f02dffd15b6_0 | Bin 0 -> 3376 bytes .../Service Worker/ScriptCache/88982711b7d82f98_0 | Bin 0 -> 2964 bytes .../Service Worker/ScriptCache/88982711b7d82f98_1 | Bin 0 -> 4891 bytes .../Service Worker/ScriptCache/8971dc0438cf7b2a_0 | Bin 0 -> 16296 bytes .../Service Worker/ScriptCache/8971dc0438cf7b2a_1 | Bin 0 -> 19468 bytes .../Service Worker/ScriptCache/8b239658a7e04d63_0 | Bin 0 -> 1061 bytes .../Service Worker/ScriptCache/8b30f5d03f19b568_0 | Bin 0 -> 127144 bytes .../Service Worker/ScriptCache/8b30f5d03f19b568_1 | Bin 0 -> 159667 bytes .../Service Worker/ScriptCache/8f26a0435b41626a_0 | Bin 0 -> 2138 bytes .../Service Worker/ScriptCache/937b79c00dbacc65_0 | Bin 0 -> 12147 bytes .../Service Worker/ScriptCache/937b79c00dbacc65_1 | Bin 0 -> 10380 bytes .../Service Worker/ScriptCache/93b5bc142742612c_0 | Bin 0 -> 820 bytes .../Service Worker/ScriptCache/93e5ba12e112ee93_0 | Bin 0 -> 1698 bytes .../Service Worker/ScriptCache/93e5ba12e112ee93_1 | Bin 0 -> 3420 bytes .../Service Worker/ScriptCache/968ee480c8880ee9_0 | Bin 0 -> 22321 bytes .../Service Worker/ScriptCache/968ee480c8880ee9_1 | Bin 0 -> 69460 bytes .../Service Worker/ScriptCache/97cb728504835ecb_0 | Bin 0 -> 2808 bytes .../Service Worker/ScriptCache/98e1039cb5a6108c_0 | Bin 0 -> 486 bytes .../Service Worker/ScriptCache/9a167328c6f2005d_0 | Bin 0 -> 6967 bytes .../Service Worker/ScriptCache/9a167328c6f2005d_1 | Bin 0 -> 12923 bytes .../Service Worker/ScriptCache/9cedebd2aa2a8bfe_0 | Bin 0 -> 754 bytes .../Service Worker/ScriptCache/9cfaf0ec6926b991_0 | Bin 0 -> 1299 bytes .../Service Worker/ScriptCache/a0650cda674494c6_0 | Bin 0 -> 641 bytes .../Service Worker/ScriptCache/a2c521dd01eb7b29_0 | Bin 0 -> 927 bytes .../Service Worker/ScriptCache/a2e0dddeb7e07def_0 | Bin 0 -> 6967 bytes .../Service Worker/ScriptCache/a2e0dddeb7e07def_1 | Bin 0 -> 12923 bytes .../Service Worker/ScriptCache/a488f7c1117c460d_0 | Bin 0 -> 918 bytes .../Service Worker/ScriptCache/a8d410c09eb9cf3f_0 | Bin 0 -> 4522 bytes .../Service Worker/ScriptCache/a8d410c09eb9cf3f_1 | Bin 0 -> 11395 bytes .../Service Worker/ScriptCache/a9654014163cf1c9_0 | Bin 0 -> 512 bytes .../Service Worker/ScriptCache/a9b253918c822073_0 | Bin 0 -> 4017 bytes .../Service Worker/ScriptCache/a9b253918c822073_1 | Bin 0 -> 10427 bytes .../Service Worker/ScriptCache/ad2345239280bb7d_0 | Bin 0 -> 2630 bytes .../Service Worker/ScriptCache/ad2345239280bb7d_1 | Bin 0 -> 2500 bytes .../Service Worker/ScriptCache/af55a8299c730493_0 | Bin 0 -> 1538 bytes .../Service Worker/ScriptCache/b09a5c3ec15d02fe_0 | Bin 0 -> 1514 bytes .../Service Worker/ScriptCache/b09b50d0915775fa_0 | Bin 0 -> 2504 bytes .../Service Worker/ScriptCache/b09b50d0915775fa_1 | Bin 0 -> 3651 bytes .../Service Worker/ScriptCache/b0d982546e6fd609_0 | Bin 0 -> 878 bytes .../Service Worker/ScriptCache/b30f9f370e7094d0_0 | Bin 0 -> 22237 bytes .../Service Worker/ScriptCache/b30f9f370e7094d0_1 | Bin 0 -> 31643 bytes .../Service Worker/ScriptCache/b3bd0d67f800d222_0 | Bin 0 -> 16513 bytes .../Service Worker/ScriptCache/b3bd0d67f800d222_1 | Bin 0 -> 11298 bytes .../Service Worker/ScriptCache/b3e65c650ab5942a_0 | Bin 0 -> 3507 bytes .../Service Worker/ScriptCache/b6c28cea6ed9dfc1_0 | Bin 0 -> 16293 bytes .../Service Worker/ScriptCache/b6c28cea6ed9dfc1_1 | Bin 0 -> 19465 bytes .../Service Worker/ScriptCache/b93974c97934366d_0 | Bin 0 -> 599 bytes .../Service Worker/ScriptCache/ba23d8ecda68de77_0 | Bin 0 -> 12144 bytes .../Service Worker/ScriptCache/ba23d8ecda68de77_1 | Bin 0 -> 10377 bytes .../Service Worker/ScriptCache/bdbe39f12b00f185_0 | Bin 0 -> 6227 bytes .../Service Worker/ScriptCache/be27c224b9670b51_0 | Bin 0 -> 4675 bytes .../Service Worker/ScriptCache/be27c224b9670b51_1 | Bin 0 -> 7220 bytes .../Service Worker/ScriptCache/c13416c921dc154c_0 | Bin 0 -> 242324 bytes .../Service Worker/ScriptCache/c1ab05be02305eff_0 | Bin 0 -> 9679 bytes .../Service Worker/ScriptCache/c1ab05be02305eff_1 | Bin 0 -> 10028 bytes .../Service Worker/ScriptCache/c2492db79fbf160c_0 | Bin 0 -> 11265 bytes .../Service Worker/ScriptCache/c2492db79fbf160c_1 | Bin 0 -> 18484 bytes .../Service Worker/ScriptCache/c3f9ec8c3e713cc5_0 | Bin 0 -> 17750 bytes .../Service Worker/ScriptCache/c3f9ec8c3e713cc5_1 | Bin 0 -> 13372 bytes .../Service Worker/ScriptCache/c5a4cfa87c7c50b5_0 | Bin 0 -> 1849 bytes .../Service Worker/ScriptCache/c5d06df2762160e6_0 | Bin 0 -> 979 bytes .../Service Worker/ScriptCache/c60ff07b0bc639c4_0 | Bin 0 -> 3916 bytes .../Service Worker/ScriptCache/c60ff07b0bc639c4_1 | Bin 0 -> 4651 bytes .../Service Worker/ScriptCache/c973a21200a54441_0 | Bin 0 -> 15267 bytes .../Service Worker/ScriptCache/c973a21200a54441_1 | Bin 0 -> 20276 bytes .../Service Worker/ScriptCache/c97f65652744cac9_0 | Bin 0 -> 7006 bytes .../Service Worker/ScriptCache/c97f65652744cac9_1 | Bin 0 -> 23787 bytes .../Service Worker/ScriptCache/cea5e6b4823220b0_0 | Bin 0 -> 1336 bytes .../Service Worker/ScriptCache/d0757ff92c7cde0a_0 | Bin 0 -> 1374 bytes .../Service Worker/ScriptCache/d0757ff92c7cde0a_1 | Bin 0 -> 1689 bytes .../Service Worker/ScriptCache/d1c5a6f87b5d4042_0 | Bin 0 -> 8969 bytes .../Service Worker/ScriptCache/d1c5a6f87b5d4042_1 | Bin 0 -> 1675 bytes .../Service Worker/ScriptCache/d2198e059a41357f_0 | Bin 0 -> 11087 bytes .../Service Worker/ScriptCache/d36fc470bdd7f429_0 | Bin 0 -> 1189 bytes .../Service Worker/ScriptCache/d65585c00d45a9d6_0 | Bin 0 -> 2059 bytes .../Service Worker/ScriptCache/d6b591bec2d594eb_0 | Bin 0 -> 3916 bytes .../Service Worker/ScriptCache/d6b591bec2d594eb_1 | Bin 0 -> 4651 bytes .../Service Worker/ScriptCache/da27569d3d1a7cdd_0 | Bin 0 -> 6967 bytes .../Service Worker/ScriptCache/da27569d3d1a7cdd_1 | Bin 0 -> 12923 bytes .../Service Worker/ScriptCache/da87291b30ec3507_0 | Bin 0 -> 2128 bytes .../Service Worker/ScriptCache/daadf5d778c3fc98_0 | Bin 0 -> 180618 bytes .../Service Worker/ScriptCache/daadf5d778c3fc98_1 | Bin 0 -> 320491 bytes .../Service Worker/ScriptCache/dc8bb2c9e691ca89_0 | Bin 0 -> 7082 bytes .../Service Worker/ScriptCache/dc94ed7d050cb174_0 | Bin 0 -> 2242 bytes .../Service Worker/ScriptCache/dcfd308173202e57_0 | Bin 0 -> 16999 bytes .../Service Worker/ScriptCache/dcfd308173202e57_1 | Bin 0 -> 24019 bytes .../Service Worker/ScriptCache/deb216933b22f3a2_0 | Bin 0 -> 2055 bytes .../Service Worker/ScriptCache/df442983f76b6c89_0 | Bin 0 -> 2742 bytes .../Service Worker/ScriptCache/df442983f76b6c89_1 | Bin 0 -> 3244 bytes .../Service Worker/ScriptCache/e0d37c7e54672663_0 | Bin 0 -> 196463 bytes .../Service Worker/ScriptCache/e0d37c7e54672663_1 | Bin 0 -> 507530 bytes .../Service Worker/ScriptCache/e15adf968423321d_0 | Bin 0 -> 843 bytes .../Service Worker/ScriptCache/e37b8c477f6fe7a9_0 | Bin 0 -> 721 bytes .../Service Worker/ScriptCache/e3979a9d78d5c89b_0 | Bin 0 -> 8711 bytes .../Service Worker/ScriptCache/e3979a9d78d5c89b_1 | Bin 0 -> 14796 bytes .../Service Worker/ScriptCache/e460f9049ee39b22_0 | Bin 0 -> 1127 bytes .../Service Worker/ScriptCache/e6f09094666ade67_0 | Bin 0 -> 1126 bytes .../Service Worker/ScriptCache/e77053106e8f6f41_0 | Bin 0 -> 853 bytes .../Service Worker/ScriptCache/e7726bec88acbf74_0 | Bin 0 -> 721 bytes .../Service Worker/ScriptCache/e7ba459eae573b73_0 | Bin 0 -> 2964 bytes .../Service Worker/ScriptCache/e7ba459eae573b73_1 | Bin 0 -> 4891 bytes .../Service Worker/ScriptCache/e873ff2e7f852ba0_0 | Bin 0 -> 6006 bytes .../Service Worker/ScriptCache/e91a0f790c9df598_0 | Bin 0 -> 1759 bytes .../Service Worker/ScriptCache/e99eef6b57f9df36_0 | Bin 0 -> 784 bytes .../Service Worker/ScriptCache/ed17bb8e4740c3e9_0 | Bin 0 -> 1558 bytes .../Service Worker/ScriptCache/ed17bb8e4740c3e9_1 | Bin 0 -> 3764 bytes .../Service Worker/ScriptCache/f0fcc6432fd8ca09_0 | Bin 0 -> 8482 bytes .../Service Worker/ScriptCache/f116add86d0557b9_0 | Bin 0 -> 511 bytes .../Service Worker/ScriptCache/f1216cf7d8c3ccde_0 | Bin 0 -> 6220 bytes .../Service Worker/ScriptCache/f1216cf7d8c3ccde_1 | Bin 0 -> 6908 bytes .../Service Worker/ScriptCache/f1cdccba37924bda_0 | Bin 0 -> 7016 bytes .../Service Worker/ScriptCache/f1cdccba37924bda_1 | Bin 0 -> 9289 bytes .../Service Worker/ScriptCache/f214e160a00f6106_0 | Bin 0 -> 754 bytes .../Service Worker/ScriptCache/f272a321bf472b2a_0 | Bin 0 -> 5374 bytes .../Service Worker/ScriptCache/f272a321bf472b2a_1 | Bin 0 -> 14731 bytes .../Service Worker/ScriptCache/f3ab1e1292e135fa_0 | Bin 0 -> 4673 bytes .../Service Worker/ScriptCache/f3ab1e1292e135fa_1 | Bin 0 -> 7218 bytes .../Service Worker/ScriptCache/f54ae869079af26d_0 | Bin 0 -> 1000 bytes .../Service Worker/ScriptCache/f8306af1c2f7efd3_0 | Bin 0 -> 3127 bytes .../Service Worker/ScriptCache/f8849e5234771dfc_0 | Bin 0 -> 18808 bytes .../Service Worker/ScriptCache/f8849e5234771dfc_1 | Bin 0 -> 39084 bytes .../Service Worker/ScriptCache/f8f4f7ce6eb8619a_0 | Bin 0 -> 512 bytes .../Service Worker/ScriptCache/fa813c9ad67834ac_0 | Bin 0 -> 1695 bytes .../Service Worker/ScriptCache/fa813c9ad67834ac_1 | Bin 0 -> 3417 bytes .../Service Worker/ScriptCache/fd04e5d80307ab5a_0 | Bin 0 -> 9504 bytes .../Default/Service Worker/ScriptCache/index | Bin 0 -> 24 bytes .../ScriptCache/index-dir/the-real-index | Bin 0 -> 4992 bytes .../Default/Session Storage/000013.ldb | Bin 0 -> 7898 bytes .../Default/Session Storage/000014.log | Bin 0 -> 21665 bytes .../Default/Session Storage/000015.ldb | Bin 0 -> 567948 bytes .../Default/Session Storage/CURRENT | 1 + .../net.imput.helium/Default/Session Storage/LOCK | 0 .../net.imput.helium/Default/Session Storage/LOG | 3 + .../Default/Session Storage/LOG.old | 17 + .../Default/Session Storage/MANIFEST-000001 | Bin 0 -> 527 bytes .../Default/Sessions/Apps_13429354763444062 | Bin 0 -> 40375 bytes .../Default/Sessions/Session_13429447592291549 | Bin 0 -> 320947 bytes .../Default/Sessions/Session_13429451449494174 | Bin 0 -> 348417 bytes .../Default/Sessions/Session_13429451931588978 | Bin 0 -> 304871 bytes .../Default/Sessions/Tabs_13429437726762262 | Bin 0 -> 586742 bytes .../Default/Sessions/Tabs_13429450809425290 | Bin 0 -> 455094 bytes .../Default/Shared Dictionary/cache/index | Bin 0 -> 24 bytes .../cache/index-dir/the-real-index | Bin 0 -> 48 bytes .../net.imput.helium/Default/Shared Dictionary/db | Bin 0 -> 45056 bytes .../Default/Shared Dictionary/db-journal | 0 .../.config/net.imput.helium/Default/SharedStorage | Bin 0 -> 4096 bytes .../net.imput.helium/Default/SharedStorage-wal | 0 .../.config/net.imput.helium/Default/Shortcuts | Bin 0 -> 110592 bytes .../net.imput.helium/Default/Shortcuts-journal | 0 .../Site Characteristics Database/000003.log | Bin 0 -> 84918 bytes .../Default/Site Characteristics Database/CURRENT | 1 + .../Default/Site Characteristics Database/LOCK | 0 .../Default/Site Characteristics Database/LOG | 3 + .../Default/Site Characteristics Database/LOG.old | 3 + .../Site Characteristics Database/MANIFEST-000001 | Bin 0 -> 41 bytes .../Default/Sync Data/LevelDB/000003.log | Bin 0 -> 83123 bytes .../Default/Sync Data/LevelDB/CURRENT | 1 + .../Default/Sync Data/LevelDB/LOCK | 0 .../net.imput.helium/Default/Sync Data/LevelDB/LOG | 3 + .../Default/Sync Data/LevelDB/LOG.old | 3 + .../Default/Sync Data/LevelDB/MANIFEST-000001 | Bin 0 -> 41 bytes .../dbepggeogbaibhgnhhndojpepiihcmeb/000003.log | Bin 0 -> 188 bytes .../dbepggeogbaibhgnhhndojpepiihcmeb/CURRENT | 1 + .../dbepggeogbaibhgnhhndojpepiihcmeb/LOCK | 0 .../dbepggeogbaibhgnhhndojpepiihcmeb/LOG | 3 + .../dbepggeogbaibhgnhhndojpepiihcmeb/LOG.old | 3 + .../MANIFEST-000001 | Bin 0 -> 41 bytes .../eimadpbcbfnmbkopoojfekhnkhdbieeh/000003.log | Bin 0 -> 6287 bytes .../eimadpbcbfnmbkopoojfekhnkhdbieeh/CURRENT | 1 + .../eimadpbcbfnmbkopoojfekhnkhdbieeh/LOCK | 0 .../eimadpbcbfnmbkopoojfekhnkhdbieeh/LOG | 3 + .../eimadpbcbfnmbkopoojfekhnkhdbieeh/LOG.old | 3 + .../MANIFEST-000001 | Bin 0 -> 41 bytes .../flphhdfbcpebbehnmphjoaoffhgcjafi/000003.log | 0 .../flphhdfbcpebbehnmphjoaoffhgcjafi/CURRENT | 1 + .../flphhdfbcpebbehnmphjoaoffhgcjafi/LOCK | 0 .../flphhdfbcpebbehnmphjoaoffhgcjafi/LOG | 3 + .../flphhdfbcpebbehnmphjoaoffhgcjafi/LOG.old | 3 + .../MANIFEST-000001 | Bin 0 -> 41 bytes .../iadbdpnoknmbdeolbapdackdcogdmjpe/000003.log | Bin 0 -> 1726 bytes .../iadbdpnoknmbdeolbapdackdcogdmjpe/CURRENT | 1 + .../iadbdpnoknmbdeolbapdackdcogdmjpe/LOCK | 0 .../iadbdpnoknmbdeolbapdackdcogdmjpe/LOG | 3 + .../iadbdpnoknmbdeolbapdackdcogdmjpe/LOG.old | 3 + .../MANIFEST-000001 | Bin 0 -> 41 bytes .../nljkibfhlpcnanjgbnlnbjecgicbjkge/000003.log | 0 .../nljkibfhlpcnanjgbnlnbjecgicbjkge/CURRENT | 1 + .../nljkibfhlpcnanjgbnlnbjecgicbjkge/LOCK | 0 .../nljkibfhlpcnanjgbnlnbjecgicbjkge/LOG | 3 + .../nljkibfhlpcnanjgbnlnbjecgicbjkge/LOG.old | 3 + .../MANIFEST-000001 | Bin 0 -> 41 bytes .../oladmjdebphlnjjcnomfhhbfdldiimaf/000003.log | 0 .../oladmjdebphlnjjcnomfhhbfdldiimaf/CURRENT | 1 + .../oladmjdebphlnjjcnomfhhbfdldiimaf/LOCK | 0 .../oladmjdebphlnjjcnomfhhbfdldiimaf/LOG | 2 + .../MANIFEST-000001 | Bin 0 -> 41 bytes .../oldceeleldhonbafppcapldpdifcinji/000003.log | Bin 0 -> 19139 bytes .../oldceeleldhonbafppcapldpdifcinji/CURRENT | 1 + .../oldceeleldhonbafppcapldpdifcinji/LOCK | 0 .../oldceeleldhonbafppcapldpdifcinji/LOG | 3 + .../oldceeleldhonbafppcapldpdifcinji/LOG.old | 3 + .../MANIFEST-000001 | Bin 0 -> 41 bytes .../.config/net.imput.helium/Default/Top Sites | Bin 0 -> 20480 bytes .../net.imput.helium/Default/Top Sites-journal | 0 .../net.imput.helium/Default/TransportSecurity | 1 + .../.config/net.imput.helium/Default/Trust Tokens | Bin 0 -> 36864 bytes .../net.imput.helium/Default/Trust Tokens-journal | 0 .../net.imput.helium/Default/VideoDecodeStats/LOCK | 0 .../net.imput.helium/Default/VideoDecodeStats/LOG | 0 .../Default/VideoDecodeStats/LOG.old | 0 .../Icons Maskable/512.png | Bin 0 -> 32354 bytes .../lfpcbmodcmbhlakniingcipjmnmiefil/Icons/128.png | Bin 0 -> 10369 bytes .../lfpcbmodcmbhlakniingcipjmnmiefil/Icons/192.png | Bin 0 -> 7100 bytes .../lfpcbmodcmbhlakniingcipjmnmiefil/Icons/256.png | Bin 0 -> 21946 bytes .../lfpcbmodcmbhlakniingcipjmnmiefil/Icons/32.png | Bin 0 -> 1553 bytes .../lfpcbmodcmbhlakniingcipjmnmiefil/Icons/48.png | Bin 0 -> 2703 bytes .../lfpcbmodcmbhlakniingcipjmnmiefil/Icons/512.png | Bin 0 -> 32354 bytes .../lfpcbmodcmbhlakniingcipjmnmiefil/Icons/64.png | Bin 0 -> 3824 bytes .../lfpcbmodcmbhlakniingcipjmnmiefil/Icons/96.png | Bin 0 -> 6677 bytes .../Trusted Icons/Icons/128.png | Bin 0 -> 8309 bytes .../Trusted Icons/Icons/256.png | Bin 0 -> 21946 bytes .../Trusted Icons/Icons/32.png | Bin 0 -> 1395 bytes .../Trusted Icons/Icons/48.png | Bin 0 -> 2417 bytes .../Trusted Icons/Icons/512.png | Bin 0 -> 32354 bytes .../Trusted Icons/Icons/64.png | Bin 0 -> 3432 bytes .../Trusted Icons/Icons/96.png | Bin 0 -> 5504 bytes .../.config/net.imput.helium/Default/Web Data | Bin 0 -> 163840 bytes .../net.imput.helium/Default/Web Data-journal | 0 .../Default/WebStorage/11/FileSystem/t/.usage | Bin 0 -> 24 bytes .../Default/WebStorage/11/FileSystem/t/00/00000000 | Bin 0 -> 1 bytes .../WebStorage/11/FileSystem/t/Paths/000003.log | Bin 0 -> 278 bytes .../WebStorage/11/FileSystem/t/Paths/CURRENT | 1 + .../Default/WebStorage/11/FileSystem/t/Paths/LOCK | 0 .../Default/WebStorage/11/FileSystem/t/Paths/LOG | 2 + .../11/FileSystem/t/Paths/MANIFEST-000001 | Bin 0 -> 41 bytes .../2/IndexedDB/indexeddb.leveldb/000004.log | 0 .../2/IndexedDB/indexeddb.leveldb/000005.ldb | Bin 0 -> 9402 bytes .../2/IndexedDB/indexeddb.leveldb/CURRENT | 1 + .../WebStorage/2/IndexedDB/indexeddb.leveldb/LOCK | 0 .../WebStorage/2/IndexedDB/indexeddb.leveldb/LOG | 6 + .../2/IndexedDB/indexeddb.leveldb/MANIFEST-000001 | Bin 0 -> 109 bytes .../Default/WebStorage/32/FileSystem/t/.usage | Bin 0 -> 24 bytes .../Default/WebStorage/32/FileSystem/t/00/00000000 | Bin 0 -> 1 bytes .../Default/WebStorage/32/FileSystem/t/00/00000001 | Bin 0 -> 1 bytes .../WebStorage/32/FileSystem/t/Paths/000003.log | Bin 0 -> 471 bytes .../WebStorage/32/FileSystem/t/Paths/CURRENT | 1 + .../Default/WebStorage/32/FileSystem/t/Paths/LOCK | 0 .../Default/WebStorage/32/FileSystem/t/Paths/LOG | 3 + .../WebStorage/32/FileSystem/t/Paths/LOG.old | 3 + .../32/FileSystem/t/Paths/MANIFEST-000001 | Bin 0 -> 41 bytes .../Default/WebStorage/37/FileSystem/t/.usage | Bin 0 -> 24 bytes .../Default/WebStorage/37/FileSystem/t/00/00000000 | Bin 0 -> 1 bytes .../WebStorage/37/FileSystem/t/Paths/000003.log | Bin 0 -> 278 bytes .../WebStorage/37/FileSystem/t/Paths/CURRENT | 1 + .../Default/WebStorage/37/FileSystem/t/Paths/LOCK | 0 .../Default/WebStorage/37/FileSystem/t/Paths/LOG | 2 + .../37/FileSystem/t/Paths/MANIFEST-000001 | Bin 0 -> 41 bytes .../Default/WebStorage/51/FileSystem/t/.usage | Bin 0 -> 24 bytes .../Default/WebStorage/51/FileSystem/t/00/00000000 | Bin 0 -> 1 bytes .../WebStorage/51/FileSystem/t/Paths/000003.log | Bin 0 -> 278 bytes .../WebStorage/51/FileSystem/t/Paths/CURRENT | 1 + .../Default/WebStorage/51/FileSystem/t/Paths/LOCK | 0 .../Default/WebStorage/51/FileSystem/t/Paths/LOG | 3 + .../WebStorage/51/FileSystem/t/Paths/LOG.old | 3 + .../51/FileSystem/t/Paths/MANIFEST-000001 | Bin 0 -> 41 bytes .../Default/WebStorage/54/FileSystem/t/.usage | Bin 0 -> 24 bytes .../Default/WebStorage/54/FileSystem/t/00/00000000 | Bin 0 -> 1 bytes .../WebStorage/54/FileSystem/t/Paths/000003.log | Bin 0 -> 278 bytes .../WebStorage/54/FileSystem/t/Paths/CURRENT | 1 + .../Default/WebStorage/54/FileSystem/t/Paths/LOCK | 0 .../Default/WebStorage/54/FileSystem/t/Paths/LOG | 2 + .../54/FileSystem/t/Paths/MANIFEST-000001 | Bin 0 -> 41 bytes .../3e700e71-e588-4a9c-9dbb-a1632224fc25/index | Bin 0 -> 24 bytes .../index-dir/the-real-index | Bin 0 -> 48 bytes .../b3146faa8b8f5a8d_0 | Bin 0 -> 16777557 bytes .../be498be2-199d-466d-a5c5-80b81a82dadd/index | Bin 0 -> 24 bytes .../index-dir/the-real-index | Bin 0 -> 72 bytes .../Default/WebStorage/56/CacheStorage/index.txt | Bin 0 -> 325 bytes .../WebStorage/56/IndexedDB/indexeddb.blob/1/00/2 | Bin 0 -> 10799305 bytes .../56/IndexedDB/indexeddb.leveldb/000003.log | Bin 0 -> 3284 bytes .../56/IndexedDB/indexeddb.leveldb/CURRENT | 1 + .../WebStorage/56/IndexedDB/indexeddb.leveldb/LOCK | 0 .../WebStorage/56/IndexedDB/indexeddb.leveldb/LOG | 2 + .../56/IndexedDB/indexeddb.leveldb/MANIFEST-000001 | Bin 0 -> 23 bytes .../Default/WebStorage/66/CacheStorage/index.txt | 1 + .../Default/WebStorage/67/FileSystem/t/.usage | Bin 0 -> 24 bytes .../Default/WebStorage/67/FileSystem/t/00/00000000 | Bin 0 -> 1 bytes .../WebStorage/67/FileSystem/t/Paths/000003.log | Bin 0 -> 278 bytes .../WebStorage/67/FileSystem/t/Paths/CURRENT | 1 + .../Default/WebStorage/67/FileSystem/t/Paths/LOCK | 0 .../Default/WebStorage/67/FileSystem/t/Paths/LOG | 2 + .../67/FileSystem/t/Paths/MANIFEST-000001 | Bin 0 -> 41 bytes .../Default/WebStorage/72/CacheStorage/index.txt | 1 + .../80/IndexedDB/indexeddb.leveldb/000003.log | Bin 0 -> 6053 bytes .../80/IndexedDB/indexeddb.leveldb/CURRENT | 1 + .../WebStorage/80/IndexedDB/indexeddb.leveldb/LOCK | 0 .../WebStorage/80/IndexedDB/indexeddb.leveldb/LOG | 2 + .../80/IndexedDB/indexeddb.leveldb/MANIFEST-000001 | Bin 0 -> 23 bytes .../81/IndexedDB/indexeddb.leveldb/000004.log | 0 .../81/IndexedDB/indexeddb.leveldb/000005.ldb | Bin 0 -> 2524 bytes .../81/IndexedDB/indexeddb.leveldb/CURRENT | 1 + .../WebStorage/81/IndexedDB/indexeddb.leveldb/LOCK | 0 .../WebStorage/81/IndexedDB/indexeddb.leveldb/LOG | 6 + .../81/IndexedDB/indexeddb.leveldb/MANIFEST-000001 | Bin 0 -> 83 bytes .../Default/WebStorage/QuotaManager | Bin 0 -> 49152 bytes .../Default/WebStorage/QuotaManager-journal | Bin 0 -> 16928 bytes .../net.imput.helium/Default/chrome_cart_db/LOCK | 0 .../net.imput.helium/Default/chrome_cart_db/LOG | 0 .../Default/chrome_cart_db/LOG.old | 0 .../Default/commerce_subscription_db/LOCK | 0 .../Default/commerce_subscription_db/LOG | 0 .../Default/commerce_subscription_db/LOG.old | 0 .../Default/discount_infos_db/LOCK | 0 .../net.imput.helium/Default/discount_infos_db/LOG | 0 .../Default/discount_infos_db/LOG.old | 0 .../net.imput.helium/Default/discounts_db/LOCK | 0 .../net.imput.helium/Default/discounts_db/LOG | 0 .../net.imput.helium/Default/discounts_db/LOG.old | 0 .../net.imput.helium/Default/engine_allowlist.bf | Bin 0 -> 360 bytes .../Default/heavy_ad_intervention_opt_out.db | Bin 0 -> 16384 bytes .../heavy_ad_intervention_opt_out.db-journal | 0 .../optimization_guide_hint_cache_store/LOCK | 0 .../optimization_guide_hint_cache_store/LOG | 0 .../optimization_guide_hint_cache_store/LOG.old | 0 .../Default/parcel_tracking_db/LOCK | 0 .../Default/parcel_tracking_db/LOG | 0 .../Default/parcel_tracking_db/LOG.old | 0 .../Default/shared_proto_db/000005.ldb | Bin 0 -> 88721 bytes .../Default/shared_proto_db/000015.log | Bin 0 -> 83199 bytes .../Default/shared_proto_db/000017.ldb | Bin 0 -> 53284 bytes .../Default/shared_proto_db/CURRENT | 1 + .../net.imput.helium/Default/shared_proto_db/LOCK | 0 .../net.imput.helium/Default/shared_proto_db/LOG | 4 + .../Default/shared_proto_db/LOG.old | 6 + .../Default/shared_proto_db/MANIFEST-000001 | Bin 0 -> 609 bytes .../Default/shared_proto_db/metadata/000003.log | Bin 0 -> 5698 bytes .../Default/shared_proto_db/metadata/CURRENT | 1 + .../Default/shared_proto_db/metadata/LOCK | 0 .../Default/shared_proto_db/metadata/LOG | 3 + .../Default/shared_proto_db/metadata/LOG.old | 3 + .../shared_proto_db/metadata/MANIFEST-000001 | Bin 0 -> 41 bytes .../net.imput.helium/Dictionaries/en-US-10-1.bdic | Bin 0 -> 451968 bytes .../.config/net.imput.helium/First Run | 0 .../Q5YMLNRRDETGFEQ4QIIPCNHSP4VJCTIA/cache.db | Bin 0 -> 19316736 bytes .../Q5YMLNRRDETGFEQ4QIIPCNHSP4VJCTIA/cache.db-wal | Bin 0 -> 4157112 bytes .../Q5YMLNRRDETGFEQ4QIIPCNHSP4VJCTIA/cache.journal | 0 .../net.imput.helium/GraphiteDawnCache/data_0 | Bin 0 -> 8192 bytes .../net.imput.helium/GraphiteDawnCache/data_1 | Bin 0 -> 270336 bytes .../net.imput.helium/GraphiteDawnCache/data_2 | Bin 0 -> 8192 bytes .../net.imput.helium/GraphiteDawnCache/data_3 | Bin 0 -> 8192 bytes .../net.imput.helium/GraphiteDawnCache/index | Bin 0 -> 262512 bytes .../.config/net.imput.helium/Last Version | 1 + .../.config/net.imput.helium/Local State | 1 + .../NativeMessagingHosts/com.anytype.desktop.json | 11 + .../.config/net.imput.helium/SingletonCookie | 1 + .../.config/net.imput.helium/SingletonLock | 1 + .../Local Storage/leveldb/000003.log | Bin 0 -> 49 bytes .../System Profile/Local Storage/leveldb/CURRENT | 1 + .../System Profile/Local Storage/leveldb/LOCK | 0 .../System Profile/Local Storage/leveldb/LOG | 2 + .../Local Storage/leveldb/MANIFEST-000001 | Bin 0 -> 41 bytes .../net.imput.helium/System Profile/Preferences | 1 + .../.config/net.imput.helium/System Profile/README | 1 + .../System Profile/Secure Preferences | 1 + .../System Profile/Shared Dictionary/cache/index | Bin 0 -> 24 bytes .../cache/index-dir/the-real-index | Bin 0 -> 48 bytes .../System Profile/Shared Dictionary/db | Bin 0 -> 45056 bytes .../System Profile/Shared Dictionary/db-journal | 0 .../net.imput.helium/System Profile/SharedStorage | Bin 0 -> 4096 bytes .../.config/net.imput.helium/Variations | 1 + ...a922687a18a2f43534c7ff89726085c2e6eef55c49d422c | Bin 0 -> 1668604 bytes .../component_crx_cache/metadata.json | 1 + .../extensions_crx_cache/metadata.json | 1 + .../.config/net.imput.helium/first_party_sets.db | Bin 0 -> 49152 bytes .../net.imput.helium/first_party_sets.db-journal | 0 .../net.imput.helium/segmentation_platform/ukm_db | Bin 0 -> 1146880 bytes .../segmentation_platform/ukm_db-wal | 0 5388 files changed, 371813 insertions(+) create mode 100644 net.imput.helium/.config/net.imput.helium/BrowserMetrics-spare.pma create mode 100644 net.imput.helium/.config/net.imput.helium/CertificateRevocation/10655/LICENSE create mode 100644 net.imput.helium/.config/net.imput.helium/CertificateRevocation/10655/_metadata/verified_contents.json create mode 100644 net.imput.helium/.config/net.imput.helium/CertificateRevocation/10655/crl-set create mode 100644 net.imput.helium/.config/net.imput.helium/CertificateRevocation/10655/manifest.json create mode 100644 net.imput.helium/.config/net.imput.helium/CertificateRevocation/10656/LICENSE create mode 100644 net.imput.helium/.config/net.imput.helium/CertificateRevocation/10656/_metadata/verified_contents.json create mode 100644 net.imput.helium/.config/net.imput.helium/CertificateRevocation/10656/crl-set create mode 100644 net.imput.helium/.config/net.imput.helium/CertificateRevocation/10656/manifest.json create mode 100644 net.imput.helium/.config/net.imput.helium/CertificateRevocation/10657/LICENSE create mode 100644 net.imput.helium/.config/net.imput.helium/CertificateRevocation/10657/_metadata/verified_contents.json create mode 100644 net.imput.helium/.config/net.imput.helium/CertificateRevocation/10657/crl-set create mode 100644 net.imput.helium/.config/net.imput.helium/CertificateRevocation/10657/manifest.json create mode 100644 net.imput.helium/.config/net.imput.helium/CertificateRevocation/10658/LICENSE create mode 100644 net.imput.helium/.config/net.imput.helium/CertificateRevocation/10658/_metadata/verified_contents.json create mode 100644 net.imput.helium/.config/net.imput.helium/CertificateRevocation/10658/crl-set create mode 100644 net.imput.helium/.config/net.imput.helium/CertificateRevocation/10658/manifest.json create mode 100644 net.imput.helium/.config/net.imput.helium/CertificateRevocation/10659/LICENSE create mode 100644 net.imput.helium/.config/net.imput.helium/CertificateRevocation/10659/_metadata/verified_contents.json create mode 100644 net.imput.helium/.config/net.imput.helium/CertificateRevocation/10659/crl-set create mode 100644 net.imput.helium/.config/net.imput.helium/CertificateRevocation/10659/manifest.json create mode 100644 net.imput.helium/.config/net.imput.helium/Crash Reports/pending/ab208bbd-c222-42b6-84be-c3716e66c149.dmp create mode 100644 net.imput.helium/.config/net.imput.helium/Crash Reports/pending/ab208bbd-c222-42b6-84be-c3716e66c149.meta create mode 100644 net.imput.helium/.config/net.imput.helium/Crash Reports/settings.dat create mode 100644 net.imput.helium/.config/net.imput.helium/Default/.org.chromium.Chromium.1F1JI3 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/.org.chromium.Chromium.EEq65z create mode 100644 net.imput.helium/.config/net.imput.helium/Default/.org.chromium.Chromium.L5b1Sq create mode 100644 net.imput.helium/.config/net.imput.helium/Default/.org.chromium.Chromium.UCYqcY create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Account Web Data create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Account Web Data-journal create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Affiliation Database create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Affiliation Database-journal create mode 100644 net.imput.helium/.config/net.imput.helium/Default/AutofillAiModelCache/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/AutofillAiModelCache/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/AutofillAiModelCache/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/AutofillStrikeDatabase/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/AutofillStrikeDatabase/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/AutofillStrikeDatabase/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/BookmarkMergedSurfaceOrdering create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Bookmarks create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Bookmarks.bak create mode 100644 net.imput.helium/.config/net.imput.helium/Default/BudgetDatabase/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/BudgetDatabase/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/BudgetDatabase/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/ClientCertificates/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/ClientCertificates/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/ClientCertificates/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Cookies create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Cookies-journal create mode 100644 net.imput.helium/.config/net.imput.helium/Default/DIPS create mode 100644 net.imput.helium/.config/net.imput.helium/Default/DIPS-wal create mode 100644 net.imput.helium/.config/net.imput.helium/Default/DNR Extension Rules/fgmjlmbojbkmdpofahffgcpkhkngfpef/rules.fbs create mode 100644 net.imput.helium/.config/net.imput.helium/Default/DNR Extension Rules/fgmjlmbojbkmdpofahffgcpkhkngfpef/rules.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/DawnGraphiteCache/data_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/DawnGraphiteCache/data_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/DawnGraphiteCache/data_2 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/DawnGraphiteCache/data_3 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/DawnGraphiteCache/index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/DawnWebGPUCache/data_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/DawnWebGPUCache/data_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/DawnWebGPUCache/data_2 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/DawnWebGPUCache/data_3 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/DawnWebGPUCache/index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extension Cookies create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extension Cookies-journal create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extension Rules/000003.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extension Rules/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extension Rules/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extension Rules/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extension Rules/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extension Rules/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extension Scripts/000003.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extension Scripts/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extension Scripts/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extension Scripts/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extension Scripts/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extension Scripts/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extension State/000005.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extension State/000020.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extension State/000023.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extension State/000026.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extension State/000028.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extension State/000029.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extension State/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extension State/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extension State/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extension State/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extension State/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/@types/index.d.ts create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/_metadata/verified_contents.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/background.html create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/background.mjs create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/donation.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/iconfont/MaterialIconsOutlined.woff2 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/iconfont/material-icons.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/images/bmc-logo.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/images/icon128.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/images/icon16.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/images/icon32.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/images/icon48.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/images/paypal-logo.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/manifest.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/modules/cookie_format.mjs create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/modules/get_all_cookies.mjs create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/modules/save_to_file.mjs create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/popup-options.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/popup.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/popup.dark.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/popup.html create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/popup.mjs create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/table-nowrap.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/_metadata/verified_contents.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/background_scripts/all_commands.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/background_scripts/bg_utils.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/background_scripts/commands.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/background_scripts/completion/completers.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/background_scripts/completion/ranking.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/background_scripts/completion/search_engines.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/background_scripts/completion/search_wrapper.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/background_scripts/exclusions.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/background_scripts/main.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/background_scripts/marks.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/background_scripts/tab_operations.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/background_scripts/tab_recency.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/background_scripts/user_search_engines.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/content_scripts/file_urls.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/content_scripts/hud.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/content_scripts/link_hints.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/content_scripts/marks.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/content_scripts/mode.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/content_scripts/mode_find.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/content_scripts/mode_insert.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/content_scripts/mode_key_handler.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/content_scripts/mode_normal.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/content_scripts/mode_visual.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/content_scripts/scroller.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/content_scripts/ui_component.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/content_scripts/vimium.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/content_scripts/vimium_frontend.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/content_scripts/vomnibar.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/icons/action_disabled.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/icons/action_disabled_16.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/icons/action_disabled_32.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/icons/action_enabled.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/icons/action_enabled_16.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/icons/action_enabled_32.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/icons/action_partial.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/icons/action_partial_16.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/icons/action_partial_32.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/icons/icon.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/icons/icon128.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/icons/icon16.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/icons/icon48.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/lib/chrome_api_stubs.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/lib/dom_utils.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/lib/find_mode_history.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/lib/handler_stack.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/lib/keyboard_utils.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/lib/rect.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/lib/settings.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/lib/types.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/lib/url_utils.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/lib/utils.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/manifest.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/pages/action.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/pages/action.html create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/pages/action.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/pages/all_content_scripts.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/pages/command_listing.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/pages/command_listing.html create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/pages/command_listing.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/pages/doc.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/pages/doc_search_completion.html create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/pages/doc_search_completion.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/pages/exclusion_rules_editor.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/pages/help_dialog_page.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/pages/help_dialog_page.html create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/pages/help_dialog_page.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/pages/hud_page.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/pages/hud_page.html create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/pages/hud_page.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/pages/key_mappings.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/pages/options.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/pages/options.html create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/pages/options.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/pages/ui_component_messenger.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/pages/vomnibar_page.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/pages/vomnibar_page.html create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/pages/vomnibar_page.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/resources/tlds.txt create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/fgmjlmbojbkmdpofahffgcpkhkngfpef/3.0.8_0/README.md create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/fgmjlmbojbkmdpofahffgcpkhkngfpef/3.0.8_0/_locales/de/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/fgmjlmbojbkmdpofahffgcpkhkngfpef/3.0.8_0/_locales/en/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/fgmjlmbojbkmdpofahffgcpkhkngfpef/3.0.8_0/_metadata/generated_indexed_rulesets/_ruleset1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/fgmjlmbojbkmdpofahffgcpkhkngfpef/3.0.8_0/_metadata/verified_contents.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/fgmjlmbojbkmdpofahffgcpkhkngfpef/3.0.8_0/background/healthcheck.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/fgmjlmbojbkmdpofahffgcpkhkngfpef/3.0.8_0/background/main.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/fgmjlmbojbkmdpofahffgcpkhkngfpef/3.0.8_0/background/settings.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/fgmjlmbojbkmdpofahffgcpkhkngfpef/3.0.8_0/css/content.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/fgmjlmbojbkmdpofahffgcpkhkngfpef/3.0.8_0/icons/sp_icon_128.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/fgmjlmbojbkmdpofahffgcpkhkngfpef/3.0.8_0/icons/sp_icon_16.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/fgmjlmbojbkmdpofahffgcpkhkngfpef/3.0.8_0/icons/sp_icon_48.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/fgmjlmbojbkmdpofahffgcpkhkngfpef/3.0.8_0/js/content.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/fgmjlmbojbkmdpofahffgcpkhkngfpef/3.0.8_0/manifest.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/fgmjlmbojbkmdpofahffgcpkhkngfpef/3.0.8_0/rules_1.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/fgmjlmbojbkmdpofahffgcpkhkngfpef/3.0.8_0/service_worker.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/flphhdfbcpebbehnmphjoaoffhgcjafi/1.0.3_0/_metadata/verified_contents.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/flphhdfbcpebbehnmphjoaoffhgcjafi/1.0.3_0/content-scripts/initialize.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/flphhdfbcpebbehnmphjoaoffhgcjafi/1.0.3_0/images/logo.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/flphhdfbcpebbehnmphjoaoffhgcjafi/1.0.3_0/images/logo128.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/flphhdfbcpebbehnmphjoaoffhgcjafi/1.0.3_0/images/logo16.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/flphhdfbcpebbehnmphjoaoffhgcjafi/1.0.3_0/images/logo48.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/flphhdfbcpebbehnmphjoaoffhgcjafi/1.0.3_0/images/slider-steps.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/flphhdfbcpebbehnmphjoaoffhgcjafi/1.0.3_0/manifest.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/flphhdfbcpebbehnmphjoaoffhgcjafi/1.0.3_0/popups/main/main.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/flphhdfbcpebbehnmphjoaoffhgcjafi/1.0.3_0/popups/main/main.html create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/flphhdfbcpebbehnmphjoaoffhgcjafi/1.0.3_0/popups/main/main.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/_locales/bg/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/_locales/ca/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/_locales/cs/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/_locales/da/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/_locales/de/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/_locales/el/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/_locales/en/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/_locales/en_GB/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/_locales/es/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/_locales/et/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/_locales/fi/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/_locales/fr/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/_locales/he/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/_locales/hu/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/_locales/id/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/_locales/it/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/_locales/ja/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/_locales/ko/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/_locales/la/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/_locales/lt/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/_locales/my/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/_locales/nb/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/_locales/nl/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/_locales/pl/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/_locales/pt/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/_locales/pt_BR/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/_locales/pt_PT/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/_locales/ro/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/_locales/ru/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/_locales/sl/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/_locales/sv/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/_locales/tr/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/_locales/uk/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/_locales/vi/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/_locales/zh_CN/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/_locales/zh_TW/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/_metadata/verified_contents.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/background/background_service.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/background/browserAction.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/background/client.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/background/event.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/background/httpauth.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/background/init.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/background/keepass.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/background/nacl-util.min.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/background/nacl.min.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/background/offscreen.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/background/page.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/background/tabs.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/bootstrap/bootstrap.min.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/bootstrap/bootstrap.min.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/common/browser-polyfill.min.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/common/global.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/common/global_ui.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/common/sites.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/common/translate.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/content/autocomplete.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/content/banner.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/content/credential-autocomplete.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/content/custom-fields-banner.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/content/fields.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/content/fill.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/content/form.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/content/icon-handler.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/content/icon.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/content/keepassxc-browser.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/content/observer-helper.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/content/passkeys-inject.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/content/passkeys-utils.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/content/passkeys.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/content/pwgen.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/content/totp-autocomplete.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/content/totp-field.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/content/ui.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/content/username-field.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/css/autocomplete.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/css/banner.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/css/button.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/css/colors.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/css/define.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/css/notification.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/css/pwgen.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/css/totp.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/css/username.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/fonts/fork-awesome.min.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/fonts/forkawesome-webfont.woff2 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/custom_login_fields.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/disconnected.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/help.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/keepassxc-dark_128x128.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/keepassxc-dark_16x16.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/keepassxc-dark_18x18.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/keepassxc-dark_19x19.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/keepassxc-dark_32x32.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/keepassxc-dark_36x36.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/keepassxc-dark_38x38.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/keepassxc-dark_48x48.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/keepassxc-dark_64x64.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/keepassxc.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/keepassxc_128x128.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/keepassxc_16x16.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/keepassxc_18x18.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/keepassxc_19x19.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/keepassxc_32x32.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/keepassxc_36x36.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/keepassxc_38x38.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/keepassxc_48x48.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/keepassxc_64x64.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/keepassxc_96x96.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/key.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/locked.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/otp.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/toolbar/colored/icon_bang.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/toolbar/colored/icon_bang.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/toolbar/colored/icon_cross.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/toolbar/colored/icon_cross.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/toolbar/colored/icon_dark.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/toolbar/colored/icon_dark.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/toolbar/colored/icon_locked.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/toolbar/colored/icon_locked.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/toolbar/colored/icon_new_bang.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/toolbar/colored/icon_new_bang.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/toolbar/colored/icon_new_cross.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/toolbar/colored/icon_new_cross.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/toolbar/colored/icon_new_locked.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/toolbar/colored/icon_new_locked.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/toolbar/colored/icon_new_normal.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/toolbar/colored/icon_new_normal.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/toolbar/colored/icon_normal.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/toolbar/colored/icon_normal.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/toolbar/dark/icon_bang.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/toolbar/dark/icon_bang.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/toolbar/dark/icon_cross.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/toolbar/dark/icon_cross.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/toolbar/dark/icon_dark.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/toolbar/dark/icon_dark.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/toolbar/dark/icon_locked.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/toolbar/dark/icon_locked.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/toolbar/dark/icon_new_bang.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/toolbar/dark/icon_new_bang.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/toolbar/dark/icon_new_cross.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/toolbar/dark/icon_new_cross.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/toolbar/dark/icon_new_locked.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/toolbar/dark/icon_new_locked.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/toolbar/dark/icon_new_normal.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/toolbar/dark/icon_new_normal.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/toolbar/dark/icon_normal.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/toolbar/dark/icon_normal.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/toolbar/light/icon_bang.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/toolbar/light/icon_bang.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/toolbar/light/icon_cross.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/toolbar/light/icon_cross.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/toolbar/light/icon_dark.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/toolbar/light/icon_dark.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/toolbar/light/icon_locked.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/toolbar/light/icon_locked.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/toolbar/light/icon_new_bang.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/toolbar/light/icon_new_bang.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/toolbar/light/icon_new_cross.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/toolbar/light/icon_new_cross.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/toolbar/light/icon_new_locked.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/toolbar/light/icon_new_locked.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/toolbar/light/icon_new_normal.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/toolbar/light/icon_new_normal.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/toolbar/light/icon_normal.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/icons/toolbar/light/icon_normal.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/managed_storage.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/manifest.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/offscreen/offscreen.html create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/offscreen/offscreen.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/options/getting_started.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/options/getting_started.html create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/options/getting_started.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/options/http-auth-dialog.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/options/options.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/options/options.html create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/options/options.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/options/shortcuts.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/options/shortcuts.html create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/options/shortcuts.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/popups/popup.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/popups/popup.html create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/popups/popup.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/popups/popup_functions.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/popups/popup_httpauth.html create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/popups/popup_httpauth.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/popups/popup_login.html create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oboonakemofpalcgghocfoadofidjkkk/1.10.3_0/popups/popup_login.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/LICENSE.txt create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/_locales/am/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/_locales/ar/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/_locales/bg/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/_locales/bn/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/_locales/ca/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/_locales/cs/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/_locales/da/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/_locales/de/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/_locales/el/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/_locales/en/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/_locales/eo/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/_locales/es/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/_locales/et/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/_locales/fa/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/_locales/fi/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/_locales/fil/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/_locales/fr/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/_locales/gu/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/_locales/he/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/_locales/hi/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/_locales/hr/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/_locales/hu/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/_locales/id/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/_locales/it/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/_locales/ja/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/_locales/kn/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/_locales/ko/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/_locales/lt/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/_locales/lv/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/_locales/ml/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/_locales/mr/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/_locales/ms/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/_locales/nb/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/_locales/nl/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/_locales/no/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/_locales/pl/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/_locales/pt_BR/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/_locales/pt_PT/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/_locales/ro/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/_locales/ru/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/_locales/sk/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/_locales/sl/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/_locales/sr/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/_locales/sv/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/_locales/sw/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/_locales/ta/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/_locales/te/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/_locales/th/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/_locales/tr/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/_locales/uk/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/_locales/vi/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/_locales/zh_CN/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/_locales/zh_TW/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/_metadata/verified_contents.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/about.html create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/asset-viewer.html create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/assets/assets.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/assets/thirdparties/mirror1.malwaredomains.com/files/README.md create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/assets/thirdparties/mirror1.malwaredomains.com/files/justdomains create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/assets/thirdparties/pgl.yoyo.org/as/README.md create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/assets/thirdparties/pgl.yoyo.org/as/serverlist create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/assets/thirdparties/publicsuffix.org/list/effective_tld_names.dat create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/assets/thirdparties/someonewhocares.org/hosts/hosts.txt create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/assets/thirdparties/winhelp2002.mvps.org/hosts.txt create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/assets/thirdparties/www.malwaredomainlist.com/hostslist/README.md create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/assets/thirdparties/www.malwaredomainlist.com/hostslist/hosts.txt create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/assets/umatrix/recipes_en.txt create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/background.html create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/cloud-ui.html create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/css/cloud-ui.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/css/codemirror.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/css/common.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/css/dashboard-common.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/css/dashboard.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/css/fa-icons.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/css/fonts/Roboto_Condensed/LICENSE.txt create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/css/fonts/Roboto_Condensed/RobotoCondensed-Light.ttf create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/css/fonts/Roboto_Condensed/RobotoCondensed-Regular.ttf create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/css/hosts-files.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/css/logger-ui.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/css/main-blocked.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/css/popup.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/css/raw-settings.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/css/scope-selector.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/css/user-rules.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/dashboard.html create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/hosts-files.html create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-0.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-1.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-10.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-11.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-12.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-13.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-14.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-15.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-16.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-17.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-18.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-19.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-2.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-3.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-4.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-5.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-6.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-7.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-8.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-9.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-off.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon38-off.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/cloud.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/fontawesome/LICENSE.txt create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/fontawesome/fontawesome-defs.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/icon_128.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/icon_16.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/icon_64.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/matrix-group-hide.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/matrix-group-hline.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/matrix-group-show.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/permanent-black-small-cb.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/permanent-black-small.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/permanent-white-small-cb.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/permanent-white-small.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/about.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/asset-viewer.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/assets.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/background.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/browsercache.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/cloud-ui.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/contentscript-no-inline-script.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/contentscript-no-workers.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/contentscript-start.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/contentscript.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/cookies.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/dashboard-common.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/dashboard.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/fa-icons.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/hosts-files.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/httpsb.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/i18n.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/liquid-dict.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/logger-ui.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/logger.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/main-blocked.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/matrix.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/messaging.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/pagestats.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/popup.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/raw-settings.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/recipe-manager.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/scope-selector.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/settings.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/start.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/storage.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/tab.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/traffic.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/udom.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/uritools.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/user-rules.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/usersettings.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/utils.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/vapi-background.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/vapi-client.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/vapi-common.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/vapi-webrequest.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/lib/codemirror/LICENSE create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/lib/codemirror/README.md create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/lib/codemirror/addon/merge/merge.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/lib/codemirror/addon/merge/merge.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/lib/codemirror/addon/selection/active-line.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/lib/codemirror/lib/codemirror.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/lib/codemirror/lib/codemirror.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/lib/diff/README.md create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/lib/diff/swatinem_diff.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/lib/publicsuffixlist.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/lib/punycode.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/logger-ui.html create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/main-blocked.html create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/manifest.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/popup.html create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/raw-settings.html create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/settings.html create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/user-rules.html create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/ar/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/bn/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/bs/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/cs/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/de/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/delete.py create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/en/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/eo/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/es/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/fa/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/fi/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/fil/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/filter.py create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/fr/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/gl/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/hi/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/hr/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/hu/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/id/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/it/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/ja/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/jv/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/ko/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/lv/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/nb_NO/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/nl/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/pl/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/pt/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/pt_BR/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/ro/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/ru/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/sr/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/ta/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/tr/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/uk/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/vi/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/zh_Hans/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/zh_Hant/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/about-icon-light.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/about-icon.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/baiduTieba-icon.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/bandcamp-icon.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/bilibili-icon-light.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/bilibili-icon.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/bluesky-icon.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/chatGpt-icon-light.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/chatGpt-icon.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/chefkoch-icon.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/coub-icon.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/deviantArt-icon.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/fandom-icon.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/geeksForGeeks-icon.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/general-icon-light.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/general-icon.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/genius-icon.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/github-icon-light.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/github-icon.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/gitlab-icon.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/goodreads-icon-light.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/goodreads-icon.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/ifunny-icon.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/imdb-icon.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/imgur-icon.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/instagram-icon.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/instructables-icon.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/knowyourmeme-icon.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/libredirect-128.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/libredirect-16.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/libredirect-32.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/libredirect-48.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/libredirect-64.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/libredirect-96.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/libredirect.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/libredirect.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/maps-icon-light.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/maps-icon.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/medium-icon.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/meet-icon-light.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/meet-icon.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/mozhi-icon.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/office-icon-light.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/office-icon.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/pastebin-icon-light.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/pastebin-icon.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/peertube-icon.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/pinterest-icon.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/pixiv-icon.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/quora-icon.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/reddit-icon.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/reuters-icon.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/search-icon-light.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/search-icon.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/sendFiles-icon-light.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/sendFiles-icon.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/snopes-icon.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/soundcloud-icon.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/stackOverflow-icon-light.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/stackOverflow-icon.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/tekstowo-icon.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/tenor-icon.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/textStorage-icon-light.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/textStorage-icon.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/threads-icon-light.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/threads-icon.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/tiktok-icon.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/translate-icon-light.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/translate-icon.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/tumblr-icon.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/twitch-icon.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/twitter-icon.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/ultimateGuitar-icon.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/urbanDictionary-icon.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/waybackMachine-icon-light.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/waybackMachine-icon.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/wikipedia-icon.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/wolframAlpha-icon.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/youtube-icon.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/youtubeMusic-icon.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/javascripts/services.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/javascripts/utils.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/config.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/manifest.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/background/background.html create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/background/background.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/components/Button.svelte create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/components/Checkbox.svelte create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/components/Input.svelte create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/components/Label.svelte create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/components/Row.svelte create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/components/Select.svelte create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/fonts/Inter-VariableFont_slnt,wght.ttf create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/fonts/Vazirmatn-VariableFont_wght.ttf create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/fonts/styles.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/icons/AboutIcon.svelte create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/icons/AddIcon.svelte create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/icons/AutoPickIcon.svelte create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/icons/CloseIcon.svelte create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/icons/CopyIcon.svelte create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/icons/ExportIcon.svelte create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/icons/GeneralIcon.svelte create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/icons/ImportIcon.svelte create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/icons/PingIcon.svelte create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/icons/RedirectIcon.svelte create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/icons/RedirectToOriginalIcon.svelte create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/icons/ResetIcon.svelte create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/icons/ServicesIcon.svelte create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/icons/SettingsIcon.svelte create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/icons/SwitchInstanceIcon.svelte create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/messages/build/bundle.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/messages/build/bundle.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/messages/build/bundle.js.map create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/messages/index.html create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/messages_src/App.svelte create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/messages_src/main.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/messages_src/stores.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/options/build/bundle.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/options/build/bundle.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/options/build/bundle.js.map create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/options/index.html create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/options_src/App.svelte create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/options_src/General/Exceptions.svelte create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/options_src/General/General.svelte create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/options_src/General/SettingsButtons.svelte create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/options_src/Services/FrontendIcon.svelte create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/options_src/Services/Instances.svelte create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/options_src/Services/RedirectType.svelte create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/options_src/Services/ServiceIcon.svelte create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/options_src/Services/Services.svelte create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/options_src/Sidebar.svelte create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/options_src/main.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/options_src/stores.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/options_src/url.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/popup/build/bundle.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/popup/build/bundle.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/popup/build/bundle.js.map create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/popup/index.html create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/popup_src/App.svelte create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/popup_src/Buttons.svelte create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/popup_src/components/Row.svelte create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/popup_src/components/ServiceIcon.svelte create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/popup_src/components/Switch.svelte create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/popup_src/main.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/popup_src/stores.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/updates/updates.xml create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/_locales/ca/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/_locales/de/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/_locales/en/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/_locales/es/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/_locales/fr/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/_locales/it/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/_locales/nl/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/_locales/pl/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/_locales/pt_BR/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/_locales/pt_PT/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/_locales/ru/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/_locales/uk/messages.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/_metadata/verified_contents.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/emojibase-data/emojis/de/data.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/emojibase-data/emojis/en/data.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/emojibase-data/emojis/es/data.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/emojibase-data/emojis/fr/data.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/emojibase-data/emojis/it/data.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/emojibase-data/emojis/nl/data.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/emojibase-data/emojis/pl/data.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/emojibase-data/emojis/pt/data.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/emojibase-data/emojis/ru/data.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/emojibase-data/emojis/uk/data.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/emojibase-data/keywords/de/data.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/emojibase-data/keywords/en/data.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/emojibase-data/keywords/es/data.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/emojibase-data/keywords/fr/data.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/emojibase-data/keywords/it/data.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/emojibase-data/keywords/nl/data.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/emojibase-data/keywords/pl/data.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/emojibase-data/keywords/pt/data.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/emojibase-data/keywords/ru/data.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/emojibase-data/keywords/uk/data.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/fonts/Roboto-Mono-latin-bold.woff2 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/fonts/Source-Sans-Pro-cycrillic-bold-mac.woff2 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/fonts/Source-Sans-Pro-cycrillic-bold-win.woff2 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/fonts/Source-Sans-Pro-cycrillic-ext-bold-mac.woff2 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/fonts/Source-Sans-Pro-cycrillic-ext-bold-win.woff2 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/fonts/Source-Sans-Pro-cycrillic-ext-mac.woff2 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/fonts/Source-Sans-Pro-cycrillic-ext-semi-bold-mac.woff2 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/fonts/Source-Sans-Pro-cycrillic-ext-semi-bold-win.woff2 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/fonts/Source-Sans-Pro-cycrillic-ext-win.woff2 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/fonts/Source-Sans-Pro-cycrillic-mac.woff2 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/fonts/Source-Sans-Pro-cycrillic-semi-bold-mac.woff2 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/fonts/Source-Sans-Pro-cycrillic-semi-bold-win.woff2 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/fonts/Source-Sans-Pro-cycrillic-win.woff2 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/fonts/Source-Sans-Pro-greek-bold-mac.woff2 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/fonts/Source-Sans-Pro-greek-bold-win.woff2 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/fonts/Source-Sans-Pro-greek-ext-bold-mac.woff2 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/fonts/Source-Sans-Pro-greek-ext-bold-win.woff2 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/fonts/Source-Sans-Pro-greek-ext-mac.woff2 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/fonts/Source-Sans-Pro-greek-ext-semi-bold-mac.woff2 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/fonts/Source-Sans-Pro-greek-ext-semi-bold-win.woff2 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/fonts/Source-Sans-Pro-greek-ext-win.woff2 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/fonts/Source-Sans-Pro-greek-mac.woff2 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/fonts/Source-Sans-Pro-greek-semi-bold-mac.woff2 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/fonts/Source-Sans-Pro-greek-semi-bold-win.woff2 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/fonts/Source-Sans-Pro-greek-win.woff2 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/fonts/Source-Sans-Pro-latin-bold-mac.woff2 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/fonts/Source-Sans-Pro-latin-bold-win.woff2 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/fonts/Source-Sans-Pro-latin-ext-bold-mac.woff2 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/fonts/Source-Sans-Pro-latin-ext-bold-win.woff2 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/fonts/Source-Sans-Pro-latin-ext-mac.woff2 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/fonts/Source-Sans-Pro-latin-ext-semi-bold-mac.woff2 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/fonts/Source-Sans-Pro-latin-ext-semi-bold-win.woff2 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/fonts/Source-Sans-Pro-latin-ext-win.woff2 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/fonts/Source-Sans-Pro-latin-mac.woff2 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/fonts/Source-Sans-Pro-latin-semi-bold-mac.woff2 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/fonts/Source-Sans-Pro-latin-semi-bold-win.woff2 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/fonts/Source-Sans-Pro-latin-win.woff2 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/fonts/Source-Sans-Pro-vietnamese-bold-mac.woff2 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/fonts/Source-Sans-Pro-vietnamese-bold-win.woff2 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/fonts/Source-Sans-Pro-vietnamese-mac.woff2 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/fonts/Source-Sans-Pro-vietnamese-semi-bold-mac.woff2 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/fonts/Source-Sans-Pro-vietnamese-semi-bold-win.woff2 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/fonts/Source-Sans-Pro-vietnamese-win.woff2 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/16/black/add_on_icon_16_ai.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/16/black/add_on_icon_16_black_logo.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/16/black/add_on_icon_16_missing.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/16/black/add_on_icon_16_scissors.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/16/special/add_on_icon_16_ai.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/16/special/add_on_icon_16_blue_picky.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/16/special/add_on_icon_16_premium.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/16/special/add_on_icon_16_special_switch_active.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/16/special/add_on_icon_16_special_switch_inactive.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/16/white/add_on_icon_16_white_logo.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/16/white/add_on_icon_16_white_switch_active.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/16/white/add_on_icon_16_white_switch_inactive.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/black/add_on_icon_20_black_add.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/black/add_on_icon_20_black_add_circle.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/black/add_on_icon_20_black_ai_tools.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/black/add_on_icon_20_black_arrow_left.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/black/add_on_icon_20_black_arrow_right.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/black/add_on_icon_20_black_basic_error.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/black/add_on_icon_20_black_blocked.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/black/add_on_icon_20_black_bookmark.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/black/add_on_icon_20_black_check.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/black/add_on_icon_20_black_check_circle.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/black/add_on_icon_20_black_chevron_down.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/black/add_on_icon_20_black_chevron_right.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/black/add_on_icon_20_black_chevron_up.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/black/add_on_icon_20_black_close_circle.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/black/add_on_icon_20_black_close_filled.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/black/add_on_icon_20_black_close_small.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/black/add_on_icon_20_black_dictionary.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/black/add_on_icon_20_black_disable.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/black/add_on_icon_20_black_disable_circle.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/black/add_on_icon_20_black_disabled_website.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/black/add_on_icon_20_black_experimental_settings.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/black/add_on_icon_20_black_feedback.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/black/add_on_icon_20_black_gear.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/black/add_on_icon_20_black_glasses.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/black/add_on_icon_20_black_globe.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/black/add_on_icon_20_black_help.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/black/add_on_icon_20_black_info.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/black/add_on_icon_20_black_kebab_menu.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/black/add_on_icon_20_black_loading.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/black/add_on_icon_20_black_locked.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/black/add_on_icon_20_black_lollipop.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/black/add_on_icon_20_black_lollipop.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/black/add_on_icon_20_black_magic_toolbox.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/black/add_on_icon_20_black_new_window.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/black/add_on_icon_20_black_pause.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/black/add_on_icon_20_black_privacy.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/black/add_on_icon_20_black_reload.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/black/add_on_icon_20_black_save.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/black/add_on_icon_20_black_synonyms.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/black/add_on_icon_20_black_trash.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/black/add_on_icon_20_black_uppercase_ignore.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/black/add_on_icon_20_black_user_statistics.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/black/add_on_icon_20_black_view_default.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/black/add_on_icon_20_black_view_left.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/black/add_on_icon_20_black_view_right.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/black/add_on_icon_20_black_view_scroll.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/special/add_on_icon_20_blue_arrow_down.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/special/add_on_icon_20_blue_arrow_left.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/special/add_on_icon_20_blue_arrow_right.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/special/add_on_icon_20_blue_check.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/special/add_on_icon_20_blue_chevron_down.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/special/add_on_icon_20_blue_expand.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/special/add_on_icon_20_blue_insert.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/special/add_on_icon_20_blue_narrow_down.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/special/add_on_icon_20_color_logo.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/special/add_on_icon_20_orange_check.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/special/add_on_icon_20_premium.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/white/add_on_icon_20_white_add.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/white/add_on_icon_20_white_add_circle.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/white/add_on_icon_20_white_ai_tools.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/white/add_on_icon_20_white_ai_tools_2.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/white/add_on_icon_20_white_arrow_left.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/white/add_on_icon_20_white_arrow_right.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/white/add_on_icon_20_white_basic_error.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/white/add_on_icon_20_white_blocked.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/white/add_on_icon_20_white_bookmark.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/white/add_on_icon_20_white_check.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/white/add_on_icon_20_white_check_circle.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/white/add_on_icon_20_white_chevron_down.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/white/add_on_icon_20_white_chevron_up.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/white/add_on_icon_20_white_close_circle.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/white/add_on_icon_20_white_close_filled.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/white/add_on_icon_20_white_close_small.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/white/add_on_icon_20_white_dictionary.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/white/add_on_icon_20_white_disable.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/white/add_on_icon_20_white_disable_circle.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/white/add_on_icon_20_white_disabled_website.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/white/add_on_icon_20_white_expand.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/white/add_on_icon_20_white_experimental_settings.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/white/add_on_icon_20_white_feedback.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/white/add_on_icon_20_white_gear.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/white/add_on_icon_20_white_glasses.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/white/add_on_icon_20_white_globe.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/white/add_on_icon_20_white_help.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/white/add_on_icon_20_white_info.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/white/add_on_icon_20_white_kebab_menu.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/white/add_on_icon_20_white_loading.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/white/add_on_icon_20_white_locked.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/white/add_on_icon_20_white_lollipop.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/white/add_on_icon_20_white_lollipop.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/white/add_on_icon_20_white_lt.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/white/add_on_icon_20_white_magic_toolbox.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/white/add_on_icon_20_white_narrow_down.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/white/add_on_icon_20_white_new_window.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/white/add_on_icon_20_white_pause.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/white/add_on_icon_20_white_premium.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/white/add_on_icon_20_white_privacy.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/white/add_on_icon_20_white_reload.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/white/add_on_icon_20_white_rephrasing.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/white/add_on_icon_20_white_save.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/white/add_on_icon_20_white_synonyms.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/white/add_on_icon_20_white_trash.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/white/add_on_icon_20_white_uppercase_ignore.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/white/add_on_icon_20_white_user_statistics.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/white/add_on_icon_20_white_view_default.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/white/add_on_icon_20_white_view_left.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/white/add_on_icon_20_white_view_right.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/white/add_on_icon_20_white_view_scroll-to.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/20/white/add_on_icon_20_white_view_scroll.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/backgrounds/background-skeleton-loading-dark-mode.webp create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/backgrounds/background-skeleton-loading.webp create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/backgrounds/elements.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/card-drag-handle.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/favicon.ico create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/flags/ar.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/flags/ast-es.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/flags/be-by.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/flags/br-fr.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/flags/ca-es-valencia.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/flags/ca-es.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/flags/crh-ua.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/flags/da-dk.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/flags/de-at.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/flags/de-ch.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/flags/de-de.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/flags/el-gr.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/flags/en-au.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/flags/en-ca.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/flags/en-gb.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/flags/en-nz.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/flags/en-us.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/flags/en-za.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/flags/eo.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/flags/es.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/flags/eu.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/flags/fa.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/flags/fr.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/flags/ga-ie.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/flags/gl-es.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/flags/globe_dark.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/flags/globe_white.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/flags/it.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/flags/ja-jp.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/flags/km-kh.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/flags/nl.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/flags/no.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/flags/not_found.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/flags/oc.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/flags/pl-pl.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/flags/pt-ao.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/flags/pt-br.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/flags/pt-mz.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/flags/pt-pt.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/flags/ro-ro.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/flags/ru-ru.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/flags/sk-sk.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/flags/sl-si.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/flags/sv.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/flags/ta-in.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/flags/tl-ph.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/flags/uk-ua.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/flags/zh-cn.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/hint-arrow.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/icons/drag.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/icons/icon128.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/icons/icon128_white.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/icons/icon16.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/icons/icon16_white.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/icons/icon32.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/icons/icon32_white.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/icons/icon48.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/icons/icon48_white.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/icons/icon64.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/icons/icon64_white.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/illustrations/color/color_dialog_disabled.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/illustrations/color/color_dialog_errors.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/illustrations/color/color_dialog_language_not_supported.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/illustrations/color/color_dialog_no_errors.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/illustrations/color/color_dialog_scroll_hint.gif create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/illustrations/color/color_dialog_text_too_long.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/illustrations/color/color_dialog_text_too_short.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/illustrations/color/color_dialog_update.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/illustrations/color/desktop_app_teaser_illustration_mac.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/illustrations/color/desktop_app_teaser_illustration_windows.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/illustrations/color/google_docs_teaser.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/illustrations/color/google_slides_teaser.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/illustrations/color/mascot-2x.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/illustrations/color/mascot-error-2x.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/illustrations/color/mascot-error.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/illustrations/color/mascot-happy-2x.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/illustrations/color/mascot-happy.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/illustrations/color/mascot-sad-2x.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/illustrations/color/mascot-sad.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/illustrations/color/mascot-weeping-2x.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/illustrations/color/mascot-weeping.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/illustrations/color/mascot.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/illustrations/color/overleaf_teaser.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/illustrations/color/rephrasing_illustration-2x.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/illustrations/color/rephrasing_illustration.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/illustrations/color/rephrasing_illustration_de-2x.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/illustrations/color/rephrasing_illustration_de.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/illustrations/color/rephrasing_illustration_es-2x.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/illustrations/color/rephrasing_illustration_es.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/illustrations/color/rephrasing_illustration_fr-2x.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/illustrations/color/rephrasing_illustration_fr.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/illustrations/color/rephrasing_illustration_pt-2x.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/illustrations/color/rephrasing_illustration_pt.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/illustrations/color/undo-button.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/illustrations/white/white_add.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/illustrations/white/white_dialog_disabled.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/illustrations/white/white_dialog_errors.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/illustrations/white/white_dialog_language_not_supported.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/illustrations/white/white_dialog_no_errors.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/illustrations/white/white_dialog_text_too_long.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/illustrations/white/white_dialog_text_too_short.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/illustrations/white/white_dialog_update.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/illustrations/white/white_failure.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/illustrations/white/white_no_errors.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/illustrations/white/white_premium.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/logos/logo_color_circle.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/logos/logo_color_with_background.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/lt-favicon-color.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/lt-favicon-color_notification.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/lt-favicon-white.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/lt-favicon-white_notification.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/lt-logo_gdocs_selected.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/lt-logo_gdocs_unselected.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/messages/message_turn_on.gif create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/messages/message_turn_on_safari.gif create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/ratings/thumpsdown.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/ratings/thumpsup.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/stores/chrome_store.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/stores/edge_store.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/stores/firefox_store.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/stores/opera_store.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/stores/safari_store.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/toolbarStates/done.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/toolbarStates/error_counts_white.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/toolbarStates/loading.webp create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/toolbarStates/progress.gif create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/toolbarStates/progress_2x.gif create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/toolbarStates/text_too_long.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/toolbarStates/toolbar_failed.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/toolbarStates/toolbar_language_not_supported.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/toolbarStates/toolbar_permission_required.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/toolbarStates/turnoff.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/toolbarStates/wave.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/toolbox/contextual-cursor-icon-dark.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/toolbox/contextual-cursor-icon-light.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/toolbox/lollipop-icon-gdocs.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/toolbox/lollipop-icon.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/toolbox/lollipop-onboarding-lt.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/images/toolbox/lollipop-onboarding-lt.webp create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/libs/segment.srx create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/assets/toolbox/keywords/en/keywords.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/background.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/changelog.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/changelog.html create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/changelog.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/2023/big/changelog-big-illustration_ai.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/2023/big/changelog-big-illustration_desktop_mac.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/2023/big/changelog-big-illustration_desktop_windows.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/2023/big/changelog-big-illustration_french_version.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/2023/big/changelog-big-illustration_statistics.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/2023/big/changelog-big-illustration_user_mgmt_de.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/2023/big/changelog-big-illustration_user_mgmt_en.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/2023/big/changelog-big-illustration_user_mgmt_es.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/2023/big/changelog-big-illustration_user_mgmt_fr.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/2023/big/changelog-big-illustration_user_mgmt_nl.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/2023/big/changelog-big-illustration_user_mgmt_pt.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/2023/big/changelog-big-illustration_writing_goals_de.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/2023/big/changelog-big-illustration_writing_goals_en.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/2023/big/changelog-big-illustration_writing_goals_es.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/2023/big/changelog-big-illustration_writing_goals_fr.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/2023/big/changelog-big-illustration_writing_goals_nl.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/2023/big/changelog-big-illustration_writing_goals_pt.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/2023/small/changelog-illustration_ai.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/2023/small/changelog-illustration_desktop_mac.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/2023/small/changelog-illustration_desktop_windows.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/2023/small/changelog-illustration_french_version.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/2023/small/changelog-illustration_statistics.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/2023/small/changelog-illustration_user_mgmt.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/2023/small/changelog-illustration_word.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/2023/small/changelog-illustration_writing_goals.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/ai_sparks.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/button_ios.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/button_mac.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/button_windows.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/changelog-background_confetti.jpg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/changelog-background_services.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/changelog-big-illustration_business_de.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/changelog-big-illustration_business_en.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/changelog-big-illustration_business_es.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/changelog-big-illustration_business_fr.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/changelog-big-illustration_business_nl.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/changelog-big-illustration_business_pt.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/changelog-big-illustration_desktop_mac_de.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/changelog-big-illustration_desktop_mac_en.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/changelog-big-illustration_desktop_mac_es.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/changelog-big-illustration_desktop_mac_fr.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/changelog-big-illustration_desktop_mac_nl.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/changelog-big-illustration_desktop_mac_pt.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/changelog-big-illustration_desktop_windows.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/changelog-big-illustration_desktop_windows_de.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/changelog-big-illustration_desktop_windows_en.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/changelog-big-illustration_libreoffice_en.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/changelog-big-illustration_mobile_de.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/changelog-big-illustration_mobile_en.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/changelog-big-illustration_overleaf.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/changelog-big-illustration_paraphrasing_de.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/changelog-big-illustration_paraphrasing_en.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/changelog-big-illustration_paraphrasing_es.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/changelog-big-illustration_paraphrasing_fr.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/changelog-big-illustration_paraphrasing_nl.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/changelog-big-illustration_paraphrasing_pt.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/changelog-big-illustration_slides.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/changelog-big-illustration_style_guide_de.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/changelog-big-illustration_style_guide_en.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/changelog-big-illustration_style_guide_es.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/changelog-big-illustration_style_guide_fr.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/changelog-big-illustration_style_guide_nl.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/changelog-big-illustration_style_guide_pt.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/changelog-big-illustration_team.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/changelog-big-illustration_thunderbird.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/changelog-big-illustration_word.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/changelog-illustration_app.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/changelog-illustration_editor.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/changelog-illustration_french.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/changelog-illustration_libreoffice.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/changelog-illustration_macos_app.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/changelog-illustration_mobile.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/changelog-illustration_overleaf.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/changelog-illustration_paraphrasing.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/changelog-illustration_slides.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/changelog-illustration_spanish.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/changelog-illustration_style.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/changelog-illustration_style_guide.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/changelog-illustration_team.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/changelog-illustration_thunderbird.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/changelog-illustration_translate.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/changelog-illustration_word.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/changelog-logo.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/changelog-logo_no-claim.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/changelog_2021_style_de.mp4 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/changelog_2021_style_en.mp4 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/changelog_2021_style_es.mp4 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/changelog_2021_style_fr.mp4 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/changelog_icon_lt.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/eu_flag.svg create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/changelog/images/spanish-premium-video.mp4 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/chunks/116.8b7e94.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/chunks/275.f1d017.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/chunks/282.788b18.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/chunks/315.3883be.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/chunks/962.b5d5fd.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/common/base.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/common/fonts.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/common/loadFonts.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/common/smoothscroll.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/content.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/content/editors/google/gdocs-content.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/content/editors/google/gslides-content.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/content/executor.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/content/languagetool/injector.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/content/outlook/content.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/content/safari/injector.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/content/styles/lollipop.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/content/styles/shadow.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/content/styles/styles.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/content/thunderbird/content.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/core/TextFieldV2/ARCHITECTURE.md create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/core/language-detection/language-router.md create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/core/models/segment.xml create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/extension-loader.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/feedbackForm/feedbackForm.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/feedbackForm/feedbackForm.html create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/feedbackForm/feedbackForm.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/libs/segment.srx create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/lollipop/demo.html create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/lollipop/test_cases.html create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/managed_settings.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/manifest.json create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/options/options.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/options/options.html create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/options/options.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/popup/popup.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/popup/popup.html create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/popup/popup.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/react/components/additional-error-suggestion/additional-error-suggestion.tsx create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/react/components/card-base/card-base.tsx create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/react/components/card-base/custom-card-base.tsx create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/react/components/card-base/drag-handle.tsx create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/react/components/card-content/card-content.tsx create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/react/components/countdown/countdown.tsx create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/react/components/diff/diff.tsx create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/react/components/editor-card/custom-editor-card.tsx create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/react/components/editor-card/editor-card.tsx create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/react/components/error-boundary/error-boundary.tsx create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/react/components/error-content/error-content.tsx create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/react/components/fix-sentence-content/fix-sentence-content.tsx create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/react/components/icon/icon.tsx create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/react/components/keyboard-navigation-hint/keyboard-navigation-hint.tsx create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/react/components/keyboard-navigation/keyboard-navigation.tsx create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/react/components/loading-content/loading-content.tsx create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/react/components/mascot-says/mascot-says.tsx create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/react/components/menu/menu.tsx create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/react/components/paraphrasing-content/paraphrasing-content.tsx create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/react/components/rephrase-content/rephrase-content.tsx create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/react/components/rephrasing-teaser/rephrasing-teaser.tsx create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/react/components/scrollable-area/scrollable-area.tsx create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/react/components/sentence-splitting-content/sentence-splitting-content.tsx create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/react/components/synonyms-content/synonyms-content.tsx create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/react/components/toolbox-content/toolbox-content.tsx create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/react/views/editor-card/editor-card.tsx create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/react/views/icon/icon.tsx create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/react/views/menu/menu.tsx create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/toolbox/toolbox.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/toolbox/toolbox.html create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/toolbox/toolbox.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/trial/trial.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/validator/loadValidator.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/validator/validator.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/validator/validator.html create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/validator/validator.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/welcome/loginRedirectUri.html create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/welcome/loginRedirectUri.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/welcome/managedLoginRedirectUri.html create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/welcome/managedLoginRedirectUri.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/welcome/templates/index.html create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/welcome/welcome.css create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Extensions/oldceeleldhonbafppcapldpdifcinji/11.1.0_0/welcome/welcome.js create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Favicons create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Favicons-journal create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Feature Engagement Tracker/AvailabilityDB/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Feature Engagement Tracker/AvailabilityDB/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Feature Engagement Tracker/AvailabilityDB/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Feature Engagement Tracker/EventDB/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Feature Engagement Tracker/EventDB/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Feature Engagement Tracker/EventDB/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/File System/000/t/.usage create mode 100644 net.imput.helium/.config/net.imput.helium/Default/File System/000/t/Paths/000003.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/File System/000/t/Paths/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/File System/000/t/Paths/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/File System/000/t/Paths/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/File System/000/t/Paths/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/File System/001/t/.usage create mode 100644 net.imput.helium/.config/net.imput.helium/Default/File System/001/t/02/00000263 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/File System/001/t/Paths/000003.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/File System/001/t/Paths/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/File System/001/t/Paths/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/File System/001/t/Paths/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/File System/001/t/Paths/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/File System/001/t/Paths/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/File System/002/t/.usage create mode 100644 net.imput.helium/.config/net.imput.helium/Default/File System/002/t/Paths/000003.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/File System/002/t/Paths/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/File System/002/t/Paths/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/File System/002/t/Paths/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/File System/002/t/Paths/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/File System/002/t/Paths/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/File System/003/t/.usage create mode 100644 net.imput.helium/.config/net.imput.helium/Default/File System/003/t/Paths/000003.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/File System/003/t/Paths/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/File System/003/t/Paths/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/File System/003/t/Paths/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/File System/003/t/Paths/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/File System/004/t/.usage create mode 100644 net.imput.helium/.config/net.imput.helium/Default/File System/004/t/Paths/000003.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/File System/004/t/Paths/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/File System/004/t/Paths/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/File System/004/t/Paths/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/File System/004/t/Paths/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/File System/Origins/000003.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/File System/Origins/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/File System/Origins/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/File System/Origins/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/File System/Origins/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/File System/Origins/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/GCM Store/Encryption/000003.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/GCM Store/Encryption/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/GCM Store/Encryption/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/GCM Store/Encryption/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/GCM Store/Encryption/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/GCM Store/Encryption/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/GPUCache/data_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/GPUCache/data_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/GPUCache/data_2 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/GPUCache/data_3 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/GPUCache/index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/History create mode 100644 net.imput.helium/.config/net.imput.helium/Default/History-journal create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/chrome-extension_blockjmkbacgjkknlgpkjjiijinjdanf_0.indexeddb.blob/1/00/10 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/chrome-extension_blockjmkbacgjkknlgpkjjiijinjdanf_0.indexeddb.blob/1/00/11 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/chrome-extension_blockjmkbacgjkknlgpkjjiijinjdanf_0.indexeddb.blob/1/00/12 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/chrome-extension_blockjmkbacgjkknlgpkjjiijinjdanf_0.indexeddb.blob/1/00/13 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/chrome-extension_blockjmkbacgjkknlgpkjjiijinjdanf_0.indexeddb.blob/1/00/14 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/chrome-extension_blockjmkbacgjkknlgpkjjiijinjdanf_0.indexeddb.blob/1/00/15 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/chrome-extension_blockjmkbacgjkknlgpkjjiijinjdanf_0.indexeddb.blob/1/00/16 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/chrome-extension_blockjmkbacgjkknlgpkjjiijinjdanf_0.indexeddb.blob/1/00/17 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/chrome-extension_blockjmkbacgjkknlgpkjjiijinjdanf_0.indexeddb.blob/1/00/18 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/chrome-extension_blockjmkbacgjkknlgpkjjiijinjdanf_0.indexeddb.blob/1/00/19 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/chrome-extension_blockjmkbacgjkknlgpkjjiijinjdanf_0.indexeddb.blob/1/00/1a create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/chrome-extension_blockjmkbacgjkknlgpkjjiijinjdanf_0.indexeddb.blob/1/00/1b create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/chrome-extension_blockjmkbacgjkknlgpkjjiijinjdanf_0.indexeddb.blob/1/00/1c create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/chrome-extension_blockjmkbacgjkknlgpkjjiijinjdanf_0.indexeddb.blob/1/00/1d create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/chrome-extension_blockjmkbacgjkknlgpkjjiijinjdanf_0.indexeddb.blob/1/00/4 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/chrome-extension_blockjmkbacgjkknlgpkjjiijinjdanf_0.indexeddb.blob/1/00/a8 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/chrome-extension_blockjmkbacgjkknlgpkjjiijinjdanf_0.indexeddb.blob/1/00/c create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/chrome-extension_blockjmkbacgjkknlgpkjjiijinjdanf_0.indexeddb.blob/1/00/d create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/chrome-extension_blockjmkbacgjkknlgpkjjiijinjdanf_0.indexeddb.blob/1/00/e create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/chrome-extension_blockjmkbacgjkknlgpkjjiijinjdanf_0.indexeddb.blob/1/00/f create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/chrome-extension_blockjmkbacgjkknlgpkjjiijinjdanf_0.indexeddb.blob/1/01/140 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/chrome-extension_blockjmkbacgjkknlgpkjjiijinjdanf_0.indexeddb.blob/1/01/162 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/chrome-extension_blockjmkbacgjkknlgpkjjiijinjdanf_0.indexeddb.blob/1/01/174 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/chrome-extension_blockjmkbacgjkknlgpkjjiijinjdanf_0.indexeddb.blob/1/01/18a create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/chrome-extension_blockjmkbacgjkknlgpkjjiijinjdanf_0.indexeddb.blob/1/01/18b create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/chrome-extension_blockjmkbacgjkknlgpkjjiijinjdanf_0.indexeddb.blob/1/01/18c create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/chrome-extension_blockjmkbacgjkknlgpkjjiijinjdanf_0.indexeddb.blob/1/01/18d create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/chrome-extension_blockjmkbacgjkknlgpkjjiijinjdanf_0.indexeddb.blob/1/01/18e create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/chrome-extension_blockjmkbacgjkknlgpkjjiijinjdanf_0.indexeddb.blob/1/01/18f create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/chrome-extension_blockjmkbacgjkknlgpkjjiijinjdanf_0.indexeddb.blob/1/01/190 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/chrome-extension_blockjmkbacgjkknlgpkjjiijinjdanf_0.indexeddb.blob/1/01/191 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/chrome-extension_blockjmkbacgjkknlgpkjjiijinjdanf_0.indexeddb.blob/1/01/192 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/chrome-extension_blockjmkbacgjkknlgpkjjiijinjdanf_0.indexeddb.blob/1/01/193 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/chrome-extension_blockjmkbacgjkknlgpkjjiijinjdanf_0.indexeddb.blob/1/01/194 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/chrome-extension_blockjmkbacgjkknlgpkjjiijinjdanf_0.indexeddb.blob/1/01/195 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/chrome-extension_blockjmkbacgjkknlgpkjjiijinjdanf_0.indexeddb.blob/1/01/1a1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/chrome-extension_blockjmkbacgjkknlgpkjjiijinjdanf_0.indexeddb.blob/1/01/1aa create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/chrome-extension_blockjmkbacgjkknlgpkjjiijinjdanf_0.indexeddb.blob/1/01/1ad create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/chrome-extension_blockjmkbacgjkknlgpkjjiijinjdanf_0.indexeddb.blob/1/01/1ae create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/chrome-extension_blockjmkbacgjkknlgpkjjiijinjdanf_0.indexeddb.blob/1/01/1af create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/chrome-extension_blockjmkbacgjkknlgpkjjiijinjdanf_0.indexeddb.blob/1/01/1b0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/chrome-extension_blockjmkbacgjkknlgpkjjiijinjdanf_0.indexeddb.blob/1/01/1b1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/chrome-extension_blockjmkbacgjkknlgpkjjiijinjdanf_0.indexeddb.leveldb/000030.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/chrome-extension_blockjmkbacgjkknlgpkjjiijinjdanf_0.indexeddb.leveldb/000033.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/chrome-extension_blockjmkbacgjkknlgpkjjiijinjdanf_0.indexeddb.leveldb/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/chrome-extension_blockjmkbacgjkknlgpkjjiijinjdanf_0.indexeddb.leveldb/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/chrome-extension_blockjmkbacgjkknlgpkjjiijinjdanf_0.indexeddb.leveldb/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/chrome-extension_blockjmkbacgjkknlgpkjjiijinjdanf_0.indexeddb.leveldb/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/chrome-extension_blockjmkbacgjkknlgpkjjiijinjdanf_0.indexeddb.leveldb/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/chrome-extension_nljkibfhlpcnanjgbnlnbjecgicbjkge_0.indexeddb.leveldb/000011.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/chrome-extension_nljkibfhlpcnanjgbnlnbjecgicbjkge_0.indexeddb.leveldb/000013.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/chrome-extension_nljkibfhlpcnanjgbnlnbjecgicbjkge_0.indexeddb.leveldb/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/chrome-extension_nljkibfhlpcnanjgbnlnbjecgicbjkge_0.indexeddb.leveldb/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/chrome-extension_nljkibfhlpcnanjgbnlnbjecgicbjkge_0.indexeddb.leveldb/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/chrome-extension_nljkibfhlpcnanjgbnlnbjecgicbjkge_0.indexeddb.leveldb/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/chrome-extension_nljkibfhlpcnanjgbnlnbjecgicbjkge_0.indexeddb.leveldb/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_account.proton.me_0.indexeddb.blob/2/00/b create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_account.proton.me_0.indexeddb.leveldb/000004.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_account.proton.me_0.indexeddb.leveldb/000005.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_account.proton.me_0.indexeddb.leveldb/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_account.proton.me_0.indexeddb.leveldb/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_account.proton.me_0.indexeddb.leveldb/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_account.proton.me_0.indexeddb.leveldb/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_account.proton.me_0.indexeddb.leveldb/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_age-verification.privateid.com_0.indexeddb.blob/1/00/2 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_age-verification.privateid.com_0.indexeddb.leveldb/000004.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_age-verification.privateid.com_0.indexeddb.leveldb/000005.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_age-verification.privateid.com_0.indexeddb.leveldb/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_age-verification.privateid.com_0.indexeddb.leveldb/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_age-verification.privateid.com_0.indexeddb.leveldb/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_age-verification.privateid.com_0.indexeddb.leveldb/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_app.tuta.com_0.indexeddb.blob/3/00/3 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_app.tuta.com_0.indexeddb.leveldb/000014.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_app.tuta.com_0.indexeddb.leveldb/000016.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_app.tuta.com_0.indexeddb.leveldb/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_app.tuta.com_0.indexeddb.leveldb/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_app.tuta.com_0.indexeddb.leveldb/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_app.tuta.com_0.indexeddb.leveldb/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_app.tuta.com_0.indexeddb.leveldb/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_calendar.google.com_0.indexeddb.leveldb/000003.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_calendar.google.com_0.indexeddb.leveldb/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_calendar.google.com_0.indexeddb.leveldb/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_calendar.google.com_0.indexeddb.leveldb/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_calendar.google.com_0.indexeddb.leveldb/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_calendar.google.com_0.indexeddb.leveldb/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_calendar.proton.me_0.indexeddb.blob/1/00/b create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_calendar.proton.me_0.indexeddb.leveldb/000004.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_calendar.proton.me_0.indexeddb.leveldb/000005.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_calendar.proton.me_0.indexeddb.leveldb/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_calendar.proton.me_0.indexeddb.leveldb/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_calendar.proton.me_0.indexeddb.leveldb/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_calendar.proton.me_0.indexeddb.leveldb/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_calendar.proton.me_0.indexeddb.leveldb/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_chat.routstr.com_0.indexeddb.leveldb/000003.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_chat.routstr.com_0.indexeddb.leveldb/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_chat.routstr.com_0.indexeddb.leveldb/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_chat.routstr.com_0.indexeddb.leveldb/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_chat.routstr.com_0.indexeddb.leveldb/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_claude.ai_0.indexeddb.leveldb/000004.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_claude.ai_0.indexeddb.leveldb/000005.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_claude.ai_0.indexeddb.leveldb/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_claude.ai_0.indexeddb.leveldb/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_claude.ai_0.indexeddb.leveldb/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_claude.ai_0.indexeddb.leveldb/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_claude.ai_0.indexeddb.leveldb/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_docs.google.com_0.indexeddb.leveldb/000004.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_docs.google.com_0.indexeddb.leveldb/000005.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_docs.google.com_0.indexeddb.leveldb/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_docs.google.com_0.indexeddb.leveldb/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_docs.google.com_0.indexeddb.leveldb/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_docs.google.com_0.indexeddb.leveldb/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_docs.google.com_0.indexeddb.leveldb/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_drive.google.com_0.indexeddb.blob/1/00/8 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_drive.google.com_0.indexeddb.blob/1/00/9 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_drive.google.com_0.indexeddb.leveldb/000004.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_drive.google.com_0.indexeddb.leveldb/000005.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_drive.google.com_0.indexeddb.leveldb/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_drive.google.com_0.indexeddb.leveldb/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_drive.google.com_0.indexeddb.leveldb/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_drive.google.com_0.indexeddb.leveldb/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_duck.ai_0.indexeddb.blob/1/00/2 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_duck.ai_0.indexeddb.blob/1/00/3 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_duck.ai_0.indexeddb.blob/1/00/4 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_duck.ai_0.indexeddb.blob/1/00/5 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_duck.ai_0.indexeddb.blob/1/00/6 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_duck.ai_0.indexeddb.leveldb/000011.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_duck.ai_0.indexeddb.leveldb/000013.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_duck.ai_0.indexeddb.leveldb/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_duck.ai_0.indexeddb.leveldb/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_duck.ai_0.indexeddb.leveldb/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_duck.ai_0.indexeddb.leveldb/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_duck.ai_0.indexeddb.leveldb/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_github.com_0.indexeddb.leveldb/000007.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_github.com_0.indexeddb.leveldb/000009.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_github.com_0.indexeddb.leveldb/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_github.com_0.indexeddb.leveldb/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_github.com_0.indexeddb.leveldb/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_github.com_0.indexeddb.leveldb/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_github.com_0.indexeddb.leveldb/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_grainrad.com_0.indexeddb.leveldb/000003.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_grainrad.com_0.indexeddb.leveldb/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_grainrad.com_0.indexeddb.leveldb/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_grainrad.com_0.indexeddb.leveldb/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_grainrad.com_0.indexeddb.leveldb/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_grainrad.com_0.indexeddb.leveldb/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_habr.com_0.indexeddb.leveldb/000007.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_habr.com_0.indexeddb.leveldb/000009.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_habr.com_0.indexeddb.leveldb/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_habr.com_0.indexeddb.leveldb/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_habr.com_0.indexeddb.leveldb/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_habr.com_0.indexeddb.leveldb/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_habr.com_0.indexeddb.leveldb/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_lethal-company.fandom.com_0.indexeddb.leveldb/000003.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_lethal-company.fandom.com_0.indexeddb.leveldb/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_lethal-company.fandom.com_0.indexeddb.leveldb/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_lethal-company.fandom.com_0.indexeddb.leveldb/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_lethal-company.fandom.com_0.indexeddb.leveldb/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_lumo.proton.me_0.indexeddb.blob/1/03/304 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_lumo.proton.me_0.indexeddb.blob/3/00/11 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_lumo.proton.me_0.indexeddb.blob/3/00/13 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_lumo.proton.me_0.indexeddb.blob/3/00/15 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_lumo.proton.me_0.indexeddb.blob/3/00/17 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_lumo.proton.me_0.indexeddb.blob/3/00/19 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_lumo.proton.me_0.indexeddb.blob/3/00/1b create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_lumo.proton.me_0.indexeddb.blob/3/00/1d create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_lumo.proton.me_0.indexeddb.blob/3/00/1f create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_lumo.proton.me_0.indexeddb.blob/3/00/21 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_lumo.proton.me_0.indexeddb.blob/3/00/23 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_lumo.proton.me_0.indexeddb.blob/3/00/25 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_lumo.proton.me_0.indexeddb.blob/3/00/27 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_lumo.proton.me_0.indexeddb.blob/3/00/29 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_lumo.proton.me_0.indexeddb.blob/3/00/2b create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_lumo.proton.me_0.indexeddb.blob/3/00/2d create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_lumo.proton.me_0.indexeddb.blob/3/00/2f create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_lumo.proton.me_0.indexeddb.blob/3/00/3 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_lumo.proton.me_0.indexeddb.blob/3/00/31 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_lumo.proton.me_0.indexeddb.blob/3/00/33 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_lumo.proton.me_0.indexeddb.blob/3/00/35 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_lumo.proton.me_0.indexeddb.blob/3/00/5 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_lumo.proton.me_0.indexeddb.blob/3/00/7 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_lumo.proton.me_0.indexeddb.blob/3/00/9 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_lumo.proton.me_0.indexeddb.blob/3/00/b create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_lumo.proton.me_0.indexeddb.blob/3/00/d create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_lumo.proton.me_0.indexeddb.blob/3/00/f create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_lumo.proton.me_0.indexeddb.blob/3/00/ff create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_lumo.proton.me_0.indexeddb.blob/3/02/28f create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_lumo.proton.me_0.indexeddb.blob/3/07/73c create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_lumo.proton.me_0.indexeddb.blob/3/08/8ce create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_lumo.proton.me_0.indexeddb.blob/3/09/996 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_lumo.proton.me_0.indexeddb.leveldb/000862.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_lumo.proton.me_0.indexeddb.leveldb/000864.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_lumo.proton.me_0.indexeddb.leveldb/000865.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_lumo.proton.me_0.indexeddb.leveldb/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_lumo.proton.me_0.indexeddb.leveldb/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_lumo.proton.me_0.indexeddb.leveldb/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_lumo.proton.me_0.indexeddb.leveldb/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_lumo.proton.me_0.indexeddb.leveldb/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_mail.google.com_0.indexeddb.leveldb/000004.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_mail.google.com_0.indexeddb.leveldb/000005.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_mail.google.com_0.indexeddb.leveldb/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_mail.google.com_0.indexeddb.leveldb/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_mail.google.com_0.indexeddb.leveldb/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_mail.google.com_0.indexeddb.leveldb/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_mail.google.com_0.indexeddb.leveldb/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_mail.proton.me_0.indexeddb.blob/1/00/17 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_mail.proton.me_0.indexeddb.leveldb/000012.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_mail.proton.me_0.indexeddb.leveldb/000044.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_mail.proton.me_0.indexeddb.leveldb/000046.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_mail.proton.me_0.indexeddb.leveldb/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_mail.proton.me_0.indexeddb.leveldb/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_mail.proton.me_0.indexeddb.leveldb/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_mail.proton.me_0.indexeddb.leveldb/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_mail.proton.me_0.indexeddb.leveldb/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_mynixos.com_0.indexeddb.blob/4/00/2 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_mynixos.com_0.indexeddb.leveldb/000004.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_mynixos.com_0.indexeddb.leveldb/000005.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_mynixos.com_0.indexeddb.leveldb/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_mynixos.com_0.indexeddb.leveldb/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_mynixos.com_0.indexeddb.leveldb/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_mynixos.com_0.indexeddb.leveldb/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_novelai.net_0.indexeddb.leveldb/000004.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_novelai.net_0.indexeddb.leveldb/000005.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_novelai.net_0.indexeddb.leveldb/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_novelai.net_0.indexeddb.leveldb/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_novelai.net_0.indexeddb.leveldb/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_novelai.net_0.indexeddb.leveldb/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_novelai.net_0.indexeddb.leveldb/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_openrouter.ai_0.indexeddb.leveldb/000004.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_openrouter.ai_0.indexeddb.leveldb/000005.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_openrouter.ai_0.indexeddb.leveldb/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_openrouter.ai_0.indexeddb.leveldb/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_openrouter.ai_0.indexeddb.leveldb/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_openrouter.ai_0.indexeddb.leveldb/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_payments.coinbase.com_0.indexeddb.leveldb/000004.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_payments.coinbase.com_0.indexeddb.leveldb/000005.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_payments.coinbase.com_0.indexeddb.leveldb/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_payments.coinbase.com_0.indexeddb.leveldb/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_payments.coinbase.com_0.indexeddb.leveldb/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_payments.coinbase.com_0.indexeddb.leveldb/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_payments.coinbase.com_0.indexeddb.leveldb/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_speed.cloudflare.com_0.indexeddb.leveldb/000003.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_speed.cloudflare.com_0.indexeddb.leveldb/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_speed.cloudflare.com_0.indexeddb.leveldb/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_speed.cloudflare.com_0.indexeddb.leveldb/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_speed.cloudflare.com_0.indexeddb.leveldb/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_spotubedl.com_0.indexeddb.blob/1/00/2 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_spotubedl.com_0.indexeddb.leveldb/000003.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_spotubedl.com_0.indexeddb.leveldb/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_spotubedl.com_0.indexeddb.leveldb/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_spotubedl.com_0.indexeddb.leveldb/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_spotubedl.com_0.indexeddb.leveldb/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_spotubedl.com_0.indexeddb.leveldb/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/1/00/cf create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/10 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/11 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/12 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/13 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/14 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/15 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/16 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/17 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/18 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/19 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/1a create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/1b create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/1c create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/1d create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/1e create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/1f create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/2 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/20 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/21 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/22 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/23 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/24 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/25 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/26 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/27 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/28 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/29 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/2a create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/2b create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/2c create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/2d create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/2e create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/2f create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/3 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/30 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/31 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/32 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/33 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/34 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/35 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/36 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/37 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/38 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/39 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/3a create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/3b create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/3c create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/3d create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/3e create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/3f create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/4 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/40 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/41 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/42 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/43 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/44 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/45 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/46 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/47 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/48 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/49 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/4a create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/4b create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/4c create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/4d create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/4e create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/4f create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/5 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/50 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/51 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/52 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/53 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/54 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/55 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/56 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/57 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/58 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/59 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/5a create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/5b create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/5c create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/5d create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/5e create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/5f create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/6 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/60 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/61 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/62 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/63 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/64 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/66 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/67 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/68 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/69 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/6a create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/6b create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/6c create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/6d create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/6e create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/6f create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/7 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/70 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/71 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/72 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/73 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/74 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/75 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/76 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/77 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/78 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/79 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/7a create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/7b create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/7c create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/7d create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/7e create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/7f create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/8 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/80 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/81 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/82 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/83 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/84 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/85 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/86 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/87 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/88 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/89 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/8a create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/8b create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/8c create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/8d create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/8e create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/8f create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/9 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/90 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/91 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/92 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/93 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/94 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/95 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/96 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/97 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/98 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/9a create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/9b create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/9c create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/9d create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/9e create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/a create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/b create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/c create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/d create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/e create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.blob/2/00/f create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.leveldb/000004.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.leveldb/000005.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.leveldb/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.leveldb/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.leveldb/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_windows93.net_0.indexeddb.leveldb/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_www.avito.ru_0.indexeddb.leveldb/000006.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_www.avito.ru_0.indexeddb.leveldb/000008.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_www.avito.ru_0.indexeddb.leveldb/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_www.avito.ru_0.indexeddb.leveldb/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_www.avito.ru_0.indexeddb.leveldb/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_www.avito.ru_0.indexeddb.leveldb/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_www.cosmopolitan.com_0.indexeddb.leveldb/000004.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_www.cosmopolitan.com_0.indexeddb.leveldb/000005.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_www.cosmopolitan.com_0.indexeddb.leveldb/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_www.cosmopolitan.com_0.indexeddb.leveldb/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_www.cosmopolitan.com_0.indexeddb.leveldb/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_www.cosmopolitan.com_0.indexeddb.leveldb/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_www.fandom.com_0.indexeddb.leveldb/000003.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_www.fandom.com_0.indexeddb.leveldb/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_www.fandom.com_0.indexeddb.leveldb/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_www.fandom.com_0.indexeddb.leveldb/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_www.fandom.com_0.indexeddb.leveldb/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_www.fandom.com_0.indexeddb.leveldb/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_www.kimi.com_0.indexeddb.leveldb/000003.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_www.kimi.com_0.indexeddb.leveldb/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_www.kimi.com_0.indexeddb.leveldb/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_www.kimi.com_0.indexeddb.leveldb/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_www.kimi.com_0.indexeddb.leveldb/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_www.kimi.com_0.indexeddb.leveldb/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_www.kucoin.com_0.indexeddb.blob/2/00/3 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_www.kucoin.com_0.indexeddb.blob/2/00/5 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_www.kucoin.com_0.indexeddb.leveldb/000003.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_www.kucoin.com_0.indexeddb.leveldb/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_www.kucoin.com_0.indexeddb.leveldb/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_www.kucoin.com_0.indexeddb.leveldb/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_www.kucoin.com_0.indexeddb.leveldb/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_www.ozon.ru_0.indexeddb.leveldb/000018.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_www.ozon.ru_0.indexeddb.leveldb/000020.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_www.ozon.ru_0.indexeddb.leveldb/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_www.ozon.ru_0.indexeddb.leveldb/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_www.ozon.ru_0.indexeddb.leveldb/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_www.ozon.ru_0.indexeddb.leveldb/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_www.ozon.ru_0.indexeddb.leveldb/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_www.pinterest.com_0.indexeddb.leveldb/000055.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_www.pinterest.com_0.indexeddb.leveldb/000057.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_www.pinterest.com_0.indexeddb.leveldb/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_www.pinterest.com_0.indexeddb.leveldb/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_www.pinterest.com_0.indexeddb.leveldb/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_www.pinterest.com_0.indexeddb.leveldb/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_www.pinterest.com_0.indexeddb.leveldb/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_www.speedtest.net_0.indexeddb.leveldb/000056.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_www.speedtest.net_0.indexeddb.leveldb/000059.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_www.speedtest.net_0.indexeddb.leveldb/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_www.speedtest.net_0.indexeddb.leveldb/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_www.speedtest.net_0.indexeddb.leveldb/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_www.speedtest.net_0.indexeddb.leveldb/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_www.youtube.com_0.indexeddb.blob/16/00/10 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_www.youtube.com_0.indexeddb.leveldb/000137.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_www.youtube.com_0.indexeddb.leveldb/000138.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_www.youtube.com_0.indexeddb.leveldb/000139.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_www.youtube.com_0.indexeddb.leveldb/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_www.youtube.com_0.indexeddb.leveldb/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_www.youtube.com_0.indexeddb.leveldb/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_www.youtube.com_0.indexeddb.leveldb/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/IndexedDB/https_www.youtube.com_0.indexeddb.leveldb/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/blockjmkbacgjkknlgpkjjiijinjdanf/001261.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/blockjmkbacgjkknlgpkjjiijinjdanf/001262.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/blockjmkbacgjkknlgpkjjiijinjdanf/001263.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/blockjmkbacgjkknlgpkjjiijinjdanf/001264.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/blockjmkbacgjkknlgpkjjiijinjdanf/001265.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/blockjmkbacgjkknlgpkjjiijinjdanf/001266.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/blockjmkbacgjkknlgpkjjiijinjdanf/001267.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/blockjmkbacgjkknlgpkjjiijinjdanf/001268.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/blockjmkbacgjkknlgpkjjiijinjdanf/001269.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/blockjmkbacgjkknlgpkjjiijinjdanf/001271.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/blockjmkbacgjkknlgpkjjiijinjdanf/001272.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/blockjmkbacgjkknlgpkjjiijinjdanf/001273.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/blockjmkbacgjkknlgpkjjiijinjdanf/001274.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/blockjmkbacgjkknlgpkjjiijinjdanf/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/blockjmkbacgjkknlgpkjjiijinjdanf/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/blockjmkbacgjkknlgpkjjiijinjdanf/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/blockjmkbacgjkknlgpkjjiijinjdanf/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/blockjmkbacgjkknlgpkjjiijinjdanf/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/eimadpbcbfnmbkopoojfekhnkhdbieeh/000005.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/eimadpbcbfnmbkopoojfekhnkhdbieeh/000027.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/eimadpbcbfnmbkopoojfekhnkhdbieeh/000028.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/eimadpbcbfnmbkopoojfekhnkhdbieeh/000029.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/eimadpbcbfnmbkopoojfekhnkhdbieeh/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/eimadpbcbfnmbkopoojfekhnkhdbieeh/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/eimadpbcbfnmbkopoojfekhnkhdbieeh/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/eimadpbcbfnmbkopoojfekhnkhdbieeh/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/eimadpbcbfnmbkopoojfekhnkhdbieeh/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/fgmjlmbojbkmdpofahffgcpkhkngfpef/000003.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/fgmjlmbojbkmdpofahffgcpkhkngfpef/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/fgmjlmbojbkmdpofahffgcpkhkngfpef/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/fgmjlmbojbkmdpofahffgcpkhkngfpef/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/fgmjlmbojbkmdpofahffgcpkhkngfpef/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/fgmjlmbojbkmdpofahffgcpkhkngfpef/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/fhkphphbadjkepgfljndicmgdlndmoke/000003.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/fhkphphbadjkepgfljndicmgdlndmoke/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/fhkphphbadjkepgfljndicmgdlndmoke/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/fhkphphbadjkepgfljndicmgdlndmoke/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/fhkphphbadjkepgfljndicmgdlndmoke/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/fhkphphbadjkepgfljndicmgdlndmoke/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/fjkmabmdepjfammlpliljpnbhleegehm/000003.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/fjkmabmdepjfammlpliljpnbhleegehm/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/fjkmabmdepjfammlpliljpnbhleegehm/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/fjkmabmdepjfammlpliljpnbhleegehm/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/fjkmabmdepjfammlpliljpnbhleegehm/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/fjkmabmdepjfammlpliljpnbhleegehm/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/ghmbeldphafepmbegfdlkpapadhbakde/000005.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/ghmbeldphafepmbegfdlkpapadhbakde/000272.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/ghmbeldphafepmbegfdlkpapadhbakde/000274.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/ghmbeldphafepmbegfdlkpapadhbakde/000275.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/ghmbeldphafepmbegfdlkpapadhbakde/000276.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/ghmbeldphafepmbegfdlkpapadhbakde/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/ghmbeldphafepmbegfdlkpapadhbakde/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/ghmbeldphafepmbegfdlkpapadhbakde/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/ghmbeldphafepmbegfdlkpapadhbakde/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/ghmbeldphafepmbegfdlkpapadhbakde/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/lanfdkkpgfjfdikkncbnojekcppdebfp/000003.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/lanfdkkpgfjfdikkncbnojekcppdebfp/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/lanfdkkpgfjfdikkncbnojekcppdebfp/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/lanfdkkpgfjfdikkncbnojekcppdebfp/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/lanfdkkpgfjfdikkncbnojekcppdebfp/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/lanfdkkpgfjfdikkncbnojekcppdebfp/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/nljkibfhlpcnanjgbnlnbjecgicbjkge/000003.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/nljkibfhlpcnanjgbnlnbjecgicbjkge/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/nljkibfhlpcnanjgbnlnbjecgicbjkge/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/nljkibfhlpcnanjgbnlnbjecgicbjkge/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/nljkibfhlpcnanjgbnlnbjecgicbjkge/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/nljkibfhlpcnanjgbnlnbjecgicbjkge/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/oboonakemofpalcgghocfoadofidjkkk/000003.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/oboonakemofpalcgghocfoadofidjkkk/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/oboonakemofpalcgghocfoadofidjkkk/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/oboonakemofpalcgghocfoadofidjkkk/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/oboonakemofpalcgghocfoadofidjkkk/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/oboonakemofpalcgghocfoadofidjkkk/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/ogfcmafjalglgifnmanfmnieipoejdcf/000003.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/ogfcmafjalglgifnmanfmnieipoejdcf/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/ogfcmafjalglgifnmanfmnieipoejdcf/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/ogfcmafjalglgifnmanfmnieipoejdcf/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/ogfcmafjalglgifnmanfmnieipoejdcf/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/ogfcmafjalglgifnmanfmnieipoejdcf/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/oladmjdebphlnjjcnomfhhbfdldiimaf/000003.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/oladmjdebphlnjjcnomfhhbfdldiimaf/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/oladmjdebphlnjjcnomfhhbfdldiimaf/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/oladmjdebphlnjjcnomfhhbfdldiimaf/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/oladmjdebphlnjjcnomfhhbfdldiimaf/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/oladmjdebphlnjjcnomfhhbfdldiimaf/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/oldceeleldhonbafppcapldpdifcinji/000003.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/oldceeleldhonbafppcapldpdifcinji/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/oldceeleldhonbafppcapldpdifcinji/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/oldceeleldhonbafppcapldpdifcinji/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/oldceeleldhonbafppcapldpdifcinji/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/oldceeleldhonbafppcapldpdifcinji/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/olnbjpaejebpnokblkepbphhembdicik/000003.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/olnbjpaejebpnokblkepbphhembdicik/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/olnbjpaejebpnokblkepbphhembdicik/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/olnbjpaejebpnokblkepbphhembdicik/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/olnbjpaejebpnokblkepbphhembdicik/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Extension Settings/olnbjpaejebpnokblkepbphhembdicik/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Storage/leveldb/000005.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Storage/leveldb/001192.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Storage/leveldb/001193.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Storage/leveldb/001195.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Storage/leveldb/001197.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Storage/leveldb/001199.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Storage/leveldb/001200.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Storage/leveldb/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Storage/leveldb/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Storage/leveldb/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Storage/leveldb/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Local Storage/leveldb/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Login Data create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Login Data For Account create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Login Data For Account-journal create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Login Data-journal create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Managed Extension Settings/blockjmkbacgjkknlgpkjjiijinjdanf/000003.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Managed Extension Settings/blockjmkbacgjkknlgpkjjiijinjdanf/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Managed Extension Settings/blockjmkbacgjkknlgpkjjiijinjdanf/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Managed Extension Settings/blockjmkbacgjkknlgpkjjiijinjdanf/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Managed Extension Settings/blockjmkbacgjkknlgpkjjiijinjdanf/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Managed Extension Settings/blockjmkbacgjkknlgpkjjiijinjdanf/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Managed Extension Settings/oboonakemofpalcgghocfoadofidjkkk/000003.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Managed Extension Settings/oboonakemofpalcgghocfoadofidjkkk/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Managed Extension Settings/oboonakemofpalcgghocfoadofidjkkk/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Managed Extension Settings/oboonakemofpalcgghocfoadofidjkkk/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Managed Extension Settings/oboonakemofpalcgghocfoadofidjkkk/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Managed Extension Settings/oboonakemofpalcgghocfoadofidjkkk/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Managed Extension Settings/oldceeleldhonbafppcapldpdifcinji/000003.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Managed Extension Settings/oldceeleldhonbafppcapldpdifcinji/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Managed Extension Settings/oldceeleldhonbafppcapldpdifcinji/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Managed Extension Settings/oldceeleldhonbafppcapldpdifcinji/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Managed Extension Settings/oldceeleldhonbafppcapldpdifcinji/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Managed Extension Settings/oldceeleldhonbafppcapldpdifcinji/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/MediaDeviceSalts create mode 100644 net.imput.helium/.config/net.imput.helium/Default/MediaDeviceSalts-journal create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Network Action Predictor create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Network Action Predictor-journal create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Network Persistent State create mode 100644 net.imput.helium/.config/net.imput.helium/Default/PersistentOriginTrials/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/PersistentOriginTrials/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/PersistentOriginTrials/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Platform Notifications/000003.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Platform Notifications/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Platform Notifications/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Platform Notifications/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Platform Notifications/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Platform Notifications/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Preferences create mode 100644 net.imput.helium/.config/net.imput.helium/Default/PreferredApps create mode 100644 net.imput.helium/.config/net.imput.helium/Default/README create mode 100644 net.imput.helium/.config/net.imput.helium/Default/SCT Auditing Pending Reports create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Secure Preferences create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Segmentation Platform/SegmentInfoDB/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Segmentation Platform/SegmentInfoDB/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Segmentation Platform/SegmentInfoDB/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Segmentation Platform/SignalDB/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Segmentation Platform/SignalDB/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Segmentation Platform/SignalDB/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Segmentation Platform/SignalStorageConfigDB/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Segmentation Platform/SignalStorageConfigDB/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Segmentation Platform/SignalStorageConfigDB/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/ServerCertificate create mode 100644 net.imput.helium/.config/net.imput.helium/Default/ServerCertificate-journal create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/1a75bb76ea611cabb3ee208f76ac29ed92da7628/167ac202-830b-4cc9-823a-c0eef551d304/5d38329751e8525d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/1a75bb76ea611cabb3ee208f76ac29ed92da7628/167ac202-830b-4cc9-823a-c0eef551d304/index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/1a75bb76ea611cabb3ee208f76ac29ed92da7628/167ac202-830b-4cc9-823a-c0eef551d304/index-dir/the-real-index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/1a75bb76ea611cabb3ee208f76ac29ed92da7628/index.txt create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/307036ff5f5516e69dade2dcde70907db17381a0/ca2b8576-224d-4751-85f1-ceb55d54a591/index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/307036ff5f5516e69dade2dcde70907db17381a0/ca2b8576-224d-4751-85f1-ceb55d54a591/index-dir/the-real-index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/307036ff5f5516e69dade2dcde70907db17381a0/index.txt create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/70c13bf7-078b-4e9c-ba3b-5f9bf375ae96/index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/70c13bf7-078b-4e9c-ba3b-5f9bf375ae96/index-dir/the-real-index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/754e3171-62ad-49e1-9eb1-5b252d428161/075aeca7e556c651_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/754e3171-62ad-49e1-9eb1-5b252d428161/075aeca7e556c651_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/754e3171-62ad-49e1-9eb1-5b252d428161/0a41c5226f4ea45c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/754e3171-62ad-49e1-9eb1-5b252d428161/0fc09f38b2295ac0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/754e3171-62ad-49e1-9eb1-5b252d428161/0fc09f38b2295ac0_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/754e3171-62ad-49e1-9eb1-5b252d428161/1f3240a2dd73eca6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/754e3171-62ad-49e1-9eb1-5b252d428161/1f3240a2dd73eca6_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/754e3171-62ad-49e1-9eb1-5b252d428161/2932e1153c64eb30_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/754e3171-62ad-49e1-9eb1-5b252d428161/35dcfa5da122dc3f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/754e3171-62ad-49e1-9eb1-5b252d428161/35dcfa5da122dc3f_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/754e3171-62ad-49e1-9eb1-5b252d428161/44acd6df7b0f6c29_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/754e3171-62ad-49e1-9eb1-5b252d428161/48234e7037907372_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/754e3171-62ad-49e1-9eb1-5b252d428161/48234e7037907372_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/754e3171-62ad-49e1-9eb1-5b252d428161/61bbe64726f600d2_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/754e3171-62ad-49e1-9eb1-5b252d428161/61bbe64726f600d2_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/754e3171-62ad-49e1-9eb1-5b252d428161/6be34d05411f8a58_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/754e3171-62ad-49e1-9eb1-5b252d428161/6be34d05411f8a58_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/754e3171-62ad-49e1-9eb1-5b252d428161/80dca37114654a65_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/754e3171-62ad-49e1-9eb1-5b252d428161/80dca37114654a65_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/754e3171-62ad-49e1-9eb1-5b252d428161/8300925a06792860_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/754e3171-62ad-49e1-9eb1-5b252d428161/8300925a06792860_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/754e3171-62ad-49e1-9eb1-5b252d428161/846f31c2d5d83610_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/754e3171-62ad-49e1-9eb1-5b252d428161/846f31c2d5d83610_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/754e3171-62ad-49e1-9eb1-5b252d428161/a23df982d61b6504_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/754e3171-62ad-49e1-9eb1-5b252d428161/a23df982d61b6504_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/754e3171-62ad-49e1-9eb1-5b252d428161/a9e53d396796cb16_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/754e3171-62ad-49e1-9eb1-5b252d428161/c037cc6d848ee571_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/754e3171-62ad-49e1-9eb1-5b252d428161/c548304d03e754fa_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/754e3171-62ad-49e1-9eb1-5b252d428161/c548304d03e754fa_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/754e3171-62ad-49e1-9eb1-5b252d428161/c6b55a8840308240_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/754e3171-62ad-49e1-9eb1-5b252d428161/c6b55a8840308240_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/754e3171-62ad-49e1-9eb1-5b252d428161/cf370ffc2f4673ee_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/754e3171-62ad-49e1-9eb1-5b252d428161/cf370ffc2f4673ee_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/754e3171-62ad-49e1-9eb1-5b252d428161/da12145b12f3c5e5_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/754e3171-62ad-49e1-9eb1-5b252d428161/de9318660da488d9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/754e3171-62ad-49e1-9eb1-5b252d428161/de9318660da488d9_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/754e3171-62ad-49e1-9eb1-5b252d428161/e293b17b64b4e482_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/754e3171-62ad-49e1-9eb1-5b252d428161/index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/754e3171-62ad-49e1-9eb1-5b252d428161/index-dir/the-real-index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/00ba5fc263b59bcc_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/0222ffa3c71a476b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/027c813f28eb3d53_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/02ce44654c978c4c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/04babee2bfa8b48c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/06c49d2fa0ad4bcd_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/08000439b4130129_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/0b3bd81b114681fa_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/0b8c705721509f10_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/0db7075bc130b313_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/0dbec196046ed063_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/0e68ef3e3bc686b2_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/0f1e03ffbe4a08f3_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/10d52c8541d8e931_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/1410946c5e325198_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/16559ac9c884651f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/166a5b768db2d6dc_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/179872ac4492afa0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/1ada7ade10cca105_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/21d60d8d92bf19bf_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/22063dd5403b833c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/2532623a88776236_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/2e2413a06637b0ec_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/3107558eea9ba321_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/364b223b1bc79872_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/366f560b67a386ee_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/375db0c2ac836167_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/3761f940ae901389_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/383152c2a19b4e8f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/3865648767564005_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/38720ab1369ba567_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/3900fd29baef0480_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/3941d9264340cece_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/3dd738a47abc8dee_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/40a9bd45a75375db_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/422d408262aa1cbc_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/445287d025921e6f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/44fdad3a201128f8_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/4816386a87d7566c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/482a0b7ae2b00776_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/4b32244f47a52aa1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/4bfb0fd95edd59d2_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/4c4800b635ae2098_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/4c9a3bb214971f6c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/4eceab7d2e5e75bd_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/50aef4afc8eb2221_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/50ec495042a41f6d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/5399a0cd57faade2_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/54920af5f79603ff_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/551f311ce70a041a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/55248bf5cdb1f722_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/577dbf0b91a4fd20_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/57976939f24b399a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/598bb08c9f41a7b9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/63650b2efa24c917_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/6635a01024910e7c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/6b991611054a2e9f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/6e7ceb2d0629c0d2_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/766415f99b4c6b7d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/76d092187417e324_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/7a80e0d12aa14c6c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/7e048a4ec5b9e1d4_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/7e9e9637312f4527_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/7f4dd8a89067dd14_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/8059ab2dc6262984_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/8383e54a78e96fc0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/83c00149b31ccab3_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/842bceedb8c09930_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/87b78db93ca06597_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/88a5e52ddb6d6d2c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/88c1d03bb90903c8_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/8ab4bfc157c68e03_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/8b74f42ca7f9d4ce_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/8ba42d1959e21094_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/8ba930f6d3763aad_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/8df5c0290e6e7d6b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/901cda61dbe1c72b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/91bffe440af90184_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/92f3fbe0cc645cda_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/94dd7ef9d668d39f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/9527542be48ffabc_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/95db89fc6a02f451_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/963ed8c33def50bf_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/96aec6e9ae26248e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/97de5abfe883dbcf_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/986d0106ec1842ce_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/98a16392447e67ac_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/9e14eade795efe8c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/9f4ad6f7051df145_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/9fd5f62bf71b3d75_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/a10e102536afddc3_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/a14b1d1ba3ffefc8_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/a1962e8c0da37551_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/a6b7c04cc881aa8f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/a6f27ff03ba78ebe_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/a85adbefb300ab4e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/a8861e49fb8957aa_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/a9b4668151d3b918_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/aa2af9656088cce5_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/aab204e4e2e6cad8_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/ac4be60b26fb5511_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/afbf989a8c95bf2e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/b2141b088ee5e98c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/b3f87b55d8dbfa47_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/b5f29d0312456036_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/bc145685a6573d8d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/bca21f99472447f3_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/bcefea0b5feaa3e6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/be519e977a6323d2_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/be581dea90cddde7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/bfcfe1973eae70a6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/c09d11a05755e8de_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/c30f776ad1595b83_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/c3d986f17b5dc565_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/c50c2efcca9c8010_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/c7348c3f4f98c4ab_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/c82aed60a977e45b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/c8b473e0f9374235_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/c8f84126e8a205d3_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/c9adc58020b2b3de_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/ca5a67fda3466f4d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/cb47929bcd785350_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/cd85acb1c0e5f8f6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/cde968a267e2506f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/ce5fdc792b67fd6e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/d3d3117da1954c11_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/d48cca5b61f158fe_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/d57fe2c6b1537486_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/d949b6a948217766_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/db4b978e1d037149_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/db529ccd665da8b5_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/dc1d8d198ab144a4_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/dc1f0d705c07825e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/dd15da64bd340266_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/dec87465aca36c9e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/e00a14b7237f316a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/e0679885439abda2_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/e31f7a7e623b4b27_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/e8b90ca167b6e771_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/e8c610db15382c0d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/e8f209bb953d0431_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/e939b9c74705d0f2_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/e9cc87730829e287_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/ea8caa098b6387ff_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/eaffc3a9ed933df4_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/ecf4f84b241d1325_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/ee0df4a02bea74ec_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/f355a1c9fc9dac63_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/f549ece535126cd0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/f587f3bec747896f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/f6f13d7893cf7781_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/f7d87e9c65f44131_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/f9bc7061061e4803_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/fad7b2239e784870_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/fc496558f77f6d37_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/fdd89d27c13f85e5_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/ff7d190261fb21f8_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/fff368752d794b37_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/df02438d-ec97-49fc-befe-d7f04c7c0bc6/index-dir/the-real-index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/379f1cbab5b08b6fc9e08681e42d8be311441c88/index.txt create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/3b5eb7fa61a672d23016e9041564312055b27854/5e478eeb-1820-4299-b857-8a957d5454ff/006a538dedf500bb_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/3b5eb7fa61a672d23016e9041564312055b27854/5e478eeb-1820-4299-b857-8a957d5454ff/0175f3f40ba8dbde_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/3b5eb7fa61a672d23016e9041564312055b27854/5e478eeb-1820-4299-b857-8a957d5454ff/1721bd4f8fb2cadc_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/3b5eb7fa61a672d23016e9041564312055b27854/5e478eeb-1820-4299-b857-8a957d5454ff/17b8036994926313_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/3b5eb7fa61a672d23016e9041564312055b27854/5e478eeb-1820-4299-b857-8a957d5454ff/25dc4c03e53ce621_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/3b5eb7fa61a672d23016e9041564312055b27854/5e478eeb-1820-4299-b857-8a957d5454ff/335c73116c925d69_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/3b5eb7fa61a672d23016e9041564312055b27854/5e478eeb-1820-4299-b857-8a957d5454ff/35479c8993a56980_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/3b5eb7fa61a672d23016e9041564312055b27854/5e478eeb-1820-4299-b857-8a957d5454ff/3ae70dcea11c2fbe_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/3b5eb7fa61a672d23016e9041564312055b27854/5e478eeb-1820-4299-b857-8a957d5454ff/3b5be9cfbf996496_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/3b5eb7fa61a672d23016e9041564312055b27854/5e478eeb-1820-4299-b857-8a957d5454ff/3bafac095fd25cbd_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/3b5eb7fa61a672d23016e9041564312055b27854/5e478eeb-1820-4299-b857-8a957d5454ff/4569c647f3e546ae_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/3b5eb7fa61a672d23016e9041564312055b27854/5e478eeb-1820-4299-b857-8a957d5454ff/4d67962a65e63981_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/3b5eb7fa61a672d23016e9041564312055b27854/5e478eeb-1820-4299-b857-8a957d5454ff/586a022384e46803_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/3b5eb7fa61a672d23016e9041564312055b27854/5e478eeb-1820-4299-b857-8a957d5454ff/5dae2ab319d8aac9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/3b5eb7fa61a672d23016e9041564312055b27854/5e478eeb-1820-4299-b857-8a957d5454ff/5de9374d0d33bce6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/3b5eb7fa61a672d23016e9041564312055b27854/5e478eeb-1820-4299-b857-8a957d5454ff/61660244c8309188_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/3b5eb7fa61a672d23016e9041564312055b27854/5e478eeb-1820-4299-b857-8a957d5454ff/6ea1cb40f0aee2a6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/3b5eb7fa61a672d23016e9041564312055b27854/5e478eeb-1820-4299-b857-8a957d5454ff/713851498c4150dc_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/3b5eb7fa61a672d23016e9041564312055b27854/5e478eeb-1820-4299-b857-8a957d5454ff/802e042d69cb5b9f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/3b5eb7fa61a672d23016e9041564312055b27854/5e478eeb-1820-4299-b857-8a957d5454ff/8cec4c83eb238125_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/3b5eb7fa61a672d23016e9041564312055b27854/5e478eeb-1820-4299-b857-8a957d5454ff/90064f6e62ae2b4c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/3b5eb7fa61a672d23016e9041564312055b27854/5e478eeb-1820-4299-b857-8a957d5454ff/938f804276fb35f1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/3b5eb7fa61a672d23016e9041564312055b27854/5e478eeb-1820-4299-b857-8a957d5454ff/93df658616c97d06_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/3b5eb7fa61a672d23016e9041564312055b27854/5e478eeb-1820-4299-b857-8a957d5454ff/a9699016563b8209_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/3b5eb7fa61a672d23016e9041564312055b27854/5e478eeb-1820-4299-b857-8a957d5454ff/ac7ba52fac0e95e1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/3b5eb7fa61a672d23016e9041564312055b27854/5e478eeb-1820-4299-b857-8a957d5454ff/b3393d462f0043ad_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/3b5eb7fa61a672d23016e9041564312055b27854/5e478eeb-1820-4299-b857-8a957d5454ff/c1599dde8bade953_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/3b5eb7fa61a672d23016e9041564312055b27854/5e478eeb-1820-4299-b857-8a957d5454ff/d588d824228ac415_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/3b5eb7fa61a672d23016e9041564312055b27854/5e478eeb-1820-4299-b857-8a957d5454ff/d75edc2286fae9b7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/3b5eb7fa61a672d23016e9041564312055b27854/5e478eeb-1820-4299-b857-8a957d5454ff/ea578ddc3dc3c687_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/3b5eb7fa61a672d23016e9041564312055b27854/5e478eeb-1820-4299-b857-8a957d5454ff/ec116a03a65112e6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/3b5eb7fa61a672d23016e9041564312055b27854/5e478eeb-1820-4299-b857-8a957d5454ff/ecac73213fcefcdf_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/3b5eb7fa61a672d23016e9041564312055b27854/5e478eeb-1820-4299-b857-8a957d5454ff/fcddaeca4ec70adb_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/3b5eb7fa61a672d23016e9041564312055b27854/5e478eeb-1820-4299-b857-8a957d5454ff/index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/3b5eb7fa61a672d23016e9041564312055b27854/5e478eeb-1820-4299-b857-8a957d5454ff/index-dir/the-real-index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/3b5eb7fa61a672d23016e9041564312055b27854/index.txt create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/4b1338a979a263608054c918e9b2dabd45116e5c/2b37bdcb-00c6-4891-9af4-00f62af17426/dbaaafcc074f9ed9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/4b1338a979a263608054c918e9b2dabd45116e5c/2b37bdcb-00c6-4891-9af4-00f62af17426/index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/4b1338a979a263608054c918e9b2dabd45116e5c/2b37bdcb-00c6-4891-9af4-00f62af17426/index-dir/the-real-index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/4b1338a979a263608054c918e9b2dabd45116e5c/index.txt create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/2f157599-d077-4b86-81b0-ce3863b5f858/07f8e196a7727a3f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/2f157599-d077-4b86-81b0-ce3863b5f858/0cb5dd327b96a31b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/2f157599-d077-4b86-81b0-ce3863b5f858/0fc5bdde6f53153f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/2f157599-d077-4b86-81b0-ce3863b5f858/14b6e0546d8edd38_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/2f157599-d077-4b86-81b0-ce3863b5f858/1568eaad9cefb057_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/2f157599-d077-4b86-81b0-ce3863b5f858/1568eaad9cefb057_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/2f157599-d077-4b86-81b0-ce3863b5f858/1a84c0fdb8f29ecd_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/2f157599-d077-4b86-81b0-ce3863b5f858/29e34f22d379c8ec_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/2f157599-d077-4b86-81b0-ce3863b5f858/312b41ec91efbbbb_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/2f157599-d077-4b86-81b0-ce3863b5f858/3190d25e17d196d1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/2f157599-d077-4b86-81b0-ce3863b5f858/3af3cabdea0ce2f3_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/2f157599-d077-4b86-81b0-ce3863b5f858/43dd297a4824c424_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/2f157599-d077-4b86-81b0-ce3863b5f858/5445d97c0ba39932_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/2f157599-d077-4b86-81b0-ce3863b5f858/5b520f29f907e97a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/2f157599-d077-4b86-81b0-ce3863b5f858/5b70ab48f346dff6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/2f157599-d077-4b86-81b0-ce3863b5f858/5be730099e2d1e3e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/2f157599-d077-4b86-81b0-ce3863b5f858/5c160c98f6b0e2e8_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/2f157599-d077-4b86-81b0-ce3863b5f858/5f232009d9ee7634_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/2f157599-d077-4b86-81b0-ce3863b5f858/60e679941208711d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/2f157599-d077-4b86-81b0-ce3863b5f858/6ac2a5ce1f87808c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/2f157599-d077-4b86-81b0-ce3863b5f858/762f62de057c0fc9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/2f157599-d077-4b86-81b0-ce3863b5f858/7e575746073c75ed_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/2f157599-d077-4b86-81b0-ce3863b5f858/88a307d09a45768c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/2f157599-d077-4b86-81b0-ce3863b5f858/8c92e2fa07a9121e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/2f157599-d077-4b86-81b0-ce3863b5f858/8c92e2fa07a9121e_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/2f157599-d077-4b86-81b0-ce3863b5f858/90ec518fba35891f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/2f157599-d077-4b86-81b0-ce3863b5f858/90ec518fba35891f_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/2f157599-d077-4b86-81b0-ce3863b5f858/9119b3cc47548319_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/2f157599-d077-4b86-81b0-ce3863b5f858/9460a6ba2daa3295_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/2f157599-d077-4b86-81b0-ce3863b5f858/9460a6ba2daa3295_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/2f157599-d077-4b86-81b0-ce3863b5f858/a2b53de7eaf727e9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/2f157599-d077-4b86-81b0-ce3863b5f858/a5d6bcce35bc7475_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/2f157599-d077-4b86-81b0-ce3863b5f858/b03dced0dcd88b1e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/2f157599-d077-4b86-81b0-ce3863b5f858/b6165d9548afde92_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/2f157599-d077-4b86-81b0-ce3863b5f858/b7e105217bc9c5e5_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/2f157599-d077-4b86-81b0-ce3863b5f858/c392b1e5fb08c126_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/2f157599-d077-4b86-81b0-ce3863b5f858/d7946d00f2e1376a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/2f157599-d077-4b86-81b0-ce3863b5f858/d85b5e5c4acd813e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/2f157599-d077-4b86-81b0-ce3863b5f858/d9d8fbf977dedb59_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/2f157599-d077-4b86-81b0-ce3863b5f858/de28351e2ea658a2_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/2f157599-d077-4b86-81b0-ce3863b5f858/df7ab6ba53ea4e7a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/2f157599-d077-4b86-81b0-ce3863b5f858/e6eb93dca5412515_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/2f157599-d077-4b86-81b0-ce3863b5f858/e7e2abc4e5a3e0aa_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/2f157599-d077-4b86-81b0-ce3863b5f858/fbd95b051be10bd6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/2f157599-d077-4b86-81b0-ce3863b5f858/fc9eb799ae313e7f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/2f157599-d077-4b86-81b0-ce3863b5f858/index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/2f157599-d077-4b86-81b0-ce3863b5f858/index-dir/the-real-index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/50fdf5b3-4e70-4cf9-baf9-7249bbf80c0a/29213d2ab33b53bc_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/50fdf5b3-4e70-4cf9-baf9-7249bbf80c0a/index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/50fdf5b3-4e70-4cf9-baf9-7249bbf80c0a/index-dir/the-real-index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/59a16354-cfa0-42ed-a44b-cc3b49e17c5a/6bd2b74669b9987c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/59a16354-cfa0-42ed-a44b-cc3b49e17c5a/6bd2b74669b9987c_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/59a16354-cfa0-42ed-a44b-cc3b49e17c5a/7f8a0389b51446e6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/59a16354-cfa0-42ed-a44b-cc3b49e17c5a/7f8a0389b51446e6_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/59a16354-cfa0-42ed-a44b-cc3b49e17c5a/8c05ecc7896ae8de_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/59a16354-cfa0-42ed-a44b-cc3b49e17c5a/8c05ecc7896ae8de_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/59a16354-cfa0-42ed-a44b-cc3b49e17c5a/b076fcad9d02efd1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/59a16354-cfa0-42ed-a44b-cc3b49e17c5a/b076fcad9d02efd1_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/59a16354-cfa0-42ed-a44b-cc3b49e17c5a/index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/59a16354-cfa0-42ed-a44b-cc3b49e17c5a/index-dir/the-real-index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/861a2246-b5c6-4feb-a8e6-64f0f16a2064/054440bf2c331c43_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/861a2246-b5c6-4feb-a8e6-64f0f16a2064/44569690086fd740_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/861a2246-b5c6-4feb-a8e6-64f0f16a2064/e00244a1c1d66cf5_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/861a2246-b5c6-4feb-a8e6-64f0f16a2064/index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/861a2246-b5c6-4feb-a8e6-64f0f16a2064/index-dir/the-real-index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/010090a4715f7982_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/0178ed80ba166694_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/01d1bd9d3481613b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/028a34c713cffa8e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/029acfe340af5384_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/0325bbbffc847ef9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/03bc795eaff9b5cd_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/03de6d80e67b0c21_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/03e814ec520f66f0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/0566c36e9d66c629_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/05adfe7bf452189e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/06693067e337341a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/06b37557aa4cd1fd_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/07274db1f47b1bb4_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/077a9cbf6788c7d1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/07df800e6fd2e4b5_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/0809a6f55fed9f3d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/08621f8de27fc09d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/08c00414b0740128_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/08ff00bec6ec0013_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/097055410aa8a2ba_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/0a8fb9475f3b996b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/0ab70eadeaf07b89_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/0ac6ce1f2227e805_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/0ac92cfcd164c6aa_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/0b0f1db4427bcd14_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/0b6b46031efba167_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/0b6c9873335e9d78_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/0b78ec7f18bf27f8_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/0c1f9942b5049920_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/0d5b342f3c27ae46_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/0d706a3735b5c179_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/0dd991f1c793b330_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/0ed0588b1aeed822_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/10a6de262188cabc_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/11ff41e2c72c2a0b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/1326682a85b8839c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/13e636b6c483e1b5_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/164a06b5da754d80_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/1651158d19b17e1a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/16a55b1b63681512_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/1797898dbf9abe3d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/1848b8431f464bbc_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/18d0a3e4115b15f9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/18ecd22745dd139f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/197548d334d866a6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/1b75cec76c4aed75_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/1b90a8d8469ff377_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/1bf9b16217d3cd8e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/1cdf58bab8d09377_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/1d8d40c8bd53afc0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/1f64274428bc3ad0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/1fb712b8196b1476_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/1ff0767ed2f79efa_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/2162042b78dab24e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/226d42dee542a505_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/2291a5b924b9e143_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/244ff8db75afbcee_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/24692dc296675274_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/261fb8495be0de84_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/26e40f14db914a7d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/27ae31930a5f4c88_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/27feded4fc28f7b1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/283a01c1fd5fcc90_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/28a1a4eb95900cc5_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/28aeb8e6927f88bf_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/29bf4019111fdf9e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/2a47eea8f2be94d4_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/2a515c4601a460b5_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/2b944482863d9787_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/2cdeeba0c8388ef1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/2dc85643336d7c98_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/2dda1e0469cf29d5_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/2e5fdb2b74aabf38_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/2ea26e623c043319_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/2ea68d59259117ae_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/2ec697a6a7916a4b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/2f20eeb0f78a12cb_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/2f7904bd5ff48aa4_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/2fb23db919cbac4f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/2fc8d15c7838f3d1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/2ff2dc5711b5b44b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/300c4a7acfaae0e6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/30c3f5d24b89073e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/3146046935712b98_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/316a18f2391b96b6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/323c59764f29d1a6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/32c00850e582741e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/3375bf704893c9df_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/34d132cebace4bb8_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/35b1864f8dca267e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/35c50d72a0d9abe2_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/35d5ee3785bf2d41_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/36b306a09b9baa69_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/374ef6e0c7130fbc_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/37b299fcd53f078a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/3a45eb408a7d9681_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/3a707dfcd239013f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/3a7363b2769e7ce9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/3ba354e4df139a39_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/3c150c2dd87fd6e8_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/3c6a323d9eaf2d02_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/3cbf65811b564b6e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/3cc5185e299fa410_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/3d2883b151058934_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/3d9cc84221ab7d0e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/3db535d43555d95d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/3e083bdfa59388de_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/3e6b96474e4cd9e2_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/3e8f5891b6a76580_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/3ee555b7d09662f9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/3f7ed6652d14748c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/3fa3b9230004c5ac_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/40000ad0b2717f89_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/401c9ecb66380e7d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/403b044f976196b0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/405dcfa581a33f6f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/40e5dd3864b40061_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/417b0661fb6da4cc_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/4249a405b758e6b0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/43030d4dfc53606e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/434b43f63be1082a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/435dc7180587c2f9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/440beaeaa3e9275f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/44a0f1f0d4716da8_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/44abacfeac6e3a3c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/461d0538bcde61a9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/462cff8c40a19469_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/467bfef644ed08fb_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/46a7a4fd8de8ac15_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/46ad973d0ddad864_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/47317d65fc0a6c95_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/473d8294e4f39459_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/47409dfcbc7bc816_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/47974f690887fe0b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/47c5c28cdfafc410_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/48ebd49fcb59fa62_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/491eed5273dbc6f8_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/49380de47cda0142_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/49be4907b4618b49_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/4a351c50eda1dabe_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/4a762ea7b29f0040_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/4aefc6516c8f09ef_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/4af99deb3627b3af_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/4b3718bc5ce62ed0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/4cd488b0eb39b812_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/4ce7b5a39f349938_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/4e68236ef8433dee_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/4ec86f3c7b50ea9a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/4ecfb74cc2c5020c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/4f2214c1205d9ee6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/4f3d92a68bac1d08_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/4fcb373f2c5c0cc8_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/4fecf1bfc69078c9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/4ff568a32f1bc060_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/50727972d197bdd1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/5094b1a41ec0992f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/5281c83d55a5a3f4_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/52faaed1e72cd26d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/539ea2533efe9124_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/55092d5b76a5235f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/55c4d626167ca37f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/55f3f5be082df174_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/5633b14a24918a87_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/563911f0d5a08805_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/564a4f7cac02234f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/5770f37e1158342e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/5908a9b715d02910_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/5b493bdce9741e12_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/5b4eca0ef8b63d80_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/5bd1bc949f7a282e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/5c1d26f609f4a349_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/5d568e9f3bb60999_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/5d5dd0ce098b82ae_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/5dbdfe1f78d89ed2_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/5e286de0854046c5_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/5e929df8ffd0b512_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/5f648b8e8da959f6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/60ada439c219d85e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/60adb161b062547a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/615467575aab9d58_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/617852fb06aeced7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/62f1430b6f83f2a3_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/633a9a70ca8b5383_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/63eb77e2513cd8f1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/63f1c8a683f8225f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/63fa8b17283be32b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/641ba44fc9dde0d4_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/645c0ebb2a0520ec_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/64ab34cc8d5979a8_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/64c8b49a96602142_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/6538f081994b8744_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/65b92e377b0fa843_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/66632c13c1c475ba_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/6717b2b093e246cf_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/675f5ef490d855c2_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/67be1e13eeec2e8c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/67e02db3cc4d7172_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/68a0bd0feff1417f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/68e48aaaa8eed872_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/69a622ddc4de2de2_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/69d908bdfea092f3_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/69dc9c00c1096539_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/6a31717497945fd8_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/6aafea8d6e8c80c9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/6ada150ef7f7b66a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/6b35672256f5dbf9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/6b73951b12bcfe24_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/6c0f23f3a776038a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/6c199ef7952f1cb9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/6cbae82b29f486c0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/6d1299026d44f445_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/6d2c7a73bf56d82e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/6d6746ffdfe2c5da_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/6ea5cd00d1ef5c5e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/6eafb1f8e4d27046_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/6f45dc32b64d35e3_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/6f7792d088936b71_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/6fecedabc9999d8b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/70012114dc1d1d88_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/706accb2deacecdf_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/7087aada1f4066c7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/70f0928214687af3_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/71471beeeb832013_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/71880fa819250839_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/71af3ff0da25ecb4_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/72efb03b6e76c5de_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/74229e2379833847_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/74d8507a8531f02b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/750927c19c5edcba_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/75106a26e2dd80d4_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/751bebd4610d5d4c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/76337b91b4900a25_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/76f4c5a18d2a4d54_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/7748de2aa7cf2ea4_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/7865ed43b8d1f6db_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/78ab97b6c49538cd_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/79a0e6d190a1bf69_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/79dd64d3d88a9e7d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/7b11897a6e627caa_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/7b37f1b48b6d925c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/7c6d2d12385f9ee0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/7cb72d2bdce685df_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/7d76fe340dfdbc4e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/7e1ae7aeaa77a535_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/7e7adf60d84afd18_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/7f588195f082f356_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/7fbb5007ff08fd98_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/80227b644439b542_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/818c23c29ee1a73b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/82a15928af9ccafe_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/82a24d405442f878_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/8397b39bab574872_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/845bfef2605ef371_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/851e9d42098ef1c5_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/855be4791a76b056_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/858b1b97724823ac_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/8637c8296b939632_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/87cd4e61fddcd966_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/87f3bed1bdda23b6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/88a44733befdfde4_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/88f7d898076d4e73_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/89aa94d34fed7381_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/8bc3812d75d08ee6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/8c6f07b5576b4aab_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/8c7edcd939fc7e83_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/8ce3ef412d22aad1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/8cf4139cfdfbfc8d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/8d537950d77cd7c7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/8db29d494e6bd315_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/8ee7c4a577f7a0de_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/8f16ca910597cc7a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/8fe77c96e12c0e82_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/90380676b30f51d7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/90404dc2347f9dab_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/904d9d11ab898cc9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/906a12dea99dea37_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/90c1259cd9567b5a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/9136a8b19fc17c26_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/92b1a249fe90382f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/93fcaad73df22088_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/94351c9a10539573_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/94a97651f25813ea_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/97c2222de82aabb7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/989b1c0e817cb740_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/9944e43e0af2504f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/9991dcbe73719eb6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/99c7c14f7c842aee_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/9a1d5e2e19cd6830_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/9ad2d6a2d0d34d8b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/9bbcd130c76ca82b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/9c1a47b65557b3c7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/9c44bf9d9f6d5046_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/9c797756525c3a9d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/9d1cfc17ee75085f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/9e0164d9f9c21b2b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/9e208c9945614b0a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/9f6242da93cf9a60_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/9fafcd5b7c4c7d46_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/9fe159871d0f34b1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/9fe60c30216cae9f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/9fe6d760ee68bde4_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/a09e183f013c55f9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/a111af295948c13b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/a22c8b7fdc93ba7b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/a2516d049d3061eb_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/a3210a474dbf3470_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/a441a981da270027_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/a5e8235022e3ffb2_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/a6e6bd77279ec2d1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/a98098b99e7d2869_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/a9d4becd3632d6ee_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/a9ef7b7d112096fb_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/aa4267498c1bdb8e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/abb42dd22bb398d8_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/ac8d4fbbff1e4511_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/ac8f3a08baae84c7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/accbc6b98658fec3_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/acf7596d327c576c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/ad02fae9789df093_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/ad14117198bec082_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/ae369f724076d110_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/ae902f024ac9b001_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/ae9af5c89b53f7b7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/aea414ab5074aa6c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/aec58053023a88ac_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/af11397f610def1d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/af2753ca257c8835_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/af616d40a7566670_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/af66c8b1d2edf140_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/afb1287c332f9b5b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/b0b96b9337ec0f01_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/b0fcfb2205e12b8c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/b11399c2d34b65ec_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/b13f8d35dd4416ee_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/b17089788610695d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/b20fb40450b8df8d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/b253d9782a04fa24_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/b25fb755218203c7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/b27f4456a0893c22_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/b334d6f43db7225f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/b375963a13a8ca2a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/b3b3268a576e2217_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/b4b3413faa63c5c9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/b535d4da7e56c833_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/b5384dfe649ae3c9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/b57d38814d61150e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/b5db8021d45d1a84_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/b60781e5744b2a1c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/b64bde2f4d5986c7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/b6994106f42f340a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/b70da7e783de3e3f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/b71ed6589c7be093_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/b754d8e55cf362ea_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/b7909cb8f6e30f6f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/b7c6fd9fbd20ecaf_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/b84030228bcea101_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/b852063f83c7b9f0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/b8c0761c78dae0e5_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/b8d3986c9b1abcef_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/b923d597daf5f5da_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/b9a3f2fc12e61701_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/b9fc73196a15de83_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/ba5bae53b65d3bc7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/bb61669531d4e58d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/bbd63dece1bdf1f8_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/bc1b9eab080caf12_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/bcb692b2d63ab273_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/bd35d25df8e8d68c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/bd9efb0b6d94f452_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/bdcc4a26b93e80bf_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/bdefb43552790deb_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/bdf98845dbf92cf7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/bf08f2433cc99fa1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/bf77de102b70e497_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/bff5dc42912015d2_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/c338bdddb184f703_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/c380b0c4841aa25b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/c3c9632fba0bd8d7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/c441dfa2465b5fa6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/c4515313351f1df3_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/c4e866e94b70e9ac_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/c5765227c22fbdf2_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/c587a83357030b91_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/c591d07e12a43bf2_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/c5bb406ae3cf31e5_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/c6c9e29b3412b09c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/c7a30a85a85d0ee9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/c884bad1d888a6ca_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/c9393eb9835030ef_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/c9d81d6c12c3977f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/cb5b394264a7b03f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/cbdb9df688ab59c1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/cbe8c6cc8cdf4253_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/cc839ca63759a933_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/cd49d7961e20a6a1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/cd5860071fc9af25_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/cfcf69a2a44c3240_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/d01e08504cf7f0d2_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/d08588d1c7114cf6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/d120c6efa03f7bcf_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/d162575e51be1b1b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/d1628889ec2280b2_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/d1958a4c2322ae80_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/d1d74df0e0804e09_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/d25dd5c26ab005c4_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/d266e92b0ea7b46d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/d28e10a752b14040_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/d2b0ca3185c63611_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/d3150e10cc3f8100_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/d32c1ae48c08773b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/d41452f8148bab4f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/d4890a4a0126077f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/d5d07c05706867e3_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/d63ecd498f2df031_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/d6b435b13658ad79_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/d724a6a489355fd7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/d7614f8e699d7af7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/d7860e993a5630c3_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/d7c1eb09513b88dc_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/d7ee02e163765039_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/d85ab24a940b886b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/d868e21a071aaa88_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/d86a30efba8dca7d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/d877c081a5e74446_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/d904d5df8bcc2368_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/da9bf1b664b212e4_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/daf657e3d886e3f5_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/db9869d05db04f19_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/dc0b85e29399b7db_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/dd86e516f7ea18c3_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/de38962cd1ad8145_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/df1566ee5748d5c8_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/df29d983c7787c30_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/e06cabc98b1c4b25_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/e072450abf56cd4e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/e1a11641a222cb84_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/e1b0a3fbeffc9be3_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/e2539ce4c4b91c64_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/e27dc59ce1a1362c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/e51b347d4c00be5c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/e56ddf935567f7ef_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/e6a4d86dbe08b13e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/e783970fc7df1fe0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/e8fca6e5aa54903c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/e909f7c6df34fa61_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/e90b160176cd82b1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/e97e0c67bace2cf0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/e97f8dab42e0d8e7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/e9953b743f7c2f41_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/ea213b800075ab34_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/ea7647fca069f90f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/eae1d667c105527a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/eaf75b8fe5189380_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/ebfec19c01a2e65b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/eccb5f0dcff7ac51_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/ed35e8f7da1e5e18_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/ed88fc92ee703cf0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/edc4373b200da25f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/ee829bf4f42f1888_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/ef2982b5975e4296_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/ef5b2db1a8142fc9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/efbc196a4dfb22aa_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/efd475c526c9c1d8_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/f016fbdaf514b269_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/f1263cdcb28a2882_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/f22388deab1c296d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/f267e80a6f81f4b5_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/f2b90e027d21b687_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/f3f5fbc2f09835ce_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/f4e079ef6a9cdb5e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/f529e18a77966546_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/f5a310cc8b2edd28_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/f5beb7f811387224_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/f66df915c89a519d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/f6c0156a2fea2845_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/f6f4d65c2f0747df_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/f71b17f7ebd58e9d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/f791b588370f3828_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/f7ae4156a119fb28_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/f877fef425749231_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/f8901d129c274bed_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/f895d0a6446241da_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/f8d79728ff97f661_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/f8e0d7196e603f5c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/fa4ed36594c5557d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/fb0c98a284d9915a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/fb96252ef371bd49_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/fcbc1da413162718_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/fd1abaa0e6192be7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/fd5f5589973f3caa_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/fe0825ba0022493e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/fe0863a94af0f7c9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/fe756b47c45a5730_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/fe8c580bed1de761_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/febdb5cc1f915199_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/ff36c015dd67add3_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/ffa1cfeb1d201a97_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/a57a7ca5-6305-4460-ac5e-392e618ce994/index-dir/the-real-index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/b233e79b-4fec-44b8-8960-0d6d7a955e83/54024a26d3ccf712_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/b233e79b-4fec-44b8-8960-0d6d7a955e83/82d930988f59e1ff_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/b233e79b-4fec-44b8-8960-0d6d7a955e83/b867624a40faea70_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/b233e79b-4fec-44b8-8960-0d6d7a955e83/index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/b233e79b-4fec-44b8-8960-0d6d7a955e83/index-dir/the-real-index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/f8395d38-0733-4946-8c64-9f377902fab2/a006053cee55d015_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/f8395d38-0733-4946-8c64-9f377902fab2/index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/f8395d38-0733-4946-8c64-9f377902fab2/index-dir/the-real-index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/579544fd7d0441717f082c9eb123588966aa57ac/index.txt create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/0c44e4c4c8c8ada1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/0c888c0b749b9e33_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/0c888c0b749b9e33_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/0de650566a5514e3_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/10c1bc332814f1db_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/1354b5f7c2a856d5_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/1354b5f7c2a856d5_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/156ecf8e0a19058c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/20d3bc6daf5f3440_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/241897cbcb541b52_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/262e9df1e2d15d47_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/2786d125441c365a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/2786d125441c365a_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/2997514a15f97019_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/2ee8d95c51d3b7d1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/2ee8d95c51d3b7d1_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/30fdbcf80e02e088_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/3655b57a8feb677c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/371e8f851c4af508_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/38fe1561e2002ceb_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/3aef9bfd971876ae_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/3aef9bfd971876ae_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/3c0f455159e10c2a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/41771143ca47bf5d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/42690ef93d41a7f6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/42690ef93d41a7f6_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/4553ba12b187f4c1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/4b4ab5e2e8e51017_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/4b59694a60068a9a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/50bc2a822f0bd3f9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/50bc2a822f0bd3f9_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/519787191582cd5e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/5212c900c21f2442_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/550e41bd70b0ee0e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/5d515bd553f8e102_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/5ef247a383493ff1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/60681db93a93ab4b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/628700c977a167ab_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/65fcb4b93f8cfb33_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/65fcb4b93f8cfb33_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/6918f0b1f2066aad_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/691c63d6eab671fe_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/69c5c36f0b081f4a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/69c5c36f0b081f4a_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/6b913fea10b54c71_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/6cae3579b4d1c390_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/6d164b319dcb74a4_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/6edf68457c8bfe1f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/6fbb7fa7d8d2930e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/70a9ee61830d7cc2_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/70a9ee61830d7cc2_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/714a04bda77fc715_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/71795f3195364dc8_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/72465c1d1abe1a64_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/78fb11ed10f5f2f5_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/798b0126b0fa8b30_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/798b0126b0fa8b30_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/835577074314aced_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/835577074314aced_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/855623f4c52e90d5_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/855623f4c52e90d5_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/863db226d286a226_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/882359eb8f40badd_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/882359eb8f40badd_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/892df032d6d084e4_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/892df032d6d084e4_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/8dd5c96853e60ff8_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/8dd5c96853e60ff8_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/8f5c3973168e9cd7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/913158a8fa01b685_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/92f3e7b6cfd21174_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/92f3e7b6cfd21174_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/94034c254cff5cf4_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/94034c254cff5cf4_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/980b45a396a84b64_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/980b45a396a84b64_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/9f9fe787af5267bb_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/a06c7758aa595dab_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/a2bb1795da26e56f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/a2ec65f3093378d5_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/a2ec65f3093378d5_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/a6d86813558e38bb_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/a8d2a8f40acd0424_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/a8d2a8f40acd0424_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/b2ee940d308dea2e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/b2ee940d308dea2e_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/b35e5bbd39c36bd3_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/b35e5bbd39c36bd3_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/beefeca20bbb79de_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/beefeca20bbb79de_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/c020baaa4a2cd60e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/c0c3c1efb78cf3b4_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/c5e4712ce6d0b5b7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/c7b579a7fc76cc83_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/ccae21030651acbd_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/ccae21030651acbd_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/ce182d4e15a26d65_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/ce182d4e15a26d65_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/d76753c35e47b9a6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/d76753c35e47b9a6_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/dcb1afafccfd5e4d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/e160ce32c72e95b5_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/e24e9ac859acc440_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/e7a0602c472ef959_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/f1a2f898505fe7bc_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/f1a2f898505fe7bc_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/f32c33e67d0bd51d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/f9f18fce84316c15_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/fce29a6c31af62bc_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/fce29a6c31af62bc_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/63b1b16d-3189-4b5f-9213-9048e2d49fc5/index-dir/the-real-index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/9047687d616d83358dbfa7158e9cf485f6d3ebac/index.txt create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/961aa296b38fe90a3417c793968cda30d9a973d0/03be0e10-8edb-4fe6-8ad1-f9d13347f67d/5c44c608e968d1a2_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/961aa296b38fe90a3417c793968cda30d9a973d0/03be0e10-8edb-4fe6-8ad1-f9d13347f67d/index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/961aa296b38fe90a3417c793968cda30d9a973d0/03be0e10-8edb-4fe6-8ad1-f9d13347f67d/index-dir/the-real-index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/961aa296b38fe90a3417c793968cda30d9a973d0/1bf07e59-9e36-49d5-824f-921b7a4b4370/d1fcfabdff80b26e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/961aa296b38fe90a3417c793968cda30d9a973d0/1bf07e59-9e36-49d5-824f-921b7a4b4370/index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/961aa296b38fe90a3417c793968cda30d9a973d0/1bf07e59-9e36-49d5-824f-921b7a4b4370/index-dir/the-real-index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/961aa296b38fe90a3417c793968cda30d9a973d0/589cab1e-5f40-449d-8fb8-541d1be495b1/index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/961aa296b38fe90a3417c793968cda30d9a973d0/589cab1e-5f40-449d-8fb8-541d1be495b1/index-dir/the-real-index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/961aa296b38fe90a3417c793968cda30d9a973d0/b1e4fbda-fbe9-4cd3-bbf1-e98a67c9f8f1/19b26a2a946d82ed_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/961aa296b38fe90a3417c793968cda30d9a973d0/b1e4fbda-fbe9-4cd3-bbf1-e98a67c9f8f1/e69a596848720b01_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/961aa296b38fe90a3417c793968cda30d9a973d0/b1e4fbda-fbe9-4cd3-bbf1-e98a67c9f8f1/index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/961aa296b38fe90a3417c793968cda30d9a973d0/b1e4fbda-fbe9-4cd3-bbf1-e98a67c9f8f1/index-dir/the-real-index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/961aa296b38fe90a3417c793968cda30d9a973d0/index.txt create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/034c6ddbca1c01dc_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/0587c5e59af811eb_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/07d177d7cb118f9d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/09a3f479389b2f3e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/0ae4079e81991306_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/0ae4079e81991306_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/0cbc2ee61c9e90ce_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/10bdd7a5a8e0f8d0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/14965a1c8f5f8d7a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/15f9beff407d072d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/192c2092560ae10c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/1b0872fee1f9d4e0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/1d49f95a84be5ac1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/1d49f95a84be5ac1_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/21207c6a01baab90_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/27cb7f0323a443b5_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/2c5ff5da48d32502_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/2c5ff5da48d32502_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/2fb909d30c4feb9b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/316a1136edb9ae89_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/31c4f4ef122216fd_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/3237b092b8893c71_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/337829bd96c0bb0c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/337829bd96c0bb0c_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/3793732114425c02_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/39bc77af21c7a055_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/3f6b73d560506067_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/40050dc4a21d289d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/400d4bf2f85979ca_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/400d4bf2f85979ca_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/41862b87ea43192a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/41ac76c57e72009e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/445133e5733d278a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/4ad26e4762e51e37_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/4ef4bf98570f5e7c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/5492342daad87031_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/55e6f5660736d734_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/55e6f5660736d734_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/5751807d7822f320_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/5751807d7822f320_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/584532a04040a579_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/5b826b1aaaa18c6d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/5eaea9cee2153b18_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/6202cf6b8c76390b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/6202cf6b8c76390b_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/63176c280e1f2620_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/694364d94928f43e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/6bdf0c55fd64fbff_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/70dd1232aa1dc49a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/710a090431817783_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/759937651cf59aed_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/767b47419e493d42_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/7ddd4bb8ec080cab_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/7ddd4bb8ec080cab_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/81f94cb2c2a30976_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/83302bec4944bf86_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/8444d9b9710f63a7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/9575c9466e2f27f5_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/9575c9466e2f27f5_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/9a12e1ddedf443a3_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/a06a529bf5188b81_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/a06a529bf5188b81_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/a5c10a00111ac550_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/a5fd86fffc86886e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/a5fd86fffc86886e_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/a6aa9ae962be64c8_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/a6aa9ae962be64c8_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/a8102c20e3dfa22d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/a8102c20e3dfa22d_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/af432948523ffc36_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/b094bc4de53b94b9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/b3250c239391a92f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/bcebf0d2726cd7d0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/bec09916227584ae_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/bf3c3a1a8ab24f5c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/c389b5211f3327c2_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/c3e9132f62a2f24c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/c62e8a3d503b863a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/c7e7aaa9e27d30d8_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/ccd3166c8fe34364_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/cdacfed793b166c9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/d061642eeac34211_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/d16ba1100e823add_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/d5a711f4aa681eba_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/d5a711f4aa681eba_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/d9c32ce3dbcf7a51_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/e439822d42c03eba_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/ebd61f32f4bb8c70_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/ec4a483d21dd3ff0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/ec4a483d21dd3ff0_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/ef296d5201d80c31_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/f3beb061b9aeb818_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/f5a1c24cd06dd4f5_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/f74f7b59e3071ae4_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/f74f7b59e3071ae4_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/fecc356fc600484c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/ffc0fee7b67a2edc_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/4aa4bc14-e58d-4cc0-afdb-b30e55e909ef/index-dir/the-real-index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/993a8fac74b4ef94e7a8ae0488713b76dcb01259/index.txt create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/010e2aa41be96f1c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/036f5a255bfb08b0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/046fcb9530154a4b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/07c2a39150f403f8_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/0981e7fe4cf5c25a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/09a82bddfd94214f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/0b045482ed4b93db_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/0d449a67befa201d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/0fefb1ceaeaf5098_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/118f514158558b6a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/14f236b4ae130bc8_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/15c77db8fa93e72b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/16af324cd017e896_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/189c8e2d792208bb_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/1d8eca990891ece2_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/21aab6fd892c2a4a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/24a5591fdb8d6859_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/285dcbb4d87aea56_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/28efa1b838c69775_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/2c42e38f7a4f0eb1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/2e041b1d682c46ac_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/32e048919195f790_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/3775017a28af54b0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/398a220eefdaaa79_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/39d4d76ff1b2e13f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/3ad853c9fdd19ec7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/3be6db09689668a0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/3c87e42e0ee9666a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/3f9f6310fd3c5f1f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/3fdc9d5ddceff950_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/43039a715f84c6dd_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/4304a31bd22aa08b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/43a1daa1c514d4a8_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/463810f33351c7d3_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/4715e9ba39cb3d9c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/481d60447e0af49e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/4b4c63d8abd570ec_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/4b8c146d8a8a25f8_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/4ca0583dcf7e13b0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/5881428d47454c97_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/58e7b394d456505f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/5a7584c974f0c78b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/5b4380e594b33a1b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/5b6d22d979ebc753_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/6237dba18060f3ff_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/64b081f2a238b90d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/6521771cc9b6ca2a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/68db37ea074f7a80_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/6ff546fa3a5e8807_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/721c7dbf8a1bfdf7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/73b376e03e29ff27_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/775f273f09f4344c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/7ab751f11d6acb5c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/7b460b10ec5a9b07_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/8288c38a1acdb8fa_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/83e18fff80d5211a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/85b40064e623738f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/870af6496c3bda8b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/98390d09e8c6a97d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/9850de720ec00922_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/996754ef9d3bc530_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/9a722f391e682c9e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/9f9b39e1821bbeb0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/a31f055d9b390624_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/aafa214d475b08d4_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/abcbd2ecbf8bb923_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/aed0a671853608a3_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/b3f521cb6b89c79a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/b6feda5769cf1d94_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/b75fa98e7f699f0c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/bb291547536af813_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/bc48797fa37441ae_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/c3e1e7363f0c7da7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/c53ff7118f924ad0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/c66af30274639a3f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/c751bb5b15c6a36d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/ca3e8050d22ad0af_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/ce9dc6717599ee3f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/d073a59aeee8ddbf_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/d33730ed1f8cc046_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/d8ced88380b30889_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/da537dc2790fe606_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/da568aa26c9caefb_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/deb95f8f6d598448_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/df32ba27f27a019b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/dfa7b72693b3362f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/e34be89f97399391_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/e72841ac9f1f9397_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/e90aab69514b2968_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/ea7a46c4086106dc_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/eae50c186db28a9d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/edd8a0ed102e61dc_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/edfb706d30168794_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/efd150d0e378ac5f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/f1f630e35f9accab_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/f3ae579bf9e517ec_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/f79fe639651d3334_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/fa061e1cbc1b40a2_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/fff3c320501c2141_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/f1dcab9c-c52b-4438-9405-9ae56e42c738/index-dir/the-real-index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/a7cb8af1c7b1ae0fb9a33d6db776bf2d68eadb9e/index.txt create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/00e21cce40be2887_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/00f054370cc4d95e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/024f1406b71919bb_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/032c092253d4cb7e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/0614f28a1a74a65e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/067d93e8c8fadb1f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/07a5a327dfcebe0b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/09b5bc0bc33e2ebd_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/0aab74dd13a7ec98_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/0be6979c730980ae_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/0d474291750582ec_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/0e19879486bf9a69_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/1004d1e2f4b1d18e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/14a58e07e1b749e4_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/156cec31acf2c45d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/16c95698ab267681_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/18f37a84ca266a79_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/199e590df0d19782_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/1bc976e736105ea7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/1ceb285f297627eb_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/1d813428989a99eb_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/205b18f3ee52d95d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/21532d19c0fcc24f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/241189d344b3c547_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/2442001e36350cd7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/245bdd1f09655e5c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/24cc03f601530def_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/25e207f5a83d5621_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/26e97aea58c16df0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/28a3dca279ffb8ce_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/2b5d2a0652cbbef4_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/30944830c7c7d015_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/30c9f6cd24aeecaa_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/36cdd3c30b1ce569_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/378e888e22f37133_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/383d122a1d384799_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/386921f56fcc00f6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/38c7495a87818852_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/390baeeeb49e1b46_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/3911b6bb960d5dba_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/39c8446d4b6ed0f3_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/3ba7954e152570bb_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/3cfaefe3440af4b9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/3e39c5f26a9faa53_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/3f05103c9db5c7ec_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/3f78a34f60e4ea5c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/41a8c960f93a27c2_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/4267a5201fb73900_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/46ee7a8d9a644a71_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/4858f2ed18beac69_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/48aef4e2e7cdb905_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/497b464009271593_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/4df411110640b594_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/56f5a0d6d5d6fd2f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/56fb54514aadd8b6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/591ce1c8ffa9fc91_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/5a4bedf49ab00462_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/5aa8e3f0072842ee_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/5b5db0d35f953ca6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/5cd59ce3323b055e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/5cd59ce3323b055e_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/5f09c8f8738d50e1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/5f87160deb37ef79_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/612836579c828552_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/63e12c564a03d553_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/651e62789627002b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/660d0f16611c5eaf_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/69af36bc9adc9559_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/6a2a8817d7dfe967_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/6b75162ab42246d9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/6c767a5b774596bf_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/6d1d386369c73097_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/6d55b5184df1443d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/6dc5fb92b0c2e213_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/6ff144cc889e32e3_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/72acf894c8f003ae_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/72d4ad6693d4faeb_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/72d938f9de4fbd0e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/79d881ec45f1385d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/7d85976da1ebefa5_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/7dad506d561013c3_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/7fcaf93cb76b3cce_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/8107cdc3f1a5f26a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/84426eb28ee2def4_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/8467e5b4d552544f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/84d2cd0ba826f9f3_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/86343b01e9ed1171_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/8641ce2afb064cac_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/89c16cbfdc962990_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/8c849de8ba01eea8_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/8c8845abe90bff9b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/8e039e3ac9d9b077_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/8f3c192d9e696a00_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/904e1af19450b1f8_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/90f3607369d9aa12_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/910d6b6d3da4cf8b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/91245d97397c554c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/91b877e671f9175d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/92f66b46ad5828df_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/9538eac50d24be2a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/9689990f42775cbe_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/96af1e3ef3ba4c75_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/980ad0ea88d78bfe_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/9973e4080770f2a6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/99a25c32c2a8d2b8_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/9a9aa34380687509_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/9ab71bb7289f997a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/9b4ec36135c842dd_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/a1ae36dc42e083da_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/a277d7b883b6d65b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/a3c93992ec13e47f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/a43ac071a6293829_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/a43ac071a6293829_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/a62a768aa3c80e0a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/a77f3337093c70be_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/a8c360760f799ccb_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/aac95bacd3df4d2c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/ab39f7b6a3b5fe10_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/ab7b816ea3629258_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/ab8aaff42b0a5ce9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/ac507ccd6f3a2b02_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/b1560b4b5fd1e983_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/b1593fbea8e92b53_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/b15de68cc0cd4f98_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/b16e387f944d9a66_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/b2606b201af181a1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/b36609bb002518b7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/b7a517426c7f0357_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/b7fbafe94d0c224a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/b7fc7441308b400c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/b88d5e775dcffa07_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/b8a7959989537868_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/b92a81493a1dc65e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/bade2413f0ecbd45_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/bb7804956a5f7788_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/bd09d29ac6d50633_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/bd96509006ee329a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/be1b3f73bc0be0ed_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/be615f32826a8ebf_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/c484bbda3db4256d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/c5450fb2d6388908_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/c5669de7dde57b60_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/c5b031dd49d15c9e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/c77a5944ac39fcff_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/c7fdb981e3285e1c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/cb37d1d24d7dfa62_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/cb77df34ea397361_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/cc15c5e19d80ec08_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/cc1abda097f32e8b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/ccc4f9ee47fe15d1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/cf9ac69b9795ce19_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/d070bbde8c88abd3_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/d0b3549017e33c47_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/d3a19edb12a88d34_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/d4fa9fb903c96d92_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/d50ab87eabb90640_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/d577667594e92b64_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/d5b78e5ea8882938_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/d5eec4896e346682_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/d690f836d97cce6e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/d73e8c92c395887b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/d7792e69c71d0e14_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/d7ecf8f72f904980_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/d85c114ff6aae5c1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/d92e984bb6b9ad3f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/db5c43018f4a6c06_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/dc2c51c50848cd06_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/dd190ed1b2d42539_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/df9bba31f07b2dad_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/dfc12e7656e36032_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/e47bac881e000593_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/e61b842bd5087d39_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/e6800195e7abc532_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/e765b5a72e123d47_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/e7923c7275f78e4b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/e8b657841ef5c2e0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/ea066f3cf174ce77_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/eb693ad74ff2dbf6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/eb82738b5af68423_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/eeaf0b05507ff81d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/f19b290d38d0a932_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/f1f40d668edc875d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/f24cf282a9966cf1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/f27f338bac1305f7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/f2b472eaa88aaf62_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/f47b53f55fa81242_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/f5c619d43d285d68_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/f82f5adf8b0ed008_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/f89128014a67d1e4_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/f99333e8b7c429b7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/fbadd0b77df04db0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/fe40d0277e4cfcca_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/fe7b6673ab44ee0c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/ff224f44abbfe29a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/79cc46bd-ec3b-49cc-84e7-ca0b4927c265/index-dir/the-real-index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/0029f2d25a32abd2_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/002f08f275657b42_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/002f08f275657b42_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/0060f98a002bd41b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/00bfc277edfa4aca_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/00fa58c1b46e4a3f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/0123e6fbcb8793d0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/01339410823c5ef1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/013e0257c24b883c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/018931f401e5e2fc_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/018931f401e5e2fc_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/0190a5f2ba813975_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/0200c1b5ff6b18f1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/0272e8cafda516b5_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/028c0bb138cd246f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/02a12436af2b00e6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/02ed6a31e1c0c930_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/030dce102f89bbfb_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/0352f5d2fe9df2e1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/036bb5b108b732b9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/03fca120d959cb82_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/03ffc940b2f92d23_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/03ffc940b2f92d23_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/044600a727a9eaad_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/04cb7676af8631a4_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/05123e9d5ca4bb40_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/0547c35d653701bc_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/05b2a682c531d21b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/05e6ab9f9f35cf4b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/05e6ab9f9f35cf4b_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/060cd1f132138a54_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/060cd1f132138a54_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/061539260d58d2ca_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/067633486eeab1ab_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/06dc1e2342f5188c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/079b1ce0ffa49d99_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/08269b400d633386_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/083a51b7139af6b6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/083a51b7139af6b6_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/08ad48d638a934c5_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/09b000fb3ad014ce_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/09b000fb3ad014ce_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/09cb3fd7d2f474de_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/09d6f31c68de0560_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/09f894df8e4f26ec_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/0a13c6b91d38f9a3_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/0a13c6b91d38f9a3_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/0ab392b26659de1b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/0ae0eb2748d7cc9d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/0b524744f7fb081a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/0b524744f7fb081a_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/0b92d7aa3137a9d7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/0ba0102bdce0a7bd_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/0c460ff2680b84be_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/0c708723bd6fb49b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/0c708723bd6fb49b_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/0c8142858c8a8cd6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/0cafc0c761e2aa86_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/0d2d2d097885f082_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/0d9a03656e34d0df_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/0dcdd33dd73bb2a5_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/0dd278968560fe40_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/0dff3d8b28599dea_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/0e691394da245915_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/0e691394da245915_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/0e9fcc4bf5209cb3_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/0e9fcc4bf5209cb3_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/0eae9661bef1aec1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/0f494170c89d6c68_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/0fe3bdbdeefbfeba_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/10b0bcaf44441eb6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/10fa69ea87abb8e8_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/1103408f901a4630_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/11d4267d4579a4cc_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/1335bc41a2ff5741_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/13fab61b84493ab7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/140de549ed0b11a6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/149fc7f20f4249b6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/149fc7f20f4249b6_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/16183a7a01cc5ae9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/163d17361f599a4a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/16a6931310311f0b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/16ce655a2fb17f9d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/17216002a6f88b31_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/17265df2fe87a1d0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/1772d2edb20d0a5a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/1772d2edb20d0a5a_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/1786025e2308b5ff_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/17d74b8f97bc2876_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/18620f0cae546637_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/18c59afe2306594c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/18e4757eeb070a4d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/18eb19b8e9390b88_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/194fdbd0630cd2be_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/1957b52a86294ed5_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/19da1491fe9e160c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/1aa1dbd18e49fbc3_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/1aee571026244a25_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/1b1127aeece6cde9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/1c1f0903174d921d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/1c1f0903174d921d_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/1c251a94bb693aae_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/1c251a94bb693aae_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/1c3fa28db0528c79_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/1c3fa28db0528c79_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/1c7ac1cbf051b90d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/1d045de85ea81295_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/1d08ce0054bc5804_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/1d697042fd67c7c4_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/1d9863f220fc0316_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/1e1cac68e8f3b2a0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/1e5c6f69467d8e22_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/1e7f5c08b8e4e380_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/1e994007c405cc00_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/1eb8fb93bda3177f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/1ed246a826f4aafa_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/1ed609ce142ced2e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/1f0ebace0b125963_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/1f0ebace0b125963_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/1f3a0298ba271c55_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/1f468e6d025b3a23_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/1f468e6d025b3a23_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/1f5fd83b5a400f00_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/1ff8b4449b1b0b30_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/20c4958cd97d5229_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/2117a1853e3f2a48_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/213bbaf68fef2863_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/214920e746c10d56_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/214920e746c10d56_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/218cde139e656e46_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/218cde139e656e46_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/21ea6092fc4bf3dd_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/2229509e3c7389b0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/223d93c86e069699_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/2326bf1acb02c4c9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/23704bd9e3ade0ef_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/23704bd9e3ade0ef_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/23c64c660a0a8fed_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/23c64c660a0a8fed_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/2412ef7c8fdd497c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/252cedcfc269a8c6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/255c1f570a9ac27f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/25d4654c18020a5f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/2642a301765867df_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/26a5fa2c779e8415_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/26ce1c765f56c8db_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/26e8a59c8fcff3f0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/26e97aea58c16df0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/270a3b619e0b65d9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/27293f4cb3e5fb7b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/27dfd07fdddb1709_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/27f7367222e0da93_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/27f7367222e0da93_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/2801bb1aedb09ace_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/287c729ce1ee8237_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/28b81e937341619f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/296c80be20dea0a5_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/299df59e8be54456_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/29aad51301923671_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/29aad51301923671_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/29b50be7d5337b1d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/29d87ddbfb35acf6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/2ac4d343560088f3_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/2bcb750390e70bca_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/2c4dab2b8ea118be_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/2c53bf15dc7d382a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/2c654035e96392f8_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/2cd3da05b34a0731_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/2ced7c471d3a9946_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/2d774716df65c34a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/2d774716df65c34a_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/2d9085399ce1a5ed_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/2d9085399ce1a5ed_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/2e7ea4941198751f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/2e7ea4941198751f_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/2f01738de10e6772_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/2f01738de10e6772_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/2f0b8132c4bea2d5_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/2f36fea9267ddd83_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/2f36fea9267ddd83_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/309fa92a4c877c18_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/30defcbb2bb6aa1a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/30ec39545b49aa54_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/30f19ca12e91f02e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/31ef5bfbc2973709_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/31fa29da9e851988_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/3205bb7c7de7440e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/327888b40b67cc95_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/327888b40b67cc95_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/328ff6eb2a5d587d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/32a84721a1d1bbcd_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/32a84721a1d1bbcd_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/32db6c56ea3cab09_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/32db6c56ea3cab09_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/32e2c4b5c8de7abc_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/33015423ba7c63d2_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/332cda7d6f4a42b9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/3440ac044f1e5236_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/346c38803b756847_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/34a00ae2cb52aaa2_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/34a00ae2cb52aaa2_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/34a5891628d242a3_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/35109e92146d357c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/35165c2f6e8cc8c4_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/351e690514b3f9f9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/3520a085242b09d4_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/359de2112885354f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/35d8f8ef9ddf1a49_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/35d8f8ef9ddf1a49_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/35ed223cbb44bb43_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/3601fc5e4ed5eae7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/3601fc5e4ed5eae7_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/368f830949aa58eb_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/368f830949aa58eb_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/36be1a8943e9ce00_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/36cbc364191c11b8_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/36d751db5dcff1d4_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/3729fa0efaba8337_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/37a2e3af74472b10_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/37ac4620a94296fc_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/37d5b7fdee7b3957_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/37fba6cce54ae226_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/383741e63b3c3fcf_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/38d6cb3d1fd3e617_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/38d6cb3d1fd3e617_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/38e76d0bd76a6156_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/39284b91d360f619_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/3968e94bb1142bd1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/3968e94bb1142bd1_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/39e55388dd2cd8ce_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/39f29f70914b766a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/3a36b62cb22790ee_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/3a375421f5b86832_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/3ac437491273e126_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/3ae44b1bd13dea04_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/3ae44b1bd13dea04_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/3b4076ed28bf3ff9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/3b7912069836d716_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/3bd551ff103c88f9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/3bfeb15cbdef351a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/3c73470c8c7f7540_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/3cc701eb0bb46d8a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/3cd4d1aba768e9a3_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/3d8db76e54542eb6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/3e8ca313dcb4c07c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/3e8ca313dcb4c07c_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/3f0c43b19fefd04e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/3f8fec17670984bc_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/40379f8a76ee5e7e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/40835d6c70a3caf3_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/423c6a390bd3a2bf_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/423c6a390bd3a2bf_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/42d7834e47109bf2_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/42d7834e47109bf2_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/42ed82c5d02ee71e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/430186e3ae37db9f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/430186e3ae37db9f_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/433ea32573445487_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/4398cc970337c9ad_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/43ef5d7cd2c866c1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/441c19ea6513a67b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/441dbcf906d5a240_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/441dbcf906d5a240_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/44262c51d3d12e24_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/442ea9873de73825_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/442ea9873de73825_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/446bf7a0b1addcee_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/446bf7a0b1addcee_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/44fe6e5da27e61a9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/45106d1b736a68de_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/4543164c1801b580_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/45708144a6589cd8_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/45cc1d6a521e450c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/45decc49c21c7c0d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/45ef9b37931d8030_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/45ef9b37931d8030_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/46daff1a02f68a93_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/477ff50f7da93a5e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/479fb9e5a39b1284_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/483d75c6d14950fd_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/48783723bd618fbe_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/48a4020f6b284e62_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/4930349ac5bdaf95_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/4957ba728b0ac39e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/4958efe9b332199c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/49688aceaaefb3df_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/4a8ad21154d46fbb_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/4aa2d86b26a106a0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/4ad58c86c2e48186_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/4bc352ec78088335_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/4c4ada0c551d767a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/4c4ada0c551d767a_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/4c5c6bd7a9741ebd_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/4c76c7a80ba540eb_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/4c76c7a80ba540eb_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/4d137094407c24a0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/4df4ea25148b7b8e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/4df88a55ff5250bc_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/4dfeccea386878c4_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/4ea940e7f43148c7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/4eda6d38ed73d9d1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/4f0ce9a8c9e2930b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/4f0ce9a8c9e2930b_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/4f749a73f475f6d5_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/4fb0c0644e3bf4d0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/4ff28143e0cd3056_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/50346c50993be916_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/50a1b2693e9d288c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/50af2e27d9533067_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/50af2e27d9533067_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/50bd74e43006d7a4_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/50db13ff9f8667ab_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/50eac6dd39abc46f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/511546c9988cc4fe_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/511546c9988cc4fe_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/51293e64f4e52df5_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/513798a24a123cc0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/513798a24a123cc0_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/51b8b055cd711c5f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/52263b053b1db3da_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/523c3e245e4f70e7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/523c3e245e4f70e7_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/5294478d0a0367f3_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/5294478d0a0367f3_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/530a4540ff95fd2b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/530a4540ff95fd2b_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/5352d092b301e582_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/5352d092b301e582_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/53d2718175b5aa2f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/53dcc8c2cdc22d84_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/54c82ca00a765499_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/550a151211aa8f30_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/558dcf1ca073b89b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/559d85e976248450_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/56817d23267114b4_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/5681a580a4199e26_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/56ba56576f463004_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/56ef9bf95d4188cd_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/5753937e31914f96_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/578286609c84b497_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/578286609c84b497_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/58a87ecb873c3675_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/593d430f03719714_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/593d430f03719714_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/594387e4de1e5c1e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/59ac1d5195bb3577_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/5a21aad954e0afae_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/5b72246585668d70_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/5bf99169d8879d37_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/5cc8d7e7d0dd1720_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/5cee58eb648aa5c8_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/5d09415e3243f24e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/5d09415e3243f24e_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/5d16a9b9cda9567a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/5f88581bdada8542_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/5f88581bdada8542_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/5fd5b294855d7cda_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/6064b216d87f43d9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/6064b216d87f43d9_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/608952a8032e1ec1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/60dfc55d1cb18e8d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/6103be495c9f0fbc_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/61567a85339bb980_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/61567a85339bb980_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/61d28c54d0ec7235_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/61d28c54d0ec7235_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/622bbe9538001149_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/622c3eb7c328ffa7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/62530ba030521b41_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/6257246058c5daca_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/6257246058c5daca_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/630e1ef315d4eae4_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/6369cd0c4f4efa54_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/638d2c465a2107ff_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/638d2c465a2107ff_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/63928f50535c43cb_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/63c5894ef2b17e65_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/63c5894ef2b17e65_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/63f45554a75111e1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/65fb2e1e36f904d4_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/66fa204a4a3af845_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/6748bd2791a82ace_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/6779c8cf5996acd2_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/67a270c93ddf5110_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/687aacc61a31345e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/687aacc61a31345e_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/689713d3d9f1f849_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/689713d3d9f1f849_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/690b42100d768bd9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/6933f8d6a19d88d2_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/693ce182b99514f7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/69833ebf814237d4_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/69c6c36317e440b8_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/6a2c1946aea9644f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/6a510fbb89996a66_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/6b2fdd0fbd3bbfc7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/6b5d77b1fc19ca67_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/6b85f2e2f2700469_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/6b85f2e2f2700469_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/6c1a923c3f5e4386_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/6c9b68f7a5653067_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/6c9b68f7a5653067_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/6cef2d941e597d5b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/6d0b16cdfeafa1c5_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/6d0b16cdfeafa1c5_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/6d35bcaf282781c8_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/6d501ac5aff10014_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/6d501ac5aff10014_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/6dc9be6ef6e95267_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/6dd07335af55eab8_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/6e7215e4cdc435e9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/6ef2a81e16c38afb_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/6f4334a34f4742a1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/6f4334a34f4742a1_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/6f735d18a1a7b74c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/6f8154c008242b03_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/6fdcd334ac038785_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/709ada9ae5fb541a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/70a104efec749d67_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/70cb160a1daf5cca_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/70e39730015bd97e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/710a0d8f4af3c06b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/710f3bf109e786c2_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/71535f26b12fd340_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/724abf01c0317399_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/7276d2f32074745c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/7276d2f32074745c_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/72f182534350f588_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/7366ddd9f0884914_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/7367c5cb771233a8_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/7377f1fde208cacb_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/73a3e5feeaa5011c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/73a3e5feeaa5011c_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/73bb0f71f3489db6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/73e4875ff7bd7187_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/73e4875ff7bd7187_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/73f43bddd46e592a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/73f43bddd46e592a_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/74ae0f61809ac93d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/74ec99204c680827_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/75477707732d500a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/75477707732d500a_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/75a6730445717086_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/75bf7056994f5803_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/761a19a7074ebbb0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/7673b54be5292216_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/7673b54be5292216_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/771dd3b94603084a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/775f84da77276e29_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/775f84da77276e29_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/77c4eaee97194d59_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/7861b8ce232c1a4d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/791d3989e0f391b9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/791d3989e0f391b9_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/79245308382c592d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/793e9860b573049c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/79a70a9339047192_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/79b77c552a5424c6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/79bb30391c135ba7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/7a23f72341f3cffc_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/7a50acac93fa5ec2_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/7a71361415c9bcd6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/7a81bba7c04b569f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/7a991df0b1ae8f88_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/7ae4aa9b72af7540_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/7ae4aa9b72af7540_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/7afd228e4121c55a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/7b4b87d57d64f35c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/7b4b87d57d64f35c_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/7b8d42b73cc6ae75_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/7c0fc7e80bba5d20_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/7c0fc7e80bba5d20_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/7cdfe013ff471e52_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/7dcac4522efbc8df_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/7f32da8e30756b40_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/7f4c1222dd5bf418_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/7f4c1222dd5bf418_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/7f4ed7f823ce75ba_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/7fcd4916b14c515e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/7fd4d46ed6626f0b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/80a3f1dbb26dbfa1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/820af54f7c5c23bf_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/829d6242931f2eb7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/8328b9dbba6b8fd9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/83d8d0cef30499b4_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/84b4412ac28f79b0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/84b4412ac28f79b0_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/84d7d25fb68bda01_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/8580d4386b63cd1f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/85b23a16455bb50b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/85c46a97e0c7ca2f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/85ecf4d706b189a5_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/867d404186e3cdbc_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/86b5a45586e1e558_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/86c90a3f346c51e2_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/86f0e7a22ce97aab_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/86f5389c6d8dcc17_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/871adb95c81e1bb0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/8783f0e436853ee1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/87948b1fbd98a139_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/87948b1fbd98a139_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/87bc1fb8309724cb_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/87bc1fb8309724cb_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/881b14ed98c84387_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/8880cb1bd2411da9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/88bb7aa99d5707e4_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/8922ad6d8340114f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/8922ad6d8340114f_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/89320be43f8b181b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/89320be43f8b181b_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/896d0606f6f178f8_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/89e36aa18eb949b0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/8a1311725ca33b2c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/8a1311725ca33b2c_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/8a1dd71e45d70bec_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/8a5cb8368faaa817_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/8a67f25f0fe360d9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/8a7946ca343b182e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/8adb8163cc75e963_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/8af0f5b7ff0e341a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/8af0f5b7ff0e341a_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/8af60c358551eda6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/8af60c358551eda6_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/8b6c53e4cf5916cd_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/8bf87ef5f2ada06f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/8c4d4b74b5fa40b8_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/8c4d4b74b5fa40b8_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/8c9249c4bc51caf4_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/8c9249c4bc51caf4_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/8dec7321af0f005d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/8dec7321af0f005d_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/8e0e054a2a9dd2f2_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/8e38e066d7953e27_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/8e962ea0a8d230c8_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/8f31b5ae5902a058_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/8f31b5ae5902a058_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/8f55e19132053fb6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/8f55e19132053fb6_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/8f583e357cd7515f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/8f583e357cd7515f_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/8f59bf79f2f5103f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/8f59bf79f2f5103f_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/9061de6d910b03ce_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/90aca6c18f295dc4_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/913c2b2f48f581c0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/913c2b2f48f581c0_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/91410ce43700f7e9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/9159c7a5e4f0025e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/9224c749c21fa128_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/929187cccab5c250_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/929187cccab5c250_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/92bb10d4094904d9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/92c7dc0c7ce5c239_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/9346b5f75f69dc72_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/9346b5f75f69dc72_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/935666e2b0d4bca2_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/935666e2b0d4bca2_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/935693ca843c6796_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/935693ca843c6796_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/9368859968915a05_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/939235324800599f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/941e8ff6e6cc956f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/94261ee719cd51bc_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/94261ee719cd51bc_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/943ab0ee2adc1def_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/943ab0ee2adc1def_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/943d45722f6273e3_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/943d45722f6273e3_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/94b48dbed9bd9dcb_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/94bd25466474a148_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/9526b4eb4acd0495_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/9526b4eb4acd0495_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/953ff05c6941df33_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/953ff05c6941df33_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/9543ecdd789d55a6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/9543ecdd789d55a6_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/956aece011f4da22_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/956aece011f4da22_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/96b955ea2d155f3c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/96f31da99cc3e139_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/9705713437c8bec9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/973345a0d41b9059_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/973345a0d41b9059_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/98ad008e1a1367da_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/98af4b8b6c524c38_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/98ec2f4e90ab1724_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/98f1d6e4d1bf290c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/98f1d6e4d1bf290c_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/991a6243628a1f15_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/9b030d0903524b0d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/9b409985cf9f40a5_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/9b409985cf9f40a5_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/9b41e595d8f8cefd_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/9b41e595d8f8cefd_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/9bdac4054f84355d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/9bebf014733b6009_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/9c07b2a4783f7e98_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/9c18e98be1dd3353_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/9c2e64b2b71eed0e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/9c3ffbe79bd659f2_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/9c6dd37c9de07c66_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/9c7e485fc0790948_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/9d2bd8a83fee54dd_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/9d2bd8a83fee54dd_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/9d48d368db8a60b7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/9dde186cc9f2e85b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/9ea3450d37ed2352_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/9eb60986e4e80f25_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/9ec07980ffd73bf1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/9f19fe9fbffd2b56_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/9f25813bdf5d93b8_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/9f3cbe27363af30e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/9f9e2855b8b4febf_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/9fa241803209717e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/9fda719601763512_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/a0020d97813369fa_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/a038abca13edc87c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/a067a8610006159e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/a067a8610006159e_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/a0e855153df1f749_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/a0e855153df1f749_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/a0f1d4f28d0d8aa1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/a0fdd0cfdce94779_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/a153e94113c0c8d2_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/a166d859c95a24ac_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/a166d859c95a24ac_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/a1b6144a8cf24525_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/a2db43c631cb0b05_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/a315689f925e88d6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/a376e7d024f4e39b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/a3835c8816906f37_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/a3d1eb323ba120f7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/a3d1eb323ba120f7_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/a41b3f13da5b1794_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/a41b3f13da5b1794_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/a41b8d1b7e3dd822_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/a41b8d1b7e3dd822_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/a4695f565d1d0241_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/a4d791a955b8f30e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/a4fc30740db061d8_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/a504595e2b4816bf_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/a504595e2b4816bf_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/a508ea0795a19684_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/a508ea0795a19684_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/a50a6632b3ebf93e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/a5328da85f586a61_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/a55841be88ec35dd_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/a56a6ba8806120ea_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/a681072f69b0ecaa_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/a681072f69b0ecaa_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/a6e4ad14bbe4ad8d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/a7228b5f391c7a0f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/a77065b4ee3f4a5f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/a7fe7b590ba1833f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/a7fe7b590ba1833f_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/a8b73624ae458f78_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/a8b73624ae458f78_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/a8cd86eb6ad69dde_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/a8cd86eb6ad69dde_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/a8ce478e6ad84c5c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/a8e27f6e0e0df5b1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/a8e8236e18f6b0bd_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/a8e8236e18f6b0bd_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/a949dd1a80ad35c8_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/aa4bcc41d254ec4a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/aa655f56c98a9fb7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/aa772af924db6617_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/aae5d5a899f78778_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/aae5d5a899f78778_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/ab16558c2535aa72_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/ab16558c2535aa72_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/ab1e2f76020a766a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/ab2bc633da052bb2_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/ab5ca508cb16c84d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/ab5ca508cb16c84d_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/ab6543335d83780a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/ab6543335d83780a_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/ab708ee3acec9c95_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/abad9c1308674449_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/abd69387730cac5e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/ace3914ac249e337_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/ad238eecabb3bf9e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/ad238eecabb3bf9e_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/ad4507d804dd9d6a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/ad4507d804dd9d6a_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/ad71aedc7abf259d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/ad71aedc7abf259d_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/ad8ee33bdd6932e5_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/ae4c0910f21b0635_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/ae4e2426f4ff6183_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/ae4e2426f4ff6183_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/aeeb8cf5fb2a6de3_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/af86404fe46d3b28_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/af86404fe46d3b28_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/afada5d77309b0f7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/b08ad2c2ca8c7c22_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/b093cea241af3a23_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/b09c1c29efe07bef_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/b0d9d01c8e9ea336_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/b14b6bfce58d986e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/b1c1b8d2a7fe4624_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/b2175ae8b2676b59_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/b28ad861f89acf5d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/b2928123f79d79a9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/b2a7e28c77d9921e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/b2c0372f4f8ccbe3_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/b31e9ea1a7f93e08_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/b371c8e190a1c497_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/b39534f082d77d4d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/b3ed5a76dbb503ff_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/b3ffdaf2a35c0288_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/b3ffdaf2a35c0288_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/b41b26d417e9cbe8_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/b44d93c6d7dfc00b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/b4707dd484d20875_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/b49966835b1c1d10_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/b4a7d44531733e15_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/b4ebd754b60370ee_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/b51071849e6ce9bf_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/b569d319c182cfa9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/b5864e4dd88ab1bb_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/b586b18c91f9637e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/b586b18c91f9637e_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/b61cdeb0d09598c4_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/b64275ad4710baf7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/b667f98695f2a81b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/b667f98695f2a81b_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/b68164526abeb644_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/b6bae416e9e7cc5a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/b6e64b9c3602659d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/b6ffeb292da0819c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/b701495e737e9569_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/b7d4456629fdcc6c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/b87e3c445a1b27d1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/b87e7d58490ffeb5_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/b87e7d58490ffeb5_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/b88bba09665a0a87_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/b88bba09665a0a87_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/b902796a9df3342c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/b9ba26b7e74f289b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/b9be2485870a645c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/b9eb742f7013bee9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/b9f49f5909830590_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/ba0913046658d355_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/ba38d09f50e0773a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/ba38d09f50e0773a_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/ba769caf586e4f43_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/ba769caf586e4f43_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/ba85fab75db0fd07_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/bac73a815d2b934b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/bac98421ca1c2fbf_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/bac98421ca1c2fbf_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/bacbc6a543d12f63_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/bad971a94d1bf3bc_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/bb11e1c80bdeec13_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/bbe514bd9c538202_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/bbe514bd9c538202_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/bc1462f5835e20b6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/bc19c956cdc8e800_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/bc4de8bb2541b7a9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/bd308d48551b6777_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/bd6cde1a88919e5b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/bdc7473cd990ab7c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/be37396559ceaaa7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/be43730dbb112d78_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/be87d844c2185ee8_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/beb08b8b616b7350_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/beee568cdf52d56a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/bef523ee264e03a6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/bf219a7ca4e0e2db_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/bf219a7ca4e0e2db_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/bfb7c6494f596d9b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/c00520fa3d8342ea_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/c0aa0869e28cef03_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/c0aa0869e28cef03_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/c0c2523c2b3017cd_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/c0ceb5ed324b6776_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/c0ceb5ed324b6776_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/c0ef5dd2efa3d2da_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/c0ef5dd2efa3d2da_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/c0efb48a0f36bdf1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/c1bd60a45b969535_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/c1d389498d5bc95d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/c20571520725e922_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/c234dbc237cce573_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/c24b50ddf3ec84ff_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/c2d910d9ca7c4ab1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/c2d910d9ca7c4ab1_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/c3c96fce7d5d5ef9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/c3dcbced2b346b1b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/c4416666390b391b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/c4dee0122d776aa5_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/c5b15f6e0914c805_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/c5c6ad7dd2359d4f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/c5f96edcfce451c6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/c7045a4ec00ab0b3_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/c7045a4ec00ab0b3_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/c77197cb4bd026f5_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/c827eb10d2414485_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/c8835d6c8deb1c6f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/c8a5b36a20bc2678_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/c8ab493167cdb6e5_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/c8ab493167cdb6e5_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/c8b84b7342bfebbc_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/c8e635c5956b864f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/c8f81912308f826b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/ca1e309e702a76ed_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/ca1e309e702a76ed_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/ca46c2aa81ec7047_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/ca8ed88bcbbbd3f2_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/caf1cd3ed85eb74e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/cb0fab0ad9057d4e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/cb2c203e1e0f4c74_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/cb2c203e1e0f4c74_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/cb7fbe610da855b5_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/cc180057d87fdd33_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/cc180057d87fdd33_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/ccd6c7a530b4f930_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/ccd6c7a530b4f930_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/cd47fc03a4aba6dc_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/cd572a1b4f793097_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/cd5739b39908fc4f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/cd7e9fefbddf335a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/cd9d3e7c148babcf_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/cd9f5daeb246bdd6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/ce31d51328e39851_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/ce667784c6e68c0f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/ce667784c6e68c0f_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/cec8de2e6b5a7044_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/cf3abbbd2916e44b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/cf3c017c582b5bc8_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/cf825e02b94abade_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/cf825e02b94abade_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/cfbfc04797ccda7b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/d04f03283780f57f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/d074796fe909fa7b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/d07a75c19ff93b9c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/d07a75c19ff93b9c_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/d0859f7e4aff67db_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/d09cecc3c8d96293_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/d09cecc3c8d96293_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/d2832816719c1956_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/d3199c592bd51ecf_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/d38dd104113092a3_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/d39d60dc00b7c5cd_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/d3f03da5ec12b7ee_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/d58347d203ad869f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/d58347d203ad869f_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/d5a54fa9ee890493_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/d66a38fb3dc673ce_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/d6ce347541d9648d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/d738c395227b6276_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/d73c2f40205ade4d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/d73c2f40205ade4d_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/d743c97f71a60d6f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/d757866a00c875a7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/d7babbddb18c59cc_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/d7babbddb18c59cc_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/d7e73c042cbaf5db_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/d84c547bba67527e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/d8ba5d53d0a2e9a7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/d948e8b78554f2a0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/d948e8b78554f2a0_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/d9b8fb7c3bb0bb46_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/dac293fe9d3f4e47_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/db50568326c9b20d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/db69f92d871865d3_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/db88765cff0fd9c9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/dbcfc53af8ef8430_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/dca106f822cbb7b2_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/dcff88ee0ba2b6d5_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/dcff88ee0ba2b6d5_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/dd66d0d0fda63b26_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/dd6ee0fe8c6d4523_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/dd9596d3d7fa6c3d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/dd9596d3d7fa6c3d_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/ddd3e4f93af24594_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/de7a26eda1e9d5ad_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/de899a798cb45de2_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/df74a43c5002ed52_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/df74a43c5002ed52_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/df923205969c250a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/dfbf502831b5bb8f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/dff8fc5eefd2b200_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/dff939b9f7314e39_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/dfff84b1c37f02d1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/dfff84b1c37f02d1_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/e00382d87e81461f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/e013830503d2824a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/e02a34609fadb397_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/e08da9266b7bc35e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/e08da9266b7bc35e_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/e0b087468fdc45a7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/e0bc01e123c1b662_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/e136fd1109282d13_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/e136fd1109282d13_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/e15c3ac0484a41b6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/e1809aa1dec51752_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/e19f9695351856c7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/e20180a84a0ba2ed_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/e253de74f4d7a3a8_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/e25646a452fb0490_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/e2829f64a4e61c11_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/e28b460f9c8fdd4b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/e2bc1d57f58eb681_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/e2bc1d57f58eb681_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/e2c516ac01f37f95_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/e2c516ac01f37f95_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/e2cff40e1dbe997a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/e305d432d2ecf44d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/e38751bbd8f58290_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/e4f75c3a735f86ff_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/e4f75c3a735f86ff_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/e4fbeec63fe67d63_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/e50a02fe3f712667_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/e589ee0b286def25_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/e589ee0b286def25_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/e5a54e20943590c7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/e5b373e7782ab510_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/e5b373e7782ab510_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/e5c9cf1989b76ba1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/e5c9cf1989b76ba1_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/e6baf625a3662f25_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/e6baf625a3662f25_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/e6cbfef54305e176_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/e738d572b32a90c4_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/e799ad5644bd82e1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/e799ad5644bd82e1_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/e7e1aab3476bac96_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/e886411785d45641_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/e88ea8e12f6198ee_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/e88ea8e12f6198ee_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/e8fb0d04fb040780_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/e93ff4514e5e7f99_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/e9670b1447330333_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/e9670b1447330333_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/e99d688924ac6e22_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/e9b105d97e8f10be_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/e9b105d97e8f10be_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/e9b596c5ceaf029f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/ea35697d605d717b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/ea6e9425677b81ad_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/ea6e9425677b81ad_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/eb15c24530086e0c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/eb15c24530086e0c_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/eb78ce0f85d8c407_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/ec356c6f232412e8_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/ec87d2213fdaa13f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/ec9e4bdd9347694b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/ecda1ae0d600ab28_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/ecfb82875bcc777a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/ed270477f6d1ece8_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/ed270477f6d1ece8_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/ed783c04af39baae_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/ee19d828b2eb1dd4_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/ee71eabb5532d76d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/eea5b951f3509e76_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/ef5361bebb951fda_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/ef5361bebb951fda_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/ef5887180c77f64f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/f0b76897b3d3a7ff_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/f1105ef47eb0a55a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/f1105ef47eb0a55a_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/f12c1892975670ae_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/f2123455665e159e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/f23051e1b37a541e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/f2b8a88f7c04a3d0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/f2b8a88f7c04a3d0_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/f2cff1f7ecaa14bc_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/f3271d1e36c34e51_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/f38fee92a1651aca_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/f3c82aea08a79b27_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/f3f2391f5ce23d1e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/f43ac036cb54ce28_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/f47bc38722ee1c81_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/f47bc38722ee1c81_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/f4d991309c62b54c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/f4d991309c62b54c_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/f4ea72050b4078a7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/f575b1617f383aca_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/f5af34b25a339b8c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/f5af34b25a339b8c_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/f623fc8d42740b21_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/f671d11c42caa3ff_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/f685684bc3d209d6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/f69e2d16749c5942_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/f69e2d16749c5942_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/f726abc9102029ac_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/f726abc9102029ac_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/f79744824b297c34_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/f80d833dc31a25f0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/f825b87d5ca26b02_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/f88ab9fbc82b8218_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/f8c96fac3f694495_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/f8ce970ea55d9009_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/f8db1d8ec293bdbe_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/f8db1d8ec293bdbe_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/f96bfa4a84f6aedb_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/f9b63a35f54e6cc8_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/f9b63a35f54e6cc8_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/fb179cc2a184cdf7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/fb50f1b52c8fd94b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/fb70769c8399b633_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/fca46082b1b5ab14_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/fd93add5705ab1fa_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/fd93add5705ab1fa_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/fdfb8499b73a50dc_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/fdfb8499b73a50dc_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/fe1d084e0d35cba2_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/fe9c2783fbbacb79_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/ff3e757a43f44f33_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/ff4b34175737767b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/ed9c4292-8564-4985-872f-806e6cda6b1e/index-dir/the-real-index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c194d36b3b175fcb92a6641fce44c3c450ec5885/index.txt create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/003e46dfa020b539_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/0c7647488b53391d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/0fee90b3154d40dd_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/119ed47a376f2651_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/12afb400e97448f9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/13699328ec436ec3_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/19780c06974eb96e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/199da6d6a0c58d80_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/21089030b93822e5_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/236a3309f0f971ef_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/25c1936bf63a35e2_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/2694a384ac4cc33e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/293c338c8bf853f1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/294eb073b9e36aac_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/2c3b1663f8077631_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/2cd404dad84a7922_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/32f71bb5ec2dfd99_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/3466720e09f2e20f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/39e08aa58d9c7d7c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/3b114891236fa3d9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/3b114891236fa3d9_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/3df382128cef311b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/3e6268b294412d61_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/4222d76aef767290_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/439848e05d32573d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/45118f9747c4892a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/48eddf6b586c49b9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/4bb5c1134bb09a25_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/5577af1e5aa23c4d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/58172732236739b3_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/5cc53617e9805d93_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/5ef22106a5cbac93_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/67e08538bb1ea38c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/6be50e6522c544ff_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/7258704b683a1901_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/73da199e1b08c7b0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/75360191d8f453eb_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/77c768f386034b86_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/77c768f386034b86_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/82184a88fc250056_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/85a7fcc7a7cbd124_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/87efe62f47145652_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/87efe62f47145652_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/892eeccba4b59f85_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/89af32d5ead849e2_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/8be08effbfba8e82_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/8be08effbfba8e82_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/8cd89069cda692fa_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/8ea4ca1ba0311bb4_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/91f5f98a82824752_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/928c2b25d52679e0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/93b19068f24a39eb_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/994ce7ca59be49b5_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/99e7f3c6d22b8a46_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/9b28781c6ee3f007_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/a1c638fe9a98477f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/a4fc085d7633f7f8_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/a56a3431222d973e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/a56a3431222d973e_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/a9eb274094ab27d8_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/a9ec1dd51e9acf2b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/aca1a0ae1f0ed8af_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/ad185eb55c0361b8_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/b6b41889d5ec8834_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/b9256146face4556_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/c1541e8df3abf73e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/c1541e8df3abf73e_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/c2724c9f360aed77_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/c60bd809f05efb2d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/ca27752d5234bd03_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/d1a1c0da3f7c2d50_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/d1a1c0da3f7c2d50_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/d8fb532cd3d79b9e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/de344b189d5554a1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/e090b6ab1241b621_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/e0c6a47d1292c33b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/e0c6a47d1292c33b_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/e36af5d6edf1d44b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/e88bb3bf086f15dd_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/ebff3f62aac2dcfd_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/f043a1e616999554_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/f043a1e616999554_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/f501f85093a60586_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/f7ebb963a3c873ef_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/f92ff1e61f7b6520_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/faf8e747d63a154c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/fbae1f39235dc6fa_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/fed1ab16a3cca7be_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/ffbe24e1bc4c9e36_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/98af87df-2420-4aac-a03f-7fe038216441/index-dir/the-real-index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/c7e8d25ee2b9f64ceb57a9896b2f3be34709ec53/index.txt create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/250ab7d9-0d84-4bc7-8cb4-0d4634211a71/00d49b4d2587980b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/250ab7d9-0d84-4bc7-8cb4-0d4634211a71/0691678d2aaae303_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/250ab7d9-0d84-4bc7-8cb4-0d4634211a71/0def118dbfd34d66_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/250ab7d9-0d84-4bc7-8cb4-0d4634211a71/11127f2fe7d5c20b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/250ab7d9-0d84-4bc7-8cb4-0d4634211a71/17458aa7431ea693_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/250ab7d9-0d84-4bc7-8cb4-0d4634211a71/27e033c33c6c2d70_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/250ab7d9-0d84-4bc7-8cb4-0d4634211a71/2c596d4dac203c3a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/250ab7d9-0d84-4bc7-8cb4-0d4634211a71/306ce19568bd5862_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/250ab7d9-0d84-4bc7-8cb4-0d4634211a71/312e55c27d50500a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/250ab7d9-0d84-4bc7-8cb4-0d4634211a71/31f0026bc83eaa8b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/250ab7d9-0d84-4bc7-8cb4-0d4634211a71/3550787ee3393fe4_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/250ab7d9-0d84-4bc7-8cb4-0d4634211a71/3fe1746c4c6e609c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/250ab7d9-0d84-4bc7-8cb4-0d4634211a71/403708932b391e16_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/250ab7d9-0d84-4bc7-8cb4-0d4634211a71/52d983a50eb8360f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/250ab7d9-0d84-4bc7-8cb4-0d4634211a71/551ee88b37d6fe88_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/250ab7d9-0d84-4bc7-8cb4-0d4634211a71/595f9fcdb423d2a0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/250ab7d9-0d84-4bc7-8cb4-0d4634211a71/5a0af9654c6eb91e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/250ab7d9-0d84-4bc7-8cb4-0d4634211a71/5ae24d424d2370ef_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/250ab7d9-0d84-4bc7-8cb4-0d4634211a71/61010eea16ca8cc3_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/250ab7d9-0d84-4bc7-8cb4-0d4634211a71/61f93fcbd25e4a1c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/250ab7d9-0d84-4bc7-8cb4-0d4634211a71/62f8e3beac831923_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/250ab7d9-0d84-4bc7-8cb4-0d4634211a71/6429e2e913547ffb_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/250ab7d9-0d84-4bc7-8cb4-0d4634211a71/6b1a17bf6ed294bc_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/250ab7d9-0d84-4bc7-8cb4-0d4634211a71/71b5a1796330c157_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/250ab7d9-0d84-4bc7-8cb4-0d4634211a71/721b6df1b6e9066f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/250ab7d9-0d84-4bc7-8cb4-0d4634211a71/7454ae9888c49958_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/250ab7d9-0d84-4bc7-8cb4-0d4634211a71/766234bef285fb50_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/250ab7d9-0d84-4bc7-8cb4-0d4634211a71/77f7a4868a83c225_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/250ab7d9-0d84-4bc7-8cb4-0d4634211a71/7babc87337125856_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/250ab7d9-0d84-4bc7-8cb4-0d4634211a71/7c53e3148d519dcb_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/250ab7d9-0d84-4bc7-8cb4-0d4634211a71/7e3595566a97799e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/250ab7d9-0d84-4bc7-8cb4-0d4634211a71/824feeeeab1e0c29_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/250ab7d9-0d84-4bc7-8cb4-0d4634211a71/84afcdbeb0258dba_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/250ab7d9-0d84-4bc7-8cb4-0d4634211a71/8e5802d93b21c0de_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/250ab7d9-0d84-4bc7-8cb4-0d4634211a71/91dea6e779d99b27_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/250ab7d9-0d84-4bc7-8cb4-0d4634211a71/9516e32044704bbf_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/250ab7d9-0d84-4bc7-8cb4-0d4634211a71/9c1489e370657f77_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/250ab7d9-0d84-4bc7-8cb4-0d4634211a71/a7a544366fabe60f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/250ab7d9-0d84-4bc7-8cb4-0d4634211a71/ab1a380089186474_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/250ab7d9-0d84-4bc7-8cb4-0d4634211a71/aecd1be9e56c2119_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/250ab7d9-0d84-4bc7-8cb4-0d4634211a71/b0a430d4637fdccf_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/250ab7d9-0d84-4bc7-8cb4-0d4634211a71/b6b7e241b2bfd040_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/250ab7d9-0d84-4bc7-8cb4-0d4634211a71/b96f102821ba86d9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/250ab7d9-0d84-4bc7-8cb4-0d4634211a71/bc8cf2acdc2f9225_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/250ab7d9-0d84-4bc7-8cb4-0d4634211a71/bd4df23e502d12a5_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/250ab7d9-0d84-4bc7-8cb4-0d4634211a71/be9256367f8f9ee6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/250ab7d9-0d84-4bc7-8cb4-0d4634211a71/ce8704f1c44d9f88_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/250ab7d9-0d84-4bc7-8cb4-0d4634211a71/d05580d6490888ac_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/250ab7d9-0d84-4bc7-8cb4-0d4634211a71/d1546d22654a128f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/250ab7d9-0d84-4bc7-8cb4-0d4634211a71/d3356420e76bf5cb_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/250ab7d9-0d84-4bc7-8cb4-0d4634211a71/dd79010cb0591772_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/250ab7d9-0d84-4bc7-8cb4-0d4634211a71/ddd50199ea01f2fe_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/250ab7d9-0d84-4bc7-8cb4-0d4634211a71/dfeebfabf371b18b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/250ab7d9-0d84-4bc7-8cb4-0d4634211a71/e71bda0f52ebdb1e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/250ab7d9-0d84-4bc7-8cb4-0d4634211a71/fc22692f46c328ab_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/250ab7d9-0d84-4bc7-8cb4-0d4634211a71/index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/250ab7d9-0d84-4bc7-8cb4-0d4634211a71/index-dir/the-real-index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/2a666d8f-5250-47b0-b031-89b418a19cd5/031f48e0c36b9934_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/2a666d8f-5250-47b0-b031-89b418a19cd5/14860bebeafa40d1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/2a666d8f-5250-47b0-b031-89b418a19cd5/26038abf687e8399_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/2a666d8f-5250-47b0-b031-89b418a19cd5/2afe578606b9339f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/2a666d8f-5250-47b0-b031-89b418a19cd5/2d89c98debc14a6b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/2a666d8f-5250-47b0-b031-89b418a19cd5/3917654c9f69b5b9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/2a666d8f-5250-47b0-b031-89b418a19cd5/3adb0f728a11ebd5_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/2a666d8f-5250-47b0-b031-89b418a19cd5/447d923c5308216e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/2a666d8f-5250-47b0-b031-89b418a19cd5/4d2d3ad5ecefae07_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/2a666d8f-5250-47b0-b031-89b418a19cd5/5d31591218d525c4_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/2a666d8f-5250-47b0-b031-89b418a19cd5/6232626923dea252_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/2a666d8f-5250-47b0-b031-89b418a19cd5/69ec0c209f5c0bfd_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/2a666d8f-5250-47b0-b031-89b418a19cd5/8f0f15f44625f6d9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/2a666d8f-5250-47b0-b031-89b418a19cd5/92a8c13965c78dd0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/2a666d8f-5250-47b0-b031-89b418a19cd5/932460eeef86b971_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/2a666d8f-5250-47b0-b031-89b418a19cd5/b36369ff7e371734_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/2a666d8f-5250-47b0-b031-89b418a19cd5/b3ade297ad8aebbd_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/2a666d8f-5250-47b0-b031-89b418a19cd5/be2ec7d709529a7d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/2a666d8f-5250-47b0-b031-89b418a19cd5/dea45bcc02ee1249_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/2a666d8f-5250-47b0-b031-89b418a19cd5/eda3e39d4b0d1f86_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/2a666d8f-5250-47b0-b031-89b418a19cd5/f3b692f88bf245ea_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/2a666d8f-5250-47b0-b031-89b418a19cd5/index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/2a666d8f-5250-47b0-b031-89b418a19cd5/index-dir/the-real-index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/4629c00e-5327-4f5d-85a3-9f4bf412f654/0e8fbbc4c2a40488_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/4629c00e-5327-4f5d-85a3-9f4bf412f654/0e8fc5098f719e20_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/4629c00e-5327-4f5d-85a3-9f4bf412f654/365f0f766426ff59_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/4629c00e-5327-4f5d-85a3-9f4bf412f654/365f0f766426ff59_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/4629c00e-5327-4f5d-85a3-9f4bf412f654/43d9b2a540277cdb_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/4629c00e-5327-4f5d-85a3-9f4bf412f654/43d9b2a540277cdb_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/4629c00e-5327-4f5d-85a3-9f4bf412f654/59a5ef5a5cf2bd1e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/4629c00e-5327-4f5d-85a3-9f4bf412f654/5ef034abc1264e2b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/4629c00e-5327-4f5d-85a3-9f4bf412f654/6693c148429d6419_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/4629c00e-5327-4f5d-85a3-9f4bf412f654/a7d03ee421eb3dbd_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/4629c00e-5327-4f5d-85a3-9f4bf412f654/b045d9f800cf10a4_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/4629c00e-5327-4f5d-85a3-9f4bf412f654/b045d9f800cf10a4_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/4629c00e-5327-4f5d-85a3-9f4bf412f654/bac2607142395d46_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/4629c00e-5327-4f5d-85a3-9f4bf412f654/d6cd6f5619d0e4cc_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/4629c00e-5327-4f5d-85a3-9f4bf412f654/d6cd6f5619d0e4cc_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/4629c00e-5327-4f5d-85a3-9f4bf412f654/defe50f574a959f9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/4629c00e-5327-4f5d-85a3-9f4bf412f654/defe50f574a959f9_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/4629c00e-5327-4f5d-85a3-9f4bf412f654/ef58de15a8856b1d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/4629c00e-5327-4f5d-85a3-9f4bf412f654/index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/4629c00e-5327-4f5d-85a3-9f4bf412f654/index-dir/the-real-index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/606748f9-2def-4f33-9bf2-8c8b66d3ed12/16b0914734cc3f9b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/606748f9-2def-4f33-9bf2-8c8b66d3ed12/28d395390b4bef8e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/606748f9-2def-4f33-9bf2-8c8b66d3ed12/2dba8e9bca54bd17_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/606748f9-2def-4f33-9bf2-8c8b66d3ed12/3867c8caf074e354_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/606748f9-2def-4f33-9bf2-8c8b66d3ed12/4203240924b11850_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/606748f9-2def-4f33-9bf2-8c8b66d3ed12/474683591fdad3c0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/606748f9-2def-4f33-9bf2-8c8b66d3ed12/5240b0b8ba9f46a7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/606748f9-2def-4f33-9bf2-8c8b66d3ed12/529a6ee823e6cc5b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/606748f9-2def-4f33-9bf2-8c8b66d3ed12/55ee7539ad979a66_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/606748f9-2def-4f33-9bf2-8c8b66d3ed12/63046f9727a836e1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/606748f9-2def-4f33-9bf2-8c8b66d3ed12/649dfe80b869f136_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/606748f9-2def-4f33-9bf2-8c8b66d3ed12/661692201a84b692_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/606748f9-2def-4f33-9bf2-8c8b66d3ed12/69580f993d1ae8fb_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/606748f9-2def-4f33-9bf2-8c8b66d3ed12/6a1d47f6f150fa16_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/606748f9-2def-4f33-9bf2-8c8b66d3ed12/6fe717885e6a664a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/606748f9-2def-4f33-9bf2-8c8b66d3ed12/7f0550dbf963f56b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/606748f9-2def-4f33-9bf2-8c8b66d3ed12/7fec617899ac31b3_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/606748f9-2def-4f33-9bf2-8c8b66d3ed12/8f6b9e50046ca051_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/606748f9-2def-4f33-9bf2-8c8b66d3ed12/992556c964fe208b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/606748f9-2def-4f33-9bf2-8c8b66d3ed12/9f34627a9fc4cb8e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/606748f9-2def-4f33-9bf2-8c8b66d3ed12/a5f42fe1462b468d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/606748f9-2def-4f33-9bf2-8c8b66d3ed12/a95d99aa9fa01c1b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/606748f9-2def-4f33-9bf2-8c8b66d3ed12/aaa18642967f805b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/606748f9-2def-4f33-9bf2-8c8b66d3ed12/ac1d2ecaa0e8d025_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/606748f9-2def-4f33-9bf2-8c8b66d3ed12/b6f363ff28e55219_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/606748f9-2def-4f33-9bf2-8c8b66d3ed12/babf317802428a63_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/606748f9-2def-4f33-9bf2-8c8b66d3ed12/c647507ef171d5d4_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/606748f9-2def-4f33-9bf2-8c8b66d3ed12/c8bf83be0b42493a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/606748f9-2def-4f33-9bf2-8c8b66d3ed12/cc30867dd22dd55e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/606748f9-2def-4f33-9bf2-8c8b66d3ed12/d62243b20640b1d2_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/606748f9-2def-4f33-9bf2-8c8b66d3ed12/db75fbd99b5ec8c8_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/606748f9-2def-4f33-9bf2-8c8b66d3ed12/e717dbc105c427c9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/606748f9-2def-4f33-9bf2-8c8b66d3ed12/edff7b065b61b2d6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/606748f9-2def-4f33-9bf2-8c8b66d3ed12/ef2334ffce031aae_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/606748f9-2def-4f33-9bf2-8c8b66d3ed12/f1c54b9b916b2c34_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/606748f9-2def-4f33-9bf2-8c8b66d3ed12/f95a7e4359d84de0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/606748f9-2def-4f33-9bf2-8c8b66d3ed12/fa0c426140d219a6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/606748f9-2def-4f33-9bf2-8c8b66d3ed12/index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/606748f9-2def-4f33-9bf2-8c8b66d3ed12/index-dir/the-real-index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/90dec3c3-4c39-4bb9-b7d3-cc4c9e03c5eb/01f05e5eb1facff3_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/90dec3c3-4c39-4bb9-b7d3-cc4c9e03c5eb/0b79a63456a1f811_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/90dec3c3-4c39-4bb9-b7d3-cc4c9e03c5eb/1122af755e69c4c1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/90dec3c3-4c39-4bb9-b7d3-cc4c9e03c5eb/1f316d52f9d28644_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/90dec3c3-4c39-4bb9-b7d3-cc4c9e03c5eb/34a86980a4dff60a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/90dec3c3-4c39-4bb9-b7d3-cc4c9e03c5eb/38f7ad1abc54bc06_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/90dec3c3-4c39-4bb9-b7d3-cc4c9e03c5eb/468a6bd6dceb7784_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/90dec3c3-4c39-4bb9-b7d3-cc4c9e03c5eb/5c363957aa88306a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/90dec3c3-4c39-4bb9-b7d3-cc4c9e03c5eb/5e1fe47bc2525c44_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/90dec3c3-4c39-4bb9-b7d3-cc4c9e03c5eb/5ff1885ac233d554_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/90dec3c3-4c39-4bb9-b7d3-cc4c9e03c5eb/66bc15050307eb3c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/90dec3c3-4c39-4bb9-b7d3-cc4c9e03c5eb/697b8cf8494c0f42_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/90dec3c3-4c39-4bb9-b7d3-cc4c9e03c5eb/726185e5d82cc0e5_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/90dec3c3-4c39-4bb9-b7d3-cc4c9e03c5eb/728054c067bfc372_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/90dec3c3-4c39-4bb9-b7d3-cc4c9e03c5eb/72d259c506352de7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/90dec3c3-4c39-4bb9-b7d3-cc4c9e03c5eb/73571fb0028ab5ad_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/90dec3c3-4c39-4bb9-b7d3-cc4c9e03c5eb/74be11ee2c6f4258_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/90dec3c3-4c39-4bb9-b7d3-cc4c9e03c5eb/7509bff218b720b7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/90dec3c3-4c39-4bb9-b7d3-cc4c9e03c5eb/8666901963a78a4c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/90dec3c3-4c39-4bb9-b7d3-cc4c9e03c5eb/8d8b420db8dc117e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/90dec3c3-4c39-4bb9-b7d3-cc4c9e03c5eb/8e5272d35cf7f036_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/90dec3c3-4c39-4bb9-b7d3-cc4c9e03c5eb/8fcb07737378dda6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/90dec3c3-4c39-4bb9-b7d3-cc4c9e03c5eb/933884e1185761e7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/90dec3c3-4c39-4bb9-b7d3-cc4c9e03c5eb/9475da2150d7cbe1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/90dec3c3-4c39-4bb9-b7d3-cc4c9e03c5eb/a224e0618f6bfe72_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/90dec3c3-4c39-4bb9-b7d3-cc4c9e03c5eb/a6f0e8ef732b13c5_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/90dec3c3-4c39-4bb9-b7d3-cc4c9e03c5eb/ac93898d279f19d7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/90dec3c3-4c39-4bb9-b7d3-cc4c9e03c5eb/c0015271b88adf13_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/90dec3c3-4c39-4bb9-b7d3-cc4c9e03c5eb/c30938258fd10626_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/90dec3c3-4c39-4bb9-b7d3-cc4c9e03c5eb/d20cfe171755615a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/90dec3c3-4c39-4bb9-b7d3-cc4c9e03c5eb/d72935c57c6a9125_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/90dec3c3-4c39-4bb9-b7d3-cc4c9e03c5eb/d744fd56259648eb_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/90dec3c3-4c39-4bb9-b7d3-cc4c9e03c5eb/e27ce15f3c17d0d9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/90dec3c3-4c39-4bb9-b7d3-cc4c9e03c5eb/e377758ed04bce0e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/90dec3c3-4c39-4bb9-b7d3-cc4c9e03c5eb/f9cd58d24d232cc6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/90dec3c3-4c39-4bb9-b7d3-cc4c9e03c5eb/ff48b3d550aff865_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/90dec3c3-4c39-4bb9-b7d3-cc4c9e03c5eb/index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/90dec3c3-4c39-4bb9-b7d3-cc4c9e03c5eb/index-dir/the-real-index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/cc5333e65c324d73e333fb0d385cac84a6d48df0/index.txt create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/d5343b2bc7e26ac039a8a65aeeda783a4e881ef2/424b3664-a6e4-404b-8cb1-6104cc670c6f/81f7e3e642548ca2_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/d5343b2bc7e26ac039a8a65aeeda783a4e881ef2/424b3664-a6e4-404b-8cb1-6104cc670c6f/index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/d5343b2bc7e26ac039a8a65aeeda783a4e881ef2/424b3664-a6e4-404b-8cb1-6104cc670c6f/index-dir/the-real-index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/d5343b2bc7e26ac039a8a65aeeda783a4e881ef2/index.txt create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/d8d5ba8fe05d75a5e785b2a71348953b32f827cb/ef31a427-5db1-48ef-9cad-6588a5d84fde/0fd96541ed099c97_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/d8d5ba8fe05d75a5e785b2a71348953b32f827cb/ef31a427-5db1-48ef-9cad-6588a5d84fde/0fd96541ed099c97_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/d8d5ba8fe05d75a5e785b2a71348953b32f827cb/ef31a427-5db1-48ef-9cad-6588a5d84fde/148ff62ef6e46ac2_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/d8d5ba8fe05d75a5e785b2a71348953b32f827cb/ef31a427-5db1-48ef-9cad-6588a5d84fde/148ff62ef6e46ac2_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/d8d5ba8fe05d75a5e785b2a71348953b32f827cb/ef31a427-5db1-48ef-9cad-6588a5d84fde/160cc6f20086b761_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/d8d5ba8fe05d75a5e785b2a71348953b32f827cb/ef31a427-5db1-48ef-9cad-6588a5d84fde/160cc6f20086b761_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/d8d5ba8fe05d75a5e785b2a71348953b32f827cb/ef31a427-5db1-48ef-9cad-6588a5d84fde/1c4824e0e654dabe_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/d8d5ba8fe05d75a5e785b2a71348953b32f827cb/ef31a427-5db1-48ef-9cad-6588a5d84fde/203cb2053817cde5_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/d8d5ba8fe05d75a5e785b2a71348953b32f827cb/ef31a427-5db1-48ef-9cad-6588a5d84fde/203cb2053817cde5_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/d8d5ba8fe05d75a5e785b2a71348953b32f827cb/ef31a427-5db1-48ef-9cad-6588a5d84fde/3850996bebfb334c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/d8d5ba8fe05d75a5e785b2a71348953b32f827cb/ef31a427-5db1-48ef-9cad-6588a5d84fde/3850996bebfb334c_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/d8d5ba8fe05d75a5e785b2a71348953b32f827cb/ef31a427-5db1-48ef-9cad-6588a5d84fde/3f715975503efc3a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/d8d5ba8fe05d75a5e785b2a71348953b32f827cb/ef31a427-5db1-48ef-9cad-6588a5d84fde/3f715975503efc3a_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/d8d5ba8fe05d75a5e785b2a71348953b32f827cb/ef31a427-5db1-48ef-9cad-6588a5d84fde/44e9dc3025d793bc_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/d8d5ba8fe05d75a5e785b2a71348953b32f827cb/ef31a427-5db1-48ef-9cad-6588a5d84fde/485d544f4ff940ee_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/d8d5ba8fe05d75a5e785b2a71348953b32f827cb/ef31a427-5db1-48ef-9cad-6588a5d84fde/57402cbee8bf669c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/d8d5ba8fe05d75a5e785b2a71348953b32f827cb/ef31a427-5db1-48ef-9cad-6588a5d84fde/63c86809628e4c21_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/d8d5ba8fe05d75a5e785b2a71348953b32f827cb/ef31a427-5db1-48ef-9cad-6588a5d84fde/63c86809628e4c21_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/d8d5ba8fe05d75a5e785b2a71348953b32f827cb/ef31a427-5db1-48ef-9cad-6588a5d84fde/75610e1557b27e82_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/d8d5ba8fe05d75a5e785b2a71348953b32f827cb/ef31a427-5db1-48ef-9cad-6588a5d84fde/801d3fe0de0d9b7b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/d8d5ba8fe05d75a5e785b2a71348953b32f827cb/ef31a427-5db1-48ef-9cad-6588a5d84fde/8df682c653624fb5_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/d8d5ba8fe05d75a5e785b2a71348953b32f827cb/ef31a427-5db1-48ef-9cad-6588a5d84fde/8df682c653624fb5_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/d8d5ba8fe05d75a5e785b2a71348953b32f827cb/ef31a427-5db1-48ef-9cad-6588a5d84fde/9ed43819643dbfe2_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/d8d5ba8fe05d75a5e785b2a71348953b32f827cb/ef31a427-5db1-48ef-9cad-6588a5d84fde/aad15b9514d6acb6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/d8d5ba8fe05d75a5e785b2a71348953b32f827cb/ef31a427-5db1-48ef-9cad-6588a5d84fde/ae780574eb3244ac_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/d8d5ba8fe05d75a5e785b2a71348953b32f827cb/ef31a427-5db1-48ef-9cad-6588a5d84fde/bd32dbbffcdebcd9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/d8d5ba8fe05d75a5e785b2a71348953b32f827cb/ef31a427-5db1-48ef-9cad-6588a5d84fde/bdf0310b5fb9cb2c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/d8d5ba8fe05d75a5e785b2a71348953b32f827cb/ef31a427-5db1-48ef-9cad-6588a5d84fde/d6f2aa8232324352_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/d8d5ba8fe05d75a5e785b2a71348953b32f827cb/ef31a427-5db1-48ef-9cad-6588a5d84fde/d7c2f178a3d8b5b5_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/d8d5ba8fe05d75a5e785b2a71348953b32f827cb/ef31a427-5db1-48ef-9cad-6588a5d84fde/d7c2f178a3d8b5b5_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/d8d5ba8fe05d75a5e785b2a71348953b32f827cb/ef31a427-5db1-48ef-9cad-6588a5d84fde/e2723294d8494736_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/d8d5ba8fe05d75a5e785b2a71348953b32f827cb/ef31a427-5db1-48ef-9cad-6588a5d84fde/f1a3746ef87aff81_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/d8d5ba8fe05d75a5e785b2a71348953b32f827cb/ef31a427-5db1-48ef-9cad-6588a5d84fde/f1a3746ef87aff81_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/d8d5ba8fe05d75a5e785b2a71348953b32f827cb/ef31a427-5db1-48ef-9cad-6588a5d84fde/f78638f0e397944c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/d8d5ba8fe05d75a5e785b2a71348953b32f827cb/ef31a427-5db1-48ef-9cad-6588a5d84fde/index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/d8d5ba8fe05d75a5e785b2a71348953b32f827cb/ef31a427-5db1-48ef-9cad-6588a5d84fde/index-dir/the-real-index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/d8d5ba8fe05d75a5e785b2a71348953b32f827cb/index.txt create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/0125450e1910eabc_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/0125450e1910eabc_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/01a2cce3dbf47a2d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/02dc4a04d32539f7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/03977ed293e4f244_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/03977ed293e4f244_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/040adbb193a1dd60_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/0546c7c63078d2d8_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/08b5d0ecdabcb20a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/0a18bac32825a1d4_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/0a18bac32825a1d4_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/0b38ccfd0ec58227_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/0b38ccfd0ec58227_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/0edf76bd97e2b326_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/0edf76bd97e2b326_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/0f34d0ac4e01e170_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/0f34d0ac4e01e170_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/1402c0aabf09b6f0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/1402c0aabf09b6f0_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/146cac7468eec933_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/17495c48da92b708_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/17e5dedcf6594252_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/18c18ffeb4113cdd_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/19466472951ab4fa_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/21e0dc7475920014_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/22dd3ebaf358bbff_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/22ed513d6a58054a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/26f85a4dff718a8e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/26f85a4dff718a8e_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/2813ef72e9650411_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/28b7eb6396fa4d6b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/323cb44cb141b382_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/33d209fc507915fe_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/33d209fc507915fe_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/347dd6f38918ee04_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/3b6a9b9fd8e05f5c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/3e6a00ff74ae9386_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/3f10a7efafddf14a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/3f10a7efafddf14a_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/46d8ecb9987be4ce_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/481fa0c66ddec0b6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/4c13bc11b8dbc101_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/4cc95acafe709be0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/4cc95acafe709be0_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/4f172c3817a405dd_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/52c3a24bca405061_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/52c3a24bca405061_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/52e66d2b26a5f7dc_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/52ef80e11eb81c6c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/55017344e7129e4f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/55017344e7129e4f_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/583f36819ffe89d1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/586b1b9d1a48c172_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/586b1b9d1a48c172_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/5a0a0f8e2f0a861c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/5af21f46648da1ea_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/5e86944d7f1bb0e6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/5f1675a86b62f9be_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/60449a8802448aef_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/615a77b72e968c89_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/615a77b72e968c89_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/6226d0dec43b599e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/62d732e3f2717494_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/62d732e3f2717494_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/637522b941f01ebd_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/63a4c4e392ef79db_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/63a4c4e392ef79db_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/67bd9d03c0d05736_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/6eb90b3d58e5cfdb_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/70ca72818c980cb2_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/71564d5e50d67b7d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/71da7f1782a5d72c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/71da7f1782a5d72c_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/740ff11a684e162c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/75c48dc4dda00eef_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/764c317f4113f80b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/764c317f4113f80b_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/7a313c2d449c0976_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/7a313c2d449c0976_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/7ade3d42fb4302e2_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/7ade3d42fb4302e2_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/7b8986097a1886ab_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/7b8986097a1886ab_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/7c97795cbe1df3c1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/7e399464258b3907_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/7eb276821699eaa7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/7f659f57fef8475a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/7f659f57fef8475a_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/80964424468d386e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/81239d884ff0198c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/82c172ad62fcff12_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/82cd4906ebd5eda2_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/82cd4906ebd5eda2_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/85afbe1d3465d2b6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/87905c5b9ee6aea7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/8903773b5330f7f4_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/89fdf6af2ee22665_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/89fdf6af2ee22665_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/8f8d5ea1a6537911_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/92fbdd92777f6b03_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/9ccc0d4c8548277a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/9ccc0d4c8548277a_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/9de6a296704ffb84_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/a06fd660d3686847_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/a1f408b6e9cc2afe_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/a1f408b6e9cc2afe_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/a38476965a399589_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/a3eb2d13577642c0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/a3eb2d13577642c0_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/a47ba425ba4a9207_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/a8e751993ee89590_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/a95ded1ccf36dcef_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/a95ded1ccf36dcef_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/a99e87a1d8278b61_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/a99e87a1d8278b61_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/a9da1b65d3925796_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/a9da1b65d3925796_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/aba95e10ccf24d9c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/aba95e10ccf24d9c_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/acdcb6b786a00cef_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/acdcb6b786a00cef_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/ad7c8a325829963d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/ad7c8a325829963d_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/ae7b24b5d89bf5d0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/ae7b24b5d89bf5d0_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/b40d800f05cc7a96_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/b40d800f05cc7a96_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/b64d9747bc383caf_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/b64d9747bc383caf_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/b8cee710e3f6e98c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/bad2f2a7534db05c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/bc481626a1ef2420_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/bd210b1797761354_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/bd210b1797761354_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/be387f44b985c952_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/c0018e5fd591a1e0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/c0018e5fd591a1e0_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/c2c13505b0b61977_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/c8ea23886d8cd93e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/c955de13c32587de_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/ca131608b6e3d556_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/cb14199d558149cb_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/cb3a9b39482f3e6f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/cb3a9b39482f3e6f_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/cec40fe06223ffd3_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/d19b2a59c701a3a2_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/d45d23271b9fde02_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/d45d23271b9fde02_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/d4f2d77b98baddfb_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/d9a194d076f4af72_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/e17034bf986fe4a3_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/e1910354c99b1c01_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/e2cac9081a306121_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/e47d3c110a9907d5_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/e89271bd968c1b47_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/e9f22c100d18f5b6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/ed9590e449ea0c3e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/f1a95df9104e907b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/f337c1ecab661205_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/f337c1ecab661205_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/f349693c28b74bea_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/f59a421f9c227f1f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/f59a421f9c227f1f_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/f8366850a5a94fb3_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/f8366850a5a94fb3_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/f8e776ad01429482_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/f9e9a4904919eda8_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/c805c447-65eb-4963-b76b-7f9f51d54ba8/index-dir/the-real-index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/d7b2c210-d890-4eb6-8b3b-d7292b78600b/2bf5aec11725b9a2_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/d7b2c210-d890-4eb6-8b3b-d7292b78600b/index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/d7b2c210-d890-4eb6-8b3b-d7292b78600b/index-dir/the-real-index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/CacheStorage/fdb1d4ff495450ff00dc27fed2ff464ef8862750/index.txt create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/Database/000007.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/Database/000009.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/Database/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/Database/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/Database/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/Database/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/Database/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/013888a1cda32b90_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/013888a1cda32b90_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/013c368bb699d56f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/044af04d79c148c3_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/058316883d2f7b71_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/058316883d2f7b71_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/06940ca2418e5f06_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/06940ca2418e5f06_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/08b99d499107ba17_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/08b99d499107ba17_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/0ae129c33e7a30bd_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/0ae129c33e7a30bd_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/0c44624093b66f53_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/0c44624093b66f53_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/0caade6fa2d8bf23_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/0caade6fa2d8bf23_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/0cf3f179800b4457_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/0da13b1c038160d5_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/0da13b1c038160d5_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/102500d27cb32586_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/1182effa8ada5d43_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/1306f5f30c73c0b3_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/1306f5f30c73c0b3_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/133ea22e2bddfb76_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/135d7a5f7d09ad8d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/1519277bde6e6fcc_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/156dd7d6254da5d0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/156dd7d6254da5d0_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/1837eff123ca8ac2_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/18a1561446ac93fd_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/18a1561446ac93fd_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/18f9d5c11737329d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/1b02c078a626147f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/1b7188623db21aac_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/1cd36d092513b214_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/1cd36d092513b214_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/1e16eb87c66b3350_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/1e16eb87c66b3350_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/1eb3a60cf0b1da7e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/218b8a4c9ede14e1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/23469ac906fcc612_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/23469ac906fcc612_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/2379a50f1c0e50dd_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/24c9909851fc5926_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/251821f6166076c1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/251821f6166076c1_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/262d13b3e17ceba1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/26668990994d0f6b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/2853a1a255877bcc_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/297ecea5cebb5dfe_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/297ecea5cebb5dfe_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/2a069ed0a4ed1071_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/2a0afd649b00527b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/2a0afd649b00527b_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/2a517dc2cdf7e28c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/2a9ed1164ac67a36_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/2b8d5c4c22ca4073_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/2cc80dabc69f58b6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/2ddf14d3ae0c5805_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/2ed4c1475f68895f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/2ed4c1475f68895f_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/3141fac51b5d083a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/3304de7a95b9153f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/3382c1aeee847b7c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/36178b75a421e259_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/37ba206b0e1633f3_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/37ba206b0e1633f3_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/3833d80714f52830_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/385b1e42bf04aac1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/385b1e42bf04aac1_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/38ec7f73738fd2c6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/38ec7f73738fd2c6_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/3993e359829516e8_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/3bc9470215d17382_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/3c6f2beab5d0ce26_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/3c927e1978087ebb_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/3c927e1978087ebb_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/3e125fa608da7bad_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/3e3f9622d382869d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/41e788d966e1d2b1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/41e8252939530d43_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/41f6befdd9fcc98c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/4370832a070f5278_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/4370832a070f5278_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/4380d6a2dda10611_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/4380d6a2dda10611_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/442d051c77d2449e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/442d051c77d2449e_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/44432df713ea1c72_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/44aed90cfbcd8d61_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/4577271cd6fb65a1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/4577271cd6fb65a1_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/45b6179ac51ed29f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/45c2f2fcb9072b47_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/45c2f2fcb9072b47_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/4698ecea4d4dad56_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/4698ecea4d4dad56_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/47a019969919f990_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/48aa8aea80d750f3_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/48c4922ed6998d89_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/48ce8f1371d5128c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/48ce8f1371d5128c_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/49c299409541c61c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/49c299409541c61c_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/49cfac9a80742bc0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/49cfac9a80742bc0_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/4b8a113942c539ab_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/4b8a113942c539ab_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/4cb013792b196a35_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/4cb013792b196a35_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/4dfa3ff2fb787575_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/50ea35dd219cf76e_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/5219fc78e566a322_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/5225b9a2d2e15e1b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/57991272965254a5_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/57991272965254a5_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/59075d360e8ed9ea_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/59075d360e8ed9ea_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/5bc80cbabea43230_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/5eb8846211eed115_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/5ff352a104083529_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/60208d9987ff8fb0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/60208d9987ff8fb0_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/61776f09435f6376_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/618cf8002a861737_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/61a7051dfbbcebbe_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/61f9776f3858baff_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/61f9776f3858baff_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/637002b0fd0607b7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/639d390b781e80ba_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/63a0df86fcaca4f0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/65490edda5ace1d4_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/65f57298359ce817_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/665a1c6935535837_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/665a1c6935535837_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/66e98b5df3810dc6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/67a473248953641b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/67a473248953641b_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/6c038e3570d6abf1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/6c038e3570d6abf1_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/6f14b1eea746d0f6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/6f8ac775dbbd7415_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/6f8ac775dbbd7415_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/6f95edaef805d54f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/707c04bd94e53f60_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/7279dabb794b7bae_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/7279dabb794b7bae_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/736704c0a29ba0bd_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/736704c0a29ba0bd_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/75e158edced18ccc_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/7786daf1823b575f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/77d633a988788881_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/77d633a988788881_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/7911bddc8bea7af4_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/7aa3cc8cc182ec3a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/7aa3cc8cc182ec3a_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/7b4fd8111178d5b1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/7b4fd8111178d5b1_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/800dc39137124ad7_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/8028206cd4382304_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/80a7e74d1ee47371_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/82d24e583257c1c5_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/8459336f6f977b26_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/846b510cc1d358ab_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/846b510cc1d358ab_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/847183a1bce65cbf_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/861d3746da596b9a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/865231c3208b5685_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/865231c3208b5685_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/873e9f02dffd15b6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/88982711b7d82f98_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/88982711b7d82f98_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/8971dc0438cf7b2a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/8971dc0438cf7b2a_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/8b239658a7e04d63_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/8b30f5d03f19b568_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/8b30f5d03f19b568_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/8f26a0435b41626a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/937b79c00dbacc65_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/937b79c00dbacc65_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/93b5bc142742612c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/93e5ba12e112ee93_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/93e5ba12e112ee93_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/968ee480c8880ee9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/968ee480c8880ee9_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/97cb728504835ecb_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/98e1039cb5a6108c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/9a167328c6f2005d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/9a167328c6f2005d_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/9cedebd2aa2a8bfe_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/9cfaf0ec6926b991_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/a0650cda674494c6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/a2c521dd01eb7b29_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/a2e0dddeb7e07def_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/a2e0dddeb7e07def_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/a488f7c1117c460d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/a8d410c09eb9cf3f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/a8d410c09eb9cf3f_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/a9654014163cf1c9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/a9b253918c822073_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/a9b253918c822073_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/ad2345239280bb7d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/ad2345239280bb7d_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/af55a8299c730493_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/b09a5c3ec15d02fe_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/b09b50d0915775fa_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/b09b50d0915775fa_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/b0d982546e6fd609_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/b30f9f370e7094d0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/b30f9f370e7094d0_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/b3bd0d67f800d222_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/b3bd0d67f800d222_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/b3e65c650ab5942a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/b6c28cea6ed9dfc1_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/b6c28cea6ed9dfc1_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/b93974c97934366d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/ba23d8ecda68de77_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/ba23d8ecda68de77_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/bdbe39f12b00f185_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/be27c224b9670b51_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/be27c224b9670b51_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/c13416c921dc154c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/c1ab05be02305eff_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/c1ab05be02305eff_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/c2492db79fbf160c_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/c2492db79fbf160c_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/c3f9ec8c3e713cc5_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/c3f9ec8c3e713cc5_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/c5a4cfa87c7c50b5_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/c5d06df2762160e6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/c60ff07b0bc639c4_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/c60ff07b0bc639c4_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/c973a21200a54441_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/c973a21200a54441_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/c97f65652744cac9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/c97f65652744cac9_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/cea5e6b4823220b0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/d0757ff92c7cde0a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/d0757ff92c7cde0a_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/d1c5a6f87b5d4042_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/d1c5a6f87b5d4042_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/d2198e059a41357f_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/d36fc470bdd7f429_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/d65585c00d45a9d6_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/d6b591bec2d594eb_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/d6b591bec2d594eb_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/da27569d3d1a7cdd_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/da27569d3d1a7cdd_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/da87291b30ec3507_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/daadf5d778c3fc98_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/daadf5d778c3fc98_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/dc8bb2c9e691ca89_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/dc94ed7d050cb174_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/dcfd308173202e57_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/dcfd308173202e57_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/deb216933b22f3a2_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/df442983f76b6c89_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/df442983f76b6c89_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/e0d37c7e54672663_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/e0d37c7e54672663_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/e15adf968423321d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/e37b8c477f6fe7a9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/e3979a9d78d5c89b_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/e3979a9d78d5c89b_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/e460f9049ee39b22_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/e6f09094666ade67_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/e77053106e8f6f41_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/e7726bec88acbf74_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/e7ba459eae573b73_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/e7ba459eae573b73_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/e873ff2e7f852ba0_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/e91a0f790c9df598_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/e99eef6b57f9df36_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/ed17bb8e4740c3e9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/ed17bb8e4740c3e9_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/f0fcc6432fd8ca09_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/f116add86d0557b9_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/f1216cf7d8c3ccde_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/f1216cf7d8c3ccde_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/f1cdccba37924bda_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/f1cdccba37924bda_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/f214e160a00f6106_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/f272a321bf472b2a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/f272a321bf472b2a_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/f3ab1e1292e135fa_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/f3ab1e1292e135fa_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/f54ae869079af26d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/f8306af1c2f7efd3_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/f8849e5234771dfc_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/f8849e5234771dfc_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/f8f4f7ce6eb8619a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/fa813c9ad67834ac_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/fa813c9ad67834ac_1 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/fd04e5d80307ab5a_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Service Worker/ScriptCache/index-dir/the-real-index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Session Storage/000013.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Session Storage/000014.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Session Storage/000015.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Session Storage/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Session Storage/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Session Storage/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Session Storage/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Session Storage/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Sessions/Apps_13429354763444062 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Sessions/Session_13429447592291549 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Sessions/Session_13429451449494174 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Sessions/Session_13429451931588978 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Sessions/Tabs_13429437726762262 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Sessions/Tabs_13429450809425290 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Shared Dictionary/cache/index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Shared Dictionary/cache/index-dir/the-real-index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Shared Dictionary/db create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Shared Dictionary/db-journal create mode 100644 net.imput.helium/.config/net.imput.helium/Default/SharedStorage create mode 100644 net.imput.helium/.config/net.imput.helium/Default/SharedStorage-wal create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Shortcuts create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Shortcuts-journal create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Site Characteristics Database/000003.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Site Characteristics Database/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Site Characteristics Database/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Site Characteristics Database/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Site Characteristics Database/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Site Characteristics Database/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Sync Data/LevelDB/000003.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Sync Data/LevelDB/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Sync Data/LevelDB/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Sync Data/LevelDB/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Sync Data/LevelDB/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Sync Data/LevelDB/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Sync Extension Settings/dbepggeogbaibhgnhhndojpepiihcmeb/000003.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Sync Extension Settings/dbepggeogbaibhgnhhndojpepiihcmeb/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Sync Extension Settings/dbepggeogbaibhgnhhndojpepiihcmeb/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Sync Extension Settings/dbepggeogbaibhgnhhndojpepiihcmeb/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Sync Extension Settings/dbepggeogbaibhgnhhndojpepiihcmeb/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Sync Extension Settings/dbepggeogbaibhgnhhndojpepiihcmeb/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Sync Extension Settings/eimadpbcbfnmbkopoojfekhnkhdbieeh/000003.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Sync Extension Settings/eimadpbcbfnmbkopoojfekhnkhdbieeh/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Sync Extension Settings/eimadpbcbfnmbkopoojfekhnkhdbieeh/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Sync Extension Settings/eimadpbcbfnmbkopoojfekhnkhdbieeh/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Sync Extension Settings/eimadpbcbfnmbkopoojfekhnkhdbieeh/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Sync Extension Settings/eimadpbcbfnmbkopoojfekhnkhdbieeh/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Sync Extension Settings/flphhdfbcpebbehnmphjoaoffhgcjafi/000003.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Sync Extension Settings/flphhdfbcpebbehnmphjoaoffhgcjafi/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Sync Extension Settings/flphhdfbcpebbehnmphjoaoffhgcjafi/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Sync Extension Settings/flphhdfbcpebbehnmphjoaoffhgcjafi/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Sync Extension Settings/flphhdfbcpebbehnmphjoaoffhgcjafi/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Sync Extension Settings/flphhdfbcpebbehnmphjoaoffhgcjafi/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Sync Extension Settings/iadbdpnoknmbdeolbapdackdcogdmjpe/000003.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Sync Extension Settings/iadbdpnoknmbdeolbapdackdcogdmjpe/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Sync Extension Settings/iadbdpnoknmbdeolbapdackdcogdmjpe/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Sync Extension Settings/iadbdpnoknmbdeolbapdackdcogdmjpe/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Sync Extension Settings/iadbdpnoknmbdeolbapdackdcogdmjpe/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Sync Extension Settings/iadbdpnoknmbdeolbapdackdcogdmjpe/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Sync Extension Settings/nljkibfhlpcnanjgbnlnbjecgicbjkge/000003.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Sync Extension Settings/nljkibfhlpcnanjgbnlnbjecgicbjkge/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Sync Extension Settings/nljkibfhlpcnanjgbnlnbjecgicbjkge/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Sync Extension Settings/nljkibfhlpcnanjgbnlnbjecgicbjkge/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Sync Extension Settings/nljkibfhlpcnanjgbnlnbjecgicbjkge/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Sync Extension Settings/nljkibfhlpcnanjgbnlnbjecgicbjkge/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Sync Extension Settings/oladmjdebphlnjjcnomfhhbfdldiimaf/000003.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Sync Extension Settings/oladmjdebphlnjjcnomfhhbfdldiimaf/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Sync Extension Settings/oladmjdebphlnjjcnomfhhbfdldiimaf/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Sync Extension Settings/oladmjdebphlnjjcnomfhhbfdldiimaf/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Sync Extension Settings/oladmjdebphlnjjcnomfhhbfdldiimaf/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Sync Extension Settings/oldceeleldhonbafppcapldpdifcinji/000003.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Sync Extension Settings/oldceeleldhonbafppcapldpdifcinji/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Sync Extension Settings/oldceeleldhonbafppcapldpdifcinji/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Sync Extension Settings/oldceeleldhonbafppcapldpdifcinji/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Sync Extension Settings/oldceeleldhonbafppcapldpdifcinji/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Sync Extension Settings/oldceeleldhonbafppcapldpdifcinji/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Top Sites create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Top Sites-journal create mode 100644 net.imput.helium/.config/net.imput.helium/Default/TransportSecurity create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Trust Tokens create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Trust Tokens-journal create mode 100644 net.imput.helium/.config/net.imput.helium/Default/VideoDecodeStats/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/VideoDecodeStats/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/VideoDecodeStats/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Web Applications/Manifest Resources/lfpcbmodcmbhlakniingcipjmnmiefil/Icons Maskable/512.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Web Applications/Manifest Resources/lfpcbmodcmbhlakniingcipjmnmiefil/Icons/128.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Web Applications/Manifest Resources/lfpcbmodcmbhlakniingcipjmnmiefil/Icons/192.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Web Applications/Manifest Resources/lfpcbmodcmbhlakniingcipjmnmiefil/Icons/256.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Web Applications/Manifest Resources/lfpcbmodcmbhlakniingcipjmnmiefil/Icons/32.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Web Applications/Manifest Resources/lfpcbmodcmbhlakniingcipjmnmiefil/Icons/48.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Web Applications/Manifest Resources/lfpcbmodcmbhlakniingcipjmnmiefil/Icons/512.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Web Applications/Manifest Resources/lfpcbmodcmbhlakniingcipjmnmiefil/Icons/64.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Web Applications/Manifest Resources/lfpcbmodcmbhlakniingcipjmnmiefil/Icons/96.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Web Applications/Manifest Resources/lfpcbmodcmbhlakniingcipjmnmiefil/Trusted Icons/Icons/128.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Web Applications/Manifest Resources/lfpcbmodcmbhlakniingcipjmnmiefil/Trusted Icons/Icons/256.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Web Applications/Manifest Resources/lfpcbmodcmbhlakniingcipjmnmiefil/Trusted Icons/Icons/32.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Web Applications/Manifest Resources/lfpcbmodcmbhlakniingcipjmnmiefil/Trusted Icons/Icons/48.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Web Applications/Manifest Resources/lfpcbmodcmbhlakniingcipjmnmiefil/Trusted Icons/Icons/512.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Web Applications/Manifest Resources/lfpcbmodcmbhlakniingcipjmnmiefil/Trusted Icons/Icons/64.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Web Applications/Manifest Resources/lfpcbmodcmbhlakniingcipjmnmiefil/Trusted Icons/Icons/96.png create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Web Data create mode 100644 net.imput.helium/.config/net.imput.helium/Default/Web Data-journal create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/11/FileSystem/t/.usage create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/11/FileSystem/t/00/00000000 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/11/FileSystem/t/Paths/000003.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/11/FileSystem/t/Paths/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/11/FileSystem/t/Paths/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/11/FileSystem/t/Paths/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/11/FileSystem/t/Paths/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/2/IndexedDB/indexeddb.leveldb/000004.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/2/IndexedDB/indexeddb.leveldb/000005.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/2/IndexedDB/indexeddb.leveldb/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/2/IndexedDB/indexeddb.leveldb/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/2/IndexedDB/indexeddb.leveldb/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/2/IndexedDB/indexeddb.leveldb/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/32/FileSystem/t/.usage create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/32/FileSystem/t/00/00000000 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/32/FileSystem/t/00/00000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/32/FileSystem/t/Paths/000003.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/32/FileSystem/t/Paths/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/32/FileSystem/t/Paths/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/32/FileSystem/t/Paths/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/32/FileSystem/t/Paths/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/32/FileSystem/t/Paths/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/37/FileSystem/t/.usage create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/37/FileSystem/t/00/00000000 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/37/FileSystem/t/Paths/000003.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/37/FileSystem/t/Paths/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/37/FileSystem/t/Paths/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/37/FileSystem/t/Paths/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/37/FileSystem/t/Paths/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/51/FileSystem/t/.usage create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/51/FileSystem/t/00/00000000 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/51/FileSystem/t/Paths/000003.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/51/FileSystem/t/Paths/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/51/FileSystem/t/Paths/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/51/FileSystem/t/Paths/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/51/FileSystem/t/Paths/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/51/FileSystem/t/Paths/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/54/FileSystem/t/.usage create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/54/FileSystem/t/00/00000000 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/54/FileSystem/t/Paths/000003.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/54/FileSystem/t/Paths/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/54/FileSystem/t/Paths/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/54/FileSystem/t/Paths/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/54/FileSystem/t/Paths/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/56/CacheStorage/3e700e71-e588-4a9c-9dbb-a1632224fc25/index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/56/CacheStorage/3e700e71-e588-4a9c-9dbb-a1632224fc25/index-dir/the-real-index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/56/CacheStorage/be498be2-199d-466d-a5c5-80b81a82dadd/b3146faa8b8f5a8d_0 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/56/CacheStorage/be498be2-199d-466d-a5c5-80b81a82dadd/index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/56/CacheStorage/be498be2-199d-466d-a5c5-80b81a82dadd/index-dir/the-real-index create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/56/CacheStorage/index.txt create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/56/IndexedDB/indexeddb.blob/1/00/2 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/56/IndexedDB/indexeddb.leveldb/000003.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/56/IndexedDB/indexeddb.leveldb/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/56/IndexedDB/indexeddb.leveldb/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/56/IndexedDB/indexeddb.leveldb/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/56/IndexedDB/indexeddb.leveldb/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/66/CacheStorage/index.txt create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/67/FileSystem/t/.usage create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/67/FileSystem/t/00/00000000 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/67/FileSystem/t/Paths/000003.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/67/FileSystem/t/Paths/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/67/FileSystem/t/Paths/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/67/FileSystem/t/Paths/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/67/FileSystem/t/Paths/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/72/CacheStorage/index.txt create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/80/IndexedDB/indexeddb.leveldb/000003.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/80/IndexedDB/indexeddb.leveldb/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/80/IndexedDB/indexeddb.leveldb/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/80/IndexedDB/indexeddb.leveldb/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/80/IndexedDB/indexeddb.leveldb/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/81/IndexedDB/indexeddb.leveldb/000004.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/81/IndexedDB/indexeddb.leveldb/000005.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/81/IndexedDB/indexeddb.leveldb/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/81/IndexedDB/indexeddb.leveldb/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/81/IndexedDB/indexeddb.leveldb/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/81/IndexedDB/indexeddb.leveldb/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/QuotaManager create mode 100644 net.imput.helium/.config/net.imput.helium/Default/WebStorage/QuotaManager-journal create mode 100644 net.imput.helium/.config/net.imput.helium/Default/chrome_cart_db/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/chrome_cart_db/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/chrome_cart_db/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/commerce_subscription_db/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/commerce_subscription_db/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/commerce_subscription_db/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/discount_infos_db/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/discount_infos_db/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/discount_infos_db/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/discounts_db/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/discounts_db/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/discounts_db/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/engine_allowlist.bf create mode 100644 net.imput.helium/.config/net.imput.helium/Default/heavy_ad_intervention_opt_out.db create mode 100644 net.imput.helium/.config/net.imput.helium/Default/heavy_ad_intervention_opt_out.db-journal create mode 100644 net.imput.helium/.config/net.imput.helium/Default/optimization_guide_hint_cache_store/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/optimization_guide_hint_cache_store/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/optimization_guide_hint_cache_store/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/parcel_tracking_db/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/parcel_tracking_db/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/parcel_tracking_db/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/shared_proto_db/000005.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/shared_proto_db/000015.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/shared_proto_db/000017.ldb create mode 100644 net.imput.helium/.config/net.imput.helium/Default/shared_proto_db/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/shared_proto_db/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/shared_proto_db/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/shared_proto_db/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/shared_proto_db/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Default/shared_proto_db/metadata/000003.log create mode 100644 net.imput.helium/.config/net.imput.helium/Default/shared_proto_db/metadata/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/Default/shared_proto_db/metadata/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/Default/shared_proto_db/metadata/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/Default/shared_proto_db/metadata/LOG.old create mode 100644 net.imput.helium/.config/net.imput.helium/Default/shared_proto_db/metadata/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/Dictionaries/en-US-10-1.bdic create mode 100644 net.imput.helium/.config/net.imput.helium/First Run create mode 100644 net.imput.helium/.config/net.imput.helium/GPUPersistentCache/GPUCache/Q5YMLNRRDETGFEQ4QIIPCNHSP4VJCTIA/cache.db create mode 100644 net.imput.helium/.config/net.imput.helium/GPUPersistentCache/GPUCache/Q5YMLNRRDETGFEQ4QIIPCNHSP4VJCTIA/cache.db-wal create mode 100644 net.imput.helium/.config/net.imput.helium/GPUPersistentCache/GPUCache/Q5YMLNRRDETGFEQ4QIIPCNHSP4VJCTIA/cache.journal create mode 100644 net.imput.helium/.config/net.imput.helium/GraphiteDawnCache/data_0 create mode 100644 net.imput.helium/.config/net.imput.helium/GraphiteDawnCache/data_1 create mode 100644 net.imput.helium/.config/net.imput.helium/GraphiteDawnCache/data_2 create mode 100644 net.imput.helium/.config/net.imput.helium/GraphiteDawnCache/data_3 create mode 100644 net.imput.helium/.config/net.imput.helium/GraphiteDawnCache/index create mode 100644 net.imput.helium/.config/net.imput.helium/Last Version create mode 100644 net.imput.helium/.config/net.imput.helium/Local State create mode 100644 net.imput.helium/.config/net.imput.helium/NativeMessagingHosts/com.anytype.desktop.json create mode 120000 net.imput.helium/.config/net.imput.helium/SingletonCookie create mode 120000 net.imput.helium/.config/net.imput.helium/SingletonLock create mode 100644 net.imput.helium/.config/net.imput.helium/System Profile/Local Storage/leveldb/000003.log create mode 100644 net.imput.helium/.config/net.imput.helium/System Profile/Local Storage/leveldb/CURRENT create mode 100644 net.imput.helium/.config/net.imput.helium/System Profile/Local Storage/leveldb/LOCK create mode 100644 net.imput.helium/.config/net.imput.helium/System Profile/Local Storage/leveldb/LOG create mode 100644 net.imput.helium/.config/net.imput.helium/System Profile/Local Storage/leveldb/MANIFEST-000001 create mode 100644 net.imput.helium/.config/net.imput.helium/System Profile/Preferences create mode 100644 net.imput.helium/.config/net.imput.helium/System Profile/README create mode 100644 net.imput.helium/.config/net.imput.helium/System Profile/Secure Preferences create mode 100644 net.imput.helium/.config/net.imput.helium/System Profile/Shared Dictionary/cache/index create mode 100644 net.imput.helium/.config/net.imput.helium/System Profile/Shared Dictionary/cache/index-dir/the-real-index create mode 100644 net.imput.helium/.config/net.imput.helium/System Profile/Shared Dictionary/db create mode 100644 net.imput.helium/.config/net.imput.helium/System Profile/Shared Dictionary/db-journal create mode 100644 net.imput.helium/.config/net.imput.helium/System Profile/SharedStorage create mode 100644 net.imput.helium/.config/net.imput.helium/Variations create mode 100644 net.imput.helium/.config/net.imput.helium/component_crx_cache/97e543c276acbe8d1a922687a18a2f43534c7ff89726085c2e6eef55c49d422c create mode 100644 net.imput.helium/.config/net.imput.helium/component_crx_cache/metadata.json create mode 100644 net.imput.helium/.config/net.imput.helium/extensions_crx_cache/metadata.json create mode 100644 net.imput.helium/.config/net.imput.helium/first_party_sets.db create mode 100644 net.imput.helium/.config/net.imput.helium/first_party_sets.db-journal create mode 100644 net.imput.helium/.config/net.imput.helium/segmentation_platform/ukm_db create mode 100644 net.imput.helium/.config/net.imput.helium/segmentation_platform/ukm_db-wal (limited to 'net.imput.helium') diff --git a/net.imput.helium/.config/net.imput.helium/BrowserMetrics-spare.pma b/net.imput.helium/.config/net.imput.helium/BrowserMetrics-spare.pma new file mode 100644 index 0000000..98fc2c0 Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/BrowserMetrics-spare.pma differ diff --git a/net.imput.helium/.config/net.imput.helium/CertificateRevocation/10655/LICENSE b/net.imput.helium/.config/net.imput.helium/CertificateRevocation/10655/LICENSE new file mode 100644 index 0000000..33072b5 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/CertificateRevocation/10655/LICENSE @@ -0,0 +1,27 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/CertificateRevocation/10655/_metadata/verified_contents.json b/net.imput.helium/.config/net.imput.helium/CertificateRevocation/10655/_metadata/verified_contents.json new file mode 100644 index 0000000..0325e11 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/CertificateRevocation/10655/_metadata/verified_contents.json @@ -0,0 +1 @@ +[{"description":"treehash per file","signed_content":{"payload":"eyJjb250ZW50X2hhc2hlcyI6W3siYmxvY2tfc2l6ZSI6NDA5NiwiZGlnZXN0Ijoic2hhMjU2IiwiZmlsZXMiOlt7InBhdGgiOiJMSUNFTlNFIiwicm9vdF9oYXNoIjoiUGIwc2tBVUxaUzFqWldTQnctV0hIRkltRlhVcExiZDlUcVkwR2ZHSHBWcyJ9LHsicGF0aCI6ImNybC1zZXQiLCJyb290X2hhc2giOiJQX2pqdmFMNTFOZFE0WVZ3TWtZU0dGVUhBVDdfWThZU0FqaVdRYTFtaFZJIn0seyJwYXRoIjoibWFuaWZlc3QuanNvbiIsInJvb3RfaGFzaCI6InpiVDl1d014aUFfRXhtMVFYd2FDNFNrTlJhaTJrMDNNeGJQUmY2LW44NlUifV0sImZvcm1hdCI6InRyZWVoYXNoIiwiaGFzaF9ibG9ja19zaXplIjo0MDk2fV0sIml0ZW1faWQiOiJoZm5rcGltbGhoZ2llYWRkZ2ZlbWpob2ZtZmJsbW5pYiIsIml0ZW1fdmVyc2lvbiI6IjEwNjU1IiwicHJvdG9jb2xfdmVyc2lvbiI6MX0","signatures":[{"header":{"kid":"publisher"},"protected":"eyJhbGciOiJSUzI1NiJ9","signature":"PlrZbnDplta4lO7tSeESOSjdhPrnxi1okZbSO3xXm2dxIV0D8zcxx_OZ1EE_s51ybJdvVrgz-FMSqHm9xuduPsCQKt-OZPUPCCMF6erDtcq5fPTHA9GGI9d-AztHdk8tUATrKZntKHfdGJsuBSnx44zsZY8KPpb6s014lmou0mEZv7z_rO3ouJ6eog7Szr-0uj0lw5QVMWB61rTBxuwue5vjJoco_MtGXZbdBfvqd_ND0_6RXQWpHVsFZNYA_NWR_6XxBBo5m6twHDoQAAeJT_xRdSagNDi4aRtPUQESYZsVsGL6OncmZH6ZwSrJqhJ8xZh14g-5F0X57DumrgABtg"},{"header":{"kid":"webstore"},"protected":"eyJhbGciOiJSUzI1NiJ9","signature":"gMhvf0QC68HXP8PVLfDJBmjmefaM3O7A38OlKj6gH3RC_EzAICz1DaaPMCpHS_MgWDJtKnaLOrNnt6TxLrydhn8zkhqxz_Rx3rrGjrZL8U-9PLrGKZGIFIjZf-n633o--ir5gJBrjHkttxidk9zHwQcJnP6kf6L2QWkxkIlJeHJSdSW6zDpqdjPFaj87roNfWShNSYUfrd1qb9XQ5ap0SZ07v1_w7VcG0adKh5AsbMqwI8sQid5MgeoEj70TYgFSRgABQhout-vgGf_56sSmSH1Ailkc6sBwkocU-B-Ykq9hxpZXHhU9RtaUPjkpzAip06vyXfSP3goTY4j58cdjGg"}]}}] \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/CertificateRevocation/10655/crl-set b/net.imput.helium/.config/net.imput.helium/CertificateRevocation/10655/crl-set new file mode 100644 index 0000000..e18b136 Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/CertificateRevocation/10655/crl-set differ diff --git a/net.imput.helium/.config/net.imput.helium/CertificateRevocation/10655/manifest.json b/net.imput.helium/.config/net.imput.helium/CertificateRevocation/10655/manifest.json new file mode 100644 index 0000000..4976d81 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/CertificateRevocation/10655/manifest.json @@ -0,0 +1,5 @@ +{ + "manifest_version": 2, + "name": "crl-set-7956786392283306952.data", + "version": "10655" +} \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/CertificateRevocation/10656/LICENSE b/net.imput.helium/.config/net.imput.helium/CertificateRevocation/10656/LICENSE new file mode 100644 index 0000000..33072b5 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/CertificateRevocation/10656/LICENSE @@ -0,0 +1,27 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/CertificateRevocation/10656/_metadata/verified_contents.json b/net.imput.helium/.config/net.imput.helium/CertificateRevocation/10656/_metadata/verified_contents.json new file mode 100644 index 0000000..7fc6c3b --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/CertificateRevocation/10656/_metadata/verified_contents.json @@ -0,0 +1 @@ +[{"description":"treehash per file","signed_content":{"payload":"eyJjb250ZW50X2hhc2hlcyI6W3siYmxvY2tfc2l6ZSI6NDA5NiwiZGlnZXN0Ijoic2hhMjU2IiwiZmlsZXMiOlt7InBhdGgiOiJMSUNFTlNFIiwicm9vdF9oYXNoIjoiUGIwc2tBVUxaUzFqWldTQnctV0hIRkltRlhVcExiZDlUcVkwR2ZHSHBWcyJ9LHsicGF0aCI6ImNybC1zZXQiLCJyb290X2hhc2giOiJTcUlUMXE0SmExM2xBdTY0enNnbjVUb19fTHFUTXVhN3diWTZrZFZfU2pZIn0seyJwYXRoIjoibWFuaWZlc3QuanNvbiIsInJvb3RfaGFzaCI6InhXand5c24tMVR4OThOTDk1NDJ2TU0yOUpVdEJnQWxDZ19nY04wcVZYSkkifV0sImZvcm1hdCI6InRyZWVoYXNoIiwiaGFzaF9ibG9ja19zaXplIjo0MDk2fV0sIml0ZW1faWQiOiJoZm5rcGltbGhoZ2llYWRkZ2ZlbWpob2ZtZmJsbW5pYiIsIml0ZW1fdmVyc2lvbiI6IjEwNjU2IiwicHJvdG9jb2xfdmVyc2lvbiI6MX0","signatures":[{"header":{"kid":"publisher"},"protected":"eyJhbGciOiJSUzI1NiJ9","signature":"foriDfNJr_-BON6Kafd3vU64CBBUQuu2PPpj66WoXHN0EY1oEAuQd6xB7uujbMvww5mF-rSC4UeOUTkZT6zieMmvugia5uXBMJWBkpDJZYKdsdhjeYj4hHpSbDyHtawyd5yNlUeesGfU9H6od36MoRv1gbt_w7VO9N0Bw-Ak24OfMJKQU3pxhASv4ig3K_VCt7J6KYsLG-y_Pe8--kY_sfRuGUex-DKNpORrYdrWfGEEJhKcl63yTlCVbvVfhB6nXKOEzu29L-HxVSWI9zEFJCxAxQCNXnQHaS18i5TXrkpDsZ29Av1RqiIRDBhO2hE6E1T7J6PnRN5icSC_BxHcGA"},{"header":{"kid":"webstore"},"protected":"eyJhbGciOiJSUzI1NiJ9","signature":"YJ7qUCH8kACySvBdhPh4CbN-eEh3aE5Ut3zKaLMPtanbTZyGfwKNBIkyhWbMV7LgMZyVurFunndWstUYhJQpH5f_CRecZPZcmqJ9npuZaZjy6YhAMts2z8-AjomGT0rgmfppFCME_VqBPk5RFni19_O8jyHOYl_hL5-cu2RXhwhlZgSxAoj5dLf_HcqGBKK3Jt6aqaRe6-bT3qkV0rOF50O3NoO1qdammuiMTwSvb99pNXjYNX1bLe4m0QyE-OUbrLRbHQiod9hvlb9QXL4Dg9qh3LrKnECyZR4BmYk2lDetmgE-18dBcoEhZQP8hYLbSkQ6rvZzx02k-4OzFg0Rcw"}]}}] \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/CertificateRevocation/10656/crl-set b/net.imput.helium/.config/net.imput.helium/CertificateRevocation/10656/crl-set new file mode 100644 index 0000000..5c34c06 Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/CertificateRevocation/10656/crl-set differ diff --git a/net.imput.helium/.config/net.imput.helium/CertificateRevocation/10656/manifest.json b/net.imput.helium/.config/net.imput.helium/CertificateRevocation/10656/manifest.json new file mode 100644 index 0000000..1d33db3 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/CertificateRevocation/10656/manifest.json @@ -0,0 +1,5 @@ +{ + "manifest_version": 2, + "name": "crl-set-1779434978752939306.data", + "version": "10656" +} \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/CertificateRevocation/10657/LICENSE b/net.imput.helium/.config/net.imput.helium/CertificateRevocation/10657/LICENSE new file mode 100644 index 0000000..33072b5 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/CertificateRevocation/10657/LICENSE @@ -0,0 +1,27 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/CertificateRevocation/10657/_metadata/verified_contents.json b/net.imput.helium/.config/net.imput.helium/CertificateRevocation/10657/_metadata/verified_contents.json new file mode 100644 index 0000000..97e8ca2 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/CertificateRevocation/10657/_metadata/verified_contents.json @@ -0,0 +1 @@ +[{"description":"treehash per file","signed_content":{"payload":"eyJjb250ZW50X2hhc2hlcyI6W3siYmxvY2tfc2l6ZSI6NDA5NiwiZGlnZXN0Ijoic2hhMjU2IiwiZmlsZXMiOlt7InBhdGgiOiJMSUNFTlNFIiwicm9vdF9oYXNoIjoiUGIwc2tBVUxaUzFqWldTQnctV0hIRkltRlhVcExiZDlUcVkwR2ZHSHBWcyJ9LHsicGF0aCI6ImNybC1zZXQiLCJyb290X2hhc2giOiIta20zX2dnQWtMYmFxSzhvam1keEVEdDdxWEYtOGtsaWhJOHY4ZWJBWEhFIn0seyJwYXRoIjoibWFuaWZlc3QuanNvbiIsInJvb3RfaGFzaCI6Ijh2QnNDY0pUS1p1dGJKZnRfQ1l6WUZfRHQ4U2R2bENWZmttZ1NZSFFVTjAifV0sImZvcm1hdCI6InRyZWVoYXNoIiwiaGFzaF9ibG9ja19zaXplIjo0MDk2fV0sIml0ZW1faWQiOiJoZm5rcGltbGhoZ2llYWRkZ2ZlbWpob2ZtZmJsbW5pYiIsIml0ZW1fdmVyc2lvbiI6IjEwNjU3IiwicHJvdG9jb2xfdmVyc2lvbiI6MX0","signatures":[{"header":{"kid":"publisher"},"protected":"eyJhbGciOiJSUzI1NiJ9","signature":"HfqC8aNTSaGXEJKxHi62Y6v9VDhCeL-JNNrEgCoJrTlS_MYrrV1Ty-5Eh7YtNmzmkSmj5IQfumK8bqSHvXKBE8ldINV3UiOKMIIFWTXQujCcfM40wu2FNqNNvERAQ_MAMA_9Tjgg8kC1axuA4NGg0inXqTlV5f55b_WX8zGaiPWQy8Hn1USzGm2daIM72Hf-VHuR3UzepawH48H0FFcuqMHkpbdpz7tv7kNK64ljB2daZvqB51mkle-QdphDdBBdomtcSmyQTF7tZAef5-JPgg0tfz7M8V-wZu3MgsxLqLvlTj4Rmi1RQfFe_D8OG9eyNxfO0b_5rYUJFUDw6c7Phg"},{"header":{"kid":"webstore"},"protected":"eyJhbGciOiJSUzI1NiJ9","signature":"INEBeOrGEGNKocM1TF0uGkgfE5y9Bjq98ax5s2UJEF1Xn788smwTyIMaG4sv1z3T8zIlNdN37AZx_h8pRDaLBRPbAnkICu8MEXfuOfsAx1YAjxhC4qCp6JE1NtPImCEp66pOchPFsCfaiYsSoh2nTSg_EcCNRhp_yWjcDVk1hu2E3HXItyVRsPcZf5ky4ayIi26RWmy6CQwo6OpPUWjETf8aj9Svnn5LKegDFgByJMCr7-FfbOyuww4SQKXgrkJm4jdx5emnZAdQ8BgwGdnTEms7jckEuw8lLQDlnk3tClFT-A9MG36sfPz4VaVKROmvObQWJTkBp7sSTiyv5WrqYA"}]}}] \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/CertificateRevocation/10657/crl-set b/net.imput.helium/.config/net.imput.helium/CertificateRevocation/10657/crl-set new file mode 100644 index 0000000..5d08626 Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/CertificateRevocation/10657/crl-set differ diff --git a/net.imput.helium/.config/net.imput.helium/CertificateRevocation/10657/manifest.json b/net.imput.helium/.config/net.imput.helium/CertificateRevocation/10657/manifest.json new file mode 100644 index 0000000..18b520d --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/CertificateRevocation/10657/manifest.json @@ -0,0 +1,5 @@ +{ + "manifest_version": 2, + "name": "crl-set-8573512714010585303.data", + "version": "10657" +} \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/CertificateRevocation/10658/LICENSE b/net.imput.helium/.config/net.imput.helium/CertificateRevocation/10658/LICENSE new file mode 100644 index 0000000..33072b5 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/CertificateRevocation/10658/LICENSE @@ -0,0 +1,27 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/CertificateRevocation/10658/_metadata/verified_contents.json b/net.imput.helium/.config/net.imput.helium/CertificateRevocation/10658/_metadata/verified_contents.json new file mode 100644 index 0000000..5bdeeb5 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/CertificateRevocation/10658/_metadata/verified_contents.json @@ -0,0 +1 @@ +[{"description":"treehash per file","signed_content":{"payload":"eyJjb250ZW50X2hhc2hlcyI6W3siYmxvY2tfc2l6ZSI6NDA5NiwiZGlnZXN0Ijoic2hhMjU2IiwiZmlsZXMiOlt7InBhdGgiOiJMSUNFTlNFIiwicm9vdF9oYXNoIjoiUGIwc2tBVUxaUzFqWldTQnctV0hIRkltRlhVcExiZDlUcVkwR2ZHSHBWcyJ9LHsicGF0aCI6ImNybC1zZXQiLCJyb290X2hhc2giOiJOYjhNZnB3b3VnbnI2aHQydDhla3N6SnNkbV9SR2wzbkZ2VmRVVVhaSzlRIn0seyJwYXRoIjoibWFuaWZlc3QuanNvbiIsInJvb3RfaGFzaCI6InA2X1BLTkJYVGtvWHkxWjBaMTBRU2dPRDJyRHhSTjY3ZkhPTTZIdHRhWDAifV0sImZvcm1hdCI6InRyZWVoYXNoIiwiaGFzaF9ibG9ja19zaXplIjo0MDk2fV0sIml0ZW1faWQiOiJoZm5rcGltbGhoZ2llYWRkZ2ZlbWpob2ZtZmJsbW5pYiIsIml0ZW1fdmVyc2lvbiI6IjEwNjU4IiwicHJvdG9jb2xfdmVyc2lvbiI6MX0","signatures":[{"header":{"kid":"publisher"},"protected":"eyJhbGciOiJSUzI1NiJ9","signature":"ECRBSvbe7ZsTt1cwpDHYPzq-knL1dw8ph78JcPA3y6jfEx--_zdo9rojlcHYTO0ViHqgFb8nIDMdNYGW05ZWlcytJD7jOCK1-xRPpODjgN2XvPqNmNBcpeqQ3iScUkt5G9ztp2wcRi9xSiJBQ2EGxCtfP1NkYEM8E8J7GeR_HAVmnU7SmBAZLdPRjxDnez3Bk-rPJqsi72uVxmE3-2HmBlGktWmUnqSXrel7ZHUbP84Ku2LbDkwyqCZMVeYlNQHbiPA5GmreWxXv7VfrBSGmDsF3-EoENkOP2rimr96NKdd7J9XUzkQN3C4B4-qHrP8pFyYsj3kL9HXlfyrupyeD3Q"},{"header":{"kid":"webstore"},"protected":"eyJhbGciOiJSUzI1NiJ9","signature":"WaQuQvxZuNYlfByVntpxfkb_69vaNiAEBULeEOujFnXxAZ-qiguwLvWZls3IBqktVyLWjRjIjmR1S3Q1FQP70Xys5CDIL6I5099FSjknvc_uuqWYZRsC7SsiUc9AhzZaoRwPQZ4ag1BithUdHlEB0IvNSDzCGQe6wddqpi0G3Yp3Ai8nWN65n7RPN_DcG5rjaS068wMCYjdkSM1U4C59nCWlVf-hn1ugLZDl3Hax92Uyrlk6ZSec3yKG7L4ve2pSToSF2kDR337eKzIBpWsplKeTaOeLgcgw9Gj5Fx6PQnGhO8CwG8S_V_k9e4sULFu8MGmpwCUKuehWSHibH9Dv3w"}]}}] \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/CertificateRevocation/10658/crl-set b/net.imput.helium/.config/net.imput.helium/CertificateRevocation/10658/crl-set new file mode 100644 index 0000000..81d56d9 Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/CertificateRevocation/10658/crl-set differ diff --git a/net.imput.helium/.config/net.imput.helium/CertificateRevocation/10658/manifest.json b/net.imput.helium/.config/net.imput.helium/CertificateRevocation/10658/manifest.json new file mode 100644 index 0000000..a707f84 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/CertificateRevocation/10658/manifest.json @@ -0,0 +1,5 @@ +{ + "manifest_version": 2, + "name": "crl-set-9771710095249707104.data", + "version": "10658" +} \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/CertificateRevocation/10659/LICENSE b/net.imput.helium/.config/net.imput.helium/CertificateRevocation/10659/LICENSE new file mode 100644 index 0000000..33072b5 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/CertificateRevocation/10659/LICENSE @@ -0,0 +1,27 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/CertificateRevocation/10659/_metadata/verified_contents.json b/net.imput.helium/.config/net.imput.helium/CertificateRevocation/10659/_metadata/verified_contents.json new file mode 100644 index 0000000..1f473e4 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/CertificateRevocation/10659/_metadata/verified_contents.json @@ -0,0 +1 @@ +[{"description":"treehash per file","signed_content":{"payload":"eyJjb250ZW50X2hhc2hlcyI6W3siYmxvY2tfc2l6ZSI6NDA5NiwiZGlnZXN0Ijoic2hhMjU2IiwiZmlsZXMiOlt7InBhdGgiOiJMSUNFTlNFIiwicm9vdF9oYXNoIjoiUGIwc2tBVUxaUzFqWldTQnctV0hIRkltRlhVcExiZDlUcVkwR2ZHSHBWcyJ9LHsicGF0aCI6ImNybC1zZXQiLCJyb290X2hhc2giOiJQQ0JuR0JoZGlDdmJqVWRRQVpOYXFFYnRjcDh2VDNwUXhia3BhWWJoaU5rIn0seyJwYXRoIjoibWFuaWZlc3QuanNvbiIsInJvb3RfaGFzaCI6IkNURG5ybXV4ZWNKdFNmcjhIWWZ5ZEhqb05fMEVDNmVLQ01DV0NZZm0zTzgifV0sImZvcm1hdCI6InRyZWVoYXNoIiwiaGFzaF9ibG9ja19zaXplIjo0MDk2fV0sIml0ZW1faWQiOiJoZm5rcGltbGhoZ2llYWRkZ2ZlbWpob2ZtZmJsbW5pYiIsIml0ZW1fdmVyc2lvbiI6IjEwNjU5IiwicHJvdG9jb2xfdmVyc2lvbiI6MX0","signatures":[{"header":{"kid":"publisher"},"protected":"eyJhbGciOiJSUzI1NiJ9","signature":"MrMTDE5d7Li7hxODInOE9ps7RUH4b7yvyqbkGNAxeWpxQWKJYVtP9A0t50G--ylN1F_KCejsBS7EtIQ_3RrgYm0sR9W_pQH_Kjeu65mjKdl4CjqRPhX3cQKA8v__FwZKVOAItxwAs174nj5Uocz_-ZT5m3S1ArdWgUwrb0Bv5tYua2Wd5GD8_3PGUJvTUIk9NxFw-nVHWYKl5IIvoeqR1hbv9s3glSSI0Wx16fsQQU9huKWf5Jm72ncTvbsFjn_DIDEBkjOriMK9rhYyDZ2ro7yCtGDR5HrN7TZfuiJEMAetBXE_YzniYOaSIHb9JbcoCYbchvNkFnULIZkS5BOkgA"},{"header":{"kid":"webstore"},"protected":"eyJhbGciOiJSUzI1NiJ9","signature":"XtwagCB8BKzcJUYk0h2VMIs68uWJxewuoOvycfUwSIzTKCi50XwjGfzGi97VEdM_MG5nCI00-vBTqzt8v_uUzub9jqUKGKR6lIeVBY7N5tmMkk1E0LksQt-6ySynJGz-EjwhZsGyPjt40bsHBdQY5iJuSdAl8fVj7OGH_aZLW47Z44rtxb8XRfDVW0HayMCyVyhjTwcxMPEvWamgx2hpuBpt9E5oTpxCszbkO0TKwiOy8HVYwbB_pDvE5Rl89xruDNxKM_b11J8XBCKbisMxxH5Csk9Hx8_t2PkIGp7id-Q8bdmfd0-M86ovuAY-gn8KdGhyhiCz00maz1ja0-_I7g"}]}}] \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/CertificateRevocation/10659/crl-set b/net.imput.helium/.config/net.imput.helium/CertificateRevocation/10659/crl-set new file mode 100644 index 0000000..d599d48 Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/CertificateRevocation/10659/crl-set differ diff --git a/net.imput.helium/.config/net.imput.helium/CertificateRevocation/10659/manifest.json b/net.imput.helium/.config/net.imput.helium/CertificateRevocation/10659/manifest.json new file mode 100644 index 0000000..e3ea1ff --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/CertificateRevocation/10659/manifest.json @@ -0,0 +1,5 @@ +{ + "manifest_version": 2, + "name": "crl-set-87136100516277867.data", + "version": "10659" +} \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/Crash Reports/pending/ab208bbd-c222-42b6-84be-c3716e66c149.dmp b/net.imput.helium/.config/net.imput.helium/Crash Reports/pending/ab208bbd-c222-42b6-84be-c3716e66c149.dmp new file mode 100644 index 0000000..043a57d Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Crash Reports/pending/ab208bbd-c222-42b6-84be-c3716e66c149.dmp differ diff --git a/net.imput.helium/.config/net.imput.helium/Crash Reports/pending/ab208bbd-c222-42b6-84be-c3716e66c149.meta b/net.imput.helium/.config/net.imput.helium/Crash Reports/pending/ab208bbd-c222-42b6-84be-c3716e66c149.meta new file mode 100644 index 0000000..6944d01 Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Crash Reports/pending/ab208bbd-c222-42b6-84be-c3716e66c149.meta differ diff --git a/net.imput.helium/.config/net.imput.helium/Crash Reports/settings.dat b/net.imput.helium/.config/net.imput.helium/Crash Reports/settings.dat new file mode 100644 index 0000000..c594fe6 Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Crash Reports/settings.dat differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/.org.chromium.Chromium.1F1JI3 b/net.imput.helium/.config/net.imput.helium/Default/.org.chromium.Chromium.1F1JI3 new file mode 100644 index 0000000..e9edd1e --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/.org.chromium.Chromium.1F1JI3 @@ -0,0 +1 @@ +{"sts":[{"expiry":1784967397.30481,"host":"CKgpM5pmGarlf0RwmY0Rxl4ZZ2L9eMo6aLpqAb3AQj4=","mode":"force-https","sts_include_subdomains":false,"sts_observed":1784880997.304812},{"expiry":1816416372.929553,"host":"IMmEq4iiOVkkaBC6vUyjv31jqS9XCQXEnmyFYZ7MREE=","mode":"force-https","sts_include_subdomains":false,"sts_observed":1784880372.929555},{"expiry":1792138194.293973,"host":"JHTLfnj5CEULooqTSYyW6Fvi5hJUQiEteum+aAjiaWE=","mode":"force-https","sts_include_subdomains":false,"sts_observed":1784880594.293974},{"expiry":1784967386.663373,"host":"Kqs5vFvAoc2y93qnzAMHci1WJjVGBpIhJ/luVg4Cquo=","mode":"force-https","sts_include_subdomains":false,"sts_observed":1784880986.663374},{"expiry":1795767525.299352,"host":"MzjCeHe2HKY9Et6ILCNSdg5DgEaRTxCpyzki1qChJHI=","mode":"force-https","sts_include_subdomains":true,"sts_observed":1784881125.299354},{"expiry":1816416423.561201,"host":"M4bfUnCmQAi4PNb3B8aI/2+SVJhHKsMfMMT7fzi6ij4=","mode":"force-https","sts_include_subdomains":true,"sts_observed":1784880423.561203},{"expiry":1816416387.565131,"host":"RSppokZ1kANM3UybtnoVWNJQxxnIIPFCb7DNQe5s+/c=","mode":"force-https","sts_include_subdomains":false,"sts_observed":1784880387.565133},{"expiry":1795766824.01838,"host":"TUVK1Qd8RS/MNsiCX8N04cWZvC+IzkO8p1Niq0eDWlY=","mode":"force-https","sts_include_subdomains":true,"sts_observed":1784880424.018382},{"expiry":1795767363.098095,"host":"Z030MHuAr75Z3Cp3qskx1ltBQH6qfbi1E7Xhe1zqJEs=","mode":"force-https","sts_include_subdomains":true,"sts_observed":1784880963.098097},{"expiry":1816416386.260879,"host":"akP2e0NTMe7KN2UIzZ5xIcTyEs+s14WhaqfK2aV8d30=","mode":"force-https","sts_include_subdomains":false,"sts_observed":1784880386.26088},{"expiry":1816416371.760381,"host":"bVzOnu6xyelN8iVLDSbFjyZVgXrXDyLSokjnq2hdUFs=","mode":"force-https","sts_include_subdomains":true,"sts_observed":1784880371.760384},{"expiry":1816416387.242923,"host":"dIsI2buJU03Gk+THOFWmwxSsKSozjiKfCZJTx8Jn9aI=","mode":"force-https","sts_include_subdomains":true,"sts_observed":1784880387.242925},{"expiry":1816416427.305338,"host":"dPCSnVTk6x5M6UM7txrgldTiNqgbi92uEZS19DQrwMk=","mode":"force-https","sts_include_subdomains":false,"sts_observed":1784880427.305339},{"expiry":1816416466.058397,"host":"lLnbdiMGgdCGL7LB/E9WiQg0PqkLKPd2HjhvM0zJP6E=","mode":"force-https","sts_include_subdomains":false,"sts_observed":1784880466.058398},{"expiry":1816416406.701877,"host":"nAuqgR4iEWti7SOdT3UHPl6rmZU/DeaIm38P2O2OkgA=","mode":"force-https","sts_include_subdomains":false,"sts_observed":1784880406.701879},{"expiry":1816416370.488786,"host":"pjrtQ+el/UMfiCm3Y67Qplt1YBFthMtbFriVV6wniGs=","mode":"force-https","sts_include_subdomains":false,"sts_observed":1784880370.488787},{"expiry":1816416659.735854,"host":"qhkH9gdxKhEU9AtSpJdNby361kf6xFvaSDsh29+guzw=","mode":"force-https","sts_include_subdomains":false,"sts_observed":1784880659.735855},{"expiry":1816416970.246622,"host":"taMf8Wby3UJQCjoRqXJoR2ipA3aXXmGnaCrHXroZJvU=","mode":"force-https","sts_include_subdomains":false,"sts_observed":1784880970.246623},{"expiry":1816417094.604107,"host":"8/RrMmQlCD2Gsp14wUCE1P8r7B2C5+yE0+g79IPyRsc=","mode":"force-https","sts_include_subdomains":true,"sts_observed":1784881094.604108},{"expiry":1816416966.728113,"host":"+ccWXqaoHJ9hfuXbleKV6FQUrBlyXAJ31BdqjNQJpHs=","mode":"force-https","sts_include_subdomains":false,"sts_observed":1784880966.728114}],"version":2} \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/Default/.org.chromium.Chromium.EEq65z b/net.imput.helium/.config/net.imput.helium/Default/.org.chromium.Chromium.EEq65z new file mode 100644 index 0000000..e242562 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/.org.chromium.Chromium.EEq65z @@ -0,0 +1 @@ +{"net":{"http_server_properties":{"servers":[{"anonymization":[3],"server":"https://base.dns.mullvad.net","supports_spdy":true},{"alternative_service":[{"advertised_alpns":["h3"],"expiration":"13431949101604398","port":443,"protocol_str":"quic"}],"anonymization":["GAAAABIAAABodHRwczovL2dvb2dsZS5jb20AAA==",false,0],"network_stats":{"srtt":107298},"server":"https://accounts.google.com","supports_spdy":true},{"alternative_service":[{"advertised_alpns":["h3"],"expiration":"13431949124606269","port":443,"protocol_str":"quic"}],"anonymization":["GAAAABIAAABodHRwczovL2dvb2dsZS5jb20AAA==",false,0],"network_stats":{"srtt":100565},"server":"https://gemini.google.com","supports_spdy":true},{"alternative_service":[{"advertised_alpns":["h3"],"expiration":"13429360110792925","port":443,"protocol_str":"quic"}],"anonymization":["GAAAABIAAABodHRwczovL25hZGVrby5uZXQAAA==",false,0],"network_stats":{"srtt":324713},"server":"https://inv.nadeko.net","supports_spdy":true},{"alternative_service":[{"advertised_alpns":["h3"],"expiration":"13431949011086792","port":443,"protocol_str":"quic"}],"anonymization":["GAAAABIAAABodHRwczovL2dvb2dsZS5jb20AAA==",false,0],"network_stats":{"srtt":107099},"server":"https://signaler-pa.clients6.google.com","supports_spdy":true}],"supports_quic":{"address":"10.147.123.164","used_quic":true},"version":5},"network_qualities":{"CAESABiAgICA+P////8B":"4G"}}} \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/Default/.org.chromium.Chromium.L5b1Sq b/net.imput.helium/.config/net.imput.helium/Default/.org.chromium.Chromium.L5b1Sq new file mode 100644 index 0000000..9e11c49 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/.org.chromium.Chromium.L5b1Sq @@ -0,0 +1 @@ +{"net":{"http_server_properties":{"servers":[{"alternative_service":[{"advertised_alpns":["h3"],"expiration":"13431945590527906","port":443,"protocol_str":"quic"}],"anonymization":["GAAAABIAAABodHRwczovL2dvb2dsZS5jb20AAA==",false,0],"network_stats":{"srtt":102283},"server":"https://push.clients6.google.com","supports_spdy":true},{"anonymization":["GAAAABEAAABodHRwczovL25peG9zLm9yZwAAAA==",false,0],"server":"https://search.nixos.org","supports_spdy":true},{"anonymization":["GAAAABIAAABodHRwczovL2dpdGh1Yi5jb20AAA==",false,0],"server":"https://github.com","supports_spdy":true},{"alternative_service":[{"advertised_alpns":["h3"],"expiration":"13431945971618349","port":443,"protocol_str":"quic"}],"anonymization":["GAAAABIAAABodHRwczovL2dvb2dsZS5jb20AAA==",false,0],"server":"https://lh3.google.com","supports_spdy":true},{"anonymization":["GAAAABIAAABodHRwczovL2dpdGh1Yi5jb20AAA==",false,0],"server":"https://camo.githubusercontent.com","supports_spdy":true},{"anonymization":["GAAAABIAAABodHRwczovL2dpdGh1Yi5jb20AAA==",false,0],"server":"https://avatars.githubusercontent.com","supports_spdy":true},{"anonymization":["HAAAABYAAABodHRwczovL2R1Y2tkdWNrZ28uY29tAAA=",false,0],"server":"https://external-content.duckduckgo.com","supports_spdy":true},{"alternative_service":[{"advertised_alpns":["h3"],"expiration":"13431946006701710","port":443,"protocol_str":"quic"}],"anonymization":["GAAAABIAAABodHRwczovL2dvb2dsZS5jb20AAA==",false,0],"server":"https://fonts.googleapis.com","supports_spdy":true},{"alternative_service":[{"advertised_alpns":["h3"],"expiration":"13429440397668850","port":443,"protocol_str":"quic"}],"anonymization":["OAAAADMAAABjaHJvbWUtZXh0ZW5zaW9uOi8vYmxvY2tqbWtiYWNnamtrbmxncGtqamlpamluamRhbmYA",false,0],"network_stats":{"srtt":126630},"server":"https://services.helium.imput.net","supports_spdy":true},{"alternative_service":[{"advertised_alpns":["h3"],"expiration":"13429440387564624","port":443,"protocol_str":"quic"}],"anonymization":["GAAAABIAAABodHRwczovL2dpdGh1Yi5jb20AAA==",false,0],"network_stats":{"srtt":100466},"server":"https://github.githubassets.com"},{"alternative_service":[{"advertised_alpns":["h3"],"expiration":"13431946024120041","port":443,"protocol_str":"quic"}],"anonymization":["GAAAABIAAABodHRwczovL2dvb2dsZS5jb20AAA==",false,0],"server":"https://img.youtube.com","supports_spdy":true},{"alternative_service":[{"advertised_alpns":["h3"],"expiration":"13431946025139120","port":443,"protocol_str":"quic"}],"anonymization":["JAAAAB0AAABodHRwczovL2dvb2dsZXVzZXJjb250ZW50LmNvbQAAAA==",false,0],"server":"https://lh3.googleusercontent.com","supports_spdy":true},{"alternative_service":[{"advertised_alpns":["h3"],"expiration":"13431946023561052","port":443,"protocol_str":"quic"}],"anonymization":["GAAAABIAAABodHRwczovL2dvb2dsZS5jb20AAA==",false,0],"network_stats":{"srtt":100486},"server":"https://www.googletagmanager.com","supports_spdy":true},{"alternative_service":[{"advertised_alpns":["h3"],"expiration":"13431946024017463","port":443,"protocol_str":"quic"}],"anonymization":["GAAAABIAAABodHRwczovL2dvb2dsZS5jb20AAA==",false,0],"network_stats":{"srtt":100886},"server":"https://feedback-pa.clients6.google.com","supports_spdy":true},{"anonymization":["OAAAADMAAABjaHJvbWUtZXh0ZW5zaW9uOi8vb2xkY2VlbGVsZGhvbmJhZnBwY2FwbGRwZGlmY2luamkA",false,0],"server":"https://prod-translator.languagetool.org","supports_spdy":true},{"anonymization":["OAAAADMAAABjaHJvbWUtZXh0ZW5zaW9uOi8vb2xkY2VlbGVsZGhvbmJhZnBwY2FwbGRwZGlmY2luamkA",false,0],"server":"https://api.languagetoolplus.com","supports_spdy":true},{"alternative_service":[{"advertised_alpns":["h3"],"expiration":"13429440427305316","port":443,"protocol_str":"quic"}],"anonymization":["GAAAABEAAABodHRwczovL2ltcHV0Lm5ldAAAAA==",false,0],"network_stats":{"srtt":127624},"server":"https://services.helium.imput.net","supports_spdy":true},{"alternative_service":[{"advertised_alpns":["h3"],"expiration":"13431946008574768","port":443,"protocol_str":"quic"}],"anonymization":["GAAAABIAAABodHRwczovL2dvb2dsZS5jb20AAA==",false,0],"network_stats":{"srtt":101730},"server":"https://apis.google.com","supports_spdy":true},{"alternative_service":[{"advertised_alpns":["h3"],"expiration":"13429440465775383","port":443,"protocol_str":"quic"}],"anonymization":["OAAAADMAAABjaHJvbWUtZXh0ZW5zaW9uOi8vb2xkY2VlbGVsZGhvbmJhZnBwY2FwbGRwZGlmY2luamkA",false,0],"network_stats":{"srtt":93449},"server":"https://languagetool.org"},{"alternative_service":[{"advertised_alpns":["h3"],"expiration":"13431945654468638","port":443,"protocol_str":"quic"}],"anonymization":["HAAAABUAAABodHRwczovL2phbml0b3JhaS5jb20AAAA=",false,0],"server":"https://fonts.googleapis.com","supports_spdy":true},{"alternative_service":[{"advertised_alpns":["h3"],"expiration":"13431945654976479","port":443,"protocol_str":"quic"}],"anonymization":["HAAAABUAAABodHRwczovL2phbml0b3JhaS5jb20AAAA=",false,0],"server":"https://fonts.gstatic.com"},{"anonymization":["HAAAABUAAABodHRwczovL2phbml0b3JhaS5jb20AAAA=",false,0],"server":"https://ella.janitorai.com","supports_spdy":true},{"alternative_service":[{"advertised_alpns":["h3"],"expiration":"13429440055245069","port":443,"protocol_str":"quic"}],"anonymization":["HAAAABUAAABodHRwczovL2phbml0b3JhaS5jb20AAAA=",false,0],"network_stats":{"srtt":93947},"server":"https://challenges.cloudflare.com"},{"alternative_service":[{"advertised_alpns":["h3"],"expiration":"13429440598978136","port":443,"protocol_str":"quic"}],"anonymization":["OAAAADMAAABjaHJvbWUtZXh0ZW5zaW9uOi8vb2xkY2VlbGVsZGhvbmJhZnBwY2FwbGRwZGlmY2luamkA",false,0],"network_stats":{"srtt":93873},"server":"https://cerberus.languagetool.org"},{"anonymization":["HAAAABUAAABodHRwczovL2phbml0b3JhaS5jb20AAAA=",false,0],"server":"https://assets.janitorai.com","supports_spdy":true},{"alternative_service":[{"advertised_alpns":["h3"],"expiration":"13431946219370162","port":443,"protocol_str":"quic"}],"anonymization":["GAAAABIAAABodHRwczovL2dvb2dsZS5jb20AAA==",false,0],"network_stats":{"srtt":103186},"server":"https://play.google.com","supports_spdy":true},{"anonymization":["HAAAABYAAABodHRwczovL2R1Y2tkdWNrZ28uY29tAAA=",false,0],"server":"https://duckduckgo.com","supports_spdy":true},{"alternative_service":[{"advertised_alpns":["h3"],"expiration":"13429440632915869","port":443,"protocol_str":"quic"}],"anonymization":["HAAAABUAAABodHRwczovL2phbml0b3JhaS5jb20AAAA=",false,0],"network_stats":{"srtt":93966},"server":"https://janitorai.com"},{"alternative_service":[{"advertised_alpns":["h3"],"expiration":"13431945969467206","port":443,"protocol_str":"quic"}],"anonymization":["GAAAABIAAABodHRwczovL2dvb2dsZS5jb20AAA==",false,0],"network_stats":{"srtt":104300},"server":"https://www.google.com"},{"alternative_service":[{"advertised_alpns":["h3"],"expiration":"13431946009063760","port":443,"protocol_str":"quic"}],"anonymization":["GAAAABIAAABodHRwczovL2dvb2dsZS5jb20AAA==",false,0],"network_stats":{"srtt":105650},"server":"https://ssl.gstatic.com","supports_spdy":true},{"anonymization":["OAAAADMAAABjaHJvbWUtZXh0ZW5zaW9uOi8vb2xkY2VlbGVsZGhvbmJhZnBwY2FwbGRwZGlmY2luamkA",false,0],"server":"https://api.languagetool.org","supports_spdy":true},{"alternative_service":[{"advertised_alpns":["h3"],"expiration":"13431946024650787","port":443,"protocol_str":"quic"}],"anonymization":["GAAAABIAAABodHRwczovL2dvb2dsZS5jb20AAA==",false,0],"network_stats":{"srtt":105650},"server":"https://www.gstatic.com","supports_spdy":true},{"alternative_service":[{"advertised_alpns":["h3"],"expiration":"13431946006974685","port":443,"protocol_str":"quic"}],"anonymization":["GAAAABIAAABodHRwczovL2dvb2dsZS5jb20AAA==",false,0],"network_stats":{"srtt":100484},"server":"https://fonts.gstatic.com"},{"alternative_service":[{"advertised_alpns":["h3"],"expiration":"13431946563097402","port":443,"protocol_str":"quic"}],"anonymization":["GAAAABIAAABodHRwczovL2dvb2dsZS5jb20AAA==",false,0],"network_stats":{"srtt":100527},"server":"https://waa-pa.clients6.google.com","supports_spdy":true},{"alternative_service":[{"advertised_alpns":["h3"],"expiration":"13431946564037427","port":443,"protocol_str":"quic"}],"anonymization":["GAAAABIAAABodHRwczovL2dvb2dsZS5jb20AAA==",false,0],"network_stats":{"srtt":100123},"server":"https://lh3.googleusercontent.com"},{"alternative_service":[{"advertised_alpns":["h3"],"expiration":"13431946566726252","port":443,"protocol_str":"quic"}],"anonymization":["GAAAABIAAABodHRwczovL2dvb2dsZS5jb20AAA==",false,0],"network_stats":{"srtt":101027},"server":"https://ogs.google.com","supports_spdy":true},{"anonymization":["GAAAABIAAABodHRwczovL25hZGVrby5uZXQAAA==",false,0],"server":"https://inv-us1.nadeko.net","supports_spdy":true},{"alternative_service":[{"advertised_alpns":["h3"],"expiration":"13431946592500320","port":443,"protocol_str":"quic"}],"anonymization":["GAAAABIAAABodHRwczovL2dvb2dsZS5jb20AAA==",false,0],"network_stats":{"srtt":100851},"server":"https://gemini.gstatic.com","supports_spdy":true},{"alternative_service":[{"advertised_alpns":["h3"],"expiration":"13431946652519012","port":443,"protocol_str":"quic"}],"anonymization":["GAAAABIAAABodHRwczovL2dvb2dsZS5jb20AAA==",false,0],"network_stats":{"srtt":100256},"server":"https://chromewebstore.google.com","supports_spdy":true},{"anonymization":[3],"server":"https://base.dns.mullvad.net","supports_spdy":true},{"alternative_service":[{"advertised_alpns":["h3"],"expiration":"13431946694603318","port":443,"protocol_str":"quic"}],"anonymization":["GAAAABIAAABodHRwczovL2dvb2dsZS5jb20AAA==",false,0],"network_stats":{"srtt":112183},"server":"https://accounts.google.com","supports_spdy":true},{"alternative_service":[{"advertised_alpns":["h3"],"expiration":"13431946734881872","port":443,"protocol_str":"quic"}],"anonymization":["GAAAABIAAABodHRwczovL2dvb2dsZS5jb20AAA==",false,0],"network_stats":{"srtt":105502},"server":"https://gemini.google.com","supports_spdy":true},{"alternative_service":[{"advertised_alpns":["h3"],"expiration":"13429358186662718","port":443,"protocol_str":"quic"}],"anonymization":["GAAAABIAAABodHRwczovL25hZGVrby5uZXQAAA==",false,0],"network_stats":{"srtt":325658},"server":"https://inv.nadeko.net","supports_spdy":true},{"alternative_service":[{"advertised_alpns":["h3"],"expiration":"13431946725298296","port":443,"protocol_str":"quic"}],"anonymization":["GAAAABIAAABodHRwczovL2dvb2dsZS5jb20AAA==",false,0],"network_stats":{"srtt":100764},"server":"https://signaler-pa.clients6.google.com","supports_spdy":true}],"supports_quic":{"address":"10.147.123.164","used_quic":true},"version":5},"network_qualities":{"CAESABiAgICA+P////8B":"4G"}}} \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/Default/.org.chromium.Chromium.UCYqcY b/net.imput.helium/.config/net.imput.helium/Default/.org.chromium.Chromium.UCYqcY new file mode 100644 index 0000000..75a65d3 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/.org.chromium.Chromium.UCYqcY @@ -0,0 +1 @@ +{"sts":[{"expiry":1816418910.793818,"host":"Kqs5vFvAoc2y93qnzAMHci1WJjVGBpIhJ/luVg4Cquo=","mode":"force-https","sts_include_subdomains":true,"sts_observed":1784882910.79382},{"expiry":1795769811.088084,"host":"MzjCeHe2HKY9Et6ILCNSdg5DgEaRTxCpyzki1qChJHI=","mode":"force-https","sts_include_subdomains":true,"sts_observed":1784883411.088087},{"expiry":1816419501.605607,"host":"8/RrMmQlCD2Gsp14wUCE1P8r7B2C5+yE0+g79IPyRsc=","mode":"force-https","sts_include_subdomains":true,"sts_observed":1784883501.605609}],"version":2} \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/Default/Account Web Data b/net.imput.helium/.config/net.imput.helium/Default/Account Web Data new file mode 100644 index 0000000..fca9875 Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Account Web Data differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Account Web Data-journal b/net.imput.helium/.config/net.imput.helium/Default/Account Web Data-journal new file mode 100644 index 0000000..e69de29 diff --git a/net.imput.helium/.config/net.imput.helium/Default/Affiliation Database b/net.imput.helium/.config/net.imput.helium/Default/Affiliation Database new file mode 100644 index 0000000..0b4c5a4 Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Affiliation Database differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Affiliation Database-journal b/net.imput.helium/.config/net.imput.helium/Default/Affiliation Database-journal new file mode 100644 index 0000000..e69de29 diff --git a/net.imput.helium/.config/net.imput.helium/Default/AutofillAiModelCache/LOCK b/net.imput.helium/.config/net.imput.helium/Default/AutofillAiModelCache/LOCK new file mode 100644 index 0000000..e69de29 diff --git a/net.imput.helium/.config/net.imput.helium/Default/AutofillAiModelCache/LOG b/net.imput.helium/.config/net.imput.helium/Default/AutofillAiModelCache/LOG new file mode 100644 index 0000000..e69de29 diff --git a/net.imput.helium/.config/net.imput.helium/Default/AutofillAiModelCache/LOG.old b/net.imput.helium/.config/net.imput.helium/Default/AutofillAiModelCache/LOG.old new file mode 100644 index 0000000..e69de29 diff --git a/net.imput.helium/.config/net.imput.helium/Default/AutofillStrikeDatabase/LOCK b/net.imput.helium/.config/net.imput.helium/Default/AutofillStrikeDatabase/LOCK new file mode 100644 index 0000000..e69de29 diff --git a/net.imput.helium/.config/net.imput.helium/Default/AutofillStrikeDatabase/LOG b/net.imput.helium/.config/net.imput.helium/Default/AutofillStrikeDatabase/LOG new file mode 100644 index 0000000..e69de29 diff --git a/net.imput.helium/.config/net.imput.helium/Default/AutofillStrikeDatabase/LOG.old b/net.imput.helium/.config/net.imput.helium/Default/AutofillStrikeDatabase/LOG.old new file mode 100644 index 0000000..e69de29 diff --git a/net.imput.helium/.config/net.imput.helium/Default/BookmarkMergedSurfaceOrdering b/net.imput.helium/.config/net.imput.helium/Default/BookmarkMergedSurfaceOrdering new file mode 100644 index 0000000..2c63c08 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/BookmarkMergedSurfaceOrdering @@ -0,0 +1,2 @@ +{ +} diff --git a/net.imput.helium/.config/net.imput.helium/Default/Bookmarks b/net.imput.helium/.config/net.imput.helium/Default/Bookmarks new file mode 100644 index 0000000..343cbab --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Bookmarks @@ -0,0 +1,164 @@ +{ + "checksum": "d1d13bda4537d5676dd60d8e7e4687a6", + "roots": { + "bookmark_bar": { + "children": [ { + "date_added": "13428701518841906", + "date_last_used": "13428702992546514", + "guid": "15f32adc-fd0b-4a19-a6db-b8e9f4f3a8c9", + "id": "25", + "meta_info": { + "power_bookmark_meta": "" + }, + "name": "kimi", + "type": "url", + "url": "https://www.kimi.com/" + }, { + "date_added": "13428702698415119", + "date_last_used": "13429211987917484", + "guid": "16d2bb4f-9d82-4394-94c9-63e162eac5e0", + "id": "26", + "meta_info": { + "power_bookmark_meta": "" + }, + "name": "Google Gemini", + "type": "url", + "url": "https://gemini.google.com/app" + } ], + "date_added": "13428693863707917", + "date_last_used": "0", + "date_modified": "13428779956617140", + "guid": "0bc5d13f-2cba-5d74-951f-3f233fe6c908", + "id": "1", + "name": "Bookmarks bar", + "type": "folder" + }, + "other": { + "children": [ { + "children": [ { + "date_added": "13428696590292077", + "date_last_used": "0", + "guid": "c967263c-cee2-4403-8aeb-238b8885285b", + "id": "7", + "meta_info": { + "power_bookmark_meta": "" + }, + "name": "keep thinking", + "type": "url", + "url": "https://www.anthropic.com/path-to-hope" + }, { + "date_added": "13428696611046821", + "date_last_used": "0", + "guid": "85c49b6a-69d8-4cfb-aadb-90abbb377556", + "id": "8", + "meta_info": { + "power_bookmark_meta": "" + }, + "name": "hard questions", + "type": "url", + "url": "https://claude.com/hard-questions" + }, { + "date_added": "13428696621128727", + "date_last_used": "0", + "guid": "00c4ff9f-ddc9-42b6-aed1-c8722c564d2a", + "id": "9", + "meta_info": { + "power_bookmark_meta": "" + }, + "name": "ai influency", + "type": "url", + "url": "https://www.anthropic.com/research/AI-fluency-index" + }, { + "date_added": "13428696638289401", + "date_last_used": "0", + "guid": "d2237579-872b-4e5b-a8ac-7c4226632e04", + "id": "10", + "meta_info": { + "power_bookmark_meta": "" + }, + "name": "The 4 Ds of AI Fluency — Behavioral Indicators", + "type": "url", + "url": "https://claude.com/resources/tutorials/the-4-ds-of-ai-fluency-behavioral-indicators" + }, { + "date_added": "13428696703126375", + "date_last_used": "0", + "guid": "86a5e55c-7432-477b-bf98-d668996a8adc", + "id": "11", + "meta_info": { + "power_bookmark_meta": "" + }, + "name": "Research \\ Anthropic", + "type": "url", + "url": "https://www.anthropic.com/research" + }, { + "date_added": "13428696706387483", + "date_last_used": "0", + "guid": "8a0a3477-34c5-4deb-a2ef-5a0f5f00221f", + "id": "12", + "meta_info": { + "power_bookmark_meta": "" + }, + "name": "AI Learning Resources & Guides from Anthropic \\ Anthropic", + "type": "url", + "url": "https://www.anthropic.com/learn" + }, { + "date_added": "13428696709227376", + "date_last_used": "0", + "guid": "96c77591-c725-4ad7-828a-2ae89fafa0bd", + "id": "13", + "meta_info": { + "power_bookmark_meta": "" + }, + "name": "Introducing Claude for education \\ Anthropic", + "type": "url", + "url": "https://www.anthropic.com/news/introducing-claude-for-education" + } ], + "date_added": "13428696532865779", + "date_last_used": "0", + "date_modified": "13428696709227376", + "guid": "2ebd573c-afac-4f6e-8f64-8edd483a0a41", + "id": "5", + "name": "claude", + "type": "folder" + }, { + "children": [ { + "date_added": "13428779956617140", + "date_last_used": "0", + "guid": "4b2029cf-83a1-4eb2-994c-dc9c55592f9f", + "id": "28", + "meta_info": { + "power_bookmark_meta": "" + }, + "name": "AI Engineering from Scratch", + "type": "url", + "url": "https://aiengineeringfromscratch.com/index.html" + } ], + "date_added": "13428701476565553", + "date_last_used": "0", + "date_modified": "13428779961572872", + "guid": "8bf70ba4-3b8c-4ba6-aa57-c87742de2c35", + "id": "15", + "name": "ai", + "type": "folder" + } ], + "date_added": "13428693863707917", + "date_last_used": "0", + "date_modified": "13428701476565762", + "guid": "82b081ec-3dd3-529c-8475-ab6c344590dd", + "id": "2", + "name": "Other bookmarks", + "type": "folder" + }, + "synced": { + "children": [ ], + "date_added": "13428693863707917", + "date_last_used": "0", + "date_modified": "0", + "guid": "4cf2e351-0e85-532b-bb37-df045d8f8d0f", + "id": "3", + "name": "Mobile bookmarks", + "type": "folder" + } + }, + "version": 1 +} diff --git a/net.imput.helium/.config/net.imput.helium/Default/Bookmarks.bak b/net.imput.helium/.config/net.imput.helium/Default/Bookmarks.bak new file mode 100644 index 0000000..f5ef123 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Bookmarks.bak @@ -0,0 +1,164 @@ +{ + "checksum": "d1d13bda4537d5676dd60d8e7e4687a6", + "roots": { + "bookmark_bar": { + "children": [ { + "date_added": "13428701518841906", + "date_last_used": "13428702992546514", + "guid": "15f32adc-fd0b-4a19-a6db-b8e9f4f3a8c9", + "id": "25", + "meta_info": { + "power_bookmark_meta": "" + }, + "name": "kimi", + "type": "url", + "url": "https://www.kimi.com/" + }, { + "date_added": "13428702698415119", + "date_last_used": "13429211118381074", + "guid": "16d2bb4f-9d82-4394-94c9-63e162eac5e0", + "id": "26", + "meta_info": { + "power_bookmark_meta": "" + }, + "name": "Google Gemini", + "type": "url", + "url": "https://gemini.google.com/app" + } ], + "date_added": "13428693863707917", + "date_last_used": "0", + "date_modified": "13428779956617140", + "guid": "0bc5d13f-2cba-5d74-951f-3f233fe6c908", + "id": "1", + "name": "Bookmarks bar", + "type": "folder" + }, + "other": { + "children": [ { + "children": [ { + "date_added": "13428696590292077", + "date_last_used": "0", + "guid": "c967263c-cee2-4403-8aeb-238b8885285b", + "id": "7", + "meta_info": { + "power_bookmark_meta": "" + }, + "name": "keep thinking", + "type": "url", + "url": "https://www.anthropic.com/path-to-hope" + }, { + "date_added": "13428696611046821", + "date_last_used": "0", + "guid": "85c49b6a-69d8-4cfb-aadb-90abbb377556", + "id": "8", + "meta_info": { + "power_bookmark_meta": "" + }, + "name": "hard questions", + "type": "url", + "url": "https://claude.com/hard-questions" + }, { + "date_added": "13428696621128727", + "date_last_used": "0", + "guid": "00c4ff9f-ddc9-42b6-aed1-c8722c564d2a", + "id": "9", + "meta_info": { + "power_bookmark_meta": "" + }, + "name": "ai influency", + "type": "url", + "url": "https://www.anthropic.com/research/AI-fluency-index" + }, { + "date_added": "13428696638289401", + "date_last_used": "0", + "guid": "d2237579-872b-4e5b-a8ac-7c4226632e04", + "id": "10", + "meta_info": { + "power_bookmark_meta": "" + }, + "name": "The 4 Ds of AI Fluency — Behavioral Indicators", + "type": "url", + "url": "https://claude.com/resources/tutorials/the-4-ds-of-ai-fluency-behavioral-indicators" + }, { + "date_added": "13428696703126375", + "date_last_used": "0", + "guid": "86a5e55c-7432-477b-bf98-d668996a8adc", + "id": "11", + "meta_info": { + "power_bookmark_meta": "" + }, + "name": "Research \\ Anthropic", + "type": "url", + "url": "https://www.anthropic.com/research" + }, { + "date_added": "13428696706387483", + "date_last_used": "0", + "guid": "8a0a3477-34c5-4deb-a2ef-5a0f5f00221f", + "id": "12", + "meta_info": { + "power_bookmark_meta": "" + }, + "name": "AI Learning Resources & Guides from Anthropic \\ Anthropic", + "type": "url", + "url": "https://www.anthropic.com/learn" + }, { + "date_added": "13428696709227376", + "date_last_used": "0", + "guid": "96c77591-c725-4ad7-828a-2ae89fafa0bd", + "id": "13", + "meta_info": { + "power_bookmark_meta": "" + }, + "name": "Introducing Claude for education \\ Anthropic", + "type": "url", + "url": "https://www.anthropic.com/news/introducing-claude-for-education" + } ], + "date_added": "13428696532865779", + "date_last_used": "0", + "date_modified": "13428696709227376", + "guid": "2ebd573c-afac-4f6e-8f64-8edd483a0a41", + "id": "5", + "name": "claude", + "type": "folder" + }, { + "children": [ { + "date_added": "13428779956617140", + "date_last_used": "0", + "guid": "4b2029cf-83a1-4eb2-994c-dc9c55592f9f", + "id": "28", + "meta_info": { + "power_bookmark_meta": "" + }, + "name": "AI Engineering from Scratch", + "type": "url", + "url": "https://aiengineeringfromscratch.com/index.html" + } ], + "date_added": "13428701476565553", + "date_last_used": "0", + "date_modified": "13428779961572872", + "guid": "8bf70ba4-3b8c-4ba6-aa57-c87742de2c35", + "id": "15", + "name": "ai", + "type": "folder" + } ], + "date_added": "13428693863707917", + "date_last_used": "0", + "date_modified": "13428701476565762", + "guid": "82b081ec-3dd3-529c-8475-ab6c344590dd", + "id": "2", + "name": "Other bookmarks", + "type": "folder" + }, + "synced": { + "children": [ ], + "date_added": "13428693863707917", + "date_last_used": "0", + "date_modified": "0", + "guid": "4cf2e351-0e85-532b-bb37-df045d8f8d0f", + "id": "3", + "name": "Mobile bookmarks", + "type": "folder" + } + }, + "version": 1 +} diff --git a/net.imput.helium/.config/net.imput.helium/Default/BudgetDatabase/LOCK b/net.imput.helium/.config/net.imput.helium/Default/BudgetDatabase/LOCK new file mode 100644 index 0000000..e69de29 diff --git a/net.imput.helium/.config/net.imput.helium/Default/BudgetDatabase/LOG b/net.imput.helium/.config/net.imput.helium/Default/BudgetDatabase/LOG new file mode 100644 index 0000000..e69de29 diff --git a/net.imput.helium/.config/net.imput.helium/Default/BudgetDatabase/LOG.old b/net.imput.helium/.config/net.imput.helium/Default/BudgetDatabase/LOG.old new file mode 100644 index 0000000..e69de29 diff --git a/net.imput.helium/.config/net.imput.helium/Default/ClientCertificates/LOCK b/net.imput.helium/.config/net.imput.helium/Default/ClientCertificates/LOCK new file mode 100644 index 0000000..e69de29 diff --git a/net.imput.helium/.config/net.imput.helium/Default/ClientCertificates/LOG b/net.imput.helium/.config/net.imput.helium/Default/ClientCertificates/LOG new file mode 100644 index 0000000..e69de29 diff --git a/net.imput.helium/.config/net.imput.helium/Default/ClientCertificates/LOG.old b/net.imput.helium/.config/net.imput.helium/Default/ClientCertificates/LOG.old new file mode 100644 index 0000000..e69de29 diff --git a/net.imput.helium/.config/net.imput.helium/Default/Cookies b/net.imput.helium/.config/net.imput.helium/Default/Cookies new file mode 100644 index 0000000..88e8e1d Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Cookies differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Cookies-journal b/net.imput.helium/.config/net.imput.helium/Default/Cookies-journal new file mode 100644 index 0000000..e69de29 diff --git a/net.imput.helium/.config/net.imput.helium/Default/DIPS b/net.imput.helium/.config/net.imput.helium/Default/DIPS new file mode 100644 index 0000000..9897f9b Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/DIPS differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/DIPS-wal b/net.imput.helium/.config/net.imput.helium/Default/DIPS-wal new file mode 100644 index 0000000..c7c270d Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/DIPS-wal differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/DNR Extension Rules/fgmjlmbojbkmdpofahffgcpkhkngfpef/rules.fbs b/net.imput.helium/.config/net.imput.helium/Default/DNR Extension Rules/fgmjlmbojbkmdpofahffgcpkhkngfpef/rules.fbs new file mode 100644 index 0000000..89c60b8 Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/DNR Extension Rules/fgmjlmbojbkmdpofahffgcpkhkngfpef/rules.fbs differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/DNR Extension Rules/fgmjlmbojbkmdpofahffgcpkhkngfpef/rules.json b/net.imput.helium/.config/net.imput.helium/Default/DNR Extension Rules/fgmjlmbojbkmdpofahffgcpkhkngfpef/rules.json new file mode 100644 index 0000000..20a8d77 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/DNR Extension Rules/fgmjlmbojbkmdpofahffgcpkhkngfpef/rules.json @@ -0,0 +1 @@ +[{"action":{"requestHeaders":[{"header":"Startpage-Extension","operation":"set","value":"ext-chrome"},{"header":"Startpage-Extension-Version","operation":"set","value":"3.0.8"},{"header":"Startpage-Extension-Segment","operation":"set","value":"startpage.defaultchx"}],"type":"modifyHeaders"},"condition":{"resourceTypes":["main_frame"],"urlFilter":"|http*"},"id":1,"priority":1},{"action":{"requestHeaders":[{"header":"Startpage-Extension","operation":"set","value":"ext-chrome"},{"header":"Startpage-Extension-Version","operation":"set","value":"3.0.8"},{"header":"Startpage-Extension-Segment","operation":"set","value":"startpage.defaultchx"},{"header":"Startpage-Extension-Campaign","operation":"set","value":"none"},{"header":"Startpage-Extension-Date","operation":"set","value":"2000-01-01"},{"header":"Startpage-Extension-Source","operation":"set","value":"organic"},{"header":"Startpage-Extension-Account","operation":"set","value":"none"},{"header":"Startpage-Extension-Act","operation":"set","value":"none"}],"type":"modifyHeaders"},"condition":{"resourceTypes":["main_frame"],"urlFilter":"/do/dsearch"},"id":2,"priority":2}] \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/Default/DawnGraphiteCache/data_0 b/net.imput.helium/.config/net.imput.helium/Default/DawnGraphiteCache/data_0 new file mode 100644 index 0000000..d76fb77 Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/DawnGraphiteCache/data_0 differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/DawnGraphiteCache/data_1 b/net.imput.helium/.config/net.imput.helium/Default/DawnGraphiteCache/data_1 new file mode 100644 index 0000000..5ecc1ca Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/DawnGraphiteCache/data_1 differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/DawnGraphiteCache/data_2 b/net.imput.helium/.config/net.imput.helium/Default/DawnGraphiteCache/data_2 new file mode 100644 index 0000000..c7e2eb9 Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/DawnGraphiteCache/data_2 differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/DawnGraphiteCache/data_3 b/net.imput.helium/.config/net.imput.helium/Default/DawnGraphiteCache/data_3 new file mode 100644 index 0000000..5eec973 Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/DawnGraphiteCache/data_3 differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/DawnGraphiteCache/index b/net.imput.helium/.config/net.imput.helium/Default/DawnGraphiteCache/index new file mode 100644 index 0000000..cebb3df Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/DawnGraphiteCache/index differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/DawnWebGPUCache/data_0 b/net.imput.helium/.config/net.imput.helium/Default/DawnWebGPUCache/data_0 new file mode 100644 index 0000000..d76fb77 Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/DawnWebGPUCache/data_0 differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/DawnWebGPUCache/data_1 b/net.imput.helium/.config/net.imput.helium/Default/DawnWebGPUCache/data_1 new file mode 100644 index 0000000..9b7cb68 Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/DawnWebGPUCache/data_1 differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/DawnWebGPUCache/data_2 b/net.imput.helium/.config/net.imput.helium/Default/DawnWebGPUCache/data_2 new file mode 100644 index 0000000..c7e2eb9 Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/DawnWebGPUCache/data_2 differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/DawnWebGPUCache/data_3 b/net.imput.helium/.config/net.imput.helium/Default/DawnWebGPUCache/data_3 new file mode 100644 index 0000000..5eec973 Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/DawnWebGPUCache/data_3 differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/DawnWebGPUCache/index b/net.imput.helium/.config/net.imput.helium/Default/DawnWebGPUCache/index new file mode 100644 index 0000000..95c5078 Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/DawnWebGPUCache/index differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extension Cookies b/net.imput.helium/.config/net.imput.helium/Default/Extension Cookies new file mode 100644 index 0000000..77dc4f6 Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Extension Cookies differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extension Cookies-journal b/net.imput.helium/.config/net.imput.helium/Default/Extension Cookies-journal new file mode 100644 index 0000000..e69de29 diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extension Rules/000003.log b/net.imput.helium/.config/net.imput.helium/Default/Extension Rules/000003.log new file mode 100644 index 0000000..e1eefad Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Extension Rules/000003.log differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extension Rules/CURRENT b/net.imput.helium/.config/net.imput.helium/Default/Extension Rules/CURRENT new file mode 100644 index 0000000..7ed683d --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extension Rules/CURRENT @@ -0,0 +1 @@ +MANIFEST-000001 diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extension Rules/LOCK b/net.imput.helium/.config/net.imput.helium/Default/Extension Rules/LOCK new file mode 100644 index 0000000..e69de29 diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extension Rules/LOG b/net.imput.helium/.config/net.imput.helium/Default/Extension Rules/LOG new file mode 100644 index 0000000..a5a6234 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extension Rules/LOG @@ -0,0 +1,3 @@ +2026/07/24-20:47:34.593 1003 Reusing MANIFEST /home/seraphim/.config/net.imput.helium/Default/Extension Rules/MANIFEST-000001 +2026/07/24-20:47:34.593 1003 Recovering log #3 +2026/07/24-20:47:34.593 1003 Reusing old log /home/seraphim/.config/net.imput.helium/Default/Extension Rules/000003.log diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extension Rules/LOG.old b/net.imput.helium/.config/net.imput.helium/Default/Extension Rules/LOG.old new file mode 100644 index 0000000..9406434 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extension Rules/LOG.old @@ -0,0 +1,3 @@ +2026/07/24-17:33:32.685 1fb4 Reusing MANIFEST /home/seraphim/.config/net.imput.helium/Default/Extension Rules/MANIFEST-000001 +2026/07/24-17:33:32.686 1fb4 Recovering log #3 +2026/07/24-17:33:32.686 1fb4 Reusing old log /home/seraphim/.config/net.imput.helium/Default/Extension Rules/000003.log diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extension Rules/MANIFEST-000001 b/net.imput.helium/.config/net.imput.helium/Default/Extension Rules/MANIFEST-000001 new file mode 100644 index 0000000..18e5cab Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Extension Rules/MANIFEST-000001 differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extension Scripts/000003.log b/net.imput.helium/.config/net.imput.helium/Default/Extension Scripts/000003.log new file mode 100644 index 0000000..4148d4d Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Extension Scripts/000003.log differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extension Scripts/CURRENT b/net.imput.helium/.config/net.imput.helium/Default/Extension Scripts/CURRENT new file mode 100644 index 0000000..7ed683d --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extension Scripts/CURRENT @@ -0,0 +1 @@ +MANIFEST-000001 diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extension Scripts/LOCK b/net.imput.helium/.config/net.imput.helium/Default/Extension Scripts/LOCK new file mode 100644 index 0000000..e69de29 diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extension Scripts/LOG b/net.imput.helium/.config/net.imput.helium/Default/Extension Scripts/LOG new file mode 100644 index 0000000..d9e40f0 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extension Scripts/LOG @@ -0,0 +1,3 @@ +2026/07/24-20:47:34.594 1003 Reusing MANIFEST /home/seraphim/.config/net.imput.helium/Default/Extension Scripts/MANIFEST-000001 +2026/07/24-20:47:34.594 1003 Recovering log #3 +2026/07/24-20:47:34.594 1003 Reusing old log /home/seraphim/.config/net.imput.helium/Default/Extension Scripts/000003.log diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extension Scripts/LOG.old b/net.imput.helium/.config/net.imput.helium/Default/Extension Scripts/LOG.old new file mode 100644 index 0000000..e2d533c --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extension Scripts/LOG.old @@ -0,0 +1,3 @@ +2026/07/24-17:33:32.686 1fb4 Reusing MANIFEST /home/seraphim/.config/net.imput.helium/Default/Extension Scripts/MANIFEST-000001 +2026/07/24-17:33:32.687 1fb4 Recovering log #3 +2026/07/24-17:33:32.687 1fb4 Reusing old log /home/seraphim/.config/net.imput.helium/Default/Extension Scripts/000003.log diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extension Scripts/MANIFEST-000001 b/net.imput.helium/.config/net.imput.helium/Default/Extension Scripts/MANIFEST-000001 new file mode 100644 index 0000000..18e5cab Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Extension Scripts/MANIFEST-000001 differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extension State/000005.ldb b/net.imput.helium/.config/net.imput.helium/Default/Extension State/000005.ldb new file mode 100644 index 0000000..72d5ba5 Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Extension State/000005.ldb differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extension State/000020.ldb b/net.imput.helium/.config/net.imput.helium/Default/Extension State/000020.ldb new file mode 100644 index 0000000..fae8bfd Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Extension State/000020.ldb differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extension State/000023.ldb b/net.imput.helium/.config/net.imput.helium/Default/Extension State/000023.ldb new file mode 100644 index 0000000..9d07d3a Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Extension State/000023.ldb differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extension State/000026.ldb b/net.imput.helium/.config/net.imput.helium/Default/Extension State/000026.ldb new file mode 100644 index 0000000..d647254 Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Extension State/000026.ldb differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extension State/000028.log b/net.imput.helium/.config/net.imput.helium/Default/Extension State/000028.log new file mode 100644 index 0000000..07f1e80 Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Extension State/000028.log differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extension State/000029.ldb b/net.imput.helium/.config/net.imput.helium/Default/Extension State/000029.ldb new file mode 100644 index 0000000..f59ad57 Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Extension State/000029.ldb differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extension State/CURRENT b/net.imput.helium/.config/net.imput.helium/Default/Extension State/CURRENT new file mode 100644 index 0000000..7ed683d --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extension State/CURRENT @@ -0,0 +1 @@ +MANIFEST-000001 diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extension State/LOCK b/net.imput.helium/.config/net.imput.helium/Default/Extension State/LOCK new file mode 100644 index 0000000..e69de29 diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extension State/LOG b/net.imput.helium/.config/net.imput.helium/Default/Extension State/LOG new file mode 100644 index 0000000..c8cd8d7 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extension State/LOG @@ -0,0 +1,3 @@ +2026/07/25-18:00:07.050 1a97 Reusing MANIFEST /home/seraphim/.config/net.imput.helium/Default/Extension State/MANIFEST-000001 +2026/07/25-18:00:07.050 1a97 Recovering log #28 +2026/07/25-18:00:07.062 1a97 Reusing old log /home/seraphim/.config/net.imput.helium/Default/Extension State/000028.log diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extension State/LOG.old b/net.imput.helium/.config/net.imput.helium/Default/Extension State/LOG.old new file mode 100644 index 0000000..41de58e --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extension State/LOG.old @@ -0,0 +1,6 @@ +2026/07/25-11:53:34.316 db9 Reusing MANIFEST /home/seraphim/.config/net.imput.helium/Default/Extension State/MANIFEST-000001 +2026/07/25-11:53:34.316 db9 Recovering log #25 +2026/07/25-11:53:34.335 db9 Reusing old log /home/seraphim/.config/net.imput.helium/Default/Extension State/000025.log +2026/07/25-12:10:25.272 daf Level-0 table #29: started +2026/07/25-12:10:25.289 daf Level-0 table #29: 1843293 bytes OK +2026/07/25-12:10:25.301 daf Delete type=0 #25 diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extension State/MANIFEST-000001 b/net.imput.helium/.config/net.imput.helium/Default/Extension State/MANIFEST-000001 new file mode 100644 index 0000000..ee34700 Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Extension State/MANIFEST-000001 differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/@types/index.d.ts b/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/@types/index.d.ts new file mode 100644 index 0000000..d4574b0 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/@types/index.d.ts @@ -0,0 +1,5 @@ +type Format = { + ext: string; + mimeType: string; + serializer: (cookies: chrome.cookies.Cookie[]) => string; +}; diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/_metadata/verified_contents.json b/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/_metadata/verified_contents.json new file mode 100644 index 0000000..a8a100a --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/_metadata/verified_contents.json @@ -0,0 +1 @@ +[{"description":"treehash per file","signed_content":{"payload":"eyJjb250ZW50X2hhc2hlcyI6W3siYmxvY2tfc2l6ZSI6NDA5NiwiZGlnZXN0Ijoic2hhMjU2IiwiZmlsZXMiOlt7InBhdGgiOiJAdHlwZXMvaW5kZXguZC50cyIsInJvb3RfaGFzaCI6IlZaZWhYcUF6U0VSOUJmR0NWWVQxdEJwdzdNb3k5MkduSWN4ZDZjRVNyMTAifSx7InBhdGgiOiJiYWNrZ3JvdW5kLmh0bWwiLCJyb290X2hhc2giOiJJaUNpeGtHZkhUZ2tFc3IzVFhqZmc3Unp5azNwS3JOU1ZXMnp3U2pOWXVFIn0seyJwYXRoIjoiYmFja2dyb3VuZC5tanMiLCJyb290X2hhc2giOiJtWWxVejFfZWwzMF9oZ1F0bmRJSmM1R015VmtPZnpjOXZyS0lPQXNLblpZIn0seyJwYXRoIjoiZG9uYXRpb24uY3NzIiwicm9vdF9oYXNoIjoiVVpjSmdCQkt2V0ViVGxnaHpBTGFVUkNtVE1iZkRtckF2aEdLbVlQMHhZUSJ9LHsicGF0aCI6Imljb25mb250L01hdGVyaWFsSWNvbnNPdXRsaW5lZC53b2ZmMiIsInJvb3RfaGFzaCI6ImZzdk5Ycmp3dU5JUnExQVI0clNyR05nVDF0WHR6TUFpbFljRk16aHFaMEEifSx7InBhdGgiOiJpY29uZm9udC9tYXRlcmlhbC1pY29ucy5jc3MiLCJyb290X2hhc2giOiJqTGd6MG9MNE9HQmJCX05RdmJGMUhTLThxMlRQMEM2X1pSZEJrakpWVTJrIn0seyJwYXRoIjoiaW1hZ2VzL2JtYy1sb2dvLnN2ZyIsInJvb3RfaGFzaCI6InAwRnNZZ0J5azlXU20xRFpFeS1oandULVBOMy1MMk41MFlMaDFIOHZHX3cifSx7InBhdGgiOiJpbWFnZXMvaWNvbjEyOC5wbmciLCJyb290X2hhc2giOiJkVWs4cGZaRXFYSjhjTW9LdzVKR0h0VnA2SDZVQ0tSNE9oSzl6U1czaVBFIn0seyJwYXRoIjoiaW1hZ2VzL2ljb24xNi5wbmciLCJyb290X2hhc2giOiJnMHA3NlZEanNjS3hnWnFRZU43QWIxTldoYl9CQkZCX3RuVDdsb1JvWFE0In0seyJwYXRoIjoiaW1hZ2VzL2ljb24zMi5wbmciLCJyb290X2hhc2giOiJzMWNzbTZaXzgyVkxZeU9QS1ZPamd2QmYzWlpwRDNDNFVzX3FQbXNvUUd3In0seyJwYXRoIjoiaW1hZ2VzL2ljb240OC5wbmciLCJyb290X2hhc2giOiJ1NTl1dkhxUFluNUtPczFDSV9aX2RPQ3hGOG5SR0dvMWFqckpPa2NPaUJBIn0seyJwYXRoIjoiaW1hZ2VzL3BheXBhbC1sb2dvLnN2ZyIsInJvb3RfaGFzaCI6Ik52QzNJVDNIWHAzdWQ5TUw5NXpWc0xGU2hLQkxoakhnaGxjVWxoa2NIUVkifSx7InBhdGgiOiJtYW5pZmVzdC5qc29uIiwicm9vdF9oYXNoIjoiU2E5NDhBUzZSY3h5Y1M3VkxEYXFsLVVQazBib2VtZlBPSjNkcF9hTHZMTSJ9LHsicGF0aCI6Im1vZHVsZXMvY29va2llX2Zvcm1hdC5tanMiLCJyb290X2hhc2giOiJKa0ExZ1QycWdub0JJb0huR1l1TVJiTlMzUTF4eEtTRkM1QzFQOGFBbWlFIn0seyJwYXRoIjoibW9kdWxlcy9nZXRfYWxsX2Nvb2tpZXMubWpzIiwicm9vdF9oYXNoIjoiMkhtM0lLMHVmLWZJWUp5X3pGSDdaRnJ3SlNRaWlRWjVaLXJjcVhKVTFkcyJ9LHsicGF0aCI6Im1vZHVsZXMvc2F2ZV90b19maWxlLm1qcyIsInJvb3RfaGFzaCI6IkhERDVWSGN0Z09xUUZfSGtPQnFtRGYwSk4xTzJpeHpxZ1VGRlJZZ1Q0NUkifSx7InBhdGgiOiJwb3B1cC1vcHRpb25zLmNzcyIsInJvb3RfaGFzaCI6Im1uOXRXdTNpYzZlTUNWT01tX1FJem5HNDlXeldiRFFyN29rZklUT1dXQTAifSx7InBhdGgiOiJwb3B1cC5jc3MiLCJyb290X2hhc2giOiJwcTlWbXNuSmE4ZnEwOVg1SnJVdVVtNlBUcVBMQUxIWUtUMGowTXZHYnRjIn0seyJwYXRoIjoicG9wdXAuZGFyay5jc3MiLCJyb290X2hhc2giOiJSX2plTUJ1Z1Q2N2stS3RpbGdWTGV5VkZ6NmJ6NFByV1NuMHZCZFM0WW1vIn0seyJwYXRoIjoicG9wdXAuaHRtbCIsInJvb3RfaGFzaCI6Ik1XeGE1TEhhWkNJUnUyNzZKQmZ1ZHdjUlA0Y2x1Mk1PQVJRalgtVmd5WWcifSx7InBhdGgiOiJwb3B1cC5tanMiLCJyb290X2hhc2giOiIzVzR0TzRHc0JnRS1qbnQ1UEhMWV9qNUpVNTRDTjlOZGU0SExhUW5YMFpNIn0seyJwYXRoIjoidGFibGUtbm93cmFwLmpzIiwicm9vdF9oYXNoIjoieFoyY2hEbFd6VG9rSnZWRjl1Zm5Icm5QblZMMkV0VU00ZzlsTk9lYnpyTSJ9XSwiZm9ybWF0IjoidHJlZWhhc2giLCJoYXNoX2Jsb2NrX3NpemUiOjQwOTZ9XSwiaXRlbV9pZCI6ImNjbGVsbmRhaGJja2JlbmtqaGZscGRiZ2RsZGxiZWNjIiwiaXRlbV92ZXJzaW9uIjoiMC43LjIiLCJwcm90b2NvbF92ZXJzaW9uIjoxfQ","signatures":[{"header":{"kid":"publisher"},"protected":"eyJhbGciOiJSUzI1NiJ9","signature":"MJu3uzVHMi76m8nh1QMZX3OMYHfgl1dKrDIFiyEfDqq8jpQM8Jb5uLWWh4xzMb3deimxJga0i19q2DiBWU6XUNFeR6DXzTQ3tBi0wzB9Zq0TmSi1xVO8oFalwbLs79GKq-G9eBhJFldnkbhju2AuARsJX8gVW22UpFwPek7ZV8NNfhmvxen0G-z14x5dSlkUrEyP2jDK1QMyjD3wXHzvhVWVVlsT2tz707GAvWT6AUemFQWxaW6xbOkCsJRwHkcWaeAIMXmaPCoW50IB61LTY5gM7IS6tN6hJygt35QmMS8ie7uAAYKT9QNAU-v_doLvVdq4apK3xnckfaQMIH9yrA"},{"header":{"kid":"webstore"},"protected":"eyJhbGciOiJSUzI1NiJ9","signature":"Ij0wx3I8gFIMgs4diSA4I4wY-KJcTiTKt4zo5UAqmavGN6_kw7m0xa_wfmeOtNmfvQL6onpKRLd7AwpEO0eB4vn0meVWMdT1HDPdSYC8p1a4ByMZyAZfSWEUfY6nKgMgq14papdv6b5wbziis377jE16v8V8qU3NjHVprnpNx9rpVTuhFP9I6Dv1_WaagG91QrSPJ70hEt0bT--jQGr56fA4IoDVgpvi5Si4M96D-lb_oBY9Pl9pWlh-3DSfta4P1z5tHkGTg6G_KMJgVSwRCdEr-h9uTIashFX5g2h_uIdyJVKRQiHSDe3gvXs8h9bhqzIY_J9E-freJCREvVvP-g"}]}}] \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/background.html b/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/background.html new file mode 100644 index 0000000..27dd81b --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/background.html @@ -0,0 +1,2 @@ + + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/background.mjs b/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/background.mjs new file mode 100644 index 0000000..462a02a --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/background.mjs @@ -0,0 +1,76 @@ +import getAllCookies from './modules/get_all_cookies.mjs'; +import saveToFile from './modules/save_to_file.mjs'; + +/** + * Update icon badge counter on active page + */ +const updateBadgeCounter = async () => { + const [tab] = await chrome.tabs.query({ active: true, currentWindow: true }); + if (!tab) { + return; + } + const { id: tabId, url: urlString } = tab; + if (!urlString) { + chrome.action.setBadgeText({ tabId, text: '' }); + return; + } + const url = new URL(urlString); + const cookies = await getAllCookies({ + url: url.href, + partitionKey: { topLevelSite: url.origin }, + }); + const text = cookies.length.toFixed(); + chrome.action.setBadgeText({ tabId, text }); +}; + +chrome.cookies.onChanged.addListener(updateBadgeCounter); +chrome.tabs.onUpdated.addListener(updateBadgeCounter); +chrome.tabs.onActivated.addListener(updateBadgeCounter); +chrome.windows.onFocusChanged.addListener(updateBadgeCounter); + +// Update notification +chrome.runtime.onInstalled.addListener(({ previousVersion, reason }) => { + if (reason === 'update') { + const currentVersion = chrome.runtime.getManifest().version; + chrome.notifications.create('updated', { + type: 'basic', + title: 'Get cookies.txt LOCALLY', + message: `Updated from ${previousVersion} to ${currentVersion}`, + iconUrl: '/images/icon128.png', + buttons: [{ title: 'Github Releases' }, { title: 'Uninstall' }], + }); + } +}); + +// Update notification's button handler +chrome.notifications.onButtonClicked.addListener( + (notificationId, buttonIndex) => { + console.log(notificationId, buttonIndex); + if (notificationId === 'updated') { + switch (buttonIndex) { + case 0: + chrome.tabs.create({ + url: 'https://github.com/kairi003/Get-cookies.txt-LOCALLY/releases', + }); + break; + case 1: + chrome.management.uninstallSelf({ showConfirmDialog: true }); + break; + } + } + }, +); + +// TODO: use offscreen API to integrate implementation in chrome and firefox +// Save file message listener for firefox +chrome.runtime.onMessage.addListener(async (message, sender, sendResponse) => { + const { type, target, data } = message || {}; + if (target !== 'background') return; + if (type === 'save') { + const { text, name, format, saveAs } = data || {}; + await saveToFile(text, name, format, saveAs); + sendResponse('done'); + return true; + } + return true; +}); diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/donation.css b/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/donation.css new file mode 100644 index 0000000..e906ddb --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/donation.css @@ -0,0 +1,51 @@ +/* summary styles */ +.donation details summary { + width: fit-content; + outline: none; + text-decoration: underline; + cursor: pointer; + font-style: italic; +} + +.donation details summary:hover { + outline: none; + box-shadow: 0 0 5px rgba(0, 128, 255, 0.5); +} + +/* donation description styles */ +.donation-description p { + margin-block-start: 0.5em; + margin-block-end: 0.5em; +} + +/* payment button container styles */ +.donation .payment-buttons-container { + display: flex; + gap: 10px; + padding: 0; + list-style-type: none; + justify-content: center; + margin-top: 15px; + text-decoration: none; +} + +/* payment button styles */ +.donation .payment-button { + display: flex; + align-items: center; + padding: 5px 10px; + background-color: #fff; + border: solid 1px #ddd; + border-radius: 5px; + box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2); + transition: filter 0.3s; +} + +/* payment button hover effect */ +.donation .payment-button:hover { + filter: brightness(0.8); +} + +.donation .payment-button img { + height: 2em; +} diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/iconfont/MaterialIconsOutlined.woff2 b/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/iconfont/MaterialIconsOutlined.woff2 new file mode 100644 index 0000000..bc88d5c Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/iconfont/MaterialIconsOutlined.woff2 differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/iconfont/material-icons.css b/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/iconfont/material-icons.css new file mode 100644 index 0000000..2e7adb4 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/iconfont/material-icons.css @@ -0,0 +1,23 @@ +/* fallback */ +@font-face { + font-family: "Material Symbols Outlined"; + font-style: normal; + font-weight: 400; + src: url(MaterialIconsOutlined.woff2) format("woff2"); +} + +.material-symbols-outlined { + font-family: "Material Symbols Outlined"; + font-weight: normal; + font-style: normal; + font-size: 24px; + line-height: 1; + letter-spacing: normal; + text-transform: none; + display: inline-block; + white-space: nowrap; + word-wrap: normal; + direction: ltr; + -webkit-font-feature-settings: "liga"; + -webkit-font-smoothing: antialiased; +} diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/images/bmc-logo.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/images/bmc-logo.svg new file mode 100644 index 0000000..59ce4ca --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/images/bmc-logo.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/images/icon128.png b/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/images/icon128.png new file mode 100644 index 0000000..1353b48 Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/images/icon128.png differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/images/icon16.png b/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/images/icon16.png new file mode 100644 index 0000000..a110123 Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/images/icon16.png differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/images/icon32.png b/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/images/icon32.png new file mode 100644 index 0000000..401cc5e Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/images/icon32.png differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/images/icon48.png b/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/images/icon48.png new file mode 100644 index 0000000..d1b7731 Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/images/icon48.png differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/images/paypal-logo.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/images/paypal-logo.svg new file mode 100644 index 0000000..3742161 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/images/paypal-logo.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/manifest.json b/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/manifest.json new file mode 100644 index 0000000..1f6cfdd --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/manifest.json @@ -0,0 +1,30 @@ +{ + "action": { + "default_icon": { + "128": "/images/icon128.png", + "16": "/images/icon16.png", + "32": "/images/icon32.png", + "48": "/images/icon48.png" + }, + "default_popup": "popup.html" + }, + "background": { + "service_worker": "background.mjs", + "type": "module" + }, + "description": "Get cookies.txt, NEVER send information outside with open-source", + "host_permissions": [ "\u003Call_urls>" ], + "icons": { + "128": "/images/icon128.png", + "16": "/images/icon16.png", + "32": "/images/icon32.png", + "48": "/images/icon48.png" + }, + "incognito": "split", + "key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs5KgbYfVwKJE4o4syIT5CsGv26096FD1Uv+iDdCKKYco5h1MYY35REr7OyFumrGTFPBRu92sB3etj/I6iNezLtOzN0/JXLEjwqsNXmdnKnKdg7QXuHMe7ol+o3wGmQ+4/UDEptMN/lxZIZfn7r89QBsPTJR2oWldAkktQfRfNa0dhErFt8uMpphYCyCXRaqzcPCxvVZx43vEuq4Jge1if+4CwEBniHNpwH32MO3nInmHhlMw0cy05f9JX82pjucbksUFMUmj2K+WwX0+gm566xDxzPktgqAqfLzCCP1DJVIU4j2/y328Nk6jajN1QBitbeq4ZvDVx3404AX2+NdTTQIDAQAB", + "manifest_version": 3, + "name": "Get cookies.txt LOCALLY", + "permissions": [ "activeTab", "cookies", "downloads", "notifications" ], + "update_url": "https://clients2.google.com/service/update2/crx", + "version": "0.7.2" +} diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/modules/cookie_format.mjs b/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/modules/cookie_format.mjs new file mode 100644 index 0000000..0ba221d --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/modules/cookie_format.mjs @@ -0,0 +1,49 @@ +/** + * Convert Chrome's JSON format cookies data to a string array for Netscape format + * @param {chrome.cookies.Cookie[]} cookies + * @returns {string[][]} + */ +export const jsonToNetscapeMapper = (cookies) => { + return cookies.map( + ({ domain, expirationDate, path, secure, name, value }) => { + const includeSubDomain = !!domain?.startsWith('.'); + const expiry = expirationDate?.toFixed() ?? '0'; + const arr = [domain, includeSubDomain, path, secure, expiry, name, value]; + return arr.map((v) => + typeof v === 'boolean' ? v.toString().toUpperCase() : v, + ); + }, + ); +}; + +/** @type {Record} */ +export const formatMap = { + netscape: { + ext: '.txt', + mimeType: 'text/plain', + serializer: (cookies) => { + const netscapeTable = jsonToNetscapeMapper(cookies); + const text = [ + '# Netscape HTTP Cookie File', + '# https://curl.haxx.se/rfc/cookie_spec.html', + '# This is a generated file! Do not edit.', + '', + ...netscapeTable.map((row) => row.join('\t')), + '', // Add a new line at the end + ].join('\n'); + return text; + }, + }, + json: { + ext: '.json', + mimeType: 'application/json', + serializer: JSON.stringify, + }, + header: { + ext: '.txt', + mimeType: 'text/plain', + serializer: (cookies) => { + return cookies.map(({ name, value }) => `${name}=${value};`).join(' '); + }, + }, +}; diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/modules/get_all_cookies.mjs b/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/modules/get_all_cookies.mjs new file mode 100644 index 0000000..c30e7ac --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/modules/get_all_cookies.mjs @@ -0,0 +1,35 @@ +/** + * Get all cookies that match the given criteria. + * @param {chrome.cookies.GetAllDetails} details + * @returns {Promise} + */ +export default async function getAllCookies(details) { + details.storeId ??= await getCurrentCookieStoreId(); + const { partitionKey, ...detailsWithoutPartitionKey } = details; + // Error handling for browsers that do not support partitionKey, such as chrome < 119. + // `chrome.cookies.getAll()` returns Promise but cannot directly catch() chain. + const cookiesWithPartitionKey = partitionKey + ? await Promise.resolve() + .then(() => chrome.cookies.getAll(details)) + .catch(() => []) + : []; + const cookies = await chrome.cookies.getAll(detailsWithoutPartitionKey); + return [...cookies, ...cookiesWithPartitionKey]; +} + +/** + * Get the current cookie store ID. + * @returns {Promise} + */ +const getCurrentCookieStoreId = async () => { + // If the extension is in split incognito mode, return undefined to choose the default store. + if (chrome.runtime.getManifest().incognito === 'split') return undefined; + + // Firefox supports the `tab.cookieStoreId` property. + const [tab] = await chrome.tabs.query({ active: true, currentWindow: true }); + if (tab.cookieStoreId) return tab.cookieStoreId; + + // Chrome does not support the `tab.cookieStoreId` property. + const stores = await chrome.cookies.getAllCookieStores(); + return stores.find((store) => store.tabIds.includes(tab.id))?.id; +}; diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/modules/save_to_file.mjs b/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/modules/save_to_file.mjs new file mode 100644 index 0000000..c1c8ced --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/modules/save_to_file.mjs @@ -0,0 +1,30 @@ +/** + * Save text data as a file + * Firefox fails if revoked during download. + * Firefox cannot use saveAs in a popup, so the background script handles it. + * @param {string} text + * @param {string} name + * @param {Format} format + * @param {boolean} saveAs + */ +export default async function saveToFile( + text, + name, + { ext, mimeType }, + saveAs = false, +) { + const blob = new Blob([text], { type: mimeType }); + const filename = name + ext; + const url = URL.createObjectURL(blob); + const id = await chrome.downloads.download({ url, filename, saveAs }); + + /** @param {chrome.downloads.DownloadDelta} delta */ + const onChange = (delta) => { + if (delta.id === id && delta.state?.current !== 'in_progress') { + chrome.downloads.onChanged.removeListener(onChange); + URL.revokeObjectURL(url); + } + }; + + chrome.downloads.onChanged.addListener(onChange); +} diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/popup-options.css b/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/popup-options.css new file mode 100644 index 0000000..e77ffa1 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/popup-options.css @@ -0,0 +1,17 @@ +.option-container { + display: flex; + justify-content: flex-start; + align-items: center; + width: 100%; + gap: 1em; +} + +.option { + display: flex; + align-items: stretch; + gap: 0.5em; +} + +.netscape-table.nowrap tbody { + white-space: nowrap; +} diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/popup.css b/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/popup.css new file mode 100644 index 0000000..3770b59 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/popup.css @@ -0,0 +1,116 @@ +html { + width: 500px; + box-sizing: border-box; + font-family: "Arial", sans-serif; + background-color: #fdfbff; +} + +body { + margin: 8px; + width: 484px; + font-size: 75%; +} + +h1 { + font-size: 1.1rem; + font-weight: bold; + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + text-align: center; +} + +h1 > a#location { + color: #3153ee; +} + +main { + display: grid; + gap: 0.5rem; +} + +.export-btn-container { + display: grid; + grid-template-rows: 1fr 1fr; + grid-template-columns: 1fr 1fr 1fr; + gap: 0.5rem; +} + +.export-btn { + border: none; + border-radius: 5px; + height: 2.5rem; + font-size: 0.9rem; +} +.export-btn > .button-text { + display: flex; + align-items: center; + justify-content: center; + gap: 0.2em; +} + +.export-btn:hover { + filter: brightness(0.85); +} +.export-btn:active { + filter: brightness(1.15); +} + +.export-btn.large { + grid-column: 1 / 4; +} + +.export-btn.export { + background-color: #485fc7; + color: white; +} + +.export-btn.export-as { + background-color: #fee08a; + color: black; +} + +.export-btn.copy, +.export-btn.export-all { + background-color: #3f8ecf; + color: white; +} + +/* default text */ +.export-btn.copy { + .default-copy-text { + display: flex; + } + .copied-text { + display: none; + } +} + +/* when copied */ +.export-btn.copy.copied { + .default-copy-text { + display: none; + } + .copied-text { + display: flex; + } +} + +.table-container { + width: 100%; + max-height: 380px; + overflow: scroll; +} + +.netscape-table { + border-collapse: collapse; +} + +.netscape-table th, +td { + border: solid 1px black; +} + +.netscape-table tbody tr:nth-of-type(2n + 1) { + background-color: aliceblue; +} diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/popup.dark.css b/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/popup.dark.css new file mode 100644 index 0000000..9fa46ca --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/popup.dark.css @@ -0,0 +1,30 @@ +@media (prefers-color-scheme: dark) { + html { + background-color: #2a2a2a; + scrollbar-color: #aaa #333; + color: #dfdfdf; + } + + h1 > a#location { + color: #e09200; + } + + .table-container { + background-color: #1e1e1e; + } + + .netscape-table th, + td { + border: solid 1px #424242; + } + + .netscape-table tbody tr:nth-of-type(2n + 1) { + background-color: #2a2a2a; + } + + select { + background-color: #3a3a3a; + color: #dfdfdf; + border: solid 1px #555; + } +} diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/popup.html b/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/popup.html new file mode 100644 index 0000000..f05cc1b --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/popup.html @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + +
+

Get cookies.txt for

+
+
+
+
+ + + + +
+ +
+
+ + +
+ +
+ + +
+
+ +
+ + + + + + + + + + + + + +
DomainInclude SubdomainsPathSecureExpiryNameValue
+
+ +
+
+ Buy Developer a Coffee ☕ +
+

Got many offers to buy this extension, but I'm never going to sell it to spammers!

+

By the way, a cup of coffee would make my day 😎

+
+ +
+
+
+ + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/popup.mjs b/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/popup.mjs new file mode 100644 index 0000000..e3169d4 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/popup.mjs @@ -0,0 +1,138 @@ +import { formatMap, jsonToNetscapeMapper } from './modules/cookie_format.mjs'; +import getAllCookies from './modules/get_all_cookies.mjs'; +import _saveToFile from './modules/save_to_file.mjs'; + +/** Promise to get URL of Active Tab */ +const getUrlPromise = chrome.tabs + .query({ active: true, currentWindow: true }) + .then(([{ url }]) => new URL(url)); + +// ---------------------------------------------- +// Functions +// ---------------------------------------------- + +/** + * Get Stringified Cookies Text and Format Data + * @param {chrome.cookies.GetAllDetails} details + * @returns {Promise<{ text: string, format: Format }>} + */ +const getCookieText = async (details) => { + const cookies = await getAllCookies(details); + const format = formatMap[document.querySelector('#format').value]; + if (!format) throw new Error('Invalid format'); + const text = format.serializer(cookies); + return { text, format }; +}; + +// TODO: use offscreen API to integrate implementation in chrome and firefox +/** + * Save text data as a file + * Firefox cannot use saveAs in a popup, so the background script handles it. + * @param {string} text + * @param {string} name + * @param {Format} format + * @param {boolean} saveAs + */ +const saveToFile = async (text, name, { ext, mimeType }, saveAs = false) => { + const format = { ext, mimeType }; + const isFirefox = + chrome.runtime.getManifest().browser_specific_settings !== undefined; + if (isFirefox) { + await chrome.runtime.sendMessage({ + type: 'save', + target: 'background', + data: { text, name, format, saveAs }, + }); + } else { + await _saveToFile(text, name, format, saveAs); + } +}; + +/** + * Copy text data to the clipboard + * @param {string} text + */ +const setClipboard = async (text) => { + await navigator.clipboard.writeText(text); + const copyButton = document.getElementById('copy'); + copyButton.classList.add('copied'); + setTimeout(() => { + copyButton.classList.remove('copied'); + }, 2000); +}; + +// ---------------------------------------------- +// Actions after resolving the promise +// ---------------------------------------------- + +/** Set URL in the header */ +getUrlPromise.then((url) => { + const location = document.querySelector('#location'); + location.textContent = location.href = url.href; +}); + +/** Set Cookies data to the table */ +getUrlPromise + .then((url) => + getAllCookies({ + url: url.href, + partitionKey: { topLevelSite: url.origin }, + }), + ) + .then((cookies) => { + const netscape = jsonToNetscapeMapper(cookies); + const tableRows = netscape.map((row) => { + const tr = document.createElement('tr'); + tr.replaceChildren( + ...row.map((v) => { + const td = document.createElement('td'); + td.textContent = v; + return td; + }), + ); + return tr; + }); + document.querySelector('table tbody').replaceChildren(...tableRows); + }); + +// ---------------------------------------------- +// Event Listeners +// ---------------------------------------------- + +document.querySelector('#export').addEventListener('click', async () => { + const url = await getUrlPromise; + const details = { url: url.href, partitionKey: { topLevelSite: url.origin } }; + const { text, format } = await getCookieText(details); + saveToFile(text, `${url.hostname}_cookies`, format); +}); + +document.querySelector('#exportAs').addEventListener('click', async () => { + const url = await getUrlPromise; + const details = { url: url.href, partitionKey: { topLevelSite: url.origin } }; + const { text, format } = await getCookieText(details); + saveToFile(text, `${url.hostname}_cookies`, format, true); +}); + +document.querySelector('#copy').addEventListener('click', async () => { + const url = await getUrlPromise; + const details = { url: url.href, partitionKey: { topLevelSite: url.origin } }; + const { text } = await getCookieText(details); + setClipboard(text); +}); + +document.querySelector('#exportAll').addEventListener('click', async () => { + const { text, format } = await getCookieText({ partitionKey: {} }); + saveToFile(text, 'cookies', format); +}); + +/** Set last used format value */ +const formatSelect = document.querySelector('#format'); + +const selectedFormat = localStorage.getItem('selectedFormat'); +if (selectedFormat) { + formatSelect.value = selectedFormat; +} + +formatSelect.addEventListener('change', () => { + localStorage.setItem('selectedFormat', formatSelect.value); +}); diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/table-nowrap.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/table-nowrap.js new file mode 100644 index 0000000..75f230b --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/cclelndahbckbenkjhflpdbgdldlbecc/0.7.2_0/table-nowrap.js @@ -0,0 +1,14 @@ +{ + const nowrapOption = document.querySelector('#nowrapOption'); + const tableElement = document.querySelector('#netscapeTable'); + + const selectedFormat = + (localStorage.getItem('tableNowrap') || 'true') === 'true'; + nowrapOption.checked = selectedFormat; + tableElement.classList.toggle('nowrap', selectedFormat); + + nowrapOption.addEventListener('change', (e) => { + tableElement.classList.toggle('nowrap'); + localStorage.setItem('tableNowrap', e.target.checked); + }); +} diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/_metadata/verified_contents.json b/net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/_metadata/verified_contents.json new file mode 100644 index 0000000..5baf0de --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/_metadata/verified_contents.json @@ -0,0 +1 @@ +[{"description":"treehash per file","signed_content":{"payload":"eyJjb250ZW50X2hhc2hlcyI6W3siYmxvY2tfc2l6ZSI6NDA5NiwiZGlnZXN0Ijoic2hhMjU2IiwiZmlsZXMiOlt7InBhdGgiOiJiYWNrZ3JvdW5kX3NjcmlwdHMvYWxsX2NvbW1hbmRzLmpzIiwicm9vdF9oYXNoIjoiNW55MUJGY0U4TnRLNHNHdGtTR2xvNTBaX2tWbDAyZzdHU29sZDJMZ2Z0NCJ9LHsicGF0aCI6ImJhY2tncm91bmRfc2NyaXB0cy9iZ191dGlscy5qcyIsInJvb3RfaGFzaCI6IlVmaDQzM1dYclhMcVRlS2k3YnVoSkliVTRzWWo1aG5LLTRLV3F5bkM5bTgifSx7InBhdGgiOiJiYWNrZ3JvdW5kX3NjcmlwdHMvY29tbWFuZHMuanMiLCJyb290X2hhc2giOiJFckM3WTdubm9wSENRdzI0QjQtaThmZ0xIUWFVWWJCeVZlSDJka3JJdHBFIn0seyJwYXRoIjoiYmFja2dyb3VuZF9zY3JpcHRzL2NvbXBsZXRpb24vY29tcGxldGVycy5qcyIsInJvb3RfaGFzaCI6InI5Y0tCN1ROMU5CcjhaVE55Mmsyb1k5SWRmR09uRTlIOG1iZWhYMWhvcFEifSx7InBhdGgiOiJiYWNrZ3JvdW5kX3NjcmlwdHMvY29tcGxldGlvbi9yYW5raW5nLmpzIiwicm9vdF9oYXNoIjoiVEVXMmVnWVVGWk9aTmVmYy1OQ3JEWml2ZUF5ZDBDcnRvUXZ2UmxHdFN1NCJ9LHsicGF0aCI6ImJhY2tncm91bmRfc2NyaXB0cy9jb21wbGV0aW9uL3NlYXJjaF9lbmdpbmVzLmpzIiwicm9vdF9oYXNoIjoiWEhBU0l2TjhWY3pRQnFtMjY3dVR0ejdCbWp3MVZ0d0RoVmJUX3BVWE1PQSJ9LHsicGF0aCI6ImJhY2tncm91bmRfc2NyaXB0cy9jb21wbGV0aW9uL3NlYXJjaF93cmFwcGVyLmpzIiwicm9vdF9oYXNoIjoiR21sVEExNW40UHNUMjU2UHQ1VU5lNENzQ3ZVQjhTVjR6ZkJnUDhORHJkQSJ9LHsicGF0aCI6ImJhY2tncm91bmRfc2NyaXB0cy9leGNsdXNpb25zLmpzIiwicm9vdF9oYXNoIjoiRkVOeUI2ZnVXYVJfOFluS1NVak9FaWtQQ09QTEE1dEN2SUEwZHA2ME5ZayJ9LHsicGF0aCI6ImJhY2tncm91bmRfc2NyaXB0cy9tYWluLmpzIiwicm9vdF9oYXNoIjoia2MxczN0TURRaG1SOExIeFB0dzFvVWNKWXlJNHBxZFB6RDFLQ0xTZ283cyJ9LHsicGF0aCI6ImJhY2tncm91bmRfc2NyaXB0cy9tYXJrcy5qcyIsInJvb3RfaGFzaCI6Imt6eXEtcGRsWklsVmVLaUtYejY2RUZtZXA1UW4yTUM3XzJvUmpvMlRpUWcifSx7InBhdGgiOiJiYWNrZ3JvdW5kX3NjcmlwdHMvdGFiX29wZXJhdGlvbnMuanMiLCJyb290X2hhc2giOiJYa0ZPQmE4V1RXNUZwYW5EaWFQT1M0WkZWb0o1LVppT002WkJwclZCQ0hJIn0seyJwYXRoIjoiYmFja2dyb3VuZF9zY3JpcHRzL3RhYl9yZWNlbmN5LmpzIiwicm9vdF9oYXNoIjoiMVNqNF9jWGY0NDdfV3g0dnl0Tng1aEVYTXFRb202bjFMNUlMN0NVanlOMCJ9LHsicGF0aCI6ImJhY2tncm91bmRfc2NyaXB0cy91c2VyX3NlYXJjaF9lbmdpbmVzLmpzIiwicm9vdF9oYXNoIjoibkhWcXpEbUJyTEFTSGpqLTVRdUtCdHlpN3pOU1V3eEF0enJmdDBteTBTRSJ9LHsicGF0aCI6ImNvbnRlbnRfc2NyaXB0cy9maWxlX3VybHMuY3NzIiwicm9vdF9oYXNoIjoiZUt2THFGbDRkOXU1MzZNVFZiY29UTTlMWDFDQkVQbm90Y1F4LTYtelZLVSJ9LHsicGF0aCI6ImNvbnRlbnRfc2NyaXB0cy9odWQuanMiLCJyb290X2hhc2giOiJaS0ZWRzZJMmNLRWg5NjgxcFVGM3ZBUU9CRjRIcEtheXpjbklNUHR3Q0c4In0seyJwYXRoIjoiY29udGVudF9zY3JpcHRzL2xpbmtfaGludHMuanMiLCJyb290X2hhc2giOiJJNHJHemJaWEVGbUc2c2dFOEFmZlFiWmNFRFM3OU11OGVJOHgxc1NXZkFnIn0seyJwYXRoIjoiY29udGVudF9zY3JpcHRzL21hcmtzLmpzIiwicm9vdF9oYXNoIjoiMlhFekpFeEkxcHE3a3IyNWJORWpna1FFSDZnM25GOFdERmJQTGp5SWdfbyJ9LHsicGF0aCI6ImNvbnRlbnRfc2NyaXB0cy9tb2RlLmpzIiwicm9vdF9oYXNoIjoiTFZUM1F0enZrUWlydXViVHRTVkdRZlQ1QnRDX0o2akFlSTg1eTRNMGdpSSJ9LHsicGF0aCI6ImNvbnRlbnRfc2NyaXB0cy9tb2RlX2ZpbmQuanMiLCJyb290X2hhc2giOiJ2XzEtcW1KWjhyNlBWR2lKbG9ZbVpwSVBVLWVWd0N2bG5kaHhrbzB4X2tzIn0seyJwYXRoIjoiY29udGVudF9zY3JpcHRzL21vZGVfaW5zZXJ0LmpzIiwicm9vdF9oYXNoIjoiUWU4dHRqWkZ4bTFfV0phekM1UUNBaEFCNFZyLXRLeWpUX0hHV1NUcmRpMCJ9LHsicGF0aCI6ImNvbnRlbnRfc2NyaXB0cy9tb2RlX2tleV9oYW5kbGVyLmpzIiwicm9vdF9oYXNoIjoiSE9TMXBwakJYSGtrc3pubkJxLWVmLV9ONTZLUW9HZGRBLVJmenotclpPNCJ9LHsicGF0aCI6ImNvbnRlbnRfc2NyaXB0cy9tb2RlX25vcm1hbC5qcyIsInJvb3RfaGFzaCI6IlFkLUhHOWpuZWEzTVNYaVJKVThWSUZwWFozV2JvTW5OUUNkYXJhUWNyVzAifSx7InBhdGgiOiJjb250ZW50X3NjcmlwdHMvbW9kZV92aXN1YWwuanMiLCJyb290X2hhc2giOiJlTzZpWTdiTDNGeEJlc3hOQjhFRjZNSV9nb0JuUHJmSTRIRERYLS1HUzFNIn0seyJwYXRoIjoiY29udGVudF9zY3JpcHRzL3Njcm9sbGVyLmpzIiwicm9vdF9oYXNoIjoiMlo1aXJRQVZoUGNrMjVxZzVZNk8wNU4zVGtFLUd3ZS1uYjlLX0RDLTR2TSJ9LHsicGF0aCI6ImNvbnRlbnRfc2NyaXB0cy91aV9jb21wb25lbnQuanMiLCJyb290X2hhc2giOiJOZTh4ZkVTVUdnR3hIYnE3UGpBbk1WWTBOWlVJbDB0a2dObUhsM29hSHF3In0seyJwYXRoIjoiY29udGVudF9zY3JpcHRzL3ZpbWl1bS5jc3MiLCJyb290X2hhc2giOiI5OVlZakhDclZYZl9hQnZiRFBQazdlT0FENThEbThqc0Z0MmtTVUg3VG5nIn0seyJwYXRoIjoiY29udGVudF9zY3JpcHRzL3ZpbWl1bV9mcm9udGVuZC5qcyIsInJvb3RfaGFzaCI6IjR0WGJwWC1DWnQwQ1FxeTYzUDM1ZVhMVkh6akx4M00tSVBSbVBEd0tpUlUifSx7InBhdGgiOiJjb250ZW50X3NjcmlwdHMvdm9tbmliYXIuanMiLCJyb290X2hhc2giOiJMZXB1ZHZHM1E4VEY5dGZvVlVlMC1HRER0VV9XQ2FpT1FJZENkekJqaG1jIn0seyJwYXRoIjoiaWNvbnMvYWN0aW9uX2Rpc2FibGVkLnN2ZyIsInJvb3RfaGFzaCI6ImFkSF9uX1FhR2VnM1BhbEswX0NDSEdSRWJxZ0J6dXI3eWwybnZEa1NVdkEifSx7InBhdGgiOiJpY29ucy9hY3Rpb25fZGlzYWJsZWRfMTYucG5nIiwicm9vdF9oYXNoIjoiTkJwSjA4NWRmR2NLbGMtX1RfWXN6b3RVd25QNHBSdDZOa2tWZzNFQ2JHayJ9LHsicGF0aCI6Imljb25zL2FjdGlvbl9kaXNhYmxlZF8zMi5wbmciLCJyb290X2hhc2giOiJnMU1PdWF6T25ueGFvZEpOZDRKTjBJcGRYeTN6MG1MTGMwTldEVDYtS0RjIn0seyJwYXRoIjoiaWNvbnMvYWN0aW9uX2VuYWJsZWQuc3ZnIiwicm9vdF9oYXNoIjoid1JTdGFoaF9WNFprZFBxWmNVSlhxMzFxbmxOZDhySUZ2V0pJSjR6OE5XbyJ9LHsicGF0aCI6Imljb25zL2FjdGlvbl9lbmFibGVkXzE2LnBuZyIsInJvb3RfaGFzaCI6Ikp0ME9VVGJYOWhMSG16X191b1Z2SjRjNVN1bEJQOTNYV1J2VGI5LXotSFEifSx7InBhdGgiOiJpY29ucy9hY3Rpb25fZW5hYmxlZF8zMi5wbmciLCJyb290X2hhc2giOiIzTTRDZHRwLWpsSDdhWkVNVjc3dTFWelR6RkpOb1g0Z0JKTGJSSXdLQUVNIn0seyJwYXRoIjoiaWNvbnMvYWN0aW9uX3BhcnRpYWwuc3ZnIiwicm9vdF9oYXNoIjoiel9MdzZUNGpERl9fYVRPcVFoY1p0cG1jSy1rOFdqcmpyaXNiNUJUTHpCRSJ9LHsicGF0aCI6Imljb25zL2FjdGlvbl9wYXJ0aWFsXzE2LnBuZyIsInJvb3RfaGFzaCI6IjJyQk5mYVpIU3lPSEJEMDhFS0RidHFQRDZBN3dBQ3ZPcTBMN19MN2VqLXMifSx7InBhdGgiOiJpY29ucy9hY3Rpb25fcGFydGlhbF8zMi5wbmciLCJyb290X2hhc2giOiJyYlRXcFhwSkx1YTR5Y0FtTVM2NkhsYW1xZ001YlVXazB0bm9hTWJTVFhnIn0seyJwYXRoIjoiaWNvbnMvaWNvbi5zdmciLCJyb290X2hhc2giOiJrS1VKeGthMkUyUzVPa2VVa0VfaVRCZUdSSU05b3djdXlQdjl3RW9SektrIn0seyJwYXRoIjoiaWNvbnMvaWNvbjEyOC5wbmciLCJyb290X2hhc2giOiJRRDlJTDBtVU44amZwejdyMVBrY3FwQ0I0ajQ5RjVJUUVxU3k4RHQ0WEFnIn0seyJwYXRoIjoiaWNvbnMvaWNvbjE2LnBuZyIsInJvb3RfaGFzaCI6InhSMmM0bVJ5M29ncU1TZllhbUQ1ZzZwMGVRX2NhODFMVE94YnZVN2diWW8ifSx7InBhdGgiOiJpY29ucy9pY29uNDgucG5nIiwicm9vdF9oYXNoIjoibFBzMEhhVFNuLWlmWFhSeUR0WjViYTRzV19lampEMkRZcm0yaGJ2QmZtRSJ9LHsicGF0aCI6ImxpYi9jaHJvbWVfYXBpX3N0dWJzLmpzIiwicm9vdF9oYXNoIjoiUENKWFFGZFFZb25KdXJlOXhmQkl2NXZCOG0zMkUydHZGZmJxM1U3VEp5dyJ9LHsicGF0aCI6ImxpYi9kb21fdXRpbHMuanMiLCJyb290X2hhc2giOiJmOFlZRFA1TWV5c1ZLYVdheTRLbFo2MWM4RzBjVjdpdDUxN1BEcTkzSmEwIn0seyJwYXRoIjoibGliL2ZpbmRfbW9kZV9oaXN0b3J5LmpzIiwicm9vdF9oYXNoIjoiTnZ2eGV3ZDNobS1tUlJGSUtmcFJXV1c1VHdrcWRHc3ZiYmZBOG9uVjRzbyJ9LHsicGF0aCI6ImxpYi9oYW5kbGVyX3N0YWNrLmpzIiwicm9vdF9oYXNoIjoiU091VmNyNHBmLUtkcnZ0SjZoVF8yY2Z2XzJwNmp6VUVTUmlwMzZYZzRsOCJ9LHsicGF0aCI6ImxpYi9rZXlib2FyZF91dGlscy5qcyIsInJvb3RfaGFzaCI6InMxcGEwc1UyNjcya2s2dlJWSjF4eXJEUlBobm1UMlg0XzdqU3BxX1plcmMifSx7InBhdGgiOiJsaWIvcmVjdC5qcyIsInJvb3RfaGFzaCI6InZOSVZaREJRWm9VZ0ZRVS1Lb2hJZFduU0ZPem4xUGs2clFzejMwc0xESmcifSx7InBhdGgiOiJsaWIvc2V0dGluZ3MuanMiLCJyb290X2hhc2giOiJ3VkE4ajRocjlNTkZTalNKODdCcHY4dE5oNC1vSFJROGJYTWJrczBRNmRnIn0seyJwYXRoIjoibGliL3R5cGVzLmpzIiwicm9vdF9oYXNoIjoiY0h5ODYzS19tZ0U5ZGl1ajk4d1djTzNlczNrYUpFMTBUUnJlR3cya0ItbyJ9LHsicGF0aCI6ImxpYi91cmxfdXRpbHMuanMiLCJyb290X2hhc2giOiJqU21LTDJ5NG1lTUF2TG5NYmxobkRTb2U0ekxxa0luSEdEWm5RMEVyQXdJIn0seyJwYXRoIjoibGliL3V0aWxzLmpzIiwicm9vdF9oYXNoIjoiTXNvXzVxalNpVzQwYXRtSW4yQjlTRkpYZVdLQUM2eldjVWMxOU15LUZtQSJ9LHsicGF0aCI6Im1hbmlmZXN0Lmpzb24iLCJyb290X2hhc2giOiJLbWRsZVBkNU1tZGJXblZwc3BVOGdZbU1sNXA0Y0p0eTJIV25UNGxMWjV3In0seyJwYXRoIjoicGFnZXMvYWN0aW9uLmNzcyIsInJvb3RfaGFzaCI6IjdRZWJJZlVIS2xnRGdyUXBGRFg3RlExM19seWlGTTVNRnZBUFZTSzRtTncifSx7InBhdGgiOiJwYWdlcy9hY3Rpb24uaHRtbCIsInJvb3RfaGFzaCI6InJ1SXNLZDZZOTFhdzFfWnNMXzNZZk1oTGhwNnZXbXh1VkVVOWRvVEVWMWsifSx7InBhdGgiOiJwYWdlcy9hY3Rpb24uanMiLCJyb290X2hhc2giOiJjY0RMYy1GRlVRYjI1aXZJcVEyT2hSZjlnNmpOMk94akVVUVlUVVNtTEM0In0seyJwYXRoIjoicGFnZXMvYWxsX2NvbnRlbnRfc2NyaXB0cy5qcyIsInJvb3RfaGFzaCI6InJuTDVRSkdRY3gzZEM0QzN1RlZxSFVqVTVnUTZUTjhQX2NXdUxzZ2xaTlUifSx7InBhdGgiOiJwYWdlcy9jb21tYW5kX2xpc3RpbmcuY3NzIiwicm9vdF9oYXNoIjoiTFl0QkdwQTVsdEktblNEdENxeWJkWVlaM2lhVDh2S3ZQYy1iUl9OS1pWVSJ9LHsicGF0aCI6InBhZ2VzL2NvbW1hbmRfbGlzdGluZy5odG1sIiwicm9vdF9oYXNoIjoiaDVna3ROUExodDRKUGxCcFliMG5HUF9TWEkwNERjLVpFVkE2aS1wM3dTOCJ9LHsicGF0aCI6InBhZ2VzL2NvbW1hbmRfbGlzdGluZy5qcyIsInJvb3RfaGFzaCI6Inp2RlJ4UVQ0UzFUa3hqTk9ZaWQxWVA1dllCSzNPUS03MHV4S0RNNkVpaUkifSx7InBhdGgiOiJwYWdlcy9kb2MuY3NzIiwicm9vdF9oYXNoIjoidVFWR2JmZWZ3LTZwVVlkUE5jWWczSzlVVzVEMUFXUkp6WkhSam1EMDFvcyJ9LHsicGF0aCI6InBhZ2VzL2RvY19zZWFyY2hfY29tcGxldGlvbi5odG1sIiwicm9vdF9oYXNoIjoiZkZtLWhZZEt5cmxCU3ZaNDYxYkVEakkwVEdpR0JqOElLUGg5dEoxVUhiRSJ9LHsicGF0aCI6InBhZ2VzL2RvY19zZWFyY2hfY29tcGxldGlvbi5qcyIsInJvb3RfaGFzaCI6IkwyelJpUGZDX0ZMb2RWSnZQSnRFcUI5THZCaVdKcG1ieS1jZXRHbHFBVnMifSx7InBhdGgiOiJwYWdlcy9leGNsdXNpb25fcnVsZXNfZWRpdG9yLmpzIiwicm9vdF9oYXNoIjoiWmdhTGVreElIWVF4LUc1bmpmSDNZVTB6eUZrZ0k0QU1QYkFMaTRvRmgyVSJ9LHsicGF0aCI6InBhZ2VzL2hlbHBfZGlhbG9nX3BhZ2UuY3NzIiwicm9vdF9oYXNoIjoiTEJQV21BU09lMm81RVEtVVNBZFowX0xqX2I4NmlrN0tGeTdHYmRGaU9kYyJ9LHsicGF0aCI6InBhZ2VzL2hlbHBfZGlhbG9nX3BhZ2UuaHRtbCIsInJvb3RfaGFzaCI6ImFZdzVrdjdtdTFUbEFhOS1OTmpMSmpQV3l1VTctemljTVdRRGZWaEVTNHMifSx7InBhdGgiOiJwYWdlcy9oZWxwX2RpYWxvZ19wYWdlLmpzIiwicm9vdF9oYXNoIjoiZzI3dnFnMVAzcXcyT2JZMXN5TUVvcUVKX2cwX3JDTjZVazA5MTlHOHpPZyJ9LHsicGF0aCI6InBhZ2VzL2h1ZF9wYWdlLmNzcyIsInJvb3RfaGFzaCI6InFXZnhGZ29fQTZFS2p1SkhNYWh1QzhLUmxaQ2pDYWdZOXVxaks2ZHFNNWcifSx7InBhdGgiOiJwYWdlcy9odWRfcGFnZS5odG1sIiwicm9vdF9oYXNoIjoiNkhkdXZKWnVOT0JqQmJISHdEazVpdlc4dmRnV2wyUXB1UHY5YXlxWDdudyJ9LHsicGF0aCI6InBhZ2VzL2h1ZF9wYWdlLmpzIiwicm9vdF9oYXNoIjoiZGE0Z0RLbHV3Y0RGUU9nZmxzdHFsVzY3MWV4UXc1b25BOTdnOE5GTVM0YyJ9LHsicGF0aCI6InBhZ2VzL2tleV9tYXBwaW5ncy5jc3MiLCJyb290X2hhc2giOiJZZWUyRzBETXRSRTdDZjFMeGFzd3VabDRpenBkc0doTXV4YVpkcTBBRDhJIn0seyJwYXRoIjoicGFnZXMvb3B0aW9ucy5jc3MiLCJyb290X2hhc2giOiJwd1lERGlNWFkxNERWcmJlODFoMWM5OGZjLXlTNklfUWg2dkpOT0t0MVg0In0seyJwYXRoIjoicGFnZXMvb3B0aW9ucy5odG1sIiwicm9vdF9oYXNoIjoibFpGcVg1TFBtSlFSTFh5Z0ZVN2ZvN0xjSGgyUUNDMVFFY0RhcTQ5Nnh0TSJ9LHsicGF0aCI6InBhZ2VzL29wdGlvbnMuanMiLCJyb290X2hhc2giOiJ0U2hBTTZ3VVR3S1E0a1ZaUm9kbEJXVVptUjZIZlVIbE5vWlNENHZMSG9ZIn0seyJwYXRoIjoicGFnZXMvdWlfY29tcG9uZW50X21lc3Nlbmdlci5qcyIsInJvb3RfaGFzaCI6InZlTUpoTTdHaXp0aWNVYmRuR1AwZ0FBTlhwUmxsUFk3bDJDR3JXMzNoZG8ifSx7InBhdGgiOiJwYWdlcy92b21uaWJhcl9wYWdlLmNzcyIsInJvb3RfaGFzaCI6IkJiOXNCUU5MSU5QX28zVzBocTB0ZER5aGpNYlRBZDFtOTd4U2FFQXl5LVkifSx7InBhdGgiOiJwYWdlcy92b21uaWJhcl9wYWdlLmh0bWwiLCJyb290X2hhc2giOiIzN0FwcGhSem9MSnRWY2Y2cEhKM0RlZDM3b3NDVjdaZ3hsOWR4RTA5eWpJIn0seyJwYXRoIjoicGFnZXMvdm9tbmliYXJfcGFnZS5qcyIsInJvb3RfaGFzaCI6ImNvLS1TbTNjeFpTRmRCcW9KMkk0UnZSbThna0loVkpuTktsSkNqV0IwMWMifSx7InBhdGgiOiJyZXNvdXJjZXMvdGxkcy50eHQiLCJyb290X2hhc2giOiJXVGduR254YkNWSVZqWDl2clZfdWVTcnRENGRfSnphSjNtX01jTXl5b3RrIn1dLCJmb3JtYXQiOiJ0cmVlaGFzaCIsImhhc2hfYmxvY2tfc2l6ZSI6NDA5Nn1dLCJpdGVtX2lkIjoiZGJlcGdnZW9nYmFpYmhnbmhobmRvanBlcGlpaGNtZWIiLCJpdGVtX3ZlcnNpb24iOiIyLjQuMiIsInByb3RvY29sX3ZlcnNpb24iOjF9","signatures":[{"header":{"kid":"publisher"},"protected":"eyJhbGciOiJSUzI1NiJ9","signature":"glHk3BZw82-Rv74V_RXTQgxEE0i85quh6p3qt5pd4EQ9uJT3-ZURgZwehUpWFKEXBz85vx_HrkPvLIAVnHeX2ZH40aj8PM02EcTxme5_OBvlAG26H-BYjTJgyVeOl4WpHxNh0yiwymnws7eXRQMvcAJC_kT1Ukf7sNhUBf4aGc8"},{"header":{"kid":"webstore"},"protected":"eyJhbGciOiJSUzI1NiJ9","signature":"MD9S4x8g9sgGx9z_lcndiouWiSkTBkkpgUnNDgpwsGi-2PQCJhQvHywhkE7A9zI1b2DyMWwbgBXfB6oCY7-1OA8Ymnm8nbBRe8KEDN1165TtiLgeIBBaAIhksSKj9Pa95SIR1hR8FKYTaHRpFnJd5zyeaqY2om4MY9le0WfiKO404Fr7_odyItCFmrccHqRQ9c-z6539RKSIXSXazTfWmsT5D2nS7CobrT6qtLtimJZvLox15mtZEJsGgR6r9FVh_slNcNITdcC0dPXR0nU7b-I_-DH7HgJN0Zjd7Z5oW3oHkeS4Rbi7oGvyuEPHQ13xbn434CuSzwltoNqmuxylkg"}]}}] \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/background_scripts/all_commands.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/background_scripts/all_commands.js new file mode 100644 index 0000000..607fb73 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/background_scripts/all_commands.js @@ -0,0 +1,619 @@ +// This is the order they will be shown in the help dialog. +// +// Properties: +// - advanced: advanced commands are not shown in the help dialog by default. +// - background: whether this command has to be run by the background page. +// - desc: shown in the help dialog and command listing page. +// - details: extra help information that will only be shown on the command listing page. +// - group: commands are displayed in groups in the help dialog and command listing. +// - noRepeat: whether this command can be used with a count key prefix. +// - repeatLimit: the number of allowed repetitions of this command before the user is prompted for +// confirmation. +// - topFrame: whether this command must be run only in the top frame of a page. +// +const allCommands = [ + // + // Navigation + // + + { + name: "scrollDown", + desc: "Scroll down", + group: "navigation", + }, + + { + name: "scrollUp", + desc: "Scroll up", + group: "navigation", + }, + + { + name: "scrollToTop", + desc: "Scroll to the top of the page", + group: "navigation", + }, + + { + name: "scrollToBottom", + desc: "Scroll to the bottom of the page", + group: "navigation", + }, + + { + name: "scrollPageDown", + desc: "Scroll a half page down", + group: "navigation", + }, + + { + name: "scrollPageUp", + desc: "Scroll a half page up", + group: "navigation", + }, + + { + name: "scrollFullPageDown", + desc: "Scroll a full page down", + group: "navigation", + }, + + { + name: "scrollFullPageUp", + desc: "Scroll a full page up", + group: "navigation", + }, + + { + name: "scrollLeft", + desc: "Scroll left", + group: "navigation", + }, + + { + name: "scrollRight", + desc: "Scroll right", + group: "navigation", + advanced: true, + }, + + { + name: "scrollToLeft", + desc: "Scroll all the way to the left", + group: "navigation", + advanced: true, + }, + + { + name: "scrollToRight", + desc: "Scroll all the way to the right", + group: "navigation", + }, + + { + name: "reload", + desc: "Reload the page", + group: "navigation", + background: true, + options: { + hard: "Perform a hard reload, forcing the browser to bypass its cache.", + }, + }, + + { + name: "copyCurrentUrl", + desc: "Copy the current URL to the clipboard", + group: "navigation", + noRepeat: true, + }, + + { + name: "openCopiedUrlInCurrentTab", + desc: "Open the clipboard's URL in the current tab", + group: "navigation", + noRepeat: true, + }, + + { + name: "openCopiedUrlInNewTab", + desc: "Open the clipboard's URL in a new tab", + group: "navigation", + noRepeat: true, + options: { + position: "Where to place the tab in the tab bar. " + + "One of `start`, `before`, `after`, `end`. `after` is the default.", + }, + }, + + { + name: "goUp", + desc: "Go up the URL hierarchy", + group: "navigation", + advanced: true, + }, + + { + name: "goToRoot", + desc: "Go to the root of current URL hierarchy", + group: "navigation", + advanced: true, + }, + + { + name: "enterInsertMode", + desc: "Enter insert mode", + group: "navigation", + noRepeat: true, + }, + + { + name: "enterVisualMode", + desc: "Enter visual mode", + group: "navigation", + noRepeat: true, + }, + + { + name: "enterVisualLineMode", + desc: "Enter visual line mode", + group: "navigation", + advanced: true, + noRepeat: true, + }, + + { + name: "passNextKey", + desc: "Pass the next key to the page", + options: { + normal: "Optional. Enter Vimium's normal mode, and ignore any defined pass keys.", + }, + group: "navigation", + advanced: true, + }, + + { + name: "focusInput", + desc: "Focus the first text input on the page", + group: "navigation", + }, + + { + name: "LinkHints.activateMode", + desc: "Open a link in the current tab", + options: { + action: "one of `hover`, `focus`, `copy-text`. When a link is selected, " + + "instead of clicking on the link, perform the specified action.", + }, + group: "navigation", + advanced: true, + }, + + { + name: "LinkHints.activateModeToOpenInNewTab", + desc: "Open a link in a new tab", + group: "navigation", + }, + + { + name: "LinkHints.activateModeToOpenInNewForegroundTab", + desc: "Open a link in a new tab & switch to it", + group: "navigation", + }, + + { + name: "LinkHints.activateModeWithQueue", + desc: "Open multiple links in a new tab", + group: "navigation", + advanced: true, + noRepeat: true, + }, + + { + name: "LinkHints.activateModeToDownloadLink", + desc: "Download link url", + group: "navigation", + advanced: true, + }, + + { + name: "LinkHints.activateModeToOpenIncognito", + desc: "Open a link in incognito window", + group: "navigation", + advanced: true, + }, + + { + name: "LinkHints.activateModeToCopyLinkUrl", + desc: "Copy a link URL to the clipboard", + group: "navigation", + advanced: true, + }, + + { + name: "goPrevious", + desc: "Follow the link labeled previous or <", + group: "navigation", + advanced: true, + noRepeat: true, + }, + + { + name: "goNext", + desc: "Follow the link labeled next or >", + group: "navigation", + advanced: true, + noRepeat: true, + }, + + { + name: "nextFrame", + desc: "Select the next frame on the page", + group: "navigation", + background: true, + }, + + { + name: "mainFrame", + desc: "Select the page's main/top frame", + group: "navigation", + topFrame: true, + noRepeat: true, + }, + + { + name: "Marks.activateCreateMode", + desc: "Create a new mark", + details: "Do this by typing the key bound to this command, and then a letter. " + + "This will set a mark bound to that letter. Lowercase letters are local marks and uppercase " + + "letters are global marks.", + options: { + swap: "Swap global and local marks. This option exists because in a browser, global marks " + + "are generally more useful than local marks, and so it may be desirable to make lowercase " + + "letters represent global marks rather than local marks.", + }, + group: "navigation", + advanced: true, + noRepeat: true, + }, + + { + name: "Marks.activateGotoMode", + desc: "Jump to a mark", + options: { + swap: "Swap global and local marks. This option exists because in a browser, global marks " + + "are generally more useful than local marks, and so it may be desirable to make lowercase " + + "letters represent global marks rather than local marks.", + }, + group: "navigation", + advanced: true, + noRepeat: true, + }, + + // + // Vomnibar + // + + { + name: "Vomnibar.activate", + desc: "Open URL, bookmark or history entry", + options: { + query: "The text to prefill the Vomnibar with.", + keyword: 'The keyword of a search engine defined in the "Custom search engines" ' + + "section of the Vimium Options page. The Vomnibar will be scoped to use that search engine.", + }, + group: "vomnibar", + topFrame: true, + }, + + { + name: "Vomnibar.activateInNewTab", + desc: "Open URL, bookmark or history entry in a new tab", + group: "vomnibar", + options: { + query: "The text to prefill the Vomnibar with.", + keyword: 'The keyword of a search engine defined in the "Custom search engines" ' + + "section of the Vimium Options page. The Vomnibar will be scoped to use that search engine.", + }, + topFrame: true, + }, + + { + name: "Vomnibar.activateBookmarks", + desc: "Open a bookmark", + group: "vomnibar", + options: { + query: "The text to prefill the Vomnibar with.", + }, + topFrame: true, + }, + + { + name: "Vomnibar.activateBookmarksInNewTab", + desc: "Open a bookmark in a new tab", + group: "vomnibar", + options: { + query: "The text to prefill the Vomnibar with.", + }, + topFrame: true, + }, + + { + name: "Vomnibar.activateTabSelection", + desc: "Search through your open tabs", + group: "vomnibar", + topFrame: true, + }, + + { + name: "Vomnibar.activateEditUrl", + desc: "Edit the current URL", + group: "vomnibar", + topFrame: true, + }, + + { + name: "Vomnibar.activateEditUrlInNewTab", + desc: "Edit the current URL and open in a new tab", + group: "vomnibar", + topFrame: true, + }, + + // + // Find + // + + { + name: "enterFindMode", + desc: "Enter find mode.", + group: "find", + noRepeat: true, + }, + + { + name: "performFind", + desc: "Cycle forward to the next find match", + group: "find", + }, + + { + name: "performBackwardsFind", + desc: "Cycle backward to the previous find match", + group: "find", + }, + + { + name: "findSelected", + desc: "Find the selected text", + group: "find", + advanced: true, + }, + + { + name: "findSelectedBackwards", + desc: "Find the selected text, searching backwards", + group: "find", + advanced: true, + }, + + // + // History + // + + { + name: "goBack", + desc: "Go back in history", + group: "history", + }, + + { + name: "goForward", + desc: "Go forward in history", + group: "history", + }, + + // + // Tabs + // + + { + name: "createTab", + desc: "Create new tab", + options: { + "(any url)": "Open this URL, rather than the browser's new tab page. " + + "E.g.: `map X createTab https://example.com`", + window: "Create the tab in a new window", + incognito: "Create the tab in an incognito window", + position: "Where to place the tab in the tab bar. " + + "One of `start`, `before`, `after`, `end`. `after` is the default.", + }, + group: "tabs", + background: true, + repeatLimit: 20, + }, + + { + name: "previousTab", + desc: "Go one tab left", + group: "tabs", + background: true, + }, + + { + name: "nextTab", + desc: "Go one tab right", + group: "tabs", + background: true, + }, + + { + name: "visitPreviousTab", + desc: "Go to previously-visited tab", + group: "tabs", + background: true, + }, + + { + name: "firstTab", + desc: "Go to the first tab", + group: "tabs", + background: true, + }, + + { + name: "lastTab", + desc: "Go to the last tab", + group: "tabs", + background: true, + }, + + { + name: "duplicateTab", + desc: "Duplicate current tab", + group: "tabs", + background: true, + repeatLimit: 20, + }, + + { + name: "togglePinTab", + desc: "Pin or unpin current tab", + group: "tabs", + background: true, + }, + + { + name: "toggleMuteTab", + desc: "Mute or unmute current tab", + options: { + all: "Mute all tabs.", + other: "Mute every tab except the current one.", + }, + group: "tabs", + background: true, + noRepeat: true, + }, + + { + name: "removeTab", + desc: "Close current tab", + group: "tabs", + background: true, + // Don't close (in one command invocation) more than the number of tabs that can be re-opened by + // the browser. + repeatLimit: chrome.sessions?.MAX_SESSION_RESULTS || 25, + }, + + { + name: "restoreTab", + desc: "Restore closed tab", + group: "tabs", + background: true, + repeatLimit: 20, + }, + + { + name: "moveTabToNewWindow", + desc: "Move tab to new window", + group: "tabs", + advanced: true, + background: true, + }, + + { + name: "closeTabsOnLeft", + desc: "Close tabs on the left", + group: "tabs", + advanced: true, + background: true, + }, + + { + name: "closeTabsOnRight", + desc: "Close tabs on the right", + group: "tabs", + advanced: true, + background: true, + }, + + { + name: "closeOtherTabs", + desc: "Close all other tabs", + group: "tabs", + advanced: true, + background: true, + noRepeat: true, + }, + + { + name: "moveTabLeft", + desc: "Move tab to the left", + group: "tabs", + advanced: true, + background: true, + }, + + { + name: "moveTabRight", + desc: "Move tab to the right", + group: "tabs", + advanced: true, + background: true, + }, + + { + name: "setZoom", + desc: "Set zoom", + group: "tabs", + advanced: true, + background: true, + options: { + level: "The zoom level. This can be a range of [0.25, 5.0]. 1.0 is the default.", + }, + }, + + { + name: "zoomIn", + desc: "Zoom in", + group: "tabs", + advanced: true, + background: true, + }, + + { + name: "zoomOut", + desc: "Zoom out", + group: "tabs", + advanced: true, + background: true, + }, + + { + name: "zoomReset", + desc: "Reset zoom", + group: "tabs", + advanced: true, + background: true, + }, + + // + // Misc + // + + { + name: "toggleViewSource", + desc: "View page source", + group: "misc", + advanced: true, + noRepeat: true, + }, + + { + name: "showHelp", + desc: "Show help", + group: "misc", + noRepeat: true, + topFrame: true, + }, +]; + +export { allCommands }; diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/background_scripts/bg_utils.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/background_scripts/bg_utils.js new file mode 100644 index 0000000..37b58aa --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/background_scripts/bg_utils.js @@ -0,0 +1,19 @@ +import { TabRecency } from "./tab_recency.js"; + +// We're using browser.runtime to determine the browser name and version for Firefox. That API is +// only available on the background page. We're not using window.navigator because it's unreliable. +// Sometimes browser vendors will provide fake values, like when `privacy.resistFingerprinting` is +// enabled on `about:config` of Firefox. +export function isFirefox() { + // We want this browser check to also cover Firefox variants, like LibreWolf. See #3773. + // We could also just check browserInfo.name against Firefox and Librewolf. + return globalThis.browser?.runtime.getURL("").startsWith("moz") ?? false; +} + +export async function getFirefoxVersion() { + return isFirefox() ? (await browser.runtime.getBrowserInfo()).version : null; +} + +// TODO(philc): tabRecency imports bg_utils. We should resovle the cycle for the sake of clarity. +export const tabRecency = new TabRecency(); +tabRecency.init(); diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/background_scripts/commands.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/background_scripts/commands.js new file mode 100644 index 0000000..faaf584 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/background_scripts/commands.js @@ -0,0 +1,501 @@ +import { allCommands } from "./all_commands.js"; + +// A specification for a command that's currently bound to a key sequence, as defined by the default +// key bindings, or as it appears in the user's keymapping settings. +export class RegistryEntry { + // Array of keys. + keySequence; + // Name of the command. + command; + // Whether this command can be used with a count key prefix. + noRepeat; + // The number of allowed repetitions of this command before the user is prompted for confirmation. + repeatLimit; + // Whether this command has to be run by the background page. + background; + // Whether this command must be run only in the top frame of a page. + topFrame; + // The map of options for this command. This is a parsed, sanitized version of the user's options + // for this command. + options; + + constructor(o) { + Object.seal(this); + if (o) Object.assign(this, o); + } +} + +// This is intentionally a superset of valid modifiers (a, c, m, s). +const modifier = "(?:[a-zA-Z]-)"; +const namedKey = "(?:[a-z][a-z0-9]+)"; // E.g. "left" or "f12" (always two characters or more). +const modifiedKey = `(?:${modifier}+(?:.|${namedKey}))`; // E.g. "c-*" or "c-left". +const specialKeyRegexp = new RegExp(`^<(${namedKey}|${modifiedKey})>(.*)`, "i"); + +// Remove comments and leading/trailing whitespace from a list of lines, and merge lines where the +// last character on the preceding line is "\". +function parseLines(text) { + return text.replace(/\\\n/g, "") + .split("\n") + .map((line) => line.trim()) + .filter((line) => (line.length > 0) && !(Array.from('#"').includes(line[0]))); +} + +// Returns the index of the nth occurrence of the regexp in the string. -1 if not found. +function nthRegexIndex(str, regex, n) { + if (!regex.global) { + regex = new RegExp(regex.source, regex.flags + "g"); + } + let match; + let count = 0; + while ((match = regex.exec(str)) !== null) { + count++; + if (count === n) { + return match.index; + } + // Prevent infinite loop for zero-length matches. + if (match.index === regex.lastIndex) { + regex.lastIndex++; + } + } + return -1; +} + +const KeyMappingsParser = { + // Parses the text supplied by the user in their "keyMappings" setting. + // - shouldLogWarnings: if true, logs to the console when part of the user's config is invalid. + // Returns { keyToRegistryEntry, keyToMappedKey, validationErrors }. + parse(configText, shouldLogWarnings) { + let keyToRegistryEntry = {}; + let mapKeyRegistry = {}; + let errors = []; + const configLines = parseLines(configText); + const commandsByName = Utils.keyBy(allCommands, "name"); + + const validModifiers = ["a", "c", "m", "s"]; + const validateParsedKey = function (key) { + if (!key?.match(modifiedKey)) return; + // Check that the modifier is valid and not capitalized. + const mod = key.split("-")[0].slice(1); + if (!validModifiers.includes(mod)) { + return `${key} has an invalid modifier; valid modifiers are ${validModifiers}`; + } + }; + const validateUrl = function (str) { + try { + new URL(str); + return true; + } catch { + return false; + } + }; + + for (const line of configLines) { + const tokens = line.split(/\s+/); + const action = tokens[0].toLowerCase(); + switch (action) { + case "map": { + if (tokens.length < 3) { + errors.push(`"map requires at least 2 arguments on line ${line}`); + continue; + } + const [_, key, command] = tokens; + let optionString; + const optionsStart = nthRegexIndex(line, /\s+/, 3); + if (optionsStart == -1) { + optionString = ""; + } else { + optionString = line.slice(optionsStart).trim(); + } + const commandInfo = commandsByName[command]; + if (!commandInfo) { + errors.push(`"${command}" is not a valid command in the line: ${line}`); + continue; + } + const keySequence = this.parseKeySequence(key); + const keyErrors = keySequence.map((k) => validateParsedKey(k)).filter((e) => e); + if (keyErrors.length > 0) { + errors = errors.concat(keyErrors); + continue; + } + const options = this.parseCommandOptions(optionString); + const allowedOptions = Object.keys(commandInfo.options || {}); + if (!commandInfo.noRepeat) { + allowedOptions.push("count"); + } + let hasUnknownOption = false; + for (const option of Object.keys(options)) { + if (allowedOptions.includes(option)) continue; + if (allowedOptions.includes("(any url)")) { + // Since this command allows for any URL as an argument, we perform some basic + // validation to ensure the provided option string is indeed a URL. + if (validateUrl(option)) continue; + hasUnknownOption = true; + errors.push( + `Command ${command} does not support option ${option}. ` + + `Is this meant to be a valid URL?`, + ); + break; + } else { + hasUnknownOption = true; + errors.push(`Command ${command} does not support option ${option}`); + break; + } + } + if (hasUnknownOption) break; + keyToRegistryEntry[key] = new RegistryEntry({ + keySequence, + command, + noRepeat: commandInfo.noRepeat, + repeatLimit: commandInfo.repeatLimit, + background: commandInfo.background, + topFrame: commandInfo.topFrame, + options, + }); + break; + } + case "unmap": { + if (tokens.length != 2) { + errors.push(`Incorrect usage for unmap in the line: ${line}`); + continue; + } + const key = tokens[1]; + delete keyToRegistryEntry[key]; + delete mapKeyRegistry[key]; + break; + } + case "unmapall": { + keyToRegistryEntry = {}; + mapKeyRegistry = {}; + break; + } + case "mapkey": { + if (tokens.length != 3) { + errors.push(`Incorrect usage for mapKey in the line: ${line}`); + continue; + } + const fromChar = this.parseKeySequence(tokens[1]); + const toChar = this.parseKeySequence(tokens[2]); + // NOTE(philc): I'm not sure why we enforce that the fromChar and toChar have to be + // length one. It's been that way since this feature was introduced in 6596e30. + const isValid = fromChar.length == toChar.length && toChar.length === 1; + if (isValid) { + mapKeyRegistry[fromChar[0]] = toChar[0]; + } else { + errors.push( + `mapkey only supports mapping keys which are single characters. Line: ${line}`, + ); + } + break; + } + default: + errors.push(`"${action}" is not a valid config command in line: ${line}`); + } + } + + return { + keyToRegistryEntry, + keyToMappedKey: mapKeyRegistry, + validationErrors: errors, + }; + }, + + // Lower-case the appropriate portions of named keys. + // + // A key name is one of three forms exemplified by or (prefixed normal key, + // named key, or prefixed named key). Internally, for simplicity, we would like prefixes and key + // names to be lowercase, though humans may prefer other forms or . + // On the other hand, and are different named keys - for one of them you have to press + // "shift" as well. + // We sort modifiers here to match the order used in keyboard_utils.js. + // The return value is a sequence of keys: e.g. "b" -> ["", "", "b"]. + parseKeySequence(key) { + if (key.length === 0) { + return []; + // Parse "bcd" as "" and "bcd". + } else if (0 === key.search(specialKeyRegexp)) { + const array = RegExp.$1.split("-"); + const adjustedLength = Math.max(array.length, 1); + let modifiers = array.slice(0, adjustedLength - 1); + let keyChar = array[adjustedLength - 1]; + if (keyChar.length !== 1) { + keyChar = keyChar.toLowerCase(); + } + modifiers = modifiers.map((m) => m.toLowerCase()); + modifiers.sort(); + return [ + "<" + modifiers.concat([keyChar]).join("-") + ">", + ...this.parseKeySequence(RegExp.$2), + ]; + } else { + return [key[0], ...this.parseKeySequence(key.slice(1))]; + } + }, + + // Command options follow command mappings, and are of one of these forms: + // key=value - a value + // key="value" - a value surrounded by quotes + // key - a flag + parseCommandOptions(optionString) { + const options = {}; + while (optionString != "") { + // Note that option names are allowed to be letters only; no numbers. + let match, matchedString, key, value; + // Case: option value surrounded by quotes (key= "a b"). Spaces are allowed in the value. + if (match = optionString.match(/^([a-zA-Z]+)="([^"]+)"(\s+|$)/)) { + matchedString = match[0]; + key = match[1]; + value = match[2]; + } // Case: option value not surrounded by quotes (key=value). Spaces aren't allowed. + else if (match = optionString.match(/^([a-zA-Z]+)=(\S+)(\s+|$)/)) { + matchedString = match[0]; + key = match[1]; + value = match[2]; + } // Case: single option (flag), or "any URL". This correctly parses URLs because URLs cannot + // contain unescaped equals or space characters. The key will be the option's name (or the + // URL), and the value will be true. + else if (match = optionString.match(/^([^\s"]+)(\s+|$)/)) { + matchedString = match[0]; + key = match[1]; + value = true; + } + // NOTE(philc): If this string doesn't match any of our option regexps, we could throw an + // error here or use an assert. I think this might only happen in the case where there's a + // single equals sign. For now, just add the whole string as a flag option. If the command in + // question doesn't accept this option, then an error will get surfaced to the user. + if (match == null) { + console.log(`Warning: '${optionString}' isn't a valid option string.`); + options[optionString] = true; + break; + } + + options[key] = value; + optionString = optionString.slice(matchedString.length); + } + + // We parse any `count` option immediately (to avoid having to parse it repeatedly later). + if ("count" in options) { + options.count = parseInt(options.count); + if (isNaN(options.count)) { + delete options.count; + } + } + + return options; + }, +}; + +const Commands = { + // A map of keyString => RegistryEntry + keyToRegistryEntry: null, + // A map of typed key => key it's mapped to (via the `mapkey` config statement). + mapKeyRegistry: null, + + async init() { + await Settings.onLoaded(); + Settings.addEventListener("change", async () => { + await this.loadKeyMappings(Settings.get("keyMappings")); + }); + await this.loadKeyMappings(Settings.get("keyMappings")); + }, + + // Parses the user's keyMapping config text and persists the parsed key mappings into the + // extension's storage, for use by the other parts of this extension. + async loadKeyMappings(userKeyMappingsConfigText) { + let key, command; + this.keyToRegistryEntry = {}; + this.mapKeyRegistry = {}; + + const defaultKeyConfig = Object.keys(defaultKeyMappings).map((key) => + `map ${key} ${defaultKeyMappings[key]}` + ).join("\n"); + + const parsed = KeyMappingsParser.parse( + defaultKeyConfig + "\n" + userKeyMappingsConfigText, + true, + ); + this.mapKeyRegistry = parsed.keyToMappedKey; + this.keyToRegistryEntry = parsed.keyToRegistryEntry; + + await chrome.storage.session.set({ mapKeyRegistry: this.mapKeyRegistry }); + await this.installKeyStateMapping(); + this.prepareHelpPageData(); + + // Push the key mappings from any passNextKey commands into storage so that they're's available + // to the front end so they can be detected during insert mode. We exclude single-key mappings + // for this command (i.e. printable keys) because we're considering that a configuration error: + // when users press printable keys in insert mode, they expect that character to be input, not + // to be droppped into a special Vimium mode. + const passNextKeys = Object.entries(this.keyToRegistryEntry) + .filter(([key, v]) => v.command == "passNextKey" && key.length > 1) + .map(([key, v]) => key); + await chrome.storage.session.set({ passNextKeyKeys: passNextKeys }); + }, + + // This generates and installs a nested key-to-command mapping structure. There is an example in + // mode_key_handler.js. + async installKeyStateMapping() { + const keyStateMapping = {}; + for (const keys of Object.keys(this.keyToRegistryEntry || {})) { + const registryEntry = this.keyToRegistryEntry[keys]; + let currentMapping = keyStateMapping; + for (let index = 0; index < registryEntry.keySequence.length; index++) { + const key = registryEntry.keySequence[index]; + if (currentMapping[key] != null ? currentMapping[key].command : undefined) { + // Do not overwrite existing command bindings, they take priority. NOTE(smblott) This is + // the legacy behaviour. + break; + } else if (index < (registryEntry.keySequence.length - 1)) { + currentMapping = currentMapping[key] != null + ? currentMapping[key] + : (currentMapping[key] = {}); + } else { + currentMapping[key] = Object.assign({}, registryEntry); + // We don't need these properties in the content scripts. + for (const prop of ["keySequence"]) { + delete currentMapping[key][prop]; + } + } + } + } + await chrome.storage.session.set({ + normalModeKeyStateMapping: keyStateMapping, + // Inform `KeyboardUtils.isEscape()` whether `` should be interpreted as `Escape` (which it + // is by default). + useVimLikeEscape: !("" in keyStateMapping), + }); + }, + + // Build the "commandToOptionsToKeys" data structure and place it in chrome's session storage. + // This is used by the help page and commands listing. + prepareHelpPageData() { + /* + Map of commands to option sets to keys to trigger that command option set. + Commands with no options will have the empty string options set. + Example: + { + "zoomReset": { + "": ["z0", "zz"] // No options, with two key maps, ie: `map zz zoomReset` + }, + "setZoom": { + "1.1": ["z1"], // `map z1 setZoom 1.1` + "1.2": ["z2"], // `map z2 setZoom 1.2` + } + } + */ + const commandToOptionsToKeys = {}; + const formatOptionString = (options) => { + return Object.entries(options) + .map(([k, v]) => { + // When the value of an option is true, then it was parsed as a flag. + if (v === true) { + return k; + } else { + return `${k}=${v}`; + } + }) + .join(" "); + }; + for (const key of Object.keys(this.keyToRegistryEntry || {})) { + const registryEntry = this.keyToRegistryEntry[key]; + const optionString = formatOptionString(registryEntry.options || {}); + commandToOptionsToKeys[registryEntry.command] ||= {}; + commandToOptionsToKeys[registryEntry.command][optionString] ||= []; + commandToOptionsToKeys[registryEntry.command][optionString].push(key); + } + chrome.storage.session.set({ commandToOptionsToKeys }); + }, +}; + +const defaultKeyMappings = { + // Navigating the current page + "j": "scrollDown", + "k": "scrollUp", + "h": "scrollLeft", + "l": "scrollRight", + "gg": "scrollToTop", + "G": "scrollToBottom", + "zH": "scrollToLeft", + "zL": "scrollToRight", + "": "scrollDown", + "": "scrollUp", + "d": "scrollPageDown", + "u": "scrollPageUp", + "r": "reload", + "R": "reload hard", + "yy": "copyCurrentUrl", + "p": "openCopiedUrlInCurrentTab", + "P": "openCopiedUrlInNewTab", + "gi": "focusInput", + "[[": "goPrevious", + "]]": "goNext", + "gf": "nextFrame", + "gF": "mainFrame", + "gu": "goUp", + "gU": "goToRoot", + "i": "enterInsertMode", + "v": "enterVisualMode", + "V": "enterVisualLineMode", + + // Link hints + "f": "LinkHints.activateMode", + "F": "LinkHints.activateModeToOpenInNewTab", + "": "LinkHints.activateModeWithQueue", + "yf": "LinkHints.activateModeToCopyLinkUrl", + + // Using find + "/": "enterFindMode", + "n": "performFind", + "N": "performBackwardsFind", + "*": "findSelected", + "#": "findSelectedBackwards", + + // Vomnibar + "o": "Vomnibar.activate", + "O": "Vomnibar.activateInNewTab", + "T": "Vomnibar.activateTabSelection", + "b": "Vomnibar.activateBookmarks", + "B": "Vomnibar.activateBookmarksInNewTab", + "ge": "Vomnibar.activateEditUrl", + "gE": "Vomnibar.activateEditUrlInNewTab", + + // Navigating history + "H": "goBack", + "L": "goForward", + + // Manipulating tabs + "K": "nextTab", + "J": "previousTab", + "gt": "nextTab", + "gT": "previousTab", + "^": "visitPreviousTab", + "<<": "moveTabLeft", + ">>": "moveTabRight", + "g0": "firstTab", + "g$": "lastTab", + "W": "moveTabToNewWindow", + "t": "createTab", + "yt": "duplicateTab", + "x": "removeTab", + "X": "restoreTab", + "": "togglePinTab", + "": "toggleMuteTab", + "zi": "zoomIn", + "zo": "zoomOut", + "z0": "zoomReset", + + // Marks + "m": "Marks.activateCreateMode", + "`": "Marks.activateGotoMode", + + // Misc + "?": "showHelp", + "gs": "toggleViewSource", +}; + +export { + Commands, + // Exported for unit tests. + defaultKeyMappings, + KeyMappingsParser, + parseLines, +}; diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/background_scripts/completion/completers.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/background_scripts/completion/completers.js new file mode 100644 index 0000000..fbd45c1 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/background_scripts/completion/completers.js @@ -0,0 +1,811 @@ +// This file contains the definition of the completers used for the Vomnibar's suggestion UI. A +// completer will take a query (whatever the user typed into the Vomnibar) and return a list of +// Suggestions, e.g. bookmarks, domains, URLs from history. +// +// The Vomnibar frontend script makes a "filterCompleter" request to the background page, which in +// turn calls filter() on each these completers. +// +// A completer is a class which has three functions: +// - filter(query): "query" will be whatever the user typed into the Vomnibar. +// - refresh(): (optional) refreshes the completer's data source (e.g. refetches the list of +// bookmarks). +// - cancel(): (optional) cancels any pending, cancelable action. + +import * as bgUtils from "./../bg_utils.js"; +import * as completionSearch from "./search_wrapper.js"; +import * as userSearchEngines from "../user_search_engines.js"; +import * as ranking from "./ranking.js"; +import { RegexpCache } from "./ranking.js"; + +// Set this to true to render relevancy when debugging the ranking scores. +const showRelevancy = false; + +// TODO(philc): Consider moving out the "computeRelevancy" function. +export class Suggestion { + queryTerms; + description; + url; + // A shortened URL (URI-decoded, protocol removed) suitable for dispaly purposes. + shortUrl; + title = ""; + // A computed relevancy value. + relevancy; + relevancyFunction; + relevancyData; + // When true, then this suggestion is automatically pre-selected in the vomnibar. This only affects + // the suggestion in slot 0 in the vomnibar. + autoSelect = false; + // When true, we highlight matched terms in the title and URL. Otherwise we don't. + highlightTerms = true; + + // The text to insert into the vomnibar input when this suggestion is selected. + insertText; + // This controls whether this suggestion is a candidate for deduplication after simplifying + // its URL. + deDuplicate = true; + // The tab represented by this suggestion. Populated by TabCompleter. + tabId; + // Whether this is a suggestion provided by a user's custom search engine. + isCustomSearch; + // Whether this is meant to be the first suggestion from the user's custom search engine which + // represents their query as typed, verbatim. + isPrimarySuggestion = false; + // The generated HTML string for showing this suggestion in the Vomnibar. + html; + searchUrl; + + constructor(options) { + Object.seal(this); + Object.assign(this, options); + } + + // Returns the relevancy score. + computeRelevancy() { + // We assume that, once the relevancy has been set, it won't change. Completers must set + // either @relevancy or @relevancyFunction. + if (this.relevancy == null) { + this.relevancy = this.relevancyFunction(this); + } + return this.relevancy; + } + + generateHtml() { + if (this.html) return this.html; + const relevancyHtml = showRelevancy + ? `${this.computeRelevancy()}` + : ""; + const insertTextClass = this.insertText ? "" : "no-insert-text"; + const insertTextIndicator = "↪"; // A right hooked arrow. + if (this.insertText && this.isCustomSearch) { + this.title = this.insertText; + } + let faviconHtml = ""; + if (this.description === "tab" && !bgUtils.isFirefox()) { + const faviconUrl = new URL(chrome.runtime.getURL("/_favicon/")); + faviconUrl.searchParams.set("pageUrl", this.url); + faviconUrl.searchParams.set("size", "16"); + faviconHtml = ``; + } + if (this.isCustomSearch) { + this.html = `\ +
+ ${insertTextIndicator}${this.description} + ${this.highlightQueryTerms(Utils.escapeHtml(this.title))} + ${relevancyHtml} +
\ +`; + } else { + this.html = `\ +
+ ${insertTextIndicator}${this.description} + ${this.highlightQueryTerms(Utils.escapeHtml(this.title))} +
+
+ ${insertTextIndicator}${faviconHtml}${ + this.highlightQueryTerms(Utils.escapeHtml(this.shortenUrl())) + } + ${relevancyHtml} +
\ +`; + } + return this.html; + } + + // Use neat trick to snatch a domain (http://stackoverflow.com/a/8498668). + getUrlRoot(url) { + const a = document.createElement("a"); + a.href = url; + return a.protocol + "//" + a.hostname; + } + + getHostname(url) { + const a = document.createElement("a"); + a.href = url; + return a.hostname; + } + + stripTrailingSlash(url) { + if (url[url.length - 1] === "/") { + url = url.substring(url, url.length - 1); + } + return url; + } + + // Push the ranges within `string` which match `term` onto `ranges`. + pushMatchingRanges(string, term, ranges) { + let textPosition = 0; + // Split `string` into a (flat) list of pairs: + // - for i=0,2,4,6,... + // - splits[i] is unmatched text + // - splits[i+1] is the following matched text (matching `term`) + // (except for the final element, for which there is no following matched text). + // Example: + // - string = "Abacab" + // - term = "a" + // - splits = [ "", "A", "b", "a", "c", "a", b" ] + // UM M UM M UM M UM (M=Matched, UM=Unmatched) + const splits = string.split(RegexpCache.get(term, "(", ")")); + for (let index = 0, end = splits.length - 2; index <= end; index += 2) { + const unmatchedText = splits[index]; + const matchedText = splits[index + 1]; + // Add the indices spanning `matchedText` to `ranges`. + textPosition += unmatchedText.length; + ranges.push([textPosition, textPosition + matchedText.length]); + textPosition += matchedText.length; + } + } + + // Wraps each occurence of the query terms in the given string in a . + highlightQueryTerms(string) { + if (!this.highlightTerms) return string; + let ranges = []; + const escapedTerms = this.queryTerms.map((term) => Utils.escapeHtml(term)); + for (const term of escapedTerms) { + this.pushMatchingRanges(string, term, ranges); + } + + if (ranges.length === 0) { + return string; + } + + ranges = this.mergeRanges(ranges.sort((a, b) => a[0] - b[0])); + // Replace portions of the string from right to left. + ranges = ranges.sort((a, b) => b[0] - a[0]); + for (const [start, end] of ranges) { + string = string.substring(0, start) + + `${string.substring(start, end)}` + + string.substring(end); + } + return string; + } + + // Merges the given list of ranges such that any overlapping regions are combined. E.g. + // mergeRanges([0, 4], [3, 6]) => [0, 6]. A range is [startIndex, endIndex]. + mergeRanges(ranges) { + let previous = ranges.shift(); + const mergedRanges = [previous]; + for (const range of ranges) { + if (previous[1] >= range[0]) { + previous[1] = Math.max(range[1], previous[1]); + } else { + mergedRanges.push(range); + previous = range; + } + } + return mergedRanges; + } + + // Simplify a suggestion's URL (by removing those parts which aren't useful for display or + // comparison). + shortenUrl() { + if (this.shortUrl != null) { + return this.shortUrl; + } + // We get easier-to-read shortened URLs if we URI-decode them. + let url = (Utils.decodeURIByParts(this.url) || this.url).toLowerCase(); + for (const [filter, replacements] of Suggestion.stripPatterns) { + if (new RegExp(filter).test(url)) { + for (const replace of replacements) { + url = url.replace(replace, ""); + } + } + } + + this.shortUrl = url; + return this.shortUrl; + } + + // Boost a relevancy score by a factor (in the range (0,1.0)), while keeping the score in the + // range [0,1]. This makes greater adjustments to scores near the middle of the range (so, very + // poor relevancy scores remain very poor). + static boostRelevancyScore(factor, score) { + return score + (score < 0.5 ? score * factor : (1.0 - score) * factor); + } +} + +// Patterns to strip from URLs; of the form [ [ filter, replacements ], [ filter, replacements ], ... ] +// - filter is a regexp string; a URL must match this regexp first. +// - replacements (itself a list) is a list of regexp objects, each of which is removed from URLs +// matching the filter. +// +// Note. This includes site-specific patterns for very-popular sites with URLs which don't work well +// in the vomnibar. +// +Suggestion.stripPatterns = [ + // Google search specific replacements; this replaces query parameters which are known to not be + // helpful. There's some additional information here: + // http://www.teknoids.net/content/google-search-parameters-2012 + [ + "^https?://www\\.google\\.(com|ca|com\\.au|co\\.uk|ie)/.*[&?]q=", + "ei gws_rd url ved usg sa usg sig2 bih biw cd aqs ie sourceid es_sm" + .split(/\s+/).map((param) => new RegExp(`\&${param}=[^&]+`)), + ], + + // On Google maps, we get a new history entry for every pan and zoom event. + ["^https?://www\\.google\\.(com|ca|com\\.au|co\\.uk|ie)/maps/place/.*/@", [new RegExp("/@.*")]], + + // General replacements; replaces leading and trailing fluff. + [".", ["^https?://", "\\W+$"].map((re) => new RegExp(re))], +]; + +const folderSeparator = "/"; + +// If these names occur as top-level bookmark names, then they are not included in the names of +// bookmark folders. +const ignoredTopLevelBookmarks = { + "Other Bookmarks": true, + "Mobile Bookmarks": true, + "Bookmarks Bar": true, +}; + +// this.bookmarks are loaded asynchronously when refresh() is called. +export class BookmarkCompleter { + async filter({ queryTerms }) { + if (!this.bookmarks) await this.refresh(); + + // If the folder separator character is the first character in any query term, then use the + // bookmark's full path as its title. Otherwise, just use the its regular title. + let results; + const usePathAndTitle = queryTerms.reduce( + (prev, term) => prev || term.startsWith(folderSeparator), + false, + ); + if (queryTerms.length > 0) { + results = this.bookmarks.filter((bookmark) => { + const suggestionTitle = usePathAndTitle ? bookmark.pathAndTitle : bookmark.title; + if (bookmark.hasJavascriptProtocol == null) { + bookmark.hasJavascriptProtocol = UrlUtils.hasJavascriptProtocol(bookmark.url); + } + if (bookmark.hasJavascriptProtocol && bookmark.shortUrl == null) { + bookmark.shortUrl = "javascript:..."; + } + const suggestionUrl = bookmark.shortUrl != null ? bookmark.shortUrl : bookmark.url; + return ranking.matches(queryTerms, suggestionUrl, suggestionTitle); + }); + } else { + results = []; + } + const suggestions = results.map((bookmark) => { + return new Suggestion({ + queryTerms, + description: "bookmark", + url: bookmark.url, + title: usePathAndTitle ? bookmark.pathAndTitle : bookmark.title, + relevancyFunction: this.computeRelevancy, + shortUrl: bookmark.shortUrl, + deDuplicate: bookmark.shortUrl == null, + }); + }); + return suggestions; + } + + async refresh() { + // In case refresh() is called multiple times before chrome.bookmarks.getTree() completes, only + // call chrome.bookmarks.getTree() once. + if (this.bookmarksTreePromise) { + await this.bookmarksTreePromise; + return; + } + + this.bookmarksTreePromise = chrome.bookmarks.getTree(); + const bookmarksTree = await this.bookmarksTreePromise; + this.bookmarks = this.traverseBookmarks(bookmarksTree) + .filter((b) => b.url != null); + this.bookmarksTreePromise = null; + } + + // Traverses the bookmark hierarchy, and returns a flattened list of all bookmarks. + traverseBookmarks(bookmarks) { + const results = []; + for (const folder of bookmarks) { + this.traverseBookmarksRecursive(folder, results); + } + return results; + } + + // Recursive helper for `traverseBookmarks`. + traverseBookmarksRecursive(bookmark, results, parent) { + if (parent == null) { + parent = { pathAndTitle: "" }; + } + if ( + bookmark.title && + !((parent.pathAndTitle === "") && ignoredTopLevelBookmarks[bookmark.title]) + ) { + bookmark.pathAndTitle = parent.pathAndTitle + folderSeparator + bookmark.title; + } else { + bookmark.pathAndTitle = parent.pathAndTitle; + } + results.push(bookmark); + if (bookmark.children) { + for (const child of bookmark.children) { + this.traverseBookmarksRecursive(child, results, bookmark); + } + } + } + + computeRelevancy(suggestion) { + return ranking.wordRelevancy( + suggestion.queryTerms, + suggestion.shortUrl || suggestion.url, + suggestion.title, + ); + } +} + +export class HistoryCompleter { + // - seenTabToOpenCompletionList: true if the user has typed only , and nothing else. + // We interpret this to mean that they want to see all of their history in the Vomnibar, sorted + // by recency. + async filter({ queryTerms, seenTabToOpenCompletionList }) { + await HistoryCache.onLoaded(); + + let results; + if (queryTerms.length > 0) { + results = HistoryCache.history + .filter((entry) => ranking.matches(queryTerms, entry.url, entry.title)); + } else if (seenTabToOpenCompletionList) { + // The user has typed to open the entire history (sorted by recency). + results = HistoryCache.history; + } else { + results = []; + } + + const suggestions = results.map((entry) => { + return new Suggestion({ + queryTerms, + description: "history", + url: entry.url, + title: entry.title, + relevancyFunction: this.computeRelevancy, + relevancyData: entry, + }); + }); + return suggestions; + } + + computeRelevancy(suggestion) { + const historyEntry = suggestion.relevancyData; + const recencyScore = ranking.recencyScore(historyEntry.lastVisitTime); + // If there are no query terms, then relevancy is based on recency alone. + if (suggestion.queryTerms.length === 0) return recencyScore; + const wordRelevancy = ranking.wordRelevancy( + suggestion.queryTerms, + suggestion.url, + suggestion.title, + ); + // Average out the word score and the recency. Recency has the ability to pull the score up, but + // not down. + return (wordRelevancy + Math.max(recencyScore, wordRelevancy)) / 2; + } +} + +// The domain completer is designed to match a single-word query which looks like it is a domain. +// This supports the user experience where they quickly type a partial domain, hit tab -> enter, and +// expect to arrive there. +export class DomainCompleter { + // A map of domain -> { entry: , referenceCount: } + // - `entry` is the most recently accessed page in the History within this domain. + // - `referenceCount` is a count of the number of History entries within this domain. + // If `referenceCount` goes to zero, the domain entry can and should be deleted. + domains; + + async filter({ queryTerms, query }) { + const isMultiWordQuery = /\S\s/.test(query); + if ((queryTerms.length === 0) || isMultiWordQuery) return []; + if (!this.domains) await this.populateDomains(); + + const firstTerm = queryTerms[0]; + const domains = Object.keys(this.domains || []).filter((d) => d.includes(firstTerm)); + const domainsAndScores = this.sortDomainsByRelevancy(queryTerms, domains); + const result = new Suggestion({ + queryTerms, + description: "domain", + // This should be the URL or the domain, or an empty string, but not null. + url: domainsAndScores[0]?.[0] || "", + relevancy: 2.0, + }); + return result.url.length > 0 ? [result] : []; + } + + // Returns a list of domains of the form: [ [domain, relevancy], ... ] + sortDomainsByRelevancy(queryTerms, domainCandidates) { + const results = []; + for (const domain of domainCandidates) { + const recencyScore = ranking.recencyScore(this.domains[domain].entry.lastVisitTime || 0); + const wordRelevancy = ranking.wordRelevancy(queryTerms, domain, null); + const score = (wordRelevancy + Math.max(recencyScore, wordRelevancy)) / 2; + results.push([domain, score]); + } + results.sort((a, b) => b[1] - a[1]); + return results; + } + + async populateDomains() { + await HistoryCache.onLoaded(); + this.domains = {}; + for (const entry of HistoryCache.history) { + this.onVisited(entry); + } + chrome.history.onVisited.addListener(this.onVisited.bind(this)); + chrome.history.onVisitRemoved.addListener(this.onVisitRemoved.bind(this)); + } + + onVisited(newPage) { + const domain = this.parseDomainAndScheme(newPage.url); + if (domain) { + const slot = this.domains[domain] || + (this.domains[domain] = { entry: newPage, referenceCount: 0 }); + // We want each entry in our domains map to point to the most recent History entry for that + // domain. + if (slot.entry.lastVisitTime < newPage.lastVisitTime) { + slot.entry = newPage; + } + slot.referenceCount += 1; + } + } + + onVisitRemoved(toRemove) { + if (toRemove.allHistory) { + this.domains = {}; + } else { + for (const url of toRemove.urls) { + const domain = this.parseDomainAndScheme(url); + const entry = this.domains[domain]; + if (entry == null) continue; + entry.referenceCount--; + if (entry.referenceCount <= 0) { + delete this.domains[domain]; + } + } + } + } + + // Return something like "http://www.example.com" or false. + parseDomainAndScheme(url) { + if (UrlUtils.urlHasProtocol(url) && !UrlUtils.hasChromeProtocol(url)) { + return url.split("/", 3).join("/"); + } + } +} + +// Searches through all open tabs, matching on title and URL. +// If the query is empty, then return a list of open tabs, sorted by recency. +export class TabCompleter { + async filter({ queryTerms }) { + await bgUtils.tabRecency.init(); + // We search all tabs, not just those in the current window. + const tabs = await chrome.tabs.query({}); + const results = tabs.filter((tab) => ranking.matches(queryTerms, tab.url, tab.title)); + const suggestions = results + .map((tab) => { + const suggestion = new Suggestion({ + queryTerms, + description: "tab", + url: tab.url, + title: tab.title, + tabId: tab.id, + deDuplicate: false, + }); + suggestion.relevancy = this.computeRelevancy(suggestion); + return suggestion; + }) + .sort((a, b) => b.relevancy - a.relevancy); + // Boost relevancy with a multiplier so a relevant tab doesn't get crowded out by results from + // competing completers. To prevent tabs from crowding out everything else in turn, penalize + // them for being further down the results list by scaling on a hyperbola starting at 1 and + // approaching 0 asymptotically for higher indexes. The multiplier and the curve fall-off were + // subjectively chosen on the grounds that they seem to work pretty well. + suggestions.forEach(function (suggestion, i) { + suggestion.relevancy *= 8; + suggestion.relevancy /= (i / 4) + 1; + }); + return suggestions; + } + + computeRelevancy(suggestion) { + if (suggestion.queryTerms.length > 0) { + return ranking.wordRelevancy(suggestion.queryTerms, suggestion.url, suggestion.title); + } else { + return bgUtils.tabRecency.recencyScore(suggestion.tabId); + } + } +} + +export class SearchEngineCompleter { + cancel() { + completionSearch.cancel(); + } + + // Returns the UserSearchEngine for the given query. Returns null if the query does not begin with + // a keyword from one of the user's search engines. + getUserSearchEngineForQuery(query) { + const parts = query.trimStart().split(/\s+/); + // For a keyword "w", we match "w search terms" and "w ", but not "w" on its own. + const keyword = parts[0]; + if (parts.length <= 1) return null; + // Don't match queries for built-in properties like "constructor". See #4396. + if (Object.hasOwn(userSearchEngines.keywordToEngine, keyword)) { + return userSearchEngines.keywordToEngine[keyword]; + } + return null; + } + + refresh() { + userSearchEngines.set(Settings.get("searchEngines")); + } + + async filter(request) { + const { queryTerms } = request; + + const keyword = queryTerms[0]; + const queryTermsWithoutKeyword = queryTerms.slice(1); + + const userSearchEngine = userSearchEngines.keywordToEngine[keyword]; + if (!userSearchEngine) return []; + + const searchUrl = userSearchEngine.url; + + const completions = await completionSearch.complete(searchUrl, queryTermsWithoutKeyword); + + const makeSuggestion = (query) => { + const url = UrlUtils.createSearchUrl(query, searchUrl); + return new Suggestion({ + queryTerms, + description: userSearchEngine.description, + url, + title: query, + searchUrl, + highlightTerms: false, + isCustomSearch: true, + relevancy: null, + relevancyFunction: this.computeRelevancy, + }); + }; + + const suggestions = completions.map((completion) => { + const s = makeSuggestion(completion); + s.insertText = completion; + return s; + }); + + if (suggestions[0]) suggestions[0].relevancy = 1.0; + + // This is a suggestion which contains the user's query. It's the "search for exactly what I + // just typed" option. It should always appear first in the list. + const primarySuggestion = makeSuggestion(queryTermsWithoutKeyword.join(" ")); + primarySuggestion.relevancy = 2; + primarySuggestion.isPrimarySuggestion = true; + primarySuggestion.autoSelect = true; + suggestions.unshift(primarySuggestion); + + return suggestions; + } + + computeRelevancy({ queryTerms, title }) { + // Tweaks: + // - Calibration: we boost relevancy scores to try to achieve an appropriate balance between + // relevancy scores here, and those provided by other completers. + // - Relevancy depends only on the title (which is the search terms), and not on the URL. + return Suggestion.boostRelevancyScore( + 0.5, + 0.7 * ranking.wordRelevancy(queryTerms, title, title), + ); + } +} + +SearchEngineCompleter.debug = false; + +// A completer which calls filter() on many completers, aggregates the results, ranks them, and +// returns the top 10. All queries from the vomnibar come through a multi completer. +const maxResults = 10; + +export class MultiCompleter { + constructor(completers) { + this.completers = completers; + } + + refresh() { + for (const c of this.completers) { + if (c.refresh) c.refresh(); + } + } + + cancel() { + for (const c of this.completers) { + c.cancel?.(); + } + } + + async filter(request) { + const searchEngineCompleter = this.completers.find((c) => c instanceof SearchEngineCompleter); + const query = request.query; + const queryTerms = request.queryTerms; + + // The only UX where we support showing results when there are no query terms is via + // Vomnibar.activateTabSelection, where we show the list of open tabs by recency. + const isTabCompleter = this.completers.length == 1 && + this.completers[0] instanceof TabCompleter; + if (queryTerms.length == 0 && !isTabCompleter) { + return []; + } + + const queryMatchesUserSearchEngine = searchEngineCompleter?.getUserSearchEngineForQuery(query); + + // If the user's query matches one of their custom search engines, then use only that engine to + // provide completions for their query. + const completers = queryMatchesUserSearchEngine + ? [searchEngineCompleter] + : this.completers.filter((c) => c != searchEngineCompleter); + + RegexpCache.clear(); + + const promises = completers.map((c) => c.filter(request)); + let results = (await Promise.all(promises)).flat(1); + results = this.postProcessSuggestions(request, queryTerms, results); + return results; + } + + // Rank them, simplify the URLs, and de-duplicate suggestions with the same simplified URL. + postProcessSuggestions(request, queryTerms, suggestions) { + for (const s of suggestions) { + s.computeRelevancy(queryTerms); + } + suggestions.sort((a, b) => b.relevancy - a.relevancy); + + // Simplify URLs and remove duplicates (duplicate simplified URLs, that is). + let count = 0; + const seenUrls = {}; + + const dedupedSuggestions = []; + for (const s of suggestions) { + const url = s.shortenUrl(); + if (s.deDuplicate && seenUrls[url]) continue; + if (count++ === maxResults) break; + seenUrls[url] = s; + dedupedSuggestions.push(s); + } + + // Give each completer the opportunity to tweak the suggestions. + for (const completer of this.completers) { + if (completer.postProcessSuggestions) { + completer.postProcessSuggestions(request, dedupedSuggestions); + } + } + + // Generate HTML for the remaining suggestions and return them. + for (const s of dedupedSuggestions) { + s.generateHtml(request); + } + + return dedupedSuggestions; + } +} + +// Provides cached access to Chrome's history. As the user browses to new pages, we add those pages +// to this history cache. +export const HistoryCache = { + size: 20000, + // An array of History items returned from Chrome. + history: null, + + reset() { + this.history = null; + chrome.history.onVisited.removeListener(this._onVisitedListener); + chrome.history.onVisitRemoved.removeListener(this._onVisitRemovedListener); + }, + + async onLoaded() { + if (this.history) return; + await this.fetchHistory(); + }, + + async fetchHistory() { + if (this.chromeHistoryPromise) { + await this.chromeHistoryPromise; + return; + } + this.chromeHistoryPromise = chrome.history.search({ + text: "", + maxResults: this.size, + startTime: 0, + }); + + const history = await this.chromeHistoryPromise; + + // On Firefox, some history entries do not have titles. + for (const entry of history) { + if (entry.title == null) entry.title = ""; + } + history.sort(this.compareHistoryByUrl); + this.history = history; + chrome.history.onVisited.addListener(this._onVisitedListener); + chrome.history.onVisitRemoved.addListener(this._onVisitRemovedListener); + this.chromeHistoryPromise = null; + }, + + compareHistoryByUrl(a, b) { + if (a.url === b.url) return 0; + if (a.url > b.url) return 1; + return -1; + }, + + // When a page we've seen before has been visited again, be sure to replace our History item so it + // has the correct "lastVisitTime". That's crucial for ranking Vomnibar suggestions. + onVisited(newPage) { + // On Firefox, some history entries do not have titles. + if (newPage.title == null) newPage.title = ""; + const i = HistoryCache.binarySearch(newPage, this.history, this.compareHistoryByUrl); + const pageWasFound = this.history[i]?.url == newPage.url; + if (pageWasFound) { + this.history[i] = newPage; + } else { + this.history.splice(i, 0, newPage); + } + }, + + // When a page is removed from the chrome history, remove it from the vimium history too. + onVisitRemoved(toRemove) { + if (toRemove.allHistory) { + this.history = []; + } else { + for (const url of toRemove.urls) { + const i = HistoryCache.binarySearch({ url }, this.history, this.compareHistoryByUrl); + if ((i < this.history.length) && (this.history[i].url === url)) { + this.history.splice(i, 1); + } + } + } + }, +}; + +HistoryCache._onVisitedListener = HistoryCache.onVisited.bind(HistoryCache); +HistoryCache._onVisitRemovedListener = HistoryCache.onVisitRemoved.bind(HistoryCache); + +// Returns the matching index or the closest matching index if the element is not found. That means +// you must check the element at the returned index to know whether the element was actually found. +// This method is used for quickly searching through our history cache. +HistoryCache.binarySearch = function (targetElement, array, compareFunction) { + let element, middle; + let high = array.length - 1; + let low = 0; + + while (low <= high) { + middle = Math.floor((low + high) / 2); + element = array[middle]; + const compareResult = compareFunction(element, targetElement); + if (compareResult > 0) { + high = middle - 1; + } else if (compareResult < 0) { + low = middle + 1; + } else { + return middle; + } + } + // We didn't find the element. Return the position where it should be in this array. + if (compareFunction(element, targetElement) < 0) { + return middle + 1; + } else { + return middle; + } +}; diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/background_scripts/completion/ranking.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/background_scripts/completion/ranking.js new file mode 100644 index 0000000..006c692 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/background_scripts/completion/ranking.js @@ -0,0 +1,165 @@ +// Utilities which help us compute a relevancy score for a given item. + +// Whether the given things (usually URLs or titles) match any one of the query terms. +// This is used to prune out irrelevant suggestions before we try to rank them, and for +// calculating word relevancy. Every term must match at least one thing. +export function matches(queryTerms, ...things) { + for (const term of queryTerms) { + const regexp = RegexpCache.get(term); + let matchedTerm = false; + for (const thing of things) { + if (!matchedTerm) { + matchedTerm = thing.match(regexp); + } + } + if (!matchedTerm) return false; + } + return true; +} + +// Weights used for scoring matches. +const matchWeights = { + matchAnywhere: 1, + matchStartOfWord: 1, + matchWholeWord: 1, + // The following must be the sum of the three weights above; it is used for normalization. + maximumScore: 3, + // + // Calibration factor for balancing word relevancy and recency. + recencyCalibrator: 2.0 / 3.0, +}; + +// The current value of 2.0/3.0 has the effect of: +// - favoring the contribution of recency when matches are not on word boundaries ( because 2.0/3.0 > (1)/3 ) +// - favoring the contribution of word relevance when matches are on whole words ( because 2.0/3.0 < (1+1+1)/3 ) + +// Calculate a score for matching term against string. +// The score is in the range [0, matchWeights.maximumScore], see above. +// Returns: [ score, count ], where count is the number of matched characters in string. +function scoreTerm(term, string) { + let score = 0; + let count = 0; + const nonMatching = string.split(RegexpCache.get(term)); + if (nonMatching.length > 1) { + // Have match. + score = matchWeights.matchAnywhere; + count = nonMatching.reduce((p, c) => p - c.length, string.length); + if (RegexpCache.get(term, "\\b").test(string)) { + // Have match at start of word. + score += matchWeights.matchStartOfWord; + if (RegexpCache.get(term, "\\b", "\\b").test(string)) { + // Have match of whole word. + score += matchWeights.matchWholeWord; + } + } + } + return [score, count < string.length ? count : string.length]; +} + +// Returns a number between [0, 1] indicating how often the query terms appear in the url and title. +export function wordRelevancy(queryTerms, url, title) { + let titleCount, titleScore; + let urlScore = (titleScore = 0.0); + let urlCount = (titleCount = 0); + // Calculate initial scores. + for (const term of queryTerms) { + let [s, c] = scoreTerm(term, url); + urlScore += s; + urlCount += c; + if (title) { + [s, c] = scoreTerm(term, title); + titleScore += s; + titleCount += c; + } + } + + const maximumPossibleScore = matchWeights.maximumScore * queryTerms.length; + + // Normalize scores. + urlScore /= maximumPossibleScore; + urlScore *= normalizeDifference(urlCount, url.length); + + if (title) { + titleScore /= maximumPossibleScore; + titleScore *= normalizeDifference(titleCount, title.length); + } else { + titleScore = urlScore; + } + + // Prefer matches in the title over matches in the URL. + // In other words, don't let a poor urlScore pull down the titleScore. + // For example, urlScore can be unreasonably poor if the URL is very long. + if (urlScore < titleScore) { + urlScore = titleScore; + } + + // Return the average. + return (urlScore + titleScore) / 2; +} + +// Untested alternative to the above: +// - Don't let a poor urlScore pull down a good titleScore, and don't let a poor titleScore pull +// down a good urlScore. +// +// return Math.max(urlScore, titleScore) + +let oneMonthAgo = 1000 * 60 * 60 * 24 * 30; + +// Returns a score between [0, 1] which indicates how recent the given timestamp is. Items which +// are over a month old are counted as 0. This range is quadratic, so an item from one day ago has +// a much stronger score than an item from two days ago. +export function recencyScore(lastAccessedTime) { + const recency = Date.now() - lastAccessedTime; + const recencyDifference = Math.max(0, oneMonthAgo - recency) / oneMonthAgo; + + // recencyScore is between [0, 1]. It is 1 when recenyDifference is 0. This quadratic equation + // will incresingly discount older history entries. + let recencyScore = recencyDifference * recencyDifference * recencyDifference; + + // Calibrate recencyScore vis-a-vis word-relevancy scores. + return recencyScore *= matchWeights.recencyCalibrator; +} + +// Takes the difference of two numbers and returns a number between [0, 1] (the percentage difference). +function normalizeDifference(a, b) { + const max = Math.max(a, b); + return (max - Math.abs(a - b)) / max; +} + +// We cache regexps because we use them frequently when comparing a query to history entries and +// bookmarks, and we don't want to create fresh objects for every comparison. +export const RegexpCache = { + init() { + this.initialized = true; + this.clear(); + }, + + clear() { + this.cache = {}; + }, + + // Get rexexp for `string` from cache, creating it if necessary. + // Regexp meta-characters in `string` are escaped. + // Regexp is wrapped in `prefix`/`suffix`, which may contain meta-characters (these are not + // escaped). + // With their default values, `prefix` and `suffix` have no effect. + // Example: + // - string="go", prefix="\b", suffix="" + // - this returns regexp matching "google", but not "agog" (the "go" must occur at the start of + // a word) + // TODO: `prefix` and `suffix` might be useful in richer word-relevancy scoring. + get(string, prefix, suffix) { + if (prefix == null) prefix = ""; + if (suffix == null) suffix = ""; + if (!this.initialized) this.init(); + let regexpString = Utils.escapeRegexSpecialCharacters(string); + // Avoid cost of constructing new strings if prefix/suffix are empty (which is expected to be a + // common case). + if (prefix) regexpString = prefix + regexpString; + if (suffix) regexpString = regexpString + suffix; + // Smartcase: Regexp is case insensitive, unless `string` contains a capital letter (testing + // `string`, not `regexpString`). + return this.cache[regexpString] || + (this.cache[regexpString] = new RegExp(regexpString, Utils.hasUpperCase(string) ? "" : "i")); + }, +}; diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/background_scripts/completion/search_engines.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/background_scripts/completion/search_engines.js new file mode 100644 index 0000000..5056db7 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/background_scripts/completion/search_engines.js @@ -0,0 +1,266 @@ +// An engine provides search suggestions for a online search engine. +// +// An "engineUrl" is used for fetching suggestions, whereas a "searchUrl" is used for the actual +// search itself. +// +// Each engine defines: +// +// 1. An "engineUrl". This is the URL to use for search completions and is passed as the option +// "engineUrl" to the "BaseEngine" constructor. +// +// 2. One or more regular expressions which define the custom search engine URLs for which the +// completion engine will be used. This is passed as the "regexps" option to the "BaseEngine" +// constructor. +// +// 3. A "parse" function. This takes the text body of an HTTP response and returns a list of +// suggestions (a list of strings). This method is always executed within the context of a +// try/catch block, so errors do not propagate. +// +// 4. Each completion engine *must* include an example custom search engine. The example must +// include an example "keyword" and an example "searchUrl", and may include an example +// "description" and an "explanation". This info is shown as documentation to the user. +// +// Each new completion engine must be added to the list "CompletionEngines" at the bottom of this +// file. +// +// The lookup logic which uses these completion engines is in "./completers.js". +// + +// A base class for common regexp-based matching engines. "options" must define: +// options.engineUrl: the URL to use for the completion engine. This must be a string. +// options.regexps: one or regular expressions. This may either a single string or a list of +// strings. +// options.example: an example object containing at least "keyword" and "searchUrl", and optional +// "description". +// TODO(philc): This base class is doing very little. We should remove it and use composition. +class BaseEngine { + constructor(options) { + Object.assign(this, options); + this.regexps = this.regexps.map((regexp) => new RegExp(regexp)); + } + + match(searchUrl) { + return Utils.matchesAnyRegexp(this.regexps, searchUrl); + } + getUrl(queryTerms) { + return UrlUtils.createSearchUrl(queryTerms.join(" "), this.engineUrl); + } +} + +export class Google extends BaseEngine { + constructor() { + super({ + engineUrl: "http://suggestqueries.google.com/complete/search?client=chrome&q=%s", + regexps: ["^https?://[a-z]+\\.google\\.(com|ie|co\\.(uk|jp)|ca|com\\.au)/"], + example: { + searchUrl: "https://www.google.com/search?q=%s", + keyword: "g", + }, + }); + } + + parse(text) { + return JSON.parse(text)[1]; + } +} + +const googleMapsPrefix = "map of "; + +export class GoogleMaps extends BaseEngine { + constructor() { + super({ + engineUrl: + `http://suggestqueries.google.com/complete/search?client=chrome&ds=yt&q=${googleMapsPrefix}%s`, + regexps: ["^https?://[a-z]+\\.google\\.(com|ie|co\\.(uk|jp)|ca|com\\.au)/maps"], + example: { + searchUrl: "https://www.google.com/maps?q=%s", + keyword: "m", + explanation: `\ +This uses regular Google completion, but prepends the text "map of " to the query. It works +well for places, countries, states, geographical regions and the like, but will not perform address +search.\ +`, + }, + }); + } + + parse(text) { + return JSON.parse(text)[1] + .filter((suggestion) => suggestion.startsWith(googleMapsPrefix)) + .map((suggestion) => suggestion.slice(googleMapsPrefix)); + } +} + +export class Youtube extends BaseEngine { + constructor() { + super({ + engineUrl: "http://suggestqueries.google.com/complete/search?client=chrome&ds=yt&q=%s", + regexps: ["^https?://[a-z]+\\.youtube\\.com/results"], + example: { + searchUrl: "https://www.youtube.com/results?search_query=%s", + keyword: "y", + }, + }); + } + + parse(text) { + return JSON.parse(text)[1]; + } +} + +export class Wikipedia extends BaseEngine { + constructor() { + super({ + engineUrl: "https://en.wikipedia.org/w/api.php?action=opensearch&format=json&search=%s", + regexps: ["^https?://[a-z]+\\.wikipedia\\.org/"], + example: { + searchUrl: "https://www.wikipedia.org/w/index.php?title=Special:Search&search=%s", + keyword: "w", + }, + }); + } + + parse(text) { + return JSON.parse(text)[1]; + } +} + +export class Bing extends BaseEngine { + constructor() { + super({ + engineUrl: "https://api.bing.com/osjson.aspx?query=%s", + regexps: ["^https?://www\\.bing\\.com/search"], + example: { + searchUrl: "https://www.bing.com/search?q=%s", + keyword: "b", + }, + }); + } + + parse(text) { + return JSON.parse(text)[1]; + } +} + +export class Amazon extends BaseEngine { + constructor() { + super({ + engineUrl: + "https://completion.amazon.com/api/2017/suggestions?mid=ATVPDKIKX0DER&alias=aps&prefix=%s", + regexps: ["^https?://(www|smile)\\.amazon\\.(com|co\\.uk|ca|de|com\\.au)/s/"], + example: { + searchUrl: "https://www.amazon.com/s/?field-keywords=%s", + keyword: "a", + }, + }); + } + + parse(text) { + return JSON.parse(text).suggestions.map((suggestion) => suggestion.value); + } +} + +export class DuckDuckGo extends BaseEngine { + constructor() { + super({ + engineUrl: "https://duckduckgo.com/ac/?q=%s", + regexps: ["^https?://([a-z]+\\.)?duckduckgo\\.com/"], + example: { + searchUrl: "https://duckduckgo.com/?q=%s", + keyword: "d", + }, + }); + } + + parse(text) { + return JSON.parse(text).map((suggestion) => suggestion.phrase); + } +} + +export class Webster extends BaseEngine { + constructor() { + super({ + engineUrl: "https://www.merriam-webster.com/lapi/v1/mwol-search/autocomplete?search=%s", + regexps: ["^https?://www.merriam-webster.com/dictionary/"], + example: { + searchUrl: "https://www.merriam-webster.com/dictionary/%s", + keyword: "dw", + description: "Dictionary", + }, + }); + } + + parse(text) { + return JSON.parse(text).docs.map((suggestion) => suggestion.word); + } +} + +// Qwant is a privacy-friendly search engine. +export class Qwant extends BaseEngine { + constructor() { + super({ + engineUrl: "https://api.qwant.com/api/suggest?q=%s", + regexps: ["^https?://www\\.qwant\\.com/"], + example: { + searchUrl: "https://www.qwant.com/?q=%s", + keyword: "qw", + }, + }); + } + + parse(text) { + return JSON.parse(text).data.items.map((suggestion) => suggestion.value); + } +} + +// Brave is a privacy-friendly search engine. +export class Brave extends BaseEngine { + constructor() { + super({ + engineUrl: "https://search.brave.com/api/suggest?rich=false&q=%s", + regexps: ["^https?://search\\.brave\\.com/"], + example: { + searchUrl: "https://search.brave.com/search?q=%s", + keyword: "br", + }, + }); + } + + parse(text) { + return JSON.parse(text)[1]; + } +} + +// Kagi is a paid ad-free search engine +export class Kagi extends BaseEngine { + constructor() { + super({ + engineUrl: "https://kagi.com/autosuggest?q=%s", + regexps: ["^https?://www\\.kagi\\.com/"], + example: { + searchUrl: "https://www.kagi.com/search?q=%s", + keyword: "k", + }, + }); + } + + parse(text) { + return JSON.parse(text).map((suggestion) => suggestion.t); + } +} + +// On the user-facing documentation page pages/doc_search_completion.html, the completion search +// engines will be shown in this order. +export const list = [ + Youtube, + GoogleMaps, + Google, + DuckDuckGo, + Wikipedia, + Bing, + Amazon, + Webster, + Brave, + Qwant, + Kagi, +]; diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/background_scripts/completion/search_wrapper.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/background_scripts/completion/search_wrapper.js new file mode 100644 index 0000000..a89c221 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/background_scripts/completion/search_wrapper.js @@ -0,0 +1,171 @@ +import * as searchEngines from "./search_engines.js"; + +// This is a wrapper class for completion engines. It handles the case where a custom search engine +// includes a prefix query term (or terms). For example: +// +// https://www.google.com/search?q=javascript+%s +// +// In this case, we get better suggestions if we include the term "javascript" in queries sent to +// the completion engine. This wrapper handles adding such prefixes to completion-engine queries and +// removing them from the resulting suggestions. +class EnginePrefixWrapper { + constructor(searchUrl, engine) { + this.searchUrl = searchUrl; + this.engine = engine; + } + + getUrl(queryTerms) { + // This tests whether @searchUrl contains something of the form "...=abc+def+%s...", from which + // we extract a prefix of the form "abc def ". + if (/\=.+\+%s/.test(this.searchUrl)) { + let terms = this.searchUrl.replace(/\+%s.*/, ""); + terms = terms.replace(/.*=/, ""); + terms = terms.replace(/\+/g, " "); + + queryTerms = [...terms.split(" "), ...queryTerms]; + const prefix = `${terms} `; + + this.transformSuggestionsFn = (suggestions) => { + return suggestions + .filter((s) => s.startsWith(prefix)) + .map((s) => s.slice(prefix.length)); + }; + } + + return this.engine.getUrl(queryTerms); + } + + parse(responseText) { + const suggestions = this.engine.parse(responseText); + return this.transformSuggestionsFn ? this.transformSuggestionsFn(suggestions) : suggestions; + } +} + +let debug = false; +const inTransit = {}; +const completionCache = new SimpleCache(2 * 60 * 60 * 1000, 5000); // Two hours, 5000 entries. +const engineCache = new SimpleCache(1000 * 60 * 60 * 1000); // 1000 hours. + +// The amount of time to wait for new requests before launching the current request (for example, +// if the user is still typing). +const DELAY = 100; + +// This gets incremented each time we make a request to the completion engine. This allows us to +// dedupe requets which overlap, which is the case when the user is typing fast. +let requestId = 0; + +async function get(url) { + const timeoutDuration = 2500; + const controller = new AbortController(); + let isError = false; + let responseText; + const timer = Utils.setTimeout(timeoutDuration, () => controller.abort()); + + try { + const response = await fetch(url, { signal: controller.signal }); + responseText = await response.text(); + } catch { + // Fetch throws an error if the network is unreachable, etc. + isError = true; + } + + clearTimeout(timer); + + return isError ? null : responseText; +} + +// Look up the completion engine for this searchUrl. +function lookupEngine(searchUrl) { + if (engineCache.has(searchUrl)) { + return engineCache.get(searchUrl); + } else { + for (const engineClass of searchEngines.list) { + const engine = new engineClass(); + if (engine.match(searchUrl)) { + return engineCache.set(searchUrl, engine); + } + } + } +} + +// This is the main entry point. +// - searchUrl is the search engine's URL, e.g. Settings.get("searchUrl"), or a custom search +// engine's URL. This is only used as a key for determining the relevant completion engine. +// - queryTerms are the query terms. +export async function complete(searchUrl, queryTerms) { + const query = queryTerms.join(" ").toLowerCase(); + + // We don't complete queries which are too short: the results are usually useless. + if (query.length < 4) return []; + + // We don't complete regular URLs or Javascript URLs. + if (queryTerms.length == 1 && await UrlUtils.isUrl(query)) return []; + if (UrlUtils.hasJavascriptProtocol(query)) return []; + + const engine = lookupEngine(searchUrl); + if (!engine) return []; + + const completionCacheKey = JSON.stringify([searchUrl, queryTerms]); + if (completionCache.has(completionCacheKey)) { + if (debug) console.log("hit", completionCacheKey); + return completionCache.get(completionCacheKey); + } + + const createTimeoutPromise = (ms) => { + return new Promise((resolve) => { + setTimeout(() => { + resolve(); + }, ms); + }); + }; + + requestId++; + const lastRequestId = requestId; + + // We delay sending a completion request in case the user is still typing. + await createTimeoutPromise(DELAY); + + // If the user has issued a new query while we were waiting, then this query is old; abort it. + if (lastRequestId != requestId) return []; + + const engineWrapper = new EnginePrefixWrapper(searchUrl, engine); + const url = engineWrapper.getUrl(queryTerms); + + if (debug) console.log("GET", url); + const responseText = await get(url); + + // Parsing the response may fail if we receive an unexpectedly-formatted response. In all cases, + // we fall back to the catch clause, below. Therefore, we "fail safe" in the case of incorrect + // or out-of-date completion engine implementations. + let suggestions = []; + let isError = responseText == null; + if (!isError) { + try { + suggestions = engineWrapper.parse(responseText) + // Make all suggestions lower case. It looks odd when suggestions from one + // completion engine are upper case, and those from another are lower case. + .map((s) => s.toLowerCase()) + // Filter out the query itself. It's not adding anything. + .filter((s) => s !== query); + } catch (error) { + if (debug) console.log("error:", error); + isError = true; + } + } + if (isError) { + // We allow failures to be cached too, but remove them after just thirty seconds. + Utils.setTimeout( + 30 * 1000, + () => completionCache.set(completionCacheKey, null), + ); + } + + completionCache.set(completionCacheKey, suggestions); + return suggestions; +} + +// Cancel any pending (ie. blocked on @delay) queries. Does not cancel in-flight queries. This is +// called whenever the user is typing. +export function cancel() { + requestId++; +} diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/background_scripts/exclusions.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/background_scripts/exclusions.js new file mode 100644 index 0000000..aaa2444 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/background_scripts/exclusions.js @@ -0,0 +1,78 @@ +// This module manages manages the exclusion rule setting. An exclusion is an object with two +// attributes: pattern and passKeys. The exclusion rules are an array of such objects. + +const ExclusionRegexpCache = { + cache: {}, + clear(cache) { + this.cache = cache || {}; + }, + get(pattern) { + if (pattern in this.cache) { + return this.cache[pattern]; + } else { + let result; + // We use try/catch to ensure that a broken regexp doesn't wholly cripple Vimium. + try { + result = new RegExp("^" + pattern.replace(/\*/g, ".*") + "$"); + } catch { + if (!globalThis.isUnitTests) { + console.log(`bad regexp in exclusion rule: ${pattern}`); + } + result = /^$/; // Match the empty string. + } + this.cache[pattern] = result; + return result; + } + }, +}; + +// Make RegexpCache, which is required on the page popup, accessible via the Exclusions object. +const RegexpCache = ExclusionRegexpCache; + +// Merge the matching rules for URL, or null. In the normal case, we use the configured @rules; +// hence, this is the default. However, when called from the page popup, we are testing what +// effect candidate new rules would have on the current tab. In this case, the candidate rules are +// provided by the caller. +function getRule(url, rules) { + if (rules == null) { + rules = Settings.get("exclusionRules"); + } + const matchingRules = rules.filter((r) => + r.pattern && (url.search(ExclusionRegexpCache.get(r.pattern)) >= 0) + ); + // An absolute exclusion rule (one with no passKeys) takes priority. + for (const rule of matchingRules) { + if (!rule.passKeys) return rule; + } + // Strip whitespace from all matching passKeys strings, and join them together. + const passKeys = matchingRules.map((r) => r.passKeys.split(/\s+/).join("")).join(""); + // TODO(philc): Remove this commented out code. + // passKeys = (rule.passKeys.split(/\s+/).join "" for rule in matchingRules).join "" + if (matchingRules.length > 0) { + return { passKeys: Utils.distinctCharacters(passKeys) }; + } else { + return null; + } +} + +export function isEnabledForUrl(url) { + const rule = getRule(url); + return { + isEnabledForUrl: !rule || (rule.passKeys.length > 0), + passKeys: rule ? rule.passKeys : "", + }; +} + +function setRules(rules) { + // Callers map a rule to null to have it deleted, and rules without a pattern are useless. + const newRules = rules.filter((rule) => rule?.pattern); + Settings.set("exclusionRules", newRules); +} + +function onSettingsUpdated() { + // NOTE(mrmr1993): In FF, the |rules| argument will be garbage collected when the exclusions + // popup is closed. Do NOT store it/use it asynchronously. + ExclusionRegexpCache.clear(); +} + +Settings.addEventListener("change", () => onSettingsUpdated()); diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/background_scripts/main.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/background_scripts/main.js new file mode 100644 index 0000000..7d37e6b --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/background_scripts/main.js @@ -0,0 +1,933 @@ +import "../lib/utils.js"; +import "../lib/settings.js"; +import "../lib/url_utils.js"; +import "../background_scripts/tab_recency.js"; +import * as bgUtils from "../background_scripts/bg_utils.js"; +import "../background_scripts/all_commands.js"; +import { Commands } from "../background_scripts/commands.js"; +import * as exclusions from "../background_scripts/exclusions.js"; +import "../background_scripts/completion/search_engines.js"; +import "../background_scripts/completion/search_wrapper.js"; +import "../background_scripts/completion/completers.js"; +import "../background_scripts/tab_operations.js"; +import * as marks from "../background_scripts/marks.js"; + +import { + BookmarkCompleter, + DomainCompleter, + HistoryCompleter, + MultiCompleter, + SearchEngineCompleter, + TabCompleter, +} from "./completion/completers.js"; + +// NOTE(philc): This file has many superfluous return statements in its functions, as a result of +// converting from coffeescript to es6. Many can be removed, but I didn't take the time to +// diligently track down precisely which return statements could be removed when I was doing the +// conversion. + +import * as TabOperations from "./tab_operations.js"; + +// Allow Vimium's content scripts to access chrome.storage.session. Otherwise, +// chrome.storage.session will be null in content scripts. +chrome.storage.session.setAccessLevel({ accessLevel: "TRUSTED_AND_UNTRUSTED_CONTEXTS" }); + +// This is exported for use by "marks.js". +globalThis.tabLoadedHandlers = {}; // tabId -> function() + +// A Vimium secret, available only within the current browser session. The secret is a generated +// strong random string. +const randomArray = globalThis.crypto.getRandomValues(new Uint8Array(32)); // 32-byte random token. +const secretToken = randomArray.reduce((a, b) => a.toString(16) + b.toString(16)); +chrome.storage.session.set({ vimiumSecret: secretToken }); + +const completionSources = { + bookmarks: new BookmarkCompleter(), + history: new HistoryCompleter(), + domains: new DomainCompleter(), + tabs: new TabCompleter(), + searchEngines: new SearchEngineCompleter(), +}; + +const completers = { + omni: new MultiCompleter([ + completionSources.bookmarks, + completionSources.history, + completionSources.domains, + completionSources.tabs, + completionSources.searchEngines, + ]), + bookmarks: new MultiCompleter([completionSources.bookmarks]), + tabs: new MultiCompleter([completionSources.tabs]), +}; + +// A query dictionary for `chrome.tabs.query` that will return only the visible tabs. +const visibleTabsQueryArgs = { currentWindow: true }; +if (bgUtils.isFirefox()) { + // Only Firefox supports hidden tabs. + visibleTabsQueryArgs.hidden = false; +} + +function onURLChange(details) { + // sendMessage will throw "Error: Could not establish connection. Receiving end does not exist." + // if there is no Vimium content script loaded in the given tab. This can occur if the user + // navigated to a page where Vimium doesn't have permissions, like chrome:// URLs. This error is + // noisy and mysterious (it usually doesn't have a valid line number), so we silence it. + const message = { + handler: "checkEnabledAfterURLChange", + silenceLogging: true, + }; + chrome.tabs.sendMessage(details.tabId, message, { frameId: details.frameId }) + .catch(() => {}); +} + +// Re-check whether Vimium is enabled for a frame when the URL changes without a reload. +// There's no reliable way to detect when the URL has changed in the content script, so we +// have to use the webNavigation API in our background script. +chrome.webNavigation.onHistoryStateUpdated.addListener(onURLChange); // history.pushState. +chrome.webNavigation.onReferenceFragmentUpdated.addListener(onURLChange); // Hash changed. + +if (!globalThis.isUnitTests) { + // Cache "content_scripts/vimium.css" in chrome.storage.session for UI components. + (function () { + const url = chrome.runtime.getURL("content_scripts/vimium.css"); + fetch(url).then(async (response) => { + if (response.ok) { + chrome.storage.session.set({ vimiumCSSInChromeStorage: await response.text() }); + } + }); + })(); +} + +function muteTab(tab) { + chrome.tabs.update(tab.id, { muted: !tab.mutedInfo.muted }); +} + +function toggleMuteTab(request, sender) { + const currentTab = request.tab; + const tabId = request.tabId; + const registryEntry = request.registryEntry; + + if ((registryEntry.options.all != null) || (registryEntry.options.other != null)) { + // If there are any audible, unmuted tabs, then we mute them; otherwise we unmute any muted tabs. + chrome.tabs.query({ audible: true }, function (tabs) { + let tab; + if (registryEntry.options.other != null) { + tabs = tabs.filter((t) => t.id !== currentTab.id); + } + const audibleUnmutedTabs = tabs.filter((t) => t.audible && !t.mutedInfo.muted); + if (audibleUnmutedTabs.length >= 0) { + chrome.tabs.sendMessage(tabId, { + frameId: sender.frameId, + handler: "showMessage", + message: `Muting ${audibleUnmutedTabs.length} tab(s).`, + }); + for (tab of audibleUnmutedTabs) { + muteTab(tab); + } + } else { + chrome.tabs.sendMessage(tabId, { + frameId: sender.frameId, + handler: "showMessage", + message: "Unmuting all muted tabs.", + }); + for (tab of tabs) { + if (tab.mutedInfo.muted) { + muteTab(tab); + } + } + } + }); + } else { + if (currentTab.mutedInfo.muted) { + chrome.tabs.sendMessage(tabId, { + frameId: sender.frameId, + handler: "showMessage", + message: "Unmuted tab.", + }); + } else { + chrome.tabs.sendMessage(tabId, { + frameId: sender.frameId, + handler: "showMessage", + message: "Muted tab.", + }); + } + muteTab(currentTab); + } +} + +// Find a tab's actual index in a given tab array returned by chrome.tabs.query. In Firefox, there +// may be hidden tabs, so tab.tabIndex may not be the actual index into the array of visible tabs. +function getTabIndex(tab, tabs) { + // First check if the tab is where we expect it, to avoid searching the array. + if (tabs.length > tab.index && tabs[tab.index].index === tab.index) { + return tab.index; + } else { + return tabs.findIndex((t) => t.index === tab.index); + } +} + +// +// Selects the tab with the ID specified in request.id +// +async function selectSpecificTab(request) { + const tab = await chrome.tabs.get(request.id); + // Focus the tab's window. TODO(philc): Why are we null-checking chrome.windows here? + if (chrome.windows != null) { + await chrome.windows.update(tab.windowId, { focused: true }); + } + await chrome.tabs.update(request.id, { active: true }); +} + +function moveTab({ count, tab, registryEntry }) { + if (registryEntry.command === "moveTabLeft") { + count = -count; + } + return chrome.tabs.query(visibleTabsQueryArgs, function (tabs) { + const pinnedCount = (tabs.filter((tab) => tab.pinned)).length; + const minIndex = tab.pinned ? 0 : pinnedCount; + const maxIndex = (tab.pinned ? pinnedCount : tabs.length) - 1; + // The tabs array index of the new position. + const moveIndex = Math.max(minIndex, Math.min(maxIndex, getTabIndex(tab, tabs) + count)); + return chrome.tabs.move(tab.id, { + index: tabs[moveIndex].index, + }); + }); +} + +function createRepeatCommand(command) { + return async function (request) { + let i = request.count - 1; + const r = Object.assign({}, request); + delete r.count; + while (i >= 0) { + i--; + await command(r); + } + }; +} + +function nextZoomLevel(currentZoom, steps) { + // Chrome's default zoom levels. + const chromeLevels = [0.25, 0.33, 0.5, 0.75, 0.8, 0.9, 1, 1.1, 1.25, 1.5, 1.75, 2, 2.5, 3, 4, 5]; + // Firefox's default zoom levels. + const firefoxLevels = [0.3, 0.5, 0.67, 0.8, 0.9, 1, 1.1, 1.2, 1.33, 1.5, 1.7, 2, 2.4, 3, 4, 5]; + + let zoomLevels = chromeLevels; // Chrome by default + if (bgUtils.isFirefox()) { + zoomLevels = firefoxLevels; + } + + if (steps === 0) { // Nothing + return currentZoom; + } else if (steps > 0) { // In + // Chrome sometimes returns values with floating point errors. + // Example: Chrome gives 0.32999999999999996 instead of 0.33. + currentZoom += 0.0000001; // This is needed to solve floating point bugs in Chrome. + const nextIndex = zoomLevels.findIndex((level) => level > currentZoom); + const floorIndex = nextIndex == -1 ? zoomLevels.length : nextIndex - 1; + return zoomLevels[Math.min(zoomLevels.length - 1, floorIndex + steps)]; + } else if (steps < 0) { // Out + currentZoom -= 0.0000001; // This is needed to solve floating point bugs in Chrome. + let ceilIndex = zoomLevels.findIndex((level) => level >= currentZoom); + ceilIndex = ceilIndex == -1 ? zoomLevels.length : ceilIndex; + return zoomLevels[Math.max(0, ceilIndex + steps)]; + } +} + +// These are commands which are bound to keystrokes which must be handled by the background page. +// They are mapped in commands.js. +const BackgroundCommands = { + // Create a new tab. Also, with: + // map X createTab http://www.bbc.com/news + // create a new tab with the given URL. + createTab: createRepeatCommand(async function (request) { + if (request.urls == null) { + if (request.url) { + // If the request contains a URL, then use it. + request.urls = [request.url]; + } else { + // Otherwise, if we have a registryEntry containing URLs, then use them. + const options = Object.keys(request.registryEntry.options); + const promises = options.map((opt) => UrlUtils.isUrl(opt)); + const isUrl = await Promise.all(promises); + const urlList = options.filter((_, i) => isUrl[i]); + if (urlList.length > 0) { + request.urls = urlList; + } else { + // Otherwise, just create a new tab. + let url; + const destination = Settings.get("newTabDestination"); + const customUrl = Settings.get("newTabCustomUrl"); + if (destination == Settings.newTabDestinations.vimiumNewTabPage) { + url = Settings.vimiumNewTabPageUrl; + } else if (destination == Settings.newTabDestinations.customUrl && customUrl.length > 0) { + url = customUrl; + } else { + url = UrlUtils.chromeNewTabUrl; + } + request.urls = [url]; + } + } + } + if (request.registryEntry.options.incognito || request.registryEntry.options.window) { + // Firefox does not allow an incognito window to be created with the URL about:newtab. It + // throws this error: "Illegal URL: about:newtab". + const urls = request.urls.filter((u) => u != UrlUtils.chromeNewTabUrl); + const windowConfig = { + url: urls, + incognito: request.registryEntry.options.incognito || false, + }; + await chrome.windows.create(windowConfig); + } else { + const urls = request.urls.slice().reverse(); + if (request.position == null) { + request.position = request.registryEntry.options.position; + } + while (urls.length > 0) { + const url = urls.pop(); + const tab = await TabOperations.openUrlInNewTab(Object.assign(request, { url })); + // Ensure subsequent invocations of this command place the next tab directly after this one. + Object.assign(request, { tab, position: "after", active: false }); + } + } + }), + + duplicateTab: createRepeatCommand(async (request) => { + const tab = await chrome.tabs.duplicate(request.tabId); + // Ensure subsequent invocations of this command place the next tab directly after this one. + request.tabId = tab.id; + }), + + moveTabToNewWindow({ count, tab }) { + // TODO(philc): Switch to the promise API of chrome.tabs.query. + chrome.tabs.query(visibleTabsQueryArgs, function (tabs) { + const activeTabIndex = getTabIndex(tab, tabs); + const startTabIndex = Math.max(0, Math.min(activeTabIndex, tabs.length - count)); + [tab, ...tabs] = tabs.slice(startTabIndex, startTabIndex + count); + chrome.windows.create({ tabId: tab.id, incognito: tab.incognito }, function (window) { + chrome.tabs.move(tabs.map((t) => t.id), { windowId: window.id, index: -1 }); + }); + }); + }, + + nextTab(request) { + return selectTab("next", request); + }, + previousTab(request) { + return selectTab("previous", request); + }, + firstTab(request) { + return selectTab("first", request); + }, + lastTab(request) { + return selectTab("last", request); + }, + async removeTab({ count, tab }) { + await forCountTabs(count, tab, (tab) => { + // In Firefox, Ctrl-W will not close a pinned tab, but on Chrome, it will. We try to be + // consistent with each browser's UX for pinned tabs. + if (tab.pinned && bgUtils.isFirefox()) return; + chrome.tabs.remove(tab.id); + }); + }, + restoreTab: createRepeatCommand(async (request) => { + await chrome.sessions.restore(null); + }), + async togglePinTab({ count, tab }) { + await forCountTabs(count, tab, (tab) => { + chrome.tabs.update(tab.id, { pinned: !tab.pinned }); + }); + }, + toggleMuteTab, + moveTabLeft: moveTab, + moveTabRight: moveTab, + + async setZoom({ tabId, registryEntry }) { + const level = registryEntry.options?.["level"] ?? "1"; + const newZoom = parseFloat(level); + if (!isNaN(newZoom)) { + chrome.tabs.setZoom(tabId, newZoom); + } + }, + async zoomIn({ count, tabId }) { + const currentZoom = await chrome.tabs.getZoom(tabId); + const newZoom = nextZoomLevel(currentZoom, count); + chrome.tabs.setZoom(tabId, newZoom); + }, + async zoomOut({ count, tabId }) { + const currentZoom = await chrome.tabs.getZoom(tabId); + const newZoom = nextZoomLevel(currentZoom, -count); + chrome.tabs.setZoom(tabId, newZoom); + }, + async zoomReset({ tabId }) { + chrome.tabs.setZoom(tabId, 0); // setZoom of 0 sets to the tab default. + }, + + async nextFrame({ count, tabId }) { + // We're assuming that these frames are returned in the order that they appear on the page. This + // seems to be the case empirically. If it's ever needed, we could also sort by frameId. + let frameIds = await getFrameIdsForTab(tabId); + const promises = frameIds.map(async (frameId) => { + // It is possible that this sendMessage call fails, if a frame gets unloaded while the request + // is in flight. + let isError = false; + const status = await (chrome.tabs.sendMessage(tabId, { handler: "getFocusStatus" }, { + frameId: frameId, + }).catch((_) => { + isError = true; + })); + return { frameId, status, isError }; + }); + + const frameResponses = (await Promise.all(promises)).filter((r) => !r.isError); + + const focusedFrameId = frameResponses.find(({ status }) => status.focused)?.frameId; + // It's theoretically possible that focusedFrameId is null if the user switched tabs or away + // from the browser while the request is in flight. + if (focusedFrameId == null) return; + + // Prune any frames which gave an error response (i.e. they disappeared). + frameIds = frameResponses.filter((r) => r.status.focusable).map((r) => r.frameId); + + const index = frameIds.indexOf(focusedFrameId); + count = count ?? 1; + const nextIndex = (index + count) % frameIds.length; + if (index == nextIndex) return; + await chrome.tabs.sendMessage(tabId, { handler: "focusFrame", highlight: true }, { + frameId: frameIds[nextIndex], + }); + }, + + async closeTabsOnLeft(request) { + await removeTabsRelative("before", request); + }, + async closeTabsOnRight(request) { + await removeTabsRelative("after", request); + }, + async closeOtherTabs(request) { + await removeTabsRelative("both", request); + }, + + async visitPreviousTab({ count, tab }) { + await bgUtils.tabRecency.init(); + let tabIds = bgUtils.tabRecency.getTabsByRecency(); + tabIds = tabIds.filter((tabId) => tabId !== tab.id); + if (tabIds.length > 0) { + const id = tabIds[(count - 1) % tabIds.length]; + selectSpecificTab({ id }); + } + }, + + async reload({ count, tab, registryEntry }) { + const bypassCache = registryEntry.options.hard != null ? registryEntry.options.hard : false; + await forCountTabs(count, tab, (tab) => { + chrome.tabs.reload(tab.id, { bypassCache }); + }); + }, +}; + +async function forCountTabs(count, currentTab, callback) { + const tabs = await chrome.tabs.query(visibleTabsQueryArgs); + const activeTabIndex = getTabIndex(currentTab, tabs); + const startTabIndex = Math.max(0, Math.min(activeTabIndex, tabs.length - count)); + for (const tab of tabs.slice(startTabIndex, startTabIndex + count)) { + callback(tab); + } +} + +// Remove tabs before, after, or either side of the currently active tab +async function removeTabsRelative(direction, { count, tab }) { + // count is null if the user didn't type a count prefix before issuing this command and didn't + // specify a count=n option in their keymapping settings. Interpret this as closing all tabs on + // either side. + if (count == null) count = 99999; + const activeTab = tab; + const tabs = await chrome.tabs.query(visibleTabsQueryArgs); + const activeIndex = getTabIndex(activeTab, tabs); + const toRemove = tabs.filter((tab, tabIndex) => { + if (tab.pinned || tab.id == activeTab.id) { + return false; + } + switch (direction) { + case "before": + return tabIndex < activeIndex && + tabIndex >= activeIndex - count; + case "after": + return tabIndex > activeIndex && + tabIndex <= activeIndex + count; + case "both": + return true; + } + }); + + await chrome.tabs.remove(toRemove.map((t) => t.id)); +} + +// Selects a tab before or after the currently selected tab. +// - direction: "next", "previous", "first" or "last". +function selectTab(direction, { count, tab }) { + chrome.tabs.query(visibleTabsQueryArgs, function (tabs) { + if (tabs.length > 1) { + const toSelect = (() => { + switch (direction) { + case "next": + return (getTabIndex(tab, tabs) + count) % tabs.length; + case "previous": + return ((getTabIndex(tab, tabs) - count) + (count * tabs.length)) % tabs.length; + case "first": + return Math.min(tabs.length - 1, count - 1); + case "last": + return Math.max(0, tabs.length - count); + } + })(); + chrome.tabs.update(tabs[toSelect].id, { active: true }); + } + }); +} + +chrome.webNavigation.onCommitted.addListener(async ({ tabId, frameId }) => { + // Vimium can't run on all tabs (e.g. chrome:// URLs). insertCSS will throw an error on such tabs, + // which is expected, and noise. Swallow that error. + const swallowError = () => {}; + await Settings.onLoaded(); + await chrome.scripting.insertCSS({ + css: Settings.get("userDefinedLinkHintCss"), + target: { + tabId: tabId, + frameIds: [frameId], + }, + }).catch(swallowError); +}); + +// Returns all frame IDs for the given tab. Note that in Chrome, this will omit frame IDs for frames +// or iFrames which contain chrome-extension:// URLs, even if those pages are listed in Vimium's +// web_accessible_resources in manifest.json. +async function getFrameIdsForTab(tabId) { + // getAllFrames unfortunately excludes frames and iframes from chrome-extension:// URLs. + // In Firefox, by contrast, pages with moz-extension:// URLs are included. + const frames = await chrome.webNavigation.getAllFrames({ tabId: tabId }); + return frames.map((f) => f.frameId); +} + +const HintCoordinator = { + // Forward the message in "request" to all frames the in sender's tab. + broadcastLinkHintsMessage(request, sender) { + chrome.tabs.sendMessage( + sender.tab.id, + Object.assign(request, { handler: "linkHintsMessage" }), + ); + }, + + // This is sent by the content script once the user issues the link hints command. + async prepareToActivateLinkHintsMode( + tabId, + originatingFrameId, + { modeIndex, requestedByHelpDialog, isExtensionPage }, + ) { + const frameIds = await getFrameIdsForTab(tabId); + // If link hints was triggered on a Vimium extension page (like the vimium help dialog or + // options page), we cannot directly retrieve the frameIds for those pages using the + // getFrameIdsForTab. However, as a workaround, if those pages were the pages activating hints, + // their frameId is equal to originatingFrameId. + if (isExtensionPage && !frameIds.includes(originatingFrameId)) { + frameIds.push(originatingFrameId); + } + const timeout = 3000; + let promises = frameIds.map(async (frameId) => { + let promise = chrome.tabs.sendMessage( + tabId, + { + handler: "linkHintsMessage", + messageType: "getHintDescriptors", + modeIndex, + requestedByHelpDialog, + }, + { frameId }, + ); + + promise = Utils.promiseWithTimeout(promise, timeout) + .catch((error) => Utils.debugLog("Swallowed getHintDescriptors error:", error)); + + const descriptors = await promise; + + return { + frameId, + descriptors, + }; + }); + + const responses = (await Promise.all(promises)) + .filter((r) => r.descriptors != null); + + const frameIdToDescriptors = {}; + for (const { frameId, descriptors } of responses) { + frameIdToDescriptors[frameId] = descriptors; + } + + promises = responses.map(({ frameId }) => { + // Don't send this frame's own link hints back to it -- they're already stored in that frame's + // content script. At the time that we wrote this, this resulted in a 150% speedup for link + // busy sites like Reddit. + const outgoingFrameIdToHintDescriptors = Object.assign({}, frameIdToDescriptors); + delete outgoingFrameIdToHintDescriptors[frameId]; + return chrome.tabs.sendMessage( + tabId, + { + handler: "linkHintsMessage", + messageType: "activateMode", + frameId: frameId, + originatingFrameId: originatingFrameId, + frameIdToHintDescriptors: outgoingFrameIdToHintDescriptors, + modeIndex: modeIndex, + }, + { frameId }, + ).catch((error) => { + Utils.debugLog( + "Swallowed linkHints activateMode error:", + error, + "tabId", + tabId, + "frameId", + frameId, + ); + }); + }); + await Promise.all(promises); + }, +}; + +const sendRequestHandlers = { + runBackgroundCommand(request, sender) { + return BackgroundCommands[request.registryEntry.command](request, sender); + }, + // getCurrentTabUrl is used by the content scripts to get their full URL, because window.location + // cannot help with Chrome-specific URLs like "view-source:http:..". + getCurrentTabUrl({ tab }) { + return tab.url; + }, + openUrlInNewTab: createRepeatCommand(async (request, callback) => { + await TabOperations.openUrlInNewTab(request, callback); + }), + async openUrlInNewWindow(request) { + await TabOperations.openUrlInNewWindow(request); + }, + async openUrlInIncognito(request) { + await chrome.windows.create({ + incognito: true, + url: await UrlUtils.convertToUrl(request.url), + }); + }, + openUrlInCurrentTab: TabOperations.openUrlInCurrentTab, + openOptionsPageInNewTab(request) { + return chrome.tabs.create({ + url: chrome.runtime.getURL("pages/options.html"), + index: request.tab.index + 1, + }); + }, + + launchSearchQuery({ query, openInNewTab }) { + const disposition = openInNewTab ? "NEW_TAB" : "CURRENT_TAB"; + chrome.search.query({ disposition, text: query }); + }, + + domReady(_, sender) { + const isTopFrame = sender.frameId == 0; + if (!isTopFrame) return; + const tabId = sender.tab.id; + // The only feature that uses tabLoadedHandlers is marks. + if (tabLoadedHandlers[tabId]) tabLoadedHandlers[tabId](); + delete tabLoadedHandlers[tabId]; + }, + + nextFrame: BackgroundCommands.nextFrame, + selectSpecificTab, + createMark: marks.create, + gotoMark: marks.goto, + // Send a message to all frames in the current tab. If request.frameId is provided, then send + // messages to only the frame with that ID. + sendMessageToFrames(request, sender) { + const newRequest = Object.assign({}, request.message); + const options = request.frameId != null ? { frameId: request.frameId } : {}; + chrome.tabs.sendMessage(sender.tab.id, newRequest, options); + }, + broadcastLinkHintsMessage(request, sender) { + HintCoordinator.broadcastLinkHintsMessage(request, sender); + }, + prepareToActivateLinkHintsMode(request, sender) { + HintCoordinator.prepareToActivateLinkHintsMode(sender.tab.id, sender.frameId, request); + }, + + async initializeFrame(request, sender) { + // Check whether the extension is enabled for the top frame's URL, rather than the URL of the + // specific frame that sent this request. + const enabledState = exclusions.isEnabledForUrl(sender.tab.url); + + const isTopFrame = sender.frameId == 0; + if (isTopFrame) { + let whichIcon; + if (!enabledState.isEnabledForUrl) { + whichIcon = "disabled"; + } else if (enabledState.passKeys.length > 0) { + whichIcon = "partial"; + } else { + whichIcon = "enabled"; + } + + let iconSet = { + "enabled": { + "16": "../icons/action_enabled_16.png", + "32": "../icons/action_enabled_32.png", + }, + "partial": { + "16": "../icons/action_partial_16.png", + "32": "../icons/action_partial_32.png", + }, + "disabled": { + "16": "../icons/action_disabled_16.png", + "32": "../icons/action_disabled_32.png", + }, + }; + + if (bgUtils.isFirefox()) { + // Only Firefox supports SVG icons. + iconSet = { + "enabled": "../icons/action_enabled.svg", + "partial": "../icons/action_partial.svg", + "disabled": "../icons/action_disabled.svg", + }; + } + + chrome.action.setIcon({ path: iconSet[whichIcon], tabId: sender.tab.id }); + } + + const response = Object.assign({ + isFirefox: bgUtils.isFirefox(), + firefoxVersion: await bgUtils.getFirefoxVersion(), + frameId: sender.frameId, + }, enabledState); + + return response; + }, + + async getBrowserInfo() { + return { + isFirefox: bgUtils.isFirefox(), + firefoxVersion: await bgUtils.getFirefoxVersion(), + }; + }, + + async filterCompletions(request) { + const completer = completers[request.completerName]; + let response = await completer.filter(request); + + // NOTE(smblott): response contains `relevancyFunction` (function) properties which cause + // postMessage, below, to fail in Firefox. See #2576. We cannot simply delete these methods, + // as they're needed elsewhere. Converting the response to JSON and back is a quick and easy + // way to sanitize the object. + response = JSON.parse(JSON.stringify(response)); + + return response; + }, + + refreshCompletions(request) { + const completer = completers[request.completerName]; + completer.refresh(); + }, + + cancelCompletions(request) { + const completer = completers[request.completerName]; + completer.cancel(); + }, +}; + +Utils.addChromeRuntimeOnMessageListener( + Object.keys(sendRequestHandlers), + async function (request, sender) { + Utils.debugLog( + "main.js: onMessage:%ourl:%otab:%oframe:%o", + request.handler, + sender.url.replace(/https?:\/\//, ""), + sender.tab?.id, + sender.frameId, + // request // Often useful for debugging. + ); + // NOTE(philc): We expect all messages to come from a content script in a tab. I've observed in + // Firefox when the extension is first installed, domReady and initializeFrame messages come from + // content scripts in about:blank URLs, which have a null sender.tab. I don't know what this + // corresponds to. Since we expect a valid sender.tab, ignore those messages. + if (sender.tab == null) return; + await Settings.onLoaded(); + request = Object.assign({ count: 1 }, request, { + tab: sender.tab, + tabId: sender.tab.id, + }); + const handler = sendRequestHandlers[request.handler]; + const result = handler ? await handler(request, sender) : null; + return result; + }, +); + +// Remove chrome.storage.local/findModeRawQueryListIncognito if there are no remaining +// incognito-mode windows. Since the common case is that there are none to begin with, we first +// check whether the key is set at all. +chrome.tabs.onRemoved.addListener(function (tabId) { + if (tabLoadedHandlers[tabId]) { + delete tabLoadedHandlers[tabId]; + } + chrome.storage.session.get("findModeRawQueryListIncognito", function (items) { + if (items.findModeRawQueryListIncognito) { + return chrome.windows != null + ? chrome.windows.getAll(null, function (windows) { + for (const window of windows) { + if (window.incognito) return; + } + // There are no remaining incognito-mode tabs, and findModeRawQueryListIncognito is set. + return chrome.storage.session.remove("findModeRawQueryListIncognito"); + }) + : undefined; + } + }); +}); + +// Convenience function for development use. +globalThis.runTests = () => open(chrome.runtime.getURL("tests/dom_tests/dom_tests.html")); + +// +// Begin initialization. +// + +// True if the major version of Vimium has changed. +// - previousVersion: this will be null for new installs. +function majorVersionHasIncreased(previousVersion) { + const currentVersion = Utils.getCurrentVersion(); + if (previousVersion == null) return false; + const currentMajorVersion = currentVersion.split(".").slice(0, 2).join("."); + const previousMajorVersion = previousVersion.split(".").slice(0, 2).join("."); + return Utils.compareVersions(currentMajorVersion, previousMajorVersion) == 1; +} + +// Show notification on upgrade. +async function showUpgradeMessageIfNecessary(onInstalledDetails) { + const currentVersion = Utils.getCurrentVersion(); + // We do not show an upgrade message for patch/silent releases. Such releases have the same + // major and minor version numbers. + if ( + !majorVersionHasIncreased(onInstalledDetails.previousVersion) || + Settings.get("hideUpdateNotifications") + ) { + return; + } + + // NOTE(philc): These notifications use the system notification UI. So, if you don't have + // notifications enabled from your browser (e.g. in Notification Settings in OSX), then + // chrome.notification.create will succeed, but you won't see it. + const notificationId = "VimiumUpgradeNotification"; + await chrome.notifications.create( + notificationId, + { + type: "basic", + iconUrl: chrome.runtime.getURL("icons/icon128.png"), + title: "Vimium Upgrade", + message: + `Vimium has been upgraded to version ${currentVersion}. Click here for more information.`, + isClickable: true, + }, + ); + if (!chrome.runtime.lastError) { + chrome.notifications.onClicked.addListener(async function (id) { + if (id != notificationId) return; + const tabs = await chrome.tabs.query({ active: true, currentWindow: true }); + const tab = tabs[0]; + TabOperations.openUrlInNewTab({ + tab, + tabId: tab.id, + url: "https://github.com/philc/vimium/blob/master/CHANGELOG.md", + }); + }); + } +} + +async function injectContentScriptsAndCSSIntoExistingTabs() { + const manifest = chrome.runtime.getManifest(); + const contentScriptConfig = manifest.content_scripts[0]; + const contentScripts = contentScriptConfig.js; + const cssFiles = contentScriptConfig.css; + + // The scripting.executeScript and scripting.insertCSS APIs can fail if we don't have permissions + // to run scripts in a given tab. Examples are: chrome:// URLs, file:// pages (if the user hasn't + // granted Vimium access to file URLs), and probably incognito tabs (unconfirmed). Calling these + // APIs on such tabs results in an error getting logged on the background page. To avoid this + // noise, we swallow the failures. We could instead try to determine if the tab is scriptable by + // checking its URL scheme before calling these APIs, but that approach has some nuance to it. + // This is simpler. + const swallowError = (_) => {}; + + const tabs = await chrome.tabs.query({ status: "complete" }); + for (const tab of tabs) { + const target = { tabId: tab.id, allFrames: true }; + + // Inject all of our content javascripts. + chrome.scripting.executeScript({ + files: contentScripts, + target: target, + }).catch(swallowError); + + // Inject our extension's CSS. + chrome.scripting.insertCSS({ + files: cssFiles, + target: target, + }).catch(swallowError); + + // Inject the user's link hint CSS. + chrome.scripting.insertCSS({ + css: Settings.get("userDefinedLinkHintCss"), + target: target, + }).catch(swallowError); + } +} + +async function initializeExtension() { + await Settings.onLoaded(); + await Commands.init(); +} + +// The browser may have tabs already open. We inject the content scripts and Vimium's CSS +// immediately so that the extension is running on the pages immediately after install, rather than +// having to reload those pages. +chrome.runtime.onInstalled.addListener(async (details) => { + Utils.debugLog("chrome.runtime.onInstalled"); + + // NOTE(philc): In my testing, when the onInstalled event occurs, the onStartup event does not + // also occur, so we need to initialize Vimium here. + await initializeExtension(); + + const shouldInjectContentScripts = + // NOTE(philc): 2023-06-16: we do not install the content scripts in all tabs on Firefox. + // I believe this is because Firefox does this already. See https://stackoverflow.com/a/37132144 + // for commentary. + !bgUtils.isFirefox() && + (["chrome_update", "shared_module_update"].includes(details.reason)); + if (shouldInjectContentScripts) injectContentScriptsAndCSSIntoExistingTabs(); + + await showUpgradeMessageIfNecessary(details); +}); + +// Note that this event is not fired when an incognito profile is started. +chrome.runtime.onStartup.addListener(async () => { + Utils.debugLog("chrome.runtime.onStartup"); + await initializeExtension(); +}); + +Object.assign(globalThis, { + TabOperations, + // Exported for tests: + HintCoordinator, + BackgroundCommands, + majorVersionHasIncreased, + nextZoomLevel, +}); + +// The chrome.runtime.onStartup and onInstalled events are not fired when disabling and then +// re-enabling the extension in developer mode, so we also initialize the extension here. +initializeExtension(); diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/background_scripts/marks.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/background_scripts/marks.js new file mode 100644 index 0000000..27b7662 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/background_scripts/marks.js @@ -0,0 +1,131 @@ +import * as TabOperations from "./tab_operations.js"; + +// This returns the key which is used for storing mark locations in chrome.storage.sync. +// Exported for tests. +export function getLocationKey(markName) { + return `vimiumGlobalMark|${markName}`; +} + +// Get the part of a URL we use for matching here (that is, everything up to the first anchor). +function getBaseUrl(url) { + return url.split("#")[0]; +} + +// Create a global mark. We record vimiumSecret with the mark so that we can tell later, when the +// mark is used, whether this is the original Vimium session or a subsequent session. This affects +// whether or not tabId can be considered valid. +export async function create(req, sender) { + const items = await chrome.storage.session.get("vimiumSecret"); + const markInfo = { + vimiumSecret: items.vimiumSecret, + markName: req.markName, + url: getBaseUrl(sender.tab.url), + tabId: sender.tab.id, + scrollX: req.scrollX, + scrollY: req.scrollY, + }; + + if ((markInfo.scrollX != null) && (markInfo.scrollY != null)) { + saveMark(markInfo); + } else { + // The front-end frame hasn't provided the scroll position (because it's not the top frame + // within its tab). We need to ask the top frame what its scroll position is. + chrome.tabs.sendMessage(sender.tab.id, { handler: "getScrollPosition" }, (response) => { + saveMark(Object.assign(markInfo, { scrollX: response.scrollX, scrollY: response.scrollY })); + }); + } +} + +function saveMark(markInfo) { + const item = {}; + item[getLocationKey(markInfo.markName)] = markInfo; + chrome.storage.local.set(item); +} + +// Goto a global mark. We try to find the original tab. If we can't find that, then we try to find +// another tab with the original URL, and use that. And if we can't find such an existing tab, then +// we create a new one. Whichever of those we do, we then set the scroll position to the original +// scroll position. +export async function goto(req) { + const vimiumSecret = (await chrome.storage.session.get("vimiumSecret"))["vimiumSecret"]; + const key = getLocationKey(req.markName); + const items = await chrome.storage.local.get(key); + const markInfo = items[key]; + if (markInfo.vimiumSecret !== vimiumSecret) { + // This is a different Vimium instantiation, so markInfo.tabId is definitely out of date. + Utils.debugLog("marks: vimiumSecret is incorrect."); + await focusOrLaunch(markInfo, req); + } else { + // Check whether markInfo.tabId still exists. According to + // https://developer.chrome.com/extensions/tabs, tab Ids are unqiue within a Chrome + // session. So, if we find a match, we can use it. + let tab; + // This will throw an error if the tab doesn't exist. + try { + tab = await chrome.tabs.get(markInfo.tabId); + } catch { + // Swallow. + } + const originalTabStillExists = tab?.url && (markInfo.url === getBaseUrl(tab.url)); + if (originalTabStillExists) { + await gotoPositionInTab(markInfo); + } else { + await focusOrLaunch(markInfo, req); + } + } +} + +// Focus an existing tab and scroll to the given position within it. +async function gotoPositionInTab({ tabId, scrollX, scrollY }) { + const tab = await chrome.tabs.update(tabId, { active: true }); + chrome.windows.update(tab.windowId, { focused: true }); + chrome.tabs.sendMessage(tabId, { handler: "setScrollPosition", scrollX, scrollY }); +} + +// The tab we're trying to find no longer exists. We either find another tab with a matching URL and +// use it, or we create a new tab. +async function focusOrLaunch(markInfo, req) { + // If we're not going to be scrolling to a particular position in the tab, then we choose all tabs + // with a matching URL prefix. Otherwise, we require an exact match (because it doesn't make sense + // to scroll unless there's an exact URL match). + const markIsScrolled = markInfo.scrollX > 0 || markInfo.scrollY > 0; + const query = markIsScrolled ? markInfo.url : `${markInfo.url}*`; + const tabs = await chrome.tabs.query({ url: query }); + if (tabs.length > 0) { + // There is at least one matching tab. Pick one and go to it. + const tab = await pickTab(tabs); + gotoPositionInTab(Object.assign(markInfo, { tabId: tab.id })); + } else { + // There is no existing matching tab. We'll have to create one. + TabOperations.openUrlInNewTab( + Object.assign(req, { url: getBaseUrl(markInfo.url) }), + (tab) => { + // Note. tabLoadedHandlers is defined in "main.js". The handler below will be called when + // the tab is loaded, its DOM is ready and it registers with the background page. + return tabLoadedHandlers[tab.id] = () => + gotoPositionInTab(Object.assign(markInfo, { tabId: tab.id })); + }, + ); + } +} + +// Given a list of tabs candidate tabs, pick one. Prefer tabs in the current window and tabs with +// shorter (matching) URLs. +async function pickTab(tabs) { + // NOTE(philc): We assume getCurrent() can return null, but I didn't confirm this. Also, it should + // be impossible for the user to invoke Vimium-related keys if all windows are closed. + const window = await chrome.windows.getCurrent(); + const windowId = window?.id; + // Prefer tabs in the current window, if there are any. + const tabsInWindow = tabs.filter((tab) => tab.windowId === windowId); + if (tabsInWindow.length > 0) tabs = tabsInWindow; + // If more than one tab remains and the current tab is still a candidate, then don't pick the + // current tab (because jumping to it does nothing). + if (tabs.length > 1) { + tabs = tabs.filter((t) => !t.active); + } + + // Prefer shorter URLs. + tabs.sort((a, b) => a.url.length - b.url.length); + return tabs[0]; +} diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/background_scripts/tab_operations.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/background_scripts/tab_operations.js new file mode 100644 index 0000000..7e9ee93 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/background_scripts/tab_operations.js @@ -0,0 +1,118 @@ +// +// Functions for opening URLs in tabs. +// + +import * as bgUtils from "../background_scripts/bg_utils.js"; +import "../lib/url_utils.js"; + +// Opens request.url in the current tab. If the URL is keywords, search for them in the default +// search engine. If the URL is a javascript: snippet, execute it in the current tab. +export async function openUrlInCurrentTab(request) { + const urlStr = await UrlUtils.convertToUrl(request.url); + if (urlStr == null) { + // The requested destination is not a URL, so treat it like a search query. + chrome.search.query({ text: request.url }); + } else if (UrlUtils.hasJavascriptProtocol(urlStr)) { + // Note that when injecting JavaScript, it's subject to the site's CSP. Sites with strict CSPs + // (like github.com, developer.mozilla.org) will raise an error when we try to run this code. + // See https://github.com/philc/vimium/issues/4331. + const scriptingArgs = { + target: { tabId: request.tabId }, + func: (text) => { + const prefix = "javascript:"; + text = text.slice(prefix.length).trim(); + // TODO(philc): Why do we try to double decode here? Discover and then document it. + text = decodeURIComponent(text); + try { + text = decodeURIComponent(text); + } catch { + // Swallow + } + const el = document.createElement("script"); + el.textContent = text; + document.head.appendChild(el); + }, + args: [urlStr], + }; + if (!bgUtils.isFirefox()) { + // The MAIN world -- where the webpage runs -- is less privileged than the ISOLATED world. + // Specifying a world is required for Chrome, but not Firefox. + // As of Firefox 118, specifying "MAIN" as the world is not yet supported. + scriptingArgs.world = "MAIN"; + } + chrome.scripting.executeScript(scriptingArgs); + } else { + // The requested destination is a regular URL. + chrome.tabs.update(request.tabId, { url: urlStr }); + } +} + +// Opens request.url in new tab and switches to it. +// Returns the created tab. +export async function openUrlInNewTab(request) { + const urlStr = await UrlUtils.convertToUrl(request.url); + const tabConfig = { windowId: request.tab.windowId }; + const position = request.position; + let tabIndex = null; + switch (position) { + case "start": + tabIndex = 0; + break; + case "before": + tabIndex = request.tab.index; + break; + // if on Chrome or on Firefox but without openerTabId, `tabs.create` opens a tab at the end. + // but on Firefox and with openerTabId, it opens a new tab next to the opener tab + case "end": + tabIndex = bgUtils.isFirefox() ? 9999 : null; + break; + // "after" is the default case when there are no options. + default: + tabIndex = request.tab.index + 1; + } + tabConfig.index = tabIndex; + tabConfig.active = request.active ?? true; + tabConfig.openerTabId = request.tab.id; + + let newTab; + + if (urlStr == null) { + // The requested destination is not a URL, so treat it like a search query. + // + // The chrome.search.query API lets us open the search in a new tab, but it doesn't let us + // control the precise position of that tab. So, we open a new blank tab using our position + // parameter, and then execute the search in that tab. + + // In Chrome, if we create a blank tab and call chrome.search.query, the omnibar is focused, + // which we don't want. To work around that, first create an empty page. This is not needed in + // Firefox. And in fact, firefox doesn't support a data:text URL to the chrome.tab.create API. + tabConfig.url = bgUtils.isFirefox() ? null : "data:text/html,"; + newTab = await chrome.tabs.create(tabConfig); + const query = request.url; + await chrome.search.query({ text: query, tabId: newTab.id }); + } else { + // The requested destination is a regular URL. + // Firefox does not support "about:newtab" in chrome.tabs.create, so omit it. + if (urlStr != UrlUtils.chromeNewTabUrl) { + tabConfig.url = urlStr; + } + newTab = await chrome.tabs.create(tabConfig); + } + return newTab; +} + +// Open request.url in new window and switch to it. +export async function openUrlInNewWindow(request) { + const winConfig = { + url: await UrlUtils.convertToUrl(request.url), + active: true, + }; + if (request.active != null) { + winConfig.active = request.active; + } + // Firefox does not support "about:newtab" in chrome.tabs.create, so omit it. + if (tabConfig["url"] === UrlUtils.chromeNewTabUrl) { + delete winConfig["url"]; + } + await chrome.windows.create(winConfig); +} diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/background_scripts/tab_recency.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/background_scripts/tab_recency.js new file mode 100644 index 0000000..f4fed61 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/background_scripts/tab_recency.js @@ -0,0 +1,139 @@ +// TabRecency associates an integer with each tab id representing how recently it has been accessed. +// The order of tabs as tracked by TabRecency is used to provide a recency-based ordering in the +// tabs vomnibar. +// +// The values are persisted to chrome.storage.session so that they're not lost when the extension's +// background page is unloaded. +// +// Callers must await TabRecency.init before calling recencyScore or getTabsByRecency. +// +// In theory, the browser's tab.lastAccessed timestamp field should allow us to sort tabs by +// recency, but in practice it does not work across several edge cases. See the comments on #4368. +class TabRecency { + constructor() { + this.counter = 1; + this.tabIdToCounter = {}; + this.loaded = false; + this.queuedActions = []; + } + + // Add listeners to chrome.tabs, and load the index from session storage. + async init() { + if (this.initPromise) { + await this.initPromise; + return; + } + let resolveFn; + this.initPromise = new Promise((resolve, _reject) => { + resolveFn = resolve; + }); + + chrome.tabs.onActivated.addListener((activeInfo) => { + this.queueAction("register", activeInfo.tabId); + }); + chrome.tabs.onRemoved.addListener((tabId) => { + this.queueAction("deregister", tabId); + }); + + chrome.tabs.onReplaced.addListener((addedTabId, removedTabId) => { + this.queueAction("deregister", removedTabId); + this.queueAction("register", addedTabId); + }); + + chrome.windows.onFocusChanged.addListener(async (windowId) => { + if (windowId == chrome.windows.WINDOW_ID_NONE) return; + const tabs = await chrome.tabs.query({ windowId, active: true }); + if (tabs[0]) { + this.queueAction("register", tabs[0].id); + } + }); + + await this.loadFromStorage(); + while (this.queuedActions.length > 0) { + const [action, tabId] = this.queuedActions.shift(); + this.handleAction(action, tabId); + } + this.loaded = true; + resolveFn(); + } + + // Loads the index from session storage. + async loadFromStorage() { + const tabsPromise = chrome.tabs.query({}); + const storagePromise = chrome.storage.session.get("tabRecency"); + const [tabs, storage] = await Promise.all([tabsPromise, storagePromise]); + if (storage.tabRecency == null) return; + + let maxCounter = 0; + for (const counter of Object.values(storage.tabRecency)) { + if (maxCounter < counter) maxCounter = counter; + } + if (this.counter < maxCounter) { + this.counter = maxCounter; + } + + this.tabIdToCounter = Object.assign({}, storage.tabRecency); + + // Remove any tab IDs which aren't currently loaded. + const tabIds = new Set(tabs.map((t) => t.id)); + for (const id in this.tabIdToCounter) { + if (!tabIds.has(parseInt(id))) { + delete this.tabIdToCounter[id]; + } + } + } + + async saveToStorage() { + await chrome.storage.session.set({ tabRecency: this.tabIdToCounter }); + } + + // - action: "register" or "unregister". + queueAction(action, tabId) { + if (!this.loaded) { + this.queuedActions.push([action, tabId]); + } else { + this.handleAction(action, tabId); + } + } + + // - action: "register" or "unregister". + handleAction(action, tabId) { + if (action == "register") { + this.register(tabId); + } else if (action == "deregister") { + this.deregister(tabId); + } else { + throw new Error(`Unexpected action type: ${action}`); + } + } + + register(tabId) { + this.counter++; + this.tabIdToCounter[tabId] = this.counter; + this.saveToStorage(); + } + + deregister(tabId) { + delete this.tabIdToCounter[tabId]; + this.saveToStorage(); + } + + // Recently-visited tabs get a higher score (except the current tab, which gets a low score). + recencyScore(tabId) { + if (!this.loaded) throw new Error("TabRecency hasn't yet been loaded."); + const tabCounter = this.tabIdToCounter[tabId]; + const isCurrentTab = tabCounter == this.counter; + if (isCurrentTab) return 0; + return (tabCounter ?? 1) / this.counter; // tabCounter may be null. + } + + // Returns a list of tab Ids sorted by recency, most recent tab first. + getTabsByRecency() { + if (!this.loaded) throw new Error("TabRecency hasn't yet been loaded."); + const ids = Object.keys(this.tabIdToCounter); + ids.sort((a, b) => this.tabIdToCounter[b] - this.tabIdToCounter[a]); + return ids.map((id) => parseInt(id)); + } +} + +export { TabRecency }; diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/background_scripts/user_search_engines.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/background_scripts/user_search_engines.js new file mode 100644 index 0000000..4ca1c80 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/background_scripts/user_search_engines.js @@ -0,0 +1,53 @@ +import "../lib/url_utils.js"; +import * as commands from "./commands.js"; + +// A struct representing a search engine entry in the "searchEngine" setting. +export class UserSearchEngine { + keyword; + url; + description; + constructor(o) { + Object.seal(this); + if (o) Object.assign(this, o); + } +} + +// Parses a user's search engine configuration from Settings, and stores the parsed results. +// TODO(philc): Should this be responsible for updating itself when Settings changes, rather than +// the callers doing so? Or, remove this class and re-parse the configuration every keystroke in +// Vomnibar, so we don't introduce another layer of caching in the code. +export let keywordToEngine = {}; + +// Returns a result of the shape: { keywordToEngine, validationErrors }. +export function parseConfig(configText) { + const results = {}; + const errors = []; + for (const line of commands.parseLines(configText)) { + const tokens = line.split(/\s+/); + if (tokens.length < 2) { + errors.push(`This line has less than two tokens: ${line}`); + continue; + } + if (!tokens[0].includes(":")) { + errors.push(`This line doesn't include a ":" character: ${line}`); + continue; + } + const keyword = tokens[0].split(":")[0]; + const url = tokens[1]; + const description = tokens.length > 2 ? tokens.slice(2).join(" ") : `search (${keyword})`; + + if (!UrlUtils.urlHasProtocol(url) && !UrlUtils.hasJavascriptProtocol(url)) { + errors.push(`This search engine doesn't have a valid URL: ${line}`); + continue; + } + results[keyword] = new UserSearchEngine({ keyword, url, description }); + } + return { + keywordToEngine: results, + validationErrors: errors, + }; +} + +export function set(searchEnginesConfigText) { + keywordToEngine = parseConfig(searchEnginesConfigText).keywordToEngine; +} diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/content_scripts/file_urls.css b/net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/content_scripts/file_urls.css new file mode 100644 index 0000000..21c890c --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/content_scripts/file_urls.css @@ -0,0 +1,6 @@ +/* Chrome file:// URLs set draggable=true for links to files (CSS selector .icon.file). This + * automatically sets -webkit-user-select: none, which disables selecting the file names and so + * prevents Vimium's search from working as expected. Here, we reset the value back to default. */ +.icon.file { + -webkit-user-select: auto !important; +} diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/content_scripts/hud.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/content_scripts/hud.js new file mode 100644 index 0000000..18ff31a --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/dbepggeogbaibhgnhhndojpepiihcmeb/2.4.2_0/content_scripts/hud.js @@ -0,0 +1,278 @@ +// +// A heads-up-display (HUD) for showing Vimium page operations. +// Note: you cannot interact with the HUD until document.body is available. +// +const HUD = { + tween: null, + hudUI: null, + findMode: null, + abandon() { + if (this.hudUI) { + this.hudUI.hide(false); + } + }, + + // Set by @pasteFromClipboard to handle the value returned by pasteResponse + pasteListener: null, + + // This HUD is styled to precisely mimick the chrome HUD on Mac. Use the + // "has_popup_and_link_hud.html" test harness to tweak these styles to match Chrome's. One + // limitation of our HUD display is that it doesn't sit on top of horizontal scrollbars like + // Chrome's HUD does. + + handleUIComponentMessage({ data }) { + const handlers = { + hideFindMode: this.hideFindMode, + search: this.search, + unfocusIfFocused: this.unfocusIfFocused, + pasteResponse: this.pasteResponse, + showClipboardUnavailableMessage: this.showClipboardUnavailableMessage, + }; + const handler = handlers[data.name]; + if (handler) { + return handler.bind(this)(data); + } + }, + + async init(focusable) { + await Settings.onLoaded(); + if (focusable == null) { + focusable = true; + } + if (this.hudUI == null) { + const queryString = globalThis.vimiumDomTestsAreRunning ? "?dom_tests=true" : ""; + this.hudUI = new UIComponent(); + this.hudUI.load( + `pages/hud_page.html${queryString}`, + "vimium-hud-frame", + this.handleUIComponentMessage.bind(this), + ); + } + // this[data.name]? data + if (this.tween == null) { + this.tween = new Tween( + "iframe.vimium-hud-frame.vimium-ui-component-visible", + this.hudUI.shadowDOM, + ); + } + const classList = this.hudUI.iframeElement.classList; + if (focusable) { + classList.remove("vimium-non-clickable"); + classList.add("vimium-clickable"); + // Note(gdh1995): Chrome 74 only acknowledges text selection when a frame has been visible. + // See more in #3277. + // Note(mrmr1993): Show the HUD frame, so Firefox will actually perform the paste. + this.hudUI.setIframeVisible(true); + // Force the re-computation of styles, so Chrome sends a visibility change message to the + // child frame. See https://github.com/philc/vimium/pull/3277#issuecomment-487363284 + getComputedStyle(this.hudUI.iframeElement).display; + } else { + classList.remove("vimium-non-clickable"); + classList.add("vimium-clickable"); + } + }, + + // duration - if omitted, the message will show until dismissed. + async show(text, duration) { + await DomUtils.documentComplete(); + clearTimeout(this._showForDurationTimerId); + // @hudUI.activate will take charge of making it visible + await this.init(false); + this.hudUI.show({ name: "show", text }); + this.tween.fade(1.0, 150); + + if (duration != null) { + this._showForDurationTimerId = setTimeout(() => this.hide(), duration); + } + }, + + async showFindMode(findMode = null) { + this.findMode = findMode; + await DomUtils.documentComplete(); + await this.init(); + this.hudUI.show({ name: "showFindMode" }); + this.tween.fade(1.0, 150); + }, + + search(data) { + // NOTE(mrmr1993): On Firefox, window.find moves the window focus away from the HUD. We use + // postFindFocus to put it back, so the user can continue typing. + this.findMode.findInPlace(data.query, { + "postFindFocus": this.hudUI.iframeElement.contentWindow, + }); + + // Show the number of matches in the HUD UI. + const matchCount = FindMode.query.parsedQuery.length > 0 ? FindMode.query.matchCount : 0; + const showMatchText = FindMode.query.rawQuery.length > 0; + this.hudUI.postMessage({ name: "updateMatchesCount", matchCount, showMatchText }); + }, + + // Hide the HUD. + // If :immediate is falsy, then the HUD is faded out smoothly (otherwise it is hidden + // immediately). + // If :updateIndicator is truthy, then we also refresh the mode indicator. The only time we don't + // update the mode indicator, is when hide() is called for the mode indicator itself. + hide(immediate, updateIndicator) { + if (immediate == null) { + immediate = false; + } + if (updateIndicator == null) { + updateIndicator = true; + } + if ((this.hudUI != null) && (this.tween != null)) { + clearTimeout(this._showForDurationTimerId); + this.tween.stop(); + if (immediate) { + if (updateIndicator) { + Mode.setIndicator(); + } else { + this.hudUI.hide(); + } + } else { + this.tween.fade(0, 150, () => this.hide(true, updateIndicator)); + } + } + }, + + // These parameters describe the reason find mode is exiting, and come from the HUD UI component. + hideFindMode({ exitEventIsEnter, exitEventIsEscape }) { + let postExit; + this.findMode.checkReturnToViewPort(); + + // An element won't receive a focus event if the search landed on it while we were in the HUD + // iframe. To end up with the correct modes active, we create a focus/blur event manually after + // refocusing this window. + globalThis.focus(); + + const focusNode = DomUtils.getSelectionFocusElement(); + if (document.activeElement != null) { + document.activeElement.blur(); + } + + if (focusNode && focusNode.focus) { + focusNode.focus(); + } + + if (exitEventIsEnter) { + FindMode.handleEnter(); + if (FindMode.query.hasResults) { + postExit = () => newPostFindMode(); + } + } else if (exitEventIsEscape) { + // We don't want FindMode to handle the click events that FindMode.handleEscape can generate, + // so we wait until the mode is closed before running it. + postExit = FindMode.handleEscape; + } + + this.findMode.exit(); + if (postExit) { + postExit(); + } + }, + + // These commands manage copying and pasting from the clipboard in the HUD frame. + // NOTE(mrmr1993): We need this to copy and paste on Firefox: + // * an element can't be focused in the background page, so copying/pasting doesn't work + // * we don't want to disrupt the focus in the page, in case the page is listening for focus/blur + // * events. + // * the HUD shouldn't be active for this frame while any of the copy/paste commands are running. + async copyToClipboard(text) { + await DomUtils.documentComplete(); + await this.init(); + this.hudUI.postMessage({ name: "copyToClipboard", data: text }); + }, + + async pasteFromClipboard(pasteListener) { + this.pasteListener = pasteListener; + await DomUtils.documentComplete(); + await this.init(); + this.tween.fade(0, 0); + this.hudUI.postMessage({ name: "pasteFromClipboard" }); + }, + + pasteResponse({ data }) { + // Hide the HUD frame again. + this.hudUI.setIframeVisible(false); + this.unfocusIfFocused(); + this.pasteListener(data); + }, + + unfocusIfFocused() { + // On Firefox, if an + + + + + + + + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/hosts-files.html b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/hosts-files.html new file mode 100644 index 0000000..b3aac5e --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/hosts-files.html @@ -0,0 +1,78 @@ + + + + +uMatrix — Hosts files + + + + + + + +
+ +

+ + + +

+
    +
  • +
+
+
+
+

 info-circle

+

+
    +
  • +
+
+
+ +
+
+
+

 info-circle

+
    +
  • +
  • +
+
+
+ + + +
+ + + + + + + + + + + + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-0.png b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-0.png new file mode 100644 index 0000000..da3bb57 Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-0.png differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-1.png b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-1.png new file mode 100644 index 0000000..d3aea61 Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-1.png differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-10.png b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-10.png new file mode 100644 index 0000000..96c0cfa Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-10.png differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-11.png b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-11.png new file mode 100644 index 0000000..9412e32 Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-11.png differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-12.png b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-12.png new file mode 100644 index 0000000..a7f46c8 Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-12.png differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-13.png b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-13.png new file mode 100644 index 0000000..556c74c Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-13.png differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-14.png b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-14.png new file mode 100644 index 0000000..dcf0c7c Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-14.png differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-15.png b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-15.png new file mode 100644 index 0000000..8a86409 Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-15.png differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-16.png b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-16.png new file mode 100644 index 0000000..124bd8d Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-16.png differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-17.png b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-17.png new file mode 100644 index 0000000..c913b41 Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-17.png differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-18.png b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-18.png new file mode 100644 index 0000000..0288d92 Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-18.png differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-19.png b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-19.png new file mode 100644 index 0000000..a56bd43 Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-19.png differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-2.png b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-2.png new file mode 100644 index 0000000..46e3495 Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-2.png differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-3.png b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-3.png new file mode 100644 index 0000000..4730ef6 Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-3.png differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-4.png b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-4.png new file mode 100644 index 0000000..da44b73 Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-4.png differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-5.png b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-5.png new file mode 100644 index 0000000..a4303ae Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-5.png differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-6.png b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-6.png new file mode 100644 index 0000000..5507d36 Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-6.png differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-7.png b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-7.png new file mode 100644 index 0000000..7b3980c Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-7.png differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-8.png b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-8.png new file mode 100644 index 0000000..cee49d9 Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-8.png differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-9.png b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-9.png new file mode 100644 index 0000000..afa60d7 Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-9.png differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-off.png b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-off.png new file mode 100644 index 0000000..036a7a3 Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon19-off.png differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon38-off.png b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon38-off.png new file mode 100644 index 0000000..1c03c65 Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/browsericons/icon38-off.png differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/cloud.png b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/cloud.png new file mode 100644 index 0000000..6c78dde Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/cloud.png differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/fontawesome/LICENSE.txt b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/fontawesome/LICENSE.txt new file mode 100644 index 0000000..2784b8c --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/fontawesome/LICENSE.txt @@ -0,0 +1,25 @@ +# [Font Awesome v4.7.0](http://fontawesome.io) +### The iconic font and CSS framework + +Font Awesome is a full suite of 675 pictographic icons for easy scalable vector graphics on websites, +created and maintained by [Dave Gandy](https://twitter.com/davegandy). +Stay up to date with the latest release and announcements on Twitter: +[@fontawesome](http://twitter.com/fontawesome). + +Get started at http://fontawesome.io! + +## License +- The Font Awesome font is licensed under the SIL OFL 1.1: + - http://scripts.sil.org/OFL +- Font Awesome CSS, LESS, and Sass files are licensed under the MIT License: + - https://opensource.org/licenses/mit-license.html +- The Font Awesome documentation is licensed under the CC BY 3.0 License: + - http://creativecommons.org/licenses/by/3.0/ +- Attribution is no longer required as of Font Awesome 3.0, but much appreciated: + - `Font Awesome by Dave Gandy - http://fontawesome.io` +- Full details: http://fontawesome.io/license/ + +## Author +- Email: dave@fontawesome.io +- Twitter: http://twitter.com/davegandy +- GitHub: https://github.com/davegandy diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/fontawesome/fontawesome-defs.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/fontawesome/fontawesome-defs.svg new file mode 100644 index 0000000..a09a015 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/fontawesome/fontawesome-defs.svg @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/icon_128.png b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/icon_128.png new file mode 100644 index 0000000..8d117e5 Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/icon_128.png differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/icon_16.png b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/icon_16.png new file mode 100644 index 0000000..8631085 Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/icon_16.png differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/icon_64.png b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/icon_64.png new file mode 100644 index 0000000..3901388 Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/icon_64.png differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/matrix-group-hide.png b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/matrix-group-hide.png new file mode 100644 index 0000000..d6e618e Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/matrix-group-hide.png differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/matrix-group-hline.png b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/matrix-group-hline.png new file mode 100644 index 0000000..395610e Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/matrix-group-hline.png differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/matrix-group-show.png b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/matrix-group-show.png new file mode 100644 index 0000000..295ddab Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/matrix-group-show.png differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/permanent-black-small-cb.png b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/permanent-black-small-cb.png new file mode 100644 index 0000000..de45e78 Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/permanent-black-small-cb.png differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/permanent-black-small.png b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/permanent-black-small.png new file mode 100644 index 0000000..3cc3df2 Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/permanent-black-small.png differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/permanent-white-small-cb.png b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/permanent-white-small-cb.png new file mode 100644 index 0000000..a774fd3 Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/permanent-white-small-cb.png differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/permanent-white-small.png b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/permanent-white-small.png new file mode 100644 index 0000000..aa00073 Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/img/permanent-white-small.png differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/about.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/about.js new file mode 100644 index 0000000..1d16b8a --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/about.js @@ -0,0 +1,146 @@ +/******************************************************************************* + + uMatrix - a Chromium browser extension to black/white list requests. + Copyright (C) 2014-2018 Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uMatrix +*/ + +/* global uDom */ + +'use strict'; + +/******************************************************************************/ + +uDom.onLoad(function() { + +/******************************************************************************/ + +var backupUserDataToFile = function() { + var userDataReady = function(userData) { + vAPI.download({ + 'url': 'data:text/plain,' + encodeURIComponent(JSON.stringify(userData, null, 2)), + 'filename': uDom('[data-i18n="aboutBackupFilename"]').text() + }); + }; + + vAPI.messaging.send('about.js', { what: 'getAllUserData' }, userDataReady); +}; + +/******************************************************************************/ + +function restoreUserDataFromFile() { + var validateBackup = function(s) { + var userData = null; + try { + userData = JSON.parse(s); + } + catch (e) { + userData = null; + } + if ( userData === null ) { + return null; + } + if ( + typeof userData !== 'object' || + typeof userData.app !== 'string' || + typeof userData.version !== 'string' || + typeof userData.when !== 'number' || + typeof userData.settings !== 'object' || + (typeof userData.rules !== 'string' && + Array.isArray(userData.rules) === false) + ) { + return null; + } + return userData; + }; + + var fileReaderOnLoadHandler = function() { + var userData = validateBackup(this.result); + if ( !userData ) { + window.alert(uDom('[data-i18n="aboutRestoreError"]').text()); + return; + } + var time = new Date(userData.when); + var msg = uDom('[data-i18n="aboutRestoreConfirm"]').text() + .replace('{{time}}', time.toLocaleString()); + var proceed = window.confirm(msg); + if ( proceed ) { + vAPI.messaging.send( + 'about.js', + { what: 'restoreAllUserData', userData: userData } + ); + } + }; + + var file = this.files[0]; + if ( file === undefined || file.name === '' ) { + return; + } + if ( file.type.indexOf('text') !== 0 ) { + return; + } + var fr = new FileReader(); + fr.onload = fileReaderOnLoadHandler; + fr.readAsText(file); +} + +/******************************************************************************/ + +var startRestoreFilePicker = function() { + var input = document.getElementById('restoreFilePicker'); + // Reset to empty string, this will ensure an change event is properly + // triggered if the user pick a file, even if it is the same as the last + // one picked. + input.value = ''; + input.click(); +}; + +/******************************************************************************/ + +var resetUserData = function() { + var proceed = window.confirm(uDom('[data-i18n="aboutResetConfirm"]').text()); + if ( proceed ) { + vAPI.messaging.send('about.js', { what: 'resetAllUserData' }); + } +}; + +/******************************************************************************/ + +(function() { + var renderStats = function(details) { + document.getElementById('aboutVersion').textContent = details.version; + var template = uDom('[data-i18n="aboutStorageUsed"]').text(); + var storageUsed = '?'; + if ( typeof details.storageUsed === 'number' ) { + storageUsed = details.storageUsed.toLocaleString(); + } + document.getElementById('aboutStorageUsed').textContent = + template.replace('{{storageUsed}}', storageUsed); + }; + vAPI.messaging.send('about.js', { what: 'getSomeStats' }, renderStats); +})(); + +/******************************************************************************/ + +uDom('#backupUserDataButton').on('click', backupUserDataToFile); +uDom('#restoreUserDataButton').on('click', startRestoreFilePicker); +uDom('#restoreFilePicker').on('change', restoreUserDataFromFile); +uDom('#resetUserDataButton').on('click', resetUserData); + +/******************************************************************************/ + +}); diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/asset-viewer.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/asset-viewer.js new file mode 100644 index 0000000..2f1be73 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/asset-viewer.js @@ -0,0 +1,45 @@ +/******************************************************************************* + + uMatrix - a Chromium browser extension to block requests. + Copyright (C) 2014-2017 Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uMatrix +*/ + +'use strict'; + +/******************************************************************************/ + +(function() { + + var onAssetContentReceived = function(details) { + document.getElementById('content').textContent = + details && (details.content || ''); + }; + + var q = window.location.search; + var matches = q.match(/^\?url=([^&]+)/); + if ( !matches || matches.length !== 2 ) { + return; + } + + vAPI.messaging.send( + 'asset-viewer.js', + { what : 'getAssetContent', url: matches[1] }, + onAssetContentReceived + ); + +})(); diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/assets.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/assets.js new file mode 100644 index 0000000..195b014 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/assets.js @@ -0,0 +1,935 @@ +/******************************************************************************* + + uMatrix - a browser extension to black/white list requests. + Copyright (C) 2013-present Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uMatrix +*/ + +'use strict'; + +/******************************************************************************/ + +µMatrix.assets = (function() { + +/******************************************************************************/ + +var reIsExternalPath = /^(?:[a-z-]+):\/\//, + errorCantConnectTo = vAPI.i18n('errorCantConnectTo'), + noopfunc = function(){}; + +var api = { +}; + +/******************************************************************************/ + +var observers = []; + +api.addObserver = function(observer) { + if ( observers.indexOf(observer) === -1 ) { + observers.push(observer); + } +}; + +api.removeObserver = function(observer) { + var pos; + while ( (pos = observers.indexOf(observer)) !== -1 ) { + observers.splice(pos, 1); + } +}; + +var fireNotification = function(topic, details) { + var result; + for ( let i = 0; i < observers.length; i++ ) { + let r = observers[i](topic, details); + if ( r !== undefined && result === undefined ) { + result = r; + } + } + return result; +}; + +/******************************************************************************/ + +api.fetchText = function(url, onLoad, onError) { + var actualUrl = reIsExternalPath.test(url) ? url : vAPI.getURL(url); + + if ( typeof onError !== 'function' ) { + onError = onLoad; + } + + // https://github.com/gorhill/uMatrix/issues/15 + var onResponseReceived = function() { + this.onload = this.onerror = this.ontimeout = null; + // xhr for local files gives status 0, but actually succeeds + var details = { + url: url, + content: '', + statusCode: this.status || 200, + statusText: this.statusText || '' + }; + if ( details.statusCode < 200 || details.statusCode >= 300 ) { + return onError.call(null, details); + } + // consider an empty result to be an error + if ( stringIsNotEmpty(this.responseText) === false ) { + return onError.call(null, details); + } + // we never download anything else than plain text: discard if response + // appears to be a HTML document: could happen when server serves + // some kind of error page I suppose + var text = this.responseText.trim(); + if ( text.startsWith('<') && text.endsWith('>') ) { + return onError.call(null, details); + } + details.content = this.responseText; + return onLoad.call(null, details); + }; + + var onErrorReceived = function() { + this.onload = this.onerror = this.ontimeout = null; + µMatrix.logger.writeOne({ + error: errorCantConnectTo.replace('{{url}}', actualUrl) + }); + onError.call(null, { url: url, content: '' }); + }; + + // Be ready for thrown exceptions: + // I am pretty sure it used to work, but now using a URL such as + // `file:///` on Chromium 40 results in an exception being thrown. + var xhr = new XMLHttpRequest(); + try { + xhr.open('get', actualUrl, true); + xhr.timeout = 30000; + xhr.onload = onResponseReceived; + xhr.onerror = onErrorReceived; + xhr.ontimeout = onErrorReceived; + xhr.responseType = 'text'; + xhr.send(); + } catch (e) { + onErrorReceived.call(xhr); + } +}; + +/******************************************************************************* + + TODO(seamless migration): + This block of code will be removed when I am confident all users have + moved to a version of uBO which does not require the old way of caching + assets. + + api.listKeyAliases: a map of old asset keys to new asset keys. + + migrate(): to seamlessly migrate the old cache manager to the new one: + - attempt to preserve and move content of cached assets to new locations; + - removes all traces of now obsolete cache manager entries in cacheStorage. + + This code will typically execute only once, when the newer version of uBO + is first installed and executed. + +**/ + +api.listKeyAliases = { + "assets/thirdparties/publicsuffix.org/list/effective_tld_names.dat": "public_suffix_list.dat", + "assets/thirdparties/hosts-file.net/ad-servers": "hphosts", + "assets/thirdparties/www.malwaredomainlist.com/hostslist/hosts.txt": "malware-0", + "assets/thirdparties/mirror1.malwaredomains.com/files/justdomains": "malware-1", + "assets/thirdparties/pgl.yoyo.org/as/serverlist": "plowe-0", + "assets/thirdparties/someonewhocares.org/hosts/hosts": "dpollock-0", + "assets/thirdparties/winhelp2002.mvps.org/hosts.txt": "mvps-0" +}; + +var migrate = function(callback) { + var entries, + moveCount = 0, + toRemove = []; + + var countdown = function(change) { + moveCount -= (change || 0); + if ( moveCount !== 0 ) { return; } + vAPI.cacheStorage.remove(toRemove); + saveAssetCacheRegistry(); + callback(); + }; + + var onContentRead = function(oldKey, newKey, bin) { + var content = bin && bin['cached_asset_content://' + oldKey] || undefined; + if ( content ) { + assetCacheRegistry[newKey] = { + readTime: Date.now(), + writeTime: entries[oldKey] + }; + if ( reIsExternalPath.test(oldKey) ) { + assetCacheRegistry[newKey].remoteURL = oldKey; + } + bin = {}; + bin['cache/' + newKey] = content; + vAPI.cacheStorage.set(bin); + } + countdown(1); + }; + + var onEntries = function(bin) { + entries = bin && bin.cached_asset_entries; + if ( !entries ) { return callback(); } + if ( bin && bin.assetCacheRegistry ) { + assetCacheRegistry = bin.assetCacheRegistry; + } + var aliases = api.listKeyAliases; + for ( var oldKey in entries ) { + var newKey = aliases[oldKey]; + if ( !newKey && /^https?:\/\//.test(oldKey) ) { + newKey = oldKey; + } + if ( newKey ) { + vAPI.cacheStorage.get( + 'cached_asset_content://' + oldKey, + onContentRead.bind(null, oldKey, newKey) + ); + moveCount += 1; + } + toRemove.push('cached_asset_content://' + oldKey); + } + toRemove.push('cached_asset_entries', 'extensionLastVersion'); + countdown(); + }; + + vAPI.cacheStorage.get( + [ 'cached_asset_entries', 'assetCacheRegistry' ], + onEntries + ); +}; + +/******************************************************************************* + + The purpose of the asset source registry is to keep key detail information + about an asset: + - Where to load it from: this may consist of one or more URLs, either local + or remote. + - After how many days an asset should be deemed obsolete -- i.e. in need of + an update. + - The origin and type of an asset. + - The last time an asset was registered. + +**/ + +var assetSourceRegistryStatus, + assetSourceRegistry = Object.create(null); + +var registerAssetSource = function(assetKey, dict) { + var entry = assetSourceRegistry[assetKey] || {}; + for ( var prop in dict ) { + if ( dict.hasOwnProperty(prop) === false ) { continue; } + if ( dict[prop] === undefined ) { + delete entry[prop]; + } else { + entry[prop] = dict[prop]; + } + } + // `content` property => `type` property + if ( entry.type === undefined && entry.content !== undefined ) { + entry.type = entry.content; + entry.content = undefined; + } + var contentURL = dict.contentURL; + if ( contentURL !== undefined ) { + if ( typeof contentURL === 'string' ) { + contentURL = entry.contentURL = [ contentURL ]; + } else if ( Array.isArray(contentURL) === false ) { + contentURL = entry.contentURL = []; + } + var remoteURLCount = 0; + for ( var i = 0; i < contentURL.length; i++ ) { + if ( reIsExternalPath.test(contentURL[i]) ) { + remoteURLCount += 1; + } + } + entry.hasLocalURL = remoteURLCount !== contentURL.length; + entry.hasRemoteURL = remoteURLCount !== 0; + } else if ( entry.contentURL === undefined ) { + entry.contentURL = []; + } + if ( typeof entry.updateAfter !== 'number' ) { + entry.updateAfter = 13; + } + if ( entry.submitter ) { + entry.submitTime = Date.now(); // To detect stale entries + } + assetSourceRegistry[assetKey] = entry; +}; + +var unregisterAssetSource = function(assetKey) { + assetCacheRemove(assetKey); + delete assetSourceRegistry[assetKey]; +}; + +var saveAssetSourceRegistry = (function() { + var timer; + var save = function() { + timer = undefined; + vAPI.cacheStorage.set({ assetSourceRegistry: assetSourceRegistry }); + }; + return function(lazily) { + if ( timer !== undefined ) { + clearTimeout(timer); + } + if ( lazily ) { + timer = vAPI.setTimeout(save, 500); + } else { + save(); + } + }; +})(); + +var updateAssetSourceRegistry = function(json, silent) { + var newDict; + try { + newDict = JSON.parse(json); + } catch (ex) { + } + if ( newDict instanceof Object === false ) { return; } + + var oldDict = assetSourceRegistry, + assetKey; + + // Remove obsolete entries (only those which were built-in). + for ( assetKey in oldDict ) { + if ( + newDict[assetKey] === undefined && + oldDict[assetKey].submitter === undefined + ) { + unregisterAssetSource(assetKey); + } + } + // Add/update existing entries. Notify of new asset sources. + for ( assetKey in newDict ) { + if ( oldDict[assetKey] === undefined && !silent ) { + fireNotification( + 'builtin-asset-source-added', + { assetKey: assetKey, entry: newDict[assetKey] } + ); + } + registerAssetSource(assetKey, newDict[assetKey]); + } + saveAssetSourceRegistry(); +}; + +var getAssetSourceRegistry = function(callback) { + // Already loaded. + if ( assetSourceRegistryStatus === 'ready' ) { + callback(assetSourceRegistry); + return; + } + + // Being loaded. + if ( Array.isArray(assetSourceRegistryStatus) ) { + assetSourceRegistryStatus.push(callback); + return; + } + + // Not loaded: load it. + assetSourceRegistryStatus = [ callback ]; + + var registryReady = function() { + // `content` property => `type` property + for ( let key in assetSourceRegistry ) { + let entry = assetSourceRegistry[key]; + if ( entry.type === undefined && entry.content !== undefined ) { + entry.type = entry.content; + entry.content = undefined; + } + } + + var callers = assetSourceRegistryStatus; + assetSourceRegistryStatus = 'ready'; + var fn; + while ( (fn = callers.shift()) ) { + fn(assetSourceRegistry); + } + }; + + // First-install case. + var createRegistry = function() { + api.fetchText( + µMatrix.assetsBootstrapLocation || 'assets/assets.json', + function(details) { + updateAssetSourceRegistry(details.content, true); + registryReady(); + } + ); + }; + + vAPI.cacheStorage.get('assetSourceRegistry', function(bin) { + if ( !bin || !bin.assetSourceRegistry ) { + createRegistry(); + return; + } + assetSourceRegistry = bin.assetSourceRegistry; + registryReady(); + }); +}; + +api.registerAssetSource = function(assetKey, details) { + getAssetSourceRegistry(function() { + registerAssetSource(assetKey, details); + saveAssetSourceRegistry(true); + }); +}; + +api.unregisterAssetSource = function(assetKey) { + getAssetSourceRegistry(function() { + unregisterAssetSource(assetKey); + saveAssetSourceRegistry(true); + }); +}; + +/******************************************************************************* + + The purpose of the asset cache registry is to keep track of all assets + which have been persisted into the local cache. + +**/ + +var assetCacheRegistryStatus, + assetCacheRegistryStartTime = Date.now(), + assetCacheRegistry = {}; + +var getAssetCacheRegistry = function(callback) { + // Already loaded. + if ( assetCacheRegistryStatus === 'ready' ) { + callback(assetCacheRegistry); + return; + } + + // Being loaded. + if ( Array.isArray(assetCacheRegistryStatus) ) { + assetCacheRegistryStatus.push(callback); + return; + } + + // Not loaded: load it. + assetCacheRegistryStatus = [ callback ]; + + var registryReady = function() { + var callers = assetCacheRegistryStatus; + assetCacheRegistryStatus = 'ready'; + var fn; + while ( (fn = callers.shift()) ) { + fn(assetCacheRegistry); + } + }; + + var migrationDone = function() { + vAPI.cacheStorage.get('assetCacheRegistry', function(bin) { + if ( bin && bin.assetCacheRegistry ) { + assetCacheRegistry = bin.assetCacheRegistry; + } + registryReady(); + }); + }; + + migrate(migrationDone); +}; + +var saveAssetCacheRegistry = (function() { + var timer; + var save = function() { + timer = undefined; + vAPI.cacheStorage.set({ assetCacheRegistry: assetCacheRegistry }); + }; + return function(lazily) { + if ( timer !== undefined ) { clearTimeout(timer); } + if ( lazily ) { + timer = vAPI.setTimeout(save, 500); + } else { + save(); + } + }; +})(); + +var assetCacheRead = function(assetKey, callback) { + var internalKey = 'cache/' + assetKey; + + var reportBack = function(content, err) { + var details = { assetKey: assetKey, content: content }; + if ( err ) { details.error = err; } + callback(details); + }; + + var onAssetRead = function(bin) { + if ( !bin || !bin[internalKey] ) { + return reportBack('', 'E_NOTFOUND'); + } + var entry = assetCacheRegistry[assetKey]; + if ( entry === undefined ) { + return reportBack('', 'E_NOTFOUND'); + } + entry.readTime = Date.now(); + saveAssetCacheRegistry(true); + reportBack(bin[internalKey]); + }; + + var onReady = function() { + vAPI.cacheStorage.get(internalKey, onAssetRead); + }; + + getAssetCacheRegistry(onReady); +}; + +var assetCacheWrite = function(assetKey, details, callback) { + var internalKey = 'cache/' + assetKey; + var content = ''; + if ( typeof details === 'string' ) { + content = details; + } else if ( details instanceof Object ) { + content = details.content || ''; + } + + if ( content === '' ) { + return assetCacheRemove(assetKey, callback); + } + + var reportBack = function(content) { + var details = { assetKey: assetKey, content: content }; + if ( typeof callback === 'function' ) { + callback(details); + } + fireNotification('after-asset-updated', details); + }; + + var onReady = function() { + var entry = assetCacheRegistry[assetKey]; + if ( entry === undefined ) { + entry = assetCacheRegistry[assetKey] = {}; + } + entry.writeTime = entry.readTime = Date.now(); + if ( details instanceof Object && typeof details.url === 'string' ) { + entry.remoteURL = details.url; + } + var bin = { assetCacheRegistry: assetCacheRegistry }; + bin[internalKey] = content; + vAPI.cacheStorage.set(bin); + reportBack(content); + }; + getAssetCacheRegistry(onReady); +}; + +var assetCacheRemove = function(pattern, callback) { + var onReady = function() { + var cacheDict = assetCacheRegistry, + removedEntries = [], + removedContent = []; + for ( var assetKey in cacheDict ) { + if ( pattern instanceof RegExp && !pattern.test(assetKey) ) { + continue; + } + if ( typeof pattern === 'string' && assetKey !== pattern ) { + continue; + } + removedEntries.push(assetKey); + removedContent.push('cache/' + assetKey); + delete cacheDict[assetKey]; + } + if ( removedContent.length !== 0 ) { + vAPI.cacheStorage.remove(removedContent); + var bin = { assetCacheRegistry: assetCacheRegistry }; + vAPI.cacheStorage.set(bin); + } + if ( typeof callback === 'function' ) { + callback(); + } + for ( var i = 0; i < removedEntries.length; i++ ) { + fireNotification('after-asset-updated', { assetKey: removedEntries[i] }); + } + }; + + getAssetCacheRegistry(onReady); +}; + +var assetCacheMarkAsDirty = function(pattern, exclude, callback) { + var onReady = function() { + var cacheDict = assetCacheRegistry, + cacheEntry, + mustSave = false; + for ( var assetKey in cacheDict ) { + if ( pattern instanceof RegExp ) { + if ( pattern.test(assetKey) === false ) { continue; } + } else if ( typeof pattern === 'string' ) { + if ( assetKey !== pattern ) { continue; } + } else if ( Array.isArray(pattern) ) { + if ( pattern.indexOf(assetKey) === -1 ) { continue; } + } + if ( exclude instanceof RegExp ) { + if ( exclude.test(assetKey) ) { continue; } + } else if ( typeof exclude === 'string' ) { + if ( assetKey === exclude ) { continue; } + } else if ( Array.isArray(exclude) ) { + if ( exclude.indexOf(assetKey) !== -1 ) { continue; } + } + cacheEntry = cacheDict[assetKey]; + if ( !cacheEntry.writeTime ) { continue; } + cacheDict[assetKey].writeTime = 0; + mustSave = true; + } + if ( mustSave ) { + var bin = { assetCacheRegistry: assetCacheRegistry }; + vAPI.cacheStorage.set(bin); + } + if ( typeof callback === 'function' ) { + callback(); + } + }; + if ( typeof exclude === 'function' ) { + callback = exclude; + exclude = undefined; + } + getAssetCacheRegistry(onReady); +}; + +/******************************************************************************/ + +var stringIsNotEmpty = function(s) { + return typeof s === 'string' && s !== ''; +}; + +/******************************************************************************/ + +api.get = function(assetKey, options, callback) { + if ( typeof options === 'function' ) { + callback = options; + options = {}; + } else if ( typeof callback !== 'function' ) { + callback = noopfunc; + } + + var assetDetails = {}, + contentURLs, + contentURL; + + var reportBack = function(content, err) { + var details = { assetKey: assetKey, content: content }; + if ( err ) { + details.error = assetDetails.lastError = err; + } else { + assetDetails.lastError = undefined; + } + callback(details); + }; + + var onContentNotLoaded = function() { + var isExternal; + while ( (contentURL = contentURLs.shift()) ) { + isExternal = reIsExternalPath.test(contentURL); + if ( isExternal === false || assetDetails.hasLocalURL !== true ) { + break; + } + } + if ( !contentURL ) { + return reportBack('', 'E_NOTFOUND'); + } + api.fetchText(contentURL, onContentLoaded, onContentNotLoaded); + }; + + var onContentLoaded = function(details) { + if ( stringIsNotEmpty(details.content) === false ) { + onContentNotLoaded(); + return; + } + if ( reIsExternalPath.test(contentURL) && options.dontCache !== true ) { + assetCacheWrite(assetKey, { + content: details.content, + url: contentURL + }); + } + reportBack(details.content); + }; + + var onCachedContentLoaded = function(details) { + if ( details.content !== '' ) { + return reportBack(details.content); + } + getAssetSourceRegistry(function(registry) { + assetDetails = registry[assetKey] || {}; + if ( typeof assetDetails.contentURL === 'string' ) { + contentURLs = [ assetDetails.contentURL ]; + } else if ( Array.isArray(assetDetails.contentURL) ) { + contentURLs = assetDetails.contentURL.slice(0); + } else { + contentURLs = []; + } + onContentNotLoaded(); + }); + }; + + assetCacheRead(assetKey, onCachedContentLoaded); +}; + +/******************************************************************************/ + +var getRemote = function(assetKey, callback) { + var assetDetails = {}, + contentURLs, + contentURL; + + var reportBack = function(content, err) { + var details = { assetKey: assetKey, content: content }; + if ( err ) { + details.error = assetDetails.lastError = err; + } else { + assetDetails.lastError = undefined; + } + callback(details); + }; + + var onRemoteContentLoaded = function(details) { + if ( stringIsNotEmpty(details.content) === false ) { + registerAssetSource(assetKey, { error: { time: Date.now(), error: 'No content' } }); + tryLoading(); + return; + } + assetCacheWrite(assetKey, { + content: details.content, + url: contentURL + }); + registerAssetSource(assetKey, { error: undefined }); + reportBack(details.content); + }; + + var onRemoteContentError = function(details) { + var text = details.statusText; + if ( details.statusCode === 0 ) { + text = 'network error'; + } + registerAssetSource(assetKey, { error: { time: Date.now(), error: text } }); + tryLoading(); + }; + + var tryLoading = function() { + while ( (contentURL = contentURLs.shift()) ) { + if ( reIsExternalPath.test(contentURL) ) { break; } + } + if ( !contentURL ) { + return reportBack('', 'E_NOTFOUND'); + } + api.fetchText(contentURL, onRemoteContentLoaded, onRemoteContentError); + }; + + getAssetSourceRegistry(function(registry) { + assetDetails = registry[assetKey] || {}; + if ( typeof assetDetails.contentURL === 'string' ) { + contentURLs = [ assetDetails.contentURL ]; + } else if ( Array.isArray(assetDetails.contentURL) ) { + contentURLs = assetDetails.contentURL.slice(0); + } else { + contentURLs = []; + } + tryLoading(); + }); +}; + +/******************************************************************************/ + +api.put = function(assetKey, content, callback) { + assetCacheWrite(assetKey, content, callback); +}; + +/******************************************************************************/ + +api.metadata = function(callback) { + var assetRegistryReady = false, + cacheRegistryReady = false; + + var onReady = function() { + var assetDict = JSON.parse(JSON.stringify(assetSourceRegistry)), + cacheDict = assetCacheRegistry, + assetEntry, cacheEntry, + now = Date.now(), obsoleteAfter; + for ( var assetKey in assetDict ) { + assetEntry = assetDict[assetKey]; + cacheEntry = cacheDict[assetKey]; + if ( cacheEntry ) { + assetEntry.cached = true; + assetEntry.writeTime = cacheEntry.writeTime; + obsoleteAfter = cacheEntry.writeTime + assetEntry.updateAfter * 86400000; + assetEntry.obsolete = obsoleteAfter < now; + assetEntry.remoteURL = cacheEntry.remoteURL; + } else { + assetEntry.writeTime = 0; + obsoleteAfter = 0; + assetEntry.obsolete = true; + } + } + callback(assetDict); + }; + + getAssetSourceRegistry(function() { + assetRegistryReady = true; + if ( cacheRegistryReady ) { onReady(); } + }); + + getAssetCacheRegistry(function() { + cacheRegistryReady = true; + if ( assetRegistryReady ) { onReady(); } + }); +}; + +/******************************************************************************/ + +api.purge = assetCacheMarkAsDirty; + +api.remove = function(pattern, callback) { + assetCacheRemove(pattern, callback); +}; + +api.rmrf = function() { + assetCacheRemove(/./); +}; + +/******************************************************************************/ + +// Asset updater area. +var updaterStatus, + updaterTimer, + updaterAssetDelayDefault = 120000, + updaterAssetDelay = updaterAssetDelayDefault, + updaterUpdated = [], + updaterFetched = new Set(); + +var updateFirst = function() { + updaterStatus = 'updating'; + updaterFetched.clear(); + updaterUpdated = []; + fireNotification('before-assets-updated'); + updateNext(); +}; + +var updateNext = function() { + var assetDict, cacheDict; + + // This will remove a cached asset when it's no longer in use. + var garbageCollectOne = function(assetKey) { + var cacheEntry = cacheDict[assetKey]; + if ( cacheEntry && cacheEntry.readTime < assetCacheRegistryStartTime ) { + assetCacheRemove(assetKey); + } + }; + + var findOne = function() { + var now = Date.now(), + assetEntry, cacheEntry; + for ( var assetKey in assetDict ) { + assetEntry = assetDict[assetKey]; + if ( assetEntry.hasRemoteURL !== true ) { continue; } + if ( updaterFetched.has(assetKey) ) { continue; } + cacheEntry = cacheDict[assetKey]; + if ( cacheEntry && (cacheEntry.writeTime + assetEntry.updateAfter * 86400000) > now ) { + continue; + } + if ( + fireNotification( + 'before-asset-updated', + { + assetKey: assetKey, + type: assetEntry.type + } + ) + ) { + return assetKey; + } + garbageCollectOne(assetKey); + } + }; + + var updatedOne = function(details) { + if ( details.content !== '' ) { + updaterUpdated.push(details.assetKey); + if ( details.assetKey === 'assets.json' ) { + updateAssetSourceRegistry(details.content); + } + } else { + fireNotification('asset-update-failed', { assetKey: details.assetKey }); + } + if ( findOne() !== undefined ) { + vAPI.setTimeout(updateNext, updaterAssetDelay); + } else { + updateDone(); + } + }; + + var updateOne = function() { + var assetKey = findOne(); + if ( assetKey === undefined ) { + return updateDone(); + } + updaterFetched.add(assetKey); + getRemote(assetKey, updatedOne); + }; + + getAssetSourceRegistry(function(dict) { + assetDict = dict; + if ( !cacheDict ) { return; } + updateOne(); + }); + + getAssetCacheRegistry(function(dict) { + cacheDict = dict; + if ( !assetDict ) { return; } + updateOne(); + }); +}; + +var updateDone = function() { + var assetKeys = updaterUpdated.slice(0); + updaterFetched.clear(); + updaterUpdated = []; + updaterStatus = undefined; + updaterAssetDelay = updaterAssetDelayDefault; + fireNotification('after-assets-updated', { assetKeys: assetKeys }); +}; + +api.updateStart = function(details) { + var oldUpdateDelay = updaterAssetDelay, + newUpdateDelay = details.delay || updaterAssetDelayDefault; + updaterAssetDelay = Math.min(oldUpdateDelay, newUpdateDelay); + if ( updaterStatus !== undefined ) { + if ( newUpdateDelay < oldUpdateDelay ) { + clearTimeout(updaterTimer); + updaterTimer = vAPI.setTimeout(updateNext, updaterAssetDelay); + } + return; + } + updateFirst(); +}; + +api.updateStop = function() { + if ( updaterTimer ) { + clearTimeout(updaterTimer); + updaterTimer = undefined; + } + if ( updaterStatus !== undefined ) { + updateDone(); + } +}; + +/******************************************************************************/ + +return api; + +/******************************************************************************/ + +})(); + +/******************************************************************************/ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/background.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/background.js new file mode 100644 index 0000000..6c1f8ba --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/background.js @@ -0,0 +1,227 @@ +/******************************************************************************* + + uMatrix - a browser extension to black/white list requests. + Copyright (C) 2014-present Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uMatrix +*/ + +'use strict'; + +/******************************************************************************/ + +const µMatrix = (function() { // jshint ignore:line + +/******************************************************************************/ + +const oneSecond = 1000; +const oneMinute = 60 * oneSecond; +const oneHour = 60 * oneMinute; +const oneDay = 24 * oneHour; + +/******************************************************************************* + + SVG-based icons below were extracted from + fontawesome-webfont.svg v4.7. Excerpt of copyright notice at + the top of the file: + + > Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 + > By ,,, + > Copyright Dave Gandy 2016. All rights reserved. + + Excerpt of the license information in the fontawesome CSS + file bundled with the package: + + > Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + > License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + + Font icons: + - glyph-name: "external_link" + +*/ + +const rawSettingsDefault = { + contributorMode: false, + disableCSPReportInjection: false, + enforceEscapedFragment: true, + placeholderBackground: + [ + 'url("data:image/png;base64,', + 'iVBORw0KGgoAAAANSUhEUgAAAAoAAAAK', + 'CAAAAACoWZBhAAAABGdBTUEAALGPC/xh', + 'BQAAAAJiS0dEAP+Hj8y/AAAAB3RJTUUH', + '3wwIAAgyL/YaPAAAACJJREFUCFtjfMbO', + 'AAQ/gZiFnQPEBAEmGIMIJgtIL8QEgtoA', + 'In4D/96X1KAAAAAldEVYdGRhdGU6Y3Jl', + 'YXRlADIwMTUtMTItMDhUMDA6MDg6NTAr', + 'MDM6MDAasuuJAAAAJXRFWHRkYXRlOm1v', + 'ZGlmeQAyMDE1LTEyLTA4VDAwOjA4OjUw', + 'KzAzOjAwa+9TNQAAAABJRU5ErkJggg==', + '") ', + 'repeat scroll #fff' + ].join(''), + placeholderBorder: '1px solid rgba(0, 0, 0, 0.1)', + imagePlaceholder: true, + imagePlaceholderBackground: 'default', + imagePlaceholderBorder: 'default', + framePlaceholder: true, + framePlaceholderDocument: + [ + '', + '', + '', + '', + '', + '{{url}}', + '' + ].join(''), + framePlaceholderBackground: 'default', + suspendTabsUntilReady: false +}; + +/******************************************************************************/ + +return { + onBeforeStartQueue: [], + + userSettings: { + alwaysDetachLogger: false, + autoUpdate: true, + clearBrowserCache: true, + clearBrowserCacheAfter: 60, + cloudStorageEnabled: false, + collapseBlacklisted: true, + collapseBlocked: false, + colorBlindFriendly: false, + deleteCookies: false, + deleteUnusedSessionCookies: false, + deleteUnusedSessionCookiesAfter: 60, + deleteLocalStorage: false, + displayTextSize: '14px', + externalHostsFiles: [], + externalRecipeFiles: [], + iconBadgeEnabled: true, + maxLoggedRequests: 1000, + noTooltips: false, + popupCollapseAllDomains: false, + popupCollapseBlacklistedDomains: false, + popupScopeLevel: 'domain', + processHyperlinkAuditing: true, + selectedHostsFiles: [ '' ], + selectedRecipeFiles: [ '' ], + userHosts: { + enabled: false, + content: '' + }, + userRecipes: { + enabled: false, + content: '' + } + }, + + rawSettingsDefault: rawSettingsDefault, + rawSettings: (function() { + let out = Object.assign({}, rawSettingsDefault), + json = vAPI.localStorage.getItem('immediateRawSettings'); + if ( typeof json === 'string' ) { + try { + let o = JSON.parse(json); + if ( o instanceof Object ) { + for ( const k in o ) { + if ( out.hasOwnProperty(k) ) { + out[k] = o[k]; + } + } + } + } + catch(ex) { + } + } + return out; + })(), + rawSettingsWriteTime: 0, + + clearBrowserCacheCycle: 0, + cspNoInlineScript: "script-src 'unsafe-eval' blob: *", + cspNoInlineStyle: "style-src blob: *", + cspNoWorker: "worker-src 'none'; report-uri about:blank", + cantMergeCSPHeaders: false, + updateAssetsEvery: 11 * oneDay + 1 * oneHour + 1 * oneMinute + 1 * oneSecond, + firstUpdateAfter: 11 * oneMinute, + nextUpdateAfter: 11 * oneHour, + assetsBootstrapLocation: 'assets/assets.json', + pslAssetKey: 'public_suffix_list.dat', + + // list of live hosts files + liveHostsFiles: new Map(), + + // urls stats are kept on the back burner while waiting to be reactivated + // in a tab or another. + pageStores: new Map(), + pageStoresToken: 0, + pageStoreCemetery: new Map(), + + // page url => permission scope + tMatrix: null, + pMatrix: null, + + ubiquitousBlacklist: null, + + // various stats + cookieRemovedCounter: 0, + localStorageRemovedCounter: 0, + cookieHeaderFoiledCounter: 0, + hyperlinkAuditingFoiledCounter: 0, + browserCacheClearedCounter: 0, + storageUsed: 0, + + // record what the browser is doing behind the scene + behindTheSceneScope: 'behind-the-scene', + + noopFunc: function(){}, + + // so that I don't have to care for last comma + dummy: 0 +}; + +/******************************************************************************/ + +})(); + +/******************************************************************************/ + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/browsercache.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/browsercache.js new file mode 100644 index 0000000..6f9cb8c --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/browsercache.js @@ -0,0 +1,62 @@ +/******************************************************************************* + + uMatrix - a browser extension to black/white list requests. + Copyright (C) 2015-present Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uMatrix +*/ + +'use strict'; + +/******************************************************************************/ + +(function() { + +/******************************************************************************/ + +// Browser data jobs + +var clearCache = function() { + vAPI.setTimeout(clearCache, 15 * 60 * 1000); + + var µm = µMatrix; + if ( !µm.userSettings.clearBrowserCache ) { + return; + } + + µm.clearBrowserCacheCycle -= 15; + if ( µm.clearBrowserCacheCycle > 0 ) { + return; + } + + vAPI.browserData.clearCache(); + + µm.clearBrowserCacheCycle = µm.userSettings.clearBrowserCacheAfter; + µm.browserCacheClearedCounter++; + + // TODO: i18n + µm.logger.writeOne({ info: vAPI.i18n('loggerEntryBrowserCacheCleared') }); + + //console.debug('clearBrowserCacheCallback()> vAPI.browserData.clearCache() called'); +}; + +vAPI.setTimeout(clearCache, 15 * 60 * 1000); + +/******************************************************************************/ + +})(); + +/******************************************************************************/ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/cloud-ui.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/cloud-ui.js new file mode 100644 index 0000000..4394d58 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/cloud-ui.js @@ -0,0 +1,209 @@ +/******************************************************************************* + + uBlock Origin - a browser extension to block requests. + Copyright (C) 2015-present Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uBlock +*/ + +/* global uDom, faIconsInit */ + +'use strict'; + +/******************************************************************************/ + +(function() { + +/******************************************************************************/ + +self.cloud = { + options: {}, + datakey: '', + data: undefined, + onPush: null, + onPull: null +}; + +/******************************************************************************/ + +var widget = uDom.nodeFromId('cloudWidget'); +if ( widget === null ) { + return; +} + +self.cloud.datakey = widget.getAttribute('data-cloud-entry') || ''; +if ( self.cloud.datakey === '' ) { + return; +} + +/******************************************************************************/ + +var onCloudDataReceived = function(entry) { + if ( entry instanceof Object === false ) { return; } + + self.cloud.data = entry.data; + + uDom.nodeFromId('cloudPull').removeAttribute('disabled'); + uDom.nodeFromId('cloudPullAndMerge').removeAttribute('disabled'); + + let timeOptions = { + weekday: 'short', + year: 'numeric', + month: 'short', + day: 'numeric', + hour: 'numeric', + minute: 'numeric', + second: 'numeric', + timeZoneName: 'short' + }; + + let time = new Date(entry.tstamp); + widget.querySelector('[data-i18n="cloudNoData"]').textContent = + entry.source + '\n' + + time.toLocaleString('fullwide', timeOptions); +}; + +/******************************************************************************/ + +var fetchCloudData = function() { + vAPI.messaging.send( + 'cloud-ui.js', + { + what: 'cloudPull', + datakey: self.cloud.datakey + }, + onCloudDataReceived + ); +}; + +/******************************************************************************/ + +var pushData = function() { + if ( typeof self.cloud.onPush !== 'function' ) { + return; + } + vAPI.messaging.send( + 'cloud-ui.js', + { + what: 'cloudPush', + datakey: self.cloud.datakey, + data: self.cloud.onPush() + }, + fetchCloudData + ); +}; + +/******************************************************************************/ + +var pullData = function(ev) { + if ( typeof self.cloud.onPull === 'function' ) { + self.cloud.onPull(self.cloud.data, ev.shiftKey); + } +}; + +/******************************************************************************/ + +var pullAndMergeData = function() { + if ( typeof self.cloud.onPull === 'function' ) { + self.cloud.onPull(self.cloud.data, true); + } +}; + +/******************************************************************************/ + +var openOptions = function() { + let input = uDom.nodeFromId('cloudDeviceName'); + input.value = self.cloud.options.deviceName; + input.setAttribute('placeholder', self.cloud.options.defaultDeviceName); + uDom.nodeFromId('cloudOptions').classList.add('show'); +}; + +/******************************************************************************/ + +var closeOptions = function(ev) { + let root = uDom.nodeFromId('cloudOptions'); + if ( ev.target !== root ) { + return; + } + root.classList.remove('show'); +}; + +/******************************************************************************/ + +var submitOptions = function() { + let onOptions = function(options) { + if ( typeof options !== 'object' || options === null ) { + return; + } + self.cloud.options = options; + }; + + vAPI.messaging.send('cloud-ui.js', { + what: 'cloudSetOptions', + options: { + deviceName: uDom.nodeFromId('cloudDeviceName').value + } + }, onOptions); + uDom.nodeFromId('cloudOptions').classList.remove('show'); +}; + +/******************************************************************************/ + +var onInitialize = function(options) { + if ( typeof options !== 'object' || options === null ) { return; } + + if ( !options.enabled ) { return; } + self.cloud.options = options; + + let xhr = new XMLHttpRequest(); + xhr.open('GET', 'cloud-ui.html', true); + xhr.overrideMimeType('text/html;charset=utf-8'); + xhr.responseType = 'text'; + xhr.onload = function() { + this.onload = null; + let parser = new DOMParser(), + parsed = parser.parseFromString(this.responseText, 'text/html'), + fromParent = parsed.body; + while ( fromParent.firstElementChild !== null ) { + widget.appendChild( + document.adoptNode(fromParent.firstElementChild) + ); + } + + faIconsInit(widget); + + vAPI.i18n.render(widget); + widget.classList.remove('hide'); + + uDom('#cloudPush').on('click', pushData); + uDom('#cloudPull').on('click', pullData); + uDom('#cloudPullAndMerge').on('click', pullAndMergeData); + uDom('#cloudCog').on('click', openOptions); + uDom('#cloudOptions').on('click', closeOptions); + uDom('#cloudOptionsSubmit').on('click', submitOptions); + + fetchCloudData(); + }; + xhr.send(); +}; + +vAPI.messaging.send('cloud-ui.js', { what: 'cloudGetOptions' }, onInitialize); + +/******************************************************************************/ + +// https://www.youtube.com/watch?v=aQFp67VoiDA + +})(); diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/contentscript-no-inline-script.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/contentscript-no-inline-script.js new file mode 100644 index 0000000..746d744 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/contentscript-no-inline-script.js @@ -0,0 +1,62 @@ +/******************************************************************************* + + uMatrix - a Chromium browser extension to black/white list requests. + Copyright (C) 2018 Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uMatrix +*/ + +'use strict'; + +// The idea of using to enforce CSP directive has been +// borrowed from NoScript: +// https://github.com/hackademix/noscript/commit/6e80d3f130773fc9a9123c5c4c2e97d63e90fa2a + +(function() { + let html = document.documentElement; + if ( html instanceof HTMLElement === false ) { return; } + + let meta; + try { + meta = document.createElement('meta'); + } catch(ex) { + } + if ( meta === undefined ) { return; } + meta.setAttribute('http-equiv', 'content-security-policy'); + meta.setAttribute('content', "script-src 'unsafe-eval' blob: *"); + + // https://html.spec.whatwg.org/multipage/semantics.html#attr-meta-http-equiv-content-security-policy + // + // Only a head element can be parent: + // > If the meta element is not a child of a head element, return. + // + // The CSP directive is enforced as soon as the meta tag is inserted: + // > Enforce the policy policy. + let head = document.head, + parent = head; + if ( parent === null ) { + parent = document.createElement('head'); + html.appendChild(parent); + } + parent.appendChild(meta); + + // Restore DOM to its original state. + if ( head === null ) { + html.removeChild(parent); + } else { + parent.removeChild(meta); + } +})(); diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/contentscript-no-workers.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/contentscript-no-workers.js new file mode 100644 index 0000000..5f951a8 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/contentscript-no-workers.js @@ -0,0 +1,62 @@ +/******************************************************************************* + + uMatrix - a Chromium browser extension to black/white list requests. + Copyright (C) 2018 Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uMatrix +*/ + +'use strict'; + +// The idea of using to enforce CSP directive has been +// borrowed from NoScript: +// https://github.com/hackademix/noscript/commit/6e80d3f130773fc9a9123c5c4c2e97d63e90fa2a + +(function() { + let html = document.documentElement; + if ( html instanceof HTMLElement === false ) { return; } + + let meta; + try { + meta = document.createElement('meta'); + } catch(ex) { + } + if ( meta === undefined ) { return; } + meta.setAttribute('http-equiv', 'content-security-policy'); + meta.setAttribute('content', "worker-src 'none'"); + + // https://html.spec.whatwg.org/multipage/semantics.html#attr-meta-http-equiv-content-security-policy + // + // Only a head element can be parent: + // > If the meta element is not a child of a head element, return. + // + // The CSP directive is enforced as soon as the meta tag is inserted: + // > Enforce the policy policy. + let head = document.head, + parent = head; + if ( parent === null ) { + parent = document.createElement('head'); + html.appendChild(parent); + } + parent.appendChild(meta); + + // Restore DOM to its original state. + if ( head === null ) { + html.removeChild(parent); + } else { + parent.removeChild(meta); + } +})(); diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/contentscript-start.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/contentscript-start.js new file mode 100644 index 0000000..2a9b2e3 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/contentscript-start.js @@ -0,0 +1,96 @@ +/******************************************************************************* + + uMatrix - a browser extension to black/white list requests. + Copyright (C) 2017-2018 Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uMatrix +*/ + +'use strict'; + +/******************************************************************************/ +/******************************************************************************/ + +// Injected into content pages + +(function() { + + if ( typeof vAPI !== 'object' ) { return; } + + vAPI.selfWorkerSrcReported = vAPI.selfWorkerSrcReported || false; + + var reGoodWorkerSrc = /(?:child|worker)-src[^;,]+?'none'/; + + var handler = function(ev) { + if ( + ev.isTrusted !== true || + ev.originalPolicy.includes('report-uri about:blank') === false + ) { + return false; + } + + // Firefox and Chromium differs in how they fill the + // 'effectiveDirective' property. + if ( + ev.effectiveDirective.startsWith('worker-src') === false && + ev.effectiveDirective.startsWith('child-src') === false + ) { + return false; + } + + // Further validate that the policy violation is relevant to uMatrix: + // the event still could have been fired as a result of a CSP header + // not injected by uMatrix. + if ( reGoodWorkerSrc.test(ev.originalPolicy) === false ) { + return false; + } + + // We do not want to report internal resources more than once. + // However, we do want to report external resources each time. + // TODO: this could eventually lead to duplicated reports for external + // resources if another extension uses the same approach as + // uMatrix. Think about what could be done to avoid duplicate + // reports. + if ( ev.blockedURI.includes('://') === false ) { + if ( vAPI.selfWorkerSrcReported ) { return true; } + vAPI.selfWorkerSrcReported = true; + } + + vAPI.messaging.send( + 'contentscript.js', + { + what: 'securityPolicyViolation', + directive: 'worker-src', + blockedURI: ev.blockedURI, + documentURI: ev.documentURI, + blocked: ev.disposition === 'enforce' + } + ); + + return true; + }; + + document.addEventListener( + 'securitypolicyviolation', + function(ev) { + if ( !handler(ev) ) { return; } + ev.stopPropagation(); + ev.preventDefault(); + }, + true + ); + +})(); diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/contentscript.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/contentscript.js new file mode 100644 index 0000000..7ad0be8 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/contentscript.js @@ -0,0 +1,552 @@ +/******************************************************************************* + + uMatrix - a browser extension to black/white list requests. + Copyright (C) 2014-2018 Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uMatrix +*/ + +/* global HTMLDocument, XMLDocument */ + +'use strict'; + +/******************************************************************************/ +/******************************************************************************/ + +// Injected into content pages + +(function() { + +/******************************************************************************/ + +// https://github.com/chrisaljoudi/uBlock/issues/464 +// https://github.com/gorhill/uMatrix/issues/621 +if ( + document instanceof HTMLDocument === false && + document instanceof XMLDocument === false +) { + return; +} + +// This can also happen (for example if script injected into a `data:` URI doc) +if ( !window.location ) { + return; +} + +// This can happen +if ( typeof vAPI !== 'object' ) { + //console.debug('contentscript.js > vAPI not found'); + return; +} + +// https://github.com/chrisaljoudi/uBlock/issues/456 +// Already injected? +if ( vAPI.contentscriptEndInjected ) { + //console.debug('contentscript.js > content script already injected'); + return; +} +vAPI.contentscriptEndInjected = true; + +/******************************************************************************/ +/******************************************************************************/ + +// Executed only once. + +(function() { + var localStorageHandler = function(mustRemove) { + if ( mustRemove ) { + window.localStorage.clear(); + window.sessionStorage.clear(); + } + }; + + // Check with extension whether local storage must be emptied + // rhill 2014-03-28: we need an exception handler in case 3rd-party access + // to site data is disabled. + // https://github.com/gorhill/httpswitchboard/issues/215 + try { + var hasLocalStorage = + window.localStorage && window.localStorage.length !== 0; + var hasSessionStorage = + window.sessionStorage && window.sessionStorage.length !== 0; + if ( hasLocalStorage || hasSessionStorage ) { + vAPI.messaging.send('contentscript.js', { + what: 'contentScriptHasLocalStorage', + originURL: window.location.origin + }, localStorageHandler); + } + + // TODO: indexedDB + //if ( window.indexedDB && !!window.indexedDB.webkitGetDatabaseNames ) { + // var db = window.indexedDB.webkitGetDatabaseNames().onsuccess = function(sender) { + // console.debug('webkitGetDatabaseNames(): result=%o', sender.target.result); + // }; + //} + + // TODO: Web SQL + // if ( window.openDatabase ) { + // Sad: + // "There is no way to enumerate or delete the databases available for an origin from this API." + // Ref.: http://www.w3.org/TR/webdatabase/#databases + // } + } + catch (e) { + } +})(); + +/******************************************************************************/ +/******************************************************************************/ + +// https://github.com/gorhill/uMatrix/issues/45 + +var collapser = (function() { + var resquestIdGenerator = 1, + processTimer, + toProcess = [], + toFilter = [], + toCollapse = new Map(), + cachedBlockedMap, + cachedBlockedMapHash, + cachedBlockedMapTimer, + reURLPlaceholder = /\{\{url\}\}/g; + var src1stProps = { + 'embed': 'src', + 'frame': 'src', + 'iframe': 'src', + 'img': 'src', + 'object': 'data' + }; + var src2ndProps = { + 'img': 'srcset' + }; + var tagToTypeMap = { + embed: 'media', + frame: 'frame', + iframe: 'frame', + img: 'image', + object: 'media' + }; + var cachedBlockedSetClear = function() { + cachedBlockedMap = + cachedBlockedMapHash = + cachedBlockedMapTimer = undefined; + }; + + // https://github.com/chrisaljoudi/uBlock/issues/174 + // Do not remove fragment from src URL + var onProcessed = function(response) { + if ( !response ) { // This happens if uBO is disabled or restarted. + toCollapse.clear(); + return; + } + + var targets = toCollapse.get(response.id); + if ( targets === undefined ) { return; } + toCollapse.delete(response.id); + if ( cachedBlockedMapHash !== response.hash ) { + cachedBlockedMap = new Map(response.blockedResources); + cachedBlockedMapHash = response.hash; + if ( cachedBlockedMapTimer !== undefined ) { + clearTimeout(cachedBlockedMapTimer); + } + cachedBlockedMapTimer = vAPI.setTimeout(cachedBlockedSetClear, 30000); + } + if ( cachedBlockedMap === undefined || cachedBlockedMap.size === 0 ) { + return; + } + + let placeholders = response.placeholders; + + for ( let target of targets ) { + let tag = target.localName; + let prop = src1stProps[tag]; + if ( prop === undefined ) { continue; } + let src = target[prop]; + if ( typeof src !== 'string' || src.length === 0 ) { + prop = src2ndProps[tag]; + if ( prop === undefined ) { continue; } + src = target[prop]; + if ( typeof src !== 'string' || src.length === 0 ) { continue; } + } + let collapsed = cachedBlockedMap.get(tagToTypeMap[tag] + ' ' + src); + if ( collapsed === undefined ) { continue; } + if ( collapsed ) { + target.style.setProperty('display', 'none', 'important'); + target.hidden = true; + continue; + } + switch ( tag ) { + case 'frame': + case 'iframe': + if ( placeholders.frame !== true ) { break; } + let docurl = + 'data:text/html,' + + encodeURIComponent( + placeholders.frameDocument.replace( + reURLPlaceholder, + src + ) + ); + let replaced = false; + // Using contentWindow.location prevent tainting browser + // history -- i.e. breaking back button (seen on Chromium). + if ( target.contentWindow ) { + try { + target.contentWindow.location.replace(docurl); + replaced = true; + } catch(ex) { + } + } + if ( !replaced ) { + target.setAttribute('src', docurl); + } + break; + case 'img': + if ( placeholders.image !== true ) { break; } + // Do not insert placeholder if the image was actually loaded. + // This can happen if an allow rule was created while the + // document was loading. + if ( + target.complete && + target.naturalWidth !== 0 && + target.naturalHeight !== 0 + ) { + break; + } + target.style.setProperty('display', 'inline-block'); + target.style.setProperty('min-width', '20px', 'important'); + target.style.setProperty('min-height', '20px', 'important'); + target.style.setProperty( + 'border', + placeholders.imageBorder, + 'important' + ); + target.style.setProperty( + 'background', + placeholders.imageBackground, + 'important' + ); + break; + } + } + }; + + var send = function() { + processTimer = undefined; + toCollapse.set(resquestIdGenerator, toProcess); + var msg = { + what: 'lookupBlockedCollapsibles', + id: resquestIdGenerator, + toFilter: toFilter, + hash: cachedBlockedMapHash + }; + vAPI.messaging.send('contentscript.js', msg, onProcessed); + toProcess = []; + toFilter = []; + resquestIdGenerator += 1; + }; + + var process = function(delay) { + if ( toProcess.length === 0 ) { return; } + if ( delay === 0 ) { + if ( processTimer !== undefined ) { + clearTimeout(processTimer); + } + send(); + } else if ( processTimer === undefined ) { + processTimer = vAPI.setTimeout(send, delay || 47); + } + }; + + var add = function(target) { + toProcess.push(target); + }; + + var addMany = function(targets) { + var i = targets.length; + while ( i-- ) { + toProcess.push(targets[i]); + } + }; + + var iframeSourceModified = function(mutations) { + var i = mutations.length; + while ( i-- ) { + addIFrame(mutations[i].target, true); + } + process(); + }; + var iframeSourceObserver; + var iframeSourceObserverOptions = { + attributes: true, + attributeFilter: [ 'src' ] + }; + + var addIFrame = function(iframe, dontObserve) { + // https://github.com/gorhill/uBlock/issues/162 + // Be prepared to deal with possible change of src attribute. + if ( dontObserve !== true ) { + if ( iframeSourceObserver === undefined ) { + iframeSourceObserver = new MutationObserver(iframeSourceModified); + } + iframeSourceObserver.observe(iframe, iframeSourceObserverOptions); + } + var src = iframe.src; + if ( src === '' || typeof src !== 'string' ) { return; } + if ( src.startsWith('http') === false ) { return; } + toFilter.push({ type: 'frame', url: iframe.src }); + add(iframe); + }; + + var addIFrames = function(iframes) { + var i = iframes.length; + while ( i-- ) { + addIFrame(iframes[i]); + } + }; + + var addNodeList = function(nodeList) { + var node, + i = nodeList.length; + while ( i-- ) { + node = nodeList[i]; + if ( node.nodeType !== 1 ) { continue; } + if ( node.localName === 'iframe' || node.localName === 'frame' ) { + addIFrame(node); + } + if ( node.childElementCount !== 0 ) { + addIFrames(node.querySelectorAll('iframe, frame')); + } + } + }; + + var onResourceFailed = function(ev) { + if ( tagToTypeMap[ev.target.localName] !== undefined ) { + add(ev.target); + process(); + } + }; + document.addEventListener('error', onResourceFailed, true); + + vAPI.shutdown.add(function() { + document.removeEventListener('error', onResourceFailed, true); + if ( iframeSourceObserver !== undefined ) { + iframeSourceObserver.disconnect(); + iframeSourceObserver = undefined; + } + if ( processTimer !== undefined ) { + clearTimeout(processTimer); + processTimer = undefined; + } + }); + + return { + addMany: addMany, + addIFrames: addIFrames, + addNodeList: addNodeList, + process: process + }; +})(); + +/******************************************************************************/ +/******************************************************************************/ + +// Observe changes in the DOM + +// Added node lists will be cumulated here before being processed + +(function() { + // This fixes http://acid3.acidtests.org/ + if ( !document.body ) { return; } + + var addedNodeLists = []; + var addedNodeListsTimer; + + var treeMutationObservedHandler = function() { + addedNodeListsTimer = undefined; + var i = addedNodeLists.length; + while ( i-- ) { + collapser.addNodeList(addedNodeLists[i]); + } + collapser.process(); + addedNodeLists = []; + }; + + // https://github.com/gorhill/uBlock/issues/205 + // Do not handle added node directly from within mutation observer. + var treeMutationObservedHandlerAsync = function(mutations) { + var iMutation = mutations.length, + nodeList; + while ( iMutation-- ) { + nodeList = mutations[iMutation].addedNodes; + if ( nodeList.length !== 0 ) { + addedNodeLists.push(nodeList); + } + } + if ( addedNodeListsTimer === undefined ) { + addedNodeListsTimer = vAPI.setTimeout(treeMutationObservedHandler, 47); + } + }; + + // https://github.com/gorhill/httpswitchboard/issues/176 + var treeObserver = new MutationObserver(treeMutationObservedHandlerAsync); + treeObserver.observe(document.body, { + childList: true, + subtree: true + }); + + vAPI.shutdown.add(function() { + if ( addedNodeListsTimer !== undefined ) { + clearTimeout(addedNodeListsTimer); + addedNodeListsTimer = undefined; + } + if ( treeObserver !== null ) { + treeObserver.disconnect(); + treeObserver = undefined; + } + addedNodeLists = []; + }); +})(); + +/******************************************************************************/ +/******************************************************************************/ + +// Executed only once. +// +// https://github.com/gorhill/httpswitchboard/issues/25 +// +// https://github.com/gorhill/httpswitchboard/issues/131 +// Looks for inline javascript also in at least one a[href] element. +// +// https://github.com/gorhill/uMatrix/issues/485 +// Mind "on..." attributes. +// +// https://github.com/gorhill/uMatrix/issues/924 +// Report inline styles. + +(function() { + if ( + document.querySelector('script:not([src])') !== null || + document.querySelector('a[href^="javascript:"]') !== null || + document.querySelector('[onabort],[onblur],[oncancel],[oncanplay],[oncanplaythrough],[onchange],[onclick],[onclose],[oncontextmenu],[oncuechange],[ondblclick],[ondrag],[ondragend],[ondragenter],[ondragexit],[ondragleave],[ondragover],[ondragstart],[ondrop],[ondurationchange],[onemptied],[onended],[onerror],[onfocus],[oninput],[oninvalid],[onkeydown],[onkeypress],[onkeyup],[onload],[onloadeddata],[onloadedmetadata],[onloadstart],[onmousedown],[onmouseenter],[onmouseleave],[onmousemove],[onmouseout],[onmouseover],[onmouseup],[onwheel],[onpause],[onplay],[onplaying],[onprogress],[onratechange],[onreset],[onresize],[onscroll],[onseeked],[onseeking],[onselect],[onshow],[onstalled],[onsubmit],[onsuspend],[ontimeupdate],[ontoggle],[onvolumechange],[onwaiting],[onafterprint],[onbeforeprint],[onbeforeunload],[onhashchange],[onlanguagechange],[onmessage],[onoffline],[ononline],[onpagehide],[onpageshow],[onrejectionhandled],[onpopstate],[onstorage],[onunhandledrejection],[onunload],[oncopy],[oncut],[onpaste]') !== null + ) { + vAPI.messaging.send('contentscript.js', { + what: 'securityPolicyViolation', + directive: 'script-src', + documentURI: window.location.href + }); + } + + if ( document.querySelector('style,[style]') !== null ) { + vAPI.messaging.send('contentscript.js', { + what: 'securityPolicyViolation', + directive: 'style-src', + documentURI: window.location.href + }); + } + + collapser.addMany(document.querySelectorAll('img')); + collapser.addIFrames(document.querySelectorAll('iframe, frame')); + collapser.process(); +})(); + +/******************************************************************************/ +/******************************************************************************/ + +// Executed only once. + +// https://github.com/gorhill/uMatrix/issues/232 +// Force `display` property, Firefox is still affected by the issue. + +(function() { + var noscripts = document.querySelectorAll('noscript'); + if ( noscripts.length === 0 ) { return; } + + var redirectTimer, + reMetaContent = /^\s*(\d+)\s*;\s*url=(['"]?)([^'"]+)\2/i, + reSafeURL = /^https?:\/\//; + + var autoRefresh = function(root) { + var meta = root.querySelector('meta[http-equiv="refresh"][content]'); + if ( meta === null ) { return; } + var match = reMetaContent.exec(meta.getAttribute('content')); + if ( match === null || match[3].trim() === '' ) { return; } + var url = new URL(match[3], document.baseURI); + if ( reSafeURL.test(url.href) === false ) { return; } + redirectTimer = setTimeout( + function() { + location.assign(url.href); + }, + parseInt(match[1], 10) * 1000 + 1 + ); + meta.parentNode.removeChild(meta); + }; + + var morphNoscript = function(from) { + if ( /^application\/(?:xhtml\+)?xml/.test(document.contentType) ) { + var to = document.createElement('span'); + while ( from.firstChild !== null ) { + to.appendChild(from.firstChild); + } + return to; + } + var parser = new DOMParser(); + var doc = parser.parseFromString( + '' + from.textContent + '', + 'text/html' + ); + return document.adoptNode(doc.querySelector('span')); + }; + + var renderNoscriptTags = function(response) { + if ( response !== true ) { return; } + var parent, span; + for ( var noscript of noscripts ) { + parent = noscript.parentNode; + if ( parent === null ) { continue; } + span = morphNoscript(noscript); + span.style.setProperty('display', 'inline', 'important'); + if ( redirectTimer === undefined ) { + autoRefresh(span); + } + parent.replaceChild(span, noscript); + } + }; + + vAPI.messaging.send( + 'contentscript.js', + { what: 'mustRenderNoscriptTags?' }, + renderNoscriptTags + ); +})(); + +/******************************************************************************/ +/******************************************************************************/ + +vAPI.messaging.send( + 'contentscript.js', + { what: 'shutdown?' }, + function(response) { + if ( response === true ) { + vAPI.shutdown.exec(); + } + } +); + +/******************************************************************************/ +/******************************************************************************/ + +})(); diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/cookies.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/cookies.js new file mode 100644 index 0000000..36029f8 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/cookies.js @@ -0,0 +1,557 @@ +/******************************************************************************* + + uMatrix - a browser extension to black/white list requests. + Copyright (C) 2013-present Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uMatrix +*/ + +// rhill 2013-12-14: the whole cookie management has been rewritten so as +// to avoid having to call chrome API whenever a single cookie changes, and +// to record cookie for a web page *only* when its value changes. +// https://github.com/gorhill/httpswitchboard/issues/79 + +"use strict"; + +/******************************************************************************/ + +// Isolate from global namespace + +// Use cached-context approach rather than object-based approach, as details +// of the implementation do not need to be visible + +µMatrix.cookieHunter = (function() { + +/******************************************************************************/ + +var µm = µMatrix; + +var recordPageCookiesQueue = new Map(); +var removeCookieQueue = new Set(); +var cookieDict = new Map(); +var cookieEntryJunkyard = []; +var processRemoveQueuePeriod = 2 * 60 * 1000; +var processCleanPeriod = 10 * 60 * 1000; +var processPageRecordQueueTimer = null; + +/******************************************************************************/ + +var CookieEntry = function(cookie) { + this.usedOn = new Set(); + this.init(cookie); +}; + +CookieEntry.prototype.init = function(cookie) { + this.secure = cookie.secure; + this.session = cookie.session; + this.anySubdomain = cookie.domain.charAt(0) === '.'; + this.hostname = this.anySubdomain ? cookie.domain.slice(1) : cookie.domain; + this.domain = µm.URI.domainFromHostname(this.hostname) || this.hostname; + this.path = cookie.path; + this.name = cookie.name; + this.value = cookie.value; + this.tstamp = Date.now(); + this.usedOn.clear(); + return this; +}; + +// Release anything which may consume too much memory + +CookieEntry.prototype.dispose = function() { + this.hostname = ''; + this.domain = ''; + this.path = ''; + this.name = ''; + this.value = ''; + this.usedOn.clear(); + return this; +}; + +/******************************************************************************/ + +var addCookieToDict = function(cookie) { + var cookieKey = cookieKeyFromCookie(cookie), + cookieEntry = cookieDict.get(cookieKey); + if ( cookieEntry === undefined ) { + cookieEntry = cookieEntryJunkyard.pop(); + if ( cookieEntry ) { + cookieEntry.init(cookie); + } else { + cookieEntry = new CookieEntry(cookie); + } + cookieDict.set(cookieKey, cookieEntry); + } + return cookieEntry; +}; + +/******************************************************************************/ + +var addCookiesToDict = function(cookies) { + var i = cookies.length; + while ( i-- ) { + addCookieToDict(cookies[i]); + } +}; + +/******************************************************************************/ + +var removeCookieFromDict = function(cookieKey) { + var cookieEntry = cookieDict.get(cookieKey); + if ( cookieEntry === undefined ) { return false; } + cookieDict.delete(cookieKey); + if ( cookieEntryJunkyard.length < 25 ) { + cookieEntryJunkyard.push(cookieEntry.dispose()); + } + return true; +}; + +/******************************************************************************/ + +var cookieKeyBuilder = [ + '', // 0 = scheme + '://', + '', // 2 = domain + '', // 3 = path + '{', + '', // 5 = persistent or session + '-cookie:', + '', // 7 = name + '}' +]; + +var cookieKeyFromCookie = function(cookie) { + var cb = cookieKeyBuilder; + cb[0] = cookie.secure ? 'https' : 'http'; + cb[2] = cookie.domain.charAt(0) === '.' ? cookie.domain.slice(1) : cookie.domain; + cb[3] = cookie.path; + cb[5] = cookie.session ? 'session' : 'persistent'; + cb[7] = cookie.name; + return cb.join(''); +}; + +var cookieKeyFromCookieURL = function(url, type, name) { + var µmuri = µm.URI.set(url); + var cb = cookieKeyBuilder; + cb[0] = µmuri.scheme; + cb[2] = µmuri.hostname; + cb[3] = µmuri.path; + cb[5] = type; + cb[7] = name; + return cb.join(''); +}; + +/******************************************************************************/ + +var cookieURLFromCookieEntry = function(entry) { + if ( !entry ) { + return ''; + } + return (entry.secure ? 'https://' : 'http://') + entry.hostname + entry.path; +}; + +/******************************************************************************/ + +var cookieMatchDomains = function(cookieKey, allHostnamesString) { + var cookieEntry = cookieDict.get(cookieKey); + if ( cookieEntry === undefined ) { return false; } + if ( allHostnamesString.indexOf(' ' + cookieEntry.hostname + ' ') < 0 ) { + if ( !cookieEntry.anySubdomain ) { + return false; + } + if ( allHostnamesString.indexOf('.' + cookieEntry.hostname + ' ') < 0 ) { + return false; + } + } + return true; +}; + +/******************************************************************************/ + +// Look for cookies to record for a specific web page + +var recordPageCookiesAsync = function(pageStore) { + // Store the page stats objects so that it doesn't go away + // before we handle the job. + // rhill 2013-10-19: pageStore could be nil, for example, this can + // happens if a file:// ... makes an xmlHttpRequest + if ( !pageStore ) { return; } + recordPageCookiesQueue.set(pageStore.pageUrl, pageStore); + if ( processPageRecordQueueTimer !== null ) { return; } + processPageRecordQueueTimer = vAPI.setTimeout(processPageRecordQueue, 1000); +}; + +/******************************************************************************/ + +var recordPageCookie = (function() { + let queue = new Map(); + let queueTimer; + let cookieLogEntryBuilder = [ '', '{', '', '-cookie:', '', '}' ]; + + let process = function() { + queueTimer = undefined; + for ( let qentry of queue ) { + let pageStore = qentry[0]; + if ( pageStore.tabId === '' ) { continue; } + for ( let cookieKey of qentry[1] ) { + let cookieEntry = cookieDict.get(cookieKey); + if ( cookieEntry === undefined ) { continue; } + let blocked = µm.mustBlock( + pageStore.pageHostname, + cookieEntry.hostname, + 'cookie' + ); + // https://github.com/gorhill/httpswitchboard/issues/60 + // Need to URL-encode cookie name + cookieLogEntryBuilder[0] = + cookieURLFromCookieEntry(cookieEntry); + cookieLogEntryBuilder[2] = + cookieEntry.session ? 'session' : 'persistent'; + cookieLogEntryBuilder[4] = + encodeURIComponent(cookieEntry.name); + let cookieURL = cookieLogEntryBuilder.join(''); + pageStore.recordRequest('cookie', cookieURL, blocked); + µm.logger.writeOne({ + tabId: pageStore.tabId, + srcHn: pageStore.pageHostname, + desHn: cookieEntry.hostname, + desURL: cookieURL, + type: 'cookie', + blocked + }); + cookieEntry.usedOn.add(pageStore.pageHostname); + if ( !blocked ) { continue; } + if ( µm.userSettings.deleteCookies ) { + removeCookieAsync(cookieKey); + } + µm.updateBadgeAsync(pageStore.tabId); + } + } + queue.clear(); + }; + + return function(pageStore, cookieKey) { + if ( vAPI.isBehindTheSceneTabId(pageStore.tabId) ) { return; } + let entry = queue.get(pageStore); + if ( entry === undefined ) { + queue.set(pageStore, (entry = new Set())); + } + if ( entry.has(cookieKey) ) { return; } + entry.add(cookieKey); + if ( queueTimer === undefined ) { + queueTimer = vAPI.setTimeout(process, 277); + } + }; +})(); + +/******************************************************************************/ + +// Candidate for removal + +var removeCookieAsync = function(cookieKey) { + removeCookieQueue.add(cookieKey); +}; + +/******************************************************************************/ + +var chromeCookieRemove = function(cookieEntry, name) { + var url = cookieURLFromCookieEntry(cookieEntry); + if ( url === '' ) { return; } + + var sessionCookieKey = cookieKeyFromCookieURL(url, 'session', name); + var persistCookieKey = cookieKeyFromCookieURL(url, 'persistent', name); + var callback = function(details) { + var success = !!details; + var template = success ? i18nCookieDeleteSuccess : i18nCookieDeleteFailure; + if ( removeCookieFromDict(sessionCookieKey) ) { + if ( success ) { + µm.cookieRemovedCounter += 1; + } + µm.logger.writeOne({ + info: template.replace('{{value}}', sessionCookieKey) + }); + } + if ( removeCookieFromDict(persistCookieKey) ) { + if ( success ) { + µm.cookieRemovedCounter += 1; + } + µm.logger.writeOne({ + info: template.replace('{{value}}', persistCookieKey) + }); + } + }; + + vAPI.cookies.remove({ url: url, name: name }, callback); +}; + +var i18nCookieDeleteSuccess = vAPI.i18n('loggerEntryCookieDeleted'); +var i18nCookieDeleteFailure = vAPI.i18n('loggerEntryDeleteCookieError'); + +/******************************************************************************/ + +var processPageRecordQueue = function() { + processPageRecordQueueTimer = null; + + for ( var pageStore of recordPageCookiesQueue.values() ) { + findAndRecordPageCookies(pageStore); + } + recordPageCookiesQueue.clear(); +}; + +/******************************************************************************/ + +// Effectively remove cookies. + +var processRemoveQueue = function() { + var userSettings = µm.userSettings; + var deleteCookies = userSettings.deleteCookies; + + // Session cookies which timestamp is *after* tstampObsolete will + // be left untouched + // https://github.com/gorhill/httpswitchboard/issues/257 + var tstampObsolete = userSettings.deleteUnusedSessionCookies ? + Date.now() - userSettings.deleteUnusedSessionCookiesAfter * 60 * 1000 : + 0; + + var srcHostnames; + var cookieEntry; + + for ( var cookieKey of removeCookieQueue ) { + // rhill 2014-05-12: Apparently this can happen. I have to + // investigate how (A session cookie has same name as a + // persistent cookie?) + cookieEntry = cookieDict.get(cookieKey); + if ( cookieEntry === undefined ) { continue; } + + // Delete obsolete session cookies: enabled. + if ( tstampObsolete !== 0 && cookieEntry.session ) { + if ( cookieEntry.tstamp < tstampObsolete ) { + chromeCookieRemove(cookieEntry, cookieEntry.name); + continue; + } + } + + // Delete all blocked cookies: disabled. + if ( deleteCookies === false ) { + continue; + } + + // Query scopes only if we are going to use them + if ( srcHostnames === undefined ) { + srcHostnames = µm.tMatrix.extractAllSourceHostnames(); + } + + // Ensure cookie is not allowed on ALL current web pages: It can + // happen that a cookie is blacklisted on one web page while + // being whitelisted on another (because of per-page permissions). + if ( canRemoveCookie(cookieKey, srcHostnames) ) { + chromeCookieRemove(cookieEntry, cookieEntry.name); + } + } + + removeCookieQueue.clear(); + + vAPI.setTimeout(processRemoveQueue, processRemoveQueuePeriod); +}; + +/******************************************************************************/ + +// Once in a while, we go ahead and clean everything that might have been +// left behind. + +// Remove only some of the cookies which are candidate for removal: who knows, +// maybe a user has 1000s of cookies sitting in his browser... + +var processClean = function() { + var us = µm.userSettings; + if ( us.deleteCookies || us.deleteUnusedSessionCookies ) { + var cookieKeys = Array.from(cookieDict.keys()), + len = cookieKeys.length, + step, offset, n; + if ( len > 25 ) { + step = len / 25; + offset = Math.floor(Math.random() * len); + n = 25; + } else { + step = 1; + offset = 0; + n = len; + } + var i = offset; + while ( n-- ) { + removeCookieAsync(cookieKeys[Math.floor(i % len)]); + i += step; + } + } + + vAPI.setTimeout(processClean, processCleanPeriod); +}; + +/******************************************************************************/ + +var findAndRecordPageCookies = function(pageStore) { + for ( var cookieKey of cookieDict.keys() ) { + if ( cookieMatchDomains(cookieKey, pageStore.allHostnamesString) ) { + recordPageCookie(pageStore, cookieKey); + } + } +}; + +/******************************************************************************/ + +var canRemoveCookie = function(cookieKey, srcHostnames) { + var cookieEntry = cookieDict.get(cookieKey); + if ( cookieEntry === undefined ) { return false; } + + var cookieHostname = cookieEntry.hostname; + var srcHostname; + + for ( srcHostname of cookieEntry.usedOn ) { + if ( µm.mustAllow(srcHostname, cookieHostname, 'cookie') ) { + return false; + } + } + // Maybe there is a scope in which the cookie is 1st-party-allowed. + // For example, if I am logged in into `github.com`, I do not want to be + // logged out just because I did not yet open a `github.com` page after + // re-starting the browser. + srcHostname = cookieHostname; + var pos; + for (;;) { + if ( srcHostnames.has(srcHostname) ) { + if ( µm.mustAllow(srcHostname, cookieHostname, 'cookie') ) { + return false; + } + } + if ( srcHostname === cookieEntry.domain ) { + break; + } + pos = srcHostname.indexOf('.'); + if ( pos === -1 ) { + break; + } + srcHostname = srcHostname.slice(pos + 1); + } + return true; +}; + +/******************************************************************************/ + +// Listen to any change in cookieland, we will update page stats accordingly. +// +// https://github.com/gorhill/httpswitchboard/issues/79 +// If cookie value didn't change, no need to record. + +vAPI.cookies.onChanged = (function() { + let queue = new Map(); + let queueTimer; + + // Go through all pages and update if needed, as one cookie can be used + // by many web pages, so they need to be recorded for all these pages. + + let process = function() { + queueTimer = undefined; + let now = Date.now(); + let cookieKeys = []; + for ( let qentry of queue ) { + if ( qentry[1] > now ) { continue; } + if ( cookieDict.has(qentry[0]) === false ) { continue; } + cookieKeys.push(qentry[0]); + queue.delete(qentry[0]); + } + if ( cookieKeys.length !== 0 ) { + for ( let pageStore of µm.pageStores.values() ) { + let allHostnamesString = pageStore.allHostnamesString; + for ( let cookieKey of cookieKeys ) { + if ( cookieMatchDomains(cookieKey, allHostnamesString) ) { + recordPageCookie(pageStore, cookieKey); + } + } + } + } + if ( queue.size !== 0 ) { + queueTimer = vAPI.setTimeout(process, 797); + } + }; + + return function(cookie) { + let cookieKey = cookieKeyFromCookie(cookie); + let cookieEntry = cookieDict.get(cookieKey); + if ( cookieEntry === undefined ) { + cookieEntry = addCookieToDict(cookie); + } else { + cookieEntry.tstamp = Date.now(); + if ( cookie.value === cookieEntry.value ) { return; } + cookieEntry.value = cookie.value; + } + if ( queue.has(cookieKey) ) { return; } + queue.set(cookieKey, Date.now() + 653); + if ( queueTimer === undefined ) { + queueTimer = vAPI.setTimeout(process, 727); + } + }; +})(); + +/******************************************************************************/ + +// Listen to any change in cookieland, we will update page stats accordingly. + +vAPI.cookies.onRemoved = function(cookie) { + var cookieKey = cookieKeyFromCookie(cookie); + if ( removeCookieFromDict(cookieKey) ) { + µm.logger.writeOne({ + info: i18nCookieDeleteSuccess.replace('{{value}}', cookieKey), + prettify: 'cookie' + }); + } +}; + +/******************************************************************************/ + +// Listen to any change in cookieland, we will update page stats accordingly. + +vAPI.cookies.onAllRemoved = function() { + for ( var cookieKey of cookieDict.keys() ) { + if ( removeCookieFromDict(cookieKey) ) { + µm.logger.writeOne({ + info: i18nCookieDeleteSuccess.replace('{{value}}', cookieKey), + prettify: 'cookie' + }); + } + } +}; + +/******************************************************************************/ + +vAPI.cookies.getAll(addCookiesToDict); +vAPI.cookies.start(); + +vAPI.setTimeout(processRemoveQueue, processRemoveQueuePeriod); +vAPI.setTimeout(processClean, processCleanPeriod); + +/******************************************************************************/ + +// Expose only what is necessary + +return { + recordPageCookies: recordPageCookiesAsync +}; + +/******************************************************************************/ + +})(); + +/******************************************************************************/ + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/dashboard-common.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/dashboard-common.js new file mode 100644 index 0000000..95c99fa --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/dashboard-common.js @@ -0,0 +1,40 @@ +/******************************************************************************* + + µMatrix - a Chromium browser extension to black/white list requests. + Copyright (C) 2014 Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uMatrix +*/ + +/******************************************************************************/ + +uDom.onLoad(function() { + +/******************************************************************************/ + +// Open links in the proper window +uDom('a').attr('target', '_blank'); +uDom('a[href*="dashboard.html"]').attr('target', '_parent'); +uDom('.whatisthis').on('click', function() { + uDom(this).parent() + .descendants('.whatisthis-expandable') + .toggleClass('whatisthis-expanded'); +}); + + +/******************************************************************************/ + +}); diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/dashboard.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/dashboard.js new file mode 100644 index 0000000..c0e3ae8 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/dashboard.js @@ -0,0 +1,55 @@ +/******************************************************************************* + + uMatrix - a browser extension to black/white list requests. + Copyright (C) 2014-2018 Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uMatrix +*/ + +/* global uDom */ + +'use strict'; + +/******************************************************************************/ + +(function() { + + var loadDashboardPanel = function(hash) { + var button = uDom(hash); + var url = button.attr('data-dashboard-panel-url'); + uDom('iframe').attr('src', url); + uDom('.tabButton').forEach(function(button){ + button.toggleClass( + 'selected', + button.attr('data-dashboard-panel-url') === url + ); + }); + }; + + var onTabClickHandler = function() { + loadDashboardPanel(window.location.hash); + }; + + uDom.onLoad(function() { + window.addEventListener('hashchange', onTabClickHandler); + var hash = window.location.hash; + if ( hash.length < 2 ) { + hash = '#settings'; + } + loadDashboardPanel(hash); + }); + +})(); diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/fa-icons.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/fa-icons.js new file mode 100644 index 0000000..2f8dfaf --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/fa-icons.js @@ -0,0 +1,52 @@ +/******************************************************************************* + + uMatrix - a browser extension to black/white list requests. + Copyright (C) 2018-present Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uMatrix +*/ + +'use strict'; + +/******************************************************************************/ + +const faIconsInit = function(root) { + const icons = (root || document).querySelectorAll('.fa-icon'); + for ( const icon of icons ) { + if ( + icon.firstChild === null || + icon.firstChild.nodeType !== 3 + ) { + continue; + } + const name = icon.firstChild.nodeValue; + const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg'); + svg.classList.add('fa-icon_' + name); + const use = document.createElementNS('http://www.w3.org/2000/svg', 'use'); + const href = '/img/fontawesome/fontawesome-defs.svg#' + name; + use.setAttribute('href', href); + use.setAttribute('xlink:href', href); + svg.appendChild(use); + icon.replaceChild(svg, icon.firstChild); + if ( icon.classList.contains('fa-icon-badged') ) { + const badge = document.createElement('span'); + badge.className = 'fa-icon-badge'; + icon.insertBefore(badge, icon.firstChild.nextSibling); + } + } +}; + +faIconsInit(); diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/hosts-files.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/hosts-files.js new file mode 100644 index 0000000..39bc81c --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/hosts-files.js @@ -0,0 +1,464 @@ +/******************************************************************************* + + uMatrix - a browser extension to black/white list requests. + Copyright (C) 2014-present Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uMatrix +*/ + +/* global uDom */ + +'use strict'; + +/******************************************************************************/ + +(function() { + +/******************************************************************************/ + +var listDetails = {}, + lastUpdateTemplateString = vAPI.i18n('hostsFilesLastUpdate'), + hostsFilesSettingsHash, + reValidExternalList = /^[a-z-]+:\/\/\S*\/\S+$/m; + +/******************************************************************************/ + +vAPI.messaging.addListener(function onMessage(msg) { + switch ( msg.what ) { + case 'assetUpdated': + updateAssetStatus(msg); + break; + case 'assetsUpdated': + document.body.classList.remove('updating'); + renderWidgets(); + break; + case 'loadHostsFilesCompleted': + renderHostsFiles(); + break; + case 'loadRecipeFilesCompleted': + renderHostsFiles(); + break; + default: + break; + } +}); + +/******************************************************************************/ + +var renderNumber = function(value) { + return value.toLocaleString(); +}; + +/******************************************************************************/ + +var renderHostsFiles = function(soft) { + var listEntryTemplate = uDom('#templates .listEntry'), + listStatsTemplate = vAPI.i18n('hostsFilesPerFileStats'), + renderElapsedTimeToString = vAPI.i18n.renderElapsedTimeToString, + reExternalHostFile = /^https?:/; + + // Assemble a pretty list name if possible + var listNameFromListKey = function(collection, listKey) { + let list = collection.get(listKey); + return list && list.title || listKey; + }; + + var liFromListEntry = function(collection, listKey, li) { + var entry = collection.get(listKey), + elem; + if ( !li ) { + li = listEntryTemplate.clone().nodeAt(0); + } + if ( li.getAttribute('data-listkey') !== listKey ) { + li.setAttribute('data-listkey', listKey); + elem = li.querySelector('input[type="checkbox"]'); + elem.checked = entry.selected === true; + elem = li.querySelector('a:nth-of-type(1)'); + elem.setAttribute('href', 'asset-viewer.html?url=' + encodeURI(listKey)); + elem.setAttribute('type', 'text/html'); + elem.textContent = listNameFromListKey(collection, listKey); + li.classList.remove('toRemove'); + elem = li.querySelector('a.support'); + if ( entry.supportURL ) { + elem.setAttribute( + 'href', + entry.supportURL ? entry.supportURL : '' + ); + } + li.classList.toggle('external', entry.external === true); + } + // https://github.com/gorhill/uBlock/issues/1429 + if ( !soft ) { + elem = li.querySelector('input[type="checkbox"]'); + elem.checked = entry.selected === true; + } + elem = li.querySelector('span.counts'); + var text = ''; + if ( !isNaN(+entry.entryUsedCount) && !isNaN(+entry.entryCount) ) { + text = listStatsTemplate + .replace('{{used}}', renderNumber(entry.selected ? entry.entryUsedCount : 0)) + .replace('{{total}}', renderNumber(entry.entryCount)); + } + elem.textContent = text; + // https://github.com/chrisaljoudi/uBlock/issues/104 + var asset = listDetails.cache[listKey] || {}; + var remoteURL = asset.remoteURL; + li.classList.toggle( + 'unsecure', + typeof remoteURL === 'string' && remoteURL.lastIndexOf('http:', 0) === 0 + ); + li.classList.toggle('failed', asset.error !== undefined); + li.classList.toggle('obsolete', asset.obsolete === true); + li.classList.toggle('cached', asset.cached === true && asset.writeTime > 0); + if ( asset.cached ) { + li.querySelector('.status.cache').setAttribute( + 'title', + lastUpdateTemplateString.replace('{{ago}}', renderElapsedTimeToString(asset.writeTime)) + ); + } + li.classList.remove('discard'); + return li; + }; + var onRenderAssetFiles = function(collection, listSelector) { + // Incremental rendering: this will allow us to easily discard unused + // DOM list entries. + uDom(listSelector + ' .listEntry:not(.notAnAsset)').addClass('discard'); + + var assetKeys = Array.from(collection.keys()); + + // Sort works this way: + // - Send /^https?:/ items at the end (custom hosts file URL) + assetKeys.sort(function(a, b) { + let ea = collection.get(a), + eb = collection.get(b); + if ( ea.submitter !== eb.submitter ) { + return ea.submitter !== 'user' ? -1 : 1; + } + let ta = ea.title || a, + tb = eb.title || b; + if ( reExternalHostFile.test(ta) === reExternalHostFile.test(tb) ) { + return ta.localeCompare(tb); + } + return reExternalHostFile.test(tb) ? -1 : 1; + }); + + let ulList = document.querySelector(listSelector), + liLast = ulList.querySelector('.notAnAsset'); + + for ( let i = 0; i < assetKeys.length; i++ ) { + let liReuse = i < ulList.childElementCount ? + ulList.children[i] : + null; + if ( + liReuse !== null && + liReuse.classList.contains('notAnAsset') + ) { + liReuse = null; + } + let liEntry = liFromListEntry(collection, assetKeys[i], liReuse); + if ( liEntry.parentElement === null ) { + ulList.insertBefore(liEntry, liLast); + } + } + }; + + var onAssetDataReceived = function(details) { + // Preprocess. + details.hosts = new Map(details.hosts); + details.recipes = new Map(details.recipes); + + // Before all, set context vars + listDetails = details; + + document.body.classList.toggle( + 'contributor', + listDetails.contributor === true + ); + + onRenderAssetFiles(details.hosts, '#hosts'); + onRenderAssetFiles(details.recipes, '#recipes'); + + uDom('.listEntry.discard').remove(); + + uDom('#listsOfBlockedHostsPrompt').text( + vAPI.i18n('hostsFilesStats').replace( + '{{blockedHostnameCount}}', + renderNumber(details.blockedHostnameCount) + ) + ); + uDom('#autoUpdate').prop('checked', listDetails.autoUpdate === true); + + uDom.nodeFromSelector('#recipes .toInline > input[type="checkbox"]').checked = + listDetails.userRecipes.enabled === true; + uDom.nodeFromSelector('#recipes .toInline > textarea').value = + listDetails.userRecipes.content; + + + if ( !soft ) { + hostsFilesSettingsHash = hashFromCurrentFromSettings(); + } + renderWidgets(); + }; + + vAPI.messaging.send( + 'hosts-files.js', + { what: 'getAssets' }, + onAssetDataReceived + ); +}; + +/******************************************************************************/ + +var renderWidgets = function() { + uDom('#buttonUpdate').toggleClass('disabled', document.querySelector('body:not(.updating) .assets .listEntry.obsolete > input[type="checkbox"]:checked') === null); + uDom('#buttonPurgeAll').toggleClass('disabled', document.querySelector('.assets .listEntry.cached') === null); + uDom('#buttonApply').toggleClass('disabled', hostsFilesSettingsHash === hashFromCurrentFromSettings()); +}; + +/******************************************************************************/ + +var updateAssetStatus = function(details) { + var li = document.querySelector('.assets .listEntry[data-listkey="' + details.key + '"]'); + if ( li === null ) { return; } + li.classList.toggle('failed', !!details.failed); + li.classList.toggle('obsolete', !details.cached); + li.classList.toggle('cached', !!details.cached); + if ( details.cached ) { + li.querySelector('.status.cache').setAttribute( + 'title', + lastUpdateTemplateString.replace( + '{{ago}}', + vAPI.i18n.renderElapsedTimeToString(Date.now()) + ) + ); + } + renderWidgets(); +}; + +/******************************************************************************* + + Compute a hash from all the settings affecting how assets are loaded + in memory. + +**/ + +var hashFromCurrentFromSettings = function() { + let listHash = [], + listEntries = document.querySelectorAll( + '.assets .listEntry[data-listkey]:not(.toRemove)' + ); + for ( let liEntry of listEntries ) { + if ( liEntry.querySelector('input[type="checkbox"]:checked') !== null ) { + listHash.push(liEntry.getAttribute('data-listkey')); + } + } + return [ + listHash.join(), + document.querySelector('.listEntry.toRemove') !== null, + reValidExternalList.test( + textFromTextarea( + '#hosts .toImport > input[type="checkbox"]:checked ~ textarea' + ) + ), + textFromTextarea( + '#hosts .toInline > input[type="checkbox"]:checked ~ textarea' + ), + reValidExternalList.test( + textFromTextarea( + '#recipes .toImport > input[type="checkbox"]:checked ~ textarea' + ) + ), + textFromTextarea( + '#recipes .toInline > input[type="checkbox"]:checked ~ textarea' + ), + ].join('\n'); +}; + +/******************************************************************************/ + +var textFromTextarea = function(textarea) { + if ( typeof textarea === 'string' ) { + textarea = document.querySelector(textarea); + } + return textarea !== null ? textarea.value.trim() : ''; +}; + +/******************************************************************************/ + +var onHostsFilesSettingsChanged = function() { + renderWidgets(); +}; + +/******************************************************************************/ + +var onRemoveExternalAsset = function(ev) { + var liEntry = uDom(this).ancestors('[data-listkey]'), + listKey = liEntry.attr('data-listkey'); + if ( listKey ) { + liEntry.toggleClass('toRemove'); + renderWidgets(); + } + ev.preventDefault(); +}; + +/******************************************************************************/ + +var onPurgeClicked = function() { + var button = uDom(this), + liEntry = button.ancestors('[data-listkey]'), + listKey = liEntry.attr('data-listkey'); + if ( !listKey ) { return; } + + vAPI.messaging.send('hosts-files.js', { what: 'purgeCache', assetKey: listKey }); + liEntry.addClass('obsolete'); + liEntry.removeClass('cached'); + + if ( liEntry.descendants('input').first().prop('checked') ) { + renderWidgets(); + } +}; + +/******************************************************************************/ + +var selectAssets = function(callback) { + var prepareChanges = function(listSelector) { + var out = { + toSelect: [], + toImport: '', + toRemove: [], + toInline: { + enabled: false, + content: '' + } + }; + + let root = document.querySelector(listSelector); + + // Lists to select or remove + let liEntries = root.querySelectorAll( + '.listEntry[data-listkey]:not(.notAnAsset)' + ); + for ( let liEntry of liEntries ) { + if ( liEntry.classList.contains('toRemove') ) { + out.toRemove.push(liEntry.getAttribute('data-listkey')); + } else if ( liEntry.querySelector('input[type="checkbox"]:checked') ) { + out.toSelect.push(liEntry.getAttribute('data-listkey')); + } + } + + // External hosts files to import + let input = root.querySelector( + '.toImport > input[type="checkbox"]:checked' + ); + if ( input !== null ) { + let textarea = root.querySelector('.toImport textarea'); + out.toImport = textarea.value.trim(); + textarea.value = ''; + input.checked = false; + } + + // Inline data + out.toInline.enabled = root.querySelector( + '.toInline > input[type="checkbox"]:checked' + ) !== null; + out.toInline.content = textFromTextarea('.toInline > textarea'); + + return out; + }; + + vAPI.messaging.send( + 'hosts-files.js', + { + what: 'selectAssets', + hosts: prepareChanges('#hosts'), + recipes: prepareChanges('#recipes') + }, + callback + ); + + hostsFilesSettingsHash = hashFromCurrentFromSettings(); +}; + +/******************************************************************************/ + +var buttonApplyHandler = function() { + uDom('#buttonApply').removeClass('enabled'); + selectAssets(function(response) { + if ( response && response.hostsChanged ) { + vAPI.messaging.send('hosts-files.js', { what: 'reloadHostsFiles' }); + } + if ( response && response.recipesChanged ) { + vAPI.messaging.send('hosts-files.js', { what: 'reloadRecipeFiles' }); + } + }); + renderWidgets(); +}; + +/******************************************************************************/ + +var buttonUpdateHandler = function() { + uDom('#buttonUpdate').removeClass('enabled'); + selectAssets(function() { + document.body.classList.add('updating'); + vAPI.messaging.send('hosts-files.js', { what: 'forceUpdateAssets' }); + renderWidgets(); + }); + renderWidgets(); +}; + +/******************************************************************************/ + +var buttonPurgeAllHandler = function() { + uDom('#buttonPurgeAll').removeClass('enabled'); + vAPI.messaging.send( + 'hosts-files.js', + { what: 'purgeAllCaches' }, + function() { + renderHostsFiles(true); + } + ); +}; + +/******************************************************************************/ + +var autoUpdateCheckboxChanged = function() { + vAPI.messaging.send( + 'hosts-files.js', + { + what: 'userSettings', + name: 'autoUpdate', + value: this.checked + } + ); +}; + +/******************************************************************************/ + +uDom('#autoUpdate').on('change', autoUpdateCheckboxChanged); +uDom('#buttonApply').on('click', buttonApplyHandler); +uDom('#buttonUpdate').on('click', buttonUpdateHandler); +uDom('#buttonPurgeAll').on('click', buttonPurgeAllHandler); +uDom('.assets').on('change', '.listEntry > input', onHostsFilesSettingsChanged); +uDom('.assets').on('input', '.listEntry > textarea', onHostsFilesSettingsChanged); +uDom('.assets').on('click', '.listEntry > .remove', onRemoveExternalAsset); +uDom('.assets').on('click', '.status.cache', onPurgeClicked); + +renderHostsFiles(); + +/******************************************************************************/ + +})(); + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/httpsb.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/httpsb.js new file mode 100644 index 0000000..c041152 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/httpsb.js @@ -0,0 +1,96 @@ +/******************************************************************************* + + uMatrix - a Chromium browser extension to black/white list requests. + Copyright (C) 2014-2016 Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uMatrix +*/ + +/* global chrome, µMatrix */ + +'use strict'; + +/******************************************************************************/ + +(function() { + var µm = µMatrix; + µm.pMatrix = new µm.Matrix(); + µm.pMatrix.setSwitch('matrix-off', 'about-scheme', 1); + µm.pMatrix.setSwitch('matrix-off', 'chrome-extension-scheme', 1); + µm.pMatrix.setSwitch('matrix-off', 'chrome-scheme', 1); + µm.pMatrix.setSwitch('matrix-off', 'moz-extension-scheme', 1); + µm.pMatrix.setSwitch('matrix-off', 'opera-scheme', 1); + µm.pMatrix.setSwitch('matrix-off', 'vivaldi-scheme', 1); + // https://discourse.mozilla.org/t/support-umatrix/5131/157 + µm.pMatrix.setSwitch('matrix-off', 'wyciwyg-scheme', 1); + µm.pMatrix.setSwitch('matrix-off', 'behind-the-scene', 1); + µm.pMatrix.setSwitch('referrer-spoof', 'behind-the-scene', 2); + µm.pMatrix.setSwitch('https-strict', 'behind-the-scene', 2); + // Global rules + µm.pMatrix.setSwitch('referrer-spoof', '*', 1); + µm.pMatrix.setSwitch('noscript-spoof', '*', 1); + µm.pMatrix.setCell('*', '*', '*', µm.Matrix.Red); + µm.pMatrix.setCell('*', '*', 'css', µm.Matrix.Green); + µm.pMatrix.setCell('*', '*', 'image', µm.Matrix.Green); + µm.pMatrix.setCell('*', '*', 'frame', µm.Matrix.Red); + // 1st-party rules + µm.pMatrix.setCell('*', '1st-party', '*', µm.Matrix.Green); + µm.pMatrix.setCell('*', '1st-party', 'frame', µm.Matrix.Green); + + µm.tMatrix = new µm.Matrix(); + µm.tMatrix.assign(µm.pMatrix); +})(); + +/******************************************************************************/ + +µMatrix.hostnameFromURL = function(url) { + var hn = this.URI.hostnameFromURI(url); + return hn === '' ? '*' : hn; +}; + +/******************************************************************************/ + +µMatrix.mustBlock = function(srcHostname, desHostname, type) { + return this.tMatrix.mustBlock(srcHostname, desHostname, type); +}; + +µMatrix.mustAllow = function(srcHostname, desHostname, type) { + return this.mustBlock(srcHostname, desHostname, type) === false; +}; + +/******************************************************************************/ + +µMatrix.formatCount = function(count) { + if ( typeof count !== 'number' ) { + return ''; + } + var s = count.toFixed(0); + if ( count >= 1000 ) { + if ( count < 10000 ) { + s = '>' + s.slice(0,1) + 'K'; + } else if ( count < 100000 ) { + s = s.slice(0,2) + 'K'; + } else if ( count < 1000000 ) { + s = s.slice(0,3) + 'K'; + } else if ( count < 10000000 ) { + s = s.slice(0,1) + 'M'; + } else { + s = s.slice(0,-6) + 'M'; + } + } + return s; +}; + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/i18n.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/i18n.js new file mode 100644 index 0000000..c43c295 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/i18n.js @@ -0,0 +1,208 @@ +/******************************************************************************* + + µMatrix - a Chromium browser extension to black/white list requests. + Copyright (C) 2014 Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uMatrix +*/ + +/* global vAPI, uDom */ + +/******************************************************************************/ + +// This file should always be included at the end of the `body` tag, so as +// to ensure all i18n targets are already loaded. + +(function() { + +'use strict'; + +/******************************************************************************/ + +// https://github.com/gorhill/uBlock/issues/2084 +// Anything else than , , , , , , and will +// be rendered as plain text. +// For , only the type attribute is allowed. +// For , only href attribute must be present, and it MUST starts with +// `https://`, and includes no single- or double-quotes. +// No HTML entities are allowed, there is code to handle existing HTML +// entities already present in translation files until they are all gone. + +var reSafeTags = /^([\s\S]*?)<(b|blockquote|code|em|i|kbd|span|sup)>(.+?)<\/\2>([\s\S]*)$/, + reSafeInput = /^([\s\S]*?)<(input type="[^"]+")>(.*?)([\s\S]*)$/, + reInput = /^input type=(['"])([a-z]+)\1$/, + reSafeLink = /^([\s\S]*?)<(a href=['"]https?:\/\/[^'" <>]+['"])>(.+?)<\/a>([\s\S]*)$/, + reLink = /^a href=(['"])(https?:\/\/[^'"]+)\1$/; + +var safeTextToTagNode = function(text) { + var matches, node; + if ( text.lastIndexOf('a ', 0) === 0 ) { + matches = reLink.exec(text); + if ( matches === null ) { return null; } + node = document.createElement('a'); + node.setAttribute('href', matches[2]); + return node; + } + if ( text.lastIndexOf('input ', 0) === 0 ) { + matches = reInput.exec(text); + if ( matches === null ) { return null; } + node = document.createElement('input'); + node.setAttribute('type', matches[2]); + return node; + } + // Firefox extension validator warns if using a variable as argument for + // document.createElement(). + switch ( text ) { + case 'b': + return document.createElement('b'); + case 'blockquote': + return document.createElement('blockquote'); + case 'code': + return document.createElement('code'); + case 'em': + return document.createElement('em'); + case 'i': + return document.createElement('i'); + case 'kbd': + return document.createElement('kbd'); + case 'span': + return document.createElement('span'); + case 'sup': + return document.createElement('sup'); + default: + break; + } +}; + +var safeTextToTextNode = function(text) { + // TODO: remove once no more HTML entities in translation files. + if ( text.indexOf('&') !== -1 ) { + text = text.replace(/“/g, '“') + .replace(/”/g, '”') + .replace(/‘/g, '‘') + .replace(/’/g, '’'); + } + return document.createTextNode(text); +}; + +var safeTextToDOM = function(text, parent) { + if ( text === '' ) { return; } + // Fast path (most common). + if ( text.indexOf('<') === -1 ) { + return parent.appendChild(safeTextToTextNode(text)); + } + // Slow path. + // `

` no longer allowed. Code below can be remove once all

's are + // gone from translation files. + text = text.replace(/^

|<\/p>/g, '') + .replace(/

/g, '\n\n'); + // Parse allowed HTML tags. + var matches, + matches1 = reSafeTags.exec(text), + matches2 = reSafeLink.exec(text); + if ( matches1 !== null && matches2 !== null ) { + matches = matches1.index < matches2.index ? matches1 : matches2; + } else if ( matches1 !== null ) { + matches = matches1; + } else if ( matches2 !== null ) { + matches = matches2; + } else { + matches = reSafeInput.exec(text); + } + if ( matches === null ) { + parent.appendChild(safeTextToTextNode(text)); + return; + } + safeTextToDOM(matches[1], parent); + var node = safeTextToTagNode(matches[2]) || parent; + safeTextToDOM(matches[3], node); + parent.appendChild(node); + safeTextToDOM(matches[4], parent); +}; + +/******************************************************************************/ + +// Helper to deal with the i18n'ing of HTML files. +vAPI.i18n.render = function(context) { + var docu = document, + root = context || docu, + elems, n, i, elem, text; + + elems = root.querySelectorAll('[data-i18n]'); + n = elems.length; + for ( i = 0; i < n; i++ ) { + elem = elems[i]; + text = vAPI.i18n(elem.getAttribute('data-i18n')); + if ( !text ) { continue; } + // TODO: remove once it's all replaced with + if ( text.indexOf('{') !== -1 ) { + text = text.replace(/\{\{input:([^}]+)\}\}/g, ''); + } + safeTextToDOM(text, elem); + } + + uDom('[title]', context).forEach(function(elem) { + var title = vAPI.i18n(elem.attr('title')); + if ( title ) { + elem.attr('title', title); + } + }); + + uDom('[placeholder]', context).forEach(function(elem) { + elem.attr('placeholder', vAPI.i18n(elem.attr('placeholder'))); + }); + + uDom('[data-i18n-tip]', context).forEach(function(elem) { + elem.attr( + 'data-tip', + vAPI.i18n(elem.attr('data-i18n-tip')) + .replace(/
/g, '\n') + .replace(/\n{3,}/g, '\n\n') + ); + }); +}; + +vAPI.i18n.render(); + +/******************************************************************************/ + +vAPI.i18n.renderElapsedTimeToString = function(tstamp) { + var value = (Date.now() - tstamp) / 60000; + if ( value < 2 ) { + return vAPI.i18n('elapsedOneMinuteAgo'); + } + if ( value < 60 ) { + return vAPI.i18n('elapsedManyMinutesAgo').replace('{{value}}', Math.floor(value).toLocaleString()); + } + value /= 60; + if ( value < 2 ) { + return vAPI.i18n('elapsedOneHourAgo'); + } + if ( value < 24 ) { + return vAPI.i18n('elapsedManyHoursAgo').replace('{{value}}', Math.floor(value).toLocaleString()); + } + value /= 24; + if ( value < 2 ) { + return vAPI.i18n('elapsedOneDayAgo'); + } + return vAPI.i18n('elapsedManyDaysAgo').replace('{{value}}', Math.floor(value).toLocaleString()); +}; + +/******************************************************************************/ + +})(); + +/******************************************************************************/ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/liquid-dict.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/liquid-dict.js new file mode 100644 index 0000000..4e0b335 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/liquid-dict.js @@ -0,0 +1,199 @@ +/******************************************************************************* + + uMatrix - a Chromium browser extension to black/white list requests. + Copyright (C) 2014-2018 Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uMatrix +*/ + +'use strict'; + +/******************************************************************************/ + +µMatrix.LiquidDict = (function() { + +/******************************************************************************/ + +var LiquidDict = function() { + this.dict = new Map(); + this.reset(); +}; + +/******************************************************************************/ + +// Somewhat arbitrary: I need to come up with hard data to know at which +// point binary search is better than indexOf. + +LiquidDict.prototype.cutoff = 500; + +/******************************************************************************/ + +var meltBucket = function(ldict, len, bucket) { + ldict.frozenBucketCount -= 1; + if ( bucket.charCodeAt(0) === 0x20 /* ' ' */ ) { + return new Set(bucket.trim().split(' ')); + } + let dict = new Set(); + let offset = 0; + while ( offset < bucket.length ) { + dict.add(bucket.substring(offset, len)); + offset += len; + } + return dict; +}; + +var freezeBucket = function(ldict, bucket) { + ldict.frozenBucketCount += 1; + let words = Array.from(bucket); + let wordLen = words[0].length; + if ( wordLen * words.length < ldict.cutoff ) { + return ' ' + words.join(' ') + ' '; + } + return words.sort().join(''); +}; + +/******************************************************************************/ + +// How the key is derived dictates the number and size of buckets. +// +// http://jsperf.com/makekey-concat-vs-join/3 +// +// Question: Why is using a prototyped function better than a standalone +// helper function? + +LiquidDict.prototype.makeKey = function(word) { + let len = word.length; + if ( len > 255 ) { len = 255; } + let i = len >> 2; + return (word.charCodeAt( 0) & 0x03) << 14 | + (word.charCodeAt( i) & 0x03) << 12 | + (word.charCodeAt( i+i) & 0x03) << 10 | + (word.charCodeAt(i+i+i) & 0x03) << 8 | + len; +}; + +/******************************************************************************/ + +LiquidDict.prototype.test = function(word) { + let key = this.makeKey(word); + let bucket = this.dict.get(key); + if ( bucket === undefined ) { + return false; + } + if ( typeof bucket === 'object' ) { + return bucket.has(word); + } + if ( bucket.charCodeAt(0) === 0x20 /* ' ' */ ) { + return bucket.indexOf(' ' + word + ' ') !== -1; + } + // binary search + let len = word.length; + let left = 0; + // http://jsperf.com/or-vs-floor/3 + let right = ~~(bucket.length / len + 0.5); + while ( left < right ) { + let i = left + right >> 1; + let needle = bucket.substr( len * i, len ); + if ( word < needle ) { + right = i; + } else if ( word > needle ) { + left = i + 1; + } else { + return true; + } + } + return false; +}; + +/******************************************************************************/ + +LiquidDict.prototype.add = function(word) { + let key = this.makeKey(word); + let bucket = this.dict.get(key); + if ( bucket === undefined ) { + bucket = new Set(); + this.dict.set(key, bucket); + bucket.add(word); + this.count += 1; + return true; + } + if ( typeof bucket === 'string' ) { + bucket = meltBucket(this, word.len, bucket); + this.dict.set(key, bucket); + } + if ( bucket.has(word) === false ) { + bucket.add(word); + this.count += 1; + return true; + } + this.duplicateCount += 1; + return false; +}; + +/******************************************************************************/ + +LiquidDict.prototype.freeze = function() { + for ( let entry of this.dict ) { + if ( typeof entry[1] === 'object' ) { + this.dict.set(entry[0], freezeBucket(this, entry[1])); + } + } +}; + +/******************************************************************************/ + +LiquidDict.prototype.reset = function() { + this.dict.clear(); + this.count = 0; + this.duplicateCount = 0; + this.frozenBucketCount = 0; +}; + +/******************************************************************************/ + +let selfieVersion = 1; + +LiquidDict.prototype.toSelfie = function() { + this.freeze(); + return { + version: selfieVersion, + count: this.count, + duplicateCount: this.duplicateCount, + frozenBucketCount: this.frozenBucketCount, + dict: Array.from(this.dict) + }; +}; + +LiquidDict.prototype.fromSelfie = function(selfie) { + if ( selfie.version !== selfieVersion ) { return false; } + this.count = selfie.count; + this.duplicateCount = selfie.duplicateCount; + this.frozenBucketCount = selfie.frozenBucketCount; + this.dict = new Map(selfie.dict); + return true; +}; + +/******************************************************************************/ + +return LiquidDict; + +/******************************************************************************/ + +})(); + +/******************************************************************************/ + +µMatrix.ubiquitousBlacklist = new µMatrix.LiquidDict(); diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/logger-ui.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/logger-ui.js new file mode 100644 index 0000000..e95493c --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/logger-ui.js @@ -0,0 +1,1232 @@ +/******************************************************************************* + + uMatrix - a browser extension to benchmark browser session. + Copyright (C) 2015-present Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/sessbench +*/ + +/* global publicSuffixList, uDom, uMatrixScopeWidget */ + +'use strict'; + +/******************************************************************************/ + +(function() { + +/******************************************************************************/ + +var tbody = document.querySelector('#content tbody'); +var trJunkyard = []; +var tdJunkyard = []; +var firstVarDataCol = 1; // currently, column 2 (0-based index) +var lastVarDataIndex = + document.querySelector('#content colgroup').childElementCount - 1; +var maxEntries = 0; +var noTabId = ''; +var pageStores = new Map(); +var pageStoresToken; +var ownerId = Date.now(); + +var emphasizeTemplate = document.querySelector('#emphasizeTemplate > span'); + +var prettyRequestTypes = { + 'main_frame': 'doc', + 'stylesheet': 'css', + 'sub_frame': 'frame', + 'xmlhttprequest': 'xhr' +}; + +var dontEmphasizeSet = new Set([ + 'COOKIE', + 'CSP', + 'REFERER' +]); + +/******************************************************************************/ + +// Adjust top padding of content table, to match that of toolbar height. + +document.getElementById('content').style.setProperty( + 'margin-top', + document.getElementById('toolbar').clientHeight + 'px' +); + +/******************************************************************************/ + +let removeChildren = function(node) { + while ( node.firstChild ) { + node.removeChild(node.firstChild); + } +}; + +let removeSelf = function(node) { + let parent = node && node.parentNode; + if ( parent ) { + parent.removeChild(node); + } +}; + +let prependChild = function(parent, child) { + parent.insertBefore(child, parent.firstElementChild); +}; + +/******************************************************************************/ + +// We will lookup domains locally. + +let domainFromSrcHostname = (function() { + let srcHn = '', srcDn = ''; + return function(hn) { + if ( hn !== srcHn ) { + srcHn = hn; + srcDn = publicSuffixList.getDomain(hn); + } + return srcDn; + }; +})(); + +let domainFromDesHostname = (function() { + let desHn = '', desDn = ''; + return function(hn) { + if ( hn !== desHn ) { + desHn = hn; + desDn = publicSuffixList.getDomain(hn); + } + return desDn; + }; +})(); + +let is3rdParty = function(srcHn, desHn) { + return domainFromSrcHostname(srcHn) !== domainFromDesHostname(desHn); +}; + +vAPI.messaging.send( + 'logger-ui.js', + { what: 'getPublicSuffixListData' }, + response => { + publicSuffixList.fromSelfie(response); + } +); + +/******************************************************************************/ + +// Emphasize hostname and cookie name. + +var emphasizeCookie = function(s) { + var pnode = emphasizeHostname(s); + if ( pnode.childNodes.length !== 3 ) { + return pnode; + } + var prefix = '-cookie:'; + var text = pnode.childNodes[2].textContent; + var beg = text.indexOf(prefix); + if ( beg === -1 ) { + return pnode; + } + beg += prefix.length; + var end = text.indexOf('}', beg); + if ( end === -1 ) { + return pnode; + } + var cnode = emphasizeTemplate.cloneNode(true); + cnode.childNodes[0].textContent = text.slice(0, beg); + cnode.childNodes[1].textContent = text.slice(beg, end); + cnode.childNodes[2].textContent = text.slice(end); + pnode.replaceChild(cnode.childNodes[0], pnode.childNodes[2]); + pnode.appendChild(cnode.childNodes[0]); + pnode.appendChild(cnode.childNodes[0]); + return pnode; +}; + +/******************************************************************************/ + +// Emphasize hostname in URL. + +var emphasizeHostname = function(url) { + var hnbeg = url.indexOf('://'); + if ( hnbeg === -1 ) { + return document.createTextNode(url); + } + hnbeg += 3; + + var hnend = url.indexOf('/', hnbeg); + if ( hnend === -1 ) { + hnend = url.slice(hnbeg).search(/\?#/); + if ( hnend !== -1 ) { + hnend += hnbeg; + } else { + hnend = url.length; + } + } + + var node = emphasizeTemplate.cloneNode(true); + node.childNodes[0].textContent = url.slice(0, hnbeg); + node.childNodes[1].textContent = url.slice(hnbeg, hnend); + node.childNodes[2].textContent = url.slice(hnend); + return node; +}; + +/******************************************************************************/ + +var createCellAt = function(tr, index) { + var td = tr.cells[index]; + var mustAppend = !td; + if ( mustAppend ) { + td = tdJunkyard.pop(); + } + if ( td ) { + td.removeAttribute('colspan'); + td.textContent = ''; + } else { + td = document.createElement('td'); + } + if ( mustAppend ) { + tr.appendChild(td); + } + return td; +}; + +/******************************************************************************/ + +var createRow = function(layout) { + let tr = trJunkyard.pop(); + if ( tr ) { + tr.className = ''; + } else { + tr = document.createElement('tr'); + } + let index; + for ( index = 0; index < firstVarDataCol; index++ ) { + createCellAt(tr, index); + } + let i = 1, span = 1; + let td; + for (;;) { + td = createCellAt(tr, index); + if ( i === lastVarDataIndex ) { break; } + if ( layout.charAt(i) !== '1' ) { + span += 1; + } else { + if ( span !== 1 ) { + td.setAttribute('colspan', span); + } + index += 1; + span = 1; + } + i += 1; + } + if ( span !== 1 ) { + td.setAttribute('colspan', span); + } + index += 1; + for (;;) { + td = tr.cells[index]; + if ( !td ) { break; } + tdJunkyard.push(tr.removeChild(td)); + } + tr.removeAttribute('data-tabid'); + tr.removeAttribute('data-srchn'); + tr.removeAttribute('data-deshn'); + tr.removeAttribute('data-type'); + return tr; +}; + +/******************************************************************************/ + +var padTo2 = function(v) { + return v < 10 ? '0' + v : v; +}; + +/******************************************************************************/ + +var createGap = function(tabId, url) { + var tr = createRow('1'); + tr.classList.add('doc'); + tr.classList.add('tab'); + tr.classList.add('canMtx'); + tr.setAttribute('data-tabid', tabId); + tr.cells[firstVarDataCol].textContent = url; + tbody.insertBefore(tr, tbody.firstChild); +}; + +/******************************************************************************/ + +var renderLogEntry = function(entry) { + let details; + try { + details = JSON.parse(entry.details); + } catch(ex) { + console.error(ex); + } + if ( details instanceof Object === false ) { return; } + + let tr; + let fvdc = firstVarDataCol; + + if ( details.error !== undefined ) { + tr = createRow('1'); + tr.classList.add('cat_error'); + tr.cells[fvdc].textContent = details.error; + } else if ( details.info !== undefined ) { + tr = createRow('1'); + tr.classList.add('cat_info'); + if ( details.prettify === 'cookie' ) { + tr.cells[fvdc].appendChild(emphasizeCookie(details.info)); + } else { + tr.cells[fvdc].textContent = details.info; + } + } else if ( details.srcHn !== undefined && details.desHn !== undefined ) { + tr = createRow('11111'); + tr.classList.add('canMtx'); + tr.classList.add('cat_net'); + tr.setAttribute('data-srchn', details.srcHn); + tr.setAttribute('data-deshn', details.desHn); + tr.setAttribute('data-type', details.type); + // If the request is that of a root frame, insert a gap in the table + // in order to visually separate entries for different documents. + if ( details.type === 'doc' && details.tabId !== noTabId ) { + createGap(details.tabId, details.desURL); + } + tr.cells[fvdc+0].textContent = details.srcHn; + if ( details.blocked ) { + tr.classList.add('blocked'); + tr.cells[fvdc+1].textContent = '--'; + } else { + tr.cells[fvdc+1].textContent = ''; + } + tr.cells[fvdc+2].textContent = + prettyRequestTypes[details.type] || details.type; + if ( dontEmphasizeSet.has(details.type) ) { + tr.cells[fvdc+3].textContent = details.desURL; + } else { + tr.cells[fvdc+3].appendChild(emphasizeHostname(details.desURL)); + } + tr.cells[fvdc+4].textContent = + is3rdParty(details.srcHn, details.desHn) ? '3p' : ''; + } else if ( details.header ) { + tr = createRow('11111'); + tr.classList.add('canMtx'); + tr.classList.add('cat_net'); + tr.cells[fvdc+0].textContent = details.srcHn || ''; + if ( details.change === -1 ) { + tr.classList.add('blocked'); + tr.cells[fvdc+1].textContent = '--'; + } else { + tr.cells[fvdc+1].textContent = ''; + } + tr.cells[fvdc+2].textContent = details.header.name; + tr.cells[fvdc+3].textContent = details.header.value; + tr.cells[fvdc+4].textContent = ''; + } else { + tr = createRow('1'); + tr.cells[fvdc].textContent = 'huh?'; + } + + // Fields common to all rows. + let time = logDate; + time.setTime(entry.tstamp - logDateTimezoneOffset); + tr.cells[0].textContent = padTo2(time.getUTCHours()) + ':' + + padTo2(time.getUTCMinutes()) + ':' + + padTo2(time.getSeconds()); + + if ( details.tabId ) { + tr.classList.add('tab'); + tr.setAttribute('data-tabid', details.tabId); + } else { + tr.removeAttribute('data-tabid'); + } + + rowFilterer.filterOne(tr, true); + + tbody.insertBefore(tr, tbody.firstChild); +}; + +// Reuse date objects. +var logDate = new Date(), + logDateTimezoneOffset = logDate.getTimezoneOffset() * 60000; + +/******************************************************************************/ + +var renderLogEntries = function(response) { + let entries = response.entries; + if ( entries.length === 0 ) { return; } + + // Preserve scroll position + let height = tbody.offsetHeight; + + for ( let i = 0, n = entries.length; i < n; i++ ) { + renderLogEntry(entries[i]); + } + + // Prevent logger from growing infinitely and eating all memory. For + // instance someone could forget that it is left opened for some + // dynamically refreshed pages. + truncateLog(maxEntries); + + let yDelta = tbody.offsetHeight - height; + if ( yDelta === 0 ) { return; } + + // Chromium: + // body.scrollTop = good value + // body.parentNode.scrollTop = 0 + if ( document.body.scrollTop !== 0 ) { + document.body.scrollTop += yDelta; + return; + } + + // Firefox: + // body.scrollTop = 0 + // body.parentNode.scrollTop = good value + let parentNode = document.body.parentNode; + if ( parentNode && parentNode.scrollTop !== 0 ) { + parentNode.scrollTop += yDelta; + } +}; + +/******************************************************************************/ + +var synchronizeTabIds = function(newPageStores) { + let oldPageStores = pageStores; + let autoDeleteVoidRows = !!vAPI.localStorage.getItem('loggerAutoDeleteVoidRows'); + let rowVoided = false; + for ( let tabId of oldPageStores.keys() ) { + if ( newPageStores.has(tabId) ) { continue; } + // Mark or remove voided rows + let trs = uDom('[data-tabid="' + tabId + '"]'); + if ( autoDeleteVoidRows ) { + toJunkyard(trs); + } else { + trs.removeClass('canMtx'); + rowVoided = true; + } + } + + let select = document.getElementById('pageSelector'); + let selectValue = select.value; + let tabIds = Array.from(newPageStores.keys()).sort(function(a, b) { + return newPageStores.get(a).localeCompare(newPageStores.get(b)); + }); + for ( var i = 0, j = 2; i < tabIds.length; i++ ) { + let tabId = tabIds[i]; + if ( tabId === noTabId ) { continue; } + let option = select.options[j]; + j += 1; + if ( !option ) { + option = document.createElement('option'); + select.appendChild(option); + } + option.textContent = newPageStores.get(tabId); + option.value = tabId; + if ( option.value === selectValue ) { + option.setAttribute('selected', ''); + } else { + option.removeAttribute('selected'); + } + } + while ( j < select.options.length ) { + select.removeChild(select.options[j]); + } + if ( select.value !== selectValue ) { + select.selectedIndex = 0; + select.value = ''; + select.options[0].setAttribute('selected', ''); + pageSelectorChanged(); + } + + pageStores = newPageStores; + + return rowVoided; +}; + +/******************************************************************************/ + +var truncateLog = function(size) { + if ( size === 0 ) { + size = 5000; + } + var tbody = document.querySelector('#content tbody'); + size = Math.min(size, 10000); + var tr; + while ( tbody.childElementCount > size ) { + tr = tbody.lastElementChild; + trJunkyard.push(tbody.removeChild(tr)); + } +}; + +/******************************************************************************/ + +var onLogBufferRead = function(response) { + if ( !response || response.unavailable ) { + readLogBufferAsync(); + return; + } + + // This tells us the behind-the-scene tab id + noTabId = response.noTabId; + + // This may have changed meanwhile + if ( response.maxLoggedRequests !== maxEntries ) { + maxEntries = response.maxLoggedRequests; + uDom('#maxEntries').val(maxEntries || ''); + } + + // Neuter rows for which a tab does not exist anymore + var rowVoided = false; + if ( response.pageStoresToken !== pageStoresToken ) { + if ( Array.isArray(response.pageStores) ) { + rowVoided = synchronizeTabIds(new Map(response.pageStores)); + } + pageStoresToken = response.pageStoresToken; + } + + renderLogEntries(response); + + if ( rowVoided ) { + uDom('#clean').toggleClass( + 'disabled', + tbody.querySelector('tr.tab:not(.canMtx)') === null + ); + } + + // Synchronize toolbar with content of log + uDom('#clear').toggleClass( + 'disabled', + tbody.querySelector('tr') === null + ); + + readLogBufferAsync(); +}; + +/******************************************************************************/ + +// This can be called only once, at init time. After that, this will be called +// automatically. If called after init time, this will be messy, and this would +// require a bit more code to ensure no multi time out events. + +var readLogBuffer = function() { + if ( ownerId === undefined ) { return; } + vAPI.messaging.send( + 'logger-ui.js', + { + what: 'readMany', + ownerId: ownerId, + pageStoresToken: pageStoresToken + }, + onLogBufferRead + ); +}; + +var readLogBufferAsync = function() { + if ( ownerId === undefined ) { return; } + vAPI.setTimeout(readLogBuffer, 1200); +}; + +/******************************************************************************/ + +var tabIdFromPageSelector = function() { + let tabId = parseInt(document.getElementById('pageSelector').value, 10); + return isNaN(tabId) === false ? tabId : 0; +}; + +var pageSelectorChanged = function() { + let style = document.getElementById('tabFilterer'); + let tabId = tabIdFromPageSelector(); + let sheet = style.sheet; + while ( sheet.cssRules.length !== 0 ) { + sheet.deleteRule(0); + } + if ( tabId !== 0 ) { + sheet.insertRule( + '#content table tr:not([data-tabid="' + tabId + '"]) { display: none; }', + 0 + ); + } + document.getElementById('reloadTab').classList.toggle('disabled', tabId <= 0); + document.getElementById('popupPanelButton').classList.toggle('disabled', tabId <= 0); + popupPanel.update(); +}; + +/******************************************************************************/ + +var reloadTab = function(ev) { + let tabId = tabIdFromPageSelector(); + if ( tabId <= 0 ) { return; } + vAPI.messaging.send( + 'default', + { + what: 'forceReloadTab', + tabId: tabId, + bypassCache: ev && (ev.ctrlKey || ev.metaKey || ev.shiftKey) + } + ); +}; + +/******************************************************************************/ + +var onMaxEntriesChanged = function() { + var raw = uDom(this).val(); + try { + maxEntries = parseInt(raw, 10); + if ( isNaN(maxEntries) ) { + maxEntries = 0; + } + } catch (e) { + maxEntries = 0; + } + + vAPI.messaging.send('logger-ui.js', { + what: 'userSettings', + name: 'maxLoggedRequests', + value: maxEntries + }); + + truncateLog(maxEntries); +}; + +/******************************************************************************/ + +var popupPanel = (function() { + let tabId = 0; + let popupObserver = null; + let timer; + + let resizePopup = function() { + if ( timer !== undefined ) { + cancelAnimationFrame(timer); + timer = undefined; + } + let container = document.getElementById('popupPanelContainer'); + let popup = container.querySelector('iframe'); + if ( popup === null ) { return; } + let popupBody = popup.contentWindow.document.body; + if ( + popupBody.clientWidth !== 0 && + container.clientWidth !== popupBody.clientWidth + ) { + container.style.setProperty('width', popupBody.clientWidth + 'px'); + } + popup.style.removeProperty('height'); + if ( + popupBody.clientHeight !== 0 && + popup.clientHeight !== popupBody.clientHeight + ) { + popup.style.setProperty('height', popupBody.clientHeight + 'px'); + } + let ph = document.documentElement.clientHeight; + let crect = container.getBoundingClientRect(); + if ( crect.height > ph ) { + popup.style.setProperty('height', 'calc(' + ph + 'px - 1.8em)'); + } + // Adjust width for presence/absence of vertical scroll bar which may + // have appeared as a result of last operation. + let cw = container.clientWidth; + let dw = popup.contentWindow.document.documentElement.clientWidth; + if ( cw !== dw ) { + container.style.setProperty('width', 2 * cw - dw + 'px'); + } + }; + + let onResizeRequested = function() { + let popup = document.querySelector('#popupPanelContainer iframe'); + if ( popup === null ) { return; } + let popupBody = popup.contentWindow.document.body; + if ( popupBody.hasAttribute('data-resize-popup') === false ) { return; } + popupBody.removeAttribute('data-resize-popup'); + if ( timer === undefined ) { + timer = requestAnimationFrame(( ) => { + timer = undefined; + resizePopup(); + }); + } + }; + + let onLoad = function() { + resizePopup(); + let popup = document.querySelector('#popupPanelContainer iframe'); + if ( popup === null ) { return; } + let popupBody = popup.contentDocument.body; + popupBody.removeAttribute('data-resize-popup'); + if ( popupObserver === null ) { + popupObserver = new MutationObserver(onResizeRequested); + } + popupObserver.observe(popupBody, { + attributes: true, + attributesFilter: [ 'data-resize-popup' ] + }); + document.body.classList.add('popupPanelOn'); + }; + + let start = function() { + let newTabId = tabIdFromPageSelector(); + if ( newTabId <= 0 ) { + return stop(); + } + if ( newTabId === tabId ) { return; } + tabId = newTabId; + let container = document.getElementById('popupPanelContainer'); + let popup = container.querySelector('iframe'); + if ( popup === null ) { + popup = document.createElement('iframe'); + popup.addEventListener('load', onLoad); + } + if ( popupObserver !== null ) { + popupObserver.disconnect(); + } + popup.setAttribute('src', 'popup.html?tabId=' + tabId); + if ( popup.parentNode !== null ) { return; } + let rect = document.getElementById('toolbar').getBoundingClientRect(); + container.style.top = rect.height + 'px'; + container.appendChild(popup); + }; + + let stop = function() { + document.body.classList.remove('popupPanelOn'); + popupObserver.disconnect(); + popupObserver = null; + let popup = document.querySelector('#popupPanelContainer iframe'); + if ( popup !== null ) { + popup.removeEventListener('load', onLoad); + removeSelf(popup); + } + tabId = 0; + }; + + return { + get tabId() { + return tabId; + }, + toggle: function(state) { + if ( state === undefined ) { + state = tabId === 0; + } + if ( state === false ) { + stop(); + } else { + start(); + } + }, + update: function() { + if ( tabId !== 0 ) { + start(); + } + } + }; +})(); + +/******************************************************************************/ + +var rowFilterer = (function() { + var filters = []; + + var parseInput = function() { + filters = []; + + var rawPart, hardBeg, hardEnd; + var raw = uDom('#filterInput').val().trim(); + var rawParts = raw.split(/\s+/); + var reStr, reStrs = [], not = false; + var n = rawParts.length; + for ( var i = 0; i < n; i++ ) { + rawPart = rawParts[i]; + if ( rawPart.charAt(0) === '!' ) { + if ( reStrs.length === 0 ) { + not = true; + } + rawPart = rawPart.slice(1); + } + hardBeg = rawPart.charAt(0) === '|'; + if ( hardBeg ) { + rawPart = rawPart.slice(1); + } + hardEnd = rawPart.slice(-1) === '|'; + if ( hardEnd ) { + rawPart = rawPart.slice(0, -1); + } + if ( rawPart === '' ) { + continue; + } + // https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions + reStr = rawPart.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); + if ( hardBeg ) { + reStr = '(?:^|\\s)' + reStr; + } + if ( hardEnd ) { + reStr += '(?:\\s|$)'; + } + reStrs.push(reStr); + if ( i < (n - 1) && rawParts[i + 1] === '||' ) { + i += 1; + continue; + } + reStr = reStrs.length === 1 ? reStrs[0] : reStrs.join('|'); + filters.push({ + re: new RegExp(reStr, 'i'), + r: !not + }); + reStrs = []; + not = false; + } + }; + + var filterOne = function(tr, clean) { + var ff = filters; + var fcount = ff.length; + if ( fcount === 0 && clean === true ) { + return; + } + // do not filter out doc boundaries, they help separate important + // section of log. + var cl = tr.classList; + if ( cl.contains('doc') ) { + return; + } + if ( fcount === 0 ) { + cl.remove('f'); + return; + } + var cc = tr.cells; + var ccount = cc.length; + var hit, j, f; + // each filter expression must hit (implicit and-op) + // if... + // positive filter expression = there must one hit on any field + // negative filter expression = there must be no hit on all fields + for ( var i = 0; i < fcount; i++ ) { + f = ff[i]; + hit = !f.r; + for ( j = 0; j < ccount; j++ ) { + if ( f.re.test(cc[j].textContent) ) { + hit = f.r; + break; + } + } + if ( !hit ) { + cl.add('f'); + return; + } + } + cl.remove('f'); + }; + + var filterAll = function() { + // Special case: no filter + if ( filters.length === 0 ) { + uDom('#content tr').removeClass('f'); + return; + } + var tbody = document.querySelector('#content tbody'); + var rows = tbody.rows; + var i = rows.length; + while ( i-- ) { + filterOne(rows[i]); + } + }; + + var onFilterChangedAsync = (function() { + var timer = null; + var commit = function() { + timer = null; + parseInput(); + filterAll(); + }; + return function() { + if ( timer !== null ) { + clearTimeout(timer); + } + timer = vAPI.setTimeout(commit, 750); + }; + })(); + + var onFilterButton = function() { + var cl = document.body.classList; + cl.toggle('f', cl.contains('f') === false); + }; + + uDom('#filterButton').on('click', onFilterButton); + uDom('#filterInput').on('input', onFilterChangedAsync); + + return { + filterOne: filterOne, + filterAll: filterAll + }; +})(); + +/******************************************************************************/ + +var ruleEditor = (function() { + let ruleEditorNode = document.getElementById('ruleEditor'); + let ruleActionPicker = document.getElementById('ruleActionPicker'); + let listeners = []; + + let addListener = function(node, type, handler, bits) { + let options; + if ( typeof bits === 'number' && (bits & 0b11) !== 0 ) { + options = {}; + if ( bits & 0b01 ) { + options.capture = true; + } + if ( bits & 0b10 ) { + options.passive = true; + } + } + listeners.push({ node, type, handler, options }); + return node.addEventListener(type, handler, options); + }; + + let setup = function(details) { + ruleEditorNode.setAttribute('data-tabid', details.tabId); + ruleEditorNode.classList.toggle( + 'colorblind', + details.options.colorBlindFriendly === true + ); + + // Initialize scope selector + let srcDn = domainFromSrcHostname(details.srcHn); + let scope = details.options.popupScopeLevel === '*' ? + '*' : + details.options.popupScopeLevel === 'domain' ? + srcDn : + details.srcHn; + uMatrixScopeWidget.init(srcDn, details.srcHn, scope, ruleEditorNode); + + // Create rule rows + let ruleWidgets = ruleEditorNode.querySelector('.ruleWidgets'); + removeChildren(ruleWidgets); + let ruleWidgetTemplate = + document.querySelector('#ruleRowTemplate .ruleRow'); + + // Rules: specific to desHn, from broadest to narrowest + let desHn = details.desHn; + let desDn = domainFromDesHostname(desHn); + for (;;) { + let ruleRow = ruleWidgetTemplate.cloneNode(true); + ruleRow.setAttribute('data-deshn', desHn); + ruleRow.children[0].textContent = desHn; + ruleRow.children[1].setAttribute('data-type', details.type); + if ( desHn === details.desHn ) { + ruleRow.children[1].textContent = '1'; + } + prependChild(ruleWidgets, ruleRow); + if ( desHn === desDn ) { break; } + let pos = desHn.indexOf('.'); + if ( pos === -1 ) { break; } + desHn = desHn.slice(pos + 1); + } + + // Rules: 1st-party, if needed + if ( desDn === srcDn ) { + let ruleRow = ruleWidgetTemplate.cloneNode(true); + ruleRow.setAttribute('data-deshn', '1st-party'); + ruleRow.children[0].textContent = '1st-party'; + ruleRow.children[1].setAttribute('data-type', details.type); + prependChild(ruleWidgets, ruleRow); + } + + // Rules: unspecific + { + let ruleRow = ruleWidgetTemplate.cloneNode(true); + ruleRow.setAttribute('data-deshn', '*'); + ruleRow.children[0].textContent = 'all'; + ruleRow.children[1].setAttribute('data-type', details.type); + ruleRow.children[1].textContent = details.type; + prependChild(ruleWidgets, ruleRow); + } + + colorize(); + + addListener(ruleEditorNode, 'click', quitHandler, 0b01); + addListener(window, 'uMatrixScopeWidgetChange', scopeChangeHandler); + addListener(ruleWidgets, 'mouseenter', attachRulePicker, 0b11); + addListener(ruleWidgets, 'mouseleave', removeRulePicker, 0b11); + addListener(ruleActionPicker, 'click', rulePickerHandler, 0b11); + addListener(ruleEditorNode.querySelector('#matrixReloadButton'), 'click', reload); + addListener(ruleEditorNode.querySelector('#matrixRevertButton'), 'click', revert); + addListener(ruleEditorNode.querySelector('#matrixPersistButton'), 'click', persist); + + document.body.appendChild(ruleEditorNode); + }; + + let colorize = function() { + let srcHn = uMatrixScopeWidget.getScope(); + let ruleCells = ruleEditorNode.querySelectorAll('.ruleCell'); + let ruleParts = []; + for ( let ruleCell of ruleCells ) { + ruleParts.push( + srcHn, + ruleCell.closest('.ruleRow').getAttribute('data-deshn'), + ruleCell.getAttribute('data-type') + ); + } + vAPI.messaging.send( + 'default', + { what: 'getCellColors', ruleParts }, + response => { + let tColors = response.tColors, + pColors = response.pColors, + diffCount = 0; + for ( let i = 0; i < ruleCells.length; i++ ) { + let ruleCell = ruleCells[i]; + let tColor = tColors[i]; + let pColor = pColors[i]; + ruleCell.setAttribute('data-tcolor', tColor); + ruleCell.setAttribute('data-pcolor', pColor); + if ( tColor === pColor ) { continue; } + if ( tColor < 128 && pColor < 128 ) { continue; } + diffCount += 1; + } + let dirty = diffCount !== 0; + ruleEditorNode + .querySelector('#matrixPersistButton .fa-icon-badge') + .textContent = dirty ? diffCount : ''; + ruleEditorNode + .querySelector('#matrixRevertButton') + .classList + .toggle('disabled', !dirty); + ruleEditorNode + .querySelector('#matrixPersistButton') + .classList + .toggle('disabled', !dirty); + } + ); + }; + + let quitHandler = function(ev) { + let target = ev.target; + if ( target.classList.contains('modalDialog') ) { + stop(); + } + }; + + let scopeChangeHandler = function() { + colorize(); + }; + + let attachRulePicker = function(ev) { + let target = ev.target; + if ( + target instanceof HTMLElement === false || + target.classList.contains('ruleCell') === false + ) { + return; + } + target.appendChild(ruleActionPicker); + }; + + let removeRulePicker = function(ev) { + let target = ev.target; + if ( + target instanceof HTMLElement === false || + ruleActionPicker.closest('.ruleCell') === target.closest('.ruleCell') + ) { + return; + } + removeSelf(ruleActionPicker); + }; + + let rulePickerHandler = function(ev) { + let action = ev.target.className; + if ( action !== 'allowRule' && action !== 'blockRule' ) { return; } + let cell = ev.target.closest('.ruleCell'); + if ( cell === null ) { return; } + let row = cell.closest('.ruleRow'); + let desHn = row.getAttribute('data-deshn'); + let type = cell.getAttribute('data-type'); + let color = parseInt(cell.getAttribute('data-tcolor'), 10); + let what; + if ( color === 1 || color === 2 ) { + what = action === 'blockRule' ? + 'blacklistMatrixCell' : + 'whitelistMatrixCell'; + } else if ( desHn === '*' && type === '*' ) { + what = color === 130 ? + 'blacklistMatrixCell' : + 'whitelistMatrixCell'; + } else { + what = 'graylistMatrixCell'; + } + let request = { + what, + srcHostname: uMatrixScopeWidget.getScope(), + desHostname: desHn, + type + }; + vAPI.messaging.send('default', request, colorize); + }; + + + let reload = function(ev) { + vAPI.messaging.send('default', { + what: 'forceReloadTab', + tabId: parseInt(ruleEditorNode.getAttribute('data-tabid'), 10), + bypassCache: ev && (ev.ctrlKey || ev.metaKey || ev.shiftKey) + }); + }; + + let diff = function() { + let entries = []; + let cells = ruleEditorNode.querySelectorAll('.ruleCell'); + let srcHn = uMatrixScopeWidget.getScope(); + for ( let cell of cells ) { + let tColor = cell.getAttribute('data-tcolor'); + let pColor = cell.getAttribute('data-pcolor'); + if ( tColor === pColor || tColor < 128 && pColor < 128 ) { + continue; + } + let row = cell.closest('.ruleRow'); + entries.push({ + srcHn, + desHn: row.getAttribute('data-deshn'), + type: cell.getAttribute('data-type') + }); + } + return entries; + }; + + let persist = function() { + let entries = diff(); + if ( entries.length === 0 ) { return; } + vAPI.messaging.send( + 'default', + { what: 'rulesetPersist', entries }, + colorize + ); + }; + + let revert = function() { + let entries = diff(); + if ( entries.length === 0 ) { return; } + vAPI.messaging.send( + 'default', + { what: 'rulesetRevert', entries }, + colorize + ); + }; + + let start = function(ev) { + let targetRow = ev.target.parentElement; + let srcHn = targetRow.getAttribute('data-srchn') || ''; + let desHn = targetRow.getAttribute('data-deshn') || ''; + let type = targetRow.getAttribute('data-type') || ''; + if ( srcHn === '' || desHn === '' || type === '' ) { return; } + let tabId = parseInt(targetRow.getAttribute('data-tabid'), 10); + + vAPI.messaging.send( + 'logger-ui.js', + { what: 'getRuleEditorOptions' }, + options => { setup({ tabId, srcHn, desHn, type, options }); } + ); + }; + + let stop = function() { + for ( let { node, type, handler, options } of listeners ) { + node.removeEventListener(type, handler, options); + } + listeners = []; + ruleEditorNode + .querySelector('#matrixReloadButton') + .removeEventListener('click', reload); + removeSelf(ruleEditorNode); + }; + + return { start, stop }; +})(); + +/******************************************************************************/ + +var toJunkyard = function(trs) { + trs.remove(); + var i = trs.length; + while ( i-- ) { + trJunkyard.push(trs.nodeAt(i)); + } +}; + +/******************************************************************************/ + +var clearBuffer = function() { + var tbody = document.querySelector('#content tbody'); + var tr; + while ( tbody.firstChild !== null ) { + tr = tbody.lastElementChild; + trJunkyard.push(tbody.removeChild(tr)); + } + uDom('#clear').addClass('disabled'); + uDom('#clean').addClass('disabled'); +}; + +/******************************************************************************/ + +var cleanBuffer = function() { + var rows = uDom('#content tr.tab:not(.canMtx)').remove(); + var i = rows.length; + while ( i-- ) { + trJunkyard.push(rows.nodeAt(i)); + } + uDom('#clean').addClass('disabled'); +}; + +/******************************************************************************/ + +var toggleCompactView = function() { + document.body.classList.toggle('compactView'); + uDom('#content table .vExpanded').removeClass('vExpanded'); +}; + +var toggleCompactRow = function(ev) { + ev.target.parentElement.classList.toggle('vExpanded'); +}; + +/******************************************************************************/ + +var grabView = function() { + if ( ownerId === undefined ) { + ownerId = Date.now(); + } + readLogBufferAsync(); +}; + +var releaseView = function() { + if ( ownerId === undefined ) { return; } + vAPI.messaging.send( + 'logger-ui.js', + { what: 'releaseView', ownerId: ownerId } + ); + ownerId = undefined; +}; + +window.addEventListener('pagehide', releaseView); +window.addEventListener('pageshow', grabView); +// https://bugzilla.mozilla.org/show_bug.cgi?id=1398625 +window.addEventListener('beforeunload', releaseView); + +/******************************************************************************/ + +readLogBuffer(); + +uDom('#pageSelector').on('change', pageSelectorChanged); +uDom('#reloadTab').on('click', reloadTab); +uDom('#popupPanelButton').on('click', ( ) => popupPanel.toggle()); +uDom('#compactViewToggler').on('click', toggleCompactView); +uDom('#clean').on('click', cleanBuffer); +uDom('#clear').on('click', clearBuffer); +uDom('#maxEntries').on('change', onMaxEntriesChanged); +uDom('#content table').on('click', 'tr > td:nth-of-type(1)', toggleCompactRow); +uDom('#content table').on('click', 'tr[data-srchn][data-deshn][data-type] > td:nth-of-type(3)', ruleEditor.start); + +/******************************************************************************/ + +})(); diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/logger.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/logger.js new file mode 100644 index 0000000..3e86f44 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/logger.js @@ -0,0 +1,90 @@ +/******************************************************************************* + + uMatrix - a browser extension to block requests. + Copyright (C) 2015-present Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uBlock +*/ + +'use strict'; + +/******************************************************************************/ +/******************************************************************************/ + +µMatrix.logger = (function() { + + let LogEntry = function(details) { + this.init(details); + }; + + LogEntry.prototype.init = function(details) { + this.tstamp = Date.now(); + this.details = JSON.stringify(details); + }; + + let buffer = null; + let lastReadTime = 0; + let writePtr = 0; + + // After 60 seconds without being read, a buffer will be considered + // unused, and thus removed from memory. + let logBufferObsoleteAfter = 30 * 1000; + + let janitor = function() { + if ( + buffer !== null && + lastReadTime < (Date.now() - logBufferObsoleteAfter) + ) { + buffer = null; + writePtr = 0; + api.ownerId = undefined; + api.enabled = false; + } + if ( buffer !== null ) { + vAPI.setTimeout(janitor, logBufferObsoleteAfter); + } + }; + + let api = { + enabled: false, + ownerId: undefined, + writeOne: function(details) { + if ( buffer === null ) { return; } + if ( writePtr === buffer.length ) { + buffer.push(new LogEntry(details)); + } else { + buffer[writePtr].init(details); + } + writePtr += 1; + }, + readAll: function(ownerId) { + this.ownerId = ownerId; + this.enabled = true; + if ( buffer === null ) { + buffer = []; + vAPI.setTimeout(janitor, logBufferObsoleteAfter); + } + let out = buffer.slice(0, writePtr); + writePtr = 0; + lastReadTime = Date.now(); + return out; + }, + }; + + return api; +})(); + +/******************************************************************************/ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/main-blocked.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/main-blocked.js new file mode 100644 index 0000000..da4a750 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/main-blocked.js @@ -0,0 +1,177 @@ +/******************************************************************************* + + uMatrix - a browser extension to block requests. + Copyright (C) 2015-present Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uBlock +*/ + +/* global uDom */ + +'use strict'; + +/******************************************************************************/ + +(function() { + +/******************************************************************************/ + +let details = {}; + +(function() { + let matches = /details=([^&]+)/.exec(window.location.search); + if ( matches === null ) { return; } + try { + details = JSON.parse(atob(matches[1])); + } catch(ex) { + } +})(); + +/******************************************************************************/ + +uDom('.what').text(details.url); +// uDom('#why').text(details.why.slice(3)); + +/******************************************************************************/ + +// https://github.com/gorhill/uMatrix/issues/502 +// Code below originally imported from: +// https://github.com/gorhill/uBlock/blob/master/src/js/document-blocked.js + +(function() { + let reURL = /^https?:\/\//; + + let liFromParam = function(name, value) { + if ( value === '' ) { + value = name; + name = ''; + } + let li = document.createElement('li'); + let span = document.createElement('span'); + span.textContent = name; + li.appendChild(span); + if ( name !== '' && value !== '' ) { + li.appendChild(document.createTextNode(' = ')); + } + span = document.createElement('span'); + if ( reURL.test(value) ) { + let a = document.createElement('a'); + a.href = a.textContent = value; + span.appendChild(a); + } else { + span.textContent = value; + } + li.appendChild(span); + return li; + }; + + let safeDecodeURIComponent = function(s) { + try { + s = decodeURIComponent(s); + } catch (ex) { + } + return s; + }; + + let renderParams = function(parentNode, rawURL, depth = 0) { + let a = document.createElement('a'); + a.href = rawURL; + if ( a.search.length === 0 ) { return false; } + + let pos = rawURL.indexOf('?'); + let li = liFromParam( + vAPI.i18n('mainBlockedNoParamsPrompt'), + rawURL.slice(0, pos) + ); + parentNode.appendChild(li); + + let params = a.search.slice(1).split('&'); + for ( var i = 0; i < params.length; i++ ) { + let param = params[i]; + let pos = param.indexOf('='); + if ( pos === -1 ) { + pos = param.length; + } + let name = safeDecodeURIComponent(param.slice(0, pos)); + let value = safeDecodeURIComponent(param.slice(pos + 1)); + li = liFromParam(name, value); + if ( depth < 2 && reURL.test(value) ) { + let ul = document.createElement('ul'); + renderParams(ul, value, depth + 1); + li.appendChild(ul); + } + parentNode.appendChild(li); + } + return true; + }; + + let hasParams = renderParams(uDom.nodeFromId('parsed'), details.url); + if ( hasParams === false ) { return; } + + let theURLNode = document.getElementById('theURL'); + theURLNode.classList.add('hasParams'); + theURLNode.classList.toggle( + 'collapsed', + vAPI.localStorage.getItem('document-blocked-collapse-url') === 'true' + ); + + let toggleCollapse = function() { + vAPI.localStorage.setItem( + 'document-blocked-collapse-url', + theURLNode.classList.toggle('collapsed').toString() + ); + }; + + theURLNode.querySelector('.collapse').addEventListener( + 'click', + toggleCollapse + ); + theURLNode.querySelector('.expand').addEventListener( + 'click', + toggleCollapse + ); +})(); + +/******************************************************************************/ + +if ( window.history.length > 1 ) { + uDom('#back').on('click', function() { window.history.back(); }); + uDom('#bye').css('display', 'none'); +} else { + uDom('#bye').on('click', function() { window.close(); }); + uDom('#back').css('display', 'none'); +} + +/******************************************************************************/ + +// See if the target hostname is still blacklisted, and if not, navigate to it. + +vAPI.messaging.send('main-blocked.js', { + what: 'mustBlock', + scope: details.hn, + hostname: details.hn, + type: details.type +}, response => { + if ( response === false ) { + window.location.replace(details.url); + } +}); + +/******************************************************************************/ + +})(); + +/******************************************************************************/ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/matrix.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/matrix.js new file mode 100644 index 0000000..26311fd --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/matrix.js @@ -0,0 +1,886 @@ +/******************************************************************************* + + uMatrix - a browser extension to black/white list requests. + Copyright (C) 2014-present Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uMatrix +*/ + +/* global punycode */ + +'use strict'; + +/******************************************************************************/ + +µMatrix.Matrix = (function() { + +/******************************************************************************/ + +var µm = µMatrix; +var selfieVersion = 1; + +/******************************************************************************/ + +var Matrix = function() { + this.reset(); + this.sourceRegister = ''; + this.decomposedSourceRegister = ['']; + this.specificityRegister = 0; +}; + +/******************************************************************************/ + +Matrix.Transparent = 0; +Matrix.Red = 1; +Matrix.Green = 2; +Matrix.Gray = 3; + +Matrix.Indirect = 0x00; +Matrix.Direct = 0x80; + +Matrix.RedDirect = Matrix.Red | Matrix.Direct; +Matrix.RedIndirect = Matrix.Red | Matrix.Indirect; +Matrix.GreenDirect = Matrix.Green | Matrix.Direct; +Matrix.GreenIndirect = Matrix.Green | Matrix.Indirect; +Matrix.GrayDirect = Matrix.Gray | Matrix.Direct; +Matrix.GrayIndirect = Matrix.Gray | Matrix.Indirect; + +/******************************************************************************/ + +var typeBitOffsets = new Map([ + [ '*', 0 ], + [ 'doc', 2 ], + [ 'cookie', 4 ], + [ 'css', 6 ], + [ 'image', 8 ], + [ 'media', 10 ], + [ 'script', 12 ], + [ 'xhr', 14 ], + [ 'frame', 16 ], + [ 'other', 18 ] +]); + +var stateToNameMap = new Map([ + [ 1, 'block' ], + [ 2, 'allow' ], + [ 3, 'inherit' ] +]); + +var nameToStateMap = { + 'block': 1, + 'allow': 2, + 'noop': 2, + 'inherit': 3 +}; + +var switchBitOffsets = new Map([ + [ 'matrix-off', 0 ], + [ 'https-strict', 2 ], + /* 4 is now unused, formerly assigned to UA spoofing */ + [ 'referrer-spoof', 6 ], + [ 'noscript-spoof', 8 ], + [ 'no-workers', 10 ] +]); + +var switchStateToNameMap = new Map([ + [ 1, 'true' ], + [ 2, 'false' ] +]); + +var nameToSwitchStateMap = new Map([ + [ 'true', 1 ], + [ 'false', 2 ] +]); + +/******************************************************************************/ + +Matrix.columnHeaderIndices = (function() { + var out = new Map(), + i = 0; + for ( var type of typeBitOffsets.keys() ) { + out.set(type, i++); + } + return out; +})(); + + +Matrix.switchNames = new Set(switchBitOffsets.keys()); + +/******************************************************************************/ + +// For performance purpose, as simple tests as possible +var reHostnameVeryCoarse = /[g-z_-]/; +var reIPv4VeryCoarse = /\.\d+$/; + +// http://tools.ietf.org/html/rfc5952 +// 4.3: "MUST be represented in lowercase" +// Also: http://en.wikipedia.org/wiki/IPv6_address#Literal_IPv6_addresses_in_network_resource_identifiers + +var isIPAddress = function(hostname) { + if ( reHostnameVeryCoarse.test(hostname) ) { + return false; + } + if ( reIPv4VeryCoarse.test(hostname) ) { + return true; + } + return hostname.charAt(0) === '['; +}; + +/******************************************************************************/ + +var punycodeIf = function(hn) { + return reNotASCII.test(hn) ? punycode.toASCII(hn) : hn; +}; + +var unpunycodeIf = function(hn) { + return hn.indexOf('xn--') !== -1 ? punycode.toUnicode(hn) : hn; +}; + +var reNotASCII = /[^\x20-\x7F]/; + +/******************************************************************************/ + +var toBroaderHostname = function(hostname) { + if ( hostname === '*' ) { return ''; } + if ( isIPAddress(hostname) ) { + return toBroaderIPAddress(hostname); + } + var pos = hostname.indexOf('.'); + if ( pos === -1 ) { + return '*'; + } + return hostname.slice(pos + 1); +}; + +var toBroaderIPAddress = function(ipaddress) { + // Can't broaden IPv6 (for now) + if ( ipaddress.charAt(0) === '[' ) { + return '*'; + } + var pos = ipaddress.lastIndexOf('.'); + return pos !== -1 ? ipaddress.slice(0, pos) : '*'; +}; + +Matrix.toBroaderHostname = toBroaderHostname; + +/******************************************************************************/ + +// Find out src-des relationship, using coarse-to-fine grained tests for +// speed. If desHostname is 1st-party to srcHostname, the domain is returned, +// otherwise the empty string. + +var extractFirstPartyDesDomain = function(srcHostname, desHostname) { + if ( srcHostname === '*' || desHostname === '*' || desHostname === '1st-party' ) { + return ''; + } + var µmuri = µm.URI; + var srcDomain = µmuri.domainFromHostname(srcHostname) || srcHostname; + var desDomain = µmuri.domainFromHostname(desHostname) || desHostname; + return desDomain === srcDomain ? desDomain : ''; +}; + +/******************************************************************************/ + +Matrix.prototype.reset = function() { + this.switches = new Map(); + this.rules = new Map(); + this.rootValue = Matrix.RedIndirect; + this.modifiedTime = 0; + if ( this.modifyEventTimer !== undefined ) { + clearTimeout(this.modifyEventTimer); + } + this.modifyEventTimer = undefined; + this.modified(); +}; + +/******************************************************************************/ + +Matrix.prototype.modified = function() { + this.modifiedTime = Date.now(); + if ( this.modifyEventTimer !== undefined ) { return; } + this.modifyEventTimer = vAPI.setTimeout( + ( ) => { + this.modifyEventTimer = undefined; + window.dispatchEvent( + new CustomEvent( + 'matrixRulesetChange', + { detail: this } + ) + ); + }, + 149 + ); +}; + +/******************************************************************************/ + +Matrix.prototype.decomposeSource = function(srcHostname) { + if ( srcHostname === this.sourceRegister ) { return; } + var hn = srcHostname; + this.decomposedSourceRegister[0] = this.sourceRegister = hn; + var i = 1; + for (;;) { + hn = toBroaderHostname(hn); + this.decomposedSourceRegister[i++] = hn; + if ( hn === '' ) { break; } + } +}; + +/******************************************************************************/ + +// Copy another matrix to self. Do this incrementally to minimize impact on +// a live matrix. + +Matrix.prototype.assign = function(other) { + var k, entry; + // Remove rules not in other + for ( k of this.rules.keys() ) { + if ( other.rules.has(k) === false ) { + this.rules.delete(k); + } + } + // Remove switches not in other + for ( k of this.switches.keys() ) { + if ( other.switches.has(k) === false ) { + this.switches.delete(k); + } + } + // Add/change rules in other + for ( entry of other.rules ) { + this.rules.set(entry[0], entry[1]); + } + // Add/change switches in other + for ( entry of other.switches ) { + this.switches.set(entry[0], entry[1]); + } + this.modified(); + return this; +}; + +// https://www.youtube.com/watch?v=e9RS4biqyAc + +/******************************************************************************/ + +// If value is undefined, the switch is removed + +Matrix.prototype.setSwitch = function(switchName, srcHostname, newVal) { + var bitOffset = switchBitOffsets.get(switchName); + if ( bitOffset === undefined ) { + return false; + } + if ( newVal === this.evaluateSwitch(switchName, srcHostname) ) { + return false; + } + var bits = this.switches.get(srcHostname) || 0; + bits &= ~(3 << bitOffset); + bits |= newVal << bitOffset; + if ( bits === 0 ) { + this.switches.delete(srcHostname); + } else { + this.switches.set(srcHostname, bits); + } + this.modified(); + return true; +}; + +/******************************************************************************/ + +Matrix.prototype.setCell = function(srcHostname, desHostname, type, state) { + var bitOffset = typeBitOffsets.get(type), + k = srcHostname + ' ' + desHostname, + oldBitmap = this.rules.get(k); + if ( oldBitmap === undefined ) { + oldBitmap = 0; + } + var newBitmap = oldBitmap & ~(3 << bitOffset) | (state << bitOffset); + if ( newBitmap === oldBitmap ) { + return false; + } + if ( newBitmap === 0 ) { + this.rules.delete(k); + } else { + this.rules.set(k, newBitmap); + } + this.modified(); + return true; +}; + +/******************************************************************************/ + +Matrix.prototype.blacklistCell = function(srcHostname, desHostname, type) { + var r = this.evaluateCellZ(srcHostname, desHostname, type); + if ( r === 1 ) { + return false; + } + this.setCell(srcHostname, desHostname, type, 0); + r = this.evaluateCellZ(srcHostname, desHostname, type); + if ( r === 1 ) { + return true; + } + this.setCell(srcHostname, desHostname, type, 1); + return true; +}; + +/******************************************************************************/ + +Matrix.prototype.whitelistCell = function(srcHostname, desHostname, type) { + var r = this.evaluateCellZ(srcHostname, desHostname, type); + if ( r === 2 ) { + return false; + } + this.setCell(srcHostname, desHostname, type, 0); + r = this.evaluateCellZ(srcHostname, desHostname, type); + if ( r === 2 ) { + return true; + } + this.setCell(srcHostname, desHostname, type, 2); + return true; +}; + +/******************************************************************************/ + +Matrix.prototype.graylistCell = function(srcHostname, desHostname, type) { + var r = this.evaluateCellZ(srcHostname, desHostname, type); + if ( r === 0 || r === 3 ) { + return false; + } + this.setCell(srcHostname, desHostname, type, 0); + r = this.evaluateCellZ(srcHostname, desHostname, type); + if ( r === 0 || r === 3 ) { + return true; + } + this.setCell(srcHostname, desHostname, type, 3); + return true; +}; + +/******************************************************************************/ + +Matrix.prototype.evaluateCell = function(srcHostname, desHostname, type) { + var key = srcHostname + ' ' + desHostname; + var bitmap = this.rules.get(key); + if ( bitmap === undefined ) { + return 0; + } + return bitmap >> typeBitOffsets.get(type) & 3; +}; + +/******************************************************************************/ + +Matrix.prototype.evaluateCellZ = function(srcHostname, desHostname, type) { + this.decomposeSource(srcHostname); + + var bitOffset = typeBitOffsets.get(type), + s, v, i = 0; + for (;;) { + s = this.decomposedSourceRegister[i++]; + if ( s === '' ) { break; } + v = this.rules.get(s + ' ' + desHostname); + if ( v !== undefined ) { + v = v >> bitOffset & 3; + if ( v !== 0 ) { + return v; + } + } + } + // srcHostname is '*' at this point + + // Preset blacklisted hostnames are blacklisted in global scope + if ( type === '*' && µm.ubiquitousBlacklist.test(desHostname) ) { + return 1; + } + + // https://github.com/gorhill/uMatrix/issues/65 + // Hardcoded global `doc` rule + if ( type === 'doc' && desHostname === '*' ) { + return 2; + } + + return 0; +}; + +/******************************************************************************/ + +Matrix.prototype.evaluateCellZXY = function(srcHostname, desHostname, type) { + // Matrix filtering switch + this.specificityRegister = 0; + if ( this.evaluateSwitchZ('matrix-off', srcHostname) ) { + return Matrix.GreenIndirect; + } + + // TODO: There are cells evaluated twice when the type is '*'. Unsure + // whether it's worth trying to avoid that, as this could introduce + // overhead which may not be gained back by skipping the redundant tests. + // And this happens *only* when building the matrix UI, not when + // evaluating net requests. + + // Specific-hostname specific-type cell + this.specificityRegister = 1; + var r = this.evaluateCellZ(srcHostname, desHostname, type); + if ( r === 1 ) { return Matrix.RedDirect; } + if ( r === 2 ) { return Matrix.GreenDirect; } + + // Specific-hostname any-type cell + this.specificityRegister = 2; + var rl = this.evaluateCellZ(srcHostname, desHostname, '*'); + if ( rl === 1 ) { return Matrix.RedIndirect; } + + var d = desHostname; + var firstPartyDesDomain = extractFirstPartyDesDomain(srcHostname, desHostname); + + // Ancestor cells, up to 1st-party destination domain + if ( firstPartyDesDomain !== '' ) { + this.specificityRegister = 3; + for (;;) { + if ( d === firstPartyDesDomain ) { break; } + d = d.slice(d.indexOf('.') + 1); + + // specific-hostname specific-type cell + r = this.evaluateCellZ(srcHostname, d, type); + if ( r === 1 ) { return Matrix.RedIndirect; } + if ( r === 2 ) { return Matrix.GreenIndirect; } + // Do not override a narrower rule + if ( rl !== 2 ) { + rl = this.evaluateCellZ(srcHostname, d, '*'); + if ( rl === 1 ) { return Matrix.RedIndirect; } + } + } + + // 1st-party specific-type cell: it's a special row, looked up only + // when destination is 1st-party to source. + r = this.evaluateCellZ(srcHostname, '1st-party', type); + if ( r === 1 ) { return Matrix.RedIndirect; } + if ( r === 2 ) { return Matrix.GreenIndirect; } + // Do not override narrower rule + if ( rl !== 2 ) { + rl = this.evaluateCellZ(srcHostname, '1st-party', '*'); + if ( rl === 1 ) { return Matrix.RedIndirect; } + } + } + + // Keep going, up to root + this.specificityRegister = 4; + for (;;) { + d = toBroaderHostname(d); + if ( d === '*' ) { break; } + + // specific-hostname specific-type cell + r = this.evaluateCellZ(srcHostname, d, type); + if ( r === 1 ) { return Matrix.RedIndirect; } + if ( r === 2 ) { return Matrix.GreenIndirect; } + // Do not override narrower rule + if ( rl !== 2 ) { + rl = this.evaluateCellZ(srcHostname, d, '*'); + if ( rl === 1 ) { return Matrix.RedIndirect; } + } + } + + // Any-hostname specific-type cells + this.specificityRegister = 5; + r = this.evaluateCellZ(srcHostname, '*', type); + // Line below is strict-blocking + if ( r === 1 ) { return Matrix.RedIndirect; } + // Narrower rule wins + if ( rl === 2 ) { return Matrix.GreenIndirect; } + if ( r === 2 ) { return Matrix.GreenIndirect; } + + // Any-hostname any-type cell + this.specificityRegister = 6; + r = this.evaluateCellZ(srcHostname, '*', '*'); + if ( r === 1 ) { return Matrix.RedIndirect; } + if ( r === 2 ) { return Matrix.GreenIndirect; } + return this.rootValue; +}; + +// https://www.youtube.com/watch?v=4C5ZkwrnVfM + +/******************************************************************************/ + +Matrix.prototype.evaluateRowZXY = function(srcHostname, desHostname) { + let out = []; + for ( let type of typeBitOffsets.keys() ) { + out.push(this.evaluateCellZXY(srcHostname, desHostname, type)); + } + return out; +}; + +/******************************************************************************/ + +Matrix.prototype.mustBlock = function(srcHostname, desHostname, type) { + return (this.evaluateCellZXY(srcHostname, desHostname, type) & 3) === Matrix.Red; +}; + +/******************************************************************************/ + +Matrix.prototype.srcHostnameFromRule = function(rule) { + return rule.slice(0, rule.indexOf(' ')); +}; + +/******************************************************************************/ + +Matrix.prototype.desHostnameFromRule = function(rule) { + return rule.slice(rule.indexOf(' ') + 1); +}; + +/******************************************************************************/ + +Matrix.prototype.setSwitchZ = function(switchName, srcHostname, newState) { + var bitOffset = switchBitOffsets.get(switchName); + if ( bitOffset === undefined ) { + return false; + } + var state = this.evaluateSwitchZ(switchName, srcHostname); + if ( newState === state ) { + return false; + } + if ( newState === undefined ) { + newState = !state; + } + var bits = this.switches.get(srcHostname) || 0; + bits &= ~(3 << bitOffset); + if ( bits === 0 ) { + this.switches.delete(srcHostname); + } else { + this.switches.set(srcHostname, bits); + } + this.modified(); + state = this.evaluateSwitchZ(switchName, srcHostname); + if ( state === newState ) { + return true; + } + this.switches.set(srcHostname, bits | ((newState ? 1 : 2) << bitOffset)); + return true; +}; + +/******************************************************************************/ + +// 0 = inherit from broader scope, up to default state +// 1 = non-default state +// 2 = forced default state (to override a broader non-default state) + +Matrix.prototype.evaluateSwitch = function(switchName, srcHostname) { + var bits = this.switches.get(srcHostname) || 0; + if ( bits === 0 ) { + return 0; + } + var bitOffset = switchBitOffsets.get(switchName); + if ( bitOffset === undefined ) { + return 0; + } + return (bits >> bitOffset) & 3; +}; + +/******************************************************************************/ + +Matrix.prototype.evaluateSwitchZ = function(switchName, srcHostname) { + var bitOffset = switchBitOffsets.get(switchName); + if ( bitOffset === undefined ) { return false; } + + this.decomposeSource(srcHostname); + + var s, bits, i = 0; + for (;;) { + s = this.decomposedSourceRegister[i++]; + if ( s === '' ) { break; } + bits = this.switches.get(s) || 0; + if ( bits !== 0 ) { + bits = bits >> bitOffset & 3; + if ( bits !== 0 ) { + return bits === 1; + } + } + } + return false; +}; + +/******************************************************************************/ + +Matrix.prototype.extractAllSourceHostnames = (function() { + var cachedResult = new Set(); + var matrixId = 0; + var readTime = 0; + + return function() { + if ( matrixId !== this.id || readTime !== this.modifiedTime ) { + cachedResult.clear(); + for ( var rule of this.rules.keys() ) { + cachedResult.add(rule.slice(0, rule.indexOf(' '))); + } + matrixId = this.id; + readTime = this.modifiedTime; + } + return cachedResult; + }; +})(); + +/******************************************************************************/ + +// https://github.com/gorhill/uMatrix/issues/759 +// Backward compatibility: 'plugin' => 'media' + +Matrix.prototype.partsFromLine = function(line) { + let fields = line.split(/\s+/); + if ( fields.length < 3 ) { return; } + + // Switches + if ( this.reSwitchRule.test(fields[0]) ) { + fields[0] = fields[0].slice(0, -1); + if ( switchBitOffsets.has(fields[0]) === false ) { return; } + fields[1] = punycodeIf(fields[1]); + fields[2] = nameToSwitchStateMap.get(fields[2]); + if ( fields[2] === undefined ) { return; } + fields.length = 3; + return fields; + } + + // Rules + if ( fields.length < 4 ) { return; } + fields[0] = punycodeIf(fields[0]); + fields[1] = punycodeIf(fields[1]); + if ( fields[2] === 'plugin' ) { fields[2] = 'media'; } + if ( typeBitOffsets.get(fields[2]) === undefined ) { return; } + if ( nameToStateMap.hasOwnProperty(fields[3]) === false ) { return; } + fields[3] = nameToStateMap[fields[3]]; + fields.length = 4; + return fields; +}; + +Matrix.prototype.reSwitchRule = /^[0-9a-z-]+:$/; + +/******************************************************************************/ + +Matrix.prototype.fromArray = function(lines, append) { + let matrix = append === true ? this : new Matrix(); + for ( let line of lines ) { + matrix.addFromLine(line); + } + if ( append !== true ) { + this.assign(matrix); + } + this.modified(); +}; + +Matrix.prototype.toArray = function() { + let out = []; + for ( let rule of this.rules.keys() ) { + let srcHostname = this.srcHostnameFromRule(rule); + let desHostname = this.desHostnameFromRule(rule); + for ( let type of typeBitOffsets.keys() ) { + let val = this.evaluateCell(srcHostname, desHostname, type); + if ( val === 0 ) { continue; } + out.push( + unpunycodeIf(srcHostname) + ' ' + + unpunycodeIf(desHostname) + ' ' + + type + ' ' + + stateToNameMap.get(val) + ); + } + } + for ( let srcHostname of this.switches.keys() ) { + for ( let switchName of switchBitOffsets.keys() ) { + let val = this.evaluateSwitch(switchName, srcHostname); + if ( val === 0 ) { continue; } + out.push( + switchName + ': ' + + srcHostname + ' ' + + switchStateToNameMap.get(val) + ); + } + } + return out; +}; + +/******************************************************************************/ + +Matrix.prototype.fromString = function(text, append) { + let matrix = append === true ? this : new Matrix(); + let textEnd = text.length; + let lineBeg = 0; + + while ( lineBeg < textEnd ) { + let lineEnd = text.indexOf('\n', lineBeg); + if ( lineEnd === -1 ) { + lineEnd = text.indexOf('\r', lineBeg); + if ( lineEnd === -1 ) { + lineEnd = textEnd; + } + } + let line = text.slice(lineBeg, lineEnd).trim(); + lineBeg = lineEnd + 1; + let pos = line.indexOf('# '); + if ( pos !== -1 ) { + line = line.slice(0, pos).trim(); + } + if ( line === '' ) { continue; } + matrix.addFromLine(line); + } + + if ( append !== true ) { + this.assign(matrix); + } + + this.modified(); +}; + +Matrix.prototype.toString = function() { + return this.toArray().join('\n'); +}; + +/******************************************************************************/ + +Matrix.prototype.addFromLine = function(line) { + let fields = this.partsFromLine(line); + if ( fields !== undefined ) { + // Switches + if ( fields.length === 3 ) { + return this.setSwitch(fields[0], fields[1], fields[2]); + } + // Rules + if ( fields.length === 4 ) { + return this.setCell(fields[0], fields[1], fields[2], fields[3]); + } + } +}; + +Matrix.prototype.removeFromLine = function(line) { + let fields = this.partsFromLine(line); + if ( fields !== undefined ) { + // Switches + if ( fields.length === 3 ) { + return this.setSwitch(fields[0], fields[1], 0); + } + // Rules + if ( fields.length === 4 ) { + return this.setCell(fields[0], fields[1], fields[2], 0); + } + } +}; + +/******************************************************************************/ + +Matrix.prototype.fromSelfie = function(selfie) { + if ( selfie.version !== selfieVersion ) { return false; } + this.switches = new Map(selfie.switches); + this.rules = new Map(selfie.rules); + this.modified(); + return true; +}; + +Matrix.prototype.toSelfie = function() { + return { + version: selfieVersion, + switches: Array.from(this.switches), + rules: Array.from(this.rules) + }; +}; + +/******************************************************************************/ + +Matrix.prototype.diff = function(other, srcHostname, desHostnames) { + var out = []; + var desHostname, type; + var switchName, i, thisVal, otherVal; + for (;;) { + for ( switchName of switchBitOffsets.keys() ) { + thisVal = this.evaluateSwitch(switchName, srcHostname); + otherVal = other.evaluateSwitch(switchName, srcHostname); + if ( thisVal !== otherVal ) { + out.push({ + 'what': switchName, + 'src': srcHostname + }); + } + } + i = desHostnames.length; + while ( i-- ) { + desHostname = desHostnames[i]; + for ( type of typeBitOffsets.keys() ) { + thisVal = this.evaluateCell(srcHostname, desHostname, type); + otherVal = other.evaluateCell(srcHostname, desHostname, type); + if ( thisVal === otherVal ) { continue; } + out.push({ + 'what': 'rule', + 'src': srcHostname, + 'des': desHostname, + 'type': type + }); + } + } + srcHostname = toBroaderHostname(srcHostname); + if ( srcHostname === '' ) { break; } + } + return out; +}; + +/******************************************************************************/ + +Matrix.prototype.applyDiff = function(diff, from) { + var changed = false; + var i = diff.length; + var action, val; + while ( i-- ) { + action = diff[i]; + if ( action.what === 'rule' ) { + val = from.evaluateCell(action.src, action.des, action.type); + changed = this.setCell(action.src, action.des, action.type, val) || changed; + continue; + } + if ( switchBitOffsets.has(action.what) ) { + val = from.evaluateSwitch(action.what, action.src); + changed = this.setSwitch(action.what, action.src, val) || changed; + continue; + } + } + return changed; +}; + +Matrix.prototype.copyRuleset = function(entries, from, deep) { + let changed = false; + for ( let entry of entries ) { + let srcHn = entry.srcHn; + for (;;) { + if ( + entry.switchName !== undefined && + switchBitOffsets.has(entry.switchName) + ) { + let val = from.evaluateSwitch(entry.switchName, srcHn); + if ( this.setSwitch(entry.switchName, srcHn, val) ) { + changed = true; + } + } else if ( entry.desHn && entry.type ) { + let val = from.evaluateCell(srcHn, entry.desHn, entry.type); + if ( this.setCell(srcHn, entry.desHn, entry.type, val) ) { + changed = true; + } + } + if ( !deep ) { break; } + srcHn = toBroaderHostname(srcHn); + if ( srcHn === '' ) { break; } + } + } + return changed; +}; + +/******************************************************************************/ + +return Matrix; + +/******************************************************************************/ + +// https://www.youtube.com/watch?v=wlNrQGmj6oQ + +})(); + +/******************************************************************************/ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/messaging.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/messaging.js new file mode 100644 index 0000000..c8f08d0 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/messaging.js @@ -0,0 +1,1034 @@ +/******************************************************************************* + + uMatrix - a browser extension to black/white list requests. + Copyright (C) 2014-present Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uMatrix +*/ + +/* globals publicSuffixList */ + +'use strict'; + +/******************************************************************************/ +/******************************************************************************/ + +// Default handler + +(function() { + +var µm = µMatrix; + +/******************************************************************************/ + +// Default is for commonly used message. + +function onMessage(request, sender, callback) { + // Async + switch ( request.what ) { + case 'getAssetContent': + µm.assets.get(request.url, { dontCache: true }, callback); + return; + + case 'selectAssets': + µm.selectAssets(request, callback); + return; + + default: + break; + } + + // Sync + var response; + + switch ( request.what ) { + case 'blacklistMatrixCell': + µm.tMatrix.blacklistCell( + request.srcHostname, + request.desHostname, + request.type + ); + break; + + case 'forceReloadTab': + µm.forceReload(request.tabId, request.bypassCache); + break; + + case 'forceUpdateAssets': + µm.scheduleAssetUpdater(0); + µm.assets.updateStart({ delay: 2000 }); + break; + + case 'getCellColors': + let ruleParts = request.ruleParts; + let tColors = []; + let pColors = []; + for ( let i = 0, n = ruleParts.length; i < n; i += 3 ) { + tColors.push(µm.tMatrix.evaluateCellZXY( + ruleParts[i+0], + ruleParts[i+1], + ruleParts[i+2] + )); + pColors.push(µm.pMatrix.evaluateCellZXY( + ruleParts[i+0], + ruleParts[i+1], + ruleParts[i+2] + )); + } + response = { tColors, pColors }; + break; + + case 'getUserSettings': + response = { + userSettings: µm.userSettings, + matrixSwitches: { + 'https-strict': µm.pMatrix.evaluateSwitch('https-strict', '*') === 1, + 'referrer-spoof': µm.pMatrix.evaluateSwitch('referrer-spoof', '*') === 1, + 'noscript-spoof': µm.pMatrix.evaluateSwitch('noscript-spoof', '*') === 1 + } + }; + break; + + case 'gotoExtensionURL': + µm.gotoExtensionURL(request); + break; + + case 'graylistMatrixCell': + µm.tMatrix.graylistCell( + request.srcHostname, + request.desHostname, + request.type + ); + break; + + case 'mustBlock': + response = µm.mustBlock( + request.scope, + request.hostname, + request.type + ); + break; + + case 'rulesetRevert': + µm.tMatrix.copyRuleset(request.entries, µm.pMatrix, true); + break; + + case 'rulesetPersist': + if ( µm.pMatrix.copyRuleset(request.entries, µm.tMatrix, true) ) { + µm.saveMatrix(); + } + break; + + case 'readRawSettings': + response = µm.stringFromRawSettings(); + break; + + case 'reloadHostsFiles': + µm.reloadHostsFiles(); + break; + + case 'reloadRecipeFiles': + µm.loadRecipes(true); + break; + + case 'setMatrixSwitch': + µm.tMatrix.setSwitch(request.switchName, '*', request.state); + if ( µm.pMatrix.setSwitch(request.switchName, '*', request.state) ) { + µm.saveMatrix(); + } + break; + + case 'userSettings': + if ( request.hasOwnProperty('value') === false ) { + request.value = undefined; + } + response = µm.changeUserSettings(request.name, request.value); + break; + + case 'whitelistMatrixCell': + µm.tMatrix.whitelistCell( + request.srcHostname, + request.desHostname, + request.type + ); + break; + + case 'writeRawSettings': + µm.rawSettingsFromString(request.content); + break; + + default: + return vAPI.messaging.UNHANDLED; + } + + callback(response); +} + +/******************************************************************************/ + +vAPI.messaging.setup(onMessage); + +/******************************************************************************/ + +})(); + +/******************************************************************************/ +/******************************************************************************/ + +(function() { + +// popup.js + +var µm = µMatrix; + +/******************************************************************************/ + +// Constructor is faster than object literal + +var RowSnapshot = function(srcHostname, desHostname, desDomain) { + this.domain = desDomain; + this.temporary = µm.tMatrix.evaluateRowZXY(srcHostname, desHostname); + this.permanent = µm.pMatrix.evaluateRowZXY(srcHostname, desHostname); + this.counts = RowSnapshot.counts.slice(); + this.totals = RowSnapshot.counts.slice(); +}; + +RowSnapshot.counts = (function() { + var aa = []; + for ( var i = 0, n = µm.Matrix.columnHeaderIndices.size; i < n; i++ ) { + aa[i] = 0; + } + return aa; +})(); + +/******************************************************************************/ + +var matrixSnapshot = function(pageStore, details) { + let µmuser = µm.userSettings; + let headerIndices = µm.Matrix.columnHeaderIndices; + + let r = { + appVersion: vAPI.app.version, + blockedCount: pageStore.perLoadBlockedRequestCount, + collapseAllDomains: µmuser.popupCollapseAllDomains, + collapseBlacklistedDomains: µmuser.popupCollapseBlacklistedDomains, + diff: [], + domain: pageStore.pageDomain, + has3pReferrer: pageStore.has3pReferrer, + hasMixedContent: pageStore.hasMixedContent, + hasNoscriptTags: pageStore.hasNoscriptTags, + hasWebWorkers: pageStore.hasWebWorkers, + headerIndices: Array.from(headerIndices), + hostname: pageStore.pageHostname, + mtxContentModified: pageStore.mtxContentModifiedTime !== details.mtxContentModifiedTime, + mtxCountModified: pageStore.mtxCountModifiedTime !== details.mtxCountModifiedTime, + mtxContentModifiedTime: pageStore.mtxContentModifiedTime, + mtxCountModifiedTime: pageStore.mtxCountModifiedTime, + pMatrixModified: µm.pMatrix.modifiedTime !== details.pMatrixModifiedTime, + pMatrixModifiedTime: µm.pMatrix.modifiedTime, + pSwitches: {}, + rows: {}, + rowCount: 0, + scope: '*', + tabId: pageStore.tabId, + tMatrixModified: µm.tMatrix.modifiedTime !== details.tMatrixModifiedTime, + tMatrixModifiedTime: µm.tMatrix.modifiedTime, + tSwitches: {}, + url: pageStore.pageUrl, + userSettings: { + colorBlindFriendly: µmuser.colorBlindFriendly, + displayTextSize: µmuser.displayTextSize, + noTooltips: µmuser.noTooltips, + popupScopeLevel: µmuser.popupScopeLevel + } + }; + + if ( + (typeof details.scope === 'string') && + (details.scope === '*' || r.hostname.endsWith(details.scope)) + ) { + r.scope = details.scope; + } else if ( µmuser.popupScopeLevel === 'site' ) { + r.scope = r.hostname; + } else if ( µmuser.popupScopeLevel === 'domain' ) { + r.scope = r.domain; + } + + for ( let switchName of µm.Matrix.switchNames ) { + r.tSwitches[switchName] = µm.tMatrix.evaluateSwitchZ(switchName, r.scope); + r.pSwitches[switchName] = µm.pMatrix.evaluateSwitchZ(switchName, r.scope); + } + + // These rows always exist + r.rows['*'] = new RowSnapshot(r.scope, '*', '*'); + r.rows['1st-party'] = new RowSnapshot(r.scope, '1st-party', '1st-party'); + r.rowCount += 1; + + let µmuri = µm.URI; + let anyIndex = headerIndices.get('*'); + + // Ensure that the current scope is also reported in the matrix. This may + // not be the case for documents which are fetched without going through + // our webRequest listener (ex. `file:`). + if ( pageStore.hostnameTypeCells.has(r.hostname + ' doc') === false ) { + pageStore.hostnameTypeCells.set(r.hostname + ' doc', new Set([ 0 ])); + } + + for ( let entry of pageStore.hostnameTypeCells ) { + let pos = entry[0].indexOf(' '); + let reqHostname = entry[0].slice(0, pos); + let reqType = entry[0].slice(pos + 1); + // rhill 2013-10-23: hostname can be empty if the request is a data url + // https://github.com/gorhill/httpswitchboard/issues/26 + if ( reqHostname === '' ) { + reqHostname = pageStore.pageHostname; + } + let reqDomain = µmuri.domainFromHostname(reqHostname) || reqHostname; + + // We want rows of self and ancestors + let desHostname = reqHostname; + for (;;) { + // If row exists, ancestors exist + if ( r.rows.hasOwnProperty(desHostname) !== false ) { break; } + r.rows[desHostname] = new RowSnapshot(r.scope, desHostname, reqDomain); + r.rowCount += 1; + if ( desHostname === reqDomain ) { break; } + pos = desHostname.indexOf('.'); + if ( pos === -1 ) { break; } + desHostname = desHostname.slice(pos + 1); + } + + let count = entry[1].size; + let typeIndex = headerIndices.get(reqType); + let row = r.rows[reqHostname]; + row.counts[typeIndex] += count; + row.counts[anyIndex] += count; + row = r.rows[reqDomain]; + row.totals[typeIndex] += count; + row.totals[anyIndex] += count; + row = r.rows['*']; + row.totals[typeIndex] += count; + row.totals[anyIndex] += count; + } + + r.diff = µm.tMatrix.diff(µm.pMatrix, r.hostname, Object.keys(r.rows)); + + return r; +}; + +/******************************************************************************/ + +var matrixSnapshotFromTabId = function(details, callback) { + var matrixSnapshotIf = function(tabId, details) { + var pageStore = µm.pageStoreFromTabId(tabId); + if ( pageStore === null ) { + callback('ENOTFOUND'); + return; + } + + // First verify whether we must return data or not. + if ( + µm.tMatrix.modifiedTime === details.tMatrixModifiedTime && + µm.pMatrix.modifiedTime === details.pMatrixModifiedTime && + pageStore.mtxContentModifiedTime === details.mtxContentModifiedTime && + pageStore.mtxCountModifiedTime === details.mtxCountModifiedTime + ) { + callback('ENOCHANGE'); + return ; + } + + callback(matrixSnapshot(pageStore, details)); + }; + + // Specific tab id requested? + if ( details.tabId ) { + matrixSnapshotIf(details.tabId, details); + return; + } + + // Fall back to currently active tab + var onTabReady = function(tab) { + if ( tab instanceof Object === false ) { + callback('ENOTFOUND'); + return; + } + matrixSnapshotIf(tab.id, details); + }; + + vAPI.tabs.get(null, onTabReady); +}; + +/******************************************************************************/ + +var onMessage = function(request, sender, callback) { + // Async + switch ( request.what ) { + case 'fetchRecipes': + µm.recipeManager.fetch( + request.srcHostname, + request.desHostnames, + callback + ); + return; + + case 'matrixSnapshot': + matrixSnapshotFromTabId(request, callback); + return; + + default: + break; + } + + // Sync + var response; + + switch ( request.what ) { + case 'applyRecipe': + µm.recipeManager.apply(request); + break; + + case 'fetchRecipeCommitStatuses': + response = µm.recipeManager.statuses(request); + break; + + case 'toggleMatrixSwitch': + µm.tMatrix.setSwitchZ( + request.switchName, + request.srcHostname, + µm.tMatrix.evaluateSwitchZ(request.switchName, request.srcHostname) === false + ); + break; + + case 'applyDiffToPermanentMatrix': // aka "persist" + if ( µm.pMatrix.applyDiff(request.diff, µm.tMatrix) ) { + µm.saveMatrix(); + } + break; + + case 'applyDiffToTemporaryMatrix': // aka "revert" + µm.tMatrix.applyDiff(request.diff, µm.pMatrix); + break; + + case 'revertTemporaryMatrix': + µm.tMatrix.assign(µm.pMatrix); + break; + + default: + return vAPI.messaging.UNHANDLED; + } + + callback(response); +}; + +vAPI.messaging.listen('popup.js', onMessage); + +})(); + +/******************************************************************************/ +/******************************************************************************/ + +// content scripts + +(function() { + +var µm = µMatrix; + +/******************************************************************************/ + +var foundInlineCode = function(tabId, pageStore, details, type) { + if ( pageStore === null ) { return; } + + let srcHn = pageStore.pageHostname, + µmuri = µm.URI.set(details.documentURI), + desHn = µmuri.hostname, + frameURL = µmuri.normalizedURI(); + + let blocked = details.blocked; + if ( blocked === undefined ) { + blocked = µm.mustBlock(srcHn, desHn, type); + } + + let mapTo = { + css: 'style', + script: 'script' + }; + + // https://github.com/gorhill/httpswitchboard/issues/333 + // Look-up here whether inline scripting is blocked for the frame. + let desURL = frameURL + '{inline_' + mapTo[type] + '}'; + pageStore.recordRequest(type, desURL, blocked); + µm.logger.writeOne({ tabId, srcHn, desHn, desURL, type, blocked }); +}; + +/******************************************************************************/ + +var contentScriptLocalStorageHandler = function(tabId, originURL) { + let tabContext = µm.tabContextManager.lookup(tabId); + if ( tabContext === null ) { return; } + + let srcHn = tabContext.rootHostname, + desHn = µm.URI.hostnameFromURI(originURL), + type = 'cookie', + blocked = µm.mustBlock(srcHn, desHn, type); + + let pageStore = µm.pageStoreFromTabId(tabId); + if ( pageStore !== null ) { + let desURL = originURL + '/{localStorage}'; + pageStore.recordRequest(type, desURL, blocked); + µm.logger.writeOne({ tabId, srcHn, desHn, desURL, type, blocked }); + } + + var removeStorage = blocked && µm.userSettings.deleteLocalStorage; + if ( removeStorage ) { + µm.localStorageRemovedCounter++; + } + + return removeStorage; +}; + +/******************************************************************************/ + +// Evaluate many URLs against the matrix. + +var lookupBlockedCollapsibles = function(tabId, requests) { + if ( placeholdersReadTime < µm.rawSettingsWriteTime ) { + placeholders = undefined; + } + + if ( placeholders === undefined ) { + placeholders = { + frame: µm.rawSettings.framePlaceholder, + image: µm.rawSettings.imagePlaceholder + }; + if ( placeholders.frame ) { + placeholders.frameDocument = + µm.rawSettings.framePlaceholderDocument.replace( + '{{bg}}', + µm.rawSettings.framePlaceholderBackground !== 'default' ? + µm.rawSettings.framePlaceholderBackground : + µm.rawSettings.placeholderBackground + ); + } + if ( placeholders.image ) { + placeholders.imageBorder = + µm.rawSettings.imagePlaceholderBorder !== 'default' ? + µm.rawSettings.imagePlaceholderBorder : + µm.rawSettings.placeholderBorder; + placeholders.imageBackground = + µm.rawSettings.imagePlaceholderBackground !== 'default' ? + µm.rawSettings.imagePlaceholderBackground : + µm.rawSettings.placeholderBackground; + } + placeholdersReadTime = Date.now(); + } + + var response = { + blockedResources: [], + hash: requests.hash, + id: requests.id, + placeholders: placeholders + }; + + var tabContext = µm.tabContextManager.lookup(tabId); + if ( tabContext === null ) { + return response; + } + + var pageStore = µm.pageStoreFromTabId(tabId); + if ( pageStore !== null ) { + pageStore.lookupBlockedCollapsibles(requests, response); + } + + return response; +}; + +var placeholders, + placeholdersReadTime = 0; + +/******************************************************************************/ + +var onMessage = function(request, sender, callback) { + // Async + switch ( request.what ) { + default: + break; + } + + let tabId = sender && sender.tab ? sender.tab.id || 0 : 0, + tabContext = µm.tabContextManager.lookup(tabId), + srcHn = tabContext && tabContext.rootHostname, + pageStore = µm.pageStoreFromTabId(tabId); + + // Sync + let response; + + switch ( request.what ) { + case 'contentScriptHasLocalStorage': + response = contentScriptLocalStorageHandler(tabId, request.originURL); + break; + + case 'lookupBlockedCollapsibles': + response = lookupBlockedCollapsibles(tabId, request); + break; + + case 'mustRenderNoscriptTags?': + if ( tabContext === null ) { break; } + response = + µm.tMatrix.mustBlock(srcHn, srcHn, 'script') && + µm.tMatrix.evaluateSwitchZ('noscript-spoof', srcHn); + if ( pageStore !== null ) { + pageStore.hasNoscriptTags = true; + } + // https://github.com/gorhill/uMatrix/issues/225 + // A good place to force an update of the page title, as at + // this point the DOM has been loaded. + µm.updateTitle(tabId); + break; + + case 'securityPolicyViolation': + if ( request.directive === 'worker-src' ) { + let desURL = request.blockedURI; + let desHn = µm.URI.hostnameFromURI(desURL); + if ( desHn === '' ) { + desURL = request.documentURI; + desHn = µm.URI.hostnameFromURI(desURL); + } + if ( pageStore !== null ) { + pageStore.hasWebWorkers = true; + pageStore.recordRequest('script', desURL, request.blocked); + } + if ( tabContext !== null ) { + µm.logger.writeOne({ + tabId, + srcHn, + desHn, + desURL, + type: 'worker', + blocked: request.blocked + }); + } + } else if ( request.directive === 'script-src' ) { + foundInlineCode(tabId, pageStore, request, 'script'); + } else if ( request.directive === 'style-src' ) { + foundInlineCode(tabId, pageStore, request, 'css'); + } + break; + + case 'shutdown?': + if ( tabContext !== null ) { + response = µm.tMatrix.evaluateSwitchZ('matrix-off', srcHn); + } + break; + + default: + return vAPI.messaging.UNHANDLED; + } + + callback(response); +}; + +vAPI.messaging.listen('contentscript.js', onMessage); + +/******************************************************************************/ + +})(); + +/******************************************************************************/ +/******************************************************************************/ + +// cloud-ui.js + +(function() { + +/******************************************************************************/ + +var µm = µMatrix; + +/******************************************************************************/ + +var onMessage = function(request, sender, callback) { + // Async + switch ( request.what ) { + case 'cloudGetOptions': + vAPI.cloud.getOptions(function(options) { + options.enabled = µm.userSettings.cloudStorageEnabled === true; + callback(options); + }); + return; + + case 'cloudSetOptions': + vAPI.cloud.setOptions(request.options, callback); + return; + + case 'cloudPull': + return vAPI.cloud.pull(request.datakey, callback); + + case 'cloudPush': + return vAPI.cloud.push(request.datakey, request.data, callback); + + default: + break; + } + + // Sync + var response; + + switch ( request.what ) { + // For when cloud storage is disabled. + case 'cloudPull': + // fallthrough + case 'cloudPush': + break; + + default: + return vAPI.messaging.UNHANDLED; + } + + callback(response); +}; + +/******************************************************************************/ + +vAPI.messaging.listen('cloud-ui.js', onMessage); + +})(); + +/******************************************************************************/ +/******************************************************************************/ + +// user-rules.js + +(function() { + +var µm = µMatrix; + +var modifyRuleset = function(details) { + let ruleset = details.permanent ? µm.pMatrix : µm.tMatrix, + modifiedTime = ruleset.modifiedTime; + let toRemove = new Set(details.toRemove.trim().split(/\s*[\n\r]+\s*/)); + for ( let rule of toRemove ) { + ruleset.removeFromLine(rule); + } + let toAdd = new Set(details.toAdd.trim().split(/\s*[\n\r]+\s*/)); + for ( let rule of toAdd ) { + ruleset.addFromLine(rule); + } + if ( details.permanent && ruleset.modifiedTime !== modifiedTime ) { + µm.saveMatrix(); + } +}; + +/******************************************************************************/ + +var onMessage = function(request, sender, callback) { + + // Async + switch ( request.what ) { + default: + break; + } + + // Sync + var response; + + switch ( request.what ) { + case 'modifyRuleset': + modifyRuleset(request); + /* falls through */ + + case 'getRuleset': + response = { + temporaryRules: µm.tMatrix.toArray(), + permanentRules: µm.pMatrix.toArray() + }; + break; + + default: + return vAPI.messaging.UNHANDLED; + } + + callback(response); +}; + +vAPI.messaging.listen('user-rules.js', onMessage); + +})(); + +/******************************************************************************/ +/******************************************************************************/ + +// hosts-files.js + +(function() { + +var µm = µMatrix; + +/******************************************************************************/ + +var getAssets = function(callback) { + var r = { + autoUpdate: µm.userSettings.autoUpdate, + blockedHostnameCount: µm.ubiquitousBlacklist.count, + hosts: null, + recipes: null, + userRecipes: µm.userSettings.userRecipes, + cache: null, + contributor: µm.rawSettings.contributorMode + }; + var onMetadataReady = function(entries) { + r.cache = entries; + callback(r); + }; + var onAvailableRecipeFilesReady = function(collection) { + r.recipes = Array.from(collection); + µm.assets.metadata(onMetadataReady); + }; + var onAvailableHostsFilesReady = function(collection) { + r.hosts = Array.from(collection); + µm.getAvailableRecipeFiles(onAvailableRecipeFilesReady); + }; + µm.getAvailableHostsFiles(onAvailableHostsFilesReady); +}; + +/******************************************************************************/ + +var onMessage = function(request, sender, callback) { + var µm = µMatrix; + + // Async + switch ( request.what ) { + case 'getAssets': + return getAssets(callback); + + default: + break; + } + + // Sync + var response; + + switch ( request.what ) { + case 'purgeCache': + µm.assets.purge(request.assetKey); + µm.assets.remove('compiled/' + request.assetKey); + break; + + case 'purgeAllCaches': + if ( request.hard ) { + µm.assets.remove(/./); + } else { + µm.assets.purge(/./, 'public_suffix_list.dat'); + } + break; + + default: + return vAPI.messaging.UNHANDLED; + } + + callback(response); +}; + +vAPI.messaging.listen('hosts-files.js', onMessage); + +})(); + +/******************************************************************************/ +/******************************************************************************/ + +// about.js + +(function() { + +var µm = µMatrix; + +/******************************************************************************/ + +var restoreUserData = function(userData) { + var countdown = 0; + var onCountdown = function() { + countdown -= 1; + if ( countdown === 0 ) { + vAPI.app.restart(); + } + }; + + var onAllRemoved = function() { + let µm = µMatrix; + countdown += 1; + vAPI.storage.set(userData.settings, onCountdown); + countdown += 1; + let bin = { userMatrix: userData.rules }; + if ( userData.hostsFiles instanceof Object ) { + bin.liveHostsFiles = userData.hostsFiles; + } + vAPI.storage.set(bin, onCountdown); + if ( userData.rawSettings instanceof Object ) { + countdown += 1; + µm.saveRawSettings(userData.rawSettings, onCountdown); + } + }; + + // If we are going to restore all, might as well wipe out clean local + // storage + vAPI.storage.clear(onAllRemoved); +}; + +/******************************************************************************/ + +var resetUserData = function() { + var onAllRemoved = function() { + vAPI.app.restart(); + }; + vAPI.storage.clear(onAllRemoved); +}; + +/******************************************************************************/ + +var onMessage = function(request, sender, callback) { + // Async + switch ( request.what ) { + default: + break; + } + + // Sync + var response; + + switch ( request.what ) { + case 'getAllUserData': + response = { + app: vAPI.app.name, + version: vAPI.app.version, + when: Date.now(), + settings: µm.userSettings, + rules: µm.pMatrix.toArray().sort(), + rawSettings: µm.rawSettings + }; + break; + + case 'getSomeStats': + response = { + version: vAPI.app.version, + storageUsed: µm.storageUsed + }; + break; + + case 'restoreAllUserData': + restoreUserData(request.userData); + break; + + case 'resetAllUserData': + resetUserData(); + break; + + default: + return vAPI.messaging.UNHANDLED; + } + + callback(response); +}; + +vAPI.messaging.listen('about.js', onMessage); + +/******************************************************************************/ +/******************************************************************************/ + +// logger-ui.js + +(function() { + +/******************************************************************************/ + +var µm = µMatrix, + loggerURL = vAPI.getURL('logger-ui.html'); + +/******************************************************************************/ + +var onMessage = function(request, sender, callback) { + // Async + switch ( request.what ) { + default: + break; + } + + // Sync + var response; + + switch ( request.what ) { + case 'getPublicSuffixListData': + response = publicSuffixList.toSelfie(); + break; + + case 'getRuleEditorOptions': + response = { + colorBlindFriendly: µm.userSettings.colorBlindFriendly, + popupScopeLevel: µm.userSettings.popupScopeLevel + }; + break; + + case 'readMany': + if ( + µm.logger.ownerId !== undefined && + request.ownerId !== µm.logger.ownerId + ) { + response = { unavailable: true }; + break; + } + let pageStores; + if ( request.pageStoresToken !== µm.pageStoresToken ) { + pageStores = []; + for ( let entry of µm.pageStores ) { + let tabId = entry[0]; + let pageStore = entry[1]; + if ( pageStore.rawURL.startsWith(loggerURL) ) { continue; } + pageStores.push([ tabId, pageStore.title || pageStore.rawURL ]); + } + } + response = { + colorBlind: false, + entries: µm.logger.readAll(request.ownerId), + maxLoggedRequests: µm.userSettings.maxLoggedRequests, + noTabId: vAPI.noTabId, + pageStores: pageStores, + pageStoresToken: µm.pageStoresToken + }; + break; + + case 'releaseView': + if ( request.ownerId === µm.logger.ownerId ) { + µm.logger.ownerId = undefined; + } + break; + + default: + return vAPI.messaging.UNHANDLED; + } + + callback(response); +}; + +vAPI.messaging.listen('logger-ui.js', onMessage); + +/******************************************************************************/ + +})(); + +/******************************************************************************/ +/******************************************************************************/ + +})(); + +/******************************************************************************/ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/pagestats.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/pagestats.js new file mode 100644 index 0000000..04a777b --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/pagestats.js @@ -0,0 +1,268 @@ +/******************************************************************************* + + uMatrix - a browser extension to black/white list requests. + Copyright (C) 2013-2018 Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uMatrix +*/ + +'use strict'; + +/******************************************************************************/ + +µMatrix.pageStoreFactory = (function() { + +/******************************************************************************/ + +var µm = µMatrix; + +/******************************************************************************/ + +var BlockedCollapsibles = function() { + this.boundPruneAsyncCallback = this.pruneAsyncCallback.bind(this); + this.blocked = new Map(); + this.hash = 0; + this.timer = null; + this.tOrigin = Date.now(); +}; + +BlockedCollapsibles.prototype = { + + shelfLife: 10 * 1000, + + add: function(type, url, isSpecific) { + if ( this.blocked.size === 0 ) { this.pruneAsync(); } + let tStamp = Date.now() - this.tOrigin; + // The following "trick" is to encode the specifity into the lsb of the + // time stamp so as to avoid to have to allocate a memory structure to + // store both time stamp and specificity. + if ( isSpecific ) { + tStamp |= 0x00000001; + } else { + tStamp &= 0xFFFFFFFE; + } + this.blocked.set(type + ' ' + url, tStamp); + this.hash += 1; + }, + + reset: function() { + this.blocked.clear(); + this.hash = 0; + if ( this.timer !== null ) { + clearTimeout(this.timer); + this.timer = null; + } + this.tOrigin = Date.now(); + }, + + pruneAsync: function() { + if ( this.timer === null ) { + this.timer = vAPI.setTimeout( + this.boundPruneAsyncCallback, + this.shelfLife * 2 + ); + } + }, + + pruneAsyncCallback: function() { + this.timer = null; + let tObsolete = Date.now() - this.tOrigin - this.shelfLife; + for ( let entry of this.blocked ) { + if ( entry[1] <= tObsolete ) { + this.blocked.delete(entry[0]); + } + } + if ( this.blocked.size !== 0 ) { + this.pruneAsync(); + } else { + this.tOrigin = Date.now(); + } + } +}; + +/******************************************************************************/ + +// Ref: Given a URL, returns a (somewhat) unique 32-bit value +// Based on: FNV32a +// http://www.isthe.com/chongo/tech/comp/fnv/index.html#FNV-reference-source +// The rest is custom, suited for uMatrix. + +var PageStore = function(tabContext) { + this.hostnameTypeCells = new Map(); + this.domains = new Set(); + this.blockedCollapsibles = new BlockedCollapsibles(); + this.init(tabContext); +}; + +PageStore.prototype = { + + collapsibleTypes: new Set([ 'image' ]), + pageStoreJunkyard: [], + + init: function(tabContext) { + this.tabId = tabContext.tabId; + this.rawURL = tabContext.rawURL; + this.pageUrl = tabContext.normalURL; + this.pageHostname = tabContext.rootHostname; + this.pageDomain = tabContext.rootDomain; + this.title = ''; + this.hostnameTypeCells.clear(); + this.domains.clear(); + this.allHostnamesString = ' '; + this.blockedCollapsibles.reset(); + this.perLoadAllowedRequestCount = 0; + this.perLoadBlockedRequestCount = 0; + this.perLoadBlockedReferrerCount = 0; + this.has3pReferrer = false; + this.hasMixedContent = false; + this.hasNoscriptTags = false; + this.hasWebWorkers = false; + this.incinerationTimer = null; + this.mtxContentModifiedTime = 0; + this.mtxCountModifiedTime = 0; + return this; + }, + + dispose: function() { + this.tabId = ''; + this.rawURL = ''; + this.pageUrl = ''; + this.pageHostname = ''; + this.pageDomain = ''; + this.title = ''; + this.hostnameTypeCells.clear(); + this.domains.clear(); + this.allHostnamesString = ' '; + this.blockedCollapsibles.reset(); + if ( this.incinerationTimer !== null ) { + clearTimeout(this.incinerationTimer); + this.incinerationTimer = null; + } + if ( this.pageStoreJunkyard.length < 8 ) { + this.pageStoreJunkyard.push(this); + } + }, + + cacheBlockedCollapsible: function(type, url, specificity) { + if ( this.collapsibleTypes.has(type) ) { + this.blockedCollapsibles.add( + type, + url, + specificity !== 0 && specificity < 5 + ); + } + }, + + lookupBlockedCollapsibles: function(request, response) { + var tabContext = µm.tabContextManager.lookup(this.tabId); + if ( tabContext === null ) { return; } + + if ( + Array.isArray(request.toFilter) && + request.toFilter.length !== 0 + ) { + let roothn = tabContext.rootHostname, + hnFromURI = µm.URI.hostnameFromURI, + tMatrix = µm.tMatrix; + for ( let entry of request.toFilter ) { + if ( tMatrix.mustBlock(roothn, hnFromURI(entry.url), entry.type) ) { + this.blockedCollapsibles.add( + entry.type, + entry.url, + tMatrix.specificityRegister < 5 + ); + } + } + } + + if ( this.blockedCollapsibles.hash === response.hash ) { return; } + response.hash = this.blockedCollapsibles.hash; + + let collapseBlacklisted = µm.userSettings.collapseBlacklisted, + collapseBlocked = µm.userSettings.collapseBlocked, + blockedResources = response.blockedResources; + + for ( let entry of this.blockedCollapsibles.blocked ) { + blockedResources.push([ + entry[0], + collapseBlocked || collapseBlacklisted && (entry[1] & 1) !== 0 + ]); + } + }, + + recordRequest: function(type, url, block) { + if ( this.tabId <= 0 ) { return; } + + if ( block ) { + this.perLoadBlockedRequestCount++; + } else { + this.perLoadAllowedRequestCount++; + } + + // Store distinct network requests. This is used to: + // - remember which hostname/type were seen + // - count the number of distinct URLs for any given + // hostname-type pair + var hostname = µm.URI.hostnameFromURI(url), + key = hostname + ' ' + type, + uids = this.hostnameTypeCells.get(key); + if ( uids === undefined ) { + this.hostnameTypeCells.set(key, (uids = new Set())); + } else if ( uids.size > 99 ) { + return; + } + var uid = this.uidFromURL(url); + if ( uids.has(uid) ) { return; } + uids.add(uid); + + µm.updateBadgeAsync(this.tabId); + + this.mtxCountModifiedTime = Date.now(); + + if ( this.domains.has(hostname) === false ) { + this.domains.add(hostname); + this.allHostnamesString += hostname + ' '; + this.mtxContentModifiedTime = Date.now(); + } + }, + + uidFromURL: function(uri) { + var hint = 0x811c9dc5, + i = uri.length; + while ( i-- ) { + hint ^= uri.charCodeAt(i) | 0; + hint += (hint<<1) + (hint<<4) + (hint<<7) + (hint<<8) + (hint<<24) | 0; + hint >>>= 0; + } + return hint; + } +}; + +/******************************************************************************/ + +return function pageStoreFactory(tabContext) { + var entry = PageStore.prototype.pageStoreJunkyard.pop(); + if ( entry ) { + return entry.init(tabContext); + } + return new PageStore(tabContext); +}; + +/******************************************************************************/ + +})(); + +/******************************************************************************/ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/popup.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/popup.js new file mode 100644 index 0000000..47acae9 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/popup.js @@ -0,0 +1,1592 @@ +/******************************************************************************* + + uMatrix - a browser extension to black/white list requests. + Copyright (C) 2014-present Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uMatrix +*/ + +/* global punycode, uDom, uMatrixScopeWidget */ +/* jshint esnext: true, bitwise: false */ + +'use strict'; + +/******************************************************************************/ +/******************************************************************************/ + +(function() { + +/******************************************************************************/ +/******************************************************************************/ + +// Stuff which is good to do very early so as to avoid visual glitches. + +(function() { + var paneContentPaddingTop = vAPI.localStorage.getItem('paneContentPaddingTop'), + touchDevice = vAPI.localStorage.getItem('touchDevice'); + + if ( typeof paneContentPaddingTop === 'string' ) { + document.querySelector('.paneContent').style.setProperty( + 'padding-top', + paneContentPaddingTop + ); + } + if ( touchDevice === 'true' ) { + document.body.setAttribute('data-touch', 'true'); + } else { + document.addEventListener('touchstart', function onTouched(ev) { + document.removeEventListener(ev.type, onTouched); + document.body.setAttribute('data-touch', 'true'); + vAPI.localStorage.setItem('touchDevice', 'true'); + resizePopup(); + }); + } +})(); + +var popupWasResized = function() { + document.body.setAttribute('data-resize-popup', ''); +}; + +var resizePopup = (function() { + var timer; + var fix = function() { + timer = undefined; + var doc = document; + // Manually adjust the position of the main matrix according to the + // height of the toolbar/matrix header. + var paddingTop = (doc.querySelector('.paneHead').clientHeight + 2) + 'px', + paneContent = doc.querySelector('.paneContent'); + if ( paddingTop !== paneContent.style.paddingTop ) { + paneContent.style.setProperty('padding-top', paddingTop); + vAPI.localStorage.setItem('paneContentPaddingTop', paddingTop); + } + document.body.classList.toggle( + 'hConstrained', + window.innerWidth < document.body.clientWidth + ); + popupWasResized(); + }; + return function() { + if ( timer !== undefined ) { + clearTimeout(timer); + } + timer = vAPI.setTimeout(fix, 97); + }; +})(); + +/******************************************************************************/ +/******************************************************************************/ + +// Must be consistent with definitions in matrix.js +var Dark = 0x80; +var Red = 1; +var Green = 2; +var DarkRed = Dark | Red; +var DarkGreen = Dark | Green; + +var matrixSnapshot = {}; +var groupsSnapshot = []; +var allHostnamesSnapshot = 'do not leave this initial string empty'; + +var matrixCellHotspots = null; + +var matrixHeaderPrettyNames = { + 'all': '', + 'cookie': '', + 'css': '', + 'image': '', + 'media': '', + 'script': '', + 'xhr': '', + 'frame': '', + 'other': '' +}; + +var firstPartyLabel = ''; +var blacklistedHostnamesLabel = ''; + +var expandosIdGenerator = 1; +var nodeToExpandosMap = (function() { + if ( typeof window.Map === 'function' ) { + return new window.Map(); + } +})(); + +var expandosFromNode = function(node) { + if ( + node instanceof HTMLElement === false && + typeof node.nodeAt === 'function' + ) { + node = node.nodeAt(0); + } + if ( nodeToExpandosMap ) { + var expandosId = node.getAttribute('data-expandos'); + if ( !expandosId ) { + expandosId = '' + (expandosIdGenerator++); + node.setAttribute('data-expandos', expandosId); + } + var expandos = nodeToExpandosMap.get(expandosId); + if ( expandos === undefined ) { + nodeToExpandosMap.set(expandosId, (expandos = Object.create(null))); + } + return expandos; + } + return node; +}; + +/******************************************************************************/ +/******************************************************************************/ + +function getUserSetting(setting) { + return matrixSnapshot.userSettings[setting]; + } + +function setUserSetting(setting, value) { + matrixSnapshot.userSettings[setting] = value; + vAPI.messaging.send('popup.js', { + what: 'userSettings', + name: setting, + value: value + }); +} + +/******************************************************************************/ + +function getUISetting(setting) { + var r = vAPI.localStorage.getItem(setting); + if ( typeof r !== 'string' ) { + return undefined; + } + return JSON.parse(r); +} + +function setUISetting(setting, value) { + vAPI.localStorage.setItem( + setting, + JSON.stringify(value) + ); +} + +/******************************************************************************/ + +function updateMatrixSnapshot() { + matrixSnapshotPoller.pollNow(); +} + +/******************************************************************************/ + +// For display purpose, create four distinct groups of rows: +// 0th: literal "1st-party" row +// 1st: page domain's related +// 2nd: whitelisted +// 3rd: graylisted +// 4th: blacklisted + +function getGroupStats() { + + // Try to not reshuffle groups around while popup is opened if + // no new hostname added. + var latestDomainListSnapshot = Object.keys(matrixSnapshot.rows).sort().join(); + if ( latestDomainListSnapshot === allHostnamesSnapshot ) { + return groupsSnapshot; + } + allHostnamesSnapshot = latestDomainListSnapshot; + + // First, group according to whether at least one node in the domain + // hierarchy is white or blacklisted + var pageDomain = matrixSnapshot.domain; + var rows = matrixSnapshot.rows; + var anyTypeOffset = matrixSnapshot.headerIndices.get('*'); + var hostname, domain; + var row, color, count, groupIndex; + var domainToGroupMap = {}; + + // These have hard-coded position which cannot be overriden + domainToGroupMap['1st-party'] = 0; + domainToGroupMap[pageDomain] = 1; + + // 1st pass: domain wins if it has an explicit rule or a count + for ( hostname in rows ) { + if ( rows.hasOwnProperty(hostname) === false ) { + continue; + } + if ( hostname === '*' || hostname === '1st-party' ) { + continue; + } + domain = rows[hostname].domain; + if ( domain === pageDomain || hostname !== domain ) { + continue; + } + row = rows[domain]; + color = row.temporary[anyTypeOffset]; + if ( color === DarkGreen ) { + domainToGroupMap[domain] = 2; + continue; + } + if ( color === DarkRed ) { + domainToGroupMap[domain] = 4; + continue; + } + count = row.counts[anyTypeOffset]; + if ( count !== 0 ) { + domainToGroupMap[domain] = 3; + continue; + } + } + // 2nd pass: green wins + for ( hostname in rows ) { + if ( rows.hasOwnProperty(hostname) === false ) { + continue; + } + row = rows[hostname]; + domain = row.domain; + if ( domainToGroupMap.hasOwnProperty(domain) ) { + continue; + } + color = row.temporary[anyTypeOffset]; + if ( color === DarkGreen ) { + domainToGroupMap[domain] = 2; + } + } + // 3rd pass: gray with count wins + for ( hostname in rows ) { + if ( rows.hasOwnProperty(hostname) === false ) { + continue; + } + row = rows[hostname]; + domain = row.domain; + if ( domainToGroupMap.hasOwnProperty(domain) ) { + continue; + } + color = row.temporary[anyTypeOffset]; + count = row.counts[anyTypeOffset]; + if ( color !== DarkRed && count !== 0 ) { + domainToGroupMap[domain] = 3; + } + } + // 4th pass: red wins whatever is left + for ( hostname in rows ) { + if ( rows.hasOwnProperty(hostname) === false ) { + continue; + } + row = rows[hostname]; + domain = row.domain; + if ( domainToGroupMap.hasOwnProperty(domain) ) { + continue; + } + color = row.temporary[anyTypeOffset]; + if ( color === DarkRed ) { + domainToGroupMap[domain] = 4; + } + } + // 5th pass: gray wins whatever is left + for ( hostname in rows ) { + if ( rows.hasOwnProperty(hostname) === false ) { + continue; + } + domain = rows[hostname].domain; + if ( domainToGroupMap.hasOwnProperty(domain) ) { + continue; + } + domainToGroupMap[domain] = 3; + } + + // Last pass: put each domain in a group + var groups = [ {}, {}, {}, {}, {} ]; + var group; + for ( hostname in rows ) { + if ( rows.hasOwnProperty(hostname) === false ) { + continue; + } + if ( hostname === '*' ) { + continue; + } + domain = rows[hostname].domain; + groupIndex = domainToGroupMap[domain]; + group = groups[groupIndex]; + if ( group.hasOwnProperty(domain) === false ) { + group[domain] = {}; + } + group[domain][hostname] = true; + } + + groupsSnapshot = groups; + + return groups; +} + +/******************************************************************************/ + +// helpers + +function getTemporaryColor(hostname, type) { + return matrixSnapshot.rows[hostname].temporary[matrixSnapshot.headerIndices.get(type)]; +} + +function getPermanentColor(hostname, type) { + return matrixSnapshot.rows[hostname].permanent[matrixSnapshot.headerIndices.get(type)]; +} + +function addCellClass(cell, hostname, type) { + var cl = cell.classList; + cl.add('matCell'); + cl.add('t' + getTemporaryColor(hostname, type).toString(16)); + cl.add('p' + getPermanentColor(hostname, type).toString(16)); +} + +/******************************************************************************/ + +// This is required for when we update the matrix while it is open: +// the user might have collapsed/expanded one or more domains, and we don't +// want to lose all his hardwork. + +function getCollapseState(domain) { + var states = getUISetting('popupCollapseSpecificDomains'); + if ( typeof states === 'object' && states[domain] !== undefined ) { + return states[domain]; + } + return matrixSnapshot.collapseAllDomains === true; +} + +function toggleCollapseState(elem) { + if ( elem.ancestors('#matHead.collapsible').length > 0 ) { + toggleMainCollapseState(elem); + } else { + toggleSpecificCollapseState(elem); + } + popupWasResized(); +} + +function toggleMainCollapseState(uelem) { + var matHead = uelem.ancestors('#matHead.collapsible').toggleClass('collapsed'); + var collapsed = matrixSnapshot.collapseAllDomains = matHead.hasClass('collapsed'); + uDom('#matList .matSection.collapsible').toggleClass('collapsed', collapsed); + setUserSetting('popupCollapseAllDomains', collapsed); + + var specificCollapseStates = getUISetting('popupCollapseSpecificDomains') || {}; + var domains = Object.keys(specificCollapseStates); + var i = domains.length; + var domain; + while ( i-- ) { + domain = domains[i]; + if ( specificCollapseStates[domain] === collapsed ) { + delete specificCollapseStates[domain]; + } + } + setUISetting('popupCollapseSpecificDomains', specificCollapseStates); +} + +function toggleSpecificCollapseState(uelem) { + // Remember collapse state forever, but only if it is different + // from main collapse switch. + var section = uelem.ancestors('.matSection.collapsible').toggleClass('collapsed'), + domain = expandosFromNode(section).domain, + collapsed = section.hasClass('collapsed'), + mainCollapseState = matrixSnapshot.collapseAllDomains === true, + specificCollapseStates = getUISetting('popupCollapseSpecificDomains') || {}; + if ( collapsed !== mainCollapseState ) { + specificCollapseStates[domain] = collapsed; + setUISetting('popupCollapseSpecificDomains', specificCollapseStates); + } else if ( specificCollapseStates[domain] !== undefined ) { + delete specificCollapseStates[domain]; + setUISetting('popupCollapseSpecificDomains', specificCollapseStates); + } +} + +/******************************************************************************/ + +// Update count value of matrix cells(s) + +function updateMatrixCounts() { + var matCells = uDom('.matrix .matRow.rw > .matCell'), + i = matCells.length, + matRow, matCell, count, counts, + headerIndices = matrixSnapshot.headerIndices, + rows = matrixSnapshot.rows, + expandos; + while ( i-- ) { + matCell = matCells.nodeAt(i); + expandos = expandosFromNode(matCell); + if ( expandos.hostname === '*' || expandos.reqType === '*' ) { + continue; + } + matRow = matCell.parentNode; + counts = matRow.classList.contains('meta') ? 'totals' : 'counts'; + count = rows[expandos.hostname][counts][headerIndices.get(expandos.reqType)]; + if ( count === expandos.count ) { continue; } + expandos.count = count; + matCell.textContent = cellTextFromCount(count); + } +} + +function cellTextFromCount(count) { + if ( count === 0 ) { return '\u00A0'; } + if ( count < 100 ) { return count; } + return '99+'; +} + +/******************************************************************************/ + +// Update color of matrix cells(s) +// Color changes when rules change + +function updateMatrixColors() { + var cells = uDom('.matrix .matRow.rw > .matCell').removeClass(), + i = cells.length, + cell, expandos; + while ( i-- ) { + cell = cells.nodeAt(i); + expandos = expandosFromNode(cell); + addCellClass(cell, expandos.hostname, expandos.reqType); + } + popupWasResized(); +} + +/******************************************************************************/ + +// Update behavior of matrix: +// - Whether a section is collapsible or not. It is collapsible if: +// - It has at least one subdomain AND +// - There is no explicit rule anywhere in the subdomain cells AND +// - It is not part of group 3 (blacklisted hostnames) + +function updateMatrixBehavior() { + matrixList = matrixList || uDom('#matList'); + var sections = matrixList.descendants('.matSection'); + var i = sections.length; + var section, subdomainRows, j, subdomainRow; + while ( i-- ) { + section = sections.at(i); + subdomainRows = section.descendants('.l2:not(.g4)'); + j = subdomainRows.length; + while ( j-- ) { + subdomainRow = subdomainRows.at(j); + subdomainRow.toggleClass('collapsible', subdomainRow.descendants('.t81,.t82').length === 0); + } + section.toggleClass('collapsible', subdomainRows.filter('.collapsible').length > 0); + } +} + +/******************************************************************************/ + +// handle user interaction with filters + +function getCellAction(hostname, type, leaning) { + var temporaryColor = getTemporaryColor(hostname, type); + var hue = temporaryColor & 0x03; + // Special case: root toggle only between two states + if ( type === '*' && hostname === '*' ) { + return hue === Green ? 'blacklistMatrixCell' : 'whitelistMatrixCell'; + } + // When explicitly blocked/allowed, can only graylist + var saturation = temporaryColor & 0x80; + if ( saturation === Dark ) { + return 'graylistMatrixCell'; + } + return leaning === 'whitelisting' ? 'whitelistMatrixCell' : 'blacklistMatrixCell'; +} + +function handleFilter(button, leaning) { + // our parent cell knows who we are + let cell = button.ancestors('div.matCell'), + expandos = expandosFromNode(cell), + type = expandos.reqType, + desHostname = expandos.hostname; + // https://github.com/gorhill/uMatrix/issues/24 + // No hostname can happen -- like with blacklist meta row + if ( desHostname === '' ) { return; } + let request = { + what: getCellAction(desHostname, type, leaning), + srcHostname: matrixSnapshot.scope, + desHostname: desHostname, + type: type + }; + vAPI.messaging.send('default', request, updateMatrixSnapshot); +} + +function handleWhitelistFilter(button) { + handleFilter(button, 'whitelisting'); +} + +function handleBlacklistFilter(button) { + handleFilter(button, 'blacklisting'); +} + +/******************************************************************************/ + +var matrixRowPool = []; +var matrixSectionPool = []; +var matrixGroupPool = []; +var matrixRowTemplate = null; +var matrixList = null; + +var startMatrixUpdate = function() { + matrixList = matrixList || uDom('#matList'); + matrixList.detach(); + var rows = matrixList.descendants('.matRow'); + rows.detach(); + matrixRowPool = matrixRowPool.concat(rows.toArray()); + var sections = matrixList.descendants('.matSection'); + sections.detach(); + matrixSectionPool = matrixSectionPool.concat(sections.toArray()); + var groups = matrixList.descendants('.matGroup'); + groups.detach(); + matrixGroupPool = matrixGroupPool.concat(groups.toArray()); +}; + +var endMatrixUpdate = function() { + // https://github.com/gorhill/httpswitchboard/issues/246 + // If the matrix has no rows, we need to insert a dummy one, invisible, + // to ensure the extension pop-up is properly sized. This is needed because + // the header pane's `position` property is `fixed`, which means it doesn't + // affect layout size, hence the matrix header row will be truncated. + if ( matrixSnapshot.rowCount <= 1 ) { + matrixList.append(createMatrixRow().css('visibility', 'hidden')); + } + updateMatrixBehavior(); + matrixList.css('display', ''); + matrixList.appendTo('.paneContent'); +}; + +var createMatrixGroup = function() { + var group = matrixGroupPool.pop(); + if ( group ) { + return uDom(group).removeClass().addClass('matGroup'); + } + return uDom(document.createElement('div')).addClass('matGroup'); +}; + +var createMatrixSection = function() { + var section = matrixSectionPool.pop(); + if ( section ) { + return uDom(section).removeClass().addClass('matSection'); + } + return uDom(document.createElement('div')).addClass('matSection'); +}; + +var createMatrixRow = function() { + var row = matrixRowPool.pop(); + if ( row ) { + row.style.visibility = ''; + row = uDom(row); + row.descendants('.matCell').removeClass().addClass('matCell'); + row.removeClass().addClass('matRow'); + return row; + } + if ( matrixRowTemplate === null ) { + matrixRowTemplate = uDom('#templates .matRow'); + } + return matrixRowTemplate.clone(); +}; + +/******************************************************************************/ + +function renderMatrixHeaderRow() { + var matHead = uDom('#matHead.collapsible'); + matHead.toggleClass('collapsed', matrixSnapshot.collapseAllDomains === true); + var cells = matHead.descendants('.matCell'), cell, expandos; + cell = cells.nodeAt(0); + expandos = expandosFromNode(cell); + expandos.reqType = '*'; + expandos.hostname = '*'; + addCellClass(cell, '*', '*'); + cell = cells.nodeAt(1); + expandos = expandosFromNode(cell); + expandos.reqType = 'cookie'; + expandos.hostname = '*'; + addCellClass(cell, '*', 'cookie'); + cell = cells.nodeAt(2); + expandos = expandosFromNode(cell); + expandos.reqType = 'css'; + expandos.hostname = '*'; + addCellClass(cell, '*', 'css'); + cell = cells.nodeAt(3); + expandos = expandosFromNode(cell); + expandos.reqType = 'image'; + expandos.hostname = '*'; + addCellClass(cell, '*', 'image'); + cell = cells.nodeAt(4); + expandos = expandosFromNode(cell); + expandos.reqType = 'media'; + expandos.hostname = '*'; + addCellClass(cell, '*', 'media'); + cell = cells.nodeAt(5); + expandos = expandosFromNode(cell); + expandos.reqType = 'script'; + expandos.hostname = '*'; + addCellClass(cell, '*', 'script'); + cell = cells.nodeAt(6); + expandos = expandosFromNode(cell); + expandos.reqType = 'xhr'; + expandos.hostname = '*'; + addCellClass(cell, '*', 'xhr'); + cell = cells.nodeAt(7); + expandos = expandosFromNode(cell); + expandos.reqType = 'frame'; + expandos.hostname = '*'; + addCellClass(cell, '*', 'frame'); + cell = cells.nodeAt(8); + expandos = expandosFromNode(cell); + expandos.reqType = 'other'; + expandos.hostname = '*'; + addCellClass(cell, '*', 'other'); + uDom('#matHead .matRow').css('display', ''); +} + +/******************************************************************************/ + +function renderMatrixCellDomain(cell, domain) { + var expandos = expandosFromNode(cell); + expandos.hostname = domain; + expandos.reqType = '*'; + addCellClass(cell.nodeAt(0), domain, '*'); + var contents = cell.contents(); + contents.nodeAt(0).textContent = domain === '1st-party' ? + firstPartyLabel : + punycode.toUnicode(domain); + contents.nodeAt(1).textContent = ' '; +} + +function renderMatrixCellSubdomain(cell, domain, subomain) { + var expandos = expandosFromNode(cell); + expandos.hostname = subomain; + expandos.reqType = '*'; + addCellClass(cell.nodeAt(0), subomain, '*'); + var contents = cell.contents(); + contents.nodeAt(0).textContent = punycode.toUnicode(subomain.slice(0, subomain.lastIndexOf(domain)-1)) + '.'; + contents.nodeAt(1).textContent = punycode.toUnicode(domain); +} + +function renderMatrixMetaCellDomain(cell, domain) { + var expandos = expandosFromNode(cell); + expandos.hostname = domain; + expandos.reqType = '*'; + addCellClass(cell.nodeAt(0), domain, '*'); + var contents = cell.contents(); + contents.nodeAt(0).textContent = '\u2217.' + punycode.toUnicode(domain); + contents.nodeAt(1).textContent = ' '; +} + +function renderMatrixCellType(cell, hostname, type, count) { + var node = cell.nodeAt(0), + expandos = expandosFromNode(node); + expandos.hostname = hostname; + expandos.reqType = type; + expandos.count = count; + addCellClass(node, hostname, type); + node.textContent = cellTextFromCount(count); +} + +function renderMatrixCellTypes(cells, hostname, countName) { + var counts = matrixSnapshot.rows[hostname][countName]; + var headerIndices = matrixSnapshot.headerIndices; + renderMatrixCellType(cells.at(1), hostname, 'cookie', counts[headerIndices.get('cookie')]); + renderMatrixCellType(cells.at(2), hostname, 'css', counts[headerIndices.get('css')]); + renderMatrixCellType(cells.at(3), hostname, 'image', counts[headerIndices.get('image')]); + renderMatrixCellType(cells.at(4), hostname, 'media', counts[headerIndices.get('media')]); + renderMatrixCellType(cells.at(5), hostname, 'script', counts[headerIndices.get('script')]); + renderMatrixCellType(cells.at(6), hostname, 'xhr', counts[headerIndices.get('xhr')]); + renderMatrixCellType(cells.at(7), hostname, 'frame', counts[headerIndices.get('frame')]); + renderMatrixCellType(cells.at(8), hostname, 'other', counts[headerIndices.get('other')]); +} + +/******************************************************************************/ + +function makeMatrixRowDomain(domain) { + var matrixRow = createMatrixRow().addClass('rw'); + var cells = matrixRow.descendants('.matCell'); + renderMatrixCellDomain(cells.at(0), domain); + renderMatrixCellTypes(cells, domain, 'counts'); + return matrixRow; +} + +function makeMatrixRowSubdomain(domain, subdomain) { + var matrixRow = createMatrixRow().addClass('rw'); + var cells = matrixRow.descendants('.matCell'); + renderMatrixCellSubdomain(cells.at(0), domain, subdomain); + renderMatrixCellTypes(cells, subdomain, 'counts'); + return matrixRow; +} + +function makeMatrixMetaRowDomain(domain) { + var matrixRow = createMatrixRow().addClass('rw'); + var cells = matrixRow.descendants('.matCell'); + renderMatrixMetaCellDomain(cells.at(0), domain); + renderMatrixCellTypes(cells, domain, 'totals'); + return matrixRow; +} + +/******************************************************************************/ + +function renderMatrixMetaCellType(cell, count) { + // https://github.com/gorhill/uMatrix/issues/24 + // Don't forget to reset cell properties + var node = cell.nodeAt(0), + expandos = expandosFromNode(node); + expandos.hostname = ''; + expandos.reqType = ''; + expandos.count = count; + cell.addClass('t1'); + node.textContent = cellTextFromCount(count); +} + +function makeMatrixMetaRow(totals) { + var headerIndices = matrixSnapshot.headerIndices, + matrixRow = createMatrixRow().at(0).addClass('ro'), + cells = matrixRow.descendants('.matCell'), + contents = cells.at(0).addClass('t81').contents(), + expandos = expandosFromNode(cells.nodeAt(0)); + expandos.hostname = ''; + expandos.reqType = '*'; + contents.nodeAt(0).textContent = ' '; + contents.nodeAt(1).textContent = blacklistedHostnamesLabel.replace( + '{{count}}', + totals[headerIndices.get('*')].toLocaleString() + ); + renderMatrixMetaCellType(cells.at(1), totals[headerIndices.get('cookie')]); + renderMatrixMetaCellType(cells.at(2), totals[headerIndices.get('css')]); + renderMatrixMetaCellType(cells.at(3), totals[headerIndices.get('image')]); + renderMatrixMetaCellType(cells.at(4), totals[headerIndices.get('media')]); + renderMatrixMetaCellType(cells.at(5), totals[headerIndices.get('script')]); + renderMatrixMetaCellType(cells.at(6), totals[headerIndices.get('xhr')]); + renderMatrixMetaCellType(cells.at(7), totals[headerIndices.get('frame')]); + renderMatrixMetaCellType(cells.at(8), totals[headerIndices.get('other')]); + return matrixRow; +} + +/******************************************************************************/ + +function computeMatrixGroupMetaStats(group) { + var headerIndices = matrixSnapshot.headerIndices, + anyTypeIndex = headerIndices.get('*'), + n = headerIndices.size, + totals = new Array(n), + i = n; + while ( i-- ) { + totals[i] = 0; + } + var rows = matrixSnapshot.rows, row; + for ( var hostname in rows ) { + if ( rows.hasOwnProperty(hostname) === false ) { + continue; + } + row = rows[hostname]; + if ( group.hasOwnProperty(row.domain) === false ) { + continue; + } + if ( row.counts[anyTypeIndex] === 0 ) { + continue; + } + totals[0] += 1; + for ( i = 1; i < n; i++ ) { + totals[i] += row.counts[i]; + } + } + return totals; +} + +/******************************************************************************/ + +// Compare hostname helper, to order hostname in a logical manner: +// top-most < bottom-most, take into account whether IP address or +// named hostname + +function hostnameCompare(a,b) { + // Normalize: most significant parts first + if ( !a.match(/^\d+(\.\d+){1,3}$/) ) { + var aa = a.split('.'); + a = aa.slice(-2).concat(aa.slice(0,-2).reverse()).join('.'); + } + if ( !b.match(/^\d+(\.\d+){1,3}$/) ) { + var bb = b.split('.'); + b = bb.slice(-2).concat(bb.slice(0,-2).reverse()).join('.'); + } + return a.localeCompare(b); +} + +/******************************************************************************/ + +function makeMatrixGroup0SectionDomain() { + return makeMatrixRowDomain('1st-party').addClass('g0 l1'); +} + +function makeMatrixGroup0Section() { + var domainDiv = createMatrixSection(); + expandosFromNode(domainDiv).domain = '1st-party'; + makeMatrixGroup0SectionDomain().appendTo(domainDiv); + return domainDiv; +} + +function makeMatrixGroup0() { + // Show literal "1st-party" row only if there is + // at least one 1st-party hostname + if ( Object.keys(groupsSnapshot[1]).length === 0 ) { + return; + } + var groupDiv = createMatrixGroup().addClass('g0'); + makeMatrixGroup0Section().appendTo(groupDiv); + groupDiv.appendTo(matrixList); +} + +/******************************************************************************/ + +function makeMatrixGroup1SectionDomain(domain) { + return makeMatrixRowDomain(domain) + .addClass('g1 l1'); +} + +function makeMatrixGroup1SectionSubomain(domain, subdomain) { + return makeMatrixRowSubdomain(domain, subdomain) + .addClass('g1 l2'); +} + +function makeMatrixGroup1SectionMetaDomain(domain) { + return makeMatrixMetaRowDomain(domain).addClass('g1 l1 meta'); +} + +function makeMatrixGroup1Section(hostnames) { + var domain = hostnames[0]; + var domainDiv = createMatrixSection() + .toggleClass('collapsed', getCollapseState(domain)); + expandosFromNode(domainDiv).domain = domain; + if ( hostnames.length > 1 ) { + makeMatrixGroup1SectionMetaDomain(domain) + .appendTo(domainDiv); + } + makeMatrixGroup1SectionDomain(domain) + .appendTo(domainDiv); + for ( var i = 1; i < hostnames.length; i++ ) { + makeMatrixGroup1SectionSubomain(domain, hostnames[i]) + .appendTo(domainDiv); + } + return domainDiv; +} + +function makeMatrixGroup1(group) { + var domains = Object.keys(group).sort(hostnameCompare); + if ( domains.length ) { + var groupDiv = createMatrixGroup().addClass('g1'); + makeMatrixGroup1Section(Object.keys(group[domains[0]]).sort(hostnameCompare)) + .appendTo(groupDiv); + for ( var i = 1; i < domains.length; i++ ) { + makeMatrixGroup1Section(Object.keys(group[domains[i]]).sort(hostnameCompare)) + .appendTo(groupDiv); + } + groupDiv.appendTo(matrixList); + } +} + +/******************************************************************************/ + +function makeMatrixGroup2SectionDomain(domain) { + return makeMatrixRowDomain(domain) + .addClass('g2 l1'); +} + +function makeMatrixGroup2SectionSubomain(domain, subdomain) { + return makeMatrixRowSubdomain(domain, subdomain) + .addClass('g2 l2'); +} + +function makeMatrixGroup2SectionMetaDomain(domain) { + return makeMatrixMetaRowDomain(domain).addClass('g2 l1 meta'); +} + +function makeMatrixGroup2Section(hostnames) { + var domain = hostnames[0]; + var domainDiv = createMatrixSection() + .toggleClass('collapsed', getCollapseState(domain)); + expandosFromNode(domainDiv).domain = domain; + if ( hostnames.length > 1 ) { + makeMatrixGroup2SectionMetaDomain(domain).appendTo(domainDiv); + } + makeMatrixGroup2SectionDomain(domain) + .appendTo(domainDiv); + for ( var i = 1; i < hostnames.length; i++ ) { + makeMatrixGroup2SectionSubomain(domain, hostnames[i]) + .appendTo(domainDiv); + } + return domainDiv; +} + +function makeMatrixGroup2(group) { + var domains = Object.keys(group).sort(hostnameCompare); + if ( domains.length) { + var groupDiv = createMatrixGroup() + .addClass('g2'); + makeMatrixGroup2Section(Object.keys(group[domains[0]]).sort(hostnameCompare)) + .appendTo(groupDiv); + for ( var i = 1; i < domains.length; i++ ) { + makeMatrixGroup2Section(Object.keys(group[domains[i]]).sort(hostnameCompare)) + .appendTo(groupDiv); + } + groupDiv.appendTo(matrixList); + } +} + +/******************************************************************************/ + +function makeMatrixGroup3SectionDomain(domain) { + return makeMatrixRowDomain(domain) + .addClass('g3 l1'); +} + +function makeMatrixGroup3SectionSubomain(domain, subdomain) { + return makeMatrixRowSubdomain(domain, subdomain) + .addClass('g3 l2'); +} + +function makeMatrixGroup3SectionMetaDomain(domain) { + return makeMatrixMetaRowDomain(domain).addClass('g3 l1 meta'); +} + +function makeMatrixGroup3Section(hostnames) { + var domain = hostnames[0]; + var domainDiv = createMatrixSection() + .toggleClass('collapsed', getCollapseState(domain)); + expandosFromNode(domainDiv).domain = domain; + if ( hostnames.length > 1 ) { + makeMatrixGroup3SectionMetaDomain(domain).appendTo(domainDiv); + } + makeMatrixGroup3SectionDomain(domain) + .appendTo(domainDiv); + for ( var i = 1; i < hostnames.length; i++ ) { + makeMatrixGroup3SectionSubomain(domain, hostnames[i]) + .appendTo(domainDiv); + } + return domainDiv; +} + +function makeMatrixGroup3(group) { + var domains = Object.keys(group).sort(hostnameCompare); + if ( domains.length) { + var groupDiv = createMatrixGroup() + .addClass('g3'); + makeMatrixGroup3Section(Object.keys(group[domains[0]]).sort(hostnameCompare)) + .appendTo(groupDiv); + for ( var i = 1; i < domains.length; i++ ) { + makeMatrixGroup3Section(Object.keys(group[domains[i]]).sort(hostnameCompare)) + .appendTo(groupDiv); + } + groupDiv.appendTo(matrixList); + } +} + +/******************************************************************************/ + +function makeMatrixGroup4SectionDomain(domain) { + return makeMatrixRowDomain(domain) + .addClass('g4 l1'); +} + +function makeMatrixGroup4SectionSubomain(domain, subdomain) { + return makeMatrixRowSubdomain(domain, subdomain) + .addClass('g4 l2'); +} + +function makeMatrixGroup4Section(hostnames) { + var domain = hostnames[0]; + var domainDiv = createMatrixSection(); + expandosFromNode(domainDiv).domain = domain; + makeMatrixGroup4SectionDomain(domain) + .appendTo(domainDiv); + for ( var i = 1; i < hostnames.length; i++ ) { + makeMatrixGroup4SectionSubomain(domain, hostnames[i]) + .appendTo(domainDiv); + } + return domainDiv; +} + +function makeMatrixGroup4(group) { + var domains = Object.keys(group).sort(hostnameCompare); + if ( domains.length === 0 ) { + return; + } + var groupDiv = createMatrixGroup().addClass('g4'); + createMatrixSection() + .addClass('g4Meta') + .toggleClass('g4Collapsed', !!matrixSnapshot.collapseBlacklistedDomains) + .appendTo(groupDiv); + makeMatrixMetaRow(computeMatrixGroupMetaStats(group), 'g4') + .appendTo(groupDiv); + makeMatrixGroup4Section(Object.keys(group[domains[0]]).sort(hostnameCompare)) + .appendTo(groupDiv); + for ( var i = 1; i < domains.length; i++ ) { + makeMatrixGroup4Section(Object.keys(group[domains[i]]).sort(hostnameCompare)) + .appendTo(groupDiv); + } + groupDiv.appendTo(matrixList); +} + +/******************************************************************************/ + +var makeMenu = function() { + var groupStats = getGroupStats(); + + if ( Object.keys(groupStats).length === 0 ) { return; } + + // https://github.com/gorhill/httpswitchboard/issues/31 + if ( matrixCellHotspots ) { + matrixCellHotspots.detach(); + } + + renderMatrixHeaderRow(); + + startMatrixUpdate(); + makeMatrixGroup0(groupStats[0]); + makeMatrixGroup1(groupStats[1]); + makeMatrixGroup2(groupStats[2]); + makeMatrixGroup3(groupStats[3]); + makeMatrixGroup4(groupStats[4]); + endMatrixUpdate(); + + uMatrixScopeWidget.init( + matrixSnapshot.domain, + matrixSnapshot.hostname, + matrixSnapshot.scope + ); + updateMatrixButtons(); + resizePopup(); + recipeManager.fetch(); +}; + +/******************************************************************************/ + +// Do all the stuff that needs to be done before building menu et al. + +function initMenuEnvironment() { + document.body.style.setProperty( + 'font-size', + getUserSetting('displayTextSize') + ); + uDom.nodeFromId('version').textContent = matrixSnapshot.appVersion || ''; + document.body.classList.toggle( + 'colorblind', + getUserSetting('colorBlindFriendly') + ); + document.body.classList.toggle( + 'noTooltips', + getUserSetting('noTooltips') + ); + + var prettyNames = matrixHeaderPrettyNames; + var keys = Object.keys(prettyNames); + var i = keys.length; + var cell, key, text; + while ( i-- ) { + key = keys[i]; + cell = uDom('#matHead .matCell[data-req-type="'+ key +'"]'); + text = vAPI.i18n(key + 'PrettyName'); + cell.text(text); + prettyNames[key] = text; + } + + firstPartyLabel = uDom('[data-i18n="matrix1stPartyLabel"]').text(); + blacklistedHostnamesLabel = uDom('[data-i18n="matrixBlacklistedHostnames"]').text(); +} + +/******************************************************************************/ + +function scopeChangeHandler(ev) { + let newScope = ev.detail.scope; + if ( !newScope || matrixSnapshot.scope === newScope ) { return; } + matrixSnapshot.scope = newScope; + matrixSnapshot.tMatrixModifiedTime = undefined; + updateMatrixSnapshot(); + dropDownMenuHide(); +} + +/******************************************************************************/ + +function updateMatrixSwitches() { + var count = 0, + enabled, + switches = matrixSnapshot.tSwitches; + for ( var switchName in switches ) { + if ( switches.hasOwnProperty(switchName) === false ) { continue; } + enabled = switches[switchName]; + if ( enabled && switchName !== 'matrix-off' ) { + count += 1; + } + uDom('#mtxSwitch_' + switchName).toggleClass('switchTrue', enabled); + } + uDom.nodeFromId('mtxSwitch_https-strict').classList.toggle( + 'relevant', + matrixSnapshot.hasMixedContent + ); + uDom.nodeFromId('mtxSwitch_no-workers').classList.toggle( + 'relevant', + matrixSnapshot.hasWebWorkers + ); + uDom.nodeFromId('mtxSwitch_referrer-spoof').classList.toggle( + 'relevant', + matrixSnapshot.has3pReferrer + ); + uDom.nodeFromId('mtxSwitch_noscript-spoof').classList.toggle( + 'relevant', + matrixSnapshot.hasNoscriptTags + ); + uDom.nodeFromSelector('#buttonMtxSwitches .fa-icon-badge').textContent = + count.toLocaleString(); + uDom.nodeFromSelector('#mtxSwitch_matrix-off .fa-icon-badge').textContent = + matrixSnapshot.blockedCount.toLocaleString(); + document.body.classList.toggle('powerOff', switches['matrix-off']); +} + +function toggleMatrixSwitch(ev) { + if ( ev.target.localName === 'a' ) { return; } + var elem = ev.currentTarget; + var pos = elem.id.indexOf('_'); + if ( pos === -1 ) { return; } + var switchName = elem.id.slice(pos + 1); + var request = { + what: 'toggleMatrixSwitch', + switchName: switchName, + srcHostname: matrixSnapshot.scope + }; + vAPI.messaging.send('popup.js', request, updateMatrixSnapshot); +} + +/******************************************************************************/ + +function updatePersistButton() { + var diffCount = matrixSnapshot.diff.length; + var button = uDom('#buttonPersist'); + button.contents() + .filter(function(){return this.nodeType===3;}) + .first() + .text(diffCount > 0 ? '\uf13e' : '\uf023'); + button.descendants('.fa-icon-badge').text(diffCount > 0 ? diffCount : ''); + var disabled = diffCount === 0; + button.toggleClass('disabled', disabled); + uDom('#buttonRevertScope').toggleClass('disabled', disabled); +} + +/******************************************************************************/ + +function persistMatrix() { + var request = { + what: 'applyDiffToPermanentMatrix', + diff: matrixSnapshot.diff + }; + vAPI.messaging.send('popup.js', request, updateMatrixSnapshot); +} + +/******************************************************************************/ + +// rhill 2014-03-12: revert completely ALL changes related to the +// current page, including scopes. + +function revertMatrix() { + var request = { + what: 'applyDiffToTemporaryMatrix', + diff: matrixSnapshot.diff + }; + vAPI.messaging.send('popup.js', request, updateMatrixSnapshot); +} + +/******************************************************************************/ + +// Buttons which are affected by any changes in the matrix + +function updateMatrixButtons() { + uMatrixScopeWidget.update(matrixSnapshot.scope); + updateMatrixSwitches(); + updatePersistButton(); +} + +/******************************************************************************/ + +function buttonReloadHandler(ev) { + vAPI.messaging.send('default', { + what: 'forceReloadTab', + tabId: matrixSnapshot.tabId, + bypassCache: ev.ctrlKey || ev.metaKey || ev.shiftKey + }); +} + +/******************************************************************************/ + +let recipeManager = (function() { + let recipes = []; + let reScopeAlias = /(^|\s+)_(\s+|$)/g; + + function createEntry(name, ruleset, parent) { + let li = document.querySelector('#templates li.recipe') + .cloneNode(true); + li.querySelector('.name').textContent = name; + li.querySelector('.ruleset').textContent = ruleset; + if ( parent ) { + parent.appendChild(li); + } + return li; + } + + function apply(ev) { + if ( + ev.target.classList.contains('expander') || + ev.target.classList.contains('name') + ) { + ev.currentTarget.classList.toggle('expanded'); + return; + } + if ( + ev.target.classList.contains('importer') === false && + ev.target.classList.contains('committer') === false + ) { + return; + } + let root = ev.currentTarget; + let ruleset = root.querySelector('.ruleset'); + let commit = ev.target.classList.contains('committer'); + vAPI.messaging.send( + 'popup.js', + { + what: 'applyRecipe', + ruleset: ruleset.textContent, + commit: commit + }, + updateMatrixSnapshot + ); + root.classList.remove('mustImport'); + if ( commit ) { + root.classList.remove('mustCommit'); + } + //dropDownMenuHide(); + } + + function show(details) { + let root = document.querySelector('#dropDownMenuRecipes .dropdown-menu'); + let ul = document.createElement('ul'); + for ( let recipe of details.recipes ) { + let li = createEntry( + recipe.name, + recipe.ruleset.replace(reScopeAlias, '$1' + details.scope + '$2'), + ul + ); + li.classList.toggle('mustImport', recipe.mustImport === true); + li.classList.toggle('mustCommit', recipe.mustCommit === true); + li.addEventListener('click', apply); + } + root.replaceChild(ul, root.querySelector('ul')); + dropDownMenuShow(uDom.nodeFromId('buttonRecipes')); + } + + function beforeShow() { + if ( recipes.length === 0 ) { return; } + vAPI.messaging.send( + 'popup.js', + { + what: 'fetchRecipeCommitStatuses', + scope: matrixSnapshot.scope, + recipes: recipes + }, + show + ); + } + + function fetch() { + let onResponse = function(response) { + recipes = Array.isArray(response) ? response : []; + let button = uDom.nodeFromId('buttonRecipes'); + if ( recipes.length === 0 ) { + button.classList.add('disabled'); + return; + } + button.classList.remove('disabled'); + button.querySelector('.fa-icon-badge').textContent = recipes.length; + }; + + let desHostnames = []; + for ( let hostname in matrixSnapshot.rows ) { + if ( matrixSnapshot.rows.hasOwnProperty(hostname) === false ) { + continue; + } + let row = matrixSnapshot.rows[hostname]; + if ( row.domain === matrixSnapshot.domain ) { continue; } + if ( row.counts[0] !== 0 || row.domain === hostname ) { + desHostnames.push(hostname); + } + } + + vAPI.messaging.send('popup.js', + { + what: 'fetchRecipes', + srcHostname: matrixSnapshot.hostname, + desHostnames: desHostnames + }, + onResponse + ); + } + + return { + fetch: fetch, + show: beforeShow, + apply: apply + }; +})(); + +/******************************************************************************/ + +function revertAll() { + vAPI.messaging.send( + 'popup.js', + { what: 'revertTemporaryMatrix' }, + updateMatrixSnapshot + ); +} + +/******************************************************************************/ + +function mouseenterMatrixCellHandler(ev) { + matrixCellHotspots.appendTo(ev.target); +} + +function mouseleaveMatrixCellHandler() { + matrixCellHotspots.detach(); +} + +/******************************************************************************/ + +function gotoExtensionURL(ev) { + var url = uDom(ev.currentTarget).attr('data-extension-url'); + if ( url ) { + vAPI.messaging.send('popup.js', { + what: 'gotoExtensionURL', + url: url, + shiftKey: ev.shiftKey + }); + } + dropDownMenuHide(); + vAPI.closePopup(); +} + +/******************************************************************************/ + +function dropDownMenuShow(button) { + var menuOverlay = document.getElementById(button.getAttribute('data-dropdown-menu')); + var butnRect = button.getBoundingClientRect(); + var viewRect = document.body.getBoundingClientRect(); + var butnNormalLeft = butnRect.left / (viewRect.width - butnRect.width); + menuOverlay.classList.add('show'); + var menu = menuOverlay.querySelector('.dropdown-menu'); + var menuRect = menu.getBoundingClientRect(); + var menuLeft = butnNormalLeft * (viewRect.width - menuRect.width); + menu.style.top = butnRect.bottom + 'px'; + if ( menuOverlay.classList.contains('dropdown-menu-centered') === false ) { + menu.style.left = menuLeft.toFixed(0) + 'px'; + } +} + +function dropDownMenuHide() { + uDom('.dropdown-menu-capture').removeClass('show'); +} + +/******************************************************************************/ + +var onMatrixSnapshotReady = function(response) { + if ( response === 'ENOTFOUND' ) { + uDom.nodeFromId('noTabFound').textContent = + vAPI.i18n('matrixNoTabFound'); + document.body.classList.add('noTabFound'); + return; + } + + // Now that tabId and pageURL are set, we can build our menu + initMenuEnvironment(); + makeMenu(); + + // After popup menu is built, check whether there is a non-empty matrix + if ( matrixSnapshot.url === '' ) { + uDom('#matHead').remove(); + uDom('#toolbarContainer').remove(); + + // https://github.com/gorhill/httpswitchboard/issues/191 + uDom('#noNetTrafficPrompt').text(vAPI.i18n('matrixNoNetTrafficPrompt')); + uDom('#noNetTrafficPrompt').css('display', ''); + } + + // Create a hash to find out whether the reload button needs to be + // highlighted. + // TODO: +}; + +/******************************************************************************/ + +const matrixSnapshotPoller = (function() { + let timer; + + const preprocessMatrixSnapshot = function(snapshot) { + if ( Array.isArray(snapshot.headerIndices) ) { + snapshot.headerIndices = new Map(snapshot.headerIndices); + } + return snapshot; + }; + + const processPollResult = function(response) { + if ( typeof response !== 'object' ) { + return; + } + if ( + response.mtxContentModified === false && + response.mtxCountModified === false && + response.pMatrixModified === false && + response.tMatrixModified === false + ) { + return; + } + if ( response instanceof Object ) { + matrixSnapshot = preprocessMatrixSnapshot(response); + } + if ( response.mtxContentModified ) { + makeMenu(); + return; + } + if ( response.mtxCountModified ) { + updateMatrixCounts(); + } + if ( + response.pMatrixModified || + response.tMatrixModified || + response.scopeModified + ) { + updateMatrixColors(); + updateMatrixBehavior(); + updateMatrixButtons(); + } + }; + + const onPolled = function(response) { + processPollResult(response); + pollAsync(); + }; + + const pollNow = function() { + unpollAsync(); + vAPI.messaging.send('popup.js', { + what: 'matrixSnapshot', + tabId: matrixSnapshot.tabId, + scope: matrixSnapshot.scope, + mtxContentModifiedTime: matrixSnapshot.mtxContentModifiedTime, + mtxCountModifiedTime: matrixSnapshot.mtxCountModifiedTime, + mtxDiffCount: matrixSnapshot.diff.length, + pMatrixModifiedTime: matrixSnapshot.pMatrixModifiedTime, + tMatrixModifiedTime: matrixSnapshot.tMatrixModifiedTime, + }, onPolled); + }; + + const pollAsync = function() { + if ( timer !== undefined ) { return; } + if ( document.defaultView === null ) { return; } + timer = vAPI.setTimeout( + ( ) => { + timer = undefined; + pollNow(); + }, + 1414 + ); + }; + + const unpollAsync = function() { + if ( timer !== undefined ) { + clearTimeout(timer); + timer = undefined; + } + }; + + (function() { + let tabId = matrixSnapshot.tabId; + + // If no tab id yet, see if there is one specified in our URL + if ( tabId === undefined ) { + const matches = window.location.search.match(/(?:\?|&)tabId=([^&]+)/); + if ( matches !== null ) { + tabId = parseInt(matches[1], 10); + // No need for logger button when embedded in logger + uDom('[data-extension-url="logger-ui.html"]').remove(); + } + } + + const snapshotFetched = function(response) { + if ( response instanceof Object ) { + matrixSnapshot = preprocessMatrixSnapshot(response); + } + onMatrixSnapshotReady(response); + pollAsync(); + }; + + vAPI.messaging.send('popup.js', { + what: 'matrixSnapshot', + tabId: tabId + }, snapshotFetched); + })(); + + return { + pollNow: pollNow + }; +})(); + +/******************************************************************************/ + +// Below is UI stuff which is not key to make the menu, so this can +// be done without having to wait for a tab to be bound to the menu. + +// We reuse for all cells the one and only cell hotspots. +uDom('#whitelist').on('click', function() { + handleWhitelistFilter(uDom(this)); + return false; + }); +uDom('#blacklist').on('click', function() { + handleBlacklistFilter(uDom(this)); + return false; + }); +uDom('#domainOnly').on('click', function() { + toggleCollapseState(uDom(this)); + return false; + }); +matrixCellHotspots = uDom('#cellHotspots').detach(); +uDom('body') + .on('mouseenter', '.matCell', mouseenterMatrixCellHandler) + .on('mouseleave', '.matCell', mouseleaveMatrixCellHandler); +window.addEventListener('uMatrixScopeWidgetChange', scopeChangeHandler); +uDom('#buttonMtxSwitches').on('click', function(ev) { + dropDownMenuShow(ev.target); +}); +uDom('[id^="mtxSwitch_"]').on('click', toggleMatrixSwitch); +uDom('#buttonPersist').on('click', persistMatrix); +uDom('#buttonRevertScope').on('click', revertMatrix); + +uDom('#buttonRecipes').on('click', function() { + recipeManager.show(); +}); + +uDom('#buttonRevertAll').on('click', revertAll); +uDom('#buttonReload').on('click', buttonReloadHandler); +uDom('.extensionURL').on('click', gotoExtensionURL); +uDom('body').on('click', '.dropdown-menu-capture', dropDownMenuHide); + +uDom('#matList').on('click', '.g4Meta', function(ev) { + matrixSnapshot.collapseBlacklistedDomains = + ev.target.classList.toggle('g4Collapsed'); + setUserSetting( + 'popupCollapseBlacklistedDomains', + matrixSnapshot.collapseBlacklistedDomains + ); +}); + +/******************************************************************************/ + +})(); diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/raw-settings.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/raw-settings.js new file mode 100644 index 0000000..c1fb3f1 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/raw-settings.js @@ -0,0 +1,115 @@ +/******************************************************************************* + + uMatrix - a browser extension to black/white list requests. + Copyright (C) 2018-present Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uBlock +*/ + +/* global uDom */ + +'use strict'; + +/******************************************************************************/ + +(function() { + +/******************************************************************************/ + +var messaging = vAPI.messaging; +var cachedData = ''; +var rawSettingsInput = uDom.nodeFromId('rawSettings'); + +/******************************************************************************/ + +var hashFromRawSettings = function(raw) { + return raw.trim().replace(/\s+/g, '|'); +}; + +/******************************************************************************/ + +// This is to give a visual hint that the content of user blacklist has changed. + +var rawSettingsChanged = (function () { + var timer = null; + + var handler = function() { + timer = null; + var changed = + hashFromRawSettings(rawSettingsInput.value) !== cachedData; + uDom.nodeFromId('rawSettingsApply').disabled = !changed; + }; + + return function() { + if ( timer !== null ) { + clearTimeout(timer); + } + timer = vAPI.setTimeout(handler, 100); + }; +})(); + +/******************************************************************************/ + +function renderRawSettings() { + var onRead = function(raw) { + cachedData = hashFromRawSettings(raw); + var pretty = [], + whitespaces = ' ', + lines = raw.split('\n'), + max = 0, + pos, + i, n = lines.length; + for ( i = 0; i < n; i++ ) { + pos = lines[i].indexOf(' '); + if ( pos > max ) { + max = pos; + } + } + for ( i = 0; i < n; i++ ) { + pos = lines[i].indexOf(' '); + pretty.push(whitespaces.slice(0, max - pos) + lines[i]); + } + rawSettingsInput.value = pretty.join('\n') + '\n'; + rawSettingsChanged(); + rawSettingsInput.focus(); + }; + messaging.send('dashboard', { what: 'readRawSettings' }, onRead); +} + +/******************************************************************************/ + +var applyChanges = function() { + messaging.send( + 'dashboard', + { + what: 'writeRawSettings', + content: rawSettingsInput.value + }, + renderRawSettings + ); +}; + +/******************************************************************************/ + +// Handle user interaction +uDom('#rawSettings').on('input', rawSettingsChanged); +uDom('#rawSettingsApply').on('click', applyChanges); + +renderRawSettings(); + +/******************************************************************************/ + +})(); diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/recipe-manager.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/recipe-manager.js new file mode 100644 index 0000000..568bf5d --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/recipe-manager.js @@ -0,0 +1,272 @@ +/******************************************************************************* + + uMatrix - a Chromium browser extension to black/white list requests. + Copyright (C) 2018 Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uMatrix +*/ + +/* global punycode */ + +'use strict'; + +/******************************************************************************/ + +µMatrix.recipeManager = (function() { + let rawRecipes = []; + let recipeIdGenerator = 1; + let recipeBook = new Map(); + let reNoUnicode = /^[\x00-\x7F]$/; + + const authorFromHeader = function(header) { + let match = /^! +maintainer: +([^\n\r]+)/im.exec(header); + return match !== null ? match[1].trim() : ''; + }; + + const conditionMatch = function(condition, srcHostname, desHostnames) { + let i = condition.indexOf(' '); + if ( i === -1 ) { return false; } + let targetHostname = condition.slice(0, i).trim(); + if ( targetHostname !== '*' ) { + let hn = srcHostname; + if ( targetHostname.endsWith('.*') ) { + let domain = µMatrix.URI.domainFromHostname(hn); + let pos = domain.indexOf('.'); + if ( pos !== -1 ) { + hn = hn.slice(0, pos + hn.length - domain.length) + '.*'; + } + } + if ( hn.endsWith(targetHostname) === false ) { return false; } + let pos = hn.length - targetHostname.length; + if ( pos !== 0 && hn.charAt(pos - 1) !== '.' ) { return false; } + } + targetHostname = condition.slice(i + 1).trim(); + if ( targetHostname === '*' ) { return true; } + for ( let hn of desHostnames ) { + if ( hn === srcHostname ) { continue; } + if ( hn.endsWith(targetHostname) ) { return true; } + } + return false; + }; + + const toASCII = function(rule) { + if ( reNoUnicode.test(rule) ) { return rule; } + let parts = rule.split(/\s+/); + for ( let i = 0; i < parts.length; i++ ) { + parts[i] = punycode.toASCII(parts[i]); + } + return parts.join(' '); + }; + + const compareLength = function(a, b) { + return b.length - a.length; + }; + + const getTokens = function(s) { + let tokens = s.match(/[a-z0-9]+/gi); + if ( tokens === null ) { return []; } + return tokens; + }; + + const addRecipe = function(recipe) { + let tokens = getTokens(recipe.condition); + tokens.sort(compareLength); + let token = tokens[0]; + let recipes = recipeBook.get(token); + if ( recipes === undefined ) { + recipeBook.set(token, recipes = []); + } + recipes.push(recipe); + }; + + const fromString = function(raw) { + const reValidRecipeFile = /^! uMatrix: Ruleset recipes [0-9.]+[\n\r]+/; + const rawHeader = raw.slice(0, 1024); + if ( reValidRecipeFile.test(rawHeader) === false ) { return; } + const reComment = /^[!#]/; + let maintainer = authorFromHeader(rawHeader); + let recipeName, + recipeCondition, + recipeRuleset; + let lineIter = new µMatrix.LineIterator(raw); + for (;;) { + let line = lineIter.next().trim(); + if ( line.length === 0 ) { + if ( + recipeName !== undefined && + recipeCondition !== undefined && + recipeRuleset.length !== 0 + ) { + addRecipe({ + id: recipeIdGenerator++, + name: recipeName, + maintainer: maintainer, + condition: recipeCondition, + ruleset: recipeRuleset + }); + } + recipeName = undefined; + recipeCondition = undefined; + } + if ( lineIter.eot() && recipeName === undefined ) { break; } + if ( line.length === 0 ) { continue; } + let isComment = reComment.test(line); + if ( isComment && recipeCondition === undefined ) { continue; } + if ( recipeName === undefined ) { + recipeName = line; + recipeCondition = undefined; + continue; + } + if ( recipeCondition === undefined ) { + recipeCondition = toASCII(line); + recipeRuleset = ''; + continue; + } + if ( recipeRuleset.length !== 0 ) { + recipeRuleset += '\n'; + } + recipeRuleset += isComment ? line : toASCII(line); + } + }; + + const fromPendingStrings = function() { + if ( rawRecipes.length === 0 ) { return; } + for ( var raw of rawRecipes ) { + fromString(raw); + } + rawRecipes = []; + }; + + // true = blocked, false = not blocked + const evaluateRuleParts = function(matrix, scope, parts) { + if ( parts[0].endsWith(':') ) { + return matrix.evaluateSwitchZ(parts[0].slice(0, -1), scope); + } + return matrix.evaluateCellZXY(scope, parts[1], parts[2]) === 1; + }; + + const api = {}; + + api.apply = function(details) { + const reComment = /^[!#]/; + const µm = µMatrix; + const tMatrix = µm.tMatrix; + const pMatrix = µm.pMatrix; + let mustPersist = false; + for ( const rule of details.ruleset.split('\n') ) { + if ( reComment.test(rule) ) { continue; } + let parts = rule.split(/\s+/); + if ( parts.length < 2 ) { continue; } + let f0 = parts[0]; + let f1 = parts[1]; + // Switch + if ( f0.endsWith(':') ) { + f0 = f0.slice(0, -1); + if ( tMatrix.evaluateSwitchZ(f0, f1) !== false ) { + tMatrix.setSwitchZ(f0, f1, false); + if ( details.commit ) { + pMatrix.setSwitchZ(f0, f1, false); + mustPersist = true; + } + } + continue; + } + // Rule + if ( parts.length < 3 ) { continue; } + let f2 = parts[2]; + let action = tMatrix.evaluateCellZXY(f0, f1, f2); + if ( (action & 3) === 1 ) { + tMatrix.whitelistCell(f0, f1, f2); + } + if ( details.commit !== true ) { continue; } + action = pMatrix.evaluateCellZXY(f0, f1, f2); + if ( (action & 3) === 1 ) { + pMatrix.whitelistCell(f0, f1, f2); + mustPersist = true; + } + } + if ( mustPersist ) { + µm.saveMatrix(); + } + }; + + api.fetch = function(srcHostname, desHostnames, callback) { + fromPendingStrings(); + let out = []; + let fetched = new Set(); + let tokens = getTokens(srcHostname + ' ' + desHostnames.join(' ')); + for ( let token of tokens ) { + let recipes = recipeBook.get(token); + if ( recipes === undefined ) { continue; } + for ( let recipe of recipes ) { + if ( fetched.has(recipe.id) ) { continue; } + if ( + conditionMatch( + recipe.condition, + srcHostname, + desHostnames + ) + ) { + out.push(recipe); + fetched.add(recipe.id); + } + } + } + callback(out); + }; + + api.statuses = function(details) { + let pMatrix = µMatrix.pMatrix, + tMatrix = µMatrix.tMatrix; + let reComment = /^[!#]/; + for ( let recipe of details.recipes ) { + let ruleIter = new µMatrix.LineIterator(recipe.ruleset); + while ( ruleIter.eot() === false ) { + let rule = ruleIter.next(); + if ( reComment.test(rule) ) { continue; } + let parts = rule.split(/\s+/); + if ( + recipe.mustCommit !== true && + evaluateRuleParts(pMatrix, details.scope, parts) + ) { + recipe.mustCommit = true; + if ( recipe.mustImport ) { break; } + } + if ( + recipe.mustImport !== true && + evaluateRuleParts(tMatrix, details.scope, parts) + ) { + recipe.mustImport = true; + if ( recipe.mustCommit ) { break; } + } + } + } + return details; + }; + + api.fromString = function(raw) { + rawRecipes.push(raw); + }; + + api.reset = function() { + rawRecipes.length = 0; + recipeBook.clear(); + }; + + return api; +})(); + +/******************************************************************************/ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/scope-selector.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/scope-selector.js new file mode 100644 index 0000000..0fa53bf --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/scope-selector.js @@ -0,0 +1,152 @@ +/******************************************************************************* + + uMatrix - a browser extension to black/white list requests. + Copyright (C) 2018-present Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uMatrix +*/ + +/* exported uMatrixScopeWidget */ +/* global punycode */ + +'use strict'; + +/******************************************************************************/ +/******************************************************************************/ + +let uMatrixScopeWidget = (function() { + +// Start of private namespace +// >>>>>>>> + +/******************************************************************************/ + +let currentScope = ''; +let listening = false; + +let fireChangeEvent = function() { + document.body.setAttribute('data-scope', currentScope); + let ev = new CustomEvent( + 'uMatrixScopeWidgetChange', + { + detail: { scope: currentScope } + } + ); + window.dispatchEvent(ev); +}; + +let init = function(domain, hostname, scope, container) { + if ( typeof domain !== 'string' ) { return; } + + currentScope = ''; + + // Reset widget + if ( !container ) { + container = document; + } + let specificScope = container.querySelector('#specificScope'); + while ( specificScope.firstChild !== null ) { + specificScope.removeChild(specificScope.firstChild); + } + + // Fill in the scope menu entries + let pos = domain.indexOf('.'); + let tld, labels; + if ( pos === -1 ) { + tld = ''; + labels = hostname; + } else { + tld = domain.slice(pos + 1); + labels = hostname.slice(0, -tld.length); + } + let beg = 0; + while ( beg < labels.length ) { + pos = labels.indexOf('.', beg); + if ( pos === -1 ) { + pos = labels.length; + } else { + pos += 1; + } + let label = document.createElement('span'); + label.appendChild( + document.createTextNode(punycode.toUnicode(labels.slice(beg, pos))) + ); + let span = document.createElement('span'); + span.setAttribute('data-scope', labels.slice(beg) + tld); + span.appendChild(label); + specificScope.appendChild(span); + beg = pos; + } + if ( tld !== '' ) { + let label = document.createElement('span'); + label.appendChild(document.createTextNode(punycode.toUnicode(tld))); + let span = document.createElement('span'); + span.setAttribute('data-scope', tld); + span.appendChild(label); + specificScope.appendChild(span); + } + + if ( listening === false ) { + container.querySelector('#specificScope').addEventListener( + 'click', + ev => { update(ev.target.getAttribute('data-scope')); } + ); + container.querySelector('#globalScope').addEventListener( + 'click', + ( ) => { update('*'); } + ); + listening = true; + } + + update(scope || hostname, container); +}; + +let getScope = function() { + return currentScope; +}; + +let update = function(scope, container) { + if ( scope === currentScope ) { return; } + currentScope = scope; + if ( !container ) { + container = document; + } + let specificScope = container.querySelector('#specificScope'), + isGlobal = scope === '*'; + specificScope.classList.toggle('on', !isGlobal); + container.querySelector('#globalScope').classList.toggle('on', isGlobal); + for ( let node of specificScope.children ) { + node.classList.toggle( + 'on', + !isGlobal && + scope.endsWith(node.getAttribute('data-scope')) + ); + } + fireChangeEvent(); +}; + +return { init, getScope, update }; + +/******************************************************************************/ + +// <<<<<<<< +// End of private namespace + +})(); + +/******************************************************************************/ +/******************************************************************************/ + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/settings.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/settings.js new file mode 100644 index 0000000..26fe414 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/settings.js @@ -0,0 +1,195 @@ +/******************************************************************************* + + uMatrix - a Chromium browser extension to black/white list requests. + Copyright (C) 2014-2018 Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uMatrix +*/ + +/* global uDom */ + +'use strict'; + +/******************************************************************************/ + +(function() { + +/******************************************************************************/ + +var cachedSettings = {}; + +/******************************************************************************/ + +function changeUserSettings(name, value) { + vAPI.messaging.send('settings.js', { + what: 'userSettings', + name: name, + value: value + }); +} + +/******************************************************************************/ + +function changeMatrixSwitch(name, state) { + vAPI.messaging.send('settings.js', { + what: 'setMatrixSwitch', + switchName: name, + state: state + }); +} + +/******************************************************************************/ + +function onChangeValueHandler(elem, setting, min, max) { + var oldVal = cachedSettings.userSettings[setting]; + var newVal = Math.round(parseFloat(elem.value)); + if ( typeof newVal !== 'number' ) { + newVal = oldVal; + } else { + newVal = Math.max(newVal, min); + newVal = Math.min(newVal, max); + } + elem.value = newVal; + if ( newVal !== oldVal ) { + changeUserSettings(setting, newVal); + } +} + +/******************************************************************************/ + +function prepareToDie() { + onChangeValueHandler( + uDom.nodeFromId('deleteUnusedSessionCookiesAfter'), + 'deleteUnusedSessionCookiesAfter', + 15, 1440 + ); + onChangeValueHandler( + uDom.nodeFromId('clearBrowserCacheAfter'), + 'clearBrowserCacheAfter', + 15, 1440 + ); +} + +/******************************************************************************/ + +function onInputChanged(ev) { + var target = ev.target; + + switch ( target.id ) { + case 'displayTextSize': + changeUserSettings('displayTextSize', target.value + 'px'); + break; + case 'clearBrowserCache': + case 'cloudStorageEnabled': + case 'collapseBlacklisted': + case 'collapseBlocked': + case 'colorBlindFriendly': + case 'deleteCookies': + case 'deleteLocalStorage': + case 'deleteUnusedSessionCookies': + case 'iconBadgeEnabled': + case 'noTooltips': + case 'processHyperlinkAuditing': + changeUserSettings(target.id, target.checked); + break; + case 'noMixedContent': + case 'noscriptTagsSpoofed': + case 'processReferer': + changeMatrixSwitch( + target.getAttribute('data-matrix-switch'), + target.checked + ); + break; + case 'deleteUnusedSessionCookiesAfter': + onChangeValueHandler(target, 'deleteUnusedSessionCookiesAfter', 15, 1440); + break; + case 'clearBrowserCacheAfter': + onChangeValueHandler(target, 'clearBrowserCacheAfter', 15, 1440); + break; + case 'popupScopeLevel': + changeUserSettings('popupScopeLevel', target.value); + break; + default: + break; + } + + switch ( target.id ) { + case 'collapseBlocked': + synchronizeWidgets(); + break; + default: + break; + } +} + +/******************************************************************************/ + +function synchronizeWidgets() { + var e1, e2; + + e1 = uDom.nodeFromId('collapseBlocked'); + e2 = uDom.nodeFromId('collapseBlacklisted'); + if ( e1.checked ) { + e2.setAttribute('disabled', ''); + } else { + e2.removeAttribute('disabled'); + } +} + +/******************************************************************************/ + +vAPI.messaging.send( + 'settings.js', + { what: 'getUserSettings' }, + function onSettingsReceived(settings) { + // Cache copy + cachedSettings = settings; + + var userSettings = settings.userSettings; + var matrixSwitches = settings.matrixSwitches; + + uDom('[data-setting-bool]').forEach(function(elem){ + elem.prop('checked', userSettings[elem.prop('id')] === true); + }); + + uDom('[data-matrix-switch]').forEach(function(elem){ + var switchName = elem.attr('data-matrix-switch'); + if ( typeof switchName === 'string' && switchName !== '' ) { + elem.prop('checked', matrixSwitches[switchName] === true); + } + }); + + uDom.nodeFromId('displayTextSize').value = + parseInt(userSettings.displayTextSize, 10) || 14; + + uDom.nodeFromId('popupScopeLevel').value = userSettings.popupScopeLevel; + uDom.nodeFromId('deleteUnusedSessionCookiesAfter').value = + userSettings.deleteUnusedSessionCookiesAfter; + uDom.nodeFromId('clearBrowserCacheAfter').value = + userSettings.clearBrowserCacheAfter; + + synchronizeWidgets(); + + document.addEventListener('change', onInputChanged); + + // https://github.com/gorhill/httpswitchboard/issues/197 + uDom(window).on('beforeunload', prepareToDie); + } +); + +/******************************************************************************/ + +})(); diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/start.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/start.js new file mode 100644 index 0000000..41f0bed --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/start.js @@ -0,0 +1,115 @@ +/******************************************************************************* + + uMatrix - a browser extension to black/white list requests. + Copyright (C) 2014-present Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uMatrix +*/ + +// ORDER IS IMPORTANT + +/******************************************************************************/ + +// Load everything + +(function() { + +'use strict'; + +/******************************************************************************/ + +var µm = µMatrix; + +/******************************************************************************/ + +var processCallbackQueue = function(queue, callback) { + var processOne = function() { + var fn = queue.pop(); + if ( fn ) { + fn(processOne); + } else if ( typeof callback === 'function' ) { + callback(); + } + }; + processOne(); +}; + +/******************************************************************************/ + +var onAllDone = function() { + µm.webRequest.start(); + + µm.loadRecipes(); + + // https://github.com/uBlockOrigin/uMatrix-issues/issues/63 + // Ensure user settings are fully loaded before launching the + // asset updater. + µm.assets.addObserver(µm.assetObserver.bind(µm)); + µm.scheduleAssetUpdater(µm.userSettings.autoUpdate ? 7 * 60 * 1000 : 0); + + vAPI.cloud.start([ 'myRulesPane' ]); +}; + +/******************************************************************************/ + +var onPSLReady = function() { + // TODO: Promisify + let count = 4; + const countdown = ( ) => { + count -= 1; + if ( count !== 0 ) { return; } + onAllDone(); + }; + + µm.loadRawSettings(countdown); + µm.loadMatrix(countdown); + µm.loadHostsFiles(countdown); + + vAPI.tabs.getAll(tabs => { + const pageStore = + µm.pageStoreFactory(µm.tabContextManager.mustLookup(vAPI.noTabId)); + pageStore.title = vAPI.i18n('statsPageDetailedBehindTheScenePage'); + µm.pageStores.set(vAPI.noTabId, pageStore); + + if ( Array.isArray(tabs) ) { + for ( const tab of tabs ) { + µm.tabContextManager.push(tab.id, tab.url, 'newURL'); + } + } + countdown(); + }); +}; + +/******************************************************************************/ + +processCallbackQueue(µm.onBeforeStartQueue, function() { + // TODO: Promisify + let count = 2; + const countdown = ( ) => { + count -= 1; + if ( count !== 0 ) { return; } + onPSLReady(); + }; + + µm.publicSuffixList.load(countdown); + µm.loadUserSettings(countdown); +}); + +/******************************************************************************/ + +})(); + +/******************************************************************************/ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/storage.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/storage.js new file mode 100644 index 0000000..c470639 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/storage.js @@ -0,0 +1,991 @@ +/******************************************************************************* + + uMatrix - a Chromium browser extension to black/white list requests. + Copyright (C) 2014-present Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uMatrix +*/ + +/* global punycode, publicSuffixList */ + +'use strict'; + +/******************************************************************************/ + +µMatrix.getBytesInUse = function() { + var µm = this; + var getBytesInUseHandler = function(bytesInUse) { + µm.storageUsed = bytesInUse; + }; + // Not all WebExtension implementations support getBytesInUse(). + if ( typeof vAPI.storage.getBytesInUse === 'function' ) { + vAPI.storage.getBytesInUse(null, getBytesInUseHandler); + } else { + µm.storageUsed = undefined; + } +}; + +/******************************************************************************/ + +µMatrix.saveUserSettings = function() { + vAPI.storage.set( + this.userSettings, + this.getBytesInUse.bind(this) + ); +}; + +µMatrix.loadUserSettings = function(callback) { + var µm = this; + + if ( typeof callback !== 'function' ) { + callback = this.noopFunc; + } + + var onAvailableRulesetFilesReady = function(availableRulesetFiles) { + let selectedAssetKeys = new Set(); + for ( let entry of availableRulesetFiles ) { + let assetKey = entry[0]; + let assetLang = entry[1].lang; + if ( assetLang === undefined ) { + selectedAssetKeys.add(assetKey); + continue; + } + for ( let lang of navigator.languages ) { + if ( assetLang.indexOf(lang) !== -1 ) { + selectedAssetKeys.add(assetKey); + break; + } + } + } + µm.userSettings.selectedRecipeFiles = Array.from(selectedAssetKeys); + vAPI.storage.set({ + selectedRecipeFiles: µm.userSettings.selectedRecipeFiles + }); + callback(µm.userSettings); + }; + + var initializeSelectedRulesetFiles = function() { + if ( + µm.userSettings.selectedRecipeFiles.length === 1 && + µm.userSettings.selectedRecipeFiles[0] === '' + ) { + µm.getAvailableRecipeFiles(onAvailableRulesetFilesReady); + return; + } + callback(µm.userSettings); + }; + + var onAvailableHostsFilesReady = function(availableHostFiles) { + µm.userSettings.selectedHostsFiles = + Array.from(availableHostFiles.keys()); + vAPI.storage.set({ + selectedHostsFiles: µm.userSettings.selectedHostsFiles + }); + initializeSelectedRulesetFiles(); + }; + + var migrateSelectedHostsFiles = function(bin) { + if ( + bin instanceof Object === false || + bin.liveHostsFiles instanceof Object === false + ) { + µm.getAvailableHostsFiles(onAvailableHostsFilesReady); + return; + } + let selectedHostsFiles = new Set(); + for ( let entry of µm.toMap(bin.liveHostsFiles) ) { + if ( entry[1].off !== true ) { + selectedHostsFiles.add(entry[0]); + } + } + µm.userSettings.selectedHostsFiles = Array.from(selectedHostsFiles); + vAPI.storage.set({ + selectedHostsFiles: µm.userSettings.selectedHostsFiles + }); + initializeSelectedRulesetFiles(); + }; + + var initializeSelectedHostsFiles = function() { + // Backward-compatibility: populate the new list selection array with + // existing data. + if ( + µm.userSettings.selectedHostsFiles.length === 1 && + µm.userSettings.selectedHostsFiles[0] === '' + ) { + vAPI.storage.get('liveHostsFiles', migrateSelectedHostsFiles); + return; + } + initializeSelectedRulesetFiles(); + }; + + var settingsLoaded = function(store) { + µm.userSettings = store; + if ( typeof µm.userSettings.externalHostsFiles === 'string' ) { + µm.userSettings.externalHostsFiles = + µm.userSettings.externalHostsFiles.length !== 0 ? + µm.userSettings.externalHostsFiles.split('\n') : + []; + } + initializeSelectedHostsFiles(); + }; + + vAPI.storage.get(this.userSettings, settingsLoaded); +}; + +/******************************************************************************/ + +µMatrix.loadRawSettings = function(callback) { + if ( typeof callback !== 'function' ) { + callback = this.noopFunc; + } + + const onLoaded = bin => { + if ( + bin instanceof Object === false || + bin.rawSettings instanceof Object === false + ) { + return callback(); + } + for ( const key of Object.keys(bin.rawSettings) ) { + if ( + this.rawSettings.hasOwnProperty(key) === false || + typeof bin.rawSettings[key] !== typeof this.rawSettings[key] + ) { + continue; + } + this.rawSettings[key] = bin.rawSettings[key]; + } + this.rawSettingsWriteTime = Date.now(); + callback(); + }; + + vAPI.storage.get('rawSettings', onLoaded); +}; + +µMatrix.saveRawSettings = function(rawSettings, callback) { + const keys = Object.keys(rawSettings); + if ( keys.length === 0 ) { + if ( typeof callback === 'function' ) { + callback(); + } + return; + } + for ( const key of keys ) { + if ( + this.rawSettingsDefault.hasOwnProperty(key) && + typeof rawSettings[key] === typeof this.rawSettingsDefault[key] + ) { + this.rawSettings[key] = rawSettings[key]; + } + } + vAPI.storage.set({ rawSettings: this.rawSettings }, callback); + this.saveImmediateHiddenSettings(); + this.rawSettingsWriteTime = Date.now(); +}; + +µMatrix.rawSettingsFromString = function(raw) { + var result = {}, + lineIter = new this.LineIterator(raw), + line, matches, name, value; + while ( lineIter.eot() === false ) { + line = lineIter.next().trim(); + matches = /^(\S+)(\s+(.+))?$/.exec(line); + if ( matches === null ) { continue; } + name = matches[1]; + if ( this.rawSettingsDefault.hasOwnProperty(name) === false ) { + continue; + } + value = (matches[2] || '').trim(); + switch ( typeof this.rawSettingsDefault[name] ) { + case 'boolean': + if ( value === 'true' ) { + value = true; + } else if ( value === 'false' ) { + value = false; + } else { + value = this.rawSettingsDefault[name]; + } + break; + case 'string': + if ( value === '' ) { + value = this.rawSettingsDefault[name]; + } + break; + case 'number': + value = parseInt(value, 10); + if ( isNaN(value) ) { + value = this.rawSettingsDefault[name]; + } + break; + default: + break; + } + if ( this.rawSettings[name] !== value ) { + result[name] = value; + } + } + this.saveRawSettings(result); +}; + +µMatrix.stringFromRawSettings = function() { + const out = []; + for ( const key of Object.keys(this.rawSettings).sort() ) { + out.push(key + ' ' + this.rawSettings[key]); + } + return out.join('\n'); +}; + +// These settings must be available immediately on startup, without delay +// through the vAPI.localStorage. Add/remove settings as needed. + +µMatrix.saveImmediateHiddenSettings = function() { + vAPI.localStorage.setItem( + 'immediateRawSettings', + JSON.stringify({ + suspendTabsUntilReady: this.rawSettings.suspendTabsUntilReady, + }) + ); +}; + +/******************************************************************************/ + +µMatrix.saveMatrix = function() { + vAPI.storage.set({ userMatrix: this.pMatrix.toArray() }); +}; + +µMatrix.loadMatrix = function(callback) { + if ( typeof callback !== 'function' ) { + callback = this.noopFunc; + } + const onLoaded = bin => { + if ( bin instanceof Object === false ) { + return callback(); + } + if ( typeof bin.userMatrix === 'string' ) { + this.pMatrix.fromString(bin.userMatrix); + } else if ( Array.isArray(bin.userMatrix) ) { + this.pMatrix.fromArray(bin.userMatrix); + } + this.tMatrix.assign(this.pMatrix); + callback(); + }; + vAPI.storage.get('userMatrix', onLoaded); +}; + +/******************************************************************************/ + +µMatrix.loadRecipes = function(reset, callback) { + if ( typeof callback !== 'function' ) { + callback = this.noopFunc; + } + + let µm = this, + countdownCount = 0; + + if ( reset ) { + µm.recipeManager.reset(); + } + + let recipeMetadata; + + let onDone = function() { + vAPI.messaging.broadcast({ what: 'loadRecipeFilesCompleted' }); + µm.getBytesInUse(); + callback(); + }; + + let onLoaded = function(details) { + if ( details.content ) { + let entry = recipeMetadata.get(details.assetKey); + if ( entry.submitter === 'user' ) { + let match = /^! +Title: *(.+)$/im.exec( + details.content.slice(2048) + ); + if ( match !== null && match[1] !== entry.title ) { + µm.assets.registerAssetSource( + details.assetKey, + { title: match[1] } + ); + } + } + µm.recipeManager.fromString(details.content); + } + countdownCount -= 1; + if ( countdownCount === 0 ) { + onDone(); + } + }; + + let onMetadataReady = function(metadata) { + recipeMetadata = metadata; + for ( let entry of metadata ) { + let assetKey = entry[0]; + let recipeFile = entry[1]; + if ( recipeFile.selected !== true ) { continue; } + µm.assets.get(assetKey, onLoaded); + countdownCount += 1; + } + let userRecipes = µm.userSettings.userRecipes; + if ( userRecipes.enabled ) { + µm.recipeManager.fromString( + '! uMatrix: Ruleset recipes 1.0\n' + userRecipes.content + ); + } + if ( countdownCount === 0 ) { + onDone(); + } + }; + + this.getAvailableRecipeFiles(onMetadataReady); +}; + +/******************************************************************************/ + +µMatrix.assetKeysFromImportedAssets = function(raw) { + var out = new Set(), + reIgnore = /^[!#]/, + reValid = /^[a-z-]+:\/\/\S+\/./, + lineIter = new this.LineIterator(raw); + while ( lineIter.eot() === false ) { + let location = lineIter.next().trim(); + if ( reIgnore.test(location) || !reValid.test(location) ) { continue; } + out.add(location); + } + return out; +}; + +/******************************************************************************/ + +µMatrix.getAvailableHostsFiles = function(callback) { + var µm = this, + availableHostsFiles = new Map(); + + // Custom filter lists. + var importedListKeys = new Set(µm.userSettings.externalHostsFiles); + + for ( let assetKey of importedListKeys ) { + let entry = { + type: 'filters', + contentURL: assetKey, + external: true, + submitter: 'user', + title: assetKey + }; + this.assets.registerAssetSource(assetKey, entry); + availableHostsFiles.set(assetKey, entry); + } + + // Populate available lists with useful data. + var onHostsFilesDataReady = function(bin) { + if ( bin && bin.liveHostsFiles ) { + for ( let entry of µm.toMap(bin.liveHostsFiles) ) { + let assetKey = entry[0]; + let availableAsset = availableHostsFiles.get(assetKey); + if ( availableAsset === undefined ) { continue; } + let liveAsset = entry[1]; + if ( liveAsset.entryCount !== undefined ) { + availableAsset.entryCount = liveAsset.entryCount; + } + if ( liveAsset.entryUsedCount !== undefined ) { + availableAsset.entryUsedCount = liveAsset.entryUsedCount; + } + // This may happen if the list name was pulled from the list content + if ( availableAsset.title === '' && liveAsset.title !== undefined ) { + availableAsset.title = liveAsset.title; + } + } + } + + for ( let asseyKey of µm.userSettings.selectedHostsFiles ) { + let asset = availableHostsFiles.get(asseyKey); + if ( asset !== undefined ) { + asset.selected = true; + } + } + + callback(availableHostsFiles); + }; + + // built-in lists + var onBuiltinHostsFilesLoaded = function(entries) { + for ( let assetKey in entries ) { + if ( entries.hasOwnProperty(assetKey) === false ) { continue; } + let entry = entries[assetKey]; + if ( entry.type !== 'filters' ) { continue; } + if ( + entry.submitter === 'user' && + importedListKeys.has(assetKey) === false + ) { + µm.assets.unregisterAssetSource(assetKey); + µm.assets.remove(assetKey); + continue; + } + availableHostsFiles.set(assetKey, Object.assign({}, entry)); + } + + vAPI.storage.get('liveHostsFiles', onHostsFilesDataReady); + }; + + this.assets.metadata(onBuiltinHostsFilesLoaded); +}; + +/******************************************************************************/ + +µMatrix.getAvailableRecipeFiles = function(callback) { + var µm = this, + availableRecipeFiles = new Map(); + + // Imported recipe resources. + var importedResourceKeys = new Set(µm.userSettings.externalRecipeFiles); + + for ( let assetKey of importedResourceKeys ) { + let entry = { + type: 'recipes', + contentURL: assetKey, + external: true, + submitter: 'user' + }; + this.assets.registerAssetSource(assetKey, entry); + availableRecipeFiles.set(assetKey, entry); + } + + var onBuiltinRecipeFilesLoaded = function(entries) { + for ( let assetKey in entries ) { + if ( entries.hasOwnProperty(assetKey) === false ) { continue; } + let entry = entries[assetKey]; + if ( entry.type !== 'recipes' ) { continue; } + if ( + entry.submitter === 'user' && + importedResourceKeys.has(assetKey) === false + ) { + µm.assets.unregisterAssetSource(assetKey); + µm.assets.remove(assetKey); + continue; + } + availableRecipeFiles.set(assetKey, Object.assign({}, entry)); + } + + for ( let asseyKey of µm.userSettings.selectedRecipeFiles ) { + let asset = availableRecipeFiles.get(asseyKey); + if ( asset !== undefined ) { + asset.selected = true; + } + } + + callback(availableRecipeFiles); + }; + + this.assets.metadata(onBuiltinRecipeFilesLoaded); +}; + +/******************************************************************************/ + +µMatrix.loadHostsFiles = function(callback) { + let hostsFileLoadCount; + + if ( typeof callback !== 'function' ) { + callback = this.noopFunc; + } + + const loadHostsFilesEnd = fromSelfie => { + if ( fromSelfie !== true ) { + this.ubiquitousBlacklist.freeze(); + vAPI.storage.set({ liveHostsFiles: Array.from(this.liveHostsFiles) }); + this.hostsFilesSelfie.create(); + } + vAPI.messaging.broadcast({ what: 'loadHostsFilesCompleted' }); + this.getBytesInUse(); + callback(); + }; + + const mergeHostsFile = details => { + this.mergeHostsFile(details); + hostsFileLoadCount -= 1; + if ( hostsFileLoadCount === 0 ) { + loadHostsFilesEnd(); + } + }; + + const loadHostsFilesStart = hostsFiles => { + this.liveHostsFiles = hostsFiles; + this.ubiquitousBlacklist.reset(); + hostsFileLoadCount = this.userSettings.selectedHostsFiles.length; + + // Load all hosts file which are not disabled. + for ( const assetKey of this.userSettings.selectedHostsFiles ) { + this.assets.get(assetKey, mergeHostsFile); + } + + // https://github.com/gorhill/uMatrix/issues/2 + if ( hostsFileLoadCount === 0 ) { + loadHostsFilesEnd(); + return; + } + }; + + const onSelfieReady = status => { + if ( status === true ) { + return loadHostsFilesEnd(true); + } + this.getAvailableHostsFiles(loadHostsFilesStart); + }; + + this.hostsFilesSelfie.load(onSelfieReady); +}; + +/******************************************************************************/ + +µMatrix.mergeHostsFile = function(details) { + var usedCount = this.ubiquitousBlacklist.count; + var duplicateCount = this.ubiquitousBlacklist.duplicateCount; + + // https://www.reddit.com/r/uMatrix/comments/ftebgz/ + // Be ready to deal with a removed asset. + + if ( typeof details.content === 'string' && details.content !== '' ) { + this.mergeHostsFileContent(details.content); + } + + usedCount = this.ubiquitousBlacklist.count - usedCount; + duplicateCount = this.ubiquitousBlacklist.duplicateCount - duplicateCount; + + const hostsFileMeta = this.liveHostsFiles.get(details.assetKey); + if ( hostsFileMeta === undefined ) { + this.liveHostsFiles.delete(details.assetKey); + return; + } + + hostsFileMeta.entryCount = usedCount + duplicateCount; + hostsFileMeta.entryUsedCount = usedCount; +}; + +/******************************************************************************/ + +µMatrix.mergeHostsFileContent = function(rawText) { + var rawEnd = rawText.length; + var ubiquitousBlacklist = this.ubiquitousBlacklist; + var reLocalhost = new RegExp( + [ + '(?:^|\\s+)(?:', + [ + 'localhost\\.localdomain', + 'ip6-allrouters', + 'broadcasthost', + 'ip6-localhost', + 'ip6-allnodes', + 'ip6-loopback', + 'localhost', + 'local', + '255\\.255\\.255\\.255', + '127\\.0\\.0\\.1', + '0\\.0\\.0\\.0', + 'fe80::1%lo0', + 'ff02::1', + 'ff02::2', + '::1' + ].join('|'), + ')(?=\\s+|$)' + ].join(''), + 'g' + ); + var reAsciiSegment = /^[\x21-\x7e]+$/; + var lineBeg = 0, lineEnd; + + while ( lineBeg < rawEnd ) { + lineEnd = rawText.indexOf('\n', lineBeg); + if ( lineEnd < 0 ) { + lineEnd = rawText.indexOf('\r', lineBeg); + if ( lineEnd < 0 ) { + lineEnd = rawEnd; + } + } + + // rhill 2014-04-18: The trim is important here, as without it there + // could be a lingering `\r` which would cause problems in the + // following parsing code. + let line = rawText.slice(lineBeg, lineEnd).trim(); + lineBeg = lineEnd + 1; + + // https://github.com/gorhill/httpswitchboard/issues/15 + // Ensure localhost et al. don't end up in the ubiquitous blacklist. + line = line + .replace(/#.*$/, '') + .toLowerCase() + .replace(reLocalhost, '') + .trim(); + + // The filter is whatever sequence of printable ascii character without + // whitespaces + let matches = reAsciiSegment.exec(line); + if ( matches === null ) { continue; } + + // Bypass anomalies + // For example, when a filter contains whitespace characters, or + // whatever else outside the range of printable ascii characters. + if ( matches[0] !== line ) { continue; } + line = matches[0]; + if ( line === '' ) { continue; } + + ubiquitousBlacklist.add(line); + } +}; + +/******************************************************************************/ + +µMatrix.selectAssets = function(details, callback) { + var µm = this; + + var applyAssetSelection = function( + metadata, + details, + propSelectedAssetKeys, + propImportedAssetKeys, + propInlineAsset + ) { + let µmus = µm.userSettings; + let selectedAssetKeys = new Set(); + let importedAssetKeys = new Set(µmus[propImportedAssetKeys]); + + if ( Array.isArray(details.toSelect) ) { + for ( let assetKey of details.toSelect ) { + if ( metadata.has(assetKey) ) { + selectedAssetKeys.add(assetKey); + } + } + } + + if ( Array.isArray(details.toRemove) ) { + for ( let assetKey of details.toRemove ) { + importedAssetKeys.delete(assetKey); + µm.assets.remove(assetKey); + } + } + + // Hosts file to import + // https://github.com/gorhill/uBlock/issues/1181 + // Try mapping the URL of an imported filter list to the assetKey of + // an existing stock list. + if ( typeof details.toImport === 'string' ) { + var assetKeyFromURL = function(url) { + var needle = url.replace(/^https?:/, ''); + for ( let entry of metadata ) { + let asset = entry[1]; + if ( asset.type === 'internal' ) { continue; } + let assetKey = entry[0]; + if ( typeof asset.contentURL === 'string' ) { + if ( asset.contentURL.endsWith(needle) ) { return assetKey; } + continue; + } + if ( Array.isArray(asset.contentURL) === false ) { continue; } + for ( let i = 0, n = asset.contentURL.length; i < n; i++ ) { + if ( asset.contentURL[i].endsWith(needle) ) { + return assetKey; + } + } + } + return url; + }; + var toImport = µm.assetKeysFromImportedAssets(details.toImport); + for ( let url of toImport ) { + if ( importedAssetKeys.has(url) ) { continue; } + let assetKey = assetKeyFromURL(url); + if ( assetKey === url ) { + importedAssetKeys.add(assetKey); + } + selectedAssetKeys.add(assetKey); + } + } + + let bin = {}, + needReload = false; + + if ( details.toInline instanceof Object ) { + let newInline = details.toInline; + let oldInline = µmus[propInlineAsset]; + newInline.content = newInline.content.trim(); + if ( newInline.content.length !== 0 ) { + newInline.content += '\n'; + } + let newContent = newInline.enabled ? newInline.content : ''; + let oldContent = oldInline.enabled ? oldInline.content : ''; + if ( newContent !== oldContent ) { + needReload = true; + } + if ( + newInline.enabled !== oldInline.enabled || + newInline.content !== oldInline.content + ) { + µmus[propInlineAsset] = newInline; + bin[propInlineAsset] = newInline; + } + } + + selectedAssetKeys = Array.from(selectedAssetKeys).sort(); + µmus[propSelectedAssetKeys].sort(); + if ( selectedAssetKeys.join() !== µmus[propSelectedAssetKeys].join() ) { + µmus[propSelectedAssetKeys] = selectedAssetKeys; + bin[propSelectedAssetKeys] = selectedAssetKeys; + needReload = true; + } + + importedAssetKeys = Array.from(importedAssetKeys).sort(); + µmus[propImportedAssetKeys].sort(); + if ( importedAssetKeys.join() !== µmus[propImportedAssetKeys].join() ) { + µmus[propImportedAssetKeys] = importedAssetKeys; + bin[propImportedAssetKeys] = importedAssetKeys; + needReload = true; + } + + if ( Object.keys(bin).length !== 0 ) { + vAPI.storage.set(bin); + } + + return needReload; + }; + + var onMetadataReady = function(response) { + let metadata = µm.toMap(response); + let hostsChanged = applyAssetSelection( + metadata, + details.hosts, + 'selectedHostsFiles', + 'externalHostsFiles', + 'userHosts' + ); + if ( hostsChanged ) { + µm.hostsFilesSelfie.destroy(); + } + let recipesChanged = applyAssetSelection( + metadata, + details.recipes, + 'selectedRecipeFiles', + 'externalRecipeFiles', + 'userRecipes' + ); + if ( typeof callback === 'function' ) { + callback({ + hostsChanged: hostsChanged, + recipesChanged: recipesChanged + }); + } + }; + + this.assets.metadata(onMetadataReady); +}; + +/******************************************************************************/ + +// `switches` contains the preset blacklists for which the switch must be +// revisited. + +µMatrix.reloadHostsFiles = function() { + this.loadHostsFiles(); +}; + +/******************************************************************************/ + +µMatrix.hostsFilesSelfie = (function() { + let timer; + + return { + create: function() { + this.cancel(); + timer = vAPI.setTimeout( + function() { + timer = undefined; + vAPI.cacheStorage.set({ + hostsFilesSelfie: µMatrix.ubiquitousBlacklist.toSelfie() + }); + }, + 120000 + ); + }, + destroy: function() { + this.cancel(); + vAPI.cacheStorage.remove('hostsFilesSelfie'); + }, + load: function(callback) { + this.cancel(); + vAPI.cacheStorage.get('hostsFilesSelfie', function(bin) { + callback( + bin instanceof Object && + bin.hostsFilesSelfie instanceof Object && + µMatrix.ubiquitousBlacklist.fromSelfie(bin.hostsFilesSelfie) + ); + }); + }, + cancel: function() { + if ( timer !== undefined ) { + clearTimeout(timer); + } + timer = undefined; + } + }; +})(); + +/******************************************************************************/ + +µMatrix.publicSuffixList = (function() { + let µm = µMatrix; + + var onPSLReady = function(details, callback) { + if ( + !details.error && + typeof details.content === 'string' && + details.content.length !== 0 + ) { + publicSuffixList.parse(details.content, punycode.toASCII); + vAPI.cacheStorage.set({ + publicSuffixListSelfie: publicSuffixList.toSelfie() + }); + } + callback(); + }; + + let onSelfieReady = function(bin, callback) { + if ( + bin instanceof Object && + bin.publicSuffixListSelfie instanceof Object && + publicSuffixList.fromSelfie(bin.publicSuffixListSelfie) + ) { + return callback(); + } + µm.assets.get(µm.pslAssetKey, function(details) { + onPSLReady(details, callback); + }); + }; + + return { + update: function(details) { + onPSLReady(details, µm.noopFunc); + }, + load: function(callback) { + if ( typeof callback !== 'function' ) { + callback = µm.noopFunc; + } + vAPI.cacheStorage.get('publicSuffixListSelfie', function(bin) { + onSelfieReady(bin, callback); + }); + } + }; +})(); + +/******************************************************************************/ + +µMatrix.scheduleAssetUpdater = (function() { + var timer, next = 0; + return function(updateDelay) { + if ( timer ) { + clearTimeout(timer); + timer = undefined; + } + if ( updateDelay === 0 ) { + this.assets.updateStop(); + next = 0; + return; + } + var now = Date.now(); + // Use the new schedule if and only if it is earlier than the previous + // one. + if ( next !== 0 ) { + updateDelay = Math.min(updateDelay, Math.max(next - now, 0)); + } + next = now + updateDelay; + timer = vAPI.setTimeout(function() { + timer = undefined; + next = 0; + µMatrix.assets.updateStart({ delay: 120000 }); + }, updateDelay); + }; +})(); + +/******************************************************************************/ + +µMatrix.assetObserver = function(topic, details) { + let µmus = this.userSettings; + + // Do not update filter list if not in use. + if ( topic === 'before-asset-updated' ) { + if ( + details.type === 'internal' || + details.type === 'filters' && + µmus.selectedHostsFiles.indexOf(details.assetKey) !== -1 || + details.type === 'recipes' && + µmus.selectedRecipeFiles.indexOf(details.assetKey) !== -1 + ) { + return true; + } + return; + } + + if ( topic === 'after-asset-updated' ) { + if ( + details.type === 'filters' && + µmus.selectedHostsFiles.indexOf(details.assetKey) !== -1 + ) { + this.hostsFilesSelfie.destroy(); + } else if ( details.assetKey === this.pslAssetKey ) { + this.publicSuffixList.update(details); + } + vAPI.messaging.broadcast({ + what: 'assetUpdated', + key: details.assetKey, + cached: true + }); + return; + } + + // Update failed. + if ( topic === 'asset-update-failed' ) { + vAPI.messaging.broadcast({ + what: 'assetUpdated', + key: details.assetKey, + failed: true + }); + return; + } + + // Reload all filter lists if needed. + if ( topic === 'after-assets-updated' ) { + if ( + this.arraysIntersect( + details.assetKeys, + µmus.selectedRecipeFiles + ) + ) { + this.loadRecipes(true); + } + if ( + this.arraysIntersect( + details.assetKeys, + µmus.selectedHostsFiles + ) + ) { + this.hostsFilesSelfie.destroy(); + this.loadHostsFiles(); + } + if ( µmus.autoUpdate ) { + this.scheduleAssetUpdater(25200000); + } else { + this.scheduleAssetUpdater(0); + } + vAPI.messaging.broadcast({ + what: 'assetsUpdated', + assetKeys: details.assetKeys + }); + return; + } +}; diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/tab.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/tab.js new file mode 100644 index 0000000..56187a0 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/tab.js @@ -0,0 +1,742 @@ +/******************************************************************************* + + uMatrix - a browser extension to black/white list requests. + Copyright (C) 2014-2018 Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uMatrix +*/ + +/******************************************************************************/ +/******************************************************************************/ + +(function() { + +'use strict'; + +/******************************************************************************/ + +var µm = µMatrix; + +// https://github.com/gorhill/httpswitchboard/issues/303 +// Some kind of trick going on here: +// Any scheme other than 'http' and 'https' is remapped into a fake +// URL which trick the rest of µMatrix into being able to process an +// otherwise unmanageable scheme. µMatrix needs web page to have a proper +// hostname to work properly, so just like the 'behind-the-scene' +// fake domain name, we map unknown schemes into a fake '{scheme}-scheme' +// hostname. This way, for a specific scheme you can create scope with +// rules which will apply only to that scheme. + +/******************************************************************************/ +/******************************************************************************/ + +µm.normalizePageURL = function(tabId, pageURL) { + if ( vAPI.isBehindTheSceneTabId(tabId) ) { + return 'http://' + this.behindTheSceneScope + '/'; + } + + // https://github.com/gorhill/uMatrix/issues/992 + // Firefox-specific quirk: some top documents are reported by Firefox API + // as loading from `wyciwyg://`, and this breaks uMatrix usability. + // Firefox should probably made such loading from cache seamless through + // its APIs, but since this is not the case, uMatrix inherits the duty to + // make it seamless on its side. + if ( pageURL.startsWith('wyciwyg:') ) { + let match = /^wyciwyg:\/\/\d+\//.exec(pageURL); + if ( match !== null ) { + pageURL = pageURL.slice(match[0].length); + } + } + + // If the URL is that of our "blocked page" document, return the URL of + // the blocked page. + if ( pageURL.startsWith(vAPI.getURL('main-blocked.html')) ) { + let matches = /main-blocked\.html\?details=([^&]+)/.exec(pageURL); + if ( matches && matches.length === 2 ) { + try { + let details = JSON.parse(atob(matches[1])); + pageURL = details.url; + } catch (e) { + } + } + } + + let uri = this.URI.set(pageURL); + let scheme = uri.scheme; + if ( scheme === 'https' || scheme === 'http' ) { + return uri.normalizedURI(); + } + + let fakeHostname = scheme + '-scheme'; + + if ( uri.hostname !== '' ) { + fakeHostname = uri.hostname + '.' + fakeHostname; + } else if ( scheme === 'about' ) { + fakeHostname = uri.path + '.' + fakeHostname; + } + + return 'http://' + fakeHostname + '/'; +}; + +/******************************************************************************/ +/****************************************************************************** + +To keep track from which context *exactly* network requests are made. This is +often tricky for various reasons, and the challenge is not specific to one +browser. + +The time at which a URL is assigned to a tab and the time when a network +request for a root document is made must be assumed to be unrelated: it's all +asynchronous. There is no guaranteed order in which the two events are fired. + +Also, other "anomalies" can occur: + +- a network request for a root document is fired without the corresponding +tab being really assigned a new URL + + +- a network request for a secondary resource is labeled with a tab id for +which no root document was pulled for that tab. + + +- a network request for a secondary resource is made without the root +document to which it belongs being formally bound yet to the proper tab id, +causing a bad scope to be used for filtering purpose. + + + +So the solution here is to keep a lightweight data structure which only +purpose is to keep track as accurately as possible of which root document +belongs to which tab. That's the only purpose, and because of this, there are +no restrictions for when the URL of a root document can be associated to a tab. + +Before, the PageStore object was trying to deal with this, but it had to +enforce some restrictions so as to not descend into one of the above issues, or +other issues. The PageStore object can only be associated with a tab for which +a definitive navigation event occurred, because it collects information about +what occurred in the tab (for example, the number of requests blocked for a +page). + +The TabContext objects do not suffer this restriction, and as a result they +offer the most reliable picture of which root document URL is really associated +to which tab. Moreover, the TabObject can undo an association from a root +document, and automatically re-associate with the next most recent. This takes +care of . + +The PageStore object no longer cache the various information about which +root document it is currently bound. When it needs to find out, it will always +defer to the TabContext object, which will provide the real answer. This takes +case of . In effect, the +master switch and dynamic filtering rules can be evaluated now properly even +in the absence of a PageStore object, this was not the case before. + +Also, the TabContext object will try its best to find a good candidate root +document URL for when none exists. This takes care of +. + +The TabContext manager is self-contained, and it takes care to properly +housekeep itself. + +*/ + +µm.tabContextManager = (function() { + let tabContexts = new Map(); + + let urlToTabIds = { + associations: new Map(), + associate: function(tabId, url) { + let tabIds = this.associations.get(url); + if ( tabIds === undefined ) { + this.associations.set(url, (tabIds = [])); + } else { + let i = tabIds.indexOf(tabId); + if ( i !== -1 ) { + tabIds.splice(i, 1); + } + } + tabIds.push(tabId); + }, + dissociate: function(tabId, url) { + let tabIds = this.associations.get(url); + if ( tabIds === undefined ) { return; } + let i = tabIds.indexOf(tabId); + if ( i !== -1 ) { + tabIds.splice(i, 1); + } + if ( tabIds.length === 0 ) { + this.associations.delete(url); + } + } + }; + + // https://github.com/chrisaljoudi/uBlock/issues/1001 + // This is to be used as last-resort fallback in case a tab is found to not + // be bound while network requests are fired for the tab. + let mostRecentRootDocURL = ''; + let mostRecentRootDocURLTimestamp = 0; + + let gcPeriod = 31 * 60 * 1000; // every 31 minutes + + // A pushed entry is removed from the stack unless it is committed with + // a set time. + let StackEntry = function(url, commit) { + this.url = url; + this.committed = commit; + this.tstamp = Date.now(); + }; + + let TabContext = function(tabId) { + this.tabId = tabId; + this.stack = []; + this.rawURL = + this.normalURL = + this.scheme = + this.rootHostname = + this.rootDomain = ''; + this.secure = false; + this.commitTimer = null; + this.gcTimer = null; + + tabContexts.set(tabId, this); + }; + + TabContext.prototype.destroy = function() { + if ( vAPI.isBehindTheSceneTabId(this.tabId) ) { return; } + if ( this.gcTimer !== null ) { + clearTimeout(this.gcTimer); + this.gcTimer = null; + } + urlToTabIds.dissociate(this.tabId, this.rawURL); + tabContexts.delete(this.tabId); + }; + + TabContext.prototype.onTab = function(tab) { + if ( tab ) { + this.gcTimer = vAPI.setTimeout(this.onGC.bind(this), gcPeriod); + } else { + this.destroy(); + } + }; + + TabContext.prototype.onGC = function() { + this.gcTimer = null; + if ( vAPI.isBehindTheSceneTabId(this.tabId) ) { return; } + vAPI.tabs.get(this.tabId, this.onTab.bind(this)); + }; + + // https://github.com/gorhill/uBlock/issues/248 + // Stack entries have to be committed to stick. Non-committed stack + // entries are removed after a set delay. + TabContext.prototype.onCommit = function() { + if ( vAPI.isBehindTheSceneTabId(this.tabId) ) { return; } + this.commitTimer = null; + // Remove uncommitted entries at the top of the stack. + let i = this.stack.length; + while ( i-- ) { + if ( this.stack[i].committed ) { + break; + } + } + // https://github.com/gorhill/uBlock/issues/300 + // If no committed entry was found, fall back on the bottom-most one + // as being the committed one by default. + if ( i === -1 && this.stack.length !== 0 ) { + this.stack[0].committed = true; + i = 0; + } + i += 1; + if ( i < this.stack.length ) { + this.stack.length = i; + this.update(); + µm.bindTabToPageStats(this.tabId, 'newURL'); + } + }; + + // This takes care of orphanized tab contexts. Can't be started for all + // contexts, as the behind-the-scene context is permanent -- so we do not + // want to flush it. + TabContext.prototype.autodestroy = function() { + if ( vAPI.isBehindTheSceneTabId(this.tabId) ) { return; } + this.gcTimer = vAPI.setTimeout(this.onGC.bind(this), gcPeriod); + }; + + // Update just force all properties to be updated to match the most recent + // root URL. + TabContext.prototype.update = function() { + urlToTabIds.dissociate(this.tabId, this.rawURL); + if ( this.stack.length === 0 ) { + this.rawURL = this.normalURL = this.scheme = + this.rootHostname = this.rootDomain = ''; + this.secure = false; + return; + } + this.rawURL = this.stack[this.stack.length - 1].url; + this.normalURL = µm.normalizePageURL(this.tabId, this.rawURL); + this.scheme = µm.URI.schemeFromURI(this.rawURL); + this.rootHostname = µm.URI.hostnameFromURI(this.normalURL); + this.rootDomain = µm.URI.domainFromHostname(this.rootHostname) || this.rootHostname; + this.secure = µm.URI.isSecureScheme(this.scheme); + urlToTabIds.associate(this.tabId, this.rawURL); + }; + + // Called whenever a candidate root URL is spotted for the tab. + TabContext.prototype.push = function(url, context) { + if ( vAPI.isBehindTheSceneTabId(this.tabId) ) { return; } + let committed = context !== undefined; + let count = this.stack.length; + let topEntry = this.stack[count - 1]; + if ( topEntry && topEntry.url === url ) { + if ( committed ) { + topEntry.committed = true; + } + return; + } + if ( this.commitTimer !== null ) { + clearTimeout(this.commitTimer); + } + if ( committed ) { + this.stack = [new StackEntry(url, true)]; + } else { + this.stack.push(new StackEntry(url)); + this.commitTimer = vAPI.setTimeout(this.onCommit.bind(this), 1000); + } + this.update(); + µm.bindTabToPageStats(this.tabId, context); + }; + + // These are to be used for the API of the tab context manager. + + let push = function(tabId, url, context) { + let entry = tabContexts.get(tabId); + if ( entry === undefined ) { + entry = new TabContext(tabId); + entry.autodestroy(); + } + entry.push(url, context); + mostRecentRootDocURL = url; + mostRecentRootDocURLTimestamp = Date.now(); + return entry; + }; + + // Find a tab context for a specific tab. If none is found, attempt to + // fix this. When all fail, the behind-the-scene context is returned. + let mustLookup = function(tabId, url) { + let entry; + if ( url !== undefined ) { + entry = push(tabId, url); + } else { + entry = tabContexts.get(tabId); + } + if ( entry !== undefined ) { + return entry; + } + // https://github.com/chrisaljoudi/uBlock/issues/1025 + // Google Hangout popup opens without a root frame. So for now we will + // just discard that best-guess root frame if it is too far in the + // future, at which point it ceases to be a "best guess". + if ( mostRecentRootDocURL !== '' && mostRecentRootDocURLTimestamp + 500 < Date.now() ) { + mostRecentRootDocURL = ''; + } + // https://github.com/chrisaljoudi/uBlock/issues/1001 + // Not a behind-the-scene request, yet no page store found for the + // tab id: we will thus bind the last-seen root document to the + // unbound tab. It's a guess, but better than ending up filtering + // nothing at all. + if ( mostRecentRootDocURL !== '' ) { + return push(tabId, mostRecentRootDocURL); + } + // If all else fail at finding a page store, re-categorize the + // request as behind-the-scene. At least this ensures that ultimately + // the user can still inspect/filter those net requests which were + // about to fall through the cracks. + // Example: Chromium + case #12 at + // http://raymondhill.net/ublock/popup.html + return tabContexts.get(vAPI.noTabId); + }; + + let lookup = function(tabId) { + return tabContexts.get(tabId) || null; + }; + + let tabIdFromURL = function(url) { + let tabIds = urlToTabIds.associations.get(url); + if ( tabIds === undefined ) { return -1; } + return tabIds[tabIds.length - 1]; + }; + + // Behind-the-scene tab context + (function() { + let entry = new TabContext(vAPI.noTabId); + entry.stack.push(new StackEntry('', true)); + entry.rawURL = ''; + entry.normalURL = µm.normalizePageURL(entry.tabId); + entry.rootHostname = µm.URI.hostnameFromURI(entry.normalURL); + entry.rootDomain = µm.URI.domainFromHostname(entry.rootHostname) || entry.rootHostname; + })(); + + // https://github.com/gorhill/uMatrix/issues/513 + // Force a badge update here, it could happen that all the subsequent + // network requests are already in the page store, which would cause + // the badge to no be updated for these network requests. + + vAPI.tabs.onNavigation = function(details) { + let tabId = details.tabId; + if ( vAPI.isBehindTheSceneTabId(tabId) ) { return; } + push(tabId, details.url, 'newURL'); + µm.updateBadgeAsync(tabId); + }; + + // https://github.com/gorhill/uMatrix/issues/872 + // `changeInfo.url` may not always be available (Firefox). + + vAPI.tabs.onUpdated = function(tabId, changeInfo, tab) { + if ( vAPI.isBehindTheSceneTabId(tabId) ) { return; } + if ( typeof tab.url !== 'string' || tab.url === '' ) { return; } + let url = changeInfo.url || tab.url; + if ( url ) { + push(tabId, url, 'updateURL'); + } + }; + + vAPI.tabs.onClosed = function(tabId) { + µm.unbindTabFromPageStats(tabId); + let entry = tabContexts.get(tabId); + if ( entry instanceof TabContext ) { + entry.destroy(); + } + }; + + return { + push: push, + lookup: lookup, + mustLookup: mustLookup, + tabIdFromURL: tabIdFromURL + }; +})(); + +vAPI.tabs.registerListeners(); + +/******************************************************************************/ +/******************************************************************************/ + +// Create an entry for the tab if it doesn't exist + +µm.bindTabToPageStats = function(tabId, context) { + this.updateBadgeAsync(tabId); + + // Do not create a page store for URLs which are of no interests + // Example: dev console + let tabContext = this.tabContextManager.lookup(tabId); + if ( tabContext === null ) { return; } + + // rhill 2013-11-24: Never ever rebind behind-the-scene + // virtual tab. + // https://github.com/gorhill/httpswitchboard/issues/67 + if ( vAPI.isBehindTheSceneTabId(tabId) ) { + return this.pageStores.get(tabId); + } + + let normalURL = tabContext.normalURL; + let pageStore = this.pageStores.get(tabId); + + // The previous page URL, if any, associated with the tab + if ( pageStore !== undefined ) { + // No change, do not rebind + if ( pageStore.pageUrl === normalURL ) { + return pageStore; + } + + // https://github.com/gorhill/uMatrix/issues/37 + // Just rebind whenever possible: the URL changed, but the document + // maybe is the same. + // Example: Google Maps, Github + // https://github.com/gorhill/uMatrix/issues/72 + // Need to double-check that the new scope is same as old scope + if ( + context === 'updateURL' && + pageStore.pageHostname === tabContext.rootHostname + ) { + pageStore.rawURL = tabContext.rawURL; + pageStore.pageUrl = normalURL; + this.updateTitle(tabId); + this.pageStoresToken = Date.now(); + return pageStore; + } + + // We won't be reusing this page store. + this.unbindTabFromPageStats(tabId); + } + + // Try to resurrect first. + pageStore = this.resurrectPageStore(tabId, normalURL); + if ( pageStore === null ) { + pageStore = this.pageStoreFactory(tabContext); + } + this.pageStores.set(tabId, pageStore); + this.updateTitle(tabId); + this.pageStoresToken = Date.now(); + + return pageStore; +}; + +/******************************************************************************/ + +µm.unbindTabFromPageStats = function(tabId) { + if ( vAPI.isBehindTheSceneTabId(tabId) ) { return; } + + let pageStore = this.pageStores.get(tabId); + if ( pageStore === undefined ) { return; } + + this.pageStores.delete(tabId); + this.pageStoresToken = Date.now(); + + if ( pageStore.incinerationTimer ) { + clearTimeout(pageStore.incinerationTimer); + pageStore.incinerationTimer = null; + } + + let pageStoreCrypt = this.pageStoreCemetery.get(tabId); + if ( pageStoreCrypt === undefined ) { + this.pageStoreCemetery.set(tabId, (pageStoreCrypt = new Map())); + } + + let pageURL = pageStore.pageUrl; + pageStoreCrypt.set(pageURL, pageStore); + + pageStore.incinerationTimer = vAPI.setTimeout( + this.incineratePageStore.bind(this, tabId, pageURL), + 4 * 60 * 1000 + ); +}; + +/******************************************************************************/ + +µm.resurrectPageStore = function(tabId, pageURL) { + let pageStoreCrypt = this.pageStoreCemetery.get(tabId); + if ( pageStoreCrypt === undefined ) { return null; } + + let pageStore = pageStoreCrypt.get(pageURL); + if ( pageStore === undefined ) { return null; } + + + if ( pageStore.incinerationTimer !== null ) { + clearTimeout(pageStore.incinerationTimer); + pageStore.incinerationTimer = null; + } + + pageStoreCrypt.delete(pageURL); + if ( pageStoreCrypt.size === 0 ) { + this.pageStoreCemetery.delete(tabId); + } + + return pageStore; +}; + +/******************************************************************************/ + +µm.incineratePageStore = function(tabId, pageURL) { + let pageStoreCrypt = this.pageStoreCemetery.get(tabId); + if ( pageStoreCrypt === undefined ) { return; } + + let pageStore = pageStoreCrypt.get(pageURL); + if ( pageStore === undefined ) { return; } + + if ( pageStore.incinerationTimer !== null ) { + clearTimeout(pageStore.incinerationTimer); + pageStore.incinerationTimer = null; + } + + pageStoreCrypt.delete(pageURL); + if ( pageStoreCrypt.size === 0 ) { + this.pageStoreCemetery.delete(tabId); + } + + pageStore.dispose(); +}; + +/******************************************************************************/ + +µm.pageStoreFromTabId = function(tabId) { + return this.pageStores.get(tabId) || null; +}; + +// Never return null +µm.mustPageStoreFromTabId = function(tabId) { + return this.pageStores.get(tabId) || this.pageStores.get(vAPI.noTabId); +}; + +/******************************************************************************/ + +µm.forceReload = function(tabId, bypassCache) { + vAPI.tabs.reload(tabId, bypassCache); +}; + +/******************************************************************************/ + +µm.updateBadgeAsync = (function() { + let tabIdToTimer = new Map(); + + let updateBadge = function(tabId) { + tabIdToTimer.delete(tabId); + + let iconId = 'off'; + let badgeStr = ''; + + let pageStore = this.pageStoreFromTabId(tabId); + if ( pageStore !== null ) { + let total = pageStore.perLoadAllowedRequestCount + + pageStore.perLoadBlockedRequestCount; + if ( total ) { + let squareSize = 19; + let greenSize = squareSize * Math.sqrt( + pageStore.perLoadAllowedRequestCount / total + ); + iconId = greenSize < squareSize/2 ? + Math.ceil(greenSize) : + Math.floor(greenSize); + } + if ( + this.userSettings.iconBadgeEnabled && + pageStore.perLoadBlockedRequestCount !== 0 + ) { + badgeStr = this.formatCount(pageStore.perLoadBlockedRequestCount); + } + } + + vAPI.setIcon( + tabId, + 'img/browsericons/icon19-' + iconId + '.png', + { text: badgeStr, color: '#666' } + ); + }; + + return function(tabId) { + if ( tabIdToTimer.has(tabId) ) { return; } + if ( vAPI.isBehindTheSceneTabId(tabId) ) { return; } + tabIdToTimer.set( + tabId, + vAPI.setTimeout(updateBadge.bind(this, tabId), 750) + ); + }; +})(); + +/******************************************************************************/ + +µm.updateTitle = (function() { + let tabIdToTimer = new Map(); + let tabIdToTryCount = new Map(); + let delay = 499; + + let tryNoMore = function(tabId) { + tabIdToTryCount.delete(tabId); + }; + + let tryAgain = function(tabId) { + let count = tabIdToTryCount.get(tabId); + if ( count === undefined ) { return false; } + if ( count === 1 ) { + tabIdToTryCount.delete(tabId); + return false; + } + tabIdToTryCount.set(tabId, count - 1); + tabIdToTimer.set( + tabId, + vAPI.setTimeout(updateTitle.bind(µm, tabId), delay) + ); + return true; + }; + + var onTabReady = function(tabId, tab) { + if ( !tab ) { + return tryNoMore(tabId); + } + var pageStore = this.pageStoreFromTabId(tabId); + if ( pageStore === null ) { + return tryNoMore(tabId); + } + if ( !tab.title && tryAgain(tabId) ) { + return; + } + // https://github.com/gorhill/uMatrix/issues/225 + // Sometimes title changes while page is loading. + var settled = tab.title && tab.title === pageStore.title; + pageStore.title = tab.title || tab.url || ''; + this.pageStoresToken = Date.now(); + if ( settled || !tryAgain(tabId) ) { + tryNoMore(tabId); + } + }; + + var updateTitle = function(tabId) { + tabIdToTimer.delete(tabId); + vAPI.tabs.get(tabId, onTabReady.bind(this, tabId)); + }; + + return function(tabId) { + if ( vAPI.isBehindTheSceneTabId(tabId) ) { return; } + let timer = tabIdToTimer.get(tabId); + if ( timer !== undefined ) { + clearTimeout(timer); + } + tabIdToTimer.set( + tabId, + vAPI.setTimeout(updateTitle.bind(this, tabId), delay) + ); + tabIdToTryCount.set(tabId, 5); + }; +})(); + +/******************************************************************************/ + +// Stale page store entries janitor +// https://github.com/chrisaljoudi/uBlock/issues/455 + +(function() { + var cleanupPeriod = 7 * 60 * 1000; + var cleanupSampleAt = 0; + var cleanupSampleSize = 11; + + var cleanup = function() { + var vapiTabs = vAPI.tabs; + var tabIds = Array.from(µm.pageStores.keys()).sort(); + var checkTab = function(tabId) { + vapiTabs.get(tabId, function(tab) { + if ( !tab ) { + µm.unbindTabFromPageStats(tabId); + } + }); + }; + if ( cleanupSampleAt >= tabIds.length ) { + cleanupSampleAt = 0; + } + var tabId; + var n = Math.min(cleanupSampleAt + cleanupSampleSize, tabIds.length); + for ( var i = cleanupSampleAt; i < n; i++ ) { + tabId = tabIds[i]; + if ( vAPI.isBehindTheSceneTabId(tabId) ) { continue; } + checkTab(tabId); + } + cleanupSampleAt = n; + + vAPI.setTimeout(cleanup, cleanupPeriod); + }; + + vAPI.setTimeout(cleanup, cleanupPeriod); +})(); + +/******************************************************************************/ + +})(); diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/traffic.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/traffic.js new file mode 100644 index 0000000..c3376ad --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/traffic.js @@ -0,0 +1,664 @@ +/******************************************************************************* + + uMatrix - a browser extension to black/white list requests. + Copyright (C) 2014-present Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uMatrix +*/ + +'use strict'; + +/******************************************************************************/ + +// Start isolation from global scope + +µMatrix.webRequest = (function() { + +/******************************************************************************/ + +// Intercept and filter web requests according to white and black lists. + +var onBeforeRootFrameRequestHandler = function(details) { + let µm = µMatrix; + let desURL = details.url; + let desHn = µm.URI.hostnameFromURI(desURL); + let type = requestTypeNormalizer[details.type] || 'other'; + let tabId = details.tabId; + + µm.tabContextManager.push(tabId, desURL); + + let tabContext = µm.tabContextManager.mustLookup(tabId); + let srcHn = tabContext.rootHostname; + + // Disallow request as per matrix? + let blocked = µm.mustBlock(srcHn, desHn, type); + + let pageStore = µm.pageStoreFromTabId(tabId); + pageStore.recordRequest(type, desURL, blocked); + pageStore.perLoadAllowedRequestCount = 0; + pageStore.perLoadBlockedRequestCount = 0; + µm.logger.writeOne({ tabId, srcHn, desHn, desURL, type, blocked }); + + // Not blocked + if ( !blocked ) { + let redirectURL = maybeRedirectRootFrame(desHn, desURL); + if ( redirectURL !== desURL ) { + return { redirectUrl: redirectURL }; + } + µm.cookieHunter.recordPageCookies(pageStore); + return; + } + + // Blocked + let query = btoa(JSON.stringify({ url: desURL, hn: desHn, type, why: '?' })); + + vAPI.tabs.replace(tabId, vAPI.getURL('main-blocked.html?details=') + query); + + return { cancel: true }; +}; + +/******************************************************************************/ + +// https://twitter.com/thatcks/status/958776519765225473 + +var maybeRedirectRootFrame = function(hostname, url) { + let µm = µMatrix; + if ( µm.rawSettings.enforceEscapedFragment !== true ) { return url; } + let block1pScripts = µm.mustBlock(hostname, hostname, 'script'); + let reEscapedFragment = /[?&]_escaped_fragment_=/; + if ( reEscapedFragment.test(url) ) { + return block1pScripts ? url : url.replace(reEscapedFragment, '#!') ; + } + if ( block1pScripts === false ) { return url; } + let pos = url.indexOf('#!'); + if ( pos === -1 ) { return url; } + let separator = url.lastIndexOf('?', pos) === -1 ? '?' : '&'; + return url.slice(0, pos) + + separator + '_escaped_fragment_=' + + url.slice(pos + 2); +}; + +/******************************************************************************/ + +// Intercept and filter web requests according to white and black lists. + +var onBeforeRequestHandler = function(details) { + let µm = µMatrix, + µmuri = µm.URI, + desURL = details.url, + desScheme = µmuri.schemeFromURI(desURL); + + if ( µmuri.isNetworkScheme(desScheme) === false ) { return; } + + let type = requestTypeNormalizer[details.type] || 'other'; + + // https://github.com/gorhill/httpswitchboard/issues/303 + // Wherever the main doc comes from, create a receiver page URL: synthetize + // one if needed. + if ( type === 'doc' && details.parentFrameId === -1 ) { + return onBeforeRootFrameRequestHandler(details); + } + + // Re-classify orphan HTTP requests as behind-the-scene requests. There is + // not much else which can be done, because there are URLs + // which cannot be handled by µMatrix, i.e. `opera://startpage`, + // as this would lead to complications with no obvious solution, like how + // to scope on unknown scheme? Etc. + // https://github.com/gorhill/httpswitchboard/issues/191 + // https://github.com/gorhill/httpswitchboard/issues/91#issuecomment-37180275 + let tabContext = µm.tabContextManager.mustLookup(details.tabId), + tabId = tabContext.tabId, + srcHn = tabContext.rootHostname, + desHn = µmuri.hostnameFromURI(desURL), + docURL = details.documentUrl, + specificity = 0; + + if ( docURL !== undefined ) { + // Extract context from initiator for behind-the-scene requests. + if ( tabId < 0 ) { + srcHn = µmuri.hostnameFromURI(µm.normalizePageURL(0, docURL)); + } + // https://github.com/uBlockOrigin/uMatrix-issues/issues/72 + // Workaround of weird Firefox behavior: when a service worker exists + // for a site, the `doc` requests when loading a page from that site + // are not being made: this potentially prevents uMatrix to properly + // keep track of the context in which requests are made. + else if ( + details.parentFrameId === -1 && + docURL !== tabContext.rawURL + ) { + srcHn = µmuri.hostnameFromURI(µm.normalizePageURL(0, docURL)); + } + } + + let blocked = µm.tMatrix.mustBlock(srcHn, desHn, type); + if ( blocked ) { + specificity = µm.tMatrix.specificityRegister; + } + + // Record request. + // https://github.com/gorhill/httpswitchboard/issues/342 + // The way requests are handled now, it may happen at this point some + // processing has already been performed, and that a synthetic URL has + // been constructed for logging purpose. Use this synthetic URL if + // it is available. + let pageStore = µm.mustPageStoreFromTabId(tabId); + + // Enforce strict secure connection? + if ( tabContext.secure && µmuri.isSecureScheme(desScheme) === false ) { + pageStore.hasMixedContent = true; + if ( blocked === false ) { + blocked = µm.tMatrix.evaluateSwitchZ('https-strict', srcHn); + } + } + + pageStore.recordRequest(type, desURL, blocked); + if ( µm.logger.enabled ) { + µm.logger.writeOne({ tabId, srcHn, desHn, desURL, type, blocked }); + } + + if ( blocked ) { + pageStore.cacheBlockedCollapsible(type, desURL, specificity); + return { 'cancel': true }; + } +}; + +/******************************************************************************/ + +// Sanitize outgoing headers as per user settings. + +var onBeforeSendHeadersHandler = function(details) { + let µm = µMatrix, + µmuri = µm.URI, + desURL = details.url, + desScheme = µmuri.schemeFromURI(desURL); + + // Ignore non-network schemes + if ( µmuri.isNetworkScheme(desScheme) === false ) { return; } + + // Re-classify orphan HTTP requests as behind-the-scene requests. There is + // not much else which can be done, because there are URLs + // which cannot be handled by HTTP Switchboard, i.e. `opera://startpage`, + // as this would lead to complications with no obvious solution, like how + // to scope on unknown scheme? Etc. + // https://github.com/gorhill/httpswitchboard/issues/191 + // https://github.com/gorhill/httpswitchboard/issues/91#issuecomment-37180275 + const tabId = details.tabId; + const pageStore = µm.mustPageStoreFromTabId(tabId); + const desHn = µmuri.hostnameFromURI(desURL); + const requestType = requestTypeNormalizer[details.type] || 'other'; + const requestHeaders = details.requestHeaders; + + // https://github.com/uBlockOrigin/uMatrix-issues/issues/155 + // https://github.com/uBlockOrigin/uMatrix-issues/issues/159 + // TODO: import all filtering context improvements from uBO. + const srcHn = tabId < 0 || + details.parentFrameId < 0 || + details.parentFrameId === 0 && details.type === 'sub_frame' + ? µmuri.hostnameFromURI(details.documentUrl) || pageStore.pageHostname + : pageStore.pageHostname; + + // https://github.com/gorhill/httpswitchboard/issues/342 + // Is this hyperlink auditing? + // If yes, create a synthetic URL for reporting hyperlink auditing + // in request log. This way the user is better informed of what went + // on. + + // https://html.spec.whatwg.org/multipage/links.html#hyperlink-auditing + // + // Target URL = the href of the link + // Doc URL = URL of the document containing the target URL + // Ping URLs = servers which will be told that user clicked target URL + // + // `Content-Type` = `text/ping` (always present) + // `Ping-To` = target URL (always present) + // `Ping-From` = doc URL + // `Referer` = doc URL + // request URL = URL which will receive the information + // + // With hyperlink-auditing, removing header(s) is pointless, the whole + // request must be cancelled. + + let headerIndex = headerIndexFromName('ping-to', requestHeaders); + if ( headerIndex !== -1 ) { + let headerValue = requestHeaders[headerIndex].value; + if ( headerValue !== '' ) { + let blocked = µm.userSettings.processHyperlinkAuditing; + pageStore.recordRequest('other', desURL + '{Ping-To:' + headerValue + '}', blocked); + µm.logger.writeOne({ tabId, srcHn, desHn, desURL, type: 'ping', blocked }); + if ( blocked ) { + µm.hyperlinkAuditingFoiledCounter += 1; + return { 'cancel': true }; + } + } + } + + // If we reach this point, request is not blocked, so what is left to do + // is to sanitize headers. + + let modified = false; + + // Process `Cookie` header. + + headerIndex = headerIndexFromName('cookie', requestHeaders); + if ( + headerIndex !== -1 && + µm.mustBlock(srcHn, desHn, 'cookie') + ) { + modified = true; + let headerValue = requestHeaders[headerIndex].value; + requestHeaders.splice(headerIndex, 1); + µm.cookieHeaderFoiledCounter++; + if ( requestType === 'doc' ) { + pageStore.perLoadBlockedRequestCount++; + µm.logger.writeOne({ + tabId, + srcHn, + header: { name: 'COOKIE', value: headerValue }, + change: -1 + }); + } + } + + // Process `Referer` header. + + // https://github.com/gorhill/httpswitchboard/issues/222#issuecomment-44828402 + + // https://github.com/gorhill/uMatrix/issues/320 + // http://tools.ietf.org/html/rfc6454#section-7.3 + // "The user agent MAY include an Origin header field in any HTTP + // "request. + // "The user agent MUST NOT include more than one Origin header field in + // "any HTTP request. + // "Whenever a user agent issues an HTTP request from a "privacy- + // "sensitive" context, the user agent MUST send the value "null" in the + // "Origin header field." + + // https://github.com/gorhill/uMatrix/issues/358 + // Do not spoof `Origin` header for the time being. + + // https://github.com/gorhill/uMatrix/issues/773 + // For non-GET requests, remove `Referer` header instead of spoofing it. + + headerIndex = headerIndexFromName('referer', requestHeaders); + if ( headerIndex !== -1 ) { + let headerValue = requestHeaders[headerIndex].value; + if ( headerValue !== '' ) { + let toDomain = µmuri.domainFromHostname(desHn); + if ( toDomain !== '' && toDomain !== µmuri.domainFromURI(headerValue) ) { + pageStore.has3pReferrer = true; + if ( µm.tMatrix.evaluateSwitchZ('referrer-spoof', srcHn) ) { + modified = true; + let newValue; + if ( details.method === 'GET' ) { + newValue = requestHeaders[headerIndex].value = + desScheme + '://' + desHn + '/'; + } else { + requestHeaders.splice(headerIndex, 1); + } + if ( pageStore.perLoadBlockedReferrerCount === 0 ) { + pageStore.perLoadBlockedRequestCount += 1; + µm.logger.writeOne({ + tabId, + srcHn, + header: { name: 'REFERER', value: headerValue }, + change: -1 + }); + if ( newValue !== undefined ) { + µm.logger.writeOne({ + tabId, + srcHn, + header: { name: 'REFERER', value: newValue }, + change: +1 + }); + } + } + pageStore.perLoadBlockedReferrerCount += 1; + } + } + } + } + + if ( modified !== true ) { return; } + + µm.updateBadgeAsync(tabId); + + return { requestHeaders: requestHeaders }; +}; + +/******************************************************************************/ + +// To prevent inline javascript from being executed. + +// Prevent inline scripting using `Content-Security-Policy`: +// https://dvcs.w3.org/hg/content-security-policy/raw-file/tip/csp-specification.dev.html + +// This fixes: +// https://github.com/gorhill/httpswitchboard/issues/35 + +var onHeadersReceivedHandler = function(details) { + // Ignore schemes other than 'http...' + let µm = µMatrix, + tabId = details.tabId, + requestURL = details.url, + requestType = requestTypeNormalizer[details.type] || 'other', + headers = details.responseHeaders; + + // https://github.com/gorhill/uMatrix/issues/145 + // Check if the main_frame is a download + if ( requestType === 'doc' ) { + µm.tabContextManager.push(tabId, requestURL); + let contentType = typeFromHeaders(headers); + if ( contentType !== undefined ) { + details.type = contentType; + return onBeforeRootFrameRequestHandler(details); + } + } + + let tabContext = µm.tabContextManager.lookup(tabId); + if ( tabContext === null ) { return; } + + let csp = [], + cspReport = [], + srcHn = tabContext.rootHostname, + desHn = µm.URI.hostnameFromURI(requestURL); + + // Inline script tags. + if ( µm.mustBlock(srcHn, desHn, 'script' ) ) { + csp.push(µm.cspNoInlineScript); + } + + // Inline style tags. + if ( µm.mustBlock(srcHn, desHn, 'css' ) ) { + csp.push(µm.cspNoInlineStyle); + } + + if ( µm.tMatrix.evaluateSwitchZ('no-workers', srcHn) ) { + csp.push(µm.cspNoWorker); + } else if ( µm.rawSettings.disableCSPReportInjection === false ) { + cspReport.push(µm.cspNoWorker); + } + + if ( csp.length === 0 && cspReport.length === 0 ) { return; } + + // https://github.com/gorhill/uMatrix/issues/967 + // Inject a new CSP header rather than modify an existing one, except + // if the current environment does not support merging headers: + // Firefox 58/webext and less can't merge CSP headers, so we will merge + // them here. + + if ( csp.length !== 0 ) { + let cspRight = csp.join(', '); + let cspTotal = cspRight; + if ( µm.cantMergeCSPHeaders ) { + let i = headerIndexFromName( + 'content-security-policy', + headers + ); + if ( i !== -1 ) { + cspTotal = headers[i].value.trim() + ', ' + cspTotal; + headers.splice(i, 1); + } + } + headers.push({ + name: 'Content-Security-Policy', + value: cspTotal + }); + if ( requestType === 'doc' ) { + µm.logger.writeOne({ + tabId, + srcHn, + header: { name: 'CSP', value: cspRight }, + change: +1 + }); + } + } + + if ( cspReport.length !== 0 ) { + let cspRight = cspReport.join(', '); + let cspTotal = cspRight; + if ( µm.cantMergeCSPHeaders ) { + let i = headerIndexFromName( + 'content-security-policy-report-only', + headers + ); + if ( i !== -1 ) { + cspTotal = headers[i].value.trim() + ', ' + cspTotal; + headers.splice(i, 1); + } + } + headers.push({ + name: 'Content-Security-Policy-Report-Only', + value: cspTotal + }); + } + + return { responseHeaders: headers }; +}; + +/******************************************************************************/ + +// https://bugzilla.mozilla.org/show_bug.cgi?id=1302667 +// https://github.com/gorhill/uMatrix/issues/967#issuecomment-373002011 + +window.addEventListener('webextFlavor', function() { + if ( vAPI.webextFlavor.soup.has('firefox') === false ) { return; } + if ( vAPI.webextFlavor.major <= 57 ) { + µMatrix.cspNoWorker = + "child-src 'none'; frame-src data: blob: *; report-uri about:blank"; + } + if ( vAPI.webextFlavor.major <= 58 ) { + µMatrix.cantMergeCSPHeaders = true; + } +}, { once: true }); + +/******************************************************************************/ + +// Caller must ensure headerName is normalized to lower case. + +var headerIndexFromName = function(headerName, headers) { + var i = headers.length; + while ( i-- ) { + if ( headers[i].name.toLowerCase() === headerName ) { + return i; + } + } + return -1; +}; + +/******************************************************************************/ + +// Extract request type from content headers. + +let typeFromHeaders = function(headers) { + let i = headerIndexFromName('content-type', headers); + if ( i === -1 ) { return; } + let mime = headers[i].value.toLowerCase(); + if ( mime.startsWith('image/') ) { return 'image'; } + if ( mime.startsWith('video/') || mime.startsWith('audio/') ) { + return 'media'; + } +}; + +/******************************************************************************/ + +var requestTypeNormalizer = { + 'font' : 'css', + 'image' : 'image', + 'imageset' : 'image', + 'main_frame' : 'doc', + 'media' : 'media', + 'object' : 'media', + 'other' : 'other', + 'script' : 'script', + 'stylesheet' : 'css', + 'sub_frame' : 'frame', + 'websocket' : 'xhr', + 'xmlhttprequest': 'xhr' +}; + +/******************************************************************************* + + Use a `http-equiv` `meta` tag to enforce CSP directives for documents + which protocol is `file:` (which do not cause our webRequest.onHeadersReceived + handler to be called). + + Idea borrowed from NoScript: + https://github.com/hackademix/noscript/commit/6e80d3f130773fc9a9123c5c4c2e97d63e90fa2a + +**/ + +(function() { + if ( + typeof self.browser !== 'object' || + typeof browser.contentScripts !== 'object' + ) { + return; + } + + let csRules = [ + { + name: 'script', + file: '/js/contentscript-no-inline-script.js', + pending: undefined, + registered: undefined, + mustRegister: false + }, + ]; + + let csSwitches = [ + { + name: 'no-workers', + file: '/js/contentscript-no-workers.js', + pending: undefined, + registered: undefined, + mustRegister: false + }, + ]; + + let register = function(entry) { + if ( entry.pending !== undefined ) { return; } + entry.pending = browser.contentScripts.register({ + js: [ { file: entry.file } ], + matches: [ 'file:///*' ], + runAt: 'document_start' + }).then( + result => { + if ( entry.mustRegister ) { + entry.registered = result; + } + entry.pending = undefined; + }, + ( ) => { + entry.registered = undefined; + entry.pending = undefined; + } + ); + }; + + let unregister = function(entry) { + if ( entry.registered === undefined ) { return; } + entry.registered.unregister(); + entry.registered = undefined; + }; + + let handler = function(ev) { + let matrix = ev && ev.detail; + if ( matrix !== µMatrix.tMatrix ) { return; } + for ( let cs of csRules ) { + cs.mustRegister = matrix.mustBlock('file-scheme', 'file-scheme', cs.name); + if ( cs.mustRegister === (cs.registered !== undefined) ) { continue; } + if ( cs.mustRegister ) { + register(cs); + } else { + unregister(cs); + } + } + for ( let cs of csSwitches ) { + cs.mustRegister = matrix.evaluateSwitchZ(cs.name, 'file-scheme'); + if ( cs.mustRegister === (cs.registered !== undefined) ) { continue; } + if ( cs.mustRegister ) { + register(cs); + } else { + unregister(cs); + } + } + }; + + window.addEventListener('matrixRulesetChange', handler); +})(); + +/******************************************************************************/ + +const start = (function() { + if ( + vAPI.net.onBeforeReady instanceof Object && + ( + vAPI.net.onBeforeReady.experimental !== true || + µMatrix.rawSettings.suspendTabsUntilReady + ) + ) { + vAPI.net.onBeforeReady.start(); + } + + return function() { + vAPI.net.addListener( + 'onBeforeRequest', + onBeforeRequestHandler, + { }, + [ 'blocking' ] + ); + + // https://github.com/uBlockOrigin/uMatrix-issues/issues/74#issuecomment-450687707 + // https://groups.google.com/a/chromium.org/forum/#!topic/chromium-extensions/vYIaeezZwfQ + // Chromium 72+: use `extraHeaders` to keep the ability to access + // the `Cookie`, `Referer` headers. + const beforeSendHeadersExtra = [ 'blocking', 'requestHeaders' ]; + const wrObsho = browser.webRequest.OnBeforeSendHeadersOptions; + if ( + wrObsho instanceof Object && + wrObsho.hasOwnProperty('EXTRA_HEADERS') + ) { + beforeSendHeadersExtra.push(wrObsho.EXTRA_HEADERS); + } + vAPI.net.addListener( + 'onBeforeSendHeaders', + onBeforeSendHeadersHandler, + { }, + beforeSendHeadersExtra + ); + + vAPI.net.addListener( + 'onHeadersReceived', + onHeadersReceivedHandler, + { types: [ 'main_frame', 'sub_frame' ] }, + [ 'blocking', 'responseHeaders' ] + ); + + if ( vAPI.net.onBeforeReady instanceof Object ) { + vAPI.net.onBeforeReady.stop(onBeforeRequestHandler); + } + }; +})(); + +return { start }; + +/******************************************************************************/ + +})(); + +/******************************************************************************/ + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/udom.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/udom.js new file mode 100644 index 0000000..3ac2f97 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/udom.js @@ -0,0 +1,728 @@ +/******************************************************************************* + + µBlock - a browser extension to block requests. + Copyright (C) 2014-2017 Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uBlock +*/ + +/* global DOMTokenList */ +/* exported uDom */ + +'use strict'; + +/******************************************************************************/ + +// It's just a silly, minimalist DOM framework: this allows me to not rely +// on jQuery. jQuery contains way too much stuff than I need, and as per +// Opera rules, I am not allowed to use a cut-down version of jQuery. So +// the code here does *only* what I need, and nothing more, and with a lot +// of assumption on passed parameters, etc. I grow it on a per-need-basis only. + +var uDom = (function() { + +/******************************************************************************/ + +var DOMList = function() { + this.nodes = []; +}; + +/******************************************************************************/ + +Object.defineProperty( + DOMList.prototype, + 'length', + { + get: function() { + return this.nodes.length; + } + } +); + +/******************************************************************************/ + +var DOMListFactory = function(selector, context) { + var r = new DOMList(); + if ( typeof selector === 'string' ) { + selector = selector.trim(); + if ( selector !== '' ) { + return addSelectorToList(r, selector, context); + } + } + if ( selector instanceof Node ) { + return addNodeToList(r, selector); + } + if ( selector instanceof NodeList ) { + return addNodeListToList(r, selector); + } + if ( selector instanceof DOMList ) { + return addListToList(r, selector); + } + return r; +}; + +/******************************************************************************/ + +DOMListFactory.onLoad = function(callback) { + window.addEventListener('load', callback); +}; + +/******************************************************************************/ + +DOMListFactory.nodeFromId = function(id) { + return document.getElementById(id); +}; + +DOMListFactory.nodeFromSelector = function(selector) { + return document.querySelector(selector); +}; + +/******************************************************************************/ + +var addNodeToList = function(list, node) { + if ( node ) { + list.nodes.push(node); + } + return list; +}; + +/******************************************************************************/ + +var addNodeListToList = function(list, nodelist) { + if ( nodelist ) { + var n = nodelist.length; + for ( var i = 0; i < n; i++ ) { + list.nodes.push(nodelist[i]); + } + } + return list; +}; + +/******************************************************************************/ + +var addListToList = function(list, other) { + list.nodes = list.nodes.concat(other.nodes); + return list; +}; + +/******************************************************************************/ + +var addSelectorToList = function(list, selector, context) { + var p = context || document; + var r = p.querySelectorAll(selector); + var n = r.length; + for ( var i = 0; i < n; i++ ) { + list.nodes.push(r[i]); + } + return list; +}; + +/******************************************************************************/ + +var nodeInNodeList = function(node, nodeList) { + var i = nodeList.length; + while ( i-- ) { + if ( nodeList[i] === node ) { + return true; + } + } + return false; +}; + +/******************************************************************************/ + +var doesMatchSelector = function(node, selector) { + if ( !node ) { + return false; + } + if ( node.nodeType !== 1 ) { + return false; + } + if ( selector === undefined ) { + return true; + } + var parentNode = node.parentNode; + if ( !parentNode || !parentNode.setAttribute ) { + return false; + } + var doesMatch = false; + parentNode.setAttribute('uDom-32kXc6xEZA7o73AMB8vLbLct1RZOkeoO', ''); + var grandpaNode = parentNode.parentNode || document; + var nl = grandpaNode.querySelectorAll('[uDom-32kXc6xEZA7o73AMB8vLbLct1RZOkeoO] > ' + selector); + var i = nl.length; + while ( doesMatch === false && i-- ) { + doesMatch = nl[i] === node; + } + parentNode.removeAttribute('uDom-32kXc6xEZA7o73AMB8vLbLct1RZOkeoO'); + return doesMatch; +}; + +/******************************************************************************/ + +DOMList.prototype.nodeAt = function(i) { + return this.nodes[i] || null; +}; + +DOMList.prototype.at = function(i) { + return addNodeToList(new DOMList(), this.nodes[i]); +}; + +/******************************************************************************/ + +DOMList.prototype.toArray = function() { + return this.nodes.slice(); +}; + +/******************************************************************************/ + +DOMList.prototype.pop = function() { + return addNodeToList(new DOMList(), this.nodes.pop()); +}; + +/******************************************************************************/ + +DOMList.prototype.forEach = function(fn) { + var n = this.nodes.length; + for ( var i = 0; i < n; i++ ) { + fn(this.at(i), i); + } + return this; +}; + +/******************************************************************************/ + +DOMList.prototype.subset = function(i, l) { + var r = new DOMList(); + var n = l !== undefined ? l : this.nodes.length; + var j = Math.min(i + n, this.nodes.length); + if ( i < j ) { + r.nodes = this.nodes.slice(i, j); + } + return r; +}; + +/******************************************************************************/ + +DOMList.prototype.first = function() { + return this.subset(0, 1); +}; + +/******************************************************************************/ + +DOMList.prototype.next = function(selector) { + var r = new DOMList(); + var n = this.nodes.length; + var node; + for ( var i = 0; i < n; i++ ) { + node = this.nodes[i]; + while ( node.nextSibling !== null ) { + node = node.nextSibling; + if ( node.nodeType !== 1 ) { + continue; + } + if ( doesMatchSelector(node, selector) === false ) { + continue; + } + addNodeToList(r, node); + break; + } + } + return r; +}; + +/******************************************************************************/ + +DOMList.prototype.parent = function() { + var r = new DOMList(); + if ( this.nodes.length ) { + addNodeToList(r, this.nodes[0].parentNode); + } + return r; +}; + +/******************************************************************************/ + +DOMList.prototype.filter = function(filter) { + var r = new DOMList(); + var filterFunc; + if ( typeof filter === 'string' ) { + filterFunc = function() { + return doesMatchSelector(this, filter); + }; + } else if ( typeof filter === 'function' ) { + filterFunc = filter; + } else { + filterFunc = function(){ + return true; + }; + } + var n = this.nodes.length; + var node; + for ( var i = 0; i < n; i++ ) { + node = this.nodes[i]; + if ( filterFunc.apply(node) ) { + addNodeToList(r, node); + } + } + return r; +}; + +/******************************************************************************/ + +// TODO: Avoid possible duplicates + +DOMList.prototype.ancestors = function(selector) { + var r = new DOMList(); + var n = this.nodes.length; + var node; + for ( var i = 0; i < n; i++ ) { + node = this.nodes[i].parentNode; + while ( node ) { + if ( doesMatchSelector(node, selector) ) { + addNodeToList(r, node); + } + node = node.parentNode; + } + } + return r; +}; + +/******************************************************************************/ + +DOMList.prototype.descendants = function(selector) { + var r = new DOMList(); + var n = this.nodes.length; + var nl; + for ( var i = 0; i < n; i++ ) { + nl = this.nodes[i].querySelectorAll(selector); + addNodeListToList(r, nl); + } + return r; +}; + +/******************************************************************************/ + +DOMList.prototype.contents = function() { + var r = new DOMList(); + var cnodes, cn, ci; + var n = this.nodes.length; + for ( var i = 0; i < n; i++ ) { + cnodes = this.nodes[i].childNodes; + cn = cnodes.length; + for ( ci = 0; ci < cn; ci++ ) { + addNodeToList(r, cnodes.item(ci)); + } + } + return r; +}; + +/******************************************************************************/ + +DOMList.prototype.remove = function() { + var cn, p; + var i = this.nodes.length; + while ( i-- ) { + cn = this.nodes[i]; + if ( (p = cn.parentNode) ) { + p.removeChild(cn); + } + } + return this; +}; + +DOMList.prototype.detach = DOMList.prototype.remove; + +/******************************************************************************/ + +DOMList.prototype.empty = function() { + var node; + var i = this.nodes.length; + while ( i-- ) { + node = this.nodes[i]; + while ( node.firstChild ) { + node.removeChild(node.firstChild); + } + } + return this; +}; + +/******************************************************************************/ + +DOMList.prototype.append = function(selector, context) { + var p = this.nodes[0]; + if ( p ) { + var c = DOMListFactory(selector, context); + var n = c.nodes.length; + for ( var i = 0; i < n; i++ ) { + p.appendChild(c.nodes[i]); + } + } + return this; +}; + +/******************************************************************************/ + +DOMList.prototype.prepend = function(selector, context) { + var p = this.nodes[0]; + if ( p ) { + var c = DOMListFactory(selector, context); + var i = c.nodes.length; + while ( i-- ) { + p.insertBefore(c.nodes[i], p.firstChild); + } + } + return this; +}; + +/******************************************************************************/ + +DOMList.prototype.appendTo = function(selector, context) { + var p = selector instanceof DOMListFactory ? selector : DOMListFactory(selector, context); + var n = p.length; + for ( var i = 0; i < n; i++ ) { + p.nodes[0].appendChild(this.nodes[i]); + } + return this; +}; + +/******************************************************************************/ + +DOMList.prototype.insertAfter = function(selector, context) { + if ( this.nodes.length === 0 ) { + return this; + } + var p = this.nodes[0].parentNode; + if ( !p ) { + return this; + } + var c = DOMListFactory(selector, context); + var n = c.nodes.length; + for ( var i = 0; i < n; i++ ) { + p.appendChild(c.nodes[i]); + } + return this; +}; + +/******************************************************************************/ + +DOMList.prototype.insertBefore = function(selector, context) { + if ( this.nodes.length === 0 ) { + return this; + } + var referenceNodes = DOMListFactory(selector, context); + if ( referenceNodes.nodes.length === 0 ) { + return this; + } + var referenceNode = referenceNodes.nodes[0]; + var parentNode = referenceNode.parentNode; + if ( !parentNode ) { + return this; + } + var n = this.nodes.length; + for ( var i = 0; i < n; i++ ) { + parentNode.insertBefore(this.nodes[i], referenceNode); + } + return this; +}; + +/******************************************************************************/ + +DOMList.prototype.clone = function(notDeep) { + var r = new DOMList(); + var n = this.nodes.length; + for ( var i = 0; i < n; i++ ) { + addNodeToList(r, this.nodes[i].cloneNode(!notDeep)); + } + return r; +}; + +/******************************************************************************/ + +DOMList.prototype.nthOfType = function() { + if ( this.nodes.length === 0 ) { + return 0; + } + var node = this.nodes[0]; + var tagName = node.tagName; + var i = 1; + while ( node.previousElementSibling !== null ) { + node = node.previousElementSibling; + if ( typeof node.tagName !== 'string' ) { + continue; + } + if ( node.tagName !== tagName ) { + continue; + } + i++; + } + return i; +}; + +/******************************************************************************/ + +DOMList.prototype.attr = function(attr, value) { + var i = this.nodes.length; + if ( value === undefined && typeof attr !== 'object' ) { + return i ? this.nodes[0].getAttribute(attr) : undefined; + } + if ( typeof attr === 'object' ) { + var attrNames = Object.keys(attr); + var node, j, attrName; + while ( i-- ) { + node = this.nodes[i]; + j = attrNames.length; + while ( j-- ) { + attrName = attrNames[j]; + node.setAttribute(attrName, attr[attrName]); + } + } + } else { + while ( i-- ) { + this.nodes[i].setAttribute(attr, value); + } + } + return this; +}; + +/******************************************************************************/ + +DOMList.prototype.prop = function(prop, value) { + var i = this.nodes.length; + if ( value === undefined ) { + return i !== 0 ? this.nodes[0][prop] : undefined; + } + while ( i-- ) { + this.nodes[i][prop] = value; + } + return this; +}; + +/******************************************************************************/ + +DOMList.prototype.css = function(prop, value) { + var i = this.nodes.length; + if ( value === undefined ) { + return i ? this.nodes[0].style[prop] : undefined; + } + if ( value !== '' ) { + while ( i-- ) { + this.nodes[i].style.setProperty(prop, value); + } + return this; + } + while ( i-- ) { + this.nodes[i].style.removeProperty(prop); + } + return this; +}; + +/******************************************************************************/ + +DOMList.prototype.val = function(value) { + return this.prop('value', value); +}; + +/******************************************************************************/ + +DOMList.prototype.html = function(html) { + var i = this.nodes.length; + if ( html === undefined ) { + return i ? this.nodes[0].innerHTML : ''; + } + while ( i-- ) { + vAPI.insertHTML(this.nodes[i], html); + } + return this; +}; + +/******************************************************************************/ + +DOMList.prototype.text = function(text) { + var i = this.nodes.length; + if ( text === undefined ) { + return i ? this.nodes[0].textContent : ''; + } + while ( i-- ) { + this.nodes[i].textContent = text; + } + return this; +}; + +/******************************************************************************/ + +var toggleClass = function(node, className, targetState) { + var tokenList = node.classList; + if ( tokenList instanceof DOMTokenList === false ) { + return; + } + var currentState = tokenList.contains(className); + var newState = targetState; + if ( newState === undefined ) { + newState = !currentState; + } + if ( newState === currentState ) { + return; + } + tokenList.toggle(className, newState); +}; + +/******************************************************************************/ + +DOMList.prototype.hasClass = function(className) { + if ( !this.nodes.length ) { + return false; + } + var tokenList = this.nodes[0].classList; + return tokenList instanceof DOMTokenList && + tokenList.contains(className); +}; +DOMList.prototype.hasClassName = DOMList.prototype.hasClass; + +DOMList.prototype.addClass = function(className) { + return this.toggleClass(className, true); +}; + +DOMList.prototype.removeClass = function(className) { + if ( className !== undefined ) { + return this.toggleClass(className, false); + } + var i = this.nodes.length; + while ( i-- ) { + this.nodes[i].className = ''; + } + return this; +}; + +/******************************************************************************/ + +DOMList.prototype.toggleClass = function(className, targetState) { + if ( className.indexOf(' ') !== -1 ) { + return this.toggleClasses(className, targetState); + } + var i = this.nodes.length; + while ( i-- ) { + toggleClass(this.nodes[i], className, targetState); + } + return this; +}; + +/******************************************************************************/ + +DOMList.prototype.toggleClasses = function(classNames, targetState) { + var tokens = classNames.split(/\s+/); + var i = this.nodes.length; + var node, j; + while ( i-- ) { + node = this.nodes[i]; + j = tokens.length; + while ( j-- ) { + toggleClass(node, tokens[j], targetState); + } + } + return this; +}; + +/******************************************************************************/ + +var listenerEntries = []; + +var ListenerEntry = function(target, type, capture, callback) { + this.target = target; + this.type = type; + this.capture = capture; + this.callback = callback; + target.addEventListener(type, callback, capture); +}; + +ListenerEntry.prototype.dispose = function() { + this.target.removeEventListener(this.type, this.callback, this.capture); + this.target = null; + this.callback = null; +}; + +/******************************************************************************/ + +var makeEventHandler = function(selector, callback) { + return function(event) { + var dispatcher = event.currentTarget; + if ( !dispatcher || typeof dispatcher.querySelectorAll !== 'function' ) { + return; + } + var receiver = event.target; + if ( nodeInNodeList(receiver, dispatcher.querySelectorAll(selector)) ) { + callback.call(receiver, event); + } + }; +}; + +DOMList.prototype.on = function(etype, selector, callback) { + if ( typeof selector === 'function' ) { + callback = selector; + selector = undefined; + } else { + callback = makeEventHandler(selector, callback); + } + + var i = this.nodes.length; + while ( i-- ) { + listenerEntries.push(new ListenerEntry(this.nodes[i], etype, selector !== undefined, callback)); + } + return this; +}; + +/******************************************************************************/ + +// TODO: Won't work for delegated handlers. Need to figure +// what needs to be done. + +DOMList.prototype.off = function(evtype, callback) { + var i = this.nodes.length; + while ( i-- ) { + this.nodes[i].removeEventListener(evtype, callback); + } + return this; +}; + +/******************************************************************************/ + +DOMList.prototype.trigger = function(etype) { + var ev = new CustomEvent(etype); + var i = this.nodes.length; + while ( i-- ) { + this.nodes[i].dispatchEvent(ev); + } + return this; +}; + +/******************************************************************************/ + +// Cleanup + +var onBeforeUnload = function() { + var entry; + while ( (entry = listenerEntries.pop()) ) { + entry.dispose(); + } + window.removeEventListener('beforeunload', onBeforeUnload); +}; + +window.addEventListener('beforeunload', onBeforeUnload); + +/******************************************************************************/ + +return DOMListFactory; + +})(); diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/uritools.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/uritools.js new file mode 100644 index 0000000..9885112 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/uritools.js @@ -0,0 +1,417 @@ +/******************************************************************************* + + uMatrix - a browser extension to black/white list requests. + Copyright (C) 2014-2018 Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uMatrix +*/ + +/* global publicSuffixList, punycode */ + +'use strict'; + +/******************************************************************************* + +RFC 3986 as reference: http://tools.ietf.org/html/rfc3986#appendix-A + +Naming convention from https://en.wikipedia.org/wiki/URI_scheme#Examples + +*/ + +/******************************************************************************/ + +µMatrix.URI = (function() { + +/******************************************************************************/ + +// Favorite regex tool: http://regex101.com/ + +// Ref: +// I removed redundant capture groups: capture less = peform faster. See +// +// Performance improvements welcomed. +// jsperf: +var reRFC3986 = /^([^:\/?#]+:)?(\/\/[^\/?#]*)?([^?#]*)(\?[^#]*)?(#.*)?/; + +// Derived +var reSchemeFromURI = /^[^:\/?#]+:/; +var reAuthorityFromURI = /^(?:[^:\/?#]+:)?(\/\/[^\/?#]+)/; +var reCommonHostnameFromURL = /^https?:\/\/([0-9a-z_][0-9a-z._-]*[0-9a-z])\//; +var reMustNormalizeHostname = /[^0-9a-z._-]/; + +// These are to parse authority field, not parsed by above official regex +// IPv6 is seen as an exception: a non-compatible IPv6 is first tried, and +// if it fails, the IPv6 compatible regex istr used. This helps +// peformance by avoiding the use of a too complicated regex first. + +// https://github.com/gorhill/httpswitchboard/issues/211 +// "While a hostname may not contain other characters, such as the +// "underscore character (_), other DNS names may contain the underscore" +var reHostPortFromAuthority = /^(?:[^@]*@)?([^:]*)(:\d*)?$/; +var reIPv6PortFromAuthority = /^(?:[^@]*@)?(\[[0-9a-f:]*\])(:\d*)?$/i; + +var reHostFromNakedAuthority = /^[0-9a-z._-]+[0-9a-z]$/i; +var reHostFromAuthority = /^(?:[^@]*@)?([^:]+)(?::\d*)?$/; +var reIPv6FromAuthority = /^(?:[^@]*@)?(\[[0-9a-f:]+\])(?::\d*)?$/i; + +// Coarse (but fast) tests +var reIPAddressNaive = /^\d+\.\d+\.\d+\.\d+$|^\[[\da-zA-Z:]+\]$/; + +// Accurate tests +// Source.: http://stackoverflow.com/questions/5284147/validating-ipv4-addresses-with-regexp/5284410#5284410 +//var reIPv4 = /^((25[0-5]|2[0-4]\d|[01]?\d\d?)(\.|$)){4}/; + +// Source: http://forums.intermapper.com/viewtopic.php?p=1096#1096 +//var reIPv6 = /^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/; + +/******************************************************************************/ + +var reset = function(o) { + o.scheme = ''; + o.hostname = ''; + o._ipv4 = undefined; + o._ipv6 = undefined; + o.port = ''; + o.path = ''; + o.query = ''; + o.fragment = ''; + return o; +}; + +var resetAuthority = function(o) { + o.hostname = ''; + o._ipv4 = undefined; + o._ipv6 = undefined; + o.port = ''; + return o; +}; + +/******************************************************************************/ + +// This will be exported + +var URI = { + scheme: '', + authority: '', + hostname: '', + _ipv4: undefined, + _ipv6: undefined, + port: '', + domain: undefined, + path: '', + query: '', + fragment: '', + schemeBit: (1 << 0), + userBit: (1 << 1), + passwordBit: (1 << 2), + hostnameBit: (1 << 3), + portBit: (1 << 4), + pathBit: (1 << 5), + queryBit: (1 << 6), + fragmentBit: (1 << 7), + allBits: (0xFFFF) +}; + +URI.authorityBit = (URI.userBit | URI.passwordBit | URI.hostnameBit | URI.portBit); +URI.normalizeBits = (URI.schemeBit | URI.hostnameBit | URI.pathBit | URI.queryBit); + +/******************************************************************************/ + +// See: https://en.wikipedia.org/wiki/URI_scheme#Examples +// URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ] +// +// foo://example.com:8042/over/there?name=ferret#nose +// \_/ \______________/\_________/ \_________/ \__/ +// | | | | | +// scheme authority path query fragment +// | _____________________|__ +// / \ / \ +// urn:example:animal:ferret:nose + +URI.set = function(uri) { + if ( uri === undefined ) { + return reset(URI); + } + var matches = reRFC3986.exec(uri); + if ( !matches ) { + return reset(URI); + } + this.scheme = matches[1] !== undefined ? matches[1].slice(0, -1) : ''; + this.authority = matches[2] !== undefined ? matches[2].slice(2).toLowerCase() : ''; + this.path = matches[3] !== undefined ? matches[3] : ''; + + // + // "In general, a URI that uses the generic syntax for authority + // "with an empty path should be normalized to a path of '/'." + if ( this.authority !== '' && this.path === '' ) { + this.path = '/'; + } + this.query = matches[4] !== undefined ? matches[4].slice(1) : ''; + this.fragment = matches[5] !== undefined ? matches[5].slice(1) : ''; + + // Assume very simple authority, i.e. just a hostname (highest likelihood + // case for µMatrix) + if ( reHostFromNakedAuthority.test(this.authority) ) { + this.hostname = this.authority; + this.port = ''; + return this; + } + // Authority contains more than just a hostname + matches = reHostPortFromAuthority.exec(this.authority); + if ( !matches ) { + matches = reIPv6PortFromAuthority.exec(this.authority); + if ( !matches ) { + return resetAuthority(URI); + } + } + this.hostname = matches[1] !== undefined ? matches[1] : ''; + // http://en.wikipedia.org/wiki/FQDN + if ( this.hostname.slice(-1) === '.' ) { + this.hostname = this.hostname.slice(0, -1); + } + this.port = matches[2] !== undefined ? matches[2].slice(1) : ''; + return this; +}; + +/******************************************************************************/ + +// URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ] +// +// foo://example.com:8042/over/there?name=ferret#nose +// \_/ \______________/\_________/ \_________/ \__/ +// | | | | | +// scheme authority path query fragment +// | _____________________|__ +// / \ / \ +// urn:example:animal:ferret:nose + +URI.assemble = function(bits) { + if ( bits === undefined ) { + bits = this.allBits; + } + var s = []; + if ( this.scheme && (bits & this.schemeBit) ) { + s.push(this.scheme, ':'); + } + if ( this.hostname && (bits & this.hostnameBit) ) { + s.push('//', this.hostname); + } + if ( this.port && (bits & this.portBit) ) { + s.push(':', this.port); + } + if ( this.path && (bits & this.pathBit) ) { + s.push(this.path); + } + if ( this.query && (bits & this.queryBit) ) { + s.push('?', this.query); + } + if ( this.fragment && (bits & this.fragmentBit) ) { + s.push('#', this.fragment); + } + return s.join(''); +}; + +/******************************************************************************/ + +URI.schemeFromURI = function(uri) { + var matches = reSchemeFromURI.exec(uri); + if ( matches === null ) { + return ''; + } + return matches[0].slice(0, -1).toLowerCase(); +}; + +/******************************************************************************/ + +const reNetworkScheme = /^(?:https?|wss?|ftps?)\b/; + +URI.isNetworkScheme = function(scheme) { + return reNetworkScheme.test(scheme); +}; + +/******************************************************************************/ + +URI.isSecureScheme = function(scheme) { + return this.reSecureScheme.test(scheme); +}; + +URI.reSecureScheme = /^(?:https|wss|ftps)\b/; + +/******************************************************************************/ + +// The most used function, so it better be fast. + +// https://github.com/gorhill/uBlock/issues/1559 +// See http://en.wikipedia.org/wiki/FQDN +// https://bugzilla.mozilla.org/show_bug.cgi?id=1360285 +// Revisit punycode dependency when above issue is fixed in Firefox. + +URI.hostnameFromURI = function(uri) { + var matches = reCommonHostnameFromURL.exec(uri); + if ( matches !== null ) { return matches[1]; } + matches = reAuthorityFromURI.exec(uri); + if ( matches === null ) { return ''; } + var authority = matches[1].slice(2); + // Assume very simple authority (most common case for µBlock) + if ( reHostFromNakedAuthority.test(authority) ) { + return authority.toLowerCase(); + } + matches = reHostFromAuthority.exec(authority); + if ( matches === null ) { + matches = reIPv6FromAuthority.exec(authority); + if ( matches === null ) { return ''; } + } + var hostname = matches[1]; + while ( hostname.endsWith('.') ) { + hostname = hostname.slice(0, -1); + } + if ( reMustNormalizeHostname.test(hostname) ) { + hostname = punycode.toASCII(hostname.toLowerCase()); + } + return hostname; +}; + +/******************************************************************************/ + +URI.domainFromHostname = function(hostname) { + // Try to skip looking up the PSL database + var entry = domainCache.get(hostname); + if ( entry !== undefined ) { + entry.tstamp = Date.now(); + return entry.domain; + } + // Meh.. will have to search it + if ( reIPAddressNaive.test(hostname) === false ) { + return domainCacheAdd(hostname, psl.getDomain(hostname)); + } + return domainCacheAdd(hostname, hostname); +}; + +// It is expected that there is higher-scoped `publicSuffixList` lingering +// somewhere. Cache it. See . +var psl = publicSuffixList; + +/******************************************************************************/ + + // Trying to alleviate the worries of looking up too often the domain name from +// a hostname. With a cache, uBlock benefits given that it deals with a +// specific set of hostnames within a narrow time span -- in other words, I +// believe probability of cache hit are high in uBlock. + +var domainCache = new Map(); +var domainCacheCountLowWaterMark = 75; +var domainCacheCountHighWaterMark = 100; +var domainCacheEntryJunkyard = []; +var domainCacheEntryJunkyardMax = domainCacheCountHighWaterMark - domainCacheCountLowWaterMark; + +var DomainCacheEntry = function(domain) { + this.init(domain); +}; + +DomainCacheEntry.prototype.init = function(domain) { + this.domain = domain; + this.tstamp = Date.now(); + return this; +}; + +DomainCacheEntry.prototype.dispose = function() { + this.domain = ''; + if ( domainCacheEntryJunkyard.length < domainCacheEntryJunkyardMax ) { + domainCacheEntryJunkyard.push(this); + } +}; + +var domainCacheEntryFactory = function(domain) { + var entry = domainCacheEntryJunkyard.pop(); + if ( entry ) { + return entry.init(domain); + } + return new DomainCacheEntry(domain); +}; + +var domainCacheAdd = function(hostname, domain) { + var entry = domainCache.get(hostname); + if ( entry !== undefined ) { + entry.tstamp = Date.now(); + } else { + domainCache.set(hostname, domainCacheEntryFactory(domain)); + if ( domainCache.size === domainCacheCountHighWaterMark ) { + domainCachePrune(); + } + } + return domain; +}; + +var domainCacheEntrySort = function(a, b) { + return domainCache.get(b).tstamp - domainCache.get(a).tstamp; +}; + +var domainCachePrune = function() { + var hostnames = Array.from(domainCache.keys()) + .sort(domainCacheEntrySort) + .slice(domainCacheCountLowWaterMark); + var i = hostnames.length; + var hostname; + while ( i-- ) { + hostname = hostnames[i]; + domainCache.get(hostname).dispose(); + domainCache.delete(hostname); + } +}; + +window.addEventListener('publicSuffixList', function() { + domainCache.clear(); +}); + +/******************************************************************************/ + +URI.domainFromURI = function(uri) { + if ( !uri ) { + return ''; + } + return this.domainFromHostname(this.hostnameFromURI(uri)); +}; + +/******************************************************************************/ + +// Normalize the way µMatrix expects it + +URI.normalizedURI = function() { + // Will be removed: + // - port + // - user id/password + // - fragment + return this.assemble(this.normalizeBits); +}; + +/******************************************************************************/ + +URI.toString = function() { + return this.assemble(); +}; + +/******************************************************************************/ + +// Export + +return URI; + +/******************************************************************************/ + +})(); + +/******************************************************************************/ + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/user-rules.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/user-rules.js new file mode 100644 index 0000000..8246d4b --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/user-rules.js @@ -0,0 +1,536 @@ +/******************************************************************************* + + uMatrix - a browser extension to block requests. + Copyright (C) 2014-2018 Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uMatrix +*/ + +/* global diff_match_patch, CodeMirror, uDom */ + +'use strict'; + +/******************************************************************************/ + +(function() { + +/******************************************************************************/ + +// Move to dashboard-common.js if needed + +(function() { + let timer; + let resize = function() { + timer = undefined; + let child = document.querySelector('.vfill-available'); + if ( child === null ) { return; } + let prect = document.documentElement.getBoundingClientRect(); + let crect = child.getBoundingClientRect(); + let cssHeight = Math.max(prect.bottom - crect.top, 80) + 'px'; + if ( child.style.height !== cssHeight ) { + child.style.height = cssHeight; + if ( typeof mergeView !== 'undefined' ) { + mergeView.leftOriginal().refresh(); + mergeView.editor().refresh(); + } + } + }; + let resizeAsync = function(delay) { + if ( timer === undefined ) { + timer = vAPI.setTimeout( + resize, + typeof delay === 'number' ? delay : 66 + ); + } + }; + window.addEventListener('resize', resizeAsync); + var observer = new MutationObserver(resizeAsync); + observer.observe(document.querySelector('.body'), { + childList: true, + subtree: true + }); + resizeAsync(1); +})(); + +/******************************************************************************/ + +var mergeView = new CodeMirror.MergeView( + document.querySelector('.codeMirrorMergeContainer'), + { + allowEditingOriginals: true, + connect: 'align', + inputStyle: 'contenteditable', + lineNumbers: true, + lineWrapping: false, + origLeft: '', + revertButtons: true, + value: '' + } +); +mergeView.editor().setOption('styleActiveLine', true); +mergeView.editor().setOption('lineNumbers', false); +mergeView.leftOriginal().setOption('readOnly', 'nocursor'); + +var unfilteredRules = { + orig: { doc: mergeView.leftOriginal(), rules: [] }, + edit: { doc: mergeView.editor(), rules: [] } +}; + +var cleanEditToken = 0; +var cleanEditText = ''; + +var differ; + +/******************************************************************************/ + +// Borrowed from... +// https://github.com/codemirror/CodeMirror/blob/3e1bb5fff682f8f6cbfaef0e56c61d62403d4798/addon/search/search.js#L22 +// ... and modified as needed. + +var updateOverlay = (function() { + var reFilter; + var mode = { + token: function(stream) { + if ( reFilter !== undefined ) { + reFilter.lastIndex = stream.pos; + var match = reFilter.exec(stream.string); + if ( match !== null ) { + if ( match.index === stream.pos ) { + stream.pos += match[0].length || 1; + return 'searching'; + } + stream.pos = match.index; + return; + } + } + stream.skipToEnd(); + } + }; + return function(filter) { + reFilter = typeof filter === 'string' && filter !== '' ? + new RegExp(filter.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'gi') : + undefined; + return mode; + }; +})(); + +/******************************************************************************/ + +// Incrementally update text in a CodeMirror editor for best user experience: +// - Scroll position preserved +// - Minimum amount of text updated + +var rulesToDoc = function(clearHistory) { + for ( var key in unfilteredRules ) { + if ( unfilteredRules.hasOwnProperty(key) === false ) { continue; } + var doc = unfilteredRules[key].doc; + var rules = filterRules(key); + if ( doc.lineCount() === 1 && doc.getValue() === '' || rules.length === 0 ) { + doc.setValue(rules.length !== 0 ? rules.join('\n') : ''); + continue; + } + if ( differ === undefined ) { differ = new diff_match_patch(); } + var beforeText = doc.getValue(); + var afterText = rules.join('\n'); + var diffs = differ.diff_main(beforeText, afterText); + doc.startOperation(); + var i = diffs.length, + iedit = beforeText.length; + while ( i-- ) { + var diff = diffs[i]; + if ( diff[0] === 0 ) { + iedit -= diff[1].length; + continue; + } + var end = doc.posFromIndex(iedit); + if ( diff[0] === 1 ) { + doc.replaceRange(diff[1], end, end); + continue; + } + /* diff[0] === -1 */ + iedit -= diff[1].length; + var beg = doc.posFromIndex(iedit); + doc.replaceRange('', beg, end); + } + doc.endOperation(); + } + cleanEditText = mergeView.editor().getValue().trim(); + cleanEditToken = mergeView.editor().changeGeneration(); + if ( clearHistory ) { + mergeView.editor().clearHistory(); + } +}; + +/******************************************************************************/ + +var filterRules = function(key) { + var rules = unfilteredRules[key].rules; + var filter = uDom('#ruleFilter input').val(); + if ( filter !== '' ) { + rules = rules.slice(); + var i = rules.length; + while ( i-- ) { + if ( rules[i].indexOf(filter) === -1 ) { + rules.splice(i, 1); + } + } + } + return rules; +}; + +/******************************************************************************/ + +var renderRules = (function() { + var firstVisit = true; + + return function(details) { + unfilteredRules.orig.rules = details.permanentRules.sort(directiveSort); + unfilteredRules.edit.rules = details.temporaryRules.sort(directiveSort); + rulesToDoc(firstVisit); + if ( firstVisit ) { + firstVisit = false; + mergeView.editor().execCommand('goNextDiff'); + } + onTextChanged(true); + }; +})(); + +// Switches before, rules after +var directiveSort = function(a, b) { + var aIsSwitch = a.indexOf(': ') !== -1; + var bIsSwitch = b.indexOf(': ') !== -1; + if ( aIsSwitch === bIsSwitch ) { + return a.localeCompare(b); + } + return aIsSwitch ? -1 : 1; +}; + +/******************************************************************************/ + +var applyDiff = function(permanent, toAdd, toRemove) { + vAPI.messaging.send( + 'user-rules.js', + { + what: 'modifyRuleset', + permanent: permanent, + toAdd: toAdd, + toRemove: toRemove + }, + renderRules + ); +}; + +/******************************************************************************/ + +// CodeMirror quirk: sometimes fromStart.ch and/or toStart.ch is undefined. +// When this happens, use 0. + +mergeView.options.revertChunk = function( + mv, + from, fromStart, fromEnd, + to, toStart, toEnd +) { + // https://github.com/gorhill/uBlock/issues/3611 + if ( document.body.getAttribute('dir') === 'rtl' ) { + var tmp; + tmp = from; from = to; to = tmp; + tmp = fromStart; fromStart = toStart; toStart = tmp; + tmp = fromEnd; fromEnd = toEnd; toEnd = tmp; + } + if ( typeof fromStart.ch !== 'number' ) { fromStart.ch = 0; } + if ( fromEnd.ch !== 0 ) { fromEnd.line += 1; } + var toAdd = from.getRange( + { line: fromStart.line, ch: 0 }, + { line: fromEnd.line, ch: 0 } + ); + if ( typeof toStart.ch !== 'number' ) { toStart.ch = 0; } + if ( toEnd.ch !== 0 ) { toEnd.line += 1; } + var toRemove = to.getRange( + { line: toStart.line, ch: 0 }, + { line: toEnd.line, ch: 0 } + ); + applyDiff(from === mv.editor(), toAdd, toRemove); +}; + +/******************************************************************************/ + +// https://github.com/chrisaljoudi/uBlock/issues/757 +// Support RequestPolicy rule syntax + +var fromRequestPolicy = function(content) { + var matches = /\[origins-to-destinations\]([^\[]+)/.exec(content); + if ( matches === null || matches.length !== 2 ) { return; } + return matches[1].trim() + .replace(/\|/g, ' ') + .replace(/\n/g, ' * allow\n'); +}; + +/******************************************************************************/ + +// https://github.com/gorhill/uMatrix/issues/270 + +var fromNoScript = function(content) { + var noscript = null; + try { + noscript = JSON.parse(content); + } catch (e) { + } + if ( + noscript === null || + typeof noscript !== 'object' || + typeof noscript.prefs !== 'object' || + typeof noscript.prefs.clearClick === 'undefined' || + typeof noscript.whitelist !== 'string' || + typeof noscript.V !== 'string' + ) { + return; + } + var out = new Set(); + var reBad = /[a-z]+:\w*$/; + var reURL = /[a-z]+:\/\/([0-9a-z.-]+)/; + var directives = noscript.whitelist.split(/\s+/); + var i = directives.length; + var directive, matches; + while ( i-- ) { + directive = directives[i].trim(); + if ( directive === '' ) { continue; } + if ( reBad.test(directive) ) { continue; } + matches = reURL.exec(directive); + if ( matches !== null ) { + directive = matches[1]; + } + out.add('* ' + directive + ' * allow'); + out.add('* ' + directive + ' script allow'); + out.add('* ' + directive + ' frame allow'); + } + return Array.from(out).join('\n'); +}; + +/******************************************************************************/ + +var handleImportFilePicker = function() { + var fileReaderOnLoadHandler = function() { + if ( typeof this.result !== 'string' || this.result === '' ) { + return; + } + var result = fromRequestPolicy(this.result); + if ( result === undefined ) { + result = fromNoScript(this.result); + if ( result === undefined ) { + result = this.result; + } + } + if ( this.result === '' ) { return; } + applyDiff(false, result, ''); + }; + var file = this.files[0]; + if ( file === undefined || file.name === '' ) { return; } + if ( file.type.indexOf('text') !== 0 && file.type !== 'application/json') { + return; + } + var fr = new FileReader(); + fr.onload = fileReaderOnLoadHandler; + fr.readAsText(file); +}; + +/******************************************************************************/ + +var startImportFilePicker = function() { + var input = document.getElementById('importFilePicker'); + // Reset to empty string, this will ensure an change event is properly + // triggered if the user pick a file, even if it is the same as the last + // one picked. + input.value = ''; + input.click(); +}; + +/******************************************************************************/ + +function exportUserRulesToFile() { + vAPI.download({ + url: 'data:text/plain,' + encodeURIComponent( + mergeView.leftOriginal().getValue().trim() + '\n' + ), + filename: uDom('[data-i18n="userRulesDefaultFileName"]').text() + }); +} + +/******************************************************************************/ + +var onFilterChanged = (function() { + var timer, + overlay = null, + last = ''; + + var process = function() { + timer = undefined; + if ( mergeView.editor().isClean(cleanEditToken) === false ) { return; } + var filter = uDom('#ruleFilter input').val(); + if ( filter === last ) { return; } + last = filter; + if ( overlay !== null ) { + mergeView.leftOriginal().removeOverlay(overlay); + mergeView.editor().removeOverlay(overlay); + overlay = null; + } + if ( filter !== '' ) { + overlay = updateOverlay(filter); + mergeView.leftOriginal().addOverlay(overlay); + mergeView.editor().addOverlay(overlay); + } + rulesToDoc(true); + }; + + return function() { + if ( timer !== undefined ) { clearTimeout(timer); } + timer = vAPI.setTimeout(process, 773); + }; +})(); + +/******************************************************************************/ + +var onTextChanged = (function() { + var timer; + + var process = function(now) { + timer = undefined; + var isClean = mergeView.editor().isClean(cleanEditToken); + var diff = document.getElementById('diff'); + if ( + now && + isClean === false && + mergeView.editor().getValue().trim() === cleanEditText + ) { + cleanEditToken = mergeView.editor().changeGeneration(); + isClean = true; + } + diff.classList.toggle('editing', isClean === false); + diff.classList.toggle('dirty', mergeView.leftChunks().length !== 0); + var input = document.querySelector('#ruleFilter input'); + if ( isClean ) { + input.removeAttribute('disabled'); + CodeMirror.commands.save = undefined; + } else { + input.setAttribute('disabled', ''); + CodeMirror.commands.save = editSaveHandler; + } + }; + + return function(now) { + if ( timer !== undefined ) { clearTimeout(timer); } + timer = now ? process(now) : vAPI.setTimeout(process, 57); + }; +})(); + +/******************************************************************************/ + +var revertAllHandler = function() { + var toAdd = [], toRemove = []; + var left = mergeView.leftOriginal(), + edit = mergeView.editor(); + for ( var chunk of mergeView.leftChunks() ) { + var addedLines = left.getRange( + { line: chunk.origFrom, ch: 0 }, + { line: chunk.origTo, ch: 0 } + ); + var removedLines = edit.getRange( + { line: chunk.editFrom, ch: 0 }, + { line: chunk.editTo, ch: 0 } + ); + toAdd.push(addedLines.trim()); + toRemove.push(removedLines.trim()); + } + applyDiff(false, toAdd.join('\n'), toRemove.join('\n')); +}; + +/******************************************************************************/ + +var commitAllHandler = function() { + var toAdd = [], toRemove = []; + var left = mergeView.leftOriginal(), + edit = mergeView.editor(); + for ( var chunk of mergeView.leftChunks() ) { + var addedLines = edit.getRange( + { line: chunk.editFrom, ch: 0 }, + { line: chunk.editTo, ch: 0 } + ); + var removedLines = left.getRange( + { line: chunk.origFrom, ch: 0 }, + { line: chunk.origTo, ch: 0 } + ); + toAdd.push(addedLines.trim()); + toRemove.push(removedLines.trim()); + } + applyDiff(true, toAdd.join('\n'), toRemove.join('\n')); +}; + +/******************************************************************************/ + +var editSaveHandler = function() { + var editor = mergeView.editor(); + var editText = editor.getValue().trim(); + if ( editText === cleanEditText ) { + onTextChanged(true); + return; + } + if ( differ === undefined ) { differ = new diff_match_patch(); } + var toAdd = [], toRemove = []; + var diffs = differ.diff_main(cleanEditText, editText); + for ( var diff of diffs ) { + if ( diff[0] === 1 ) { + toAdd.push(diff[1]); + } else if ( diff[0] === -1 ) { + toRemove.push(diff[1]); + } + } + applyDiff(false, toAdd.join(''), toRemove.join('')); +}; + +/******************************************************************************/ + +self.cloud.onPush = function() { + return mergeView.leftOriginal().getValue().trim(); +}; + +self.cloud.onPull = function(data, append) { + if ( typeof data !== 'string' ) { return; } + applyDiff( + false, + data, + append ? '' : mergeView.editor().getValue().trim() + ); +}; + +/******************************************************************************/ + +// Handle user interaction +uDom('#exportButton').on('click', exportUserRulesToFile); +uDom('#revertButton').on('click', revertAllHandler); +uDom('#commitButton').on('click', commitAllHandler); +uDom('#importButton').on('click', startImportFilePicker); +uDom('#importFilePicker').on('change', handleImportFilePicker); +uDom('#editSaveButton').on('click', editSaveHandler); +uDom('#ruleFilter input').on('input', onFilterChanged); + +// https://groups.google.com/forum/#!topic/codemirror/UQkTrt078Vs +mergeView.editor().on('updateDiff', function() { onTextChanged(); }); + +vAPI.messaging.send('user-rules.js', { what: 'getRuleset' }, renderRules); + +/******************************************************************************/ + +})(); + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/usersettings.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/usersettings.js new file mode 100644 index 0000000..303f4d3 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/usersettings.js @@ -0,0 +1,60 @@ +/******************************************************************************* + + uMatrix - a Chromium browser extension to black/white list requests. + Copyright (C) 2014-2018 Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uMatrix +*/ + +'use strict'; + +/******************************************************************************/ + +µMatrix.changeUserSettings = function(name, value) { + if ( typeof name !== 'string' || name === '' ) { + return; + } + + // Do not allow an unknown user setting to be created + if ( this.userSettings[name] === undefined ) { + return; + } + + if ( value === undefined ) { + return this.userSettings[name]; + } + + // Pre-change + switch ( name ) { + + default: + break; + } + + // Change + this.userSettings[name] = value; + + // Post-change + switch ( name ) { + case 'autoUpdate': + this.scheduleAssetUpdater(value === true ? 120000 : 0); + break; + default: + break; + } + + this.saveUserSettings(); +}; diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/utils.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/utils.js new file mode 100644 index 0000000..2b153dc --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/utils.js @@ -0,0 +1,109 @@ +/******************************************************************************* + + uMatrix - a Chromium browser extension to black/white list requests. + Copyright (C) 2014-2018 Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uMatrix +*/ + +'use strict'; + +/******************************************************************************/ + +µMatrix.gotoExtensionURL = function(details) { + if ( details.url.startsWith('logger-ui.html') ) { + if ( details.shiftKey ) { + this.changeUserSettings( + 'alwaysDetachLogger', + !this.userSettings.alwaysDetachLogger + ); + } + details.popup = this.userSettings.alwaysDetachLogger; + } + details.index = -1; + details.select = true; + vAPI.tabs.open(details); +}; + +/******************************************************************************/ + +µMatrix.LineIterator = function(text, offset) { + this.text = text; + this.textLen = this.text.length; + this.offset = offset || 0; +}; + +µMatrix.LineIterator.prototype = { + next: function() { + var lineEnd = this.text.indexOf('\n', this.offset); + if ( lineEnd === -1 ) { + lineEnd = this.text.indexOf('\r', this.offset); + if ( lineEnd === -1 ) { + lineEnd = this.textLen; + } + } + var line = this.text.slice(this.offset, lineEnd); + this.offset = lineEnd + 1; + return line; + }, + rewind: function() { + if ( this.offset <= 1 ) { + this.offset = 0; + return; + } + var lineEnd = this.text.lastIndexOf('\n', this.offset - 2); + if ( lineEnd !== -1 ) { + this.offset = lineEnd + 1; + } else { + lineEnd = this.text.lastIndexOf('\r', this.offset - 2); + this.offset = lineEnd !== -1 ? lineEnd + 1 : 0; + } + }, + eot: function() { + return this.offset >= this.textLen; + } +}; + +/******************************************************************************/ + +µMatrix.toMap = function(input) { + if ( input instanceof Map ) { + return input; + } + if ( Array.isArray(input) ) { + return new Map(input); + } + let out = new Map(); + if ( input instanceof Object ) { + for ( let key in input ) { + if ( input.hasOwnProperty(key) ) { + out.set(key, input[key]); + } + } + } + return out; +}; + +/******************************************************************************/ + +µMatrix.arraysIntersect = function(a1, a2) { + for ( let v of a1 ) { + if ( a2.indexOf(v) !== -1 ) { return true; } + } + return false; +}; + +/******************************************************************************/ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/vapi-background.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/vapi-background.js new file mode 100644 index 0000000..6d7485e --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/vapi-background.js @@ -0,0 +1,812 @@ +/******************************************************************************* + + uMatrix - a browser extension to block requests. + Copyright (C) 2014-2018 The uBlock Origin authors + Copyright (C) 2017-present Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uMatrix +*/ + +// For background page + +'use strict'; + +/******************************************************************************/ + +(function() { + +/******************************************************************************/ + +var vAPI = self.vAPI = self.vAPI || {}; + +var chrome = self.chrome; +var manifest = chrome.runtime.getManifest(); + +var noopFunc = function(){}; + +// https://code.google.com/p/chromium/issues/detail?id=410868#c8 +var resetLastError = function() { + void chrome.runtime.lastError; +}; + +/******************************************************************************/ + +// https://github.com/gorhill/uMatrix/issues/234 +// https://developer.chrome.com/extensions/privacy#property-network +chrome.privacy.network.networkPredictionEnabled.set({ value: false }); + +/******************************************************************************/ + +vAPI.app = { + name: manifest.name, + version: manifest.version +}; + +/******************************************************************************/ + +vAPI.app.start = function() { +}; + +/******************************************************************************/ + +vAPI.app.stop = function() { +}; + +/******************************************************************************/ + +vAPI.app.restart = function() { + chrome.runtime.reload(); +}; + +/******************************************************************************/ + +// chrome.storage.local.get(null, function(bin){ console.debug('%o', bin); }); + +vAPI.storage = chrome.storage.local; +vAPI.cacheStorage = chrome.storage.local; + +/******************************************************************************/ + +vAPI.tabs = {}; + +/******************************************************************************/ + +vAPI.isBehindTheSceneTabId = function(tabId) { + if ( typeof tabId === 'string' ) { debugger; } + return tabId < 0; +}; + +vAPI.unsetTabId = 0; +vAPI.noTabId = -1; // definitely not any existing tab +vAPI.anyTabId = -2; // one of the existing tab + +/******************************************************************************/ + +vAPI.tabs.registerListeners = function() { + var onNavigationClient = this.onNavigation || noopFunc; + var onUpdatedClient = this.onUpdated || noopFunc; + var onClosedClient = this.onClosed || noopFunc; + + // https://developer.chrome.com/extensions/webNavigation + // [onCreatedNavigationTarget ->] + // onBeforeNavigate -> + // onCommitted -> + // onDOMContentLoaded -> + // onCompleted + + // The chrome.webRequest.onBeforeRequest() won't be called for everything + // else than `http`/`https`. Thus, in such case, we will bind the tab as + // early as possible in order to increase the likelihood of a context + // properly setup if network requests are fired from within the tab. + // Example: Chromium + case #6 at + // http://raymondhill.net/ublock/popup.html + var reGoodForWebRequestAPI = /^https?:\/\//; + + var onCreatedNavigationTarget = function(details) { + //console.debug('onCreatedNavigationTarget: tab id %d = "%s"', details.tabId, details.url); + if ( reGoodForWebRequestAPI.test(details.url) ) { return; } + onNavigationClient(details); + }; + + var onUpdated = function(tabId, changeInfo, tab) { + onUpdatedClient(tabId, changeInfo, tab); + }; + + var onCommitted = function(details) { + // Important: do not call client if not top frame. + if ( details.frameId !== 0 ) { + return; + } + onNavigationClient(details); + //console.debug('onCommitted: tab id %d = "%s"', details.tabId, details.url); + }; + + var onClosed = function(tabId) { + onClosedClient(tabId); + }; + + chrome.webNavigation.onCreatedNavigationTarget.addListener(onCreatedNavigationTarget); + chrome.webNavigation.onCommitted.addListener(onCommitted); + chrome.tabs.onUpdated.addListener(onUpdated); + chrome.tabs.onRemoved.addListener(onClosed); +}; + +/******************************************************************************/ + +// tabId: null, // active tab + +vAPI.tabs.get = function(tabId, callback) { + var onTabReady = function(tab) { + resetLastError(); + callback(tab); + }; + if ( tabId !== null ) { + chrome.tabs.get(tabId, onTabReady); + return; + } + var onTabReceived = function(tabs) { + resetLastError(); + var tab = null; + if ( Array.isArray(tabs) && tabs.length !== 0 ) { + tab = tabs[0]; + } + callback(tab); + }; + chrome.tabs.query({ active: true, currentWindow: true }, onTabReceived); +}; + +/******************************************************************************/ + +// https://github.com/uBlockOrigin/uMatrix-issues/issues/9 + +vAPI.tabs.getAll = function(callback) { + chrome.tabs.query({}, callback); +}; + +/******************************************************************************/ + +// properties of the details object: +// url: 'URL', // the address that will be opened +// tabId: 1, // the tab is used if set, instead of creating a new one +// index: -1, // undefined: end of the list, -1: following tab, or after index +// active: false, // opens the tab in background - true and undefined: foreground +// select: true // if a tab is already opened with that url, then select it instead of opening a new one + +vAPI.tabs.open = function(details) { + var targetURL = details.url; + if ( typeof targetURL !== 'string' || targetURL === '' ) { + return null; + } + // extension pages + if ( /^[\w-]{2,}:/.test(targetURL) !== true ) { + targetURL = vAPI.getURL(targetURL); + } + + // dealing with Chrome's asynchronous API + var wrapper = function() { + if ( details.active === undefined ) { + details.active = true; + } + + var subWrapper = function() { + var _details = { + url: targetURL, + active: !!details.active + }; + + // Opening a tab from incognito window won't focus the window + // in which the tab was opened + var focusWindow = function(tab) { + if ( tab.active ) { + chrome.windows.update(tab.windowId, { focused: true }); + } + }; + + if ( !details.tabId ) { + if ( details.index !== undefined ) { + _details.index = details.index; + } + + chrome.tabs.create(_details, focusWindow); + return; + } + + // update doesn't accept index, must use move + chrome.tabs.update(details.tabId, _details, function(tab) { + // if the tab doesn't exist + if ( vAPI.lastError() ) { + chrome.tabs.create(_details, focusWindow); + } else if ( details.index !== undefined ) { + chrome.tabs.move(tab.id, {index: details.index}); + } + }); + }; + + // Open in a standalone window + if ( details.popup === true ) { + chrome.windows.create({ url: details.url, type: 'popup' }); + return; + } + + if ( details.index !== -1 ) { + subWrapper(); + return; + } + + vAPI.tabs.get(null, function(tab) { + if ( tab ) { + details.index = tab.index + 1; + } else { + delete details.index; + } + + subWrapper(); + }); + }; + + if ( !details.select ) { + wrapper(); + return; + } + + chrome.tabs.query({ url: targetURL }, function(tabs) { + resetLastError(); + var tab = Array.isArray(tabs) && tabs[0]; + if ( tab ) { + chrome.tabs.update(tab.id, { active: true }, function(tab) { + chrome.windows.update(tab.windowId, { focused: true }); + }); + } else { + wrapper(); + } + }); +}; + +/******************************************************************************/ + +// Replace the URL of a tab. Noop if the tab does not exist. + +vAPI.tabs.replace = function(tabId, url) { + var targetURL = url; + + // extension pages + if ( /^[\w-]{2,}:/.test(targetURL) !== true ) { + targetURL = vAPI.getURL(targetURL); + } + + if ( typeof tabId !== 'number' || tabId < 0 ) { return; } + + chrome.tabs.update(tabId, { url: targetURL }, resetLastError); +}; + +/******************************************************************************/ + +vAPI.tabs.reload = function(tabId, bypassCache) { + if ( typeof tabId !== 'number' || tabId < 0 ) { return; } + chrome.tabs.reload(tabId, { bypassCache: bypassCache === true }); +}; + +/******************************************************************************/ + +// Must read: https://code.google.com/p/chromium/issues/detail?id=410868#c8 + +// https://github.com/chrisaljoudi/uBlock/issues/19 +// https://github.com/chrisaljoudi/uBlock/issues/207 +// Since we may be called asynchronously, the tab id may not exist +// anymore, so this ensures it does still exist. + +vAPI.setIcon = (function() { + let onIconReady = function(tabId, badgeDetails) { + if ( vAPI.lastError() ) { return; } + if ( badgeDetails.text !== undefined ) { + chrome.browserAction.setBadgeText({ + tabId: tabId, + text: badgeDetails.text + }); + } + if ( badgeDetails.color !== undefined ) { + chrome.browserAction.setBadgeBackgroundColor({ + tabId: tabId, + color: badgeDetails.color + }); + } + }; + + return function(tabId, iconDetails, badgeDetails) { + if ( typeof tabId !== 'number' || tabId < 0 ) { return; } + chrome.browserAction.setIcon( + { tabId: tabId, path: iconDetails }, + function() { onIconReady(tabId, badgeDetails); } + ); + }; +})(); + +/******************************************************************************/ +/******************************************************************************/ + +vAPI.messaging = { + ports: new Map(), + listeners: {}, + defaultHandler: null, + NOOPFUNC: noopFunc, + UNHANDLED: 'vAPI.messaging.notHandled' +}; + +/******************************************************************************/ + +vAPI.messaging.listen = function(listenerName, callback) { + this.listeners[listenerName] = callback; +}; + +/******************************************************************************/ + +vAPI.messaging.onPortMessage = (function() { + var messaging = vAPI.messaging; + + // Use a wrapper to avoid closure and to allow reuse. + var CallbackWrapper = function(port, request) { + this.callback = this.proxy.bind(this); // bind once + this.init(port, request); + }; + + CallbackWrapper.prototype = { + init: function(port, request) { + this.port = port; + this.request = request; + return this; + }, + proxy: function(response) { + // https://github.com/chrisaljoudi/uBlock/issues/383 + if ( messaging.ports.has(this.port.name) ) { + this.port.postMessage({ + auxProcessId: this.request.auxProcessId, + channelName: this.request.channelName, + msg: response !== undefined ? response : null + }); + } + // Mark for reuse + this.port = this.request = null; + callbackWrapperJunkyard.push(this); + } + }; + + var callbackWrapperJunkyard = []; + + var callbackWrapperFactory = function(port, request) { + var wrapper = callbackWrapperJunkyard.pop(); + if ( wrapper ) { + return wrapper.init(port, request); + } + return new CallbackWrapper(port, request); + }; + + // https://bugzilla.mozilla.org/show_bug.cgi?id=1392067 + // Workaround: manually remove ports matching removed tab. + chrome.tabs.onRemoved.addListener(function(tabId) { + for ( var port of messaging.ports.values() ) { + var tab = port.sender && port.sender.tab; + if ( !tab ) { continue; } + if ( tab.id === tabId ) { + vAPI.messaging.onPortDisconnect(port); + } + } + }); + + return function(request, port) { + // prepare response + var callback = this.NOOPFUNC; + if ( request.auxProcessId !== undefined ) { + callback = callbackWrapperFactory(port, request).callback; + } + + // Auxiliary process to main process: specific handler + var r = this.UNHANDLED, + listener = this.listeners[request.channelName]; + if ( typeof listener === 'function' ) { + r = listener(request.msg, port.sender, callback); + } + if ( r !== this.UNHANDLED ) { return; } + + // Auxiliary process to main process: default handler + r = this.defaultHandler(request.msg, port.sender, callback); + if ( r !== this.UNHANDLED ) { return; } + + // Auxiliary process to main process: no handler + console.error( + 'vAPI.messaging.onPortMessage > unhandled request: %o', + request + ); + + // Need to callback anyways in case caller expected an answer, or + // else there is a memory leak on caller's side + callback(); + }.bind(vAPI.messaging); +})(); + +/******************************************************************************/ + +vAPI.messaging.onPortDisconnect = function(port) { + port.onDisconnect.removeListener(this.onPortDisconnect); + port.onMessage.removeListener(this.onPortMessage); + this.ports.delete(port.name); +}.bind(vAPI.messaging); + +/******************************************************************************/ + +vAPI.messaging.onPortConnect = function(port) { + port.onDisconnect.addListener(this.onPortDisconnect); + port.onMessage.addListener(this.onPortMessage); + this.ports.set(port.name, port); +}.bind(vAPI.messaging); + +/******************************************************************************/ + +vAPI.messaging.setup = function(defaultHandler) { + if ( this.defaultHandler !== null ) { return; } + + if ( typeof defaultHandler !== 'function' ) { + defaultHandler = function(){ + return vAPI.messaging.UNHANDLED; + }; + } + this.defaultHandler = defaultHandler; + + chrome.runtime.onConnect.addListener(this.onPortConnect); +}; + +/******************************************************************************/ + +vAPI.messaging.broadcast = function(message) { + var messageWrapper = { + broadcast: true, + msg: message + }; + for ( var port of this.ports.values() ) { + port.postMessage(messageWrapper); + } +}; + +/******************************************************************************/ +/******************************************************************************/ + +vAPI.net = { + listenerMap: new WeakMap(), + // legacy Chromium understands only these network request types. + validTypes: (function() { + let types = new Set([ + 'main_frame', + 'sub_frame', + 'stylesheet', + 'script', + 'image', + 'object', + 'xmlhttprequest', + 'other' + ]); + let wrrt = browser.webRequest.ResourceType; + if ( wrrt instanceof Object ) { + for ( let typeKey in wrrt ) { + if ( wrrt.hasOwnProperty(typeKey) ) { + types.add(wrrt[typeKey]); + } + } + } + return types; + })(), + denormalizeFilters: null, + normalizeDetails: null, + addListener: function(which, clientListener, filters, options) { + if ( typeof this.denormalizeFilters === 'function' ) { + filters = this.denormalizeFilters(filters); + } + let actualListener; + if ( typeof this.normalizeDetails === 'function' ) { + actualListener = function(details) { + vAPI.net.normalizeDetails(details); + return clientListener(details); + }; + this.listenerMap.set(clientListener, actualListener); + } + browser.webRequest[which].addListener( + actualListener || clientListener, + filters, + options + ); + }, + removeListener: function(which, clientListener) { + let actualListener = this.listenerMap.get(clientListener); + if ( actualListener !== undefined ) { + this.listenerMap.delete(clientListener); + } + browser.webRequest[which].removeListener( + actualListener || clientListener + ); + }, +}; + +/******************************************************************************/ +/******************************************************************************/ + +vAPI.lastError = function() { + return chrome.runtime.lastError; +}; + +/******************************************************************************/ +/******************************************************************************/ + +vAPI.browserData = {}; + +/******************************************************************************/ + +// https://developer.chrome.com/extensions/browsingData + +vAPI.browserData.clearCache = function(callback) { + chrome.browsingData.removeCache({ since: 0 }, callback); +}; + +/******************************************************************************/ +/******************************************************************************/ + +// https://developer.chrome.com/extensions/cookies + +vAPI.cookies = {}; + +/******************************************************************************/ + +vAPI.cookies.start = function() { + var reallyRemoved = { + 'evicted': true, + 'expired': true, + 'explicit': true + }; + + var onChanged = function(changeInfo) { + if ( changeInfo.removed ) { + if ( reallyRemoved[changeInfo.cause] && typeof this.onRemoved === 'function' ) { + this.onRemoved(changeInfo.cookie); + } + return; + } + if ( typeof this.onChanged === 'function' ) { + this.onChanged(changeInfo.cookie); + } + }; + + chrome.cookies.onChanged.addListener(onChanged.bind(this)); +}; + +/******************************************************************************/ + +vAPI.cookies.getAll = function(callback) { + chrome.cookies.getAll({}, callback); +}; + +/******************************************************************************/ + +vAPI.cookies.remove = function(details, callback) { + chrome.cookies.remove(details, callback || noopFunc); +}; + +/******************************************************************************/ +/******************************************************************************/ + +vAPI.cloud = (function() { + // Not all platforms support `chrome.storage.sync`. + if ( chrome.storage.sync instanceof Object === false ) { + return; + } + + var chunkCountPerFetch = 16; // Must be a power of 2 + + // Mind chrome.storage.sync.MAX_ITEMS (512 at time of writing) + var maxChunkCountPerItem = Math.floor(512 * 0.75) & ~(chunkCountPerFetch - 1); + + // Mind chrome.storage.sync.QUOTA_BYTES_PER_ITEM (8192 at time of writing) + // https://github.com/gorhill/uBlock/issues/3006 + // For Firefox, we will use a lower ratio to allow for more overhead for + // the infrastructure. Unfortunately this leads to less usable space for + // actual data, but all of this is provided for free by browser vendors, + // so we need to accept and deal with these limitations. + var evalMaxChunkSize = function() { + return Math.floor( + (chrome.storage.sync.QUOTA_BYTES_PER_ITEM || 8192) * + (vAPI.webextFlavor.soup.has('firefox') ? 0.6 : 0.75) + ); + }; + + var maxChunkSize = evalMaxChunkSize(); + + // The real actual webextFlavor value may not be set in stone, so listen + // for possible future changes. + window.addEventListener('webextFlavor', function() { + maxChunkSize = evalMaxChunkSize(); + }, { once: true }); + + // Mind chrome.storage.sync.QUOTA_BYTES (128 kB at time of writing) + // Firefox: + // https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/storage/sync + // > You can store up to 100KB of data using this API/ + var maxStorageSize = chrome.storage.sync.QUOTA_BYTES || 102400; + + var options = { + defaultDeviceName: window.navigator.platform, + deviceName: vAPI.localStorage.getItem('deviceName') || '' + }; + + // This is used to find out a rough count of how many chunks exists: + // We "poll" at specific index in order to get a rough idea of how + // large is the stored string. + // This allows reading a single item with only 2 sync operations -- a + // good thing given chrome.storage.sync.MAX_WRITE_OPERATIONS_PER_MINUTE + // and chrome.storage.sync.MAX_WRITE_OPERATIONS_PER_HOUR. + + var getCoarseChunkCount = function(dataKey, callback) { + let bin = {}; + for ( let i = 0; i < maxChunkCountPerItem; i += 16 ) { + bin[dataKey + i.toString()] = ''; + } + + chrome.storage.sync.get(bin, function(bin) { + if ( chrome.runtime.lastError ) { + callback(0, chrome.runtime.lastError.message); + return; + } + + var chunkCount = 0; + for ( let i = 0; i < maxChunkCountPerItem; i += 16 ) { + if ( bin[dataKey + i.toString()] === '' ) { break; } + chunkCount = i + 16; + } + + callback(chunkCount); + }); + }; + + var deleteChunks = function(dataKey, start) { + var keys = []; + + // No point in deleting more than: + // - The max number of chunks per item + // - The max number of chunks per storage limit + var n = Math.min( + maxChunkCountPerItem, + Math.ceil(maxStorageSize / maxChunkSize) + ); + for ( var i = start; i < n; i++ ) { + keys.push(dataKey + i.toString()); + } + chrome.storage.sync.remove(keys); + }; + + var start = function(/* dataKeys */) { + }; + + var push = function(dataKey, data, callback) { + + var bin = { + 'source': options.deviceName || options.defaultDeviceName, + 'tstamp': Date.now(), + 'data': data, + 'size': 0 + }; + bin.size = JSON.stringify(bin).length; + var item = JSON.stringify(bin); + + // Chunkify taking into account QUOTA_BYTES_PER_ITEM: + // https://developer.chrome.com/extensions/storage#property-sync + // "The maximum size (in bytes) of each individual item in sync + // "storage, as measured by the JSON stringification of its value + // "plus its key length." + bin = {}; + var chunkCount = Math.ceil(item.length / maxChunkSize); + for ( var i = 0; i < chunkCount; i++ ) { + bin[dataKey + i.toString()] = item.substr(i * maxChunkSize, maxChunkSize); + } + bin[dataKey + i.toString()] = ''; // Sentinel + + chrome.storage.sync.set(bin, function() { + var errorStr; + if ( chrome.runtime.lastError ) { + errorStr = chrome.runtime.lastError.message; + // https://github.com/gorhill/uBlock/issues/3006#issuecomment-332597677 + // - Delete all that was pushed in case of failure. + chunkCount = 0; + } + callback(errorStr); + + // Remove potentially unused trailing chunks + deleteChunks(dataKey, chunkCount); + }); + }; + + var pull = function(dataKey, callback) { + + var assembleChunks = function(bin) { + if ( chrome.runtime.lastError ) { + callback(null, chrome.runtime.lastError.message); + return; + } + + // Assemble chunks into a single string. + let json = [], jsonSlice; + let i = 0; + for (;;) { + jsonSlice = bin[dataKey + i.toString()]; + if ( jsonSlice === '' || jsonSlice === undefined ) { break; } + json.push(jsonSlice); + i += 1; + } + + let entry = null; + try { + entry = JSON.parse(json.join('')); + } catch(ex) { + } + callback(entry); + }; + + var fetchChunks = function(coarseCount, errorStr) { + if ( coarseCount === 0 || typeof errorStr === 'string' ) { + callback(null, errorStr); + return; + } + + var bin = {}; + for ( var i = 0; i < coarseCount; i++ ) { + bin[dataKey + i.toString()] = ''; + } + + chrome.storage.sync.get(bin, assembleChunks); + }; + + getCoarseChunkCount(dataKey, fetchChunks); + }; + + var getOptions = function(callback) { + if ( typeof callback !== 'function' ) { + return; + } + callback(options); + }; + + var setOptions = function(details, callback) { + if ( typeof details !== 'object' || details === null ) { + return; + } + + if ( typeof details.deviceName === 'string' ) { + vAPI.localStorage.setItem('deviceName', details.deviceName); + options.deviceName = details.deviceName; + } + + getOptions(callback); + }; + + return { + start: start, + push: push, + pull: pull, + getOptions: getOptions, + setOptions: setOptions + }; +})(); + +/******************************************************************************/ +/******************************************************************************/ + +})(); + +/******************************************************************************/ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/vapi-client.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/vapi-client.js new file mode 100644 index 0000000..31faa0b --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/vapi-client.js @@ -0,0 +1,253 @@ +/******************************************************************************* + + uMatrix - a browser extension to block requests. + Copyright (C) 2014-2018 The uMatrix/uBlock Origin authors + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uMatrix +*/ + +// For non background pages + +'use strict'; + +/******************************************************************************/ + +(function(self) { + +/******************************************************************************/ + +// https://bugs.chromium.org/p/project-zero/issues/detail?id=1225&desc=6#c10 +if ( self.vAPI === undefined || self.vAPI.uMatrix !== true ) { + self.vAPI = { uMatrix: true }; +} + +var vAPI = self.vAPI; +var chrome = self.chrome; + +// https://github.com/chrisaljoudi/uBlock/issues/456 +// Already injected? +if ( vAPI.vapiClientInjected ) { + //console.debug('vapi-client.js already injected: skipping.'); + return; +} +vAPI.vapiClientInjected = true; + +vAPI.sessionId = String.fromCharCode(Date.now() % 26 + 97) + + Math.random().toString(36).slice(2); + +/******************************************************************************/ + +vAPI.shutdown = (function() { + var jobs = []; + + var add = function(job) { + jobs.push(job); + }; + + var exec = function() { + //console.debug('Shutting down...'); + var job; + while ( (job = jobs.pop()) ) { + job(); + } + }; + + return { + add: add, + exec: exec + }; +})(); + +/******************************************************************************/ + +vAPI.messaging = { + port: null, + portTimer: null, + portTimerDelay: 10000, + listeners: new Set(), + pending: new Map(), + auxProcessId: 1, + shuttingDown: false, + + shutdown: function() { + this.shuttingDown = true; + this.destroyPort(); + }, + + disconnectListener: function() { + this.port = null; + vAPI.shutdown.exec(); + }, + disconnectListenerBound: null, + + messageListener: function(details) { + if ( !details ) { return; } + + // Sent to all listeners + if ( details.broadcast ) { + this.sendToListeners(details.msg); + return; + } + + // Response to specific message previously sent + var listener; + if ( details.auxProcessId ) { + listener = this.pending.get(details.auxProcessId); + if ( listener !== undefined ) { + this.pending.delete(details.auxProcessId); + listener(details.msg); + return; + } + } + }, + messageListenerCallback: null, + + portPoller: function() { + this.portTimer = null; + if ( + this.port !== null && + this.listeners.size === 0 && + this.pending.size === 0 + ) { + return this.destroyPort(); + } + this.portTimer = vAPI.setTimeout(this.portPollerBound, this.portTimerDelay); + this.portTimerDelay = Math.min(this.portTimerDelay * 2, 60 * 60 * 1000); + }, + portPollerBound: null, + + destroyPort: function() { + if ( this.portTimer !== null ) { + clearTimeout(this.portTimer); + this.portTimer = null; + } + var port = this.port; + if ( port !== null ) { + port.disconnect(); + port.onMessage.removeListener(this.messageListenerCallback); + port.onDisconnect.removeListener(this.disconnectListenerBound); + this.port = null; + } + this.listeners.clear(); + // service pending callbacks + if ( this.pending.size !== 0 ) { + var pending = this.pending; + this.pending = new Map(); + for ( var callback of pending.values() ) { + if ( typeof callback === 'function' ) { + callback(null); + } + } + } + }, + + createPort: function() { + if ( this.shuttingDown ) { return null; } + if ( this.messageListenerCallback === null ) { + this.messageListenerCallback = this.messageListener.bind(this); + this.disconnectListenerBound = this.disconnectListener.bind(this); + this.portPollerBound = this.portPoller.bind(this); + } + try { + this.port = chrome.runtime.connect({name: vAPI.sessionId}) || null; + } catch (ex) { + this.port = null; + } + if ( this.port !== null ) { + this.port.onMessage.addListener(this.messageListenerCallback); + this.port.onDisconnect.addListener(this.disconnectListenerBound); + this.portTimerDelay = 10000; + if ( this.portTimer === null ) { + this.portTimer = vAPI.setTimeout( + this.portPollerBound, + this.portTimerDelay + ); + } + } + return this.port; + }, + + getPort: function() { + return this.port !== null ? this.port : this.createPort(); + }, + + send: function(channelName, message, callback) { + // Too large a gap between the last request and the last response means + // the main process is no longer reachable: memory leaks and bad + // performance become a risk -- especially for long-lived, dynamic + // pages. Guard against this. + if ( this.pending.size > 25 ) { + vAPI.shutdown.exec(); + } + var port = this.getPort(); + if ( port === null ) { + if ( typeof callback === 'function' ) { callback(); } + return; + } + var auxProcessId; + if ( callback ) { + auxProcessId = this.auxProcessId++; + this.pending.set(auxProcessId, callback); + } + port.postMessage({ + channelName: channelName, + auxProcessId: auxProcessId, + msg: message + }); + }, + + addListener: function(listener) { + this.listeners.add(listener); + this.getPort(); + }, + + removeListener: function(listener) { + this.listeners.delete(listener); + }, + + removeAllListeners: function() { + this.listeners.clear(); + }, + + sendToListeners: function(msg) { + for ( var listener of this.listeners ) { + listener(msg); + } + } +}; + +/******************************************************************************/ + +// No need to have vAPI client linger around after shutdown if +// we are not a top window (because element picker can still +// be injected in top window). +if ( window !== window.top ) { + vAPI.shutdown.add(function() { + vAPI = null; + }); +} + +/******************************************************************************/ + +vAPI.setTimeout = vAPI.setTimeout || function(callback, delay) { + setTimeout(function() { callback(); }, delay); +}; + +/******************************************************************************/ + +})(this); // jshint ignore: line + +/******************************************************************************/ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/vapi-common.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/vapi-common.js new file mode 100644 index 0000000..659a5d4 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/vapi-common.js @@ -0,0 +1,214 @@ +/******************************************************************************* + + uMatrix - a browser extension to black/white list requests. + Copyright (C) 2014-present The uMatrix/uBlock Origin authors + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uMatrix +*/ + +// For background page or non-background pages + +'use strict'; + +/******************************************************************************/ + +if ( self.browser instanceof Object ) { + self.chrome = self.browser; +} else { + self.browser = self.chrome; +} + +/******************************************************************************/ +/******************************************************************************/ + +(function(self) { + +/******************************************************************************/ + +// https://bugs.chromium.org/p/project-zero/issues/detail?id=1225&desc=6#c10 +if ( self.vAPI === undefined || self.vAPI.uMatrix !== true ) { + self.vAPI = { uMatrix: true }; +} + +var vAPI = self.vAPI; +var chrome = self.chrome; + +/******************************************************************************/ + +vAPI.setTimeout = vAPI.setTimeout || window.setTimeout.bind(window); + +/******************************************************************************/ + +vAPI.webextFlavor = { + major: 0, + soup: new Set() +}; + +(function() { + var ua = navigator.userAgent, + flavor = vAPI.webextFlavor, + soup = flavor.soup; + var dispatch = function() { + window.dispatchEvent(new CustomEvent('webextFlavor')); + }; + + // This is always true. + soup.add('ublock'); + + if ( /\bMobile\b/.test(ua) ) { + soup.add('mobile'); + } + + // Asynchronous + var async = self.browser instanceof Object && + typeof self.browser.runtime.getBrowserInfo === 'function'; + if ( async ) { + self.browser.runtime.getBrowserInfo().then(function(info) { + flavor.major = parseInt(info.version, 10) || 0; + soup.add(info.vendor.toLowerCase()) + .add(info.name.toLowerCase()); + if ( flavor.major >= 53 ) { soup.add('user_stylesheet'); } + if ( flavor.major >= 57 ) { soup.add('html_filtering'); } + dispatch(); + }); + } + + // Synchronous + var match = /Firefox\/([\d.]+)/.exec(ua); + if ( match !== null ) { + flavor.major = parseInt(match[1], 10) || 0; + soup.add('mozilla') + .add('firefox'); + if ( flavor.major >= 53 ) { soup.add('user_stylesheet'); } + if ( flavor.major >= 57 ) { soup.add('html_filtering'); } + } else { + match = /OPR\/([\d.]+)/.exec(ua); + if ( match !== null ) { + var reEx = /Chrom(?:e|ium)\/([\d.]+)/; + if ( reEx.test(ua) ) { match = reEx.exec(ua); } + flavor.major = parseInt(match[1], 10) || 0; + soup.add('opera').add('chromium'); + } else { + match = /Chromium\/([\d.]+)/.exec(ua); + if ( match !== null ) { + flavor.major = parseInt(match[1], 10) || 0; + soup.add('chromium'); + } else { + match = /Chrome\/([\d.]+)/.exec(ua); + if ( match !== null ) { + flavor.major = parseInt(match[1], 10) || 0; + soup.add('google').add('chromium'); + } + } + } + // https://github.com/gorhill/uBlock/issues/3588 + if ( soup.has('chromium') && flavor.major >= 67 ) { + soup.add('user_stylesheet'); + } + } + + // Don't starve potential listeners + if ( !async ) { + vAPI.setTimeout(dispatch, 97); + } +})(); + +/******************************************************************************/ + +// http://www.w3.org/International/questions/qa-scripts#directions + +var setScriptDirection = function(language) { + document.body.setAttribute( + 'dir', + ['ar', 'he', 'fa', 'ps', 'ur'].indexOf(language) !== -1 ? 'rtl' : 'ltr' + ); +}; + +/******************************************************************************/ + +vAPI.download = function(details) { + if ( !details.url ) { + return; + } + + var a = document.createElement('a'); + a.href = details.url; + a.setAttribute('download', details.filename || ''); + a.dispatchEvent(new MouseEvent('click')); +}; + +/******************************************************************************/ + +vAPI.getURL = chrome.runtime.getURL; + +/******************************************************************************/ + +vAPI.i18n = chrome.i18n.getMessage; + +setScriptDirection(vAPI.i18n('@@ui_locale')); + +/******************************************************************************/ + +vAPI.closePopup = function() { + window.close(); +}; + +/******************************************************************************/ + +// A localStorage-like object which should be accessible from the +// background page or auxiliary pages. +// This storage is optional, but it is nice to have, for a more polished user +// experience. + +// https://github.com/gorhill/uBlock/issues/2824 +// Use a dummy localStorage if for some reasons it's not available. + +// https://github.com/gorhill/uMatrix/issues/840 +// Always use a wrapper to seamlessly handle exceptions + +vAPI.localStorage = { + clear: function() { + try { + window.localStorage.clear(); + } catch(ex) { + } + }, + getItem: function(key) { + try { + return window.localStorage.getItem(key); + } catch(ex) { + } + return null; + }, + removeItem: function(key) { + try { + window.localStorage.removeItem(key); + } catch(ex) { + } + }, + setItem: function(key, value) { + try { + window.localStorage.setItem(key, value); + } catch(ex) { + } + } +}; + +/******************************************************************************/ + +})(this); + +/******************************************************************************/ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/vapi-webrequest.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/vapi-webrequest.js new file mode 100644 index 0000000..034a1ec --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/js/vapi-webrequest.js @@ -0,0 +1,198 @@ +/******************************************************************************* + + uMatrix - a browser extension to block requests. + Copyright (C) 2017-present Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uMatrix +*/ + +// For background page + +'use strict'; + +/******************************************************************************/ + +(function() { + const extToTypeMap = new Map([ + ['eot','font'],['otf','font'],['svg','font'],['ttf','font'],['woff','font'],['woff2','font'], + ['mp3','media'],['mp4','media'],['webm','media'], + ['gif','image'],['ico','image'],['jpeg','image'],['jpg','image'],['png','image'],['webp','image'] + ]); + + // https://www.reddit.com/r/uBlockOrigin/comments/9vcrk3/bug_in_ubo_1173_betas_when_saving_files_hosted_on/ + // Some types can be mapped from 'other', thus include 'other' if and + // only if the caller is interested in at least one of those types. + const denormalizeTypes = function(aa) { + if ( aa.length === 0 ) { + return Array.from(vAPI.net.validTypes); + } + const out = new Set(); + let i = aa.length; + while ( i-- ) { + const type = aa[i]; + if ( vAPI.net.validTypes.has(type) ) { + out.add(type); + } + } + if ( out.has('other') === false ) { + for ( const type of extToTypeMap.values() ) { + if ( out.has(type) ) { + out.add('other'); + break; + } + } + } + return Array.from(out); + }; + + const headerValue = function(headers, name) { + let i = headers.length; + while ( i-- ) { + if ( headers[i].name.toLowerCase() === name ) { + return headers[i].value.trim(); + } + } + return ''; + }; + + const parsedURL = new URL('https://www.example.org/'); + + vAPI.net.normalizeDetails = function(details) { + let type = details.type; + + // https://github.com/uBlockOrigin/uMatrix-issues/issues/156#issuecomment-494427094 + if ( type === 'main_frame' ) { + details.documentUrl = details.url; + } + // Chromium 63+ supports the `initiator` property, which contains + // the URL of the origin from which the network request was made. + else if ( + typeof details.initiator === 'string' && + details.initiator !== 'null' + ) { + details.documentUrl = details.initiator; + } + + // https://github.com/gorhill/uBlock/issues/1493 + // Chromium 49+/WebExtensions support a new request type: `ping`, + // which is fired as a result of using `navigator.sendBeacon`. + if ( type === 'ping' ) { + details.type = 'beacon'; + return; + } + + if ( type === 'imageset' ) { + details.type = 'image'; + return; + } + + // The rest of the function code is to normalize type + if ( type !== 'other' ) { return; } + + // Try to map known "extension" part of URL to request type. + parsedURL.href = details.url; + const path = parsedURL.pathname, + pos = path.indexOf('.', path.length - 6); + if ( pos !== -1 && (type = extToTypeMap.get(path.slice(pos + 1))) ) { + details.type = type; + return; + } + + // Try to extract type from response headers if present. + if ( details.responseHeaders ) { + type = headerValue(details.responseHeaders, 'content-type'); + if ( type.startsWith('font/') ) { + details.type = 'font'; + return; + } + if ( type.startsWith('image/') ) { + details.type = 'image'; + return; + } + if ( type.startsWith('audio/') || type.startsWith('video/') ) { + details.type = 'media'; + return; + } + } + }; + + vAPI.net.denormalizeFilters = function(filters) { + const urls = filters.urls || [ '' ]; + let types = filters.types; + if ( Array.isArray(types) ) { + types = denormalizeTypes(types); + } + if ( + (vAPI.net.validTypes.has('websocket')) && + (types === undefined || types.indexOf('websocket') !== -1) && + (urls.indexOf('') === -1) + ) { + if ( urls.indexOf('ws://*/*') === -1 ) { + urls.push('ws://*/*'); + } + if ( urls.indexOf('wss://*/*') === -1 ) { + urls.push('wss://*/*'); + } + } + return { types, urls }; + }; +})(); + +/******************************************************************************/ + +// https://github.com/gorhill/uBlock/issues/2067 +// Experimental: Block everything until uBO is fully ready. + +vAPI.net.onBeforeReady = (function() { + let pendings; + + const handler = function(details) { + if ( pendings === undefined ) { return; } + if ( details.tabId < 0 ) { return; } + + pendings.add(details.tabId); + + //console.log(`Aborting tab ${details.tabId}: ${details.type} ${details.url}`); + + return { cancel: true }; + }; + + return { + experimental: true, + start: function() { + pendings = new Set(); + browser.webRequest.onBeforeRequest.addListener( + handler, + { urls: [ 'http://*/*', 'https://*/*' ] }, + [ 'blocking' ] + ); + }, + // https://github.com/gorhill/uBlock/issues/2067 + // Force-reload tabs for which network requests were blocked + // during launch. This can happen only if tabs were "suspended". + stop: function() { + if ( pendings === undefined ) { return; } + browser.webRequest.onBeforeRequest.removeListener(handler); + for ( const tabId of pendings ) { + //console.log(`Reloading tab ${tabId}`); + vAPI.tabs.reload(tabId); + } + pendings = undefined; + }, + }; +})(); + +/******************************************************************************/ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/lib/codemirror/LICENSE b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/lib/codemirror/LICENSE new file mode 100644 index 0000000..ff7db4b --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/lib/codemirror/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (C) 2017 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/lib/codemirror/README.md b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/lib/codemirror/README.md new file mode 100644 index 0000000..8bc6c93 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/lib/codemirror/README.md @@ -0,0 +1,49 @@ +# CodeMirror + +[![Build Status](https://travis-ci.org/codemirror/CodeMirror.svg)](https://travis-ci.org/codemirror/CodeMirror) +[![NPM version](https://img.shields.io/npm/v/codemirror.svg)](https://www.npmjs.org/package/codemirror) +[![Join the chat at https://gitter.im/codemirror/CodeMirror](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/codemirror/CodeMirror) +[Funding status: ![maintainer happiness](https://marijnhaverbeke.nl/fund/status_s.png?again)](https://marijnhaverbeke.nl/fund/) + +CodeMirror is a versatile text editor implemented in JavaScript for +the browser. It is specialized for editing code, and comes with over +100 language modes and various addons that implement more advanced +editing functionality. Every language comes with fully-featured code +and syntax highlighting to help with reading and editing complex code. + +A rich programming API and a CSS theming system are available for +customizing CodeMirror to fit your application, and extending it with +new functionality. + +You can find more information (and the +[manual](https://codemirror.net/doc/manual.html)) on the [project +page](https://codemirror.net). For questions and discussion, use the +[discussion forum](https://discuss.codemirror.net/). + +See +[CONTRIBUTING.md](https://github.com/codemirror/CodeMirror/blob/master/CONTRIBUTING.md) +for contributing guidelines. + +The CodeMirror community aims to be welcoming to everybody. We use the +[Contributor Covenant +(1.1)](http://contributor-covenant.org/version/1/1/0/) as our code of +conduct. + +### Installation + +Either get the [zip file](https://codemirror.net/codemirror.zip) with +the latest version, or make sure you have [Node](https://nodejs.org/) +installed and run: + + npm install codemirror + +**NOTE**: This is the source repository for the library, and not the +distribution channel. Cloning it is not the recommended way to install +the library, and will in fact not work unless you also run the build +step. + +### Quickstart + +To build the project, make sure you have Node.js installed (at least version 6) +and then `npm install`. To run, just open `index.html` in your +browser (you don't need to run a webserver). Run the tests with `npm test`. diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/lib/codemirror/addon/merge/merge.css b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/lib/codemirror/addon/merge/merge.css new file mode 100644 index 0000000..dadd7f5 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/lib/codemirror/addon/merge/merge.css @@ -0,0 +1,119 @@ +.CodeMirror-merge { + position: relative; + border: 1px solid #ddd; + white-space: pre; +} + +.CodeMirror-merge, .CodeMirror-merge .CodeMirror { + height: 350px; +} + +.CodeMirror-merge-2pane .CodeMirror-merge-pane { width: 47%; } +.CodeMirror-merge-2pane .CodeMirror-merge-gap { width: 6%; } +.CodeMirror-merge-3pane .CodeMirror-merge-pane { width: 31%; } +.CodeMirror-merge-3pane .CodeMirror-merge-gap { width: 3.5%; } + +.CodeMirror-merge-pane { + display: inline-block; + white-space: normal; + vertical-align: top; +} +.CodeMirror-merge-pane-rightmost { + position: absolute; + right: 0px; + z-index: 1; +} + +.CodeMirror-merge-gap { + z-index: 2; + display: inline-block; + height: 100%; + -moz-box-sizing: border-box; + box-sizing: border-box; + overflow: hidden; + border-left: 1px solid #ddd; + border-right: 1px solid #ddd; + position: relative; + background: #f8f8f8; +} + +.CodeMirror-merge-scrolllock-wrap { + position: absolute; + bottom: 0; left: 50%; +} +.CodeMirror-merge-scrolllock { + position: relative; + left: -50%; + cursor: pointer; + color: #555; + line-height: 1; +} +.CodeMirror-merge-scrolllock:after { + content: "\21db\00a0\00a0\21da"; +} +.CodeMirror-merge-scrolllock.CodeMirror-merge-scrolllock-enabled:after { + content: "\21db\21da"; +} + +.CodeMirror-merge-copybuttons-left, .CodeMirror-merge-copybuttons-right { + position: absolute; + left: 0; top: 0; + right: 0; bottom: 0; + line-height: 1; +} + +.CodeMirror-merge-copy { + position: absolute; + cursor: pointer; + color: #44c; + z-index: 3; +} + +.CodeMirror-merge-copy-reverse { + position: absolute; + cursor: pointer; + color: #44c; +} + +.CodeMirror-merge-copybuttons-left .CodeMirror-merge-copy { left: 2px; } +.CodeMirror-merge-copybuttons-right .CodeMirror-merge-copy { right: 2px; } + +.CodeMirror-merge-r-inserted, .CodeMirror-merge-l-inserted { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAACCAYAAACddGYaAAAAGUlEQVQI12MwuCXy3+CWyH8GBgYGJgYkAABZbAQ9ELXurwAAAABJRU5ErkJggg==); + background-position: bottom left; + background-repeat: repeat-x; +} + +.CodeMirror-merge-r-deleted, .CodeMirror-merge-l-deleted { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAACCAYAAACddGYaAAAAGUlEQVQI12M4Kyb2/6yY2H8GBgYGJgYkAABURgPz6Ks7wQAAAABJRU5ErkJggg==); + background-position: bottom left; + background-repeat: repeat-x; +} + +.CodeMirror-merge-r-chunk { background: #ffffe0; } +.CodeMirror-merge-r-chunk-start { border-top: 1px solid #ee8; } +.CodeMirror-merge-r-chunk-end { border-bottom: 1px solid #ee8; } +.CodeMirror-merge-r-connect { fill: #ffffe0; stroke: #ee8; stroke-width: 1px; } + +.CodeMirror-merge-l-chunk { background: #eef; } +.CodeMirror-merge-l-chunk-start { border-top: 1px solid #88e; } +.CodeMirror-merge-l-chunk-end { border-bottom: 1px solid #88e; } +.CodeMirror-merge-l-connect { fill: #eef; stroke: #88e; stroke-width: 1px; } + +.CodeMirror-merge-l-chunk.CodeMirror-merge-r-chunk { background: #dfd; } +.CodeMirror-merge-l-chunk-start.CodeMirror-merge-r-chunk-start { border-top: 1px solid #4e4; } +.CodeMirror-merge-l-chunk-end.CodeMirror-merge-r-chunk-end { border-bottom: 1px solid #4e4; } + +.CodeMirror-merge-collapsed-widget:before { + content: "(...)"; +} +.CodeMirror-merge-collapsed-widget { + cursor: pointer; + color: #88b; + background: #eef; + border: 1px solid #ddf; + font-size: 90%; + padding: 0 3px; + border-radius: 4px; +} +.CodeMirror-merge-collapsed-line .CodeMirror-gutter-elt { display: none; } diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/lib/codemirror/addon/merge/merge.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/lib/codemirror/addon/merge/merge.js new file mode 100644 index 0000000..63373f7 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/lib/codemirror/addon/merge/merge.js @@ -0,0 +1,1002 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +// declare global: diff_match_patch, DIFF_INSERT, DIFF_DELETE, DIFF_EQUAL + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); // Note non-packaged dependency diff_match_patch + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "diff_match_patch"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + var Pos = CodeMirror.Pos; + var svgNS = "http://www.w3.org/2000/svg"; + + function DiffView(mv, type) { + this.mv = mv; + this.type = type; + this.classes = type == "left" + ? {chunk: "CodeMirror-merge-l-chunk", + start: "CodeMirror-merge-l-chunk-start", + end: "CodeMirror-merge-l-chunk-end", + insert: "CodeMirror-merge-l-inserted", + del: "CodeMirror-merge-l-deleted", + connect: "CodeMirror-merge-l-connect"} + : {chunk: "CodeMirror-merge-r-chunk", + start: "CodeMirror-merge-r-chunk-start", + end: "CodeMirror-merge-r-chunk-end", + insert: "CodeMirror-merge-r-inserted", + del: "CodeMirror-merge-r-deleted", + connect: "CodeMirror-merge-r-connect"}; + } + + DiffView.prototype = { + constructor: DiffView, + init: function(pane, orig, options) { + this.edit = this.mv.edit; + ;(this.edit.state.diffViews || (this.edit.state.diffViews = [])).push(this); + this.orig = CodeMirror(pane, copyObj({value: orig, readOnly: !this.mv.options.allowEditingOriginals}, copyObj(options))); + if (this.mv.options.connect == "align") { + if (!this.edit.state.trackAlignable) this.edit.state.trackAlignable = new TrackAlignable(this.edit) + this.orig.state.trackAlignable = new TrackAlignable(this.orig) + } + this.lockButton.title = this.edit.phrase("Toggle locked scrolling"); + + this.orig.state.diffViews = [this]; + var classLocation = options.chunkClassLocation || "background"; + if (Object.prototype.toString.call(classLocation) != "[object Array]") classLocation = [classLocation] + this.classes.classLocation = classLocation + + this.diff = getDiff(asString(orig), asString(options.value), this.mv.options.ignoreWhitespace); + this.chunks = getChunks(this.diff); + this.diffOutOfDate = this.dealigned = false; + this.needsScrollSync = null + + this.showDifferences = options.showDifferences !== false; + }, + registerEvents: function(otherDv) { + this.forceUpdate = registerUpdate(this); + setScrollLock(this, true, false); + registerScroll(this, otherDv); + }, + setShowDifferences: function(val) { + val = val !== false; + if (val != this.showDifferences) { + this.showDifferences = val; + this.forceUpdate("full"); + } + } + }; + + function ensureDiff(dv) { + if (dv.diffOutOfDate) { + dv.diff = getDiff(dv.orig.getValue(), dv.edit.getValue(), dv.mv.options.ignoreWhitespace); + dv.chunks = getChunks(dv.diff); + dv.diffOutOfDate = false; + CodeMirror.signal(dv.edit, "updateDiff", dv.diff); + } + } + + var updating = false; + function registerUpdate(dv) { + var edit = {from: 0, to: 0, marked: []}; + var orig = {from: 0, to: 0, marked: []}; + var debounceChange, updatingFast = false; + function update(mode) { + updating = true; + updatingFast = false; + if (mode == "full") { + if (dv.svg) clear(dv.svg); + if (dv.copyButtons) clear(dv.copyButtons); + clearMarks(dv.edit, edit.marked, dv.classes); + clearMarks(dv.orig, orig.marked, dv.classes); + edit.from = edit.to = orig.from = orig.to = 0; + } + ensureDiff(dv); + if (dv.showDifferences) { + updateMarks(dv.edit, dv.diff, edit, DIFF_INSERT, dv.classes); + updateMarks(dv.orig, dv.diff, orig, DIFF_DELETE, dv.classes); + } + + if (dv.mv.options.connect == "align") + alignChunks(dv); + makeConnections(dv); + if (dv.needsScrollSync != null) syncScroll(dv, dv.needsScrollSync) + + updating = false; + } + function setDealign(fast) { + if (updating) return; + dv.dealigned = true; + set(fast); + } + function set(fast) { + if (updating || updatingFast) return; + clearTimeout(debounceChange); + if (fast === true) updatingFast = true; + debounceChange = setTimeout(update, fast === true ? 20 : 250); + } + function change(_cm, change) { + if (!dv.diffOutOfDate) { + dv.diffOutOfDate = true; + edit.from = edit.to = orig.from = orig.to = 0; + } + // Update faster when a line was added/removed + setDealign(change.text.length - 1 != change.to.line - change.from.line); + } + function swapDoc() { + dv.diffOutOfDate = true; + dv.dealigned = true; + update("full"); + } + dv.edit.on("change", change); + dv.orig.on("change", change); + dv.edit.on("swapDoc", swapDoc); + dv.orig.on("swapDoc", swapDoc); + if (dv.mv.options.connect == "align") { + CodeMirror.on(dv.edit.state.trackAlignable, "realign", setDealign) + CodeMirror.on(dv.orig.state.trackAlignable, "realign", setDealign) + } + dv.edit.on("viewportChange", function() { set(false); }); + dv.orig.on("viewportChange", function() { set(false); }); + update(); + return update; + } + + function registerScroll(dv, otherDv) { + dv.edit.on("scroll", function() { + syncScroll(dv, true) && makeConnections(dv); + }); + dv.orig.on("scroll", function() { + syncScroll(dv, false) && makeConnections(dv); + if (otherDv) syncScroll(otherDv, true) && makeConnections(otherDv); + }); + } + + function syncScroll(dv, toOrig) { + // Change handler will do a refresh after a timeout when diff is out of date + if (dv.diffOutOfDate) { + if (dv.lockScroll && dv.needsScrollSync == null) dv.needsScrollSync = toOrig + return false + } + dv.needsScrollSync = null + if (!dv.lockScroll) return true; + var editor, other, now = +new Date; + if (toOrig) { editor = dv.edit; other = dv.orig; } + else { editor = dv.orig; other = dv.edit; } + // Don't take action if the position of this editor was recently set + // (to prevent feedback loops) + if (editor.state.scrollSetBy == dv && (editor.state.scrollSetAt || 0) + 250 > now) return false; + + var sInfo = editor.getScrollInfo(); + if (dv.mv.options.connect == "align") { + targetPos = sInfo.top; + } else { + var halfScreen = .5 * sInfo.clientHeight, midY = sInfo.top + halfScreen; + var mid = editor.lineAtHeight(midY, "local"); + var around = chunkBoundariesAround(dv.chunks, mid, toOrig); + var off = getOffsets(editor, toOrig ? around.edit : around.orig); + var offOther = getOffsets(other, toOrig ? around.orig : around.edit); + var ratio = (midY - off.top) / (off.bot - off.top); + var targetPos = (offOther.top - halfScreen) + ratio * (offOther.bot - offOther.top); + + var botDist, mix; + // Some careful tweaking to make sure no space is left out of view + // when scrolling to top or bottom. + if (targetPos > sInfo.top && (mix = sInfo.top / halfScreen) < 1) { + targetPos = targetPos * mix + sInfo.top * (1 - mix); + } else if ((botDist = sInfo.height - sInfo.clientHeight - sInfo.top) < halfScreen) { + var otherInfo = other.getScrollInfo(); + var botDistOther = otherInfo.height - otherInfo.clientHeight - targetPos; + if (botDistOther > botDist && (mix = botDist / halfScreen) < 1) + targetPos = targetPos * mix + (otherInfo.height - otherInfo.clientHeight - botDist) * (1 - mix); + } + } + + other.scrollTo(sInfo.left, targetPos); + other.state.scrollSetAt = now; + other.state.scrollSetBy = dv; + return true; + } + + function getOffsets(editor, around) { + var bot = around.after; + if (bot == null) bot = editor.lastLine() + 1; + return {top: editor.heightAtLine(around.before || 0, "local"), + bot: editor.heightAtLine(bot, "local")}; + } + + function setScrollLock(dv, val, action) { + dv.lockScroll = val; + if (val && action != false) syncScroll(dv, DIFF_INSERT) && makeConnections(dv); + (val ? CodeMirror.addClass : CodeMirror.rmClass)(dv.lockButton, "CodeMirror-merge-scrolllock-enabled"); + } + + // Updating the marks for editor content + + function removeClass(editor, line, classes) { + var locs = classes.classLocation + for (var i = 0; i < locs.length; i++) { + editor.removeLineClass(line, locs[i], classes.chunk); + editor.removeLineClass(line, locs[i], classes.start); + editor.removeLineClass(line, locs[i], classes.end); + } + } + + function clearMarks(editor, arr, classes) { + for (var i = 0; i < arr.length; ++i) { + var mark = arr[i]; + if (mark instanceof CodeMirror.TextMarker) + mark.clear(); + else if (mark.parent) + removeClass(editor, mark, classes); + } + arr.length = 0; + } + + // FIXME maybe add a margin around viewport to prevent too many updates + function updateMarks(editor, diff, state, type, classes) { + var vp = editor.getViewport(); + editor.operation(function() { + if (state.from == state.to || vp.from - state.to > 20 || state.from - vp.to > 20) { + clearMarks(editor, state.marked, classes); + markChanges(editor, diff, type, state.marked, vp.from, vp.to, classes); + state.from = vp.from; state.to = vp.to; + } else { + if (vp.from < state.from) { + markChanges(editor, diff, type, state.marked, vp.from, state.from, classes); + state.from = vp.from; + } + if (vp.to > state.to) { + markChanges(editor, diff, type, state.marked, state.to, vp.to, classes); + state.to = vp.to; + } + } + }); + } + + function addClass(editor, lineNr, classes, main, start, end) { + var locs = classes.classLocation, line = editor.getLineHandle(lineNr); + for (var i = 0; i < locs.length; i++) { + if (main) editor.addLineClass(line, locs[i], classes.chunk); + if (start) editor.addLineClass(line, locs[i], classes.start); + if (end) editor.addLineClass(line, locs[i], classes.end); + } + return line; + } + + function markChanges(editor, diff, type, marks, from, to, classes) { + var pos = Pos(0, 0); + var top = Pos(from, 0), bot = editor.clipPos(Pos(to - 1)); + var cls = type == DIFF_DELETE ? classes.del : classes.insert; + function markChunk(start, end) { + var bfrom = Math.max(from, start), bto = Math.min(to, end); + for (var i = bfrom; i < bto; ++i) + marks.push(addClass(editor, i, classes, true, i == start, i == end - 1)); + // When the chunk is empty, make sure a horizontal line shows up + if (start == end && bfrom == end && bto == end) { + if (bfrom) + marks.push(addClass(editor, bfrom - 1, classes, false, false, true)); + else + marks.push(addClass(editor, bfrom, classes, false, true, false)); + } + } + + var chunkStart = 0, pending = false; + for (var i = 0; i < diff.length; ++i) { + var part = diff[i], tp = part[0], str = part[1]; + if (tp == DIFF_EQUAL) { + var cleanFrom = pos.line + (startOfLineClean(diff, i) ? 0 : 1); + moveOver(pos, str); + var cleanTo = pos.line + (endOfLineClean(diff, i) ? 1 : 0); + if (cleanTo > cleanFrom) { + if (pending) { markChunk(chunkStart, cleanFrom); pending = false } + chunkStart = cleanTo; + } + } else { + pending = true + if (tp == type) { + var end = moveOver(pos, str, true); + var a = posMax(top, pos), b = posMin(bot, end); + if (!posEq(a, b)) + marks.push(editor.markText(a, b, {className: cls})); + pos = end; + } + } + } + if (pending) markChunk(chunkStart, pos.line + 1); + } + + // Updating the gap between editor and original + + function makeConnections(dv) { + if (!dv.showDifferences) return; + + if (dv.svg) { + clear(dv.svg); + var w = dv.gap.offsetWidth; + attrs(dv.svg, "width", w, "height", dv.gap.offsetHeight); + } + if (dv.copyButtons) clear(dv.copyButtons); + + var vpEdit = dv.edit.getViewport(), vpOrig = dv.orig.getViewport(); + var outerTop = dv.mv.wrap.getBoundingClientRect().top + var sTopEdit = outerTop - dv.edit.getScrollerElement().getBoundingClientRect().top + dv.edit.getScrollInfo().top + var sTopOrig = outerTop - dv.orig.getScrollerElement().getBoundingClientRect().top + dv.orig.getScrollInfo().top; + for (var i = 0; i < dv.chunks.length; i++) { + var ch = dv.chunks[i]; + if (ch.editFrom <= vpEdit.to && ch.editTo >= vpEdit.from && + ch.origFrom <= vpOrig.to && ch.origTo >= vpOrig.from) + drawConnectorsForChunk(dv, ch, sTopOrig, sTopEdit, w); + } + } + + function getMatchingOrigLine(editLine, chunks) { + var editStart = 0, origStart = 0; + for (var i = 0; i < chunks.length; i++) { + var chunk = chunks[i]; + if (chunk.editTo > editLine && chunk.editFrom <= editLine) return null; + if (chunk.editFrom > editLine) break; + editStart = chunk.editTo; + origStart = chunk.origTo; + } + return origStart + (editLine - editStart); + } + + // Combines information about chunks and widgets/markers to return + // an array of lines, in a single editor, that probably need to be + // aligned with their counterparts in the editor next to it. + function alignableFor(cm, chunks, isOrig) { + var tracker = cm.state.trackAlignable + var start = cm.firstLine(), trackI = 0 + var result = [] + for (var i = 0;; i++) { + var chunk = chunks[i] + var chunkStart = !chunk ? 1e9 : isOrig ? chunk.origFrom : chunk.editFrom + for (; trackI < tracker.alignable.length; trackI += 2) { + var n = tracker.alignable[trackI] + 1 + if (n <= start) continue + if (n <= chunkStart) result.push(n) + else break + } + if (!chunk) break + result.push(start = isOrig ? chunk.origTo : chunk.editTo) + } + return result + } + + // Given information about alignable lines in two editors, fill in + // the result (an array of three-element arrays) to reflect the + // lines that need to be aligned with each other. + function mergeAlignable(result, origAlignable, chunks, setIndex) { + var rI = 0, origI = 0, chunkI = 0, diff = 0 + outer: for (;; rI++) { + var nextR = result[rI], nextO = origAlignable[origI] + if (!nextR && nextO == null) break + + var rLine = nextR ? nextR[0] : 1e9, oLine = nextO == null ? 1e9 : nextO + while (chunkI < chunks.length) { + var chunk = chunks[chunkI] + if (chunk.origFrom <= oLine && chunk.origTo > oLine) { + origI++ + rI-- + continue outer; + } + if (chunk.editTo > rLine) { + if (chunk.editFrom <= rLine) continue outer; + break + } + diff += (chunk.origTo - chunk.origFrom) - (chunk.editTo - chunk.editFrom) + chunkI++ + } + if (rLine == oLine - diff) { + nextR[setIndex] = oLine + origI++ + } else if (rLine < oLine - diff) { + nextR[setIndex] = rLine + diff + } else { + var record = [oLine - diff, null, null] + record[setIndex] = oLine + result.splice(rI, 0, record) + origI++ + } + } + } + + function findAlignedLines(dv, other) { + var alignable = alignableFor(dv.edit, dv.chunks, false), result = [] + if (other) for (var i = 0, j = 0; i < other.chunks.length; i++) { + var n = other.chunks[i].editTo + while (j < alignable.length && alignable[j] < n) j++ + if (j == alignable.length || alignable[j] != n) alignable.splice(j++, 0, n) + } + for (var i = 0; i < alignable.length; i++) + result.push([alignable[i], null, null]) + + mergeAlignable(result, alignableFor(dv.orig, dv.chunks, true), dv.chunks, 1) + if (other) + mergeAlignable(result, alignableFor(other.orig, other.chunks, true), other.chunks, 2) + + return result + } + + function alignChunks(dv, force) { + if (!dv.dealigned && !force) return; + if (!dv.orig.curOp) return dv.orig.operation(function() { + alignChunks(dv, force); + }); + + dv.dealigned = false; + var other = dv.mv.left == dv ? dv.mv.right : dv.mv.left; + if (other) { + ensureDiff(other); + other.dealigned = false; + } + var linesToAlign = findAlignedLines(dv, other); + + // Clear old aligners + var aligners = dv.mv.aligners; + for (var i = 0; i < aligners.length; i++) + aligners[i].clear(); + aligners.length = 0; + + var cm = [dv.edit, dv.orig], scroll = []; + if (other) cm.push(other.orig); + for (var i = 0; i < cm.length; i++) + scroll.push(cm[i].getScrollInfo().top); + + for (var ln = 0; ln < linesToAlign.length; ln++) + alignLines(cm, linesToAlign[ln], aligners); + + for (var i = 0; i < cm.length; i++) + cm[i].scrollTo(null, scroll[i]); + } + + function alignLines(cm, lines, aligners) { + var maxOffset = 0, offset = []; + for (var i = 0; i < cm.length; i++) if (lines[i] != null) { + var off = cm[i].heightAtLine(lines[i], "local"); + offset[i] = off; + maxOffset = Math.max(maxOffset, off); + } + for (var i = 0; i < cm.length; i++) if (lines[i] != null) { + var diff = maxOffset - offset[i]; + if (diff > 1) + aligners.push(padAbove(cm[i], lines[i], diff)); + } + } + + function padAbove(cm, line, size) { + var above = true; + if (line > cm.lastLine()) { + line--; + above = false; + } + var elt = document.createElement("div"); + elt.className = "CodeMirror-merge-spacer"; + elt.style.height = size + "px"; elt.style.minWidth = "1px"; + return cm.addLineWidget(line, elt, {height: size, above: above, mergeSpacer: true, handleMouseEvents: true}); + } + + function drawConnectorsForChunk(dv, chunk, sTopOrig, sTopEdit, w) { + var flip = dv.type == "left"; + var top = dv.orig.heightAtLine(chunk.origFrom, "local", true) - sTopOrig; + if (dv.svg) { + var topLpx = top; + var topRpx = dv.edit.heightAtLine(chunk.editFrom, "local", true) - sTopEdit; + if (flip) { var tmp = topLpx; topLpx = topRpx; topRpx = tmp; } + var botLpx = dv.orig.heightAtLine(chunk.origTo, "local", true) - sTopOrig; + var botRpx = dv.edit.heightAtLine(chunk.editTo, "local", true) - sTopEdit; + if (flip) { var tmp = botLpx; botLpx = botRpx; botRpx = tmp; } + var curveTop = " C " + w/2 + " " + topRpx + " " + w/2 + " " + topLpx + " " + (w + 2) + " " + topLpx; + var curveBot = " C " + w/2 + " " + botLpx + " " + w/2 + " " + botRpx + " -1 " + botRpx; + attrs(dv.svg.appendChild(document.createElementNS(svgNS, "path")), + "d", "M -1 " + topRpx + curveTop + " L " + (w + 2) + " " + botLpx + curveBot + " z", + "class", dv.classes.connect); + } + if (dv.copyButtons) { + var copy = dv.copyButtons.appendChild(elt("div", dv.type == "left" ? "\u21dd" : "\u21dc", + "CodeMirror-merge-copy")); + var editOriginals = dv.mv.options.allowEditingOriginals; + copy.title = dv.edit.phrase(editOriginals ? "Push to left" : "Revert chunk"); + copy.chunk = chunk; + copy.style.top = (chunk.origTo > chunk.origFrom ? top : dv.edit.heightAtLine(chunk.editFrom, "local") - sTopEdit) + "px"; + + if (editOriginals) { + var topReverse = dv.edit.heightAtLine(chunk.editFrom, "local") - sTopEdit; + var copyReverse = dv.copyButtons.appendChild(elt("div", dv.type == "right" ? "\u21dd" : "\u21dc", + "CodeMirror-merge-copy-reverse")); + copyReverse.title = "Push to right"; + copyReverse.chunk = {editFrom: chunk.origFrom, editTo: chunk.origTo, + origFrom: chunk.editFrom, origTo: chunk.editTo}; + copyReverse.style.top = topReverse + "px"; + dv.type == "right" ? copyReverse.style.left = "2px" : copyReverse.style.right = "2px"; + } + } + } + + function copyChunk(dv, to, from, chunk) { + if (dv.diffOutOfDate) return; + var origStart = chunk.origTo > from.lastLine() ? Pos(chunk.origFrom - 1) : Pos(chunk.origFrom, 0) + var origEnd = Pos(chunk.origTo, 0) + var editStart = chunk.editTo > to.lastLine() ? Pos(chunk.editFrom - 1) : Pos(chunk.editFrom, 0) + var editEnd = Pos(chunk.editTo, 0) + var handler = dv.mv.options.revertChunk + if (handler) + handler(dv.mv, from, origStart, origEnd, to, editStart, editEnd) + else + to.replaceRange(from.getRange(origStart, origEnd), editStart, editEnd) + } + + // Merge view, containing 0, 1, or 2 diff views. + + var MergeView = CodeMirror.MergeView = function(node, options) { + if (!(this instanceof MergeView)) return new MergeView(node, options); + + this.options = options; + var origLeft = options.origLeft, origRight = options.origRight == null ? options.orig : options.origRight; + + var hasLeft = origLeft != null, hasRight = origRight != null; + var panes = 1 + (hasLeft ? 1 : 0) + (hasRight ? 1 : 0); + var wrap = [], left = this.left = null, right = this.right = null; + var self = this; + + if (hasLeft) { + left = this.left = new DiffView(this, "left"); + var leftPane = elt("div", null, "CodeMirror-merge-pane CodeMirror-merge-left"); + wrap.push(leftPane); + wrap.push(buildGap(left)); + } + + var editPane = elt("div", null, "CodeMirror-merge-pane CodeMirror-merge-editor"); + wrap.push(editPane); + + if (hasRight) { + right = this.right = new DiffView(this, "right"); + wrap.push(buildGap(right)); + var rightPane = elt("div", null, "CodeMirror-merge-pane CodeMirror-merge-right"); + wrap.push(rightPane); + } + + (hasRight ? rightPane : editPane).className += " CodeMirror-merge-pane-rightmost"; + + wrap.push(elt("div", null, null, "height: 0; clear: both;")); + + var wrapElt = this.wrap = node.appendChild(elt("div", wrap, "CodeMirror-merge CodeMirror-merge-" + panes + "pane")); + this.edit = CodeMirror(editPane, copyObj(options)); + + if (left) left.init(leftPane, origLeft, options); + if (right) right.init(rightPane, origRight, options); + if (options.collapseIdentical) + this.editor().operation(function() { + collapseIdenticalStretches(self, options.collapseIdentical); + }); + if (options.connect == "align") { + this.aligners = []; + alignChunks(this.left || this.right, true); + } + if (left) left.registerEvents(right) + if (right) right.registerEvents(left) + + + var onResize = function() { + if (left) makeConnections(left); + if (right) makeConnections(right); + }; + CodeMirror.on(window, "resize", onResize); + var resizeInterval = setInterval(function() { + for (var p = wrapElt.parentNode; p && p != document.body; p = p.parentNode) {} + if (!p) { clearInterval(resizeInterval); CodeMirror.off(window, "resize", onResize); } + }, 5000); + }; + + function buildGap(dv) { + var lock = dv.lockButton = elt("div", null, "CodeMirror-merge-scrolllock"); + var lockWrap = elt("div", [lock], "CodeMirror-merge-scrolllock-wrap"); + CodeMirror.on(lock, "click", function() { setScrollLock(dv, !dv.lockScroll); }); + var gapElts = [lockWrap]; + if (dv.mv.options.revertButtons !== false) { + dv.copyButtons = elt("div", null, "CodeMirror-merge-copybuttons-" + dv.type); + CodeMirror.on(dv.copyButtons, "click", function(e) { + var node = e.target || e.srcElement; + if (!node.chunk) return; + if (node.className == "CodeMirror-merge-copy-reverse") { + copyChunk(dv, dv.orig, dv.edit, node.chunk); + return; + } + copyChunk(dv, dv.edit, dv.orig, node.chunk); + }); + gapElts.unshift(dv.copyButtons); + } + if (dv.mv.options.connect != "align") { + var svg = document.createElementNS && document.createElementNS(svgNS, "svg"); + if (svg && !svg.createSVGRect) svg = null; + dv.svg = svg; + if (svg) gapElts.push(svg); + } + + return dv.gap = elt("div", gapElts, "CodeMirror-merge-gap"); + } + + MergeView.prototype = { + constructor: MergeView, + editor: function() { return this.edit; }, + rightOriginal: function() { return this.right && this.right.orig; }, + leftOriginal: function() { return this.left && this.left.orig; }, + setShowDifferences: function(val) { + if (this.right) this.right.setShowDifferences(val); + if (this.left) this.left.setShowDifferences(val); + }, + rightChunks: function() { + if (this.right) { ensureDiff(this.right); return this.right.chunks; } + }, + leftChunks: function() { + if (this.left) { ensureDiff(this.left); return this.left.chunks; } + } + }; + + function asString(obj) { + if (typeof obj == "string") return obj; + else return obj.getValue(); + } + + // Operations on diffs + var dmp; + function getDiff(a, b, ignoreWhitespace) { + if (!dmp) dmp = new diff_match_patch(); + + var diff = dmp.diff_main(a, b); + // The library sometimes leaves in empty parts, which confuse the algorithm + for (var i = 0; i < diff.length; ++i) { + var part = diff[i]; + if (ignoreWhitespace ? !/[^ \t]/.test(part[1]) : !part[1]) { + diff.splice(i--, 1); + } else if (i && diff[i - 1][0] == part[0]) { + diff.splice(i--, 1); + diff[i][1] += part[1]; + } + } + return diff; + } + + function getChunks(diff) { + var chunks = []; + if (!diff.length) return chunks; + var startEdit = 0, startOrig = 0; + var edit = Pos(0, 0), orig = Pos(0, 0); + for (var i = 0; i < diff.length; ++i) { + var part = diff[i], tp = part[0]; + if (tp == DIFF_EQUAL) { + var startOff = !startOfLineClean(diff, i) || edit.line < startEdit || orig.line < startOrig ? 1 : 0; + var cleanFromEdit = edit.line + startOff, cleanFromOrig = orig.line + startOff; + moveOver(edit, part[1], null, orig); + var endOff = endOfLineClean(diff, i) ? 1 : 0; + var cleanToEdit = edit.line + endOff, cleanToOrig = orig.line + endOff; + if (cleanToEdit > cleanFromEdit) { + if (i) chunks.push({origFrom: startOrig, origTo: cleanFromOrig, + editFrom: startEdit, editTo: cleanFromEdit}); + startEdit = cleanToEdit; startOrig = cleanToOrig; + } + } else { + moveOver(tp == DIFF_INSERT ? edit : orig, part[1]); + } + } + if (startEdit <= edit.line || startOrig <= orig.line) + chunks.push({origFrom: startOrig, origTo: orig.line + 1, + editFrom: startEdit, editTo: edit.line + 1}); + return chunks; + } + + function endOfLineClean(diff, i) { + if (i == diff.length - 1) return true; + var next = diff[i + 1][1]; + if ((next.length == 1 && i < diff.length - 2) || next.charCodeAt(0) != 10) return false; + if (i == diff.length - 2) return true; + next = diff[i + 2][1]; + return (next.length > 1 || i == diff.length - 3) && next.charCodeAt(0) == 10; + } + + function startOfLineClean(diff, i) { + if (i == 0) return true; + var last = diff[i - 1][1]; + if (last.charCodeAt(last.length - 1) != 10) return false; + if (i == 1) return true; + last = diff[i - 2][1]; + return last.charCodeAt(last.length - 1) == 10; + } + + function chunkBoundariesAround(chunks, n, nInEdit) { + var beforeE, afterE, beforeO, afterO; + for (var i = 0; i < chunks.length; i++) { + var chunk = chunks[i]; + var fromLocal = nInEdit ? chunk.editFrom : chunk.origFrom; + var toLocal = nInEdit ? chunk.editTo : chunk.origTo; + if (afterE == null) { + if (fromLocal > n) { afterE = chunk.editFrom; afterO = chunk.origFrom; } + else if (toLocal > n) { afterE = chunk.editTo; afterO = chunk.origTo; } + } + if (toLocal <= n) { beforeE = chunk.editTo; beforeO = chunk.origTo; } + else if (fromLocal <= n) { beforeE = chunk.editFrom; beforeO = chunk.origFrom; } + } + return {edit: {before: beforeE, after: afterE}, orig: {before: beforeO, after: afterO}}; + } + + function collapseSingle(cm, from, to) { + cm.addLineClass(from, "wrap", "CodeMirror-merge-collapsed-line"); + var widget = document.createElement("span"); + widget.className = "CodeMirror-merge-collapsed-widget"; + widget.title = cm.phrase("Identical text collapsed. Click to expand."); + var mark = cm.markText(Pos(from, 0), Pos(to - 1), { + inclusiveLeft: true, + inclusiveRight: true, + replacedWith: widget, + clearOnEnter: true + }); + function clear() { + mark.clear(); + cm.removeLineClass(from, "wrap", "CodeMirror-merge-collapsed-line"); + } + if (mark.explicitlyCleared) clear(); + CodeMirror.on(widget, "click", clear); + mark.on("clear", clear); + CodeMirror.on(widget, "click", clear); + return {mark: mark, clear: clear}; + } + + function collapseStretch(size, editors) { + var marks = []; + function clear() { + for (var i = 0; i < marks.length; i++) marks[i].clear(); + } + for (var i = 0; i < editors.length; i++) { + var editor = editors[i]; + var mark = collapseSingle(editor.cm, editor.line, editor.line + size); + marks.push(mark); + mark.mark.on("clear", clear); + } + return marks[0].mark; + } + + function unclearNearChunks(dv, margin, off, clear) { + for (var i = 0; i < dv.chunks.length; i++) { + var chunk = dv.chunks[i]; + for (var l = chunk.editFrom - margin; l < chunk.editTo + margin; l++) { + var pos = l + off; + if (pos >= 0 && pos < clear.length) clear[pos] = false; + } + } + } + + function collapseIdenticalStretches(mv, margin) { + if (typeof margin != "number") margin = 2; + var clear = [], edit = mv.editor(), off = edit.firstLine(); + for (var l = off, e = edit.lastLine(); l <= e; l++) clear.push(true); + if (mv.left) unclearNearChunks(mv.left, margin, off, clear); + if (mv.right) unclearNearChunks(mv.right, margin, off, clear); + + for (var i = 0; i < clear.length; i++) { + if (clear[i]) { + var line = i + off; + for (var size = 1; i < clear.length - 1 && clear[i + 1]; i++, size++) {} + if (size > margin) { + var editors = [{line: line, cm: edit}]; + if (mv.left) editors.push({line: getMatchingOrigLine(line, mv.left.chunks), cm: mv.left.orig}); + if (mv.right) editors.push({line: getMatchingOrigLine(line, mv.right.chunks), cm: mv.right.orig}); + var mark = collapseStretch(size, editors); + if (mv.options.onCollapse) mv.options.onCollapse(mv, line, size, mark); + } + } + } + } + + // General utilities + + function elt(tag, content, className, style) { + var e = document.createElement(tag); + if (className) e.className = className; + if (style) e.style.cssText = style; + if (typeof content == "string") e.appendChild(document.createTextNode(content)); + else if (content) for (var i = 0; i < content.length; ++i) e.appendChild(content[i]); + return e; + } + + function clear(node) { + for (var count = node.childNodes.length; count > 0; --count) + node.removeChild(node.firstChild); + } + + function attrs(elt) { + for (var i = 1; i < arguments.length; i += 2) + elt.setAttribute(arguments[i], arguments[i+1]); + } + + function copyObj(obj, target) { + if (!target) target = {}; + for (var prop in obj) if (obj.hasOwnProperty(prop)) target[prop] = obj[prop]; + return target; + } + + function moveOver(pos, str, copy, other) { + var out = copy ? Pos(pos.line, pos.ch) : pos, at = 0; + for (;;) { + var nl = str.indexOf("\n", at); + if (nl == -1) break; + ++out.line; + if (other) ++other.line; + at = nl + 1; + } + out.ch = (at ? 0 : out.ch) + (str.length - at); + if (other) other.ch = (at ? 0 : other.ch) + (str.length - at); + return out; + } + + // Tracks collapsed markers and line widgets, in order to be able to + // accurately align the content of two editors. + + var F_WIDGET = 1, F_WIDGET_BELOW = 2, F_MARKER = 4 + + function TrackAlignable(cm) { + this.cm = cm + this.alignable = [] + this.height = cm.doc.height + var self = this + cm.on("markerAdded", function(_, marker) { + if (!marker.collapsed) return + var found = marker.find(1) + if (found != null) self.set(found.line, F_MARKER) + }) + cm.on("markerCleared", function(_, marker, _min, max) { + if (max != null && marker.collapsed) + self.check(max, F_MARKER, self.hasMarker) + }) + cm.on("markerChanged", this.signal.bind(this)) + cm.on("lineWidgetAdded", function(_, widget, lineNo) { + if (widget.mergeSpacer) return + if (widget.above) self.set(lineNo - 1, F_WIDGET_BELOW) + else self.set(lineNo, F_WIDGET) + }) + cm.on("lineWidgetCleared", function(_, widget, lineNo) { + if (widget.mergeSpacer) return + if (widget.above) self.check(lineNo - 1, F_WIDGET_BELOW, self.hasWidgetBelow) + else self.check(lineNo, F_WIDGET, self.hasWidget) + }) + cm.on("lineWidgetChanged", this.signal.bind(this)) + cm.on("change", function(_, change) { + var start = change.from.line, nBefore = change.to.line - change.from.line + var nAfter = change.text.length - 1, end = start + nAfter + if (nBefore || nAfter) self.map(start, nBefore, nAfter) + self.check(end, F_MARKER, self.hasMarker) + if (nBefore || nAfter) self.check(change.from.line, F_MARKER, self.hasMarker) + }) + cm.on("viewportChange", function() { + if (self.cm.doc.height != self.height) self.signal() + }) + } + + TrackAlignable.prototype = { + signal: function() { + CodeMirror.signal(this, "realign") + this.height = this.cm.doc.height + }, + + set: function(n, flags) { + var pos = -1 + for (; pos < this.alignable.length; pos += 2) { + var diff = this.alignable[pos] - n + if (diff == 0) { + if ((this.alignable[pos + 1] & flags) == flags) return + this.alignable[pos + 1] |= flags + this.signal() + return + } + if (diff > 0) break + } + this.signal() + this.alignable.splice(pos, 0, n, flags) + }, + + find: function(n) { + for (var i = 0; i < this.alignable.length; i += 2) + if (this.alignable[i] == n) return i + return -1 + }, + + check: function(n, flag, pred) { + var found = this.find(n) + if (found == -1 || !(this.alignable[found + 1] & flag)) return + if (!pred.call(this, n)) { + this.signal() + var flags = this.alignable[found + 1] & ~flag + if (flags) this.alignable[found + 1] = flags + else this.alignable.splice(found, 2) + } + }, + + hasMarker: function(n) { + var handle = this.cm.getLineHandle(n) + if (handle.markedSpans) for (var i = 0; i < handle.markedSpans.length; i++) + if (handle.markedSpans[i].mark.collapsed && handle.markedSpans[i].to != null) + return true + return false + }, + + hasWidget: function(n) { + var handle = this.cm.getLineHandle(n) + if (handle.widgets) for (var i = 0; i < handle.widgets.length; i++) + if (!handle.widgets[i].above && !handle.widgets[i].mergeSpacer) return true + return false + }, + + hasWidgetBelow: function(n) { + if (n == this.cm.lastLine()) return false + var handle = this.cm.getLineHandle(n + 1) + if (handle.widgets) for (var i = 0; i < handle.widgets.length; i++) + if (handle.widgets[i].above && !handle.widgets[i].mergeSpacer) return true + return false + }, + + map: function(from, nBefore, nAfter) { + var diff = nAfter - nBefore, to = from + nBefore, widgetFrom = -1, widgetTo = -1 + for (var i = 0; i < this.alignable.length; i += 2) { + var n = this.alignable[i] + if (n == from && (this.alignable[i + 1] & F_WIDGET_BELOW)) widgetFrom = i + if (n == to && (this.alignable[i + 1] & F_WIDGET_BELOW)) widgetTo = i + if (n <= from) continue + else if (n < to) this.alignable.splice(i--, 2) + else this.alignable[i] += diff + } + if (widgetFrom > -1) { + var flags = this.alignable[widgetFrom + 1] + if (flags == F_WIDGET_BELOW) this.alignable.splice(widgetFrom, 2) + else this.alignable[widgetFrom + 1] = flags & ~F_WIDGET_BELOW + } + if (widgetTo > -1 && nAfter) + this.set(from + nAfter, F_WIDGET_BELOW) + } + } + + function posMin(a, b) { return (a.line - b.line || a.ch - b.ch) < 0 ? a : b; } + function posMax(a, b) { return (a.line - b.line || a.ch - b.ch) > 0 ? a : b; } + function posEq(a, b) { return a.line == b.line && a.ch == b.ch; } + + function findPrevDiff(chunks, start, isOrig) { + for (var i = chunks.length - 1; i >= 0; i--) { + var chunk = chunks[i]; + var to = (isOrig ? chunk.origTo : chunk.editTo) - 1; + if (to < start) return to; + } + } + + function findNextDiff(chunks, start, isOrig) { + for (var i = 0; i < chunks.length; i++) { + var chunk = chunks[i]; + var from = (isOrig ? chunk.origFrom : chunk.editFrom); + if (from > start) return from; + } + } + + function goNearbyDiff(cm, dir) { + var found = null, views = cm.state.diffViews, line = cm.getCursor().line; + if (views) for (var i = 0; i < views.length; i++) { + var dv = views[i], isOrig = cm == dv.orig; + ensureDiff(dv); + var pos = dir < 0 ? findPrevDiff(dv.chunks, line, isOrig) : findNextDiff(dv.chunks, line, isOrig); + if (pos != null && (found == null || (dir < 0 ? pos > found : pos < found))) + found = pos; + } + if (found != null) + cm.setCursor(found, 0); + else + return CodeMirror.Pass; + } + + CodeMirror.commands.goNextDiff = function(cm) { + return goNearbyDiff(cm, 1); + }; + CodeMirror.commands.goPrevDiff = function(cm) { + return goNearbyDiff(cm, -1); + }; +}); diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/lib/codemirror/addon/selection/active-line.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/lib/codemirror/addon/selection/active-line.js new file mode 100644 index 0000000..c7b14ce --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/lib/codemirror/addon/selection/active-line.js @@ -0,0 +1,72 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + var WRAP_CLASS = "CodeMirror-activeline"; + var BACK_CLASS = "CodeMirror-activeline-background"; + var GUTT_CLASS = "CodeMirror-activeline-gutter"; + + CodeMirror.defineOption("styleActiveLine", false, function(cm, val, old) { + var prev = old == CodeMirror.Init ? false : old; + if (val == prev) return + if (prev) { + cm.off("beforeSelectionChange", selectionChange); + clearActiveLines(cm); + delete cm.state.activeLines; + } + if (val) { + cm.state.activeLines = []; + updateActiveLines(cm, cm.listSelections()); + cm.on("beforeSelectionChange", selectionChange); + } + }); + + function clearActiveLines(cm) { + for (var i = 0; i < cm.state.activeLines.length; i++) { + cm.removeLineClass(cm.state.activeLines[i], "wrap", WRAP_CLASS); + cm.removeLineClass(cm.state.activeLines[i], "background", BACK_CLASS); + cm.removeLineClass(cm.state.activeLines[i], "gutter", GUTT_CLASS); + } + } + + function sameArray(a, b) { + if (a.length != b.length) return false; + for (var i = 0; i < a.length; i++) + if (a[i] != b[i]) return false; + return true; + } + + function updateActiveLines(cm, ranges) { + var active = []; + for (var i = 0; i < ranges.length; i++) { + var range = ranges[i]; + var option = cm.getOption("styleActiveLine"); + if (typeof option == "object" && option.nonEmpty ? range.anchor.line != range.head.line : !range.empty()) + continue + var line = cm.getLineHandleVisualStart(range.head.line); + if (active[active.length - 1] != line) active.push(line); + } + if (sameArray(cm.state.activeLines, active)) return; + cm.operation(function() { + clearActiveLines(cm); + for (var i = 0; i < active.length; i++) { + cm.addLineClass(active[i], "wrap", WRAP_CLASS); + cm.addLineClass(active[i], "background", BACK_CLASS); + cm.addLineClass(active[i], "gutter", GUTT_CLASS); + } + cm.state.activeLines = active; + }); + } + + function selectionChange(cm, sel) { + updateActiveLines(cm, sel.ranges); + } +}); diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/lib/codemirror/lib/codemirror.css b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/lib/codemirror/lib/codemirror.css new file mode 100644 index 0000000..c7a8ae7 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/lib/codemirror/lib/codemirror.css @@ -0,0 +1,346 @@ +/* BASICS */ + +.CodeMirror { + /* Set height, width, borders, and global font properties here */ + font-family: monospace; + height: 300px; + color: black; + direction: ltr; +} + +/* PADDING */ + +.CodeMirror-lines { + padding: 4px 0; /* Vertical padding around content */ +} +.CodeMirror pre { + padding: 0 4px; /* Horizontal padding of content */ +} + +.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { + background-color: white; /* The little square between H and V scrollbars */ +} + +/* GUTTER */ + +.CodeMirror-gutters { + border-right: 1px solid #ddd; + background-color: #f7f7f7; + white-space: nowrap; +} +.CodeMirror-linenumbers {} +.CodeMirror-linenumber { + padding: 0 3px 0 5px; + min-width: 20px; + text-align: right; + color: #999; + white-space: nowrap; +} + +.CodeMirror-guttermarker { color: black; } +.CodeMirror-guttermarker-subtle { color: #999; } + +/* CURSOR */ + +.CodeMirror-cursor { + border-left: 1px solid black; + border-right: none; + width: 0; +} +/* Shown when moving in bi-directional text */ +.CodeMirror div.CodeMirror-secondarycursor { + border-left: 1px solid silver; +} +.cm-fat-cursor .CodeMirror-cursor { + width: auto; + border: 0 !important; + background: #7e7; +} +.cm-fat-cursor div.CodeMirror-cursors { + z-index: 1; +} +.cm-fat-cursor-mark { + background-color: rgba(20, 255, 20, 0.5); + -webkit-animation: blink 1.06s steps(1) infinite; + -moz-animation: blink 1.06s steps(1) infinite; + animation: blink 1.06s steps(1) infinite; +} +.cm-animate-fat-cursor { + width: auto; + border: 0; + -webkit-animation: blink 1.06s steps(1) infinite; + -moz-animation: blink 1.06s steps(1) infinite; + animation: blink 1.06s steps(1) infinite; + background-color: #7e7; +} +@-moz-keyframes blink { + 0% {} + 50% { background-color: transparent; } + 100% {} +} +@-webkit-keyframes blink { + 0% {} + 50% { background-color: transparent; } + 100% {} +} +@keyframes blink { + 0% {} + 50% { background-color: transparent; } + 100% {} +} + +/* Can style cursor different in overwrite (non-insert) mode */ +.CodeMirror-overwrite .CodeMirror-cursor {} + +.cm-tab { display: inline-block; text-decoration: inherit; } + +.CodeMirror-rulers { + position: absolute; + left: 0; right: 0; top: -50px; bottom: -20px; + overflow: hidden; +} +.CodeMirror-ruler { + border-left: 1px solid #ccc; + top: 0; bottom: 0; + position: absolute; +} + +/* DEFAULT THEME */ + +.cm-s-default .cm-header {color: blue;} +.cm-s-default .cm-quote {color: #090;} +.cm-negative {color: #d44;} +.cm-positive {color: #292;} +.cm-header, .cm-strong {font-weight: bold;} +.cm-em {font-style: italic;} +.cm-link {text-decoration: underline;} +.cm-strikethrough {text-decoration: line-through;} + +.cm-s-default .cm-keyword {color: #708;} +.cm-s-default .cm-atom {color: #219;} +.cm-s-default .cm-number {color: #164;} +.cm-s-default .cm-def {color: #00f;} +.cm-s-default .cm-variable, +.cm-s-default .cm-punctuation, +.cm-s-default .cm-property, +.cm-s-default .cm-operator {} +.cm-s-default .cm-variable-2 {color: #05a;} +.cm-s-default .cm-variable-3, .cm-s-default .cm-type {color: #085;} +.cm-s-default .cm-comment {color: #a50;} +.cm-s-default .cm-string {color: #a11;} +.cm-s-default .cm-string-2 {color: #f50;} +.cm-s-default .cm-meta {color: #555;} +.cm-s-default .cm-qualifier {color: #555;} +.cm-s-default .cm-builtin {color: #30a;} +.cm-s-default .cm-bracket {color: #997;} +.cm-s-default .cm-tag {color: #170;} +.cm-s-default .cm-attribute {color: #00c;} +.cm-s-default .cm-hr {color: #999;} +.cm-s-default .cm-link {color: #00c;} + +.cm-s-default .cm-error {color: #f00;} +.cm-invalidchar {color: #f00;} + +.CodeMirror-composing { border-bottom: 2px solid; } + +/* Default styles for common addons */ + +div.CodeMirror span.CodeMirror-matchingbracket {color: #0b0;} +div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #a22;} +.CodeMirror-matchingtag { background: rgba(255, 150, 0, .3); } +.CodeMirror-activeline-background {background: #e8f2ff;} + +/* STOP */ + +/* The rest of this file contains styles related to the mechanics of + the editor. You probably shouldn't touch them. */ + +.CodeMirror { + position: relative; + overflow: hidden; + background: white; +} + +.CodeMirror-scroll { + overflow: scroll !important; /* Things will break if this is overridden */ + /* 30px is the magic margin used to hide the element's real scrollbars */ + /* See overflow: hidden in .CodeMirror */ + margin-bottom: -30px; margin-right: -30px; + padding-bottom: 30px; + height: 100%; + outline: none; /* Prevent dragging from highlighting the element */ + position: relative; +} +.CodeMirror-sizer { + position: relative; + border-right: 30px solid transparent; +} + +/* The fake, visible scrollbars. Used to force redraw during scrolling + before actual scrolling happens, thus preventing shaking and + flickering artifacts. */ +.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { + position: absolute; + z-index: 6; + display: none; +} +.CodeMirror-vscrollbar { + right: 0; top: 0; + overflow-x: hidden; + overflow-y: scroll; +} +.CodeMirror-hscrollbar { + bottom: 0; left: 0; + overflow-y: hidden; + overflow-x: scroll; +} +.CodeMirror-scrollbar-filler { + right: 0; bottom: 0; +} +.CodeMirror-gutter-filler { + left: 0; bottom: 0; +} + +.CodeMirror-gutters { + position: absolute; left: 0; top: 0; + min-height: 100%; + z-index: 3; +} +.CodeMirror-gutter { + white-space: normal; + height: 100%; + display: inline-block; + vertical-align: top; + margin-bottom: -30px; +} +.CodeMirror-gutter-wrapper { + position: absolute; + z-index: 4; + background: none !important; + border: none !important; +} +.CodeMirror-gutter-background { + position: absolute; + top: 0; bottom: 0; + z-index: 4; +} +.CodeMirror-gutter-elt { + position: absolute; + cursor: default; + z-index: 4; +} +.CodeMirror-gutter-wrapper ::selection { background-color: transparent } +.CodeMirror-gutter-wrapper ::-moz-selection { background-color: transparent } + +.CodeMirror-lines { + cursor: text; + min-height: 1px; /* prevents collapsing before first draw */ +} +.CodeMirror pre { + /* Reset some styles that the rest of the page might have set */ + -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; + border-width: 0; + background: transparent; + font-family: inherit; + font-size: inherit; + margin: 0; + white-space: pre; + word-wrap: normal; + line-height: inherit; + color: inherit; + z-index: 2; + position: relative; + overflow: visible; + -webkit-tap-highlight-color: transparent; + -webkit-font-variant-ligatures: contextual; + font-variant-ligatures: contextual; +} +.CodeMirror-wrap pre { + word-wrap: break-word; + white-space: pre-wrap; + word-break: normal; +} + +.CodeMirror-linebackground { + position: absolute; + left: 0; right: 0; top: 0; bottom: 0; + z-index: 0; +} + +.CodeMirror-linewidget { + position: relative; + z-index: 2; + padding: 0.1px; /* Force widget margins to stay inside of the container */ +} + +.CodeMirror-widget {} + +.CodeMirror-rtl pre { direction: rtl; } + +.CodeMirror-code { + outline: none; +} + +/* Force content-box sizing for the elements where we expect it */ +.CodeMirror-scroll, +.CodeMirror-sizer, +.CodeMirror-gutter, +.CodeMirror-gutters, +.CodeMirror-linenumber { + -moz-box-sizing: content-box; + box-sizing: content-box; +} + +.CodeMirror-measure { + position: absolute; + width: 100%; + height: 0; + overflow: hidden; + visibility: hidden; +} + +.CodeMirror-cursor { + position: absolute; + pointer-events: none; +} +.CodeMirror-measure pre { position: static; } + +div.CodeMirror-cursors { + visibility: hidden; + position: relative; + z-index: 3; +} +div.CodeMirror-dragcursors { + visibility: visible; +} + +.CodeMirror-focused div.CodeMirror-cursors { + visibility: visible; +} + +.CodeMirror-selected { background: #d9d9d9; } +.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; } +.CodeMirror-crosshair { cursor: crosshair; } +.CodeMirror-line::selection, .CodeMirror-line > span::selection, .CodeMirror-line > span > span::selection { background: #d7d4f0; } +.CodeMirror-line::-moz-selection, .CodeMirror-line > span::-moz-selection, .CodeMirror-line > span > span::-moz-selection { background: #d7d4f0; } + +.cm-searching { + background-color: #ffa; + background-color: rgba(255, 255, 0, .4); +} + +/* Used to force a border model for a node */ +.cm-force-border { padding-right: .1px; } + +@media print { + /* Hide the cursor when printing */ + .CodeMirror div.CodeMirror-cursors { + visibility: hidden; + } +} + +/* See issue #2901 */ +.cm-tab-wrap-hack:after { content: ''; } + +/* Help users use markselection to safely style text background */ +span.CodeMirror-selectedtext { background: none; } diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/lib/codemirror/lib/codemirror.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/lib/codemirror/lib/codemirror.js new file mode 100644 index 0000000..e178478 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/lib/codemirror/lib/codemirror.js @@ -0,0 +1,9693 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +// This is CodeMirror (https://codemirror.net), a code editor +// implemented in JavaScript on top of the browser's DOM. +// +// You can find some technical background for some of the code below +// at http://marijnhaverbeke.nl/blog/#cm-internals . + +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global.CodeMirror = factory()); +}(this, (function () { 'use strict'; + +// Kludges for bugs and behavior differences that can't be feature +// detected are enabled based on userAgent etc sniffing. +var userAgent = navigator.userAgent +var platform = navigator.platform + +var gecko = /gecko\/\d/i.test(userAgent) +var ie_upto10 = /MSIE \d/.test(userAgent) +var ie_11up = /Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(userAgent) +var edge = /Edge\/(\d+)/.exec(userAgent) +var ie = ie_upto10 || ie_11up || edge +var ie_version = ie && (ie_upto10 ? document.documentMode || 6 : +(edge || ie_11up)[1]) +var webkit = !edge && /WebKit\//.test(userAgent) +var qtwebkit = webkit && /Qt\/\d+\.\d+/.test(userAgent) +var chrome = !edge && /Chrome\//.test(userAgent) +var presto = /Opera\//.test(userAgent) +var safari = /Apple Computer/.test(navigator.vendor) +var mac_geMountainLion = /Mac OS X 1\d\D([8-9]|\d\d)\D/.test(userAgent) +var phantom = /PhantomJS/.test(userAgent) + +var ios = !edge && /AppleWebKit/.test(userAgent) && /Mobile\/\w+/.test(userAgent) +var android = /Android/.test(userAgent) +// This is woefully incomplete. Suggestions for alternative methods welcome. +var mobile = ios || android || /webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent) +var mac = ios || /Mac/.test(platform) +var chromeOS = /\bCrOS\b/.test(userAgent) +var windows = /win/i.test(platform) + +var presto_version = presto && userAgent.match(/Version\/(\d*\.\d*)/) +if (presto_version) { presto_version = Number(presto_version[1]) } +if (presto_version && presto_version >= 15) { presto = false; webkit = true } +// Some browsers use the wrong event properties to signal cmd/ctrl on OS X +var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11)) +var captureRightClick = gecko || (ie && ie_version >= 9) + +function classTest(cls) { return new RegExp("(^|\\s)" + cls + "(?:$|\\s)\\s*") } + +var rmClass = function(node, cls) { + var current = node.className + var match = classTest(cls).exec(current) + if (match) { + var after = current.slice(match.index + match[0].length) + node.className = current.slice(0, match.index) + (after ? match[1] + after : "") + } +} + +function removeChildren(e) { + for (var count = e.childNodes.length; count > 0; --count) + { e.removeChild(e.firstChild) } + return e +} + +function removeChildrenAndAdd(parent, e) { + return removeChildren(parent).appendChild(e) +} + +function elt(tag, content, className, style) { + var e = document.createElement(tag) + if (className) { e.className = className } + if (style) { e.style.cssText = style } + if (typeof content == "string") { e.appendChild(document.createTextNode(content)) } + else if (content) { for (var i = 0; i < content.length; ++i) { e.appendChild(content[i]) } } + return e +} +// wrapper for elt, which removes the elt from the accessibility tree +function eltP(tag, content, className, style) { + var e = elt(tag, content, className, style) + e.setAttribute("role", "presentation") + return e +} + +var range +if (document.createRange) { range = function(node, start, end, endNode) { + var r = document.createRange() + r.setEnd(endNode || node, end) + r.setStart(node, start) + return r +} } +else { range = function(node, start, end) { + var r = document.body.createTextRange() + try { r.moveToElementText(node.parentNode) } + catch(e) { return r } + r.collapse(true) + r.moveEnd("character", end) + r.moveStart("character", start) + return r +} } + +function contains(parent, child) { + if (child.nodeType == 3) // Android browser always returns false when child is a textnode + { child = child.parentNode } + if (parent.contains) + { return parent.contains(child) } + do { + if (child.nodeType == 11) { child = child.host } + if (child == parent) { return true } + } while (child = child.parentNode) +} + +function activeElt() { + // IE and Edge may throw an "Unspecified Error" when accessing document.activeElement. + // IE < 10 will throw when accessed while the page is loading or in an iframe. + // IE > 9 and Edge will throw when accessed in an iframe if document.body is unavailable. + var activeElement + try { + activeElement = document.activeElement + } catch(e) { + activeElement = document.body || null + } + while (activeElement && activeElement.shadowRoot && activeElement.shadowRoot.activeElement) + { activeElement = activeElement.shadowRoot.activeElement } + return activeElement +} + +function addClass(node, cls) { + var current = node.className + if (!classTest(cls).test(current)) { node.className += (current ? " " : "") + cls } +} +function joinClasses(a, b) { + var as = a.split(" ") + for (var i = 0; i < as.length; i++) + { if (as[i] && !classTest(as[i]).test(b)) { b += " " + as[i] } } + return b +} + +var selectInput = function(node) { node.select() } +if (ios) // Mobile Safari apparently has a bug where select() is broken. + { selectInput = function(node) { node.selectionStart = 0; node.selectionEnd = node.value.length } } +else if (ie) // Suppress mysterious IE10 errors + { selectInput = function(node) { try { node.select() } catch(_e) {} } } + +function bind(f) { + var args = Array.prototype.slice.call(arguments, 1) + return function(){return f.apply(null, args)} +} + +function copyObj(obj, target, overwrite) { + if (!target) { target = {} } + for (var prop in obj) + { if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop))) + { target[prop] = obj[prop] } } + return target +} + +// Counts the column offset in a string, taking tabs into account. +// Used mostly to find indentation. +function countColumn(string, end, tabSize, startIndex, startValue) { + if (end == null) { + end = string.search(/[^\s\u00a0]/) + if (end == -1) { end = string.length } + } + for (var i = startIndex || 0, n = startValue || 0;;) { + var nextTab = string.indexOf("\t", i) + if (nextTab < 0 || nextTab >= end) + { return n + (end - i) } + n += nextTab - i + n += tabSize - (n % tabSize) + i = nextTab + 1 + } +} + +var Delayed = function() {this.id = null}; +Delayed.prototype.set = function (ms, f) { + clearTimeout(this.id) + this.id = setTimeout(f, ms) +}; + +function indexOf(array, elt) { + for (var i = 0; i < array.length; ++i) + { if (array[i] == elt) { return i } } + return -1 +} + +// Number of pixels added to scroller and sizer to hide scrollbar +var scrollerGap = 30 + +// Returned or thrown by various protocols to signal 'I'm not +// handling this'. +var Pass = {toString: function(){return "CodeMirror.Pass"}} + +// Reused option objects for setSelection & friends +var sel_dontScroll = {scroll: false}; +var sel_mouse = {origin: "*mouse"}; +var sel_move = {origin: "+move"}; +// The inverse of countColumn -- find the offset that corresponds to +// a particular column. +function findColumn(string, goal, tabSize) { + for (var pos = 0, col = 0;;) { + var nextTab = string.indexOf("\t", pos) + if (nextTab == -1) { nextTab = string.length } + var skipped = nextTab - pos + if (nextTab == string.length || col + skipped >= goal) + { return pos + Math.min(skipped, goal - col) } + col += nextTab - pos + col += tabSize - (col % tabSize) + pos = nextTab + 1 + if (col >= goal) { return pos } + } +} + +var spaceStrs = [""] +function spaceStr(n) { + while (spaceStrs.length <= n) + { spaceStrs.push(lst(spaceStrs) + " ") } + return spaceStrs[n] +} + +function lst(arr) { return arr[arr.length-1] } + +function map(array, f) { + var out = [] + for (var i = 0; i < array.length; i++) { out[i] = f(array[i], i) } + return out +} + +function insertSorted(array, value, score) { + var pos = 0, priority = score(value) + while (pos < array.length && score(array[pos]) <= priority) { pos++ } + array.splice(pos, 0, value) +} + +function nothing() {} + +function createObj(base, props) { + var inst + if (Object.create) { + inst = Object.create(base) + } else { + nothing.prototype = base + inst = new nothing() + } + if (props) { copyObj(props, inst) } + return inst +} + +var nonASCIISingleCaseWordChar = /[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/ +function isWordCharBasic(ch) { + return /\w/.test(ch) || ch > "\x80" && + (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch)) +} +function isWordChar(ch, helper) { + if (!helper) { return isWordCharBasic(ch) } + if (helper.source.indexOf("\\w") > -1 && isWordCharBasic(ch)) { return true } + return helper.test(ch) +} + +function isEmpty(obj) { + for (var n in obj) { if (obj.hasOwnProperty(n) && obj[n]) { return false } } + return true +} + +// Extending unicode characters. A series of a non-extending char + +// any number of extending chars is treated as a single unit as far +// as editing and measuring is concerned. This is not fully correct, +// since some scripts/fonts/browsers also treat other configurations +// of code points as a group. +var extendingChars = /[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/ +function isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendingChars.test(ch) } + +// Returns a number from the range [`0`; `str.length`] unless `pos` is outside that range. +function skipExtendingChars(str, pos, dir) { + while ((dir < 0 ? pos > 0 : pos < str.length) && isExtendingChar(str.charAt(pos))) { pos += dir } + return pos +} + +// Returns the value from the range [`from`; `to`] that satisfies +// `pred` and is closest to `from`. Assumes that at least `to` +// satisfies `pred`. Supports `from` being greater than `to`. +function findFirst(pred, from, to) { + // At any point we are certain `to` satisfies `pred`, don't know + // whether `from` does. + var dir = from > to ? -1 : 1 + for (;;) { + if (from == to) { return from } + var midF = (from + to) / 2, mid = dir < 0 ? Math.ceil(midF) : Math.floor(midF) + if (mid == from) { return pred(mid) ? from : to } + if (pred(mid)) { to = mid } + else { from = mid + dir } + } +} + +// The display handles the DOM integration, both for input reading +// and content drawing. It holds references to DOM nodes and +// display-related state. + +function Display(place, doc, input) { + var d = this + this.input = input + + // Covers bottom-right square when both scrollbars are present. + d.scrollbarFiller = elt("div", null, "CodeMirror-scrollbar-filler") + d.scrollbarFiller.setAttribute("cm-not-content", "true") + // Covers bottom of gutter when coverGutterNextToScrollbar is on + // and h scrollbar is present. + d.gutterFiller = elt("div", null, "CodeMirror-gutter-filler") + d.gutterFiller.setAttribute("cm-not-content", "true") + // Will contain the actual code, positioned to cover the viewport. + d.lineDiv = eltP("div", null, "CodeMirror-code") + // Elements are added to these to represent selection and cursors. + d.selectionDiv = elt("div", null, null, "position: relative; z-index: 1") + d.cursorDiv = elt("div", null, "CodeMirror-cursors") + // A visibility: hidden element used to find the size of things. + d.measure = elt("div", null, "CodeMirror-measure") + // When lines outside of the viewport are measured, they are drawn in this. + d.lineMeasure = elt("div", null, "CodeMirror-measure") + // Wraps everything that needs to exist inside the vertically-padded coordinate system + d.lineSpace = eltP("div", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv], + null, "position: relative; outline: none") + var lines = eltP("div", [d.lineSpace], "CodeMirror-lines") + // Moved around its parent to cover visible view. + d.mover = elt("div", [lines], null, "position: relative") + // Set to the height of the document, allowing scrolling. + d.sizer = elt("div", [d.mover], "CodeMirror-sizer") + d.sizerWidth = null + // Behavior of elts with overflow: auto and padding is + // inconsistent across browsers. This is used to ensure the + // scrollable area is big enough. + d.heightForcer = elt("div", null, null, "position: absolute; height: " + scrollerGap + "px; width: 1px;") + // Will contain the gutters, if any. + d.gutters = elt("div", null, "CodeMirror-gutters") + d.lineGutter = null + // Actual scrollable element. + d.scroller = elt("div", [d.sizer, d.heightForcer, d.gutters], "CodeMirror-scroll") + d.scroller.setAttribute("tabIndex", "-1") + // The element in which the editor lives. + d.wrapper = elt("div", [d.scrollbarFiller, d.gutterFiller, d.scroller], "CodeMirror") + + // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported) + if (ie && ie_version < 8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0 } + if (!webkit && !(gecko && mobile)) { d.scroller.draggable = true } + + if (place) { + if (place.appendChild) { place.appendChild(d.wrapper) } + else { place(d.wrapper) } + } + + // Current rendered range (may be bigger than the view window). + d.viewFrom = d.viewTo = doc.first + d.reportedViewFrom = d.reportedViewTo = doc.first + // Information about the rendered lines. + d.view = [] + d.renderedView = null + // Holds info about a single rendered line when it was rendered + // for measurement, while not in view. + d.externalMeasured = null + // Empty space (in pixels) above the view + d.viewOffset = 0 + d.lastWrapHeight = d.lastWrapWidth = 0 + d.updateLineNumbers = null + + d.nativeBarWidth = d.barHeight = d.barWidth = 0 + d.scrollbarsClipped = false + + // Used to only resize the line number gutter when necessary (when + // the amount of lines crosses a boundary that makes its width change) + d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null + // Set to true when a non-horizontal-scrolling line widget is + // added. As an optimization, line widget aligning is skipped when + // this is false. + d.alignWidgets = false + + d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null + + // Tracks the maximum line length so that the horizontal scrollbar + // can be kept static when scrolling. + d.maxLine = null + d.maxLineLength = 0 + d.maxLineChanged = false + + // Used for measuring wheel scrolling granularity + d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null + + // True when shift is held down. + d.shift = false + + // Used to track whether anything happened since the context menu + // was opened. + d.selForContextMenu = null + + d.activeTouch = null + + input.init(d) +} + +// Find the line object corresponding to the given line number. +function getLine(doc, n) { + n -= doc.first + if (n < 0 || n >= doc.size) { throw new Error("There is no line " + (n + doc.first) + " in the document.") } + var chunk = doc + while (!chunk.lines) { + for (var i = 0;; ++i) { + var child = chunk.children[i], sz = child.chunkSize() + if (n < sz) { chunk = child; break } + n -= sz + } + } + return chunk.lines[n] +} + +// Get the part of a document between two positions, as an array of +// strings. +function getBetween(doc, start, end) { + var out = [], n = start.line + doc.iter(start.line, end.line + 1, function (line) { + var text = line.text + if (n == end.line) { text = text.slice(0, end.ch) } + if (n == start.line) { text = text.slice(start.ch) } + out.push(text) + ++n + }) + return out +} +// Get the lines between from and to, as array of strings. +function getLines(doc, from, to) { + var out = [] + doc.iter(from, to, function (line) { out.push(line.text) }) // iter aborts when callback returns truthy value + return out +} + +// Update the height of a line, propagating the height change +// upwards to parent nodes. +function updateLineHeight(line, height) { + var diff = height - line.height + if (diff) { for (var n = line; n; n = n.parent) { n.height += diff } } +} + +// Given a line object, find its line number by walking up through +// its parent links. +function lineNo(line) { + if (line.parent == null) { return null } + var cur = line.parent, no = indexOf(cur.lines, line) + for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) { + for (var i = 0;; ++i) { + if (chunk.children[i] == cur) { break } + no += chunk.children[i].chunkSize() + } + } + return no + cur.first +} + +// Find the line at the given vertical position, using the height +// information in the document tree. +function lineAtHeight(chunk, h) { + var n = chunk.first + outer: do { + for (var i$1 = 0; i$1 < chunk.children.length; ++i$1) { + var child = chunk.children[i$1], ch = child.height + if (h < ch) { chunk = child; continue outer } + h -= ch + n += child.chunkSize() + } + return n + } while (!chunk.lines) + var i = 0 + for (; i < chunk.lines.length; ++i) { + var line = chunk.lines[i], lh = line.height + if (h < lh) { break } + h -= lh + } + return n + i +} + +function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size} + +function lineNumberFor(options, i) { + return String(options.lineNumberFormatter(i + options.firstLineNumber)) +} + +// A Pos instance represents a position within the text. +function Pos(line, ch, sticky) { + if ( sticky === void 0 ) sticky = null; + + if (!(this instanceof Pos)) { return new Pos(line, ch, sticky) } + this.line = line + this.ch = ch + this.sticky = sticky +} + +// Compare two positions, return 0 if they are the same, a negative +// number when a is less, and a positive number otherwise. +function cmp(a, b) { return a.line - b.line || a.ch - b.ch } + +function equalCursorPos(a, b) { return a.sticky == b.sticky && cmp(a, b) == 0 } + +function copyPos(x) {return Pos(x.line, x.ch)} +function maxPos(a, b) { return cmp(a, b) < 0 ? b : a } +function minPos(a, b) { return cmp(a, b) < 0 ? a : b } + +// Most of the external API clips given positions to make sure they +// actually exist within the document. +function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1))} +function clipPos(doc, pos) { + if (pos.line < doc.first) { return Pos(doc.first, 0) } + var last = doc.first + doc.size - 1 + if (pos.line > last) { return Pos(last, getLine(doc, last).text.length) } + return clipToLen(pos, getLine(doc, pos.line).text.length) +} +function clipToLen(pos, linelen) { + var ch = pos.ch + if (ch == null || ch > linelen) { return Pos(pos.line, linelen) } + else if (ch < 0) { return Pos(pos.line, 0) } + else { return pos } +} +function clipPosArray(doc, array) { + var out = [] + for (var i = 0; i < array.length; i++) { out[i] = clipPos(doc, array[i]) } + return out +} + +// Optimize some code when these features are not used. +var sawReadOnlySpans = false; +var sawCollapsedSpans = false; +function seeReadOnlySpans() { + sawReadOnlySpans = true +} + +function seeCollapsedSpans() { + sawCollapsedSpans = true +} + +// TEXTMARKER SPANS + +function MarkedSpan(marker, from, to) { + this.marker = marker + this.from = from; this.to = to +} + +// Search an array of spans for a span matching the given marker. +function getMarkedSpanFor(spans, marker) { + if (spans) { for (var i = 0; i < spans.length; ++i) { + var span = spans[i] + if (span.marker == marker) { return span } + } } +} +// Remove a span from an array, returning undefined if no spans are +// left (we don't store arrays for lines without spans). +function removeMarkedSpan(spans, span) { + var r + for (var i = 0; i < spans.length; ++i) + { if (spans[i] != span) { (r || (r = [])).push(spans[i]) } } + return r +} +// Add a span to a line. +function addMarkedSpan(line, span) { + line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span] + span.marker.attachLine(line) +} + +// Used for the algorithm that adjusts markers for a change in the +// document. These functions cut an array of spans at a given +// character position, returning an array of remaining chunks (or +// undefined if nothing remains). +function markedSpansBefore(old, startCh, isInsert) { + var nw + if (old) { for (var i = 0; i < old.length; ++i) { + var span = old[i], marker = span.marker + var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh) + if (startsBefore || span.from == startCh && marker.type == "bookmark" && (!isInsert || !span.marker.insertLeft)) { + var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh) + ;(nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to)) + } + } } + return nw +} +function markedSpansAfter(old, endCh, isInsert) { + var nw + if (old) { for (var i = 0; i < old.length; ++i) { + var span = old[i], marker = span.marker + var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh) + if (endsAfter || span.from == endCh && marker.type == "bookmark" && (!isInsert || span.marker.insertLeft)) { + var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh) + ;(nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh, + span.to == null ? null : span.to - endCh)) + } + } } + return nw +} + +// Given a change object, compute the new set of marker spans that +// cover the line in which the change took place. Removes spans +// entirely within the change, reconnects spans belonging to the +// same marker that appear on both sides of the change, and cuts off +// spans partially within the change. Returns an array of span +// arrays with one element for each line in (after) the change. +function stretchSpansOverChange(doc, change) { + if (change.full) { return null } + var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans + var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans + if (!oldFirst && !oldLast) { return null } + + var startCh = change.from.ch, endCh = change.to.ch, isInsert = cmp(change.from, change.to) == 0 + // Get the spans that 'stick out' on both sides + var first = markedSpansBefore(oldFirst, startCh, isInsert) + var last = markedSpansAfter(oldLast, endCh, isInsert) + + // Next, merge those two ends + var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0) + if (first) { + // Fix up .to properties of first + for (var i = 0; i < first.length; ++i) { + var span = first[i] + if (span.to == null) { + var found = getMarkedSpanFor(last, span.marker) + if (!found) { span.to = startCh } + else if (sameLine) { span.to = found.to == null ? null : found.to + offset } + } + } + } + if (last) { + // Fix up .from in last (or move them into first in case of sameLine) + for (var i$1 = 0; i$1 < last.length; ++i$1) { + var span$1 = last[i$1] + if (span$1.to != null) { span$1.to += offset } + if (span$1.from == null) { + var found$1 = getMarkedSpanFor(first, span$1.marker) + if (!found$1) { + span$1.from = offset + if (sameLine) { (first || (first = [])).push(span$1) } + } + } else { + span$1.from += offset + if (sameLine) { (first || (first = [])).push(span$1) } + } + } + } + // Make sure we didn't create any zero-length spans + if (first) { first = clearEmptySpans(first) } + if (last && last != first) { last = clearEmptySpans(last) } + + var newMarkers = [first] + if (!sameLine) { + // Fill gap with whole-line-spans + var gap = change.text.length - 2, gapMarkers + if (gap > 0 && first) + { for (var i$2 = 0; i$2 < first.length; ++i$2) + { if (first[i$2].to == null) + { (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i$2].marker, null, null)) } } } + for (var i$3 = 0; i$3 < gap; ++i$3) + { newMarkers.push(gapMarkers) } + newMarkers.push(last) + } + return newMarkers +} + +// Remove spans that are empty and don't have a clearWhenEmpty +// option of false. +function clearEmptySpans(spans) { + for (var i = 0; i < spans.length; ++i) { + var span = spans[i] + if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false) + { spans.splice(i--, 1) } + } + if (!spans.length) { return null } + return spans +} + +// Used to 'clip' out readOnly ranges when making a change. +function removeReadOnlyRanges(doc, from, to) { + var markers = null + doc.iter(from.line, to.line + 1, function (line) { + if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) { + var mark = line.markedSpans[i].marker + if (mark.readOnly && (!markers || indexOf(markers, mark) == -1)) + { (markers || (markers = [])).push(mark) } + } } + }) + if (!markers) { return null } + var parts = [{from: from, to: to}] + for (var i = 0; i < markers.length; ++i) { + var mk = markers[i], m = mk.find(0) + for (var j = 0; j < parts.length; ++j) { + var p = parts[j] + if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) { continue } + var newParts = [j, 1], dfrom = cmp(p.from, m.from), dto = cmp(p.to, m.to) + if (dfrom < 0 || !mk.inclusiveLeft && !dfrom) + { newParts.push({from: p.from, to: m.from}) } + if (dto > 0 || !mk.inclusiveRight && !dto) + { newParts.push({from: m.to, to: p.to}) } + parts.splice.apply(parts, newParts) + j += newParts.length - 3 + } + } + return parts +} + +// Connect or disconnect spans from a line. +function detachMarkedSpans(line) { + var spans = line.markedSpans + if (!spans) { return } + for (var i = 0; i < spans.length; ++i) + { spans[i].marker.detachLine(line) } + line.markedSpans = null +} +function attachMarkedSpans(line, spans) { + if (!spans) { return } + for (var i = 0; i < spans.length; ++i) + { spans[i].marker.attachLine(line) } + line.markedSpans = spans +} + +// Helpers used when computing which overlapping collapsed span +// counts as the larger one. +function extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0 } +function extraRight(marker) { return marker.inclusiveRight ? 1 : 0 } + +// Returns a number indicating which of two overlapping collapsed +// spans is larger (and thus includes the other). Falls back to +// comparing ids when the spans cover exactly the same range. +function compareCollapsedMarkers(a, b) { + var lenDiff = a.lines.length - b.lines.length + if (lenDiff != 0) { return lenDiff } + var aPos = a.find(), bPos = b.find() + var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b) + if (fromCmp) { return -fromCmp } + var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b) + if (toCmp) { return toCmp } + return b.id - a.id +} + +// Find out whether a line ends or starts in a collapsed span. If +// so, return the marker for that span. +function collapsedSpanAtSide(line, start) { + var sps = sawCollapsedSpans && line.markedSpans, found + if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) { + sp = sps[i] + if (sp.marker.collapsed && (start ? sp.from : sp.to) == null && + (!found || compareCollapsedMarkers(found, sp.marker) < 0)) + { found = sp.marker } + } } + return found +} +function collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, true) } +function collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, false) } + +function collapsedSpanAround(line, ch) { + var sps = sawCollapsedSpans && line.markedSpans, found + if (sps) { for (var i = 0; i < sps.length; ++i) { + var sp = sps[i] + if (sp.marker.collapsed && (sp.from == null || sp.from < ch) && (sp.to == null || sp.to > ch) && + (!found || compareCollapsedMarkers(found, sp.marker) < 0)) { found = sp.marker } + } } + return found +} + +// Test whether there exists a collapsed span that partially +// overlaps (covers the start or end, but not both) of a new span. +// Such overlap is not allowed. +function conflictingCollapsedRange(doc, lineNo, from, to, marker) { + var line = getLine(doc, lineNo) + var sps = sawCollapsedSpans && line.markedSpans + if (sps) { for (var i = 0; i < sps.length; ++i) { + var sp = sps[i] + if (!sp.marker.collapsed) { continue } + var found = sp.marker.find(0) + var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker) + var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker) + if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) { continue } + if (fromCmp <= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.to, from) >= 0 : cmp(found.to, from) > 0) || + fromCmp >= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.from, to) <= 0 : cmp(found.from, to) < 0)) + { return true } + } } +} + +// A visual line is a line as drawn on the screen. Folding, for +// example, can cause multiple logical lines to appear on the same +// visual line. This finds the start of the visual line that the +// given line is part of (usually that is the line itself). +function visualLine(line) { + var merged + while (merged = collapsedSpanAtStart(line)) + { line = merged.find(-1, true).line } + return line +} + +function visualLineEnd(line) { + var merged + while (merged = collapsedSpanAtEnd(line)) + { line = merged.find(1, true).line } + return line +} + +// Returns an array of logical lines that continue the visual line +// started by the argument, or undefined if there are no such lines. +function visualLineContinued(line) { + var merged, lines + while (merged = collapsedSpanAtEnd(line)) { + line = merged.find(1, true).line + ;(lines || (lines = [])).push(line) + } + return lines +} + +// Get the line number of the start of the visual line that the +// given line number is part of. +function visualLineNo(doc, lineN) { + var line = getLine(doc, lineN), vis = visualLine(line) + if (line == vis) { return lineN } + return lineNo(vis) +} + +// Get the line number of the start of the next visual line after +// the given line. +function visualLineEndNo(doc, lineN) { + if (lineN > doc.lastLine()) { return lineN } + var line = getLine(doc, lineN), merged + if (!lineIsHidden(doc, line)) { return lineN } + while (merged = collapsedSpanAtEnd(line)) + { line = merged.find(1, true).line } + return lineNo(line) + 1 +} + +// Compute whether a line is hidden. Lines count as hidden when they +// are part of a visual line that starts with another line, or when +// they are entirely covered by collapsed, non-widget span. +function lineIsHidden(doc, line) { + var sps = sawCollapsedSpans && line.markedSpans + if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) { + sp = sps[i] + if (!sp.marker.collapsed) { continue } + if (sp.from == null) { return true } + if (sp.marker.widgetNode) { continue } + if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp)) + { return true } + } } +} +function lineIsHiddenInner(doc, line, span) { + if (span.to == null) { + var end = span.marker.find(1, true) + return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker)) + } + if (span.marker.inclusiveRight && span.to == line.text.length) + { return true } + for (var sp = (void 0), i = 0; i < line.markedSpans.length; ++i) { + sp = line.markedSpans[i] + if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to && + (sp.to == null || sp.to != span.from) && + (sp.marker.inclusiveLeft || span.marker.inclusiveRight) && + lineIsHiddenInner(doc, line, sp)) { return true } + } +} + +// Find the height above the given line. +function heightAtLine(lineObj) { + lineObj = visualLine(lineObj) + + var h = 0, chunk = lineObj.parent + for (var i = 0; i < chunk.lines.length; ++i) { + var line = chunk.lines[i] + if (line == lineObj) { break } + else { h += line.height } + } + for (var p = chunk.parent; p; chunk = p, p = chunk.parent) { + for (var i$1 = 0; i$1 < p.children.length; ++i$1) { + var cur = p.children[i$1] + if (cur == chunk) { break } + else { h += cur.height } + } + } + return h +} + +// Compute the character length of a line, taking into account +// collapsed ranges (see markText) that might hide parts, and join +// other lines onto it. +function lineLength(line) { + if (line.height == 0) { return 0 } + var len = line.text.length, merged, cur = line + while (merged = collapsedSpanAtStart(cur)) { + var found = merged.find(0, true) + cur = found.from.line + len += found.from.ch - found.to.ch + } + cur = line + while (merged = collapsedSpanAtEnd(cur)) { + var found$1 = merged.find(0, true) + len -= cur.text.length - found$1.from.ch + cur = found$1.to.line + len += cur.text.length - found$1.to.ch + } + return len +} + +// Find the longest line in the document. +function findMaxLine(cm) { + var d = cm.display, doc = cm.doc + d.maxLine = getLine(doc, doc.first) + d.maxLineLength = lineLength(d.maxLine) + d.maxLineChanged = true + doc.iter(function (line) { + var len = lineLength(line) + if (len > d.maxLineLength) { + d.maxLineLength = len + d.maxLine = line + } + }) +} + +// BIDI HELPERS + +function iterateBidiSections(order, from, to, f) { + if (!order) { return f(from, to, "ltr", 0) } + var found = false + for (var i = 0; i < order.length; ++i) { + var part = order[i] + if (part.from < to && part.to > from || from == to && part.to == from) { + f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? "rtl" : "ltr", i) + found = true + } + } + if (!found) { f(from, to, "ltr") } +} + +var bidiOther = null +function getBidiPartAt(order, ch, sticky) { + var found + bidiOther = null + for (var i = 0; i < order.length; ++i) { + var cur = order[i] + if (cur.from < ch && cur.to > ch) { return i } + if (cur.to == ch) { + if (cur.from != cur.to && sticky == "before") { found = i } + else { bidiOther = i } + } + if (cur.from == ch) { + if (cur.from != cur.to && sticky != "before") { found = i } + else { bidiOther = i } + } + } + return found != null ? found : bidiOther +} + +// Bidirectional ordering algorithm +// See http://unicode.org/reports/tr9/tr9-13.html for the algorithm +// that this (partially) implements. + +// One-char codes used for character types: +// L (L): Left-to-Right +// R (R): Right-to-Left +// r (AL): Right-to-Left Arabic +// 1 (EN): European Number +// + (ES): European Number Separator +// % (ET): European Number Terminator +// n (AN): Arabic Number +// , (CS): Common Number Separator +// m (NSM): Non-Spacing Mark +// b (BN): Boundary Neutral +// s (B): Paragraph Separator +// t (S): Segment Separator +// w (WS): Whitespace +// N (ON): Other Neutrals + +// Returns null if characters are ordered as they appear +// (left-to-right), or an array of sections ({from, to, level} +// objects) in the order in which they occur visually. +var bidiOrdering = (function() { + // Character types for codepoints 0 to 0xff + var lowTypes = "bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN" + // Character types for codepoints 0x600 to 0x6f9 + var arabicTypes = "nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111" + function charType(code) { + if (code <= 0xf7) { return lowTypes.charAt(code) } + else if (0x590 <= code && code <= 0x5f4) { return "R" } + else if (0x600 <= code && code <= 0x6f9) { return arabicTypes.charAt(code - 0x600) } + else if (0x6ee <= code && code <= 0x8ac) { return "r" } + else if (0x2000 <= code && code <= 0x200b) { return "w" } + else if (code == 0x200c) { return "b" } + else { return "L" } + } + + var bidiRE = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/ + var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/ + + function BidiSpan(level, from, to) { + this.level = level + this.from = from; this.to = to + } + + return function(str, direction) { + var outerType = direction == "ltr" ? "L" : "R" + + if (str.length == 0 || direction == "ltr" && !bidiRE.test(str)) { return false } + var len = str.length, types = [] + for (var i = 0; i < len; ++i) + { types.push(charType(str.charCodeAt(i))) } + + // W1. Examine each non-spacing mark (NSM) in the level run, and + // change the type of the NSM to the type of the previous + // character. If the NSM is at the start of the level run, it will + // get the type of sor. + for (var i$1 = 0, prev = outerType; i$1 < len; ++i$1) { + var type = types[i$1] + if (type == "m") { types[i$1] = prev } + else { prev = type } + } + + // W2. Search backwards from each instance of a European number + // until the first strong type (R, L, AL, or sor) is found. If an + // AL is found, change the type of the European number to Arabic + // number. + // W3. Change all ALs to R. + for (var i$2 = 0, cur = outerType; i$2 < len; ++i$2) { + var type$1 = types[i$2] + if (type$1 == "1" && cur == "r") { types[i$2] = "n" } + else if (isStrong.test(type$1)) { cur = type$1; if (type$1 == "r") { types[i$2] = "R" } } + } + + // W4. A single European separator between two European numbers + // changes to a European number. A single common separator between + // two numbers of the same type changes to that type. + for (var i$3 = 1, prev$1 = types[0]; i$3 < len - 1; ++i$3) { + var type$2 = types[i$3] + if (type$2 == "+" && prev$1 == "1" && types[i$3+1] == "1") { types[i$3] = "1" } + else if (type$2 == "," && prev$1 == types[i$3+1] && + (prev$1 == "1" || prev$1 == "n")) { types[i$3] = prev$1 } + prev$1 = type$2 + } + + // W5. A sequence of European terminators adjacent to European + // numbers changes to all European numbers. + // W6. Otherwise, separators and terminators change to Other + // Neutral. + for (var i$4 = 0; i$4 < len; ++i$4) { + var type$3 = types[i$4] + if (type$3 == ",") { types[i$4] = "N" } + else if (type$3 == "%") { + var end = (void 0) + for (end = i$4 + 1; end < len && types[end] == "%"; ++end) {} + var replace = (i$4 && types[i$4-1] == "!") || (end < len && types[end] == "1") ? "1" : "N" + for (var j = i$4; j < end; ++j) { types[j] = replace } + i$4 = end - 1 + } + } + + // W7. Search backwards from each instance of a European number + // until the first strong type (R, L, or sor) is found. If an L is + // found, then change the type of the European number to L. + for (var i$5 = 0, cur$1 = outerType; i$5 < len; ++i$5) { + var type$4 = types[i$5] + if (cur$1 == "L" && type$4 == "1") { types[i$5] = "L" } + else if (isStrong.test(type$4)) { cur$1 = type$4 } + } + + // N1. A sequence of neutrals takes the direction of the + // surrounding strong text if the text on both sides has the same + // direction. European and Arabic numbers act as if they were R in + // terms of their influence on neutrals. Start-of-level-run (sor) + // and end-of-level-run (eor) are used at level run boundaries. + // N2. Any remaining neutrals take the embedding direction. + for (var i$6 = 0; i$6 < len; ++i$6) { + if (isNeutral.test(types[i$6])) { + var end$1 = (void 0) + for (end$1 = i$6 + 1; end$1 < len && isNeutral.test(types[end$1]); ++end$1) {} + var before = (i$6 ? types[i$6-1] : outerType) == "L" + var after = (end$1 < len ? types[end$1] : outerType) == "L" + var replace$1 = before == after ? (before ? "L" : "R") : outerType + for (var j$1 = i$6; j$1 < end$1; ++j$1) { types[j$1] = replace$1 } + i$6 = end$1 - 1 + } + } + + // Here we depart from the documented algorithm, in order to avoid + // building up an actual levels array. Since there are only three + // levels (0, 1, 2) in an implementation that doesn't take + // explicit embedding into account, we can build up the order on + // the fly, without following the level-based algorithm. + var order = [], m + for (var i$7 = 0; i$7 < len;) { + if (countsAsLeft.test(types[i$7])) { + var start = i$7 + for (++i$7; i$7 < len && countsAsLeft.test(types[i$7]); ++i$7) {} + order.push(new BidiSpan(0, start, i$7)) + } else { + var pos = i$7, at = order.length + for (++i$7; i$7 < len && types[i$7] != "L"; ++i$7) {} + for (var j$2 = pos; j$2 < i$7;) { + if (countsAsNum.test(types[j$2])) { + if (pos < j$2) { order.splice(at, 0, new BidiSpan(1, pos, j$2)) } + var nstart = j$2 + for (++j$2; j$2 < i$7 && countsAsNum.test(types[j$2]); ++j$2) {} + order.splice(at, 0, new BidiSpan(2, nstart, j$2)) + pos = j$2 + } else { ++j$2 } + } + if (pos < i$7) { order.splice(at, 0, new BidiSpan(1, pos, i$7)) } + } + } + if (direction == "ltr") { + if (order[0].level == 1 && (m = str.match(/^\s+/))) { + order[0].from = m[0].length + order.unshift(new BidiSpan(0, 0, m[0].length)) + } + if (lst(order).level == 1 && (m = str.match(/\s+$/))) { + lst(order).to -= m[0].length + order.push(new BidiSpan(0, len - m[0].length, len)) + } + } + + return direction == "rtl" ? order.reverse() : order + } +})() + +// Get the bidi ordering for the given line (and cache it). Returns +// false for lines that are fully left-to-right, and an array of +// BidiSpan objects otherwise. +function getOrder(line, direction) { + var order = line.order + if (order == null) { order = line.order = bidiOrdering(line.text, direction) } + return order +} + +// EVENT HANDLING + +// Lightweight event framework. on/off also work on DOM nodes, +// registering native DOM handlers. + +var noHandlers = [] + +var on = function(emitter, type, f) { + if (emitter.addEventListener) { + emitter.addEventListener(type, f, false) + } else if (emitter.attachEvent) { + emitter.attachEvent("on" + type, f) + } else { + var map = emitter._handlers || (emitter._handlers = {}) + map[type] = (map[type] || noHandlers).concat(f) + } +} + +function getHandlers(emitter, type) { + return emitter._handlers && emitter._handlers[type] || noHandlers +} + +function off(emitter, type, f) { + if (emitter.removeEventListener) { + emitter.removeEventListener(type, f, false) + } else if (emitter.detachEvent) { + emitter.detachEvent("on" + type, f) + } else { + var map = emitter._handlers, arr = map && map[type] + if (arr) { + var index = indexOf(arr, f) + if (index > -1) + { map[type] = arr.slice(0, index).concat(arr.slice(index + 1)) } + } + } +} + +function signal(emitter, type /*, values...*/) { + var handlers = getHandlers(emitter, type) + if (!handlers.length) { return } + var args = Array.prototype.slice.call(arguments, 2) + for (var i = 0; i < handlers.length; ++i) { handlers[i].apply(null, args) } +} + +// The DOM events that CodeMirror handles can be overridden by +// registering a (non-DOM) handler on the editor for the event name, +// and preventDefault-ing the event in that handler. +function signalDOMEvent(cm, e, override) { + if (typeof e == "string") + { e = {type: e, preventDefault: function() { this.defaultPrevented = true }} } + signal(cm, override || e.type, cm, e) + return e_defaultPrevented(e) || e.codemirrorIgnore +} + +function signalCursorActivity(cm) { + var arr = cm._handlers && cm._handlers.cursorActivity + if (!arr) { return } + var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []) + for (var i = 0; i < arr.length; ++i) { if (indexOf(set, arr[i]) == -1) + { set.push(arr[i]) } } +} + +function hasHandler(emitter, type) { + return getHandlers(emitter, type).length > 0 +} + +// Add on and off methods to a constructor's prototype, to make +// registering events on such objects more convenient. +function eventMixin(ctor) { + ctor.prototype.on = function(type, f) {on(this, type, f)} + ctor.prototype.off = function(type, f) {off(this, type, f)} +} + +// Due to the fact that we still support jurassic IE versions, some +// compatibility wrappers are needed. + +function e_preventDefault(e) { + if (e.preventDefault) { e.preventDefault() } + else { e.returnValue = false } +} +function e_stopPropagation(e) { + if (e.stopPropagation) { e.stopPropagation() } + else { e.cancelBubble = true } +} +function e_defaultPrevented(e) { + return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false +} +function e_stop(e) {e_preventDefault(e); e_stopPropagation(e)} + +function e_target(e) {return e.target || e.srcElement} +function e_button(e) { + var b = e.which + if (b == null) { + if (e.button & 1) { b = 1 } + else if (e.button & 2) { b = 3 } + else if (e.button & 4) { b = 2 } + } + if (mac && e.ctrlKey && b == 1) { b = 3 } + return b +} + +// Detect drag-and-drop +var dragAndDrop = function() { + // There is *some* kind of drag-and-drop support in IE6-8, but I + // couldn't get it to work yet. + if (ie && ie_version < 9) { return false } + var div = elt('div') + return "draggable" in div || "dragDrop" in div +}() + +var zwspSupported +function zeroWidthElement(measure) { + if (zwspSupported == null) { + var test = elt("span", "\u200b") + removeChildrenAndAdd(measure, elt("span", [test, document.createTextNode("x")])) + if (measure.firstChild.offsetHeight != 0) + { zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8) } + } + var node = zwspSupported ? elt("span", "\u200b") : + elt("span", "\u00a0", null, "display: inline-block; width: 1px; margin-right: -1px") + node.setAttribute("cm-text", "") + return node +} + +// Feature-detect IE's crummy client rect reporting for bidi text +var badBidiRects +function hasBadBidiRects(measure) { + if (badBidiRects != null) { return badBidiRects } + var txt = removeChildrenAndAdd(measure, document.createTextNode("A\u062eA")) + var r0 = range(txt, 0, 1).getBoundingClientRect() + var r1 = range(txt, 1, 2).getBoundingClientRect() + removeChildren(measure) + if (!r0 || r0.left == r0.right) { return false } // Safari returns null in some cases (#2780) + return badBidiRects = (r1.right - r0.right < 3) +} + +// See if "".split is the broken IE version, if so, provide an +// alternative way to split lines. +var splitLinesAuto = "\n\nb".split(/\n/).length != 3 ? function (string) { + var pos = 0, result = [], l = string.length + while (pos <= l) { + var nl = string.indexOf("\n", pos) + if (nl == -1) { nl = string.length } + var line = string.slice(pos, string.charAt(nl - 1) == "\r" ? nl - 1 : nl) + var rt = line.indexOf("\r") + if (rt != -1) { + result.push(line.slice(0, rt)) + pos += rt + 1 + } else { + result.push(line) + pos = nl + 1 + } + } + return result +} : function (string) { return string.split(/\r\n?|\n/); } + +var hasSelection = window.getSelection ? function (te) { + try { return te.selectionStart != te.selectionEnd } + catch(e) { return false } +} : function (te) { + var range + try {range = te.ownerDocument.selection.createRange()} + catch(e) {} + if (!range || range.parentElement() != te) { return false } + return range.compareEndPoints("StartToEnd", range) != 0 +} + +var hasCopyEvent = (function () { + var e = elt("div") + if ("oncopy" in e) { return true } + e.setAttribute("oncopy", "return;") + return typeof e.oncopy == "function" +})() + +var badZoomedRects = null +function hasBadZoomedRects(measure) { + if (badZoomedRects != null) { return badZoomedRects } + var node = removeChildrenAndAdd(measure, elt("span", "x")) + var normal = node.getBoundingClientRect() + var fromRange = range(node, 0, 1).getBoundingClientRect() + return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1 +} + +var modes = {}; +var mimeModes = {}; +// Extra arguments are stored as the mode's dependencies, which is +// used by (legacy) mechanisms like loadmode.js to automatically +// load a mode. (Preferred mechanism is the require/define calls.) +function defineMode(name, mode) { + if (arguments.length > 2) + { mode.dependencies = Array.prototype.slice.call(arguments, 2) } + modes[name] = mode +} + +function defineMIME(mime, spec) { + mimeModes[mime] = spec +} + +// Given a MIME type, a {name, ...options} config object, or a name +// string, return a mode config object. +function resolveMode(spec) { + if (typeof spec == "string" && mimeModes.hasOwnProperty(spec)) { + spec = mimeModes[spec] + } else if (spec && typeof spec.name == "string" && mimeModes.hasOwnProperty(spec.name)) { + var found = mimeModes[spec.name] + if (typeof found == "string") { found = {name: found} } + spec = createObj(found, spec) + spec.name = found.name + } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+xml$/.test(spec)) { + return resolveMode("application/xml") + } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+json$/.test(spec)) { + return resolveMode("application/json") + } + if (typeof spec == "string") { return {name: spec} } + else { return spec || {name: "null"} } +} + +// Given a mode spec (anything that resolveMode accepts), find and +// initialize an actual mode object. +function getMode(options, spec) { + spec = resolveMode(spec) + var mfactory = modes[spec.name] + if (!mfactory) { return getMode(options, "text/plain") } + var modeObj = mfactory(options, spec) + if (modeExtensions.hasOwnProperty(spec.name)) { + var exts = modeExtensions[spec.name] + for (var prop in exts) { + if (!exts.hasOwnProperty(prop)) { continue } + if (modeObj.hasOwnProperty(prop)) { modeObj["_" + prop] = modeObj[prop] } + modeObj[prop] = exts[prop] + } + } + modeObj.name = spec.name + if (spec.helperType) { modeObj.helperType = spec.helperType } + if (spec.modeProps) { for (var prop$1 in spec.modeProps) + { modeObj[prop$1] = spec.modeProps[prop$1] } } + + return modeObj +} + +// This can be used to attach properties to mode objects from +// outside the actual mode definition. +var modeExtensions = {} +function extendMode(mode, properties) { + var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {}) + copyObj(properties, exts) +} + +function copyState(mode, state) { + if (state === true) { return state } + if (mode.copyState) { return mode.copyState(state) } + var nstate = {} + for (var n in state) { + var val = state[n] + if (val instanceof Array) { val = val.concat([]) } + nstate[n] = val + } + return nstate +} + +// Given a mode and a state (for that mode), find the inner mode and +// state at the position that the state refers to. +function innerMode(mode, state) { + var info + while (mode.innerMode) { + info = mode.innerMode(state) + if (!info || info.mode == mode) { break } + state = info.state + mode = info.mode + } + return info || {mode: mode, state: state} +} + +function startState(mode, a1, a2) { + return mode.startState ? mode.startState(a1, a2) : true +} + +// STRING STREAM + +// Fed to the mode parsers, provides helper functions to make +// parsers more succinct. + +var StringStream = function(string, tabSize, lineOracle) { + this.pos = this.start = 0 + this.string = string + this.tabSize = tabSize || 8 + this.lastColumnPos = this.lastColumnValue = 0 + this.lineStart = 0 + this.lineOracle = lineOracle +}; + +StringStream.prototype.eol = function () {return this.pos >= this.string.length}; +StringStream.prototype.sol = function () {return this.pos == this.lineStart}; +StringStream.prototype.peek = function () {return this.string.charAt(this.pos) || undefined}; +StringStream.prototype.next = function () { + if (this.pos < this.string.length) + { return this.string.charAt(this.pos++) } +}; +StringStream.prototype.eat = function (match) { + var ch = this.string.charAt(this.pos) + var ok + if (typeof match == "string") { ok = ch == match } + else { ok = ch && (match.test ? match.test(ch) : match(ch)) } + if (ok) {++this.pos; return ch} +}; +StringStream.prototype.eatWhile = function (match) { + var start = this.pos + while (this.eat(match)){} + return this.pos > start +}; +StringStream.prototype.eatSpace = function () { + var this$1 = this; + + var start = this.pos + while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) { ++this$1.pos } + return this.pos > start +}; +StringStream.prototype.skipToEnd = function () {this.pos = this.string.length}; +StringStream.prototype.skipTo = function (ch) { + var found = this.string.indexOf(ch, this.pos) + if (found > -1) {this.pos = found; return true} +}; +StringStream.prototype.backUp = function (n) {this.pos -= n}; +StringStream.prototype.column = function () { + if (this.lastColumnPos < this.start) { + this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue) + this.lastColumnPos = this.start + } + return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0) +}; +StringStream.prototype.indentation = function () { + return countColumn(this.string, null, this.tabSize) - + (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0) +}; +StringStream.prototype.match = function (pattern, consume, caseInsensitive) { + if (typeof pattern == "string") { + var cased = function (str) { return caseInsensitive ? str.toLowerCase() : str; } + var substr = this.string.substr(this.pos, pattern.length) + if (cased(substr) == cased(pattern)) { + if (consume !== false) { this.pos += pattern.length } + return true + } + } else { + var match = this.string.slice(this.pos).match(pattern) + if (match && match.index > 0) { return null } + if (match && consume !== false) { this.pos += match[0].length } + return match + } +}; +StringStream.prototype.current = function (){return this.string.slice(this.start, this.pos)}; +StringStream.prototype.hideFirstChars = function (n, inner) { + this.lineStart += n + try { return inner() } + finally { this.lineStart -= n } +}; +StringStream.prototype.lookAhead = function (n) { + var oracle = this.lineOracle + return oracle && oracle.lookAhead(n) +}; +StringStream.prototype.baseToken = function () { + var oracle = this.lineOracle + return oracle && oracle.baseToken(this.pos) +}; + +var SavedContext = function(state, lookAhead) { + this.state = state + this.lookAhead = lookAhead +}; + +var Context = function(doc, state, line, lookAhead) { + this.state = state + this.doc = doc + this.line = line + this.maxLookAhead = lookAhead || 0 + this.baseTokens = null + this.baseTokenPos = 1 +}; + +Context.prototype.lookAhead = function (n) { + var line = this.doc.getLine(this.line + n) + if (line != null && n > this.maxLookAhead) { this.maxLookAhead = n } + return line +}; + +Context.prototype.baseToken = function (n) { + var this$1 = this; + + if (!this.baseTokens) { return null } + while (this.baseTokens[this.baseTokenPos] <= n) + { this$1.baseTokenPos += 2 } + var type = this.baseTokens[this.baseTokenPos + 1] + return {type: type && type.replace(/( |^)overlay .*/, ""), + size: this.baseTokens[this.baseTokenPos] - n} +}; + +Context.prototype.nextLine = function () { + this.line++ + if (this.maxLookAhead > 0) { this.maxLookAhead-- } +}; + +Context.fromSaved = function (doc, saved, line) { + if (saved instanceof SavedContext) + { return new Context(doc, copyState(doc.mode, saved.state), line, saved.lookAhead) } + else + { return new Context(doc, copyState(doc.mode, saved), line) } +}; + +Context.prototype.save = function (copy) { + var state = copy !== false ? copyState(this.doc.mode, this.state) : this.state + return this.maxLookAhead > 0 ? new SavedContext(state, this.maxLookAhead) : state +}; + + +// Compute a style array (an array starting with a mode generation +// -- for invalidation -- followed by pairs of end positions and +// style strings), which is used to highlight the tokens on the +// line. +function highlightLine(cm, line, context, forceToEnd) { + // A styles array always starts with a number identifying the + // mode/overlays that it is based on (for easy invalidation). + var st = [cm.state.modeGen], lineClasses = {} + // Compute the base array of styles + runMode(cm, line.text, cm.doc.mode, context, function (end, style) { return st.push(end, style); }, + lineClasses, forceToEnd) + var state = context.state + + // Run overlays, adjust style array. + var loop = function ( o ) { + context.baseTokens = st + var overlay = cm.state.overlays[o], i = 1, at = 0 + context.state = true + runMode(cm, line.text, overlay.mode, context, function (end, style) { + var start = i + // Ensure there's a token end at the current position, and that i points at it + while (at < end) { + var i_end = st[i] + if (i_end > end) + { st.splice(i, 1, end, st[i+1], i_end) } + i += 2 + at = Math.min(end, i_end) + } + if (!style) { return } + if (overlay.opaque) { + st.splice(start, i - start, end, "overlay " + style) + i = start + 2 + } else { + for (; start < i; start += 2) { + var cur = st[start+1] + st[start+1] = (cur ? cur + " " : "") + "overlay " + style + } + } + }, lineClasses) + context.state = state + context.baseTokens = null + context.baseTokenPos = 1 + }; + + for (var o = 0; o < cm.state.overlays.length; ++o) loop( o ); + + return {styles: st, classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null} +} + +function getLineStyles(cm, line, updateFrontier) { + if (!line.styles || line.styles[0] != cm.state.modeGen) { + var context = getContextBefore(cm, lineNo(line)) + var resetState = line.text.length > cm.options.maxHighlightLength && copyState(cm.doc.mode, context.state) + var result = highlightLine(cm, line, context) + if (resetState) { context.state = resetState } + line.stateAfter = context.save(!resetState) + line.styles = result.styles + if (result.classes) { line.styleClasses = result.classes } + else if (line.styleClasses) { line.styleClasses = null } + if (updateFrontier === cm.doc.highlightFrontier) + { cm.doc.modeFrontier = Math.max(cm.doc.modeFrontier, ++cm.doc.highlightFrontier) } + } + return line.styles +} + +function getContextBefore(cm, n, precise) { + var doc = cm.doc, display = cm.display + if (!doc.mode.startState) { return new Context(doc, true, n) } + var start = findStartLine(cm, n, precise) + var saved = start > doc.first && getLine(doc, start - 1).stateAfter + var context = saved ? Context.fromSaved(doc, saved, start) : new Context(doc, startState(doc.mode), start) + + doc.iter(start, n, function (line) { + processLine(cm, line.text, context) + var pos = context.line + line.stateAfter = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo ? context.save() : null + context.nextLine() + }) + if (precise) { doc.modeFrontier = context.line } + return context +} + +// Lightweight form of highlight -- proceed over this line and +// update state, but don't save a style array. Used for lines that +// aren't currently visible. +function processLine(cm, text, context, startAt) { + var mode = cm.doc.mode + var stream = new StringStream(text, cm.options.tabSize, context) + stream.start = stream.pos = startAt || 0 + if (text == "") { callBlankLine(mode, context.state) } + while (!stream.eol()) { + readToken(mode, stream, context.state) + stream.start = stream.pos + } +} + +function callBlankLine(mode, state) { + if (mode.blankLine) { return mode.blankLine(state) } + if (!mode.innerMode) { return } + var inner = innerMode(mode, state) + if (inner.mode.blankLine) { return inner.mode.blankLine(inner.state) } +} + +function readToken(mode, stream, state, inner) { + for (var i = 0; i < 10; i++) { + if (inner) { inner[0] = innerMode(mode, state).mode } + var style = mode.token(stream, state) + if (stream.pos > stream.start) { return style } + } + throw new Error("Mode " + mode.name + " failed to advance stream.") +} + +var Token = function(stream, type, state) { + this.start = stream.start; this.end = stream.pos + this.string = stream.current() + this.type = type || null + this.state = state +}; + +// Utility for getTokenAt and getLineTokens +function takeToken(cm, pos, precise, asArray) { + var doc = cm.doc, mode = doc.mode, style + pos = clipPos(doc, pos) + var line = getLine(doc, pos.line), context = getContextBefore(cm, pos.line, precise) + var stream = new StringStream(line.text, cm.options.tabSize, context), tokens + if (asArray) { tokens = [] } + while ((asArray || stream.pos < pos.ch) && !stream.eol()) { + stream.start = stream.pos + style = readToken(mode, stream, context.state) + if (asArray) { tokens.push(new Token(stream, style, copyState(doc.mode, context.state))) } + } + return asArray ? tokens : new Token(stream, style, context.state) +} + +function extractLineClasses(type, output) { + if (type) { for (;;) { + var lineClass = type.match(/(?:^|\s+)line-(background-)?(\S+)/) + if (!lineClass) { break } + type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length) + var prop = lineClass[1] ? "bgClass" : "textClass" + if (output[prop] == null) + { output[prop] = lineClass[2] } + else if (!(new RegExp("(?:^|\s)" + lineClass[2] + "(?:$|\s)")).test(output[prop])) + { output[prop] += " " + lineClass[2] } + } } + return type +} + +// Run the given mode's parser over a line, calling f for each token. +function runMode(cm, text, mode, context, f, lineClasses, forceToEnd) { + var flattenSpans = mode.flattenSpans + if (flattenSpans == null) { flattenSpans = cm.options.flattenSpans } + var curStart = 0, curStyle = null + var stream = new StringStream(text, cm.options.tabSize, context), style + var inner = cm.options.addModeClass && [null] + if (text == "") { extractLineClasses(callBlankLine(mode, context.state), lineClasses) } + while (!stream.eol()) { + if (stream.pos > cm.options.maxHighlightLength) { + flattenSpans = false + if (forceToEnd) { processLine(cm, text, context, stream.pos) } + stream.pos = text.length + style = null + } else { + style = extractLineClasses(readToken(mode, stream, context.state, inner), lineClasses) + } + if (inner) { + var mName = inner[0].name + if (mName) { style = "m-" + (style ? mName + " " + style : mName) } + } + if (!flattenSpans || curStyle != style) { + while (curStart < stream.start) { + curStart = Math.min(stream.start, curStart + 5000) + f(curStart, curStyle) + } + curStyle = style + } + stream.start = stream.pos + } + while (curStart < stream.pos) { + // Webkit seems to refuse to render text nodes longer than 57444 + // characters, and returns inaccurate measurements in nodes + // starting around 5000 chars. + var pos = Math.min(stream.pos, curStart + 5000) + f(pos, curStyle) + curStart = pos + } +} + +// Finds the line to start with when starting a parse. Tries to +// find a line with a stateAfter, so that it can start with a +// valid state. If that fails, it returns the line with the +// smallest indentation, which tends to need the least context to +// parse correctly. +function findStartLine(cm, n, precise) { + var minindent, minline, doc = cm.doc + var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100) + for (var search = n; search > lim; --search) { + if (search <= doc.first) { return doc.first } + var line = getLine(doc, search - 1), after = line.stateAfter + if (after && (!precise || search + (after instanceof SavedContext ? after.lookAhead : 0) <= doc.modeFrontier)) + { return search } + var indented = countColumn(line.text, null, cm.options.tabSize) + if (minline == null || minindent > indented) { + minline = search - 1 + minindent = indented + } + } + return minline +} + +function retreatFrontier(doc, n) { + doc.modeFrontier = Math.min(doc.modeFrontier, n) + if (doc.highlightFrontier < n - 10) { return } + var start = doc.first + for (var line = n - 1; line > start; line--) { + var saved = getLine(doc, line).stateAfter + // change is on 3 + // state on line 1 looked ahead 2 -- so saw 3 + // test 1 + 2 < 3 should cover this + if (saved && (!(saved instanceof SavedContext) || line + saved.lookAhead < n)) { + start = line + 1 + break + } + } + doc.highlightFrontier = Math.min(doc.highlightFrontier, start) +} + +// LINE DATA STRUCTURE + +// Line objects. These hold state related to a line, including +// highlighting info (the styles array). +var Line = function(text, markedSpans, estimateHeight) { + this.text = text + attachMarkedSpans(this, markedSpans) + this.height = estimateHeight ? estimateHeight(this) : 1 +}; + +Line.prototype.lineNo = function () { return lineNo(this) }; +eventMixin(Line) + +// Change the content (text, markers) of a line. Automatically +// invalidates cached information and tries to re-estimate the +// line's height. +function updateLine(line, text, markedSpans, estimateHeight) { + line.text = text + if (line.stateAfter) { line.stateAfter = null } + if (line.styles) { line.styles = null } + if (line.order != null) { line.order = null } + detachMarkedSpans(line) + attachMarkedSpans(line, markedSpans) + var estHeight = estimateHeight ? estimateHeight(line) : 1 + if (estHeight != line.height) { updateLineHeight(line, estHeight) } +} + +// Detach a line from the document tree and its markers. +function cleanUpLine(line) { + line.parent = null + detachMarkedSpans(line) +} + +// Convert a style as returned by a mode (either null, or a string +// containing one or more styles) to a CSS style. This is cached, +// and also looks for line-wide styles. +var styleToClassCache = {}; +var styleToClassCacheWithMode = {}; +function interpretTokenStyle(style, options) { + if (!style || /^\s*$/.test(style)) { return null } + var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache + return cache[style] || + (cache[style] = style.replace(/\S+/g, "cm-$&")) +} + +// Render the DOM representation of the text of a line. Also builds +// up a 'line map', which points at the DOM nodes that represent +// specific stretches of text, and is used by the measuring code. +// The returned object contains the DOM node, this map, and +// information about line-wide styles that were set by the mode. +function buildLineContent(cm, lineView) { + // The padding-right forces the element to have a 'border', which + // is needed on Webkit to be able to get line-level bounding + // rectangles for it (in measureChar). + var content = eltP("span", null, null, webkit ? "padding-right: .1px" : null) + var builder = {pre: eltP("pre", [content], "CodeMirror-line"), content: content, + col: 0, pos: 0, cm: cm, + trailingSpace: false, + splitSpaces: cm.getOption("lineWrapping")} + lineView.measure = {} + + // Iterate over the logical lines that make up this visual line. + for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) { + var line = i ? lineView.rest[i - 1] : lineView.line, order = (void 0) + builder.pos = 0 + builder.addToken = buildToken + // Optionally wire in some hacks into the token-rendering + // algorithm, to deal with browser quirks. + if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line, cm.doc.direction))) + { builder.addToken = buildTokenBadBidi(builder.addToken, order) } + builder.map = [] + var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line) + insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate)) + if (line.styleClasses) { + if (line.styleClasses.bgClass) + { builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || "") } + if (line.styleClasses.textClass) + { builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || "") } + } + + // Ensure at least a single node is present, for measuring. + if (builder.map.length == 0) + { builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure))) } + + // Store the map and a cache object for the current logical line + if (i == 0) { + lineView.measure.map = builder.map + lineView.measure.cache = {} + } else { + ;(lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map) + ;(lineView.measure.caches || (lineView.measure.caches = [])).push({}) + } + } + + // See issue #2901 + if (webkit) { + var last = builder.content.lastChild + if (/\bcm-tab\b/.test(last.className) || (last.querySelector && last.querySelector(".cm-tab"))) + { builder.content.className = "cm-tab-wrap-hack" } + } + + signal(cm, "renderLine", cm, lineView.line, builder.pre) + if (builder.pre.className) + { builder.textClass = joinClasses(builder.pre.className, builder.textClass || "") } + + return builder +} + +function defaultSpecialCharPlaceholder(ch) { + var token = elt("span", "\u2022", "cm-invalidchar") + token.title = "\\u" + ch.charCodeAt(0).toString(16) + token.setAttribute("aria-label", token.title) + return token +} + +// Build up the DOM representation for a single token, and add it to +// the line map. Takes care to render special characters separately. +function buildToken(builder, text, style, startStyle, endStyle, title, css) { + if (!text) { return } + var displayText = builder.splitSpaces ? splitSpaces(text, builder.trailingSpace) : text + var special = builder.cm.state.specialChars, mustWrap = false + var content + if (!special.test(text)) { + builder.col += text.length + content = document.createTextNode(displayText) + builder.map.push(builder.pos, builder.pos + text.length, content) + if (ie && ie_version < 9) { mustWrap = true } + builder.pos += text.length + } else { + content = document.createDocumentFragment() + var pos = 0 + while (true) { + special.lastIndex = pos + var m = special.exec(text) + var skipped = m ? m.index - pos : text.length - pos + if (skipped) { + var txt = document.createTextNode(displayText.slice(pos, pos + skipped)) + if (ie && ie_version < 9) { content.appendChild(elt("span", [txt])) } + else { content.appendChild(txt) } + builder.map.push(builder.pos, builder.pos + skipped, txt) + builder.col += skipped + builder.pos += skipped + } + if (!m) { break } + pos += skipped + 1 + var txt$1 = (void 0) + if (m[0] == "\t") { + var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize + txt$1 = content.appendChild(elt("span", spaceStr(tabWidth), "cm-tab")) + txt$1.setAttribute("role", "presentation") + txt$1.setAttribute("cm-text", "\t") + builder.col += tabWidth + } else if (m[0] == "\r" || m[0] == "\n") { + txt$1 = content.appendChild(elt("span", m[0] == "\r" ? "\u240d" : "\u2424", "cm-invalidchar")) + txt$1.setAttribute("cm-text", m[0]) + builder.col += 1 + } else { + txt$1 = builder.cm.options.specialCharPlaceholder(m[0]) + txt$1.setAttribute("cm-text", m[0]) + if (ie && ie_version < 9) { content.appendChild(elt("span", [txt$1])) } + else { content.appendChild(txt$1) } + builder.col += 1 + } + builder.map.push(builder.pos, builder.pos + 1, txt$1) + builder.pos++ + } + } + builder.trailingSpace = displayText.charCodeAt(text.length - 1) == 32 + if (style || startStyle || endStyle || mustWrap || css) { + var fullStyle = style || "" + if (startStyle) { fullStyle += startStyle } + if (endStyle) { fullStyle += endStyle } + var token = elt("span", [content], fullStyle, css) + if (title) { token.title = title } + return builder.content.appendChild(token) + } + builder.content.appendChild(content) +} + +// Change some spaces to NBSP to prevent the browser from collapsing +// trailing spaces at the end of a line when rendering text (issue #1362). +function splitSpaces(text, trailingBefore) { + if (text.length > 1 && !/ /.test(text)) { return text } + var spaceBefore = trailingBefore, result = "" + for (var i = 0; i < text.length; i++) { + var ch = text.charAt(i) + if (ch == " " && spaceBefore && (i == text.length - 1 || text.charCodeAt(i + 1) == 32)) + { ch = "\u00a0" } + result += ch + spaceBefore = ch == " " + } + return result +} + +// Work around nonsense dimensions being reported for stretches of +// right-to-left text. +function buildTokenBadBidi(inner, order) { + return function (builder, text, style, startStyle, endStyle, title, css) { + style = style ? style + " cm-force-border" : "cm-force-border" + var start = builder.pos, end = start + text.length + for (;;) { + // Find the part that overlaps with the start of this text + var part = (void 0) + for (var i = 0; i < order.length; i++) { + part = order[i] + if (part.to > start && part.from <= start) { break } + } + if (part.to >= end) { return inner(builder, text, style, startStyle, endStyle, title, css) } + inner(builder, text.slice(0, part.to - start), style, startStyle, null, title, css) + startStyle = null + text = text.slice(part.to - start) + start = part.to + } + } +} + +function buildCollapsedSpan(builder, size, marker, ignoreWidget) { + var widget = !ignoreWidget && marker.widgetNode + if (widget) { builder.map.push(builder.pos, builder.pos + size, widget) } + if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) { + if (!widget) + { widget = builder.content.appendChild(document.createElement("span")) } + widget.setAttribute("cm-marker", marker.id) + } + if (widget) { + builder.cm.display.input.setUneditable(widget) + builder.content.appendChild(widget) + } + builder.pos += size + builder.trailingSpace = false +} + +// Outputs a number of spans to make up a line, taking highlighting +// and marked text into account. +function insertLineContent(line, builder, styles) { + var spans = line.markedSpans, allText = line.text, at = 0 + if (!spans) { + for (var i$1 = 1; i$1 < styles.length; i$1+=2) + { builder.addToken(builder, allText.slice(at, at = styles[i$1]), interpretTokenStyle(styles[i$1+1], builder.cm.options)) } + return + } + + var len = allText.length, pos = 0, i = 1, text = "", style, css + var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, title, collapsed + for (;;) { + if (nextChange == pos) { // Update current marker set + spanStyle = spanEndStyle = spanStartStyle = title = css = "" + collapsed = null; nextChange = Infinity + var foundBookmarks = [], endStyles = (void 0) + for (var j = 0; j < spans.length; ++j) { + var sp = spans[j], m = sp.marker + if (m.type == "bookmark" && sp.from == pos && m.widgetNode) { + foundBookmarks.push(m) + } else if (sp.from <= pos && (sp.to == null || sp.to > pos || m.collapsed && sp.to == pos && sp.from == pos)) { + if (sp.to != null && sp.to != pos && nextChange > sp.to) { + nextChange = sp.to + spanEndStyle = "" + } + if (m.className) { spanStyle += " " + m.className } + if (m.css) { css = (css ? css + ";" : "") + m.css } + if (m.startStyle && sp.from == pos) { spanStartStyle += " " + m.startStyle } + if (m.endStyle && sp.to == nextChange) { (endStyles || (endStyles = [])).push(m.endStyle, sp.to) } + if (m.title && !title) { title = m.title } + if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0)) + { collapsed = sp } + } else if (sp.from > pos && nextChange > sp.from) { + nextChange = sp.from + } + } + if (endStyles) { for (var j$1 = 0; j$1 < endStyles.length; j$1 += 2) + { if (endStyles[j$1 + 1] == nextChange) { spanEndStyle += " " + endStyles[j$1] } } } + + if (!collapsed || collapsed.from == pos) { for (var j$2 = 0; j$2 < foundBookmarks.length; ++j$2) + { buildCollapsedSpan(builder, 0, foundBookmarks[j$2]) } } + if (collapsed && (collapsed.from || 0) == pos) { + buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos, + collapsed.marker, collapsed.from == null) + if (collapsed.to == null) { return } + if (collapsed.to == pos) { collapsed = false } + } + } + if (pos >= len) { break } + + var upto = Math.min(len, nextChange) + while (true) { + if (text) { + var end = pos + text.length + if (!collapsed) { + var tokenText = end > upto ? text.slice(0, upto - pos) : text + builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle, + spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : "", title, css) + } + if (end >= upto) {text = text.slice(upto - pos); pos = upto; break} + pos = end + spanStartStyle = "" + } + text = allText.slice(at, at = styles[i++]) + style = interpretTokenStyle(styles[i++], builder.cm.options) + } + } +} + + +// These objects are used to represent the visible (currently drawn) +// part of the document. A LineView may correspond to multiple +// logical lines, if those are connected by collapsed ranges. +function LineView(doc, line, lineN) { + // The starting line + this.line = line + // Continuing lines, if any + this.rest = visualLineContinued(line) + // Number of logical lines in this visual line + this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1 + this.node = this.text = null + this.hidden = lineIsHidden(doc, line) +} + +// Create a range of LineView objects for the given lines. +function buildViewArray(cm, from, to) { + var array = [], nextPos + for (var pos = from; pos < to; pos = nextPos) { + var view = new LineView(cm.doc, getLine(cm.doc, pos), pos) + nextPos = pos + view.size + array.push(view) + } + return array +} + +var operationGroup = null + +function pushOperation(op) { + if (operationGroup) { + operationGroup.ops.push(op) + } else { + op.ownsGroup = operationGroup = { + ops: [op], + delayedCallbacks: [] + } + } +} + +function fireCallbacksForOps(group) { + // Calls delayed callbacks and cursorActivity handlers until no + // new ones appear + var callbacks = group.delayedCallbacks, i = 0 + do { + for (; i < callbacks.length; i++) + { callbacks[i].call(null) } + for (var j = 0; j < group.ops.length; j++) { + var op = group.ops[j] + if (op.cursorActivityHandlers) + { while (op.cursorActivityCalled < op.cursorActivityHandlers.length) + { op.cursorActivityHandlers[op.cursorActivityCalled++].call(null, op.cm) } } + } + } while (i < callbacks.length) +} + +function finishOperation(op, endCb) { + var group = op.ownsGroup + if (!group) { return } + + try { fireCallbacksForOps(group) } + finally { + operationGroup = null + endCb(group) + } +} + +var orphanDelayedCallbacks = null + +// Often, we want to signal events at a point where we are in the +// middle of some work, but don't want the handler to start calling +// other methods on the editor, which might be in an inconsistent +// state or simply not expect any other events to happen. +// signalLater looks whether there are any handlers, and schedules +// them to be executed when the last operation ends, or, if no +// operation is active, when a timeout fires. +function signalLater(emitter, type /*, values...*/) { + var arr = getHandlers(emitter, type) + if (!arr.length) { return } + var args = Array.prototype.slice.call(arguments, 2), list + if (operationGroup) { + list = operationGroup.delayedCallbacks + } else if (orphanDelayedCallbacks) { + list = orphanDelayedCallbacks + } else { + list = orphanDelayedCallbacks = [] + setTimeout(fireOrphanDelayed, 0) + } + var loop = function ( i ) { + list.push(function () { return arr[i].apply(null, args); }) + }; + + for (var i = 0; i < arr.length; ++i) + loop( i ); +} + +function fireOrphanDelayed() { + var delayed = orphanDelayedCallbacks + orphanDelayedCallbacks = null + for (var i = 0; i < delayed.length; ++i) { delayed[i]() } +} + +// When an aspect of a line changes, a string is added to +// lineView.changes. This updates the relevant part of the line's +// DOM structure. +function updateLineForChanges(cm, lineView, lineN, dims) { + for (var j = 0; j < lineView.changes.length; j++) { + var type = lineView.changes[j] + if (type == "text") { updateLineText(cm, lineView) } + else if (type == "gutter") { updateLineGutter(cm, lineView, lineN, dims) } + else if (type == "class") { updateLineClasses(cm, lineView) } + else if (type == "widget") { updateLineWidgets(cm, lineView, dims) } + } + lineView.changes = null +} + +// Lines with gutter elements, widgets or a background class need to +// be wrapped, and have the extra elements added to the wrapper div +function ensureLineWrapped(lineView) { + if (lineView.node == lineView.text) { + lineView.node = elt("div", null, null, "position: relative") + if (lineView.text.parentNode) + { lineView.text.parentNode.replaceChild(lineView.node, lineView.text) } + lineView.node.appendChild(lineView.text) + if (ie && ie_version < 8) { lineView.node.style.zIndex = 2 } + } + return lineView.node +} + +function updateLineBackground(cm, lineView) { + var cls = lineView.bgClass ? lineView.bgClass + " " + (lineView.line.bgClass || "") : lineView.line.bgClass + if (cls) { cls += " CodeMirror-linebackground" } + if (lineView.background) { + if (cls) { lineView.background.className = cls } + else { lineView.background.parentNode.removeChild(lineView.background); lineView.background = null } + } else if (cls) { + var wrap = ensureLineWrapped(lineView) + lineView.background = wrap.insertBefore(elt("div", null, cls), wrap.firstChild) + cm.display.input.setUneditable(lineView.background) + } +} + +// Wrapper around buildLineContent which will reuse the structure +// in display.externalMeasured when possible. +function getLineContent(cm, lineView) { + var ext = cm.display.externalMeasured + if (ext && ext.line == lineView.line) { + cm.display.externalMeasured = null + lineView.measure = ext.measure + return ext.built + } + return buildLineContent(cm, lineView) +} + +// Redraw the line's text. Interacts with the background and text +// classes because the mode may output tokens that influence these +// classes. +function updateLineText(cm, lineView) { + var cls = lineView.text.className + var built = getLineContent(cm, lineView) + if (lineView.text == lineView.node) { lineView.node = built.pre } + lineView.text.parentNode.replaceChild(built.pre, lineView.text) + lineView.text = built.pre + if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) { + lineView.bgClass = built.bgClass + lineView.textClass = built.textClass + updateLineClasses(cm, lineView) + } else if (cls) { + lineView.text.className = cls + } +} + +function updateLineClasses(cm, lineView) { + updateLineBackground(cm, lineView) + if (lineView.line.wrapClass) + { ensureLineWrapped(lineView).className = lineView.line.wrapClass } + else if (lineView.node != lineView.text) + { lineView.node.className = "" } + var textClass = lineView.textClass ? lineView.textClass + " " + (lineView.line.textClass || "") : lineView.line.textClass + lineView.text.className = textClass || "" +} + +function updateLineGutter(cm, lineView, lineN, dims) { + if (lineView.gutter) { + lineView.node.removeChild(lineView.gutter) + lineView.gutter = null + } + if (lineView.gutterBackground) { + lineView.node.removeChild(lineView.gutterBackground) + lineView.gutterBackground = null + } + if (lineView.line.gutterClass) { + var wrap = ensureLineWrapped(lineView) + lineView.gutterBackground = elt("div", null, "CodeMirror-gutter-background " + lineView.line.gutterClass, + ("left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px; width: " + (dims.gutterTotalWidth) + "px")) + cm.display.input.setUneditable(lineView.gutterBackground) + wrap.insertBefore(lineView.gutterBackground, lineView.text) + } + var markers = lineView.line.gutterMarkers + if (cm.options.lineNumbers || markers) { + var wrap$1 = ensureLineWrapped(lineView) + var gutterWrap = lineView.gutter = elt("div", null, "CodeMirror-gutter-wrapper", ("left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px")) + cm.display.input.setUneditable(gutterWrap) + wrap$1.insertBefore(gutterWrap, lineView.text) + if (lineView.line.gutterClass) + { gutterWrap.className += " " + lineView.line.gutterClass } + if (cm.options.lineNumbers && (!markers || !markers["CodeMirror-linenumbers"])) + { lineView.lineNumber = gutterWrap.appendChild( + elt("div", lineNumberFor(cm.options, lineN), + "CodeMirror-linenumber CodeMirror-gutter-elt", + ("left: " + (dims.gutterLeft["CodeMirror-linenumbers"]) + "px; width: " + (cm.display.lineNumInnerWidth) + "px"))) } + if (markers) { for (var k = 0; k < cm.options.gutters.length; ++k) { + var id = cm.options.gutters[k], found = markers.hasOwnProperty(id) && markers[id] + if (found) + { gutterWrap.appendChild(elt("div", [found], "CodeMirror-gutter-elt", + ("left: " + (dims.gutterLeft[id]) + "px; width: " + (dims.gutterWidth[id]) + "px"))) } + } } + } +} + +function updateLineWidgets(cm, lineView, dims) { + if (lineView.alignable) { lineView.alignable = null } + for (var node = lineView.node.firstChild, next = (void 0); node; node = next) { + next = node.nextSibling + if (node.className == "CodeMirror-linewidget") + { lineView.node.removeChild(node) } + } + insertLineWidgets(cm, lineView, dims) +} + +// Build a line's DOM representation from scratch +function buildLineElement(cm, lineView, lineN, dims) { + var built = getLineContent(cm, lineView) + lineView.text = lineView.node = built.pre + if (built.bgClass) { lineView.bgClass = built.bgClass } + if (built.textClass) { lineView.textClass = built.textClass } + + updateLineClasses(cm, lineView) + updateLineGutter(cm, lineView, lineN, dims) + insertLineWidgets(cm, lineView, dims) + return lineView.node +} + +// A lineView may contain multiple logical lines (when merged by +// collapsed spans). The widgets for all of them need to be drawn. +function insertLineWidgets(cm, lineView, dims) { + insertLineWidgetsFor(cm, lineView.line, lineView, dims, true) + if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++) + { insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false) } } +} + +function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) { + if (!line.widgets) { return } + var wrap = ensureLineWrapped(lineView) + for (var i = 0, ws = line.widgets; i < ws.length; ++i) { + var widget = ws[i], node = elt("div", [widget.node], "CodeMirror-linewidget") + if (!widget.handleMouseEvents) { node.setAttribute("cm-ignore-events", "true") } + positionLineWidget(widget, node, lineView, dims) + cm.display.input.setUneditable(node) + if (allowAbove && widget.above) + { wrap.insertBefore(node, lineView.gutter || lineView.text) } + else + { wrap.appendChild(node) } + signalLater(widget, "redraw") + } +} + +function positionLineWidget(widget, node, lineView, dims) { + if (widget.noHScroll) { + ;(lineView.alignable || (lineView.alignable = [])).push(node) + var width = dims.wrapperWidth + node.style.left = dims.fixedPos + "px" + if (!widget.coverGutter) { + width -= dims.gutterTotalWidth + node.style.paddingLeft = dims.gutterTotalWidth + "px" + } + node.style.width = width + "px" + } + if (widget.coverGutter) { + node.style.zIndex = 5 + node.style.position = "relative" + if (!widget.noHScroll) { node.style.marginLeft = -dims.gutterTotalWidth + "px" } + } +} + +function widgetHeight(widget) { + if (widget.height != null) { return widget.height } + var cm = widget.doc.cm + if (!cm) { return 0 } + if (!contains(document.body, widget.node)) { + var parentStyle = "position: relative;" + if (widget.coverGutter) + { parentStyle += "margin-left: -" + cm.display.gutters.offsetWidth + "px;" } + if (widget.noHScroll) + { parentStyle += "width: " + cm.display.wrapper.clientWidth + "px;" } + removeChildrenAndAdd(cm.display.measure, elt("div", [widget.node], null, parentStyle)) + } + return widget.height = widget.node.parentNode.offsetHeight +} + +// Return true when the given mouse event happened in a widget +function eventInWidget(display, e) { + for (var n = e_target(e); n != display.wrapper; n = n.parentNode) { + if (!n || (n.nodeType == 1 && n.getAttribute("cm-ignore-events") == "true") || + (n.parentNode == display.sizer && n != display.mover)) + { return true } + } +} + +// POSITION MEASUREMENT + +function paddingTop(display) {return display.lineSpace.offsetTop} +function paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight} +function paddingH(display) { + if (display.cachedPaddingH) { return display.cachedPaddingH } + var e = removeChildrenAndAdd(display.measure, elt("pre", "x")) + var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle + var data = {left: parseInt(style.paddingLeft), right: parseInt(style.paddingRight)} + if (!isNaN(data.left) && !isNaN(data.right)) { display.cachedPaddingH = data } + return data +} + +function scrollGap(cm) { return scrollerGap - cm.display.nativeBarWidth } +function displayWidth(cm) { + return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth +} +function displayHeight(cm) { + return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight +} + +// Ensure the lineView.wrapping.heights array is populated. This is +// an array of bottom offsets for the lines that make up a drawn +// line. When lineWrapping is on, there might be more than one +// height. +function ensureLineHeights(cm, lineView, rect) { + var wrapping = cm.options.lineWrapping + var curWidth = wrapping && displayWidth(cm) + if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) { + var heights = lineView.measure.heights = [] + if (wrapping) { + lineView.measure.width = curWidth + var rects = lineView.text.firstChild.getClientRects() + for (var i = 0; i < rects.length - 1; i++) { + var cur = rects[i], next = rects[i + 1] + if (Math.abs(cur.bottom - next.bottom) > 2) + { heights.push((cur.bottom + next.top) / 2 - rect.top) } + } + } + heights.push(rect.bottom - rect.top) + } +} + +// Find a line map (mapping character offsets to text nodes) and a +// measurement cache for the given line number. (A line view might +// contain multiple lines when collapsed ranges are present.) +function mapFromLineView(lineView, line, lineN) { + if (lineView.line == line) + { return {map: lineView.measure.map, cache: lineView.measure.cache} } + for (var i = 0; i < lineView.rest.length; i++) + { if (lineView.rest[i] == line) + { return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i]} } } + for (var i$1 = 0; i$1 < lineView.rest.length; i$1++) + { if (lineNo(lineView.rest[i$1]) > lineN) + { return {map: lineView.measure.maps[i$1], cache: lineView.measure.caches[i$1], before: true} } } +} + +// Render a line into the hidden node display.externalMeasured. Used +// when measurement is needed for a line that's not in the viewport. +function updateExternalMeasurement(cm, line) { + line = visualLine(line) + var lineN = lineNo(line) + var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN) + view.lineN = lineN + var built = view.built = buildLineContent(cm, view) + view.text = built.pre + removeChildrenAndAdd(cm.display.lineMeasure, built.pre) + return view +} + +// Get a {top, bottom, left, right} box (in line-local coordinates) +// for a given character. +function measureChar(cm, line, ch, bias) { + return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias) +} + +// Find a line view that corresponds to the given line number. +function findViewForLine(cm, lineN) { + if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo) + { return cm.display.view[findViewIndex(cm, lineN)] } + var ext = cm.display.externalMeasured + if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size) + { return ext } +} + +// Measurement can be split in two steps, the set-up work that +// applies to the whole line, and the measurement of the actual +// character. Functions like coordsChar, that need to do a lot of +// measurements in a row, can thus ensure that the set-up work is +// only done once. +function prepareMeasureForLine(cm, line) { + var lineN = lineNo(line) + var view = findViewForLine(cm, lineN) + if (view && !view.text) { + view = null + } else if (view && view.changes) { + updateLineForChanges(cm, view, lineN, getDimensions(cm)) + cm.curOp.forceUpdate = true + } + if (!view) + { view = updateExternalMeasurement(cm, line) } + + var info = mapFromLineView(view, line, lineN) + return { + line: line, view: view, rect: null, + map: info.map, cache: info.cache, before: info.before, + hasHeights: false + } +} + +// Given a prepared measurement object, measures the position of an +// actual character (or fetches it from the cache). +function measureCharPrepared(cm, prepared, ch, bias, varHeight) { + if (prepared.before) { ch = -1 } + var key = ch + (bias || ""), found + if (prepared.cache.hasOwnProperty(key)) { + found = prepared.cache[key] + } else { + if (!prepared.rect) + { prepared.rect = prepared.view.text.getBoundingClientRect() } + if (!prepared.hasHeights) { + ensureLineHeights(cm, prepared.view, prepared.rect) + prepared.hasHeights = true + } + found = measureCharInner(cm, prepared, ch, bias) + if (!found.bogus) { prepared.cache[key] = found } + } + return {left: found.left, right: found.right, + top: varHeight ? found.rtop : found.top, + bottom: varHeight ? found.rbottom : found.bottom} +} + +var nullRect = {left: 0, right: 0, top: 0, bottom: 0} + +function nodeAndOffsetInLineMap(map, ch, bias) { + var node, start, end, collapse, mStart, mEnd + // First, search the line map for the text node corresponding to, + // or closest to, the target character. + for (var i = 0; i < map.length; i += 3) { + mStart = map[i] + mEnd = map[i + 1] + if (ch < mStart) { + start = 0; end = 1 + collapse = "left" + } else if (ch < mEnd) { + start = ch - mStart + end = start + 1 + } else if (i == map.length - 3 || ch == mEnd && map[i + 3] > ch) { + end = mEnd - mStart + start = end - 1 + if (ch >= mEnd) { collapse = "right" } + } + if (start != null) { + node = map[i + 2] + if (mStart == mEnd && bias == (node.insertLeft ? "left" : "right")) + { collapse = bias } + if (bias == "left" && start == 0) + { while (i && map[i - 2] == map[i - 3] && map[i - 1].insertLeft) { + node = map[(i -= 3) + 2] + collapse = "left" + } } + if (bias == "right" && start == mEnd - mStart) + { while (i < map.length - 3 && map[i + 3] == map[i + 4] && !map[i + 5].insertLeft) { + node = map[(i += 3) + 2] + collapse = "right" + } } + break + } + } + return {node: node, start: start, end: end, collapse: collapse, coverStart: mStart, coverEnd: mEnd} +} + +function getUsefulRect(rects, bias) { + var rect = nullRect + if (bias == "left") { for (var i = 0; i < rects.length; i++) { + if ((rect = rects[i]).left != rect.right) { break } + } } else { for (var i$1 = rects.length - 1; i$1 >= 0; i$1--) { + if ((rect = rects[i$1]).left != rect.right) { break } + } } + return rect +} + +function measureCharInner(cm, prepared, ch, bias) { + var place = nodeAndOffsetInLineMap(prepared.map, ch, bias) + var node = place.node, start = place.start, end = place.end, collapse = place.collapse + + var rect + if (node.nodeType == 3) { // If it is a text node, use a range to retrieve the coordinates. + for (var i$1 = 0; i$1 < 4; i$1++) { // Retry a maximum of 4 times when nonsense rectangles are returned + while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) { --start } + while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) { ++end } + if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart) + { rect = node.parentNode.getBoundingClientRect() } + else + { rect = getUsefulRect(range(node, start, end).getClientRects(), bias) } + if (rect.left || rect.right || start == 0) { break } + end = start + start = start - 1 + collapse = "right" + } + if (ie && ie_version < 11) { rect = maybeUpdateRectForZooming(cm.display.measure, rect) } + } else { // If it is a widget, simply get the box for the whole widget. + if (start > 0) { collapse = bias = "right" } + var rects + if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1) + { rect = rects[bias == "right" ? rects.length - 1 : 0] } + else + { rect = node.getBoundingClientRect() } + } + if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) { + var rSpan = node.parentNode.getClientRects()[0] + if (rSpan) + { rect = {left: rSpan.left, right: rSpan.left + charWidth(cm.display), top: rSpan.top, bottom: rSpan.bottom} } + else + { rect = nullRect } + } + + var rtop = rect.top - prepared.rect.top, rbot = rect.bottom - prepared.rect.top + var mid = (rtop + rbot) / 2 + var heights = prepared.view.measure.heights + var i = 0 + for (; i < heights.length - 1; i++) + { if (mid < heights[i]) { break } } + var top = i ? heights[i - 1] : 0, bot = heights[i] + var result = {left: (collapse == "right" ? rect.right : rect.left) - prepared.rect.left, + right: (collapse == "left" ? rect.left : rect.right) - prepared.rect.left, + top: top, bottom: bot} + if (!rect.left && !rect.right) { result.bogus = true } + if (!cm.options.singleCursorHeightPerLine) { result.rtop = rtop; result.rbottom = rbot } + + return result +} + +// Work around problem with bounding client rects on ranges being +// returned incorrectly when zoomed on IE10 and below. +function maybeUpdateRectForZooming(measure, rect) { + if (!window.screen || screen.logicalXDPI == null || + screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure)) + { return rect } + var scaleX = screen.logicalXDPI / screen.deviceXDPI + var scaleY = screen.logicalYDPI / screen.deviceYDPI + return {left: rect.left * scaleX, right: rect.right * scaleX, + top: rect.top * scaleY, bottom: rect.bottom * scaleY} +} + +function clearLineMeasurementCacheFor(lineView) { + if (lineView.measure) { + lineView.measure.cache = {} + lineView.measure.heights = null + if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++) + { lineView.measure.caches[i] = {} } } + } +} + +function clearLineMeasurementCache(cm) { + cm.display.externalMeasure = null + removeChildren(cm.display.lineMeasure) + for (var i = 0; i < cm.display.view.length; i++) + { clearLineMeasurementCacheFor(cm.display.view[i]) } +} + +function clearCaches(cm) { + clearLineMeasurementCache(cm) + cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null + if (!cm.options.lineWrapping) { cm.display.maxLineChanged = true } + cm.display.lineNumChars = null +} + +function pageScrollX() { + // Work around https://bugs.chromium.org/p/chromium/issues/detail?id=489206 + // which causes page_Offset and bounding client rects to use + // different reference viewports and invalidate our calculations. + if (chrome && android) { return -(document.body.getBoundingClientRect().left - parseInt(getComputedStyle(document.body).marginLeft)) } + return window.pageXOffset || (document.documentElement || document.body).scrollLeft +} +function pageScrollY() { + if (chrome && android) { return -(document.body.getBoundingClientRect().top - parseInt(getComputedStyle(document.body).marginTop)) } + return window.pageYOffset || (document.documentElement || document.body).scrollTop +} + +function widgetTopHeight(lineObj) { + var height = 0 + if (lineObj.widgets) { for (var i = 0; i < lineObj.widgets.length; ++i) { if (lineObj.widgets[i].above) + { height += widgetHeight(lineObj.widgets[i]) } } } + return height +} + +// Converts a {top, bottom, left, right} box from line-local +// coordinates into another coordinate system. Context may be one of +// "line", "div" (display.lineDiv), "local"./null (editor), "window", +// or "page". +function intoCoordSystem(cm, lineObj, rect, context, includeWidgets) { + if (!includeWidgets) { + var height = widgetTopHeight(lineObj) + rect.top += height; rect.bottom += height + } + if (context == "line") { return rect } + if (!context) { context = "local" } + var yOff = heightAtLine(lineObj) + if (context == "local") { yOff += paddingTop(cm.display) } + else { yOff -= cm.display.viewOffset } + if (context == "page" || context == "window") { + var lOff = cm.display.lineSpace.getBoundingClientRect() + yOff += lOff.top + (context == "window" ? 0 : pageScrollY()) + var xOff = lOff.left + (context == "window" ? 0 : pageScrollX()) + rect.left += xOff; rect.right += xOff + } + rect.top += yOff; rect.bottom += yOff + return rect +} + +// Coverts a box from "div" coords to another coordinate system. +// Context may be "window", "page", "div", or "local"./null. +function fromCoordSystem(cm, coords, context) { + if (context == "div") { return coords } + var left = coords.left, top = coords.top + // First move into "page" coordinate system + if (context == "page") { + left -= pageScrollX() + top -= pageScrollY() + } else if (context == "local" || !context) { + var localBox = cm.display.sizer.getBoundingClientRect() + left += localBox.left + top += localBox.top + } + + var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect() + return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top} +} + +function charCoords(cm, pos, context, lineObj, bias) { + if (!lineObj) { lineObj = getLine(cm.doc, pos.line) } + return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context) +} + +// Returns a box for a given cursor position, which may have an +// 'other' property containing the position of the secondary cursor +// on a bidi boundary. +// A cursor Pos(line, char, "before") is on the same visual line as `char - 1` +// and after `char - 1` in writing order of `char - 1` +// A cursor Pos(line, char, "after") is on the same visual line as `char` +// and before `char` in writing order of `char` +// Examples (upper-case letters are RTL, lower-case are LTR): +// Pos(0, 1, ...) +// before after +// ab a|b a|b +// aB a|B aB| +// Ab |Ab A|b +// AB B|A B|A +// Every position after the last character on a line is considered to stick +// to the last character on the line. +function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) { + lineObj = lineObj || getLine(cm.doc, pos.line) + if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj) } + function get(ch, right) { + var m = measureCharPrepared(cm, preparedMeasure, ch, right ? "right" : "left", varHeight) + if (right) { m.left = m.right; } else { m.right = m.left } + return intoCoordSystem(cm, lineObj, m, context) + } + var order = getOrder(lineObj, cm.doc.direction), ch = pos.ch, sticky = pos.sticky + if (ch >= lineObj.text.length) { + ch = lineObj.text.length + sticky = "before" + } else if (ch <= 0) { + ch = 0 + sticky = "after" + } + if (!order) { return get(sticky == "before" ? ch - 1 : ch, sticky == "before") } + + function getBidi(ch, partPos, invert) { + var part = order[partPos], right = part.level == 1 + return get(invert ? ch - 1 : ch, right != invert) + } + var partPos = getBidiPartAt(order, ch, sticky) + var other = bidiOther + var val = getBidi(ch, partPos, sticky == "before") + if (other != null) { val.other = getBidi(ch, other, sticky != "before") } + return val +} + +// Used to cheaply estimate the coordinates for a position. Used for +// intermediate scroll updates. +function estimateCoords(cm, pos) { + var left = 0 + pos = clipPos(cm.doc, pos) + if (!cm.options.lineWrapping) { left = charWidth(cm.display) * pos.ch } + var lineObj = getLine(cm.doc, pos.line) + var top = heightAtLine(lineObj) + paddingTop(cm.display) + return {left: left, right: left, top: top, bottom: top + lineObj.height} +} + +// Positions returned by coordsChar contain some extra information. +// xRel is the relative x position of the input coordinates compared +// to the found position (so xRel > 0 means the coordinates are to +// the right of the character position, for example). When outside +// is true, that means the coordinates lie outside the line's +// vertical range. +function PosWithInfo(line, ch, sticky, outside, xRel) { + var pos = Pos(line, ch, sticky) + pos.xRel = xRel + if (outside) { pos.outside = true } + return pos +} + +// Compute the character position closest to the given coordinates. +// Input must be lineSpace-local ("div" coordinate system). +function coordsChar(cm, x, y) { + var doc = cm.doc + y += cm.display.viewOffset + if (y < 0) { return PosWithInfo(doc.first, 0, null, true, -1) } + var lineN = lineAtHeight(doc, y), last = doc.first + doc.size - 1 + if (lineN > last) + { return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, null, true, 1) } + if (x < 0) { x = 0 } + + var lineObj = getLine(doc, lineN) + for (;;) { + var found = coordsCharInner(cm, lineObj, lineN, x, y) + var collapsed = collapsedSpanAround(lineObj, found.ch + (found.xRel > 0 ? 1 : 0)) + if (!collapsed) { return found } + var rangeEnd = collapsed.find(1) + if (rangeEnd.line == lineN) { return rangeEnd } + lineObj = getLine(doc, lineN = rangeEnd.line) + } +} + +function wrappedLineExtent(cm, lineObj, preparedMeasure, y) { + y -= widgetTopHeight(lineObj) + var end = lineObj.text.length + var begin = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch - 1).bottom <= y; }, end, 0) + end = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch).top > y; }, begin, end) + return {begin: begin, end: end} +} + +function wrappedLineExtentChar(cm, lineObj, preparedMeasure, target) { + if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj) } + var targetTop = intoCoordSystem(cm, lineObj, measureCharPrepared(cm, preparedMeasure, target), "line").top + return wrappedLineExtent(cm, lineObj, preparedMeasure, targetTop) +} + +// Returns true if the given side of a box is after the given +// coordinates, in top-to-bottom, left-to-right order. +function boxIsAfter(box, x, y, left) { + return box.bottom <= y ? false : box.top > y ? true : (left ? box.left : box.right) > x +} + +function coordsCharInner(cm, lineObj, lineNo, x, y) { + // Move y into line-local coordinate space + y -= heightAtLine(lineObj) + var preparedMeasure = prepareMeasureForLine(cm, lineObj) + // When directly calling `measureCharPrepared`, we have to adjust + // for the widgets at this line. + var widgetHeight = widgetTopHeight(lineObj) + var begin = 0, end = lineObj.text.length, ltr = true + + var order = getOrder(lineObj, cm.doc.direction) + // If the line isn't plain left-to-right text, first figure out + // which bidi section the coordinates fall into. + if (order) { + var part = (cm.options.lineWrapping ? coordsBidiPartWrapped : coordsBidiPart) + (cm, lineObj, lineNo, preparedMeasure, order, x, y) + ltr = part.level != 1 + // The awkward -1 offsets are needed because findFirst (called + // on these below) will treat its first bound as inclusive, + // second as exclusive, but we want to actually address the + // characters in the part's range + begin = ltr ? part.from : part.to - 1 + end = ltr ? part.to : part.from - 1 + } + + // A binary search to find the first character whose bounding box + // starts after the coordinates. If we run across any whose box wrap + // the coordinates, store that. + var chAround = null, boxAround = null + var ch = findFirst(function (ch) { + var box = measureCharPrepared(cm, preparedMeasure, ch) + box.top += widgetHeight; box.bottom += widgetHeight + if (!boxIsAfter(box, x, y, false)) { return false } + if (box.top <= y && box.left <= x) { + chAround = ch + boxAround = box + } + return true + }, begin, end) + + var baseX, sticky, outside = false + // If a box around the coordinates was found, use that + if (boxAround) { + // Distinguish coordinates nearer to the left or right side of the box + var atLeft = x - boxAround.left < boxAround.right - x, atStart = atLeft == ltr + ch = chAround + (atStart ? 0 : 1) + sticky = atStart ? "after" : "before" + baseX = atLeft ? boxAround.left : boxAround.right + } else { + // (Adjust for extended bound, if necessary.) + if (!ltr && (ch == end || ch == begin)) { ch++ } + // To determine which side to associate with, get the box to the + // left of the character and compare it's vertical position to the + // coordinates + sticky = ch == 0 ? "after" : ch == lineObj.text.length ? "before" : + (measureCharPrepared(cm, preparedMeasure, ch - (ltr ? 1 : 0)).bottom + widgetHeight <= y) == ltr ? + "after" : "before" + // Now get accurate coordinates for this place, in order to get a + // base X position + var coords = cursorCoords(cm, Pos(lineNo, ch, sticky), "line", lineObj, preparedMeasure) + baseX = coords.left + outside = y < coords.top || y >= coords.bottom + } + + ch = skipExtendingChars(lineObj.text, ch, 1) + return PosWithInfo(lineNo, ch, sticky, outside, x - baseX) +} + +function coordsBidiPart(cm, lineObj, lineNo, preparedMeasure, order, x, y) { + // Bidi parts are sorted left-to-right, and in a non-line-wrapping + // situation, we can take this ordering to correspond to the visual + // ordering. This finds the first part whose end is after the given + // coordinates. + var index = findFirst(function (i) { + var part = order[i], ltr = part.level != 1 + return boxIsAfter(cursorCoords(cm, Pos(lineNo, ltr ? part.to : part.from, ltr ? "before" : "after"), + "line", lineObj, preparedMeasure), x, y, true) + }, 0, order.length - 1) + var part = order[index] + // If this isn't the first part, the part's start is also after + // the coordinates, and the coordinates aren't on the same line as + // that start, move one part back. + if (index > 0) { + var ltr = part.level != 1 + var start = cursorCoords(cm, Pos(lineNo, ltr ? part.from : part.to, ltr ? "after" : "before"), + "line", lineObj, preparedMeasure) + if (boxIsAfter(start, x, y, true) && start.top > y) + { part = order[index - 1] } + } + return part +} + +function coordsBidiPartWrapped(cm, lineObj, _lineNo, preparedMeasure, order, x, y) { + // In a wrapped line, rtl text on wrapping boundaries can do things + // that don't correspond to the ordering in our `order` array at + // all, so a binary search doesn't work, and we want to return a + // part that only spans one line so that the binary search in + // coordsCharInner is safe. As such, we first find the extent of the + // wrapped line, and then do a flat search in which we discard any + // spans that aren't on the line. + var ref = wrappedLineExtent(cm, lineObj, preparedMeasure, y); + var begin = ref.begin; + var end = ref.end; + if (/\s/.test(lineObj.text.charAt(end - 1))) { end-- } + var part = null, closestDist = null + for (var i = 0; i < order.length; i++) { + var p = order[i] + if (p.from >= end || p.to <= begin) { continue } + var ltr = p.level != 1 + var endX = measureCharPrepared(cm, preparedMeasure, ltr ? Math.min(end, p.to) - 1 : Math.max(begin, p.from)).right + // Weigh against spans ending before this, so that they are only + // picked if nothing ends after + var dist = endX < x ? x - endX + 1e9 : endX - x + if (!part || closestDist > dist) { + part = p + closestDist = dist + } + } + if (!part) { part = order[order.length - 1] } + // Clip the part to the wrapped line. + if (part.from < begin) { part = {from: begin, to: part.to, level: part.level} } + if (part.to > end) { part = {from: part.from, to: end, level: part.level} } + return part +} + +var measureText +// Compute the default text height. +function textHeight(display) { + if (display.cachedTextHeight != null) { return display.cachedTextHeight } + if (measureText == null) { + measureText = elt("pre") + // Measure a bunch of lines, for browsers that compute + // fractional heights. + for (var i = 0; i < 49; ++i) { + measureText.appendChild(document.createTextNode("x")) + measureText.appendChild(elt("br")) + } + measureText.appendChild(document.createTextNode("x")) + } + removeChildrenAndAdd(display.measure, measureText) + var height = measureText.offsetHeight / 50 + if (height > 3) { display.cachedTextHeight = height } + removeChildren(display.measure) + return height || 1 +} + +// Compute the default character width. +function charWidth(display) { + if (display.cachedCharWidth != null) { return display.cachedCharWidth } + var anchor = elt("span", "xxxxxxxxxx") + var pre = elt("pre", [anchor]) + removeChildrenAndAdd(display.measure, pre) + var rect = anchor.getBoundingClientRect(), width = (rect.right - rect.left) / 10 + if (width > 2) { display.cachedCharWidth = width } + return width || 10 +} + +// Do a bulk-read of the DOM positions and sizes needed to draw the +// view, so that we don't interleave reading and writing to the DOM. +function getDimensions(cm) { + var d = cm.display, left = {}, width = {} + var gutterLeft = d.gutters.clientLeft + for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) { + left[cm.options.gutters[i]] = n.offsetLeft + n.clientLeft + gutterLeft + width[cm.options.gutters[i]] = n.clientWidth + } + return {fixedPos: compensateForHScroll(d), + gutterTotalWidth: d.gutters.offsetWidth, + gutterLeft: left, + gutterWidth: width, + wrapperWidth: d.wrapper.clientWidth} +} + +// Computes display.scroller.scrollLeft + display.gutters.offsetWidth, +// but using getBoundingClientRect to get a sub-pixel-accurate +// result. +function compensateForHScroll(display) { + return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left +} + +// Returns a function that estimates the height of a line, to use as +// first approximation until the line becomes visible (and is thus +// properly measurable). +function estimateHeight(cm) { + var th = textHeight(cm.display), wrapping = cm.options.lineWrapping + var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3) + return function (line) { + if (lineIsHidden(cm.doc, line)) { return 0 } + + var widgetsHeight = 0 + if (line.widgets) { for (var i = 0; i < line.widgets.length; i++) { + if (line.widgets[i].height) { widgetsHeight += line.widgets[i].height } + } } + + if (wrapping) + { return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th } + else + { return widgetsHeight + th } + } +} + +function estimateLineHeights(cm) { + var doc = cm.doc, est = estimateHeight(cm) + doc.iter(function (line) { + var estHeight = est(line) + if (estHeight != line.height) { updateLineHeight(line, estHeight) } + }) +} + +// Given a mouse event, find the corresponding position. If liberal +// is false, it checks whether a gutter or scrollbar was clicked, +// and returns null if it was. forRect is used by rectangular +// selections, and tries to estimate a character position even for +// coordinates beyond the right of the text. +function posFromMouse(cm, e, liberal, forRect) { + var display = cm.display + if (!liberal && e_target(e).getAttribute("cm-not-content") == "true") { return null } + + var x, y, space = display.lineSpace.getBoundingClientRect() + // Fails unpredictably on IE[67] when mouse is dragged around quickly. + try { x = e.clientX - space.left; y = e.clientY - space.top } + catch (e) { return null } + var coords = coordsChar(cm, x, y), line + if (forRect && coords.xRel == 1 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) { + var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length + coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff)) + } + return coords +} + +// Find the view element corresponding to a given line. Return null +// when the line isn't visible. +function findViewIndex(cm, n) { + if (n >= cm.display.viewTo) { return null } + n -= cm.display.viewFrom + if (n < 0) { return null } + var view = cm.display.view + for (var i = 0; i < view.length; i++) { + n -= view[i].size + if (n < 0) { return i } + } +} + +function updateSelection(cm) { + cm.display.input.showSelection(cm.display.input.prepareSelection()) +} + +function prepareSelection(cm, primary) { + if ( primary === void 0 ) primary = true; + + var doc = cm.doc, result = {} + var curFragment = result.cursors = document.createDocumentFragment() + var selFragment = result.selection = document.createDocumentFragment() + + for (var i = 0; i < doc.sel.ranges.length; i++) { + if (!primary && i == doc.sel.primIndex) { continue } + var range = doc.sel.ranges[i] + if (range.from().line >= cm.display.viewTo || range.to().line < cm.display.viewFrom) { continue } + var collapsed = range.empty() + if (collapsed || cm.options.showCursorWhenSelecting) + { drawSelectionCursor(cm, range.head, curFragment) } + if (!collapsed) + { drawSelectionRange(cm, range, selFragment) } + } + return result +} + +// Draws a cursor for the given range +function drawSelectionCursor(cm, head, output) { + var pos = cursorCoords(cm, head, "div", null, null, !cm.options.singleCursorHeightPerLine) + + var cursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor")) + cursor.style.left = pos.left + "px" + cursor.style.top = pos.top + "px" + cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + "px" + + if (pos.other) { + // Secondary cursor, shown when on a 'jump' in bi-directional text + var otherCursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor CodeMirror-secondarycursor")) + otherCursor.style.display = "" + otherCursor.style.left = pos.other.left + "px" + otherCursor.style.top = pos.other.top + "px" + otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + "px" + } +} + +function cmpCoords(a, b) { return a.top - b.top || a.left - b.left } + +// Draws the given range as a highlighted selection +function drawSelectionRange(cm, range, output) { + var display = cm.display, doc = cm.doc + var fragment = document.createDocumentFragment() + var padding = paddingH(cm.display), leftSide = padding.left + var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right + var docLTR = doc.direction == "ltr" + + function add(left, top, width, bottom) { + if (top < 0) { top = 0 } + top = Math.round(top) + bottom = Math.round(bottom) + fragment.appendChild(elt("div", null, "CodeMirror-selected", ("position: absolute; left: " + left + "px;\n top: " + top + "px; width: " + (width == null ? rightSide - left : width) + "px;\n height: " + (bottom - top) + "px"))) + } + + function drawForLine(line, fromArg, toArg) { + var lineObj = getLine(doc, line) + var lineLen = lineObj.text.length + var start, end + function coords(ch, bias) { + return charCoords(cm, Pos(line, ch), "div", lineObj, bias) + } + + function wrapX(pos, dir, side) { + var extent = wrappedLineExtentChar(cm, lineObj, null, pos) + var prop = (dir == "ltr") == (side == "after") ? "left" : "right" + var ch = side == "after" ? extent.begin : extent.end - (/\s/.test(lineObj.text.charAt(extent.end - 1)) ? 2 : 1) + return coords(ch, prop)[prop] + } + + var order = getOrder(lineObj, doc.direction) + iterateBidiSections(order, fromArg || 0, toArg == null ? lineLen : toArg, function (from, to, dir, i) { + var ltr = dir == "ltr" + var fromPos = coords(from, ltr ? "left" : "right") + var toPos = coords(to - 1, ltr ? "right" : "left") + + var openStart = fromArg == null && from == 0, openEnd = toArg == null && to == lineLen + var first = i == 0, last = !order || i == order.length - 1 + if (toPos.top - fromPos.top <= 3) { // Single line + var openLeft = (docLTR ? openStart : openEnd) && first + var openRight = (docLTR ? openEnd : openStart) && last + var left = openLeft ? leftSide : (ltr ? fromPos : toPos).left + var right = openRight ? rightSide : (ltr ? toPos : fromPos).right + add(left, fromPos.top, right - left, fromPos.bottom) + } else { // Multiple lines + var topLeft, topRight, botLeft, botRight + if (ltr) { + topLeft = docLTR && openStart && first ? leftSide : fromPos.left + topRight = docLTR ? rightSide : wrapX(from, dir, "before") + botLeft = docLTR ? leftSide : wrapX(to, dir, "after") + botRight = docLTR && openEnd && last ? rightSide : toPos.right + } else { + topLeft = !docLTR ? leftSide : wrapX(from, dir, "before") + topRight = !docLTR && openStart && first ? rightSide : fromPos.right + botLeft = !docLTR && openEnd && last ? leftSide : toPos.left + botRight = !docLTR ? rightSide : wrapX(to, dir, "after") + } + add(topLeft, fromPos.top, topRight - topLeft, fromPos.bottom) + if (fromPos.bottom < toPos.top) { add(leftSide, fromPos.bottom, null, toPos.top) } + add(botLeft, toPos.top, botRight - botLeft, toPos.bottom) + } + + if (!start || cmpCoords(fromPos, start) < 0) { start = fromPos } + if (cmpCoords(toPos, start) < 0) { start = toPos } + if (!end || cmpCoords(fromPos, end) < 0) { end = fromPos } + if (cmpCoords(toPos, end) < 0) { end = toPos } + }) + return {start: start, end: end} + } + + var sFrom = range.from(), sTo = range.to() + if (sFrom.line == sTo.line) { + drawForLine(sFrom.line, sFrom.ch, sTo.ch) + } else { + var fromLine = getLine(doc, sFrom.line), toLine = getLine(doc, sTo.line) + var singleVLine = visualLine(fromLine) == visualLine(toLine) + var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end + var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start + if (singleVLine) { + if (leftEnd.top < rightStart.top - 2) { + add(leftEnd.right, leftEnd.top, null, leftEnd.bottom) + add(leftSide, rightStart.top, rightStart.left, rightStart.bottom) + } else { + add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom) + } + } + if (leftEnd.bottom < rightStart.top) + { add(leftSide, leftEnd.bottom, null, rightStart.top) } + } + + output.appendChild(fragment) +} + +// Cursor-blinking +function restartBlink(cm) { + if (!cm.state.focused) { return } + var display = cm.display + clearInterval(display.blinker) + var on = true + display.cursorDiv.style.visibility = "" + if (cm.options.cursorBlinkRate > 0) + { display.blinker = setInterval(function () { return display.cursorDiv.style.visibility = (on = !on) ? "" : "hidden"; }, + cm.options.cursorBlinkRate) } + else if (cm.options.cursorBlinkRate < 0) + { display.cursorDiv.style.visibility = "hidden" } +} + +function ensureFocus(cm) { + if (!cm.state.focused) { cm.display.input.focus(); onFocus(cm) } +} + +function delayBlurEvent(cm) { + cm.state.delayingBlurEvent = true + setTimeout(function () { if (cm.state.delayingBlurEvent) { + cm.state.delayingBlurEvent = false + onBlur(cm) + } }, 100) +} + +function onFocus(cm, e) { + if (cm.state.delayingBlurEvent) { cm.state.delayingBlurEvent = false } + + if (cm.options.readOnly == "nocursor") { return } + if (!cm.state.focused) { + signal(cm, "focus", cm, e) + cm.state.focused = true + addClass(cm.display.wrapper, "CodeMirror-focused") + // This test prevents this from firing when a context + // menu is closed (since the input reset would kill the + // select-all detection hack) + if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) { + cm.display.input.reset() + if (webkit) { setTimeout(function () { return cm.display.input.reset(true); }, 20) } // Issue #1730 + } + cm.display.input.receivedFocus() + } + restartBlink(cm) +} +function onBlur(cm, e) { + if (cm.state.delayingBlurEvent) { return } + + if (cm.state.focused) { + signal(cm, "blur", cm, e) + cm.state.focused = false + rmClass(cm.display.wrapper, "CodeMirror-focused") + } + clearInterval(cm.display.blinker) + setTimeout(function () { if (!cm.state.focused) { cm.display.shift = false } }, 150) +} + +// Read the actual heights of the rendered lines, and update their +// stored heights to match. +function updateHeightsInViewport(cm) { + var display = cm.display + var prevBottom = display.lineDiv.offsetTop + for (var i = 0; i < display.view.length; i++) { + var cur = display.view[i], height = (void 0) + if (cur.hidden) { continue } + if (ie && ie_version < 8) { + var bot = cur.node.offsetTop + cur.node.offsetHeight + height = bot - prevBottom + prevBottom = bot + } else { + var box = cur.node.getBoundingClientRect() + height = box.bottom - box.top + } + var diff = cur.line.height - height + if (height < 2) { height = textHeight(display) } + if (diff > .005 || diff < -.005) { + updateLineHeight(cur.line, height) + updateWidgetHeight(cur.line) + if (cur.rest) { for (var j = 0; j < cur.rest.length; j++) + { updateWidgetHeight(cur.rest[j]) } } + } + } +} + +// Read and store the height of line widgets associated with the +// given line. +function updateWidgetHeight(line) { + if (line.widgets) { for (var i = 0; i < line.widgets.length; ++i) { + var w = line.widgets[i], parent = w.node.parentNode + if (parent) { w.height = parent.offsetHeight } + } } +} + +// Compute the lines that are visible in a given viewport (defaults +// the the current scroll position). viewport may contain top, +// height, and ensure (see op.scrollToPos) properties. +function visibleLines(display, doc, viewport) { + var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop + top = Math.floor(top - paddingTop(display)) + var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight + + var from = lineAtHeight(doc, top), to = lineAtHeight(doc, bottom) + // Ensure is a {from: {line, ch}, to: {line, ch}} object, and + // forces those lines into the viewport (if possible). + if (viewport && viewport.ensure) { + var ensureFrom = viewport.ensure.from.line, ensureTo = viewport.ensure.to.line + if (ensureFrom < from) { + from = ensureFrom + to = lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight) + } else if (Math.min(ensureTo, doc.lastLine()) >= to) { + from = lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight) + to = ensureTo + } + } + return {from: from, to: Math.max(to, from + 1)} +} + +// Re-align line numbers and gutter marks to compensate for +// horizontal scrolling. +function alignHorizontally(cm) { + var display = cm.display, view = display.view + if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) { return } + var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft + var gutterW = display.gutters.offsetWidth, left = comp + "px" + for (var i = 0; i < view.length; i++) { if (!view[i].hidden) { + if (cm.options.fixedGutter) { + if (view[i].gutter) + { view[i].gutter.style.left = left } + if (view[i].gutterBackground) + { view[i].gutterBackground.style.left = left } + } + var align = view[i].alignable + if (align) { for (var j = 0; j < align.length; j++) + { align[j].style.left = left } } + } } + if (cm.options.fixedGutter) + { display.gutters.style.left = (comp + gutterW) + "px" } +} + +// Used to ensure that the line number gutter is still the right +// size for the current document size. Returns true when an update +// is needed. +function maybeUpdateLineNumberWidth(cm) { + if (!cm.options.lineNumbers) { return false } + var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display + if (last.length != display.lineNumChars) { + var test = display.measure.appendChild(elt("div", [elt("div", last)], + "CodeMirror-linenumber CodeMirror-gutter-elt")) + var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW + display.lineGutter.style.width = "" + display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1 + display.lineNumWidth = display.lineNumInnerWidth + padding + display.lineNumChars = display.lineNumInnerWidth ? last.length : -1 + display.lineGutter.style.width = display.lineNumWidth + "px" + updateGutterSpace(cm) + return true + } + return false +} + +// SCROLLING THINGS INTO VIEW + +// If an editor sits on the top or bottom of the window, partially +// scrolled out of view, this ensures that the cursor is visible. +function maybeScrollWindow(cm, rect) { + if (signalDOMEvent(cm, "scrollCursorIntoView")) { return } + + var display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null + if (rect.top + box.top < 0) { doScroll = true } + else if (rect.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) { doScroll = false } + if (doScroll != null && !phantom) { + var scrollNode = elt("div", "\u200b", null, ("position: absolute;\n top: " + (rect.top - display.viewOffset - paddingTop(cm.display)) + "px;\n height: " + (rect.bottom - rect.top + scrollGap(cm) + display.barHeight) + "px;\n left: " + (rect.left) + "px; width: " + (Math.max(2, rect.right - rect.left)) + "px;")) + cm.display.lineSpace.appendChild(scrollNode) + scrollNode.scrollIntoView(doScroll) + cm.display.lineSpace.removeChild(scrollNode) + } +} + +// Scroll a given position into view (immediately), verifying that +// it actually became visible (as line heights are accurately +// measured, the position of something may 'drift' during drawing). +function scrollPosIntoView(cm, pos, end, margin) { + if (margin == null) { margin = 0 } + var rect + if (!cm.options.lineWrapping && pos == end) { + // Set pos and end to the cursor positions around the character pos sticks to + // If pos.sticky == "before", that is around pos.ch - 1, otherwise around pos.ch + // If pos == Pos(_, 0, "before"), pos and end are unchanged + pos = pos.ch ? Pos(pos.line, pos.sticky == "before" ? pos.ch - 1 : pos.ch, "after") : pos + end = pos.sticky == "before" ? Pos(pos.line, pos.ch + 1, "before") : pos + } + for (var limit = 0; limit < 5; limit++) { + var changed = false + var coords = cursorCoords(cm, pos) + var endCoords = !end || end == pos ? coords : cursorCoords(cm, end) + rect = {left: Math.min(coords.left, endCoords.left), + top: Math.min(coords.top, endCoords.top) - margin, + right: Math.max(coords.left, endCoords.left), + bottom: Math.max(coords.bottom, endCoords.bottom) + margin} + var scrollPos = calculateScrollPos(cm, rect) + var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft + if (scrollPos.scrollTop != null) { + updateScrollTop(cm, scrollPos.scrollTop) + if (Math.abs(cm.doc.scrollTop - startTop) > 1) { changed = true } + } + if (scrollPos.scrollLeft != null) { + setScrollLeft(cm, scrollPos.scrollLeft) + if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) { changed = true } + } + if (!changed) { break } + } + return rect +} + +// Scroll a given set of coordinates into view (immediately). +function scrollIntoView(cm, rect) { + var scrollPos = calculateScrollPos(cm, rect) + if (scrollPos.scrollTop != null) { updateScrollTop(cm, scrollPos.scrollTop) } + if (scrollPos.scrollLeft != null) { setScrollLeft(cm, scrollPos.scrollLeft) } +} + +// Calculate a new scroll position needed to scroll the given +// rectangle into view. Returns an object with scrollTop and +// scrollLeft properties. When these are undefined, the +// vertical/horizontal position does not need to be adjusted. +function calculateScrollPos(cm, rect) { + var display = cm.display, snapMargin = textHeight(cm.display) + if (rect.top < 0) { rect.top = 0 } + var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop + var screen = displayHeight(cm), result = {} + if (rect.bottom - rect.top > screen) { rect.bottom = rect.top + screen } + var docBottom = cm.doc.height + paddingVert(display) + var atTop = rect.top < snapMargin, atBottom = rect.bottom > docBottom - snapMargin + if (rect.top < screentop) { + result.scrollTop = atTop ? 0 : rect.top + } else if (rect.bottom > screentop + screen) { + var newTop = Math.min(rect.top, (atBottom ? docBottom : rect.bottom) - screen) + if (newTop != screentop) { result.scrollTop = newTop } + } + + var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft + var screenw = displayWidth(cm) - (cm.options.fixedGutter ? display.gutters.offsetWidth : 0) + var tooWide = rect.right - rect.left > screenw + if (tooWide) { rect.right = rect.left + screenw } + if (rect.left < 10) + { result.scrollLeft = 0 } + else if (rect.left < screenleft) + { result.scrollLeft = Math.max(0, rect.left - (tooWide ? 0 : 10)) } + else if (rect.right > screenw + screenleft - 3) + { result.scrollLeft = rect.right + (tooWide ? 0 : 10) - screenw } + return result +} + +// Store a relative adjustment to the scroll position in the current +// operation (to be applied when the operation finishes). +function addToScrollTop(cm, top) { + if (top == null) { return } + resolveScrollToPos(cm) + cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top +} + +// Make sure that at the end of the operation the current cursor is +// shown. +function ensureCursorVisible(cm) { + resolveScrollToPos(cm) + var cur = cm.getCursor() + cm.curOp.scrollToPos = {from: cur, to: cur, margin: cm.options.cursorScrollMargin} +} + +function scrollToCoords(cm, x, y) { + if (x != null || y != null) { resolveScrollToPos(cm) } + if (x != null) { cm.curOp.scrollLeft = x } + if (y != null) { cm.curOp.scrollTop = y } +} + +function scrollToRange(cm, range) { + resolveScrollToPos(cm) + cm.curOp.scrollToPos = range +} + +// When an operation has its scrollToPos property set, and another +// scroll action is applied before the end of the operation, this +// 'simulates' scrolling that position into view in a cheap way, so +// that the effect of intermediate scroll commands is not ignored. +function resolveScrollToPos(cm) { + var range = cm.curOp.scrollToPos + if (range) { + cm.curOp.scrollToPos = null + var from = estimateCoords(cm, range.from), to = estimateCoords(cm, range.to) + scrollToCoordsRange(cm, from, to, range.margin) + } +} + +function scrollToCoordsRange(cm, from, to, margin) { + var sPos = calculateScrollPos(cm, { + left: Math.min(from.left, to.left), + top: Math.min(from.top, to.top) - margin, + right: Math.max(from.right, to.right), + bottom: Math.max(from.bottom, to.bottom) + margin + }) + scrollToCoords(cm, sPos.scrollLeft, sPos.scrollTop) +} + +// Sync the scrollable area and scrollbars, ensure the viewport +// covers the visible area. +function updateScrollTop(cm, val) { + if (Math.abs(cm.doc.scrollTop - val) < 2) { return } + if (!gecko) { updateDisplaySimple(cm, {top: val}) } + setScrollTop(cm, val, true) + if (gecko) { updateDisplaySimple(cm) } + startWorker(cm, 100) +} + +function setScrollTop(cm, val, forceScroll) { + val = Math.min(cm.display.scroller.scrollHeight - cm.display.scroller.clientHeight, val) + if (cm.display.scroller.scrollTop == val && !forceScroll) { return } + cm.doc.scrollTop = val + cm.display.scrollbars.setScrollTop(val) + if (cm.display.scroller.scrollTop != val) { cm.display.scroller.scrollTop = val } +} + +// Sync scroller and scrollbar, ensure the gutter elements are +// aligned. +function setScrollLeft(cm, val, isScroller, forceScroll) { + val = Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth) + if ((isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) && !forceScroll) { return } + cm.doc.scrollLeft = val + alignHorizontally(cm) + if (cm.display.scroller.scrollLeft != val) { cm.display.scroller.scrollLeft = val } + cm.display.scrollbars.setScrollLeft(val) +} + +// SCROLLBARS + +// Prepare DOM reads needed to update the scrollbars. Done in one +// shot to minimize update/measure roundtrips. +function measureForScrollbars(cm) { + var d = cm.display, gutterW = d.gutters.offsetWidth + var docH = Math.round(cm.doc.height + paddingVert(cm.display)) + return { + clientHeight: d.scroller.clientHeight, + viewHeight: d.wrapper.clientHeight, + scrollWidth: d.scroller.scrollWidth, clientWidth: d.scroller.clientWidth, + viewWidth: d.wrapper.clientWidth, + barLeft: cm.options.fixedGutter ? gutterW : 0, + docHeight: docH, + scrollHeight: docH + scrollGap(cm) + d.barHeight, + nativeBarWidth: d.nativeBarWidth, + gutterWidth: gutterW + } +} + +var NativeScrollbars = function(place, scroll, cm) { + this.cm = cm + var vert = this.vert = elt("div", [elt("div", null, null, "min-width: 1px")], "CodeMirror-vscrollbar") + var horiz = this.horiz = elt("div", [elt("div", null, null, "height: 100%; min-height: 1px")], "CodeMirror-hscrollbar") + vert.tabIndex = horiz.tabIndex = -1 + place(vert); place(horiz) + + on(vert, "scroll", function () { + if (vert.clientHeight) { scroll(vert.scrollTop, "vertical") } + }) + on(horiz, "scroll", function () { + if (horiz.clientWidth) { scroll(horiz.scrollLeft, "horizontal") } + }) + + this.checkedZeroWidth = false + // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8). + if (ie && ie_version < 8) { this.horiz.style.minHeight = this.vert.style.minWidth = "18px" } +}; + +NativeScrollbars.prototype.update = function (measure) { + var needsH = measure.scrollWidth > measure.clientWidth + 1 + var needsV = measure.scrollHeight > measure.clientHeight + 1 + var sWidth = measure.nativeBarWidth + + if (needsV) { + this.vert.style.display = "block" + this.vert.style.bottom = needsH ? sWidth + "px" : "0" + var totalHeight = measure.viewHeight - (needsH ? sWidth : 0) + // A bug in IE8 can cause this value to be negative, so guard it. + this.vert.firstChild.style.height = + Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + "px" + } else { + this.vert.style.display = "" + this.vert.firstChild.style.height = "0" + } + + if (needsH) { + this.horiz.style.display = "block" + this.horiz.style.right = needsV ? sWidth + "px" : "0" + this.horiz.style.left = measure.barLeft + "px" + var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0) + this.horiz.firstChild.style.width = + Math.max(0, measure.scrollWidth - measure.clientWidth + totalWidth) + "px" + } else { + this.horiz.style.display = "" + this.horiz.firstChild.style.width = "0" + } + + if (!this.checkedZeroWidth && measure.clientHeight > 0) { + if (sWidth == 0) { this.zeroWidthHack() } + this.checkedZeroWidth = true + } + + return {right: needsV ? sWidth : 0, bottom: needsH ? sWidth : 0} +}; + +NativeScrollbars.prototype.setScrollLeft = function (pos) { + if (this.horiz.scrollLeft != pos) { this.horiz.scrollLeft = pos } + if (this.disableHoriz) { this.enableZeroWidthBar(this.horiz, this.disableHoriz, "horiz") } +}; + +NativeScrollbars.prototype.setScrollTop = function (pos) { + if (this.vert.scrollTop != pos) { this.vert.scrollTop = pos } + if (this.disableVert) { this.enableZeroWidthBar(this.vert, this.disableVert, "vert") } +}; + +NativeScrollbars.prototype.zeroWidthHack = function () { + var w = mac && !mac_geMountainLion ? "12px" : "18px" + this.horiz.style.height = this.vert.style.width = w + this.horiz.style.pointerEvents = this.vert.style.pointerEvents = "none" + this.disableHoriz = new Delayed + this.disableVert = new Delayed +}; + +NativeScrollbars.prototype.enableZeroWidthBar = function (bar, delay, type) { + bar.style.pointerEvents = "auto" + function maybeDisable() { + // To find out whether the scrollbar is still visible, we + // check whether the element under the pixel in the bottom + // right corner of the scrollbar box is the scrollbar box + // itself (when the bar is still visible) or its filler child + // (when the bar is hidden). If it is still visible, we keep + // it enabled, if it's hidden, we disable pointer events. + var box = bar.getBoundingClientRect() + var elt = type == "vert" ? document.elementFromPoint(box.right - 1, (box.top + box.bottom) / 2) + : document.elementFromPoint((box.right + box.left) / 2, box.bottom - 1) + if (elt != bar) { bar.style.pointerEvents = "none" } + else { delay.set(1000, maybeDisable) } + } + delay.set(1000, maybeDisable) +}; + +NativeScrollbars.prototype.clear = function () { + var parent = this.horiz.parentNode + parent.removeChild(this.horiz) + parent.removeChild(this.vert) +}; + +var NullScrollbars = function () {}; + +NullScrollbars.prototype.update = function () { return {bottom: 0, right: 0} }; +NullScrollbars.prototype.setScrollLeft = function () {}; +NullScrollbars.prototype.setScrollTop = function () {}; +NullScrollbars.prototype.clear = function () {}; + +function updateScrollbars(cm, measure) { + if (!measure) { measure = measureForScrollbars(cm) } + var startWidth = cm.display.barWidth, startHeight = cm.display.barHeight + updateScrollbarsInner(cm, measure) + for (var i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) { + if (startWidth != cm.display.barWidth && cm.options.lineWrapping) + { updateHeightsInViewport(cm) } + updateScrollbarsInner(cm, measureForScrollbars(cm)) + startWidth = cm.display.barWidth; startHeight = cm.display.barHeight + } +} + +// Re-synchronize the fake scrollbars with the actual size of the +// content. +function updateScrollbarsInner(cm, measure) { + var d = cm.display + var sizes = d.scrollbars.update(measure) + + d.sizer.style.paddingRight = (d.barWidth = sizes.right) + "px" + d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + "px" + d.heightForcer.style.borderBottom = sizes.bottom + "px solid transparent" + + if (sizes.right && sizes.bottom) { + d.scrollbarFiller.style.display = "block" + d.scrollbarFiller.style.height = sizes.bottom + "px" + d.scrollbarFiller.style.width = sizes.right + "px" + } else { d.scrollbarFiller.style.display = "" } + if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) { + d.gutterFiller.style.display = "block" + d.gutterFiller.style.height = sizes.bottom + "px" + d.gutterFiller.style.width = measure.gutterWidth + "px" + } else { d.gutterFiller.style.display = "" } +} + +var scrollbarModel = {"native": NativeScrollbars, "null": NullScrollbars} + +function initScrollbars(cm) { + if (cm.display.scrollbars) { + cm.display.scrollbars.clear() + if (cm.display.scrollbars.addClass) + { rmClass(cm.display.wrapper, cm.display.scrollbars.addClass) } + } + + cm.display.scrollbars = new scrollbarModel[cm.options.scrollbarStyle](function (node) { + cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller) + // Prevent clicks in the scrollbars from killing focus + on(node, "mousedown", function () { + if (cm.state.focused) { setTimeout(function () { return cm.display.input.focus(); }, 0) } + }) + node.setAttribute("cm-not-content", "true") + }, function (pos, axis) { + if (axis == "horizontal") { setScrollLeft(cm, pos) } + else { updateScrollTop(cm, pos) } + }, cm) + if (cm.display.scrollbars.addClass) + { addClass(cm.display.wrapper, cm.display.scrollbars.addClass) } +} + +// Operations are used to wrap a series of changes to the editor +// state in such a way that each change won't have to update the +// cursor and display (which would be awkward, slow, and +// error-prone). Instead, display updates are batched and then all +// combined and executed at once. + +var nextOpId = 0 +// Start a new operation. +function startOperation(cm) { + cm.curOp = { + cm: cm, + viewChanged: false, // Flag that indicates that lines might need to be redrawn + startHeight: cm.doc.height, // Used to detect need to update scrollbar + forceUpdate: false, // Used to force a redraw + updateInput: null, // Whether to reset the input textarea + typing: false, // Whether this reset should be careful to leave existing text (for compositing) + changeObjs: null, // Accumulated changes, for firing change events + cursorActivityHandlers: null, // Set of handlers to fire cursorActivity on + cursorActivityCalled: 0, // Tracks which cursorActivity handlers have been called already + selectionChanged: false, // Whether the selection needs to be redrawn + updateMaxLine: false, // Set when the widest line needs to be determined anew + scrollLeft: null, scrollTop: null, // Intermediate scroll position, not pushed to DOM yet + scrollToPos: null, // Used to scroll to a specific position + focus: false, + id: ++nextOpId // Unique ID + } + pushOperation(cm.curOp) +} + +// Finish an operation, updating the display and signalling delayed events +function endOperation(cm) { + var op = cm.curOp + finishOperation(op, function (group) { + for (var i = 0; i < group.ops.length; i++) + { group.ops[i].cm.curOp = null } + endOperations(group) + }) +} + +// The DOM updates done when an operation finishes are batched so +// that the minimum number of relayouts are required. +function endOperations(group) { + var ops = group.ops + for (var i = 0; i < ops.length; i++) // Read DOM + { endOperation_R1(ops[i]) } + for (var i$1 = 0; i$1 < ops.length; i$1++) // Write DOM (maybe) + { endOperation_W1(ops[i$1]) } + for (var i$2 = 0; i$2 < ops.length; i$2++) // Read DOM + { endOperation_R2(ops[i$2]) } + for (var i$3 = 0; i$3 < ops.length; i$3++) // Write DOM (maybe) + { endOperation_W2(ops[i$3]) } + for (var i$4 = 0; i$4 < ops.length; i$4++) // Read DOM + { endOperation_finish(ops[i$4]) } +} + +function endOperation_R1(op) { + var cm = op.cm, display = cm.display + maybeClipScrollbars(cm) + if (op.updateMaxLine) { findMaxLine(cm) } + + op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null || + op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom || + op.scrollToPos.to.line >= display.viewTo) || + display.maxLineChanged && cm.options.lineWrapping + op.update = op.mustUpdate && + new DisplayUpdate(cm, op.mustUpdate && {top: op.scrollTop, ensure: op.scrollToPos}, op.forceUpdate) +} + +function endOperation_W1(op) { + op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update) +} + +function endOperation_R2(op) { + var cm = op.cm, display = cm.display + if (op.updatedDisplay) { updateHeightsInViewport(cm) } + + op.barMeasure = measureForScrollbars(cm) + + // If the max line changed since it was last measured, measure it, + // and ensure the document's width matches it. + // updateDisplay_W2 will use these properties to do the actual resizing + if (display.maxLineChanged && !cm.options.lineWrapping) { + op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3 + cm.display.sizerWidth = op.adjustWidthTo + op.barMeasure.scrollWidth = + Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth) + op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm)) + } + + if (op.updatedDisplay || op.selectionChanged) + { op.preparedSelection = display.input.prepareSelection() } +} + +function endOperation_W2(op) { + var cm = op.cm + + if (op.adjustWidthTo != null) { + cm.display.sizer.style.minWidth = op.adjustWidthTo + "px" + if (op.maxScrollLeft < cm.doc.scrollLeft) + { setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true) } + cm.display.maxLineChanged = false + } + + var takeFocus = op.focus && op.focus == activeElt() + if (op.preparedSelection) + { cm.display.input.showSelection(op.preparedSelection, takeFocus) } + if (op.updatedDisplay || op.startHeight != cm.doc.height) + { updateScrollbars(cm, op.barMeasure) } + if (op.updatedDisplay) + { setDocumentHeight(cm, op.barMeasure) } + + if (op.selectionChanged) { restartBlink(cm) } + + if (cm.state.focused && op.updateInput) + { cm.display.input.reset(op.typing) } + if (takeFocus) { ensureFocus(op.cm) } +} + +function endOperation_finish(op) { + var cm = op.cm, display = cm.display, doc = cm.doc + + if (op.updatedDisplay) { postUpdateDisplay(cm, op.update) } + + // Abort mouse wheel delta measurement, when scrolling explicitly + if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos)) + { display.wheelStartX = display.wheelStartY = null } + + // Propagate the scroll position to the actual DOM scroller + if (op.scrollTop != null) { setScrollTop(cm, op.scrollTop, op.forceScroll) } + + if (op.scrollLeft != null) { setScrollLeft(cm, op.scrollLeft, true, true) } + // If we need to scroll a specific position into view, do so. + if (op.scrollToPos) { + var rect = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from), + clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin) + maybeScrollWindow(cm, rect) + } + + // Fire events for markers that are hidden/unidden by editing or + // undoing + var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers + if (hidden) { for (var i = 0; i < hidden.length; ++i) + { if (!hidden[i].lines.length) { signal(hidden[i], "hide") } } } + if (unhidden) { for (var i$1 = 0; i$1 < unhidden.length; ++i$1) + { if (unhidden[i$1].lines.length) { signal(unhidden[i$1], "unhide") } } } + + if (display.wrapper.offsetHeight) + { doc.scrollTop = cm.display.scroller.scrollTop } + + // Fire change events, and delayed event handlers + if (op.changeObjs) + { signal(cm, "changes", cm, op.changeObjs) } + if (op.update) + { op.update.finish() } +} + +// Run the given function in an operation +function runInOp(cm, f) { + if (cm.curOp) { return f() } + startOperation(cm) + try { return f() } + finally { endOperation(cm) } +} +// Wraps a function in an operation. Returns the wrapped function. +function operation(cm, f) { + return function() { + if (cm.curOp) { return f.apply(cm, arguments) } + startOperation(cm) + try { return f.apply(cm, arguments) } + finally { endOperation(cm) } + } +} +// Used to add methods to editor and doc instances, wrapping them in +// operations. +function methodOp(f) { + return function() { + if (this.curOp) { return f.apply(this, arguments) } + startOperation(this) + try { return f.apply(this, arguments) } + finally { endOperation(this) } + } +} +function docMethodOp(f) { + return function() { + var cm = this.cm + if (!cm || cm.curOp) { return f.apply(this, arguments) } + startOperation(cm) + try { return f.apply(this, arguments) } + finally { endOperation(cm) } + } +} + +// Updates the display.view data structure for a given change to the +// document. From and to are in pre-change coordinates. Lendiff is +// the amount of lines added or subtracted by the change. This is +// used for changes that span multiple lines, or change the way +// lines are divided into visual lines. regLineChange (below) +// registers single-line changes. +function regChange(cm, from, to, lendiff) { + if (from == null) { from = cm.doc.first } + if (to == null) { to = cm.doc.first + cm.doc.size } + if (!lendiff) { lendiff = 0 } + + var display = cm.display + if (lendiff && to < display.viewTo && + (display.updateLineNumbers == null || display.updateLineNumbers > from)) + { display.updateLineNumbers = from } + + cm.curOp.viewChanged = true + + if (from >= display.viewTo) { // Change after + if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo) + { resetView(cm) } + } else if (to <= display.viewFrom) { // Change before + if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) { + resetView(cm) + } else { + display.viewFrom += lendiff + display.viewTo += lendiff + } + } else if (from <= display.viewFrom && to >= display.viewTo) { // Full overlap + resetView(cm) + } else if (from <= display.viewFrom) { // Top overlap + var cut = viewCuttingPoint(cm, to, to + lendiff, 1) + if (cut) { + display.view = display.view.slice(cut.index) + display.viewFrom = cut.lineN + display.viewTo += lendiff + } else { + resetView(cm) + } + } else if (to >= display.viewTo) { // Bottom overlap + var cut$1 = viewCuttingPoint(cm, from, from, -1) + if (cut$1) { + display.view = display.view.slice(0, cut$1.index) + display.viewTo = cut$1.lineN + } else { + resetView(cm) + } + } else { // Gap in the middle + var cutTop = viewCuttingPoint(cm, from, from, -1) + var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1) + if (cutTop && cutBot) { + display.view = display.view.slice(0, cutTop.index) + .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN)) + .concat(display.view.slice(cutBot.index)) + display.viewTo += lendiff + } else { + resetView(cm) + } + } + + var ext = display.externalMeasured + if (ext) { + if (to < ext.lineN) + { ext.lineN += lendiff } + else if (from < ext.lineN + ext.size) + { display.externalMeasured = null } + } +} + +// Register a change to a single line. Type must be one of "text", +// "gutter", "class", "widget" +function regLineChange(cm, line, type) { + cm.curOp.viewChanged = true + var display = cm.display, ext = cm.display.externalMeasured + if (ext && line >= ext.lineN && line < ext.lineN + ext.size) + { display.externalMeasured = null } + + if (line < display.viewFrom || line >= display.viewTo) { return } + var lineView = display.view[findViewIndex(cm, line)] + if (lineView.node == null) { return } + var arr = lineView.changes || (lineView.changes = []) + if (indexOf(arr, type) == -1) { arr.push(type) } +} + +// Clear the view. +function resetView(cm) { + cm.display.viewFrom = cm.display.viewTo = cm.doc.first + cm.display.view = [] + cm.display.viewOffset = 0 +} + +function viewCuttingPoint(cm, oldN, newN, dir) { + var index = findViewIndex(cm, oldN), diff, view = cm.display.view + if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size) + { return {index: index, lineN: newN} } + var n = cm.display.viewFrom + for (var i = 0; i < index; i++) + { n += view[i].size } + if (n != oldN) { + if (dir > 0) { + if (index == view.length - 1) { return null } + diff = (n + view[index].size) - oldN + index++ + } else { + diff = n - oldN + } + oldN += diff; newN += diff + } + while (visualLineNo(cm.doc, newN) != newN) { + if (index == (dir < 0 ? 0 : view.length - 1)) { return null } + newN += dir * view[index - (dir < 0 ? 1 : 0)].size + index += dir + } + return {index: index, lineN: newN} +} + +// Force the view to cover a given range, adding empty view element +// or clipping off existing ones as needed. +function adjustView(cm, from, to) { + var display = cm.display, view = display.view + if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) { + display.view = buildViewArray(cm, from, to) + display.viewFrom = from + } else { + if (display.viewFrom > from) + { display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view) } + else if (display.viewFrom < from) + { display.view = display.view.slice(findViewIndex(cm, from)) } + display.viewFrom = from + if (display.viewTo < to) + { display.view = display.view.concat(buildViewArray(cm, display.viewTo, to)) } + else if (display.viewTo > to) + { display.view = display.view.slice(0, findViewIndex(cm, to)) } + } + display.viewTo = to +} + +// Count the number of lines in the view whose DOM representation is +// out of date (or nonexistent). +function countDirtyView(cm) { + var view = cm.display.view, dirty = 0 + for (var i = 0; i < view.length; i++) { + var lineView = view[i] + if (!lineView.hidden && (!lineView.node || lineView.changes)) { ++dirty } + } + return dirty +} + +// HIGHLIGHT WORKER + +function startWorker(cm, time) { + if (cm.doc.highlightFrontier < cm.display.viewTo) + { cm.state.highlight.set(time, bind(highlightWorker, cm)) } +} + +function highlightWorker(cm) { + var doc = cm.doc + if (doc.highlightFrontier >= cm.display.viewTo) { return } + var end = +new Date + cm.options.workTime + var context = getContextBefore(cm, doc.highlightFrontier) + var changedLines = [] + + doc.iter(context.line, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function (line) { + if (context.line >= cm.display.viewFrom) { // Visible + var oldStyles = line.styles + var resetState = line.text.length > cm.options.maxHighlightLength ? copyState(doc.mode, context.state) : null + var highlighted = highlightLine(cm, line, context, true) + if (resetState) { context.state = resetState } + line.styles = highlighted.styles + var oldCls = line.styleClasses, newCls = highlighted.classes + if (newCls) { line.styleClasses = newCls } + else if (oldCls) { line.styleClasses = null } + var ischange = !oldStyles || oldStyles.length != line.styles.length || + oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass) + for (var i = 0; !ischange && i < oldStyles.length; ++i) { ischange = oldStyles[i] != line.styles[i] } + if (ischange) { changedLines.push(context.line) } + line.stateAfter = context.save() + context.nextLine() + } else { + if (line.text.length <= cm.options.maxHighlightLength) + { processLine(cm, line.text, context) } + line.stateAfter = context.line % 5 == 0 ? context.save() : null + context.nextLine() + } + if (+new Date > end) { + startWorker(cm, cm.options.workDelay) + return true + } + }) + doc.highlightFrontier = context.line + doc.modeFrontier = Math.max(doc.modeFrontier, context.line) + if (changedLines.length) { runInOp(cm, function () { + for (var i = 0; i < changedLines.length; i++) + { regLineChange(cm, changedLines[i], "text") } + }) } +} + +// DISPLAY DRAWING + +var DisplayUpdate = function(cm, viewport, force) { + var display = cm.display + + this.viewport = viewport + // Store some values that we'll need later (but don't want to force a relayout for) + this.visible = visibleLines(display, cm.doc, viewport) + this.editorIsHidden = !display.wrapper.offsetWidth + this.wrapperHeight = display.wrapper.clientHeight + this.wrapperWidth = display.wrapper.clientWidth + this.oldDisplayWidth = displayWidth(cm) + this.force = force + this.dims = getDimensions(cm) + this.events = [] +}; + +DisplayUpdate.prototype.signal = function (emitter, type) { + if (hasHandler(emitter, type)) + { this.events.push(arguments) } +}; +DisplayUpdate.prototype.finish = function () { + var this$1 = this; + + for (var i = 0; i < this.events.length; i++) + { signal.apply(null, this$1.events[i]) } +}; + +function maybeClipScrollbars(cm) { + var display = cm.display + if (!display.scrollbarsClipped && display.scroller.offsetWidth) { + display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth + display.heightForcer.style.height = scrollGap(cm) + "px" + display.sizer.style.marginBottom = -display.nativeBarWidth + "px" + display.sizer.style.borderRightWidth = scrollGap(cm) + "px" + display.scrollbarsClipped = true + } +} + +function selectionSnapshot(cm) { + if (cm.hasFocus()) { return null } + var active = activeElt() + if (!active || !contains(cm.display.lineDiv, active)) { return null } + var result = {activeElt: active} + if (window.getSelection) { + var sel = window.getSelection() + if (sel.anchorNode && sel.extend && contains(cm.display.lineDiv, sel.anchorNode)) { + result.anchorNode = sel.anchorNode + result.anchorOffset = sel.anchorOffset + result.focusNode = sel.focusNode + result.focusOffset = sel.focusOffset + } + } + return result +} + +function restoreSelection(snapshot) { + if (!snapshot || !snapshot.activeElt || snapshot.activeElt == activeElt()) { return } + snapshot.activeElt.focus() + if (snapshot.anchorNode && contains(document.body, snapshot.anchorNode) && contains(document.body, snapshot.focusNode)) { + var sel = window.getSelection(), range = document.createRange() + range.setEnd(snapshot.anchorNode, snapshot.anchorOffset) + range.collapse(false) + sel.removeAllRanges() + sel.addRange(range) + sel.extend(snapshot.focusNode, snapshot.focusOffset) + } +} + +// Does the actual updating of the line display. Bails out +// (returning false) when there is nothing to be done and forced is +// false. +function updateDisplayIfNeeded(cm, update) { + var display = cm.display, doc = cm.doc + + if (update.editorIsHidden) { + resetView(cm) + return false + } + + // Bail out if the visible area is already rendered and nothing changed. + if (!update.force && + update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo && + (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) && + display.renderedView == display.view && countDirtyView(cm) == 0) + { return false } + + if (maybeUpdateLineNumberWidth(cm)) { + resetView(cm) + update.dims = getDimensions(cm) + } + + // Compute a suitable new viewport (from & to) + var end = doc.first + doc.size + var from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first) + var to = Math.min(end, update.visible.to + cm.options.viewportMargin) + if (display.viewFrom < from && from - display.viewFrom < 20) { from = Math.max(doc.first, display.viewFrom) } + if (display.viewTo > to && display.viewTo - to < 20) { to = Math.min(end, display.viewTo) } + if (sawCollapsedSpans) { + from = visualLineNo(cm.doc, from) + to = visualLineEndNo(cm.doc, to) + } + + var different = from != display.viewFrom || to != display.viewTo || + display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth + adjustView(cm, from, to) + + display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom)) + // Position the mover div to align with the current scroll position + cm.display.mover.style.top = display.viewOffset + "px" + + var toUpdate = countDirtyView(cm) + if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view && + (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo)) + { return false } + + // For big changes, we hide the enclosing element during the + // update, since that speeds up the operations on most browsers. + var selSnapshot = selectionSnapshot(cm) + if (toUpdate > 4) { display.lineDiv.style.display = "none" } + patchDisplay(cm, display.updateLineNumbers, update.dims) + if (toUpdate > 4) { display.lineDiv.style.display = "" } + display.renderedView = display.view + // There might have been a widget with a focused element that got + // hidden or updated, if so re-focus it. + restoreSelection(selSnapshot) + + // Prevent selection and cursors from interfering with the scroll + // width and height. + removeChildren(display.cursorDiv) + removeChildren(display.selectionDiv) + display.gutters.style.height = display.sizer.style.minHeight = 0 + + if (different) { + display.lastWrapHeight = update.wrapperHeight + display.lastWrapWidth = update.wrapperWidth + startWorker(cm, 400) + } + + display.updateLineNumbers = null + + return true +} + +function postUpdateDisplay(cm, update) { + var viewport = update.viewport + + for (var first = true;; first = false) { + if (!first || !cm.options.lineWrapping || update.oldDisplayWidth == displayWidth(cm)) { + // Clip forced viewport to actual scrollable area. + if (viewport && viewport.top != null) + { viewport = {top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top)} } + // Updated line heights might result in the drawn area not + // actually covering the viewport. Keep looping until it does. + update.visible = visibleLines(cm.display, cm.doc, viewport) + if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo) + { break } + } + if (!updateDisplayIfNeeded(cm, update)) { break } + updateHeightsInViewport(cm) + var barMeasure = measureForScrollbars(cm) + updateSelection(cm) + updateScrollbars(cm, barMeasure) + setDocumentHeight(cm, barMeasure) + update.force = false + } + + update.signal(cm, "update", cm) + if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) { + update.signal(cm, "viewportChange", cm, cm.display.viewFrom, cm.display.viewTo) + cm.display.reportedViewFrom = cm.display.viewFrom; cm.display.reportedViewTo = cm.display.viewTo + } +} + +function updateDisplaySimple(cm, viewport) { + var update = new DisplayUpdate(cm, viewport) + if (updateDisplayIfNeeded(cm, update)) { + updateHeightsInViewport(cm) + postUpdateDisplay(cm, update) + var barMeasure = measureForScrollbars(cm) + updateSelection(cm) + updateScrollbars(cm, barMeasure) + setDocumentHeight(cm, barMeasure) + update.finish() + } +} + +// Sync the actual display DOM structure with display.view, removing +// nodes for lines that are no longer in view, and creating the ones +// that are not there yet, and updating the ones that are out of +// date. +function patchDisplay(cm, updateNumbersFrom, dims) { + var display = cm.display, lineNumbers = cm.options.lineNumbers + var container = display.lineDiv, cur = container.firstChild + + function rm(node) { + var next = node.nextSibling + // Works around a throw-scroll bug in OS X Webkit + if (webkit && mac && cm.display.currentWheelTarget == node) + { node.style.display = "none" } + else + { node.parentNode.removeChild(node) } + return next + } + + var view = display.view, lineN = display.viewFrom + // Loop over the elements in the view, syncing cur (the DOM nodes + // in display.lineDiv) with the view as we go. + for (var i = 0; i < view.length; i++) { + var lineView = view[i] + if (lineView.hidden) { + } else if (!lineView.node || lineView.node.parentNode != container) { // Not drawn yet + var node = buildLineElement(cm, lineView, lineN, dims) + container.insertBefore(node, cur) + } else { // Already drawn + while (cur != lineView.node) { cur = rm(cur) } + var updateNumber = lineNumbers && updateNumbersFrom != null && + updateNumbersFrom <= lineN && lineView.lineNumber + if (lineView.changes) { + if (indexOf(lineView.changes, "gutter") > -1) { updateNumber = false } + updateLineForChanges(cm, lineView, lineN, dims) + } + if (updateNumber) { + removeChildren(lineView.lineNumber) + lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN))) + } + cur = lineView.node.nextSibling + } + lineN += lineView.size + } + while (cur) { cur = rm(cur) } +} + +function updateGutterSpace(cm) { + var width = cm.display.gutters.offsetWidth + cm.display.sizer.style.marginLeft = width + "px" +} + +function setDocumentHeight(cm, measure) { + cm.display.sizer.style.minHeight = measure.docHeight + "px" + cm.display.heightForcer.style.top = measure.docHeight + "px" + cm.display.gutters.style.height = (measure.docHeight + cm.display.barHeight + scrollGap(cm)) + "px" +} + +// Rebuild the gutter elements, ensure the margin to the left of the +// code matches their width. +function updateGutters(cm) { + var gutters = cm.display.gutters, specs = cm.options.gutters + removeChildren(gutters) + var i = 0 + for (; i < specs.length; ++i) { + var gutterClass = specs[i] + var gElt = gutters.appendChild(elt("div", null, "CodeMirror-gutter " + gutterClass)) + if (gutterClass == "CodeMirror-linenumbers") { + cm.display.lineGutter = gElt + gElt.style.width = (cm.display.lineNumWidth || 1) + "px" + } + } + gutters.style.display = i ? "" : "none" + updateGutterSpace(cm) +} + +// Make sure the gutters options contains the element +// "CodeMirror-linenumbers" when the lineNumbers option is true. +function setGuttersForLineNumbers(options) { + var found = indexOf(options.gutters, "CodeMirror-linenumbers") + if (found == -1 && options.lineNumbers) { + options.gutters = options.gutters.concat(["CodeMirror-linenumbers"]) + } else if (found > -1 && !options.lineNumbers) { + options.gutters = options.gutters.slice(0) + options.gutters.splice(found, 1) + } +} + +var wheelSamples = 0; +var wheelPixelsPerUnit = null; +// Fill in a browser-detected starting value on browsers where we +// know one. These don't have to be accurate -- the result of them +// being wrong would just be a slight flicker on the first wheel +// scroll (if it is large enough). +if (ie) { wheelPixelsPerUnit = -.53 } +else if (gecko) { wheelPixelsPerUnit = 15 } +else if (chrome) { wheelPixelsPerUnit = -.7 } +else if (safari) { wheelPixelsPerUnit = -1/3 } + +function wheelEventDelta(e) { + var dx = e.wheelDeltaX, dy = e.wheelDeltaY + if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) { dx = e.detail } + if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) { dy = e.detail } + else if (dy == null) { dy = e.wheelDelta } + return {x: dx, y: dy} +} +function wheelEventPixels(e) { + var delta = wheelEventDelta(e) + delta.x *= wheelPixelsPerUnit + delta.y *= wheelPixelsPerUnit + return delta +} + +function onScrollWheel(cm, e) { + var delta = wheelEventDelta(e), dx = delta.x, dy = delta.y + + var display = cm.display, scroll = display.scroller + // Quit if there's nothing to scroll here + var canScrollX = scroll.scrollWidth > scroll.clientWidth + var canScrollY = scroll.scrollHeight > scroll.clientHeight + if (!(dx && canScrollX || dy && canScrollY)) { return } + + // Webkit browsers on OS X abort momentum scrolls when the target + // of the scroll event is removed from the scrollable element. + // This hack (see related code in patchDisplay) makes sure the + // element is kept around. + if (dy && mac && webkit) { + outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) { + for (var i = 0; i < view.length; i++) { + if (view[i].node == cur) { + cm.display.currentWheelTarget = cur + break outer + } + } + } + } + + // On some browsers, horizontal scrolling will cause redraws to + // happen before the gutter has been realigned, causing it to + // wriggle around in a most unseemly way. When we have an + // estimated pixels/delta value, we just handle horizontal + // scrolling entirely here. It'll be slightly off from native, but + // better than glitching out. + if (dx && !gecko && !presto && wheelPixelsPerUnit != null) { + if (dy && canScrollY) + { updateScrollTop(cm, Math.max(0, scroll.scrollTop + dy * wheelPixelsPerUnit)) } + setScrollLeft(cm, Math.max(0, scroll.scrollLeft + dx * wheelPixelsPerUnit)) + // Only prevent default scrolling if vertical scrolling is + // actually possible. Otherwise, it causes vertical scroll + // jitter on OSX trackpads when deltaX is small and deltaY + // is large (issue #3579) + if (!dy || (dy && canScrollY)) + { e_preventDefault(e) } + display.wheelStartX = null // Abort measurement, if in progress + return + } + + // 'Project' the visible viewport to cover the area that is being + // scrolled into view (if we know enough to estimate it). + if (dy && wheelPixelsPerUnit != null) { + var pixels = dy * wheelPixelsPerUnit + var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight + if (pixels < 0) { top = Math.max(0, top + pixels - 50) } + else { bot = Math.min(cm.doc.height, bot + pixels + 50) } + updateDisplaySimple(cm, {top: top, bottom: bot}) + } + + if (wheelSamples < 20) { + if (display.wheelStartX == null) { + display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop + display.wheelDX = dx; display.wheelDY = dy + setTimeout(function () { + if (display.wheelStartX == null) { return } + var movedX = scroll.scrollLeft - display.wheelStartX + var movedY = scroll.scrollTop - display.wheelStartY + var sample = (movedY && display.wheelDY && movedY / display.wheelDY) || + (movedX && display.wheelDX && movedX / display.wheelDX) + display.wheelStartX = display.wheelStartY = null + if (!sample) { return } + wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1) + ++wheelSamples + }, 200) + } else { + display.wheelDX += dx; display.wheelDY += dy + } + } +} + +// Selection objects are immutable. A new one is created every time +// the selection changes. A selection is one or more non-overlapping +// (and non-touching) ranges, sorted, and an integer that indicates +// which one is the primary selection (the one that's scrolled into +// view, that getCursor returns, etc). +var Selection = function(ranges, primIndex) { + this.ranges = ranges + this.primIndex = primIndex +}; + +Selection.prototype.primary = function () { return this.ranges[this.primIndex] }; + +Selection.prototype.equals = function (other) { + var this$1 = this; + + if (other == this) { return true } + if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) { return false } + for (var i = 0; i < this.ranges.length; i++) { + var here = this$1.ranges[i], there = other.ranges[i] + if (!equalCursorPos(here.anchor, there.anchor) || !equalCursorPos(here.head, there.head)) { return false } + } + return true +}; + +Selection.prototype.deepCopy = function () { + var this$1 = this; + + var out = [] + for (var i = 0; i < this.ranges.length; i++) + { out[i] = new Range(copyPos(this$1.ranges[i].anchor), copyPos(this$1.ranges[i].head)) } + return new Selection(out, this.primIndex) +}; + +Selection.prototype.somethingSelected = function () { + var this$1 = this; + + for (var i = 0; i < this.ranges.length; i++) + { if (!this$1.ranges[i].empty()) { return true } } + return false +}; + +Selection.prototype.contains = function (pos, end) { + var this$1 = this; + + if (!end) { end = pos } + for (var i = 0; i < this.ranges.length; i++) { + var range = this$1.ranges[i] + if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0) + { return i } + } + return -1 +}; + +var Range = function(anchor, head) { + this.anchor = anchor; this.head = head +}; + +Range.prototype.from = function () { return minPos(this.anchor, this.head) }; +Range.prototype.to = function () { return maxPos(this.anchor, this.head) }; +Range.prototype.empty = function () { return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch }; + +// Take an unsorted, potentially overlapping set of ranges, and +// build a selection out of it. 'Consumes' ranges array (modifying +// it). +function normalizeSelection(ranges, primIndex) { + var prim = ranges[primIndex] + ranges.sort(function (a, b) { return cmp(a.from(), b.from()); }) + primIndex = indexOf(ranges, prim) + for (var i = 1; i < ranges.length; i++) { + var cur = ranges[i], prev = ranges[i - 1] + if (cmp(prev.to(), cur.from()) >= 0) { + var from = minPos(prev.from(), cur.from()), to = maxPos(prev.to(), cur.to()) + var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head + if (i <= primIndex) { --primIndex } + ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to)) + } + } + return new Selection(ranges, primIndex) +} + +function simpleSelection(anchor, head) { + return new Selection([new Range(anchor, head || anchor)], 0) +} + +// Compute the position of the end of a change (its 'to' property +// refers to the pre-change end). +function changeEnd(change) { + if (!change.text) { return change.to } + return Pos(change.from.line + change.text.length - 1, + lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0)) +} + +// Adjust a position to refer to the post-change position of the +// same text, or the end of the change if the change covers it. +function adjustForChange(pos, change) { + if (cmp(pos, change.from) < 0) { return pos } + if (cmp(pos, change.to) <= 0) { return changeEnd(change) } + + var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch + if (pos.line == change.to.line) { ch += changeEnd(change).ch - change.to.ch } + return Pos(line, ch) +} + +function computeSelAfterChange(doc, change) { + var out = [] + for (var i = 0; i < doc.sel.ranges.length; i++) { + var range = doc.sel.ranges[i] + out.push(new Range(adjustForChange(range.anchor, change), + adjustForChange(range.head, change))) + } + return normalizeSelection(out, doc.sel.primIndex) +} + +function offsetPos(pos, old, nw) { + if (pos.line == old.line) + { return Pos(nw.line, pos.ch - old.ch + nw.ch) } + else + { return Pos(nw.line + (pos.line - old.line), pos.ch) } +} + +// Used by replaceSelections to allow moving the selection to the +// start or around the replaced test. Hint may be "start" or "around". +function computeReplacedSel(doc, changes, hint) { + var out = [] + var oldPrev = Pos(doc.first, 0), newPrev = oldPrev + for (var i = 0; i < changes.length; i++) { + var change = changes[i] + var from = offsetPos(change.from, oldPrev, newPrev) + var to = offsetPos(changeEnd(change), oldPrev, newPrev) + oldPrev = change.to + newPrev = to + if (hint == "around") { + var range = doc.sel.ranges[i], inv = cmp(range.head, range.anchor) < 0 + out[i] = new Range(inv ? to : from, inv ? from : to) + } else { + out[i] = new Range(from, from) + } + } + return new Selection(out, doc.sel.primIndex) +} + +// Used to get the editor into a consistent state again when options change. + +function loadMode(cm) { + cm.doc.mode = getMode(cm.options, cm.doc.modeOption) + resetModeState(cm) +} + +function resetModeState(cm) { + cm.doc.iter(function (line) { + if (line.stateAfter) { line.stateAfter = null } + if (line.styles) { line.styles = null } + }) + cm.doc.modeFrontier = cm.doc.highlightFrontier = cm.doc.first + startWorker(cm, 100) + cm.state.modeGen++ + if (cm.curOp) { regChange(cm) } +} + +// DOCUMENT DATA STRUCTURE + +// By default, updates that start and end at the beginning of a line +// are treated specially, in order to make the association of line +// widgets and marker elements with the text behave more intuitive. +function isWholeLineUpdate(doc, change) { + return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == "" && + (!doc.cm || doc.cm.options.wholeLineUpdateBefore) +} + +// Perform a change on the document data structure. +function updateDoc(doc, change, markedSpans, estimateHeight) { + function spansFor(n) {return markedSpans ? markedSpans[n] : null} + function update(line, text, spans) { + updateLine(line, text, spans, estimateHeight) + signalLater(line, "change", line, change) + } + function linesFor(start, end) { + var result = [] + for (var i = start; i < end; ++i) + { result.push(new Line(text[i], spansFor(i), estimateHeight)) } + return result + } + + var from = change.from, to = change.to, text = change.text + var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line) + var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line + + // Adjust the line structure + if (change.full) { + doc.insert(0, linesFor(0, text.length)) + doc.remove(text.length, doc.size - text.length) + } else if (isWholeLineUpdate(doc, change)) { + // This is a whole-line replace. Treated specially to make + // sure line objects move the way they are supposed to. + var added = linesFor(0, text.length - 1) + update(lastLine, lastLine.text, lastSpans) + if (nlines) { doc.remove(from.line, nlines) } + if (added.length) { doc.insert(from.line, added) } + } else if (firstLine == lastLine) { + if (text.length == 1) { + update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans) + } else { + var added$1 = linesFor(1, text.length - 1) + added$1.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight)) + update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0)) + doc.insert(from.line + 1, added$1) + } + } else if (text.length == 1) { + update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0)) + doc.remove(from.line + 1, nlines) + } else { + update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0)) + update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans) + var added$2 = linesFor(1, text.length - 1) + if (nlines > 1) { doc.remove(from.line + 1, nlines - 1) } + doc.insert(from.line + 1, added$2) + } + + signalLater(doc, "change", doc, change) +} + +// Call f for all linked documents. +function linkedDocs(doc, f, sharedHistOnly) { + function propagate(doc, skip, sharedHist) { + if (doc.linked) { for (var i = 0; i < doc.linked.length; ++i) { + var rel = doc.linked[i] + if (rel.doc == skip) { continue } + var shared = sharedHist && rel.sharedHist + if (sharedHistOnly && !shared) { continue } + f(rel.doc, shared) + propagate(rel.doc, doc, shared) + } } + } + propagate(doc, null, true) +} + +// Attach a document to an editor. +function attachDoc(cm, doc) { + if (doc.cm) { throw new Error("This document is already in use.") } + cm.doc = doc + doc.cm = cm + estimateLineHeights(cm) + loadMode(cm) + setDirectionClass(cm) + if (!cm.options.lineWrapping) { findMaxLine(cm) } + cm.options.mode = doc.modeOption + regChange(cm) +} + +function setDirectionClass(cm) { + ;(cm.doc.direction == "rtl" ? addClass : rmClass)(cm.display.lineDiv, "CodeMirror-rtl") +} + +function directionChanged(cm) { + runInOp(cm, function () { + setDirectionClass(cm) + regChange(cm) + }) +} + +function History(startGen) { + // Arrays of change events and selections. Doing something adds an + // event to done and clears undo. Undoing moves events from done + // to undone, redoing moves them in the other direction. + this.done = []; this.undone = [] + this.undoDepth = Infinity + // Used to track when changes can be merged into a single undo + // event + this.lastModTime = this.lastSelTime = 0 + this.lastOp = this.lastSelOp = null + this.lastOrigin = this.lastSelOrigin = null + // Used by the isClean() method + this.generation = this.maxGeneration = startGen || 1 +} + +// Create a history change event from an updateDoc-style change +// object. +function historyChangeFromChange(doc, change) { + var histChange = {from: copyPos(change.from), to: changeEnd(change), text: getBetween(doc, change.from, change.to)} + attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1) + linkedDocs(doc, function (doc) { return attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); }, true) + return histChange +} + +// Pop all selection events off the end of a history array. Stop at +// a change event. +function clearSelectionEvents(array) { + while (array.length) { + var last = lst(array) + if (last.ranges) { array.pop() } + else { break } + } +} + +// Find the top change event in the history. Pop off selection +// events that are in the way. +function lastChangeEvent(hist, force) { + if (force) { + clearSelectionEvents(hist.done) + return lst(hist.done) + } else if (hist.done.length && !lst(hist.done).ranges) { + return lst(hist.done) + } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) { + hist.done.pop() + return lst(hist.done) + } +} + +// Register a change in the history. Merges changes that are within +// a single operation, or are close together with an origin that +// allows merging (starting with "+") into a single event. +function addChangeToHistory(doc, change, selAfter, opId) { + var hist = doc.history + hist.undone.length = 0 + var time = +new Date, cur + var last + + if ((hist.lastOp == opId || + hist.lastOrigin == change.origin && change.origin && + ((change.origin.charAt(0) == "+" && hist.lastModTime > time - (doc.cm ? doc.cm.options.historyEventDelay : 500)) || + change.origin.charAt(0) == "*")) && + (cur = lastChangeEvent(hist, hist.lastOp == opId))) { + // Merge this change into the last event + last = lst(cur.changes) + if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) { + // Optimized case for simple insertion -- don't want to add + // new changesets for every character typed + last.to = changeEnd(change) + } else { + // Add new sub-event + cur.changes.push(historyChangeFromChange(doc, change)) + } + } else { + // Can not be merged, start a new event. + var before = lst(hist.done) + if (!before || !before.ranges) + { pushSelectionToHistory(doc.sel, hist.done) } + cur = {changes: [historyChangeFromChange(doc, change)], + generation: hist.generation} + hist.done.push(cur) + while (hist.done.length > hist.undoDepth) { + hist.done.shift() + if (!hist.done[0].ranges) { hist.done.shift() } + } + } + hist.done.push(selAfter) + hist.generation = ++hist.maxGeneration + hist.lastModTime = hist.lastSelTime = time + hist.lastOp = hist.lastSelOp = opId + hist.lastOrigin = hist.lastSelOrigin = change.origin + + if (!last) { signal(doc, "historyAdded") } +} + +function selectionEventCanBeMerged(doc, origin, prev, sel) { + var ch = origin.charAt(0) + return ch == "*" || + ch == "+" && + prev.ranges.length == sel.ranges.length && + prev.somethingSelected() == sel.somethingSelected() && + new Date - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500) +} + +// Called whenever the selection changes, sets the new selection as +// the pending selection in the history, and pushes the old pending +// selection into the 'done' array when it was significantly +// different (in number of selected ranges, emptiness, or time). +function addSelectionToHistory(doc, sel, opId, options) { + var hist = doc.history, origin = options && options.origin + + // A new event is started when the previous origin does not match + // the current, or the origins don't allow matching. Origins + // starting with * are always merged, those starting with + are + // merged when similar and close together in time. + if (opId == hist.lastSelOp || + (origin && hist.lastSelOrigin == origin && + (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin || + selectionEventCanBeMerged(doc, origin, lst(hist.done), sel)))) + { hist.done[hist.done.length - 1] = sel } + else + { pushSelectionToHistory(sel, hist.done) } + + hist.lastSelTime = +new Date + hist.lastSelOrigin = origin + hist.lastSelOp = opId + if (options && options.clearRedo !== false) + { clearSelectionEvents(hist.undone) } +} + +function pushSelectionToHistory(sel, dest) { + var top = lst(dest) + if (!(top && top.ranges && top.equals(sel))) + { dest.push(sel) } +} + +// Used to store marked span information in the history. +function attachLocalSpans(doc, change, from, to) { + var existing = change["spans_" + doc.id], n = 0 + doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function (line) { + if (line.markedSpans) + { (existing || (existing = change["spans_" + doc.id] = {}))[n] = line.markedSpans } + ++n + }) +} + +// When un/re-doing restores text containing marked spans, those +// that have been explicitly cleared should not be restored. +function removeClearedSpans(spans) { + if (!spans) { return null } + var out + for (var i = 0; i < spans.length; ++i) { + if (spans[i].marker.explicitlyCleared) { if (!out) { out = spans.slice(0, i) } } + else if (out) { out.push(spans[i]) } + } + return !out ? spans : out.length ? out : null +} + +// Retrieve and filter the old marked spans stored in a change event. +function getOldSpans(doc, change) { + var found = change["spans_" + doc.id] + if (!found) { return null } + var nw = [] + for (var i = 0; i < change.text.length; ++i) + { nw.push(removeClearedSpans(found[i])) } + return nw +} + +// Used for un/re-doing changes from the history. Combines the +// result of computing the existing spans with the set of spans that +// existed in the history (so that deleting around a span and then +// undoing brings back the span). +function mergeOldSpans(doc, change) { + var old = getOldSpans(doc, change) + var stretched = stretchSpansOverChange(doc, change) + if (!old) { return stretched } + if (!stretched) { return old } + + for (var i = 0; i < old.length; ++i) { + var oldCur = old[i], stretchCur = stretched[i] + if (oldCur && stretchCur) { + spans: for (var j = 0; j < stretchCur.length; ++j) { + var span = stretchCur[j] + for (var k = 0; k < oldCur.length; ++k) + { if (oldCur[k].marker == span.marker) { continue spans } } + oldCur.push(span) + } + } else if (stretchCur) { + old[i] = stretchCur + } + } + return old +} + +// Used both to provide a JSON-safe object in .getHistory, and, when +// detaching a document, to split the history in two +function copyHistoryArray(events, newGroup, instantiateSel) { + var copy = [] + for (var i = 0; i < events.length; ++i) { + var event = events[i] + if (event.ranges) { + copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event) + continue + } + var changes = event.changes, newChanges = [] + copy.push({changes: newChanges}) + for (var j = 0; j < changes.length; ++j) { + var change = changes[j], m = (void 0) + newChanges.push({from: change.from, to: change.to, text: change.text}) + if (newGroup) { for (var prop in change) { if (m = prop.match(/^spans_(\d+)$/)) { + if (indexOf(newGroup, Number(m[1])) > -1) { + lst(newChanges)[prop] = change[prop] + delete change[prop] + } + } } } + } + } + return copy +} + +// The 'scroll' parameter given to many of these indicated whether +// the new cursor position should be scrolled into view after +// modifying the selection. + +// If shift is held or the extend flag is set, extends a range to +// include a given position (and optionally a second position). +// Otherwise, simply returns the range between the given positions. +// Used for cursor motion and such. +function extendRange(range, head, other, extend) { + if (extend) { + var anchor = range.anchor + if (other) { + var posBefore = cmp(head, anchor) < 0 + if (posBefore != (cmp(other, anchor) < 0)) { + anchor = head + head = other + } else if (posBefore != (cmp(head, other) < 0)) { + head = other + } + } + return new Range(anchor, head) + } else { + return new Range(other || head, head) + } +} + +// Extend the primary selection range, discard the rest. +function extendSelection(doc, head, other, options, extend) { + if (extend == null) { extend = doc.cm && (doc.cm.display.shift || doc.extend) } + setSelection(doc, new Selection([extendRange(doc.sel.primary(), head, other, extend)], 0), options) +} + +// Extend all selections (pos is an array of selections with length +// equal the number of selections) +function extendSelections(doc, heads, options) { + var out = [] + var extend = doc.cm && (doc.cm.display.shift || doc.extend) + for (var i = 0; i < doc.sel.ranges.length; i++) + { out[i] = extendRange(doc.sel.ranges[i], heads[i], null, extend) } + var newSel = normalizeSelection(out, doc.sel.primIndex) + setSelection(doc, newSel, options) +} + +// Updates a single range in the selection. +function replaceOneSelection(doc, i, range, options) { + var ranges = doc.sel.ranges.slice(0) + ranges[i] = range + setSelection(doc, normalizeSelection(ranges, doc.sel.primIndex), options) +} + +// Reset the selection to a single range. +function setSimpleSelection(doc, anchor, head, options) { + setSelection(doc, simpleSelection(anchor, head), options) +} + +// Give beforeSelectionChange handlers a change to influence a +// selection update. +function filterSelectionChange(doc, sel, options) { + var obj = { + ranges: sel.ranges, + update: function(ranges) { + var this$1 = this; + + this.ranges = [] + for (var i = 0; i < ranges.length; i++) + { this$1.ranges[i] = new Range(clipPos(doc, ranges[i].anchor), + clipPos(doc, ranges[i].head)) } + }, + origin: options && options.origin + } + signal(doc, "beforeSelectionChange", doc, obj) + if (doc.cm) { signal(doc.cm, "beforeSelectionChange", doc.cm, obj) } + if (obj.ranges != sel.ranges) { return normalizeSelection(obj.ranges, obj.ranges.length - 1) } + else { return sel } +} + +function setSelectionReplaceHistory(doc, sel, options) { + var done = doc.history.done, last = lst(done) + if (last && last.ranges) { + done[done.length - 1] = sel + setSelectionNoUndo(doc, sel, options) + } else { + setSelection(doc, sel, options) + } +} + +// Set a new selection. +function setSelection(doc, sel, options) { + setSelectionNoUndo(doc, sel, options) + addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options) +} + +function setSelectionNoUndo(doc, sel, options) { + if (hasHandler(doc, "beforeSelectionChange") || doc.cm && hasHandler(doc.cm, "beforeSelectionChange")) + { sel = filterSelectionChange(doc, sel, options) } + + var bias = options && options.bias || + (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1) + setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true)) + + if (!(options && options.scroll === false) && doc.cm) + { ensureCursorVisible(doc.cm) } +} + +function setSelectionInner(doc, sel) { + if (sel.equals(doc.sel)) { return } + + doc.sel = sel + + if (doc.cm) { + doc.cm.curOp.updateInput = doc.cm.curOp.selectionChanged = true + signalCursorActivity(doc.cm) + } + signalLater(doc, "cursorActivity", doc) +} + +// Verify that the selection does not partially select any atomic +// marked ranges. +function reCheckSelection(doc) { + setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false)) +} + +// Return a selection that does not partially select any atomic +// ranges. +function skipAtomicInSelection(doc, sel, bias, mayClear) { + var out + for (var i = 0; i < sel.ranges.length; i++) { + var range = sel.ranges[i] + var old = sel.ranges.length == doc.sel.ranges.length && doc.sel.ranges[i] + var newAnchor = skipAtomic(doc, range.anchor, old && old.anchor, bias, mayClear) + var newHead = skipAtomic(doc, range.head, old && old.head, bias, mayClear) + if (out || newAnchor != range.anchor || newHead != range.head) { + if (!out) { out = sel.ranges.slice(0, i) } + out[i] = new Range(newAnchor, newHead) + } + } + return out ? normalizeSelection(out, sel.primIndex) : sel +} + +function skipAtomicInner(doc, pos, oldPos, dir, mayClear) { + var line = getLine(doc, pos.line) + if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) { + var sp = line.markedSpans[i], m = sp.marker + if ((sp.from == null || (m.inclusiveLeft ? sp.from <= pos.ch : sp.from < pos.ch)) && + (sp.to == null || (m.inclusiveRight ? sp.to >= pos.ch : sp.to > pos.ch))) { + if (mayClear) { + signal(m, "beforeCursorEnter") + if (m.explicitlyCleared) { + if (!line.markedSpans) { break } + else {--i; continue} + } + } + if (!m.atomic) { continue } + + if (oldPos) { + var near = m.find(dir < 0 ? 1 : -1), diff = (void 0) + if (dir < 0 ? m.inclusiveRight : m.inclusiveLeft) + { near = movePos(doc, near, -dir, near && near.line == pos.line ? line : null) } + if (near && near.line == pos.line && (diff = cmp(near, oldPos)) && (dir < 0 ? diff < 0 : diff > 0)) + { return skipAtomicInner(doc, near, pos, dir, mayClear) } + } + + var far = m.find(dir < 0 ? -1 : 1) + if (dir < 0 ? m.inclusiveLeft : m.inclusiveRight) + { far = movePos(doc, far, dir, far.line == pos.line ? line : null) } + return far ? skipAtomicInner(doc, far, pos, dir, mayClear) : null + } + } } + return pos +} + +// Ensure a given position is not inside an atomic range. +function skipAtomic(doc, pos, oldPos, bias, mayClear) { + var dir = bias || 1 + var found = skipAtomicInner(doc, pos, oldPos, dir, mayClear) || + (!mayClear && skipAtomicInner(doc, pos, oldPos, dir, true)) || + skipAtomicInner(doc, pos, oldPos, -dir, mayClear) || + (!mayClear && skipAtomicInner(doc, pos, oldPos, -dir, true)) + if (!found) { + doc.cantEdit = true + return Pos(doc.first, 0) + } + return found +} + +function movePos(doc, pos, dir, line) { + if (dir < 0 && pos.ch == 0) { + if (pos.line > doc.first) { return clipPos(doc, Pos(pos.line - 1)) } + else { return null } + } else if (dir > 0 && pos.ch == (line || getLine(doc, pos.line)).text.length) { + if (pos.line < doc.first + doc.size - 1) { return Pos(pos.line + 1, 0) } + else { return null } + } else { + return new Pos(pos.line, pos.ch + dir) + } +} + +function selectAll(cm) { + cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll) +} + +// UPDATING + +// Allow "beforeChange" event handlers to influence a change +function filterChange(doc, change, update) { + var obj = { + canceled: false, + from: change.from, + to: change.to, + text: change.text, + origin: change.origin, + cancel: function () { return obj.canceled = true; } + } + if (update) { obj.update = function (from, to, text, origin) { + if (from) { obj.from = clipPos(doc, from) } + if (to) { obj.to = clipPos(doc, to) } + if (text) { obj.text = text } + if (origin !== undefined) { obj.origin = origin } + } } + signal(doc, "beforeChange", doc, obj) + if (doc.cm) { signal(doc.cm, "beforeChange", doc.cm, obj) } + + if (obj.canceled) { return null } + return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin} +} + +// Apply a change to a document, and add it to the document's +// history, and propagating it to all linked documents. +function makeChange(doc, change, ignoreReadOnly) { + if (doc.cm) { + if (!doc.cm.curOp) { return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly) } + if (doc.cm.state.suppressEdits) { return } + } + + if (hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange")) { + change = filterChange(doc, change, true) + if (!change) { return } + } + + // Possibly split or suppress the update based on the presence + // of read-only spans in its range. + var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to) + if (split) { + for (var i = split.length - 1; i >= 0; --i) + { makeChangeInner(doc, {from: split[i].from, to: split[i].to, text: i ? [""] : change.text, origin: change.origin}) } + } else { + makeChangeInner(doc, change) + } +} + +function makeChangeInner(doc, change) { + if (change.text.length == 1 && change.text[0] == "" && cmp(change.from, change.to) == 0) { return } + var selAfter = computeSelAfterChange(doc, change) + addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN) + + makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change)) + var rebased = [] + + linkedDocs(doc, function (doc, sharedHist) { + if (!sharedHist && indexOf(rebased, doc.history) == -1) { + rebaseHist(doc.history, change) + rebased.push(doc.history) + } + makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change)) + }) +} + +// Revert a change stored in a document's history. +function makeChangeFromHistory(doc, type, allowSelectionOnly) { + var suppress = doc.cm && doc.cm.state.suppressEdits + if (suppress && !allowSelectionOnly) { return } + + var hist = doc.history, event, selAfter = doc.sel + var source = type == "undo" ? hist.done : hist.undone, dest = type == "undo" ? hist.undone : hist.done + + // Verify that there is a useable event (so that ctrl-z won't + // needlessly clear selection events) + var i = 0 + for (; i < source.length; i++) { + event = source[i] + if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges) + { break } + } + if (i == source.length) { return } + hist.lastOrigin = hist.lastSelOrigin = null + + for (;;) { + event = source.pop() + if (event.ranges) { + pushSelectionToHistory(event, dest) + if (allowSelectionOnly && !event.equals(doc.sel)) { + setSelection(doc, event, {clearRedo: false}) + return + } + selAfter = event + } else if (suppress) { + source.push(event) + return + } else { break } + } + + // Build up a reverse change object to add to the opposite history + // stack (redo when undoing, and vice versa). + var antiChanges = [] + pushSelectionToHistory(selAfter, dest) + dest.push({changes: antiChanges, generation: hist.generation}) + hist.generation = event.generation || ++hist.maxGeneration + + var filter = hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange") + + var loop = function ( i ) { + var change = event.changes[i] + change.origin = type + if (filter && !filterChange(doc, change, false)) { + source.length = 0 + return {} + } + + antiChanges.push(historyChangeFromChange(doc, change)) + + var after = i ? computeSelAfterChange(doc, change) : lst(source) + makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change)) + if (!i && doc.cm) { doc.cm.scrollIntoView({from: change.from, to: changeEnd(change)}) } + var rebased = [] + + // Propagate to the linked documents + linkedDocs(doc, function (doc, sharedHist) { + if (!sharedHist && indexOf(rebased, doc.history) == -1) { + rebaseHist(doc.history, change) + rebased.push(doc.history) + } + makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change)) + }) + }; + + for (var i$1 = event.changes.length - 1; i$1 >= 0; --i$1) { + var returned = loop( i$1 ); + + if ( returned ) return returned.v; + } +} + +// Sub-views need their line numbers shifted when text is added +// above or below them in the parent document. +function shiftDoc(doc, distance) { + if (distance == 0) { return } + doc.first += distance + doc.sel = new Selection(map(doc.sel.ranges, function (range) { return new Range( + Pos(range.anchor.line + distance, range.anchor.ch), + Pos(range.head.line + distance, range.head.ch) + ); }), doc.sel.primIndex) + if (doc.cm) { + regChange(doc.cm, doc.first, doc.first - distance, distance) + for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++) + { regLineChange(doc.cm, l, "gutter") } + } +} + +// More lower-level change function, handling only a single document +// (not linked ones). +function makeChangeSingleDoc(doc, change, selAfter, spans) { + if (doc.cm && !doc.cm.curOp) + { return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans) } + + if (change.to.line < doc.first) { + shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line)) + return + } + if (change.from.line > doc.lastLine()) { return } + + // Clip the change to the size of this doc + if (change.from.line < doc.first) { + var shift = change.text.length - 1 - (doc.first - change.from.line) + shiftDoc(doc, shift) + change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch), + text: [lst(change.text)], origin: change.origin} + } + var last = doc.lastLine() + if (change.to.line > last) { + change = {from: change.from, to: Pos(last, getLine(doc, last).text.length), + text: [change.text[0]], origin: change.origin} + } + + change.removed = getBetween(doc, change.from, change.to) + + if (!selAfter) { selAfter = computeSelAfterChange(doc, change) } + if (doc.cm) { makeChangeSingleDocInEditor(doc.cm, change, spans) } + else { updateDoc(doc, change, spans) } + setSelectionNoUndo(doc, selAfter, sel_dontScroll) +} + +// Handle the interaction of a change to a document with the editor +// that this document is part of. +function makeChangeSingleDocInEditor(cm, change, spans) { + var doc = cm.doc, display = cm.display, from = change.from, to = change.to + + var recomputeMaxLength = false, checkWidthStart = from.line + if (!cm.options.lineWrapping) { + checkWidthStart = lineNo(visualLine(getLine(doc, from.line))) + doc.iter(checkWidthStart, to.line + 1, function (line) { + if (line == display.maxLine) { + recomputeMaxLength = true + return true + } + }) + } + + if (doc.sel.contains(change.from, change.to) > -1) + { signalCursorActivity(cm) } + + updateDoc(doc, change, spans, estimateHeight(cm)) + + if (!cm.options.lineWrapping) { + doc.iter(checkWidthStart, from.line + change.text.length, function (line) { + var len = lineLength(line) + if (len > display.maxLineLength) { + display.maxLine = line + display.maxLineLength = len + display.maxLineChanged = true + recomputeMaxLength = false + } + }) + if (recomputeMaxLength) { cm.curOp.updateMaxLine = true } + } + + retreatFrontier(doc, from.line) + startWorker(cm, 400) + + var lendiff = change.text.length - (to.line - from.line) - 1 + // Remember that these lines changed, for updating the display + if (change.full) + { regChange(cm) } + else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change)) + { regLineChange(cm, from.line, "text") } + else + { regChange(cm, from.line, to.line + 1, lendiff) } + + var changesHandler = hasHandler(cm, "changes"), changeHandler = hasHandler(cm, "change") + if (changeHandler || changesHandler) { + var obj = { + from: from, to: to, + text: change.text, + removed: change.removed, + origin: change.origin + } + if (changeHandler) { signalLater(cm, "change", cm, obj) } + if (changesHandler) { (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj) } + } + cm.display.selForContextMenu = null +} + +function replaceRange(doc, code, from, to, origin) { + if (!to) { to = from } + if (cmp(to, from) < 0) { var assign; + (assign = [to, from], from = assign[0], to = assign[1], assign) } + if (typeof code == "string") { code = doc.splitLines(code) } + makeChange(doc, {from: from, to: to, text: code, origin: origin}) +} + +// Rebasing/resetting history to deal with externally-sourced changes + +function rebaseHistSelSingle(pos, from, to, diff) { + if (to < pos.line) { + pos.line += diff + } else if (from < pos.line) { + pos.line = from + pos.ch = 0 + } +} + +// Tries to rebase an array of history events given a change in the +// document. If the change touches the same lines as the event, the +// event, and everything 'behind' it, is discarded. If the change is +// before the event, the event's positions are updated. Uses a +// copy-on-write scheme for the positions, to avoid having to +// reallocate them all on every rebase, but also avoid problems with +// shared position objects being unsafely updated. +function rebaseHistArray(array, from, to, diff) { + for (var i = 0; i < array.length; ++i) { + var sub = array[i], ok = true + if (sub.ranges) { + if (!sub.copied) { sub = array[i] = sub.deepCopy(); sub.copied = true } + for (var j = 0; j < sub.ranges.length; j++) { + rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff) + rebaseHistSelSingle(sub.ranges[j].head, from, to, diff) + } + continue + } + for (var j$1 = 0; j$1 < sub.changes.length; ++j$1) { + var cur = sub.changes[j$1] + if (to < cur.from.line) { + cur.from = Pos(cur.from.line + diff, cur.from.ch) + cur.to = Pos(cur.to.line + diff, cur.to.ch) + } else if (from <= cur.to.line) { + ok = false + break + } + } + if (!ok) { + array.splice(0, i + 1) + i = 0 + } + } +} + +function rebaseHist(hist, change) { + var from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1 + rebaseHistArray(hist.done, from, to, diff) + rebaseHistArray(hist.undone, from, to, diff) +} + +// Utility for applying a change to a line by handle or number, +// returning the number and optionally registering the line as +// changed. +function changeLine(doc, handle, changeType, op) { + var no = handle, line = handle + if (typeof handle == "number") { line = getLine(doc, clipLine(doc, handle)) } + else { no = lineNo(handle) } + if (no == null) { return null } + if (op(line, no) && doc.cm) { regLineChange(doc.cm, no, changeType) } + return line +} + +// The document is represented as a BTree consisting of leaves, with +// chunk of lines in them, and branches, with up to ten leaves or +// other branch nodes below them. The top node is always a branch +// node, and is the document object itself (meaning it has +// additional methods and properties). +// +// All nodes have parent links. The tree is used both to go from +// line numbers to line objects, and to go from objects to numbers. +// It also indexes by height, and is used to convert between height +// and line object, and to find the total height of the document. +// +// See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html + +function LeafChunk(lines) { + var this$1 = this; + + this.lines = lines + this.parent = null + var height = 0 + for (var i = 0; i < lines.length; ++i) { + lines[i].parent = this$1 + height += lines[i].height + } + this.height = height +} + +LeafChunk.prototype = { + chunkSize: function chunkSize() { return this.lines.length }, + + // Remove the n lines at offset 'at'. + removeInner: function removeInner(at, n) { + var this$1 = this; + + for (var i = at, e = at + n; i < e; ++i) { + var line = this$1.lines[i] + this$1.height -= line.height + cleanUpLine(line) + signalLater(line, "delete") + } + this.lines.splice(at, n) + }, + + // Helper used to collapse a small branch into a single leaf. + collapse: function collapse(lines) { + lines.push.apply(lines, this.lines) + }, + + // Insert the given array of lines at offset 'at', count them as + // having the given height. + insertInner: function insertInner(at, lines, height) { + var this$1 = this; + + this.height += height + this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at)) + for (var i = 0; i < lines.length; ++i) { lines[i].parent = this$1 } + }, + + // Used to iterate over a part of the tree. + iterN: function iterN(at, n, op) { + var this$1 = this; + + for (var e = at + n; at < e; ++at) + { if (op(this$1.lines[at])) { return true } } + } +} + +function BranchChunk(children) { + var this$1 = this; + + this.children = children + var size = 0, height = 0 + for (var i = 0; i < children.length; ++i) { + var ch = children[i] + size += ch.chunkSize(); height += ch.height + ch.parent = this$1 + } + this.size = size + this.height = height + this.parent = null +} + +BranchChunk.prototype = { + chunkSize: function chunkSize() { return this.size }, + + removeInner: function removeInner(at, n) { + var this$1 = this; + + this.size -= n + for (var i = 0; i < this.children.length; ++i) { + var child = this$1.children[i], sz = child.chunkSize() + if (at < sz) { + var rm = Math.min(n, sz - at), oldHeight = child.height + child.removeInner(at, rm) + this$1.height -= oldHeight - child.height + if (sz == rm) { this$1.children.splice(i--, 1); child.parent = null } + if ((n -= rm) == 0) { break } + at = 0 + } else { at -= sz } + } + // If the result is smaller than 25 lines, ensure that it is a + // single leaf node. + if (this.size - n < 25 && + (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) { + var lines = [] + this.collapse(lines) + this.children = [new LeafChunk(lines)] + this.children[0].parent = this + } + }, + + collapse: function collapse(lines) { + var this$1 = this; + + for (var i = 0; i < this.children.length; ++i) { this$1.children[i].collapse(lines) } + }, + + insertInner: function insertInner(at, lines, height) { + var this$1 = this; + + this.size += lines.length + this.height += height + for (var i = 0; i < this.children.length; ++i) { + var child = this$1.children[i], sz = child.chunkSize() + if (at <= sz) { + child.insertInner(at, lines, height) + if (child.lines && child.lines.length > 50) { + // To avoid memory thrashing when child.lines is huge (e.g. first view of a large file), it's never spliced. + // Instead, small slices are taken. They're taken in order because sequential memory accesses are fastest. + var remaining = child.lines.length % 25 + 25 + for (var pos = remaining; pos < child.lines.length;) { + var leaf = new LeafChunk(child.lines.slice(pos, pos += 25)) + child.height -= leaf.height + this$1.children.splice(++i, 0, leaf) + leaf.parent = this$1 + } + child.lines = child.lines.slice(0, remaining) + this$1.maybeSpill() + } + break + } + at -= sz + } + }, + + // When a node has grown, check whether it should be split. + maybeSpill: function maybeSpill() { + if (this.children.length <= 10) { return } + var me = this + do { + var spilled = me.children.splice(me.children.length - 5, 5) + var sibling = new BranchChunk(spilled) + if (!me.parent) { // Become the parent node + var copy = new BranchChunk(me.children) + copy.parent = me + me.children = [copy, sibling] + me = copy + } else { + me.size -= sibling.size + me.height -= sibling.height + var myIndex = indexOf(me.parent.children, me) + me.parent.children.splice(myIndex + 1, 0, sibling) + } + sibling.parent = me.parent + } while (me.children.length > 10) + me.parent.maybeSpill() + }, + + iterN: function iterN(at, n, op) { + var this$1 = this; + + for (var i = 0; i < this.children.length; ++i) { + var child = this$1.children[i], sz = child.chunkSize() + if (at < sz) { + var used = Math.min(n, sz - at) + if (child.iterN(at, used, op)) { return true } + if ((n -= used) == 0) { break } + at = 0 + } else { at -= sz } + } + } +} + +// Line widgets are block elements displayed above or below a line. + +var LineWidget = function(doc, node, options) { + var this$1 = this; + + if (options) { for (var opt in options) { if (options.hasOwnProperty(opt)) + { this$1[opt] = options[opt] } } } + this.doc = doc + this.node = node +}; + +LineWidget.prototype.clear = function () { + var this$1 = this; + + var cm = this.doc.cm, ws = this.line.widgets, line = this.line, no = lineNo(line) + if (no == null || !ws) { return } + for (var i = 0; i < ws.length; ++i) { if (ws[i] == this$1) { ws.splice(i--, 1) } } + if (!ws.length) { line.widgets = null } + var height = widgetHeight(this) + updateLineHeight(line, Math.max(0, line.height - height)) + if (cm) { + runInOp(cm, function () { + adjustScrollWhenAboveVisible(cm, line, -height) + regLineChange(cm, no, "widget") + }) + signalLater(cm, "lineWidgetCleared", cm, this, no) + } +}; + +LineWidget.prototype.changed = function () { + var this$1 = this; + + var oldH = this.height, cm = this.doc.cm, line = this.line + this.height = null + var diff = widgetHeight(this) - oldH + if (!diff) { return } + if (!lineIsHidden(this.doc, line)) { updateLineHeight(line, line.height + diff) } + if (cm) { + runInOp(cm, function () { + cm.curOp.forceUpdate = true + adjustScrollWhenAboveVisible(cm, line, diff) + signalLater(cm, "lineWidgetChanged", cm, this$1, lineNo(line)) + }) + } +}; +eventMixin(LineWidget) + +function adjustScrollWhenAboveVisible(cm, line, diff) { + if (heightAtLine(line) < ((cm.curOp && cm.curOp.scrollTop) || cm.doc.scrollTop)) + { addToScrollTop(cm, diff) } +} + +function addLineWidget(doc, handle, node, options) { + var widget = new LineWidget(doc, node, options) + var cm = doc.cm + if (cm && widget.noHScroll) { cm.display.alignWidgets = true } + changeLine(doc, handle, "widget", function (line) { + var widgets = line.widgets || (line.widgets = []) + if (widget.insertAt == null) { widgets.push(widget) } + else { widgets.splice(Math.min(widgets.length - 1, Math.max(0, widget.insertAt)), 0, widget) } + widget.line = line + if (cm && !lineIsHidden(doc, line)) { + var aboveVisible = heightAtLine(line) < doc.scrollTop + updateLineHeight(line, line.height + widgetHeight(widget)) + if (aboveVisible) { addToScrollTop(cm, widget.height) } + cm.curOp.forceUpdate = true + } + return true + }) + if (cm) { signalLater(cm, "lineWidgetAdded", cm, widget, typeof handle == "number" ? handle : lineNo(handle)) } + return widget +} + +// TEXTMARKERS + +// Created with markText and setBookmark methods. A TextMarker is a +// handle that can be used to clear or find a marked position in the +// document. Line objects hold arrays (markedSpans) containing +// {from, to, marker} object pointing to such marker objects, and +// indicating that such a marker is present on that line. Multiple +// lines may point to the same marker when it spans across lines. +// The spans will have null for their from/to properties when the +// marker continues beyond the start/end of the line. Markers have +// links back to the lines they currently touch. + +// Collapsed markers have unique ids, in order to be able to order +// them, which is needed for uniquely determining an outer marker +// when they overlap (they may nest, but not partially overlap). +var nextMarkerId = 0 + +var TextMarker = function(doc, type) { + this.lines = [] + this.type = type + this.doc = doc + this.id = ++nextMarkerId +}; + +// Clear the marker. +TextMarker.prototype.clear = function () { + var this$1 = this; + + if (this.explicitlyCleared) { return } + var cm = this.doc.cm, withOp = cm && !cm.curOp + if (withOp) { startOperation(cm) } + if (hasHandler(this, "clear")) { + var found = this.find() + if (found) { signalLater(this, "clear", found.from, found.to) } + } + var min = null, max = null + for (var i = 0; i < this.lines.length; ++i) { + var line = this$1.lines[i] + var span = getMarkedSpanFor(line.markedSpans, this$1) + if (cm && !this$1.collapsed) { regLineChange(cm, lineNo(line), "text") } + else if (cm) { + if (span.to != null) { max = lineNo(line) } + if (span.from != null) { min = lineNo(line) } + } + line.markedSpans = removeMarkedSpan(line.markedSpans, span) + if (span.from == null && this$1.collapsed && !lineIsHidden(this$1.doc, line) && cm) + { updateLineHeight(line, textHeight(cm.display)) } + } + if (cm && this.collapsed && !cm.options.lineWrapping) { for (var i$1 = 0; i$1 < this.lines.length; ++i$1) { + var visual = visualLine(this$1.lines[i$1]), len = lineLength(visual) + if (len > cm.display.maxLineLength) { + cm.display.maxLine = visual + cm.display.maxLineLength = len + cm.display.maxLineChanged = true + } + } } + + if (min != null && cm && this.collapsed) { regChange(cm, min, max + 1) } + this.lines.length = 0 + this.explicitlyCleared = true + if (this.atomic && this.doc.cantEdit) { + this.doc.cantEdit = false + if (cm) { reCheckSelection(cm.doc) } + } + if (cm) { signalLater(cm, "markerCleared", cm, this, min, max) } + if (withOp) { endOperation(cm) } + if (this.parent) { this.parent.clear() } +}; + +// Find the position of the marker in the document. Returns a {from, +// to} object by default. Side can be passed to get a specific side +// -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the +// Pos objects returned contain a line object, rather than a line +// number (used to prevent looking up the same line twice). +TextMarker.prototype.find = function (side, lineObj) { + var this$1 = this; + + if (side == null && this.type == "bookmark") { side = 1 } + var from, to + for (var i = 0; i < this.lines.length; ++i) { + var line = this$1.lines[i] + var span = getMarkedSpanFor(line.markedSpans, this$1) + if (span.from != null) { + from = Pos(lineObj ? line : lineNo(line), span.from) + if (side == -1) { return from } + } + if (span.to != null) { + to = Pos(lineObj ? line : lineNo(line), span.to) + if (side == 1) { return to } + } + } + return from && {from: from, to: to} +}; + +// Signals that the marker's widget changed, and surrounding layout +// should be recomputed. +TextMarker.prototype.changed = function () { + var this$1 = this; + + var pos = this.find(-1, true), widget = this, cm = this.doc.cm + if (!pos || !cm) { return } + runInOp(cm, function () { + var line = pos.line, lineN = lineNo(pos.line) + var view = findViewForLine(cm, lineN) + if (view) { + clearLineMeasurementCacheFor(view) + cm.curOp.selectionChanged = cm.curOp.forceUpdate = true + } + cm.curOp.updateMaxLine = true + if (!lineIsHidden(widget.doc, line) && widget.height != null) { + var oldHeight = widget.height + widget.height = null + var dHeight = widgetHeight(widget) - oldHeight + if (dHeight) + { updateLineHeight(line, line.height + dHeight) } + } + signalLater(cm, "markerChanged", cm, this$1) + }) +}; + +TextMarker.prototype.attachLine = function (line) { + if (!this.lines.length && this.doc.cm) { + var op = this.doc.cm.curOp + if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1) + { (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this) } + } + this.lines.push(line) +}; + +TextMarker.prototype.detachLine = function (line) { + this.lines.splice(indexOf(this.lines, line), 1) + if (!this.lines.length && this.doc.cm) { + var op = this.doc.cm.curOp + ;(op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this) + } +}; +eventMixin(TextMarker) + +// Create a marker, wire it up to the right lines, and +function markText(doc, from, to, options, type) { + // Shared markers (across linked documents) are handled separately + // (markTextShared will call out to this again, once per + // document). + if (options && options.shared) { return markTextShared(doc, from, to, options, type) } + // Ensure we are in an operation. + if (doc.cm && !doc.cm.curOp) { return operation(doc.cm, markText)(doc, from, to, options, type) } + + var marker = new TextMarker(doc, type), diff = cmp(from, to) + if (options) { copyObj(options, marker, false) } + // Don't connect empty markers unless clearWhenEmpty is false + if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false) + { return marker } + if (marker.replacedWith) { + // Showing up as a widget implies collapsed (widget replaces text) + marker.collapsed = true + marker.widgetNode = eltP("span", [marker.replacedWith], "CodeMirror-widget") + if (!options.handleMouseEvents) { marker.widgetNode.setAttribute("cm-ignore-events", "true") } + if (options.insertLeft) { marker.widgetNode.insertLeft = true } + } + if (marker.collapsed) { + if (conflictingCollapsedRange(doc, from.line, from, to, marker) || + from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker)) + { throw new Error("Inserting collapsed marker partially overlapping an existing one") } + seeCollapsedSpans() + } + + if (marker.addToHistory) + { addChangeToHistory(doc, {from: from, to: to, origin: "markText"}, doc.sel, NaN) } + + var curLine = from.line, cm = doc.cm, updateMaxLine + doc.iter(curLine, to.line + 1, function (line) { + if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine) + { updateMaxLine = true } + if (marker.collapsed && curLine != from.line) { updateLineHeight(line, 0) } + addMarkedSpan(line, new MarkedSpan(marker, + curLine == from.line ? from.ch : null, + curLine == to.line ? to.ch : null)) + ++curLine + }) + // lineIsHidden depends on the presence of the spans, so needs a second pass + if (marker.collapsed) { doc.iter(from.line, to.line + 1, function (line) { + if (lineIsHidden(doc, line)) { updateLineHeight(line, 0) } + }) } + + if (marker.clearOnEnter) { on(marker, "beforeCursorEnter", function () { return marker.clear(); }) } + + if (marker.readOnly) { + seeReadOnlySpans() + if (doc.history.done.length || doc.history.undone.length) + { doc.clearHistory() } + } + if (marker.collapsed) { + marker.id = ++nextMarkerId + marker.atomic = true + } + if (cm) { + // Sync editor state + if (updateMaxLine) { cm.curOp.updateMaxLine = true } + if (marker.collapsed) + { regChange(cm, from.line, to.line + 1) } + else if (marker.className || marker.title || marker.startStyle || marker.endStyle || marker.css) + { for (var i = from.line; i <= to.line; i++) { regLineChange(cm, i, "text") } } + if (marker.atomic) { reCheckSelection(cm.doc) } + signalLater(cm, "markerAdded", cm, marker) + } + return marker +} + +// SHARED TEXTMARKERS + +// A shared marker spans multiple linked documents. It is +// implemented as a meta-marker-object controlling multiple normal +// markers. +var SharedTextMarker = function(markers, primary) { + var this$1 = this; + + this.markers = markers + this.primary = primary + for (var i = 0; i < markers.length; ++i) + { markers[i].parent = this$1 } +}; + +SharedTextMarker.prototype.clear = function () { + var this$1 = this; + + if (this.explicitlyCleared) { return } + this.explicitlyCleared = true + for (var i = 0; i < this.markers.length; ++i) + { this$1.markers[i].clear() } + signalLater(this, "clear") +}; + +SharedTextMarker.prototype.find = function (side, lineObj) { + return this.primary.find(side, lineObj) +}; +eventMixin(SharedTextMarker) + +function markTextShared(doc, from, to, options, type) { + options = copyObj(options) + options.shared = false + var markers = [markText(doc, from, to, options, type)], primary = markers[0] + var widget = options.widgetNode + linkedDocs(doc, function (doc) { + if (widget) { options.widgetNode = widget.cloneNode(true) } + markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type)) + for (var i = 0; i < doc.linked.length; ++i) + { if (doc.linked[i].isParent) { return } } + primary = lst(markers) + }) + return new SharedTextMarker(markers, primary) +} + +function findSharedMarkers(doc) { + return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())), function (m) { return m.parent; }) +} + +function copySharedMarkers(doc, markers) { + for (var i = 0; i < markers.length; i++) { + var marker = markers[i], pos = marker.find() + var mFrom = doc.clipPos(pos.from), mTo = doc.clipPos(pos.to) + if (cmp(mFrom, mTo)) { + var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type) + marker.markers.push(subMark) + subMark.parent = marker + } + } +} + +function detachSharedMarkers(markers) { + var loop = function ( i ) { + var marker = markers[i], linked = [marker.primary.doc] + linkedDocs(marker.primary.doc, function (d) { return linked.push(d); }) + for (var j = 0; j < marker.markers.length; j++) { + var subMarker = marker.markers[j] + if (indexOf(linked, subMarker.doc) == -1) { + subMarker.parent = null + marker.markers.splice(j--, 1) + } + } + }; + + for (var i = 0; i < markers.length; i++) loop( i ); +} + +var nextDocId = 0 +var Doc = function(text, mode, firstLine, lineSep, direction) { + if (!(this instanceof Doc)) { return new Doc(text, mode, firstLine, lineSep, direction) } + if (firstLine == null) { firstLine = 0 } + + BranchChunk.call(this, [new LeafChunk([new Line("", null)])]) + this.first = firstLine + this.scrollTop = this.scrollLeft = 0 + this.cantEdit = false + this.cleanGeneration = 1 + this.modeFrontier = this.highlightFrontier = firstLine + var start = Pos(firstLine, 0) + this.sel = simpleSelection(start) + this.history = new History(null) + this.id = ++nextDocId + this.modeOption = mode + this.lineSep = lineSep + this.direction = (direction == "rtl") ? "rtl" : "ltr" + this.extend = false + + if (typeof text == "string") { text = this.splitLines(text) } + updateDoc(this, {from: start, to: start, text: text}) + setSelection(this, simpleSelection(start), sel_dontScroll) +} + +Doc.prototype = createObj(BranchChunk.prototype, { + constructor: Doc, + // Iterate over the document. Supports two forms -- with only one + // argument, it calls that for each line in the document. With + // three, it iterates over the range given by the first two (with + // the second being non-inclusive). + iter: function(from, to, op) { + if (op) { this.iterN(from - this.first, to - from, op) } + else { this.iterN(this.first, this.first + this.size, from) } + }, + + // Non-public interface for adding and removing lines. + insert: function(at, lines) { + var height = 0 + for (var i = 0; i < lines.length; ++i) { height += lines[i].height } + this.insertInner(at - this.first, lines, height) + }, + remove: function(at, n) { this.removeInner(at - this.first, n) }, + + // From here, the methods are part of the public interface. Most + // are also available from CodeMirror (editor) instances. + + getValue: function(lineSep) { + var lines = getLines(this, this.first, this.first + this.size) + if (lineSep === false) { return lines } + return lines.join(lineSep || this.lineSeparator()) + }, + setValue: docMethodOp(function(code) { + var top = Pos(this.first, 0), last = this.first + this.size - 1 + makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length), + text: this.splitLines(code), origin: "setValue", full: true}, true) + if (this.cm) { scrollToCoords(this.cm, 0, 0) } + setSelection(this, simpleSelection(top), sel_dontScroll) + }), + replaceRange: function(code, from, to, origin) { + from = clipPos(this, from) + to = to ? clipPos(this, to) : from + replaceRange(this, code, from, to, origin) + }, + getRange: function(from, to, lineSep) { + var lines = getBetween(this, clipPos(this, from), clipPos(this, to)) + if (lineSep === false) { return lines } + return lines.join(lineSep || this.lineSeparator()) + }, + + getLine: function(line) {var l = this.getLineHandle(line); return l && l.text}, + + getLineHandle: function(line) {if (isLine(this, line)) { return getLine(this, line) }}, + getLineNumber: function(line) {return lineNo(line)}, + + getLineHandleVisualStart: function(line) { + if (typeof line == "number") { line = getLine(this, line) } + return visualLine(line) + }, + + lineCount: function() {return this.size}, + firstLine: function() {return this.first}, + lastLine: function() {return this.first + this.size - 1}, + + clipPos: function(pos) {return clipPos(this, pos)}, + + getCursor: function(start) { + var range = this.sel.primary(), pos + if (start == null || start == "head") { pos = range.head } + else if (start == "anchor") { pos = range.anchor } + else if (start == "end" || start == "to" || start === false) { pos = range.to() } + else { pos = range.from() } + return pos + }, + listSelections: function() { return this.sel.ranges }, + somethingSelected: function() {return this.sel.somethingSelected()}, + + setCursor: docMethodOp(function(line, ch, options) { + setSimpleSelection(this, clipPos(this, typeof line == "number" ? Pos(line, ch || 0) : line), null, options) + }), + setSelection: docMethodOp(function(anchor, head, options) { + setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options) + }), + extendSelection: docMethodOp(function(head, other, options) { + extendSelection(this, clipPos(this, head), other && clipPos(this, other), options) + }), + extendSelections: docMethodOp(function(heads, options) { + extendSelections(this, clipPosArray(this, heads), options) + }), + extendSelectionsBy: docMethodOp(function(f, options) { + var heads = map(this.sel.ranges, f) + extendSelections(this, clipPosArray(this, heads), options) + }), + setSelections: docMethodOp(function(ranges, primary, options) { + var this$1 = this; + + if (!ranges.length) { return } + var out = [] + for (var i = 0; i < ranges.length; i++) + { out[i] = new Range(clipPos(this$1, ranges[i].anchor), + clipPos(this$1, ranges[i].head)) } + if (primary == null) { primary = Math.min(ranges.length - 1, this.sel.primIndex) } + setSelection(this, normalizeSelection(out, primary), options) + }), + addSelection: docMethodOp(function(anchor, head, options) { + var ranges = this.sel.ranges.slice(0) + ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor))) + setSelection(this, normalizeSelection(ranges, ranges.length - 1), options) + }), + + getSelection: function(lineSep) { + var this$1 = this; + + var ranges = this.sel.ranges, lines + for (var i = 0; i < ranges.length; i++) { + var sel = getBetween(this$1, ranges[i].from(), ranges[i].to()) + lines = lines ? lines.concat(sel) : sel + } + if (lineSep === false) { return lines } + else { return lines.join(lineSep || this.lineSeparator()) } + }, + getSelections: function(lineSep) { + var this$1 = this; + + var parts = [], ranges = this.sel.ranges + for (var i = 0; i < ranges.length; i++) { + var sel = getBetween(this$1, ranges[i].from(), ranges[i].to()) + if (lineSep !== false) { sel = sel.join(lineSep || this$1.lineSeparator()) } + parts[i] = sel + } + return parts + }, + replaceSelection: function(code, collapse, origin) { + var dup = [] + for (var i = 0; i < this.sel.ranges.length; i++) + { dup[i] = code } + this.replaceSelections(dup, collapse, origin || "+input") + }, + replaceSelections: docMethodOp(function(code, collapse, origin) { + var this$1 = this; + + var changes = [], sel = this.sel + for (var i = 0; i < sel.ranges.length; i++) { + var range = sel.ranges[i] + changes[i] = {from: range.from(), to: range.to(), text: this$1.splitLines(code[i]), origin: origin} + } + var newSel = collapse && collapse != "end" && computeReplacedSel(this, changes, collapse) + for (var i$1 = changes.length - 1; i$1 >= 0; i$1--) + { makeChange(this$1, changes[i$1]) } + if (newSel) { setSelectionReplaceHistory(this, newSel) } + else if (this.cm) { ensureCursorVisible(this.cm) } + }), + undo: docMethodOp(function() {makeChangeFromHistory(this, "undo")}), + redo: docMethodOp(function() {makeChangeFromHistory(this, "redo")}), + undoSelection: docMethodOp(function() {makeChangeFromHistory(this, "undo", true)}), + redoSelection: docMethodOp(function() {makeChangeFromHistory(this, "redo", true)}), + + setExtending: function(val) {this.extend = val}, + getExtending: function() {return this.extend}, + + historySize: function() { + var hist = this.history, done = 0, undone = 0 + for (var i = 0; i < hist.done.length; i++) { if (!hist.done[i].ranges) { ++done } } + for (var i$1 = 0; i$1 < hist.undone.length; i$1++) { if (!hist.undone[i$1].ranges) { ++undone } } + return {undo: done, redo: undone} + }, + clearHistory: function() {this.history = new History(this.history.maxGeneration)}, + + markClean: function() { + this.cleanGeneration = this.changeGeneration(true) + }, + changeGeneration: function(forceSplit) { + if (forceSplit) + { this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null } + return this.history.generation + }, + isClean: function (gen) { + return this.history.generation == (gen || this.cleanGeneration) + }, + + getHistory: function() { + return {done: copyHistoryArray(this.history.done), + undone: copyHistoryArray(this.history.undone)} + }, + setHistory: function(histData) { + var hist = this.history = new History(this.history.maxGeneration) + hist.done = copyHistoryArray(histData.done.slice(0), null, true) + hist.undone = copyHistoryArray(histData.undone.slice(0), null, true) + }, + + setGutterMarker: docMethodOp(function(line, gutterID, value) { + return changeLine(this, line, "gutter", function (line) { + var markers = line.gutterMarkers || (line.gutterMarkers = {}) + markers[gutterID] = value + if (!value && isEmpty(markers)) { line.gutterMarkers = null } + return true + }) + }), + + clearGutter: docMethodOp(function(gutterID) { + var this$1 = this; + + this.iter(function (line) { + if (line.gutterMarkers && line.gutterMarkers[gutterID]) { + changeLine(this$1, line, "gutter", function () { + line.gutterMarkers[gutterID] = null + if (isEmpty(line.gutterMarkers)) { line.gutterMarkers = null } + return true + }) + } + }) + }), + + lineInfo: function(line) { + var n + if (typeof line == "number") { + if (!isLine(this, line)) { return null } + n = line + line = getLine(this, line) + if (!line) { return null } + } else { + n = lineNo(line) + if (n == null) { return null } + } + return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers, + textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass, + widgets: line.widgets} + }, + + addLineClass: docMethodOp(function(handle, where, cls) { + return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function (line) { + var prop = where == "text" ? "textClass" + : where == "background" ? "bgClass" + : where == "gutter" ? "gutterClass" : "wrapClass" + if (!line[prop]) { line[prop] = cls } + else if (classTest(cls).test(line[prop])) { return false } + else { line[prop] += " " + cls } + return true + }) + }), + removeLineClass: docMethodOp(function(handle, where, cls) { + return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function (line) { + var prop = where == "text" ? "textClass" + : where == "background" ? "bgClass" + : where == "gutter" ? "gutterClass" : "wrapClass" + var cur = line[prop] + if (!cur) { return false } + else if (cls == null) { line[prop] = null } + else { + var found = cur.match(classTest(cls)) + if (!found) { return false } + var end = found.index + found[0].length + line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? "" : " ") + cur.slice(end) || null + } + return true + }) + }), + + addLineWidget: docMethodOp(function(handle, node, options) { + return addLineWidget(this, handle, node, options) + }), + removeLineWidget: function(widget) { widget.clear() }, + + markText: function(from, to, options) { + return markText(this, clipPos(this, from), clipPos(this, to), options, options && options.type || "range") + }, + setBookmark: function(pos, options) { + var realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options), + insertLeft: options && options.insertLeft, + clearWhenEmpty: false, shared: options && options.shared, + handleMouseEvents: options && options.handleMouseEvents} + pos = clipPos(this, pos) + return markText(this, pos, pos, realOpts, "bookmark") + }, + findMarksAt: function(pos) { + pos = clipPos(this, pos) + var markers = [], spans = getLine(this, pos.line).markedSpans + if (spans) { for (var i = 0; i < spans.length; ++i) { + var span = spans[i] + if ((span.from == null || span.from <= pos.ch) && + (span.to == null || span.to >= pos.ch)) + { markers.push(span.marker.parent || span.marker) } + } } + return markers + }, + findMarks: function(from, to, filter) { + from = clipPos(this, from); to = clipPos(this, to) + var found = [], lineNo = from.line + this.iter(from.line, to.line + 1, function (line) { + var spans = line.markedSpans + if (spans) { for (var i = 0; i < spans.length; i++) { + var span = spans[i] + if (!(span.to != null && lineNo == from.line && from.ch >= span.to || + span.from == null && lineNo != from.line || + span.from != null && lineNo == to.line && span.from >= to.ch) && + (!filter || filter(span.marker))) + { found.push(span.marker.parent || span.marker) } + } } + ++lineNo + }) + return found + }, + getAllMarks: function() { + var markers = [] + this.iter(function (line) { + var sps = line.markedSpans + if (sps) { for (var i = 0; i < sps.length; ++i) + { if (sps[i].from != null) { markers.push(sps[i].marker) } } } + }) + return markers + }, + + posFromIndex: function(off) { + var ch, lineNo = this.first, sepSize = this.lineSeparator().length + this.iter(function (line) { + var sz = line.text.length + sepSize + if (sz > off) { ch = off; return true } + off -= sz + ++lineNo + }) + return clipPos(this, Pos(lineNo, ch)) + }, + indexFromPos: function (coords) { + coords = clipPos(this, coords) + var index = coords.ch + if (coords.line < this.first || coords.ch < 0) { return 0 } + var sepSize = this.lineSeparator().length + this.iter(this.first, coords.line, function (line) { // iter aborts when callback returns a truthy value + index += line.text.length + sepSize + }) + return index + }, + + copy: function(copyHistory) { + var doc = new Doc(getLines(this, this.first, this.first + this.size), + this.modeOption, this.first, this.lineSep, this.direction) + doc.scrollTop = this.scrollTop; doc.scrollLeft = this.scrollLeft + doc.sel = this.sel + doc.extend = false + if (copyHistory) { + doc.history.undoDepth = this.history.undoDepth + doc.setHistory(this.getHistory()) + } + return doc + }, + + linkedDoc: function(options) { + if (!options) { options = {} } + var from = this.first, to = this.first + this.size + if (options.from != null && options.from > from) { from = options.from } + if (options.to != null && options.to < to) { to = options.to } + var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from, this.lineSep, this.direction) + if (options.sharedHist) { copy.history = this.history + ; }(this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist}) + copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}] + copySharedMarkers(copy, findSharedMarkers(this)) + return copy + }, + unlinkDoc: function(other) { + var this$1 = this; + + if (other instanceof CodeMirror) { other = other.doc } + if (this.linked) { for (var i = 0; i < this.linked.length; ++i) { + var link = this$1.linked[i] + if (link.doc != other) { continue } + this$1.linked.splice(i, 1) + other.unlinkDoc(this$1) + detachSharedMarkers(findSharedMarkers(this$1)) + break + } } + // If the histories were shared, split them again + if (other.history == this.history) { + var splitIds = [other.id] + linkedDocs(other, function (doc) { return splitIds.push(doc.id); }, true) + other.history = new History(null) + other.history.done = copyHistoryArray(this.history.done, splitIds) + other.history.undone = copyHistoryArray(this.history.undone, splitIds) + } + }, + iterLinkedDocs: function(f) {linkedDocs(this, f)}, + + getMode: function() {return this.mode}, + getEditor: function() {return this.cm}, + + splitLines: function(str) { + if (this.lineSep) { return str.split(this.lineSep) } + return splitLinesAuto(str) + }, + lineSeparator: function() { return this.lineSep || "\n" }, + + setDirection: docMethodOp(function (dir) { + if (dir != "rtl") { dir = "ltr" } + if (dir == this.direction) { return } + this.direction = dir + this.iter(function (line) { return line.order = null; }) + if (this.cm) { directionChanged(this.cm) } + }) +}) + +// Public alias. +Doc.prototype.eachLine = Doc.prototype.iter + +// Kludge to work around strange IE behavior where it'll sometimes +// re-fire a series of drag-related events right after the drop (#1551) +var lastDrop = 0 + +function onDrop(e) { + var cm = this + clearDragCursor(cm) + if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) + { return } + e_preventDefault(e) + if (ie) { lastDrop = +new Date } + var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files + if (!pos || cm.isReadOnly()) { return } + // Might be a file drop, in which case we simply extract the text + // and insert it. + if (files && files.length && window.FileReader && window.File) { + var n = files.length, text = Array(n), read = 0 + var loadFile = function (file, i) { + if (cm.options.allowDropFileTypes && + indexOf(cm.options.allowDropFileTypes, file.type) == -1) + { return } + + var reader = new FileReader + reader.onload = operation(cm, function () { + var content = reader.result + if (/[\x00-\x08\x0e-\x1f]{2}/.test(content)) { content = "" } + text[i] = content + if (++read == n) { + pos = clipPos(cm.doc, pos) + var change = {from: pos, to: pos, + text: cm.doc.splitLines(text.join(cm.doc.lineSeparator())), + origin: "paste"} + makeChange(cm.doc, change) + setSelectionReplaceHistory(cm.doc, simpleSelection(pos, changeEnd(change))) + } + }) + reader.readAsText(file) + } + for (var i = 0; i < n; ++i) { loadFile(files[i], i) } + } else { // Normal drop + // Don't do a replace if the drop happened inside of the selected text. + if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) { + cm.state.draggingText(e) + // Ensure the editor is re-focused + setTimeout(function () { return cm.display.input.focus(); }, 20) + return + } + try { + var text$1 = e.dataTransfer.getData("Text") + if (text$1) { + var selected + if (cm.state.draggingText && !cm.state.draggingText.copy) + { selected = cm.listSelections() } + setSelectionNoUndo(cm.doc, simpleSelection(pos, pos)) + if (selected) { for (var i$1 = 0; i$1 < selected.length; ++i$1) + { replaceRange(cm.doc, "", selected[i$1].anchor, selected[i$1].head, "drag") } } + cm.replaceSelection(text$1, "around", "paste") + cm.display.input.focus() + } + } + catch(e){} + } +} + +function onDragStart(cm, e) { + if (ie && (!cm.state.draggingText || +new Date - lastDrop < 100)) { e_stop(e); return } + if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) { return } + + e.dataTransfer.setData("Text", cm.getSelection()) + e.dataTransfer.effectAllowed = "copyMove" + + // Use dummy image instead of default browsers image. + // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there. + if (e.dataTransfer.setDragImage && !safari) { + var img = elt("img", null, null, "position: fixed; left: 0; top: 0;") + img.src = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" + if (presto) { + img.width = img.height = 1 + cm.display.wrapper.appendChild(img) + // Force a relayout, or Opera won't use our image for some obscure reason + img._top = img.offsetTop + } + e.dataTransfer.setDragImage(img, 0, 0) + if (presto) { img.parentNode.removeChild(img) } + } +} + +function onDragOver(cm, e) { + var pos = posFromMouse(cm, e) + if (!pos) { return } + var frag = document.createDocumentFragment() + drawSelectionCursor(cm, pos, frag) + if (!cm.display.dragCursor) { + cm.display.dragCursor = elt("div", null, "CodeMirror-cursors CodeMirror-dragcursors") + cm.display.lineSpace.insertBefore(cm.display.dragCursor, cm.display.cursorDiv) + } + removeChildrenAndAdd(cm.display.dragCursor, frag) +} + +function clearDragCursor(cm) { + if (cm.display.dragCursor) { + cm.display.lineSpace.removeChild(cm.display.dragCursor) + cm.display.dragCursor = null + } +} + +// These must be handled carefully, because naively registering a +// handler for each editor will cause the editors to never be +// garbage collected. + +function forEachCodeMirror(f) { + if (!document.getElementsByClassName) { return } + var byClass = document.getElementsByClassName("CodeMirror") + for (var i = 0; i < byClass.length; i++) { + var cm = byClass[i].CodeMirror + if (cm) { f(cm) } + } +} + +var globalsRegistered = false +function ensureGlobalHandlers() { + if (globalsRegistered) { return } + registerGlobalHandlers() + globalsRegistered = true +} +function registerGlobalHandlers() { + // When the window resizes, we need to refresh active editors. + var resizeTimer + on(window, "resize", function () { + if (resizeTimer == null) { resizeTimer = setTimeout(function () { + resizeTimer = null + forEachCodeMirror(onResize) + }, 100) } + }) + // When the window loses focus, we want to show the editor as blurred + on(window, "blur", function () { return forEachCodeMirror(onBlur); }) +} +// Called when the window resizes +function onResize(cm) { + var d = cm.display + // Might be a text scaling operation, clear size caches. + d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null + d.scrollbarsClipped = false + cm.setSize() +} + +var keyNames = { + 3: "Pause", 8: "Backspace", 9: "Tab", 13: "Enter", 16: "Shift", 17: "Ctrl", 18: "Alt", + 19: "Pause", 20: "CapsLock", 27: "Esc", 32: "Space", 33: "PageUp", 34: "PageDown", 35: "End", + 36: "Home", 37: "Left", 38: "Up", 39: "Right", 40: "Down", 44: "PrintScrn", 45: "Insert", + 46: "Delete", 59: ";", 61: "=", 91: "Mod", 92: "Mod", 93: "Mod", + 106: "*", 107: "=", 109: "-", 110: ".", 111: "/", 127: "Delete", 145: "ScrollLock", + 173: "-", 186: ";", 187: "=", 188: ",", 189: "-", 190: ".", 191: "/", 192: "`", 219: "[", 220: "\\", + 221: "]", 222: "'", 63232: "Up", 63233: "Down", 63234: "Left", 63235: "Right", 63272: "Delete", + 63273: "Home", 63275: "End", 63276: "PageUp", 63277: "PageDown", 63302: "Insert" +} + +// Number keys +for (var i = 0; i < 10; i++) { keyNames[i + 48] = keyNames[i + 96] = String(i) } +// Alphabetic keys +for (var i$1 = 65; i$1 <= 90; i$1++) { keyNames[i$1] = String.fromCharCode(i$1) } +// Function keys +for (var i$2 = 1; i$2 <= 12; i$2++) { keyNames[i$2 + 111] = keyNames[i$2 + 63235] = "F" + i$2 } + +var keyMap = {} + +keyMap.basic = { + "Left": "goCharLeft", "Right": "goCharRight", "Up": "goLineUp", "Down": "goLineDown", + "End": "goLineEnd", "Home": "goLineStartSmart", "PageUp": "goPageUp", "PageDown": "goPageDown", + "Delete": "delCharAfter", "Backspace": "delCharBefore", "Shift-Backspace": "delCharBefore", + "Tab": "defaultTab", "Shift-Tab": "indentAuto", + "Enter": "newlineAndIndent", "Insert": "toggleOverwrite", + "Esc": "singleSelection" +} +// Note that the save and find-related commands aren't defined by +// default. User code or addons can define them. Unknown commands +// are simply ignored. +keyMap.pcDefault = { + "Ctrl-A": "selectAll", "Ctrl-D": "deleteLine", "Ctrl-Z": "undo", "Shift-Ctrl-Z": "redo", "Ctrl-Y": "redo", + "Ctrl-Home": "goDocStart", "Ctrl-End": "goDocEnd", "Ctrl-Up": "goLineUp", "Ctrl-Down": "goLineDown", + "Ctrl-Left": "goGroupLeft", "Ctrl-Right": "goGroupRight", "Alt-Left": "goLineStart", "Alt-Right": "goLineEnd", + "Ctrl-Backspace": "delGroupBefore", "Ctrl-Delete": "delGroupAfter", "Ctrl-S": "save", "Ctrl-F": "find", + "Ctrl-G": "findNext", "Shift-Ctrl-G": "findPrev", "Shift-Ctrl-F": "replace", "Shift-Ctrl-R": "replaceAll", + "Ctrl-[": "indentLess", "Ctrl-]": "indentMore", + "Ctrl-U": "undoSelection", "Shift-Ctrl-U": "redoSelection", "Alt-U": "redoSelection", + "fallthrough": "basic" +} +// Very basic readline/emacs-style bindings, which are standard on Mac. +keyMap.emacsy = { + "Ctrl-F": "goCharRight", "Ctrl-B": "goCharLeft", "Ctrl-P": "goLineUp", "Ctrl-N": "goLineDown", + "Alt-F": "goWordRight", "Alt-B": "goWordLeft", "Ctrl-A": "goLineStart", "Ctrl-E": "goLineEnd", + "Ctrl-V": "goPageDown", "Shift-Ctrl-V": "goPageUp", "Ctrl-D": "delCharAfter", "Ctrl-H": "delCharBefore", + "Alt-D": "delWordAfter", "Alt-Backspace": "delWordBefore", "Ctrl-K": "killLine", "Ctrl-T": "transposeChars", + "Ctrl-O": "openLine" +} +keyMap.macDefault = { + "Cmd-A": "selectAll", "Cmd-D": "deleteLine", "Cmd-Z": "undo", "Shift-Cmd-Z": "redo", "Cmd-Y": "redo", + "Cmd-Home": "goDocStart", "Cmd-Up": "goDocStart", "Cmd-End": "goDocEnd", "Cmd-Down": "goDocEnd", "Alt-Left": "goGroupLeft", + "Alt-Right": "goGroupRight", "Cmd-Left": "goLineLeft", "Cmd-Right": "goLineRight", "Alt-Backspace": "delGroupBefore", + "Ctrl-Alt-Backspace": "delGroupAfter", "Alt-Delete": "delGroupAfter", "Cmd-S": "save", "Cmd-F": "find", + "Cmd-G": "findNext", "Shift-Cmd-G": "findPrev", "Cmd-Alt-F": "replace", "Shift-Cmd-Alt-F": "replaceAll", + "Cmd-[": "indentLess", "Cmd-]": "indentMore", "Cmd-Backspace": "delWrappedLineLeft", "Cmd-Delete": "delWrappedLineRight", + "Cmd-U": "undoSelection", "Shift-Cmd-U": "redoSelection", "Ctrl-Up": "goDocStart", "Ctrl-Down": "goDocEnd", + "fallthrough": ["basic", "emacsy"] +} +keyMap["default"] = mac ? keyMap.macDefault : keyMap.pcDefault + +// KEYMAP DISPATCH + +function normalizeKeyName(name) { + var parts = name.split(/-(?!$)/) + name = parts[parts.length - 1] + var alt, ctrl, shift, cmd + for (var i = 0; i < parts.length - 1; i++) { + var mod = parts[i] + if (/^(cmd|meta|m)$/i.test(mod)) { cmd = true } + else if (/^a(lt)?$/i.test(mod)) { alt = true } + else if (/^(c|ctrl|control)$/i.test(mod)) { ctrl = true } + else if (/^s(hift)?$/i.test(mod)) { shift = true } + else { throw new Error("Unrecognized modifier name: " + mod) } + } + if (alt) { name = "Alt-" + name } + if (ctrl) { name = "Ctrl-" + name } + if (cmd) { name = "Cmd-" + name } + if (shift) { name = "Shift-" + name } + return name +} + +// This is a kludge to keep keymaps mostly working as raw objects +// (backwards compatibility) while at the same time support features +// like normalization and multi-stroke key bindings. It compiles a +// new normalized keymap, and then updates the old object to reflect +// this. +function normalizeKeyMap(keymap) { + var copy = {} + for (var keyname in keymap) { if (keymap.hasOwnProperty(keyname)) { + var value = keymap[keyname] + if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) { continue } + if (value == "...") { delete keymap[keyname]; continue } + + var keys = map(keyname.split(" "), normalizeKeyName) + for (var i = 0; i < keys.length; i++) { + var val = (void 0), name = (void 0) + if (i == keys.length - 1) { + name = keys.join(" ") + val = value + } else { + name = keys.slice(0, i + 1).join(" ") + val = "..." + } + var prev = copy[name] + if (!prev) { copy[name] = val } + else if (prev != val) { throw new Error("Inconsistent bindings for " + name) } + } + delete keymap[keyname] + } } + for (var prop in copy) { keymap[prop] = copy[prop] } + return keymap +} + +function lookupKey(key, map, handle, context) { + map = getKeyMap(map) + var found = map.call ? map.call(key, context) : map[key] + if (found === false) { return "nothing" } + if (found === "...") { return "multi" } + if (found != null && handle(found)) { return "handled" } + + if (map.fallthrough) { + if (Object.prototype.toString.call(map.fallthrough) != "[object Array]") + { return lookupKey(key, map.fallthrough, handle, context) } + for (var i = 0; i < map.fallthrough.length; i++) { + var result = lookupKey(key, map.fallthrough[i], handle, context) + if (result) { return result } + } + } +} + +// Modifier key presses don't count as 'real' key presses for the +// purpose of keymap fallthrough. +function isModifierKey(value) { + var name = typeof value == "string" ? value : keyNames[value.keyCode] + return name == "Ctrl" || name == "Alt" || name == "Shift" || name == "Mod" +} + +function addModifierNames(name, event, noShift) { + var base = name + if (event.altKey && base != "Alt") { name = "Alt-" + name } + if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != "Ctrl") { name = "Ctrl-" + name } + if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != "Cmd") { name = "Cmd-" + name } + if (!noShift && event.shiftKey && base != "Shift") { name = "Shift-" + name } + return name +} + +// Look up the name of a key as indicated by an event object. +function keyName(event, noShift) { + if (presto && event.keyCode == 34 && event["char"]) { return false } + var name = keyNames[event.keyCode] + if (name == null || event.altGraphKey) { return false } + // Ctrl-ScrollLock has keyCode 3, same as Ctrl-Pause, + // so we'll use event.code when available (Chrome 48+, FF 38+, Safari 10.1+) + if (event.keyCode == 3 && event.code) { name = event.code } + return addModifierNames(name, event, noShift) +} + +function getKeyMap(val) { + return typeof val == "string" ? keyMap[val] : val +} + +// Helper for deleting text near the selection(s), used to implement +// backspace, delete, and similar functionality. +function deleteNearSelection(cm, compute) { + var ranges = cm.doc.sel.ranges, kill = [] + // Build up a set of ranges to kill first, merging overlapping + // ranges. + for (var i = 0; i < ranges.length; i++) { + var toKill = compute(ranges[i]) + while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) { + var replaced = kill.pop() + if (cmp(replaced.from, toKill.from) < 0) { + toKill.from = replaced.from + break + } + } + kill.push(toKill) + } + // Next, remove those actual ranges. + runInOp(cm, function () { + for (var i = kill.length - 1; i >= 0; i--) + { replaceRange(cm.doc, "", kill[i].from, kill[i].to, "+delete") } + ensureCursorVisible(cm) + }) +} + +function moveCharLogically(line, ch, dir) { + var target = skipExtendingChars(line.text, ch + dir, dir) + return target < 0 || target > line.text.length ? null : target +} + +function moveLogically(line, start, dir) { + var ch = moveCharLogically(line, start.ch, dir) + return ch == null ? null : new Pos(start.line, ch, dir < 0 ? "after" : "before") +} + +function endOfLine(visually, cm, lineObj, lineNo, dir) { + if (visually) { + var order = getOrder(lineObj, cm.doc.direction) + if (order) { + var part = dir < 0 ? lst(order) : order[0] + var moveInStorageOrder = (dir < 0) == (part.level == 1) + var sticky = moveInStorageOrder ? "after" : "before" + var ch + // With a wrapped rtl chunk (possibly spanning multiple bidi parts), + // it could be that the last bidi part is not on the last visual line, + // since visual lines contain content order-consecutive chunks. + // Thus, in rtl, we are looking for the first (content-order) character + // in the rtl chunk that is on the last line (that is, the same line + // as the last (content-order) character). + if (part.level > 0 || cm.doc.direction == "rtl") { + var prep = prepareMeasureForLine(cm, lineObj) + ch = dir < 0 ? lineObj.text.length - 1 : 0 + var targetTop = measureCharPrepared(cm, prep, ch).top + ch = findFirst(function (ch) { return measureCharPrepared(cm, prep, ch).top == targetTop; }, (dir < 0) == (part.level == 1) ? part.from : part.to - 1, ch) + if (sticky == "before") { ch = moveCharLogically(lineObj, ch, 1) } + } else { ch = dir < 0 ? part.to : part.from } + return new Pos(lineNo, ch, sticky) + } + } + return new Pos(lineNo, dir < 0 ? lineObj.text.length : 0, dir < 0 ? "before" : "after") +} + +function moveVisually(cm, line, start, dir) { + var bidi = getOrder(line, cm.doc.direction) + if (!bidi) { return moveLogically(line, start, dir) } + if (start.ch >= line.text.length) { + start.ch = line.text.length + start.sticky = "before" + } else if (start.ch <= 0) { + start.ch = 0 + start.sticky = "after" + } + var partPos = getBidiPartAt(bidi, start.ch, start.sticky), part = bidi[partPos] + if (cm.doc.direction == "ltr" && part.level % 2 == 0 && (dir > 0 ? part.to > start.ch : part.from < start.ch)) { + // Case 1: We move within an ltr part in an ltr editor. Even with wrapped lines, + // nothing interesting happens. + return moveLogically(line, start, dir) + } + + var mv = function (pos, dir) { return moveCharLogically(line, pos instanceof Pos ? pos.ch : pos, dir); } + var prep + var getWrappedLineExtent = function (ch) { + if (!cm.options.lineWrapping) { return {begin: 0, end: line.text.length} } + prep = prep || prepareMeasureForLine(cm, line) + return wrappedLineExtentChar(cm, line, prep, ch) + } + var wrappedLineExtent = getWrappedLineExtent(start.sticky == "before" ? mv(start, -1) : start.ch) + + if (cm.doc.direction == "rtl" || part.level == 1) { + var moveInStorageOrder = (part.level == 1) == (dir < 0) + var ch = mv(start, moveInStorageOrder ? 1 : -1) + if (ch != null && (!moveInStorageOrder ? ch >= part.from && ch >= wrappedLineExtent.begin : ch <= part.to && ch <= wrappedLineExtent.end)) { + // Case 2: We move within an rtl part or in an rtl editor on the same visual line + var sticky = moveInStorageOrder ? "before" : "after" + return new Pos(start.line, ch, sticky) + } + } + + // Case 3: Could not move within this bidi part in this visual line, so leave + // the current bidi part + + var searchInVisualLine = function (partPos, dir, wrappedLineExtent) { + var getRes = function (ch, moveInStorageOrder) { return moveInStorageOrder + ? new Pos(start.line, mv(ch, 1), "before") + : new Pos(start.line, ch, "after"); } + + for (; partPos >= 0 && partPos < bidi.length; partPos += dir) { + var part = bidi[partPos] + var moveInStorageOrder = (dir > 0) == (part.level != 1) + var ch = moveInStorageOrder ? wrappedLineExtent.begin : mv(wrappedLineExtent.end, -1) + if (part.from <= ch && ch < part.to) { return getRes(ch, moveInStorageOrder) } + ch = moveInStorageOrder ? part.from : mv(part.to, -1) + if (wrappedLineExtent.begin <= ch && ch < wrappedLineExtent.end) { return getRes(ch, moveInStorageOrder) } + } + } + + // Case 3a: Look for other bidi parts on the same visual line + var res = searchInVisualLine(partPos + dir, dir, wrappedLineExtent) + if (res) { return res } + + // Case 3b: Look for other bidi parts on the next visual line + var nextCh = dir > 0 ? wrappedLineExtent.end : mv(wrappedLineExtent.begin, -1) + if (nextCh != null && !(dir > 0 && nextCh == line.text.length)) { + res = searchInVisualLine(dir > 0 ? 0 : bidi.length - 1, dir, getWrappedLineExtent(nextCh)) + if (res) { return res } + } + + // Case 4: Nowhere to move + return null +} + +// Commands are parameter-less actions that can be performed on an +// editor, mostly used for keybindings. +var commands = { + selectAll: selectAll, + singleSelection: function (cm) { return cm.setSelection(cm.getCursor("anchor"), cm.getCursor("head"), sel_dontScroll); }, + killLine: function (cm) { return deleteNearSelection(cm, function (range) { + if (range.empty()) { + var len = getLine(cm.doc, range.head.line).text.length + if (range.head.ch == len && range.head.line < cm.lastLine()) + { return {from: range.head, to: Pos(range.head.line + 1, 0)} } + else + { return {from: range.head, to: Pos(range.head.line, len)} } + } else { + return {from: range.from(), to: range.to()} + } + }); }, + deleteLine: function (cm) { return deleteNearSelection(cm, function (range) { return ({ + from: Pos(range.from().line, 0), + to: clipPos(cm.doc, Pos(range.to().line + 1, 0)) + }); }); }, + delLineLeft: function (cm) { return deleteNearSelection(cm, function (range) { return ({ + from: Pos(range.from().line, 0), to: range.from() + }); }); }, + delWrappedLineLeft: function (cm) { return deleteNearSelection(cm, function (range) { + var top = cm.charCoords(range.head, "div").top + 5 + var leftPos = cm.coordsChar({left: 0, top: top}, "div") + return {from: leftPos, to: range.from()} + }); }, + delWrappedLineRight: function (cm) { return deleteNearSelection(cm, function (range) { + var top = cm.charCoords(range.head, "div").top + 5 + var rightPos = cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div") + return {from: range.from(), to: rightPos } + }); }, + undo: function (cm) { return cm.undo(); }, + redo: function (cm) { return cm.redo(); }, + undoSelection: function (cm) { return cm.undoSelection(); }, + redoSelection: function (cm) { return cm.redoSelection(); }, + goDocStart: function (cm) { return cm.extendSelection(Pos(cm.firstLine(), 0)); }, + goDocEnd: function (cm) { return cm.extendSelection(Pos(cm.lastLine())); }, + goLineStart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStart(cm, range.head.line); }, + {origin: "+move", bias: 1} + ); }, + goLineStartSmart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStartSmart(cm, range.head); }, + {origin: "+move", bias: 1} + ); }, + goLineEnd: function (cm) { return cm.extendSelectionsBy(function (range) { return lineEnd(cm, range.head.line); }, + {origin: "+move", bias: -1} + ); }, + goLineRight: function (cm) { return cm.extendSelectionsBy(function (range) { + var top = cm.cursorCoords(range.head, "div").top + 5 + return cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div") + }, sel_move); }, + goLineLeft: function (cm) { return cm.extendSelectionsBy(function (range) { + var top = cm.cursorCoords(range.head, "div").top + 5 + return cm.coordsChar({left: 0, top: top}, "div") + }, sel_move); }, + goLineLeftSmart: function (cm) { return cm.extendSelectionsBy(function (range) { + var top = cm.cursorCoords(range.head, "div").top + 5 + var pos = cm.coordsChar({left: 0, top: top}, "div") + if (pos.ch < cm.getLine(pos.line).search(/\S/)) { return lineStartSmart(cm, range.head) } + return pos + }, sel_move); }, + goLineUp: function (cm) { return cm.moveV(-1, "line"); }, + goLineDown: function (cm) { return cm.moveV(1, "line"); }, + goPageUp: function (cm) { return cm.moveV(-1, "page"); }, + goPageDown: function (cm) { return cm.moveV(1, "page"); }, + goCharLeft: function (cm) { return cm.moveH(-1, "char"); }, + goCharRight: function (cm) { return cm.moveH(1, "char"); }, + goColumnLeft: function (cm) { return cm.moveH(-1, "column"); }, + goColumnRight: function (cm) { return cm.moveH(1, "column"); }, + goWordLeft: function (cm) { return cm.moveH(-1, "word"); }, + goGroupRight: function (cm) { return cm.moveH(1, "group"); }, + goGroupLeft: function (cm) { return cm.moveH(-1, "group"); }, + goWordRight: function (cm) { return cm.moveH(1, "word"); }, + delCharBefore: function (cm) { return cm.deleteH(-1, "char"); }, + delCharAfter: function (cm) { return cm.deleteH(1, "char"); }, + delWordBefore: function (cm) { return cm.deleteH(-1, "word"); }, + delWordAfter: function (cm) { return cm.deleteH(1, "word"); }, + delGroupBefore: function (cm) { return cm.deleteH(-1, "group"); }, + delGroupAfter: function (cm) { return cm.deleteH(1, "group"); }, + indentAuto: function (cm) { return cm.indentSelection("smart"); }, + indentMore: function (cm) { return cm.indentSelection("add"); }, + indentLess: function (cm) { return cm.indentSelection("subtract"); }, + insertTab: function (cm) { return cm.replaceSelection("\t"); }, + insertSoftTab: function (cm) { + var spaces = [], ranges = cm.listSelections(), tabSize = cm.options.tabSize + for (var i = 0; i < ranges.length; i++) { + var pos = ranges[i].from() + var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize) + spaces.push(spaceStr(tabSize - col % tabSize)) + } + cm.replaceSelections(spaces) + }, + defaultTab: function (cm) { + if (cm.somethingSelected()) { cm.indentSelection("add") } + else { cm.execCommand("insertTab") } + }, + // Swap the two chars left and right of each selection's head. + // Move cursor behind the two swapped characters afterwards. + // + // Doesn't consider line feeds a character. + // Doesn't scan more than one line above to find a character. + // Doesn't do anything on an empty line. + // Doesn't do anything with non-empty selections. + transposeChars: function (cm) { return runInOp(cm, function () { + var ranges = cm.listSelections(), newSel = [] + for (var i = 0; i < ranges.length; i++) { + if (!ranges[i].empty()) { continue } + var cur = ranges[i].head, line = getLine(cm.doc, cur.line).text + if (line) { + if (cur.ch == line.length) { cur = new Pos(cur.line, cur.ch - 1) } + if (cur.ch > 0) { + cur = new Pos(cur.line, cur.ch + 1) + cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2), + Pos(cur.line, cur.ch - 2), cur, "+transpose") + } else if (cur.line > cm.doc.first) { + var prev = getLine(cm.doc, cur.line - 1).text + if (prev) { + cur = new Pos(cur.line, 1) + cm.replaceRange(line.charAt(0) + cm.doc.lineSeparator() + + prev.charAt(prev.length - 1), + Pos(cur.line - 1, prev.length - 1), cur, "+transpose") + } + } + } + newSel.push(new Range(cur, cur)) + } + cm.setSelections(newSel) + }); }, + newlineAndIndent: function (cm) { return runInOp(cm, function () { + var sels = cm.listSelections() + for (var i = sels.length - 1; i >= 0; i--) + { cm.replaceRange(cm.doc.lineSeparator(), sels[i].anchor, sels[i].head, "+input") } + sels = cm.listSelections() + for (var i$1 = 0; i$1 < sels.length; i$1++) + { cm.indentLine(sels[i$1].from().line, null, true) } + ensureCursorVisible(cm) + }); }, + openLine: function (cm) { return cm.replaceSelection("\n", "start"); }, + toggleOverwrite: function (cm) { return cm.toggleOverwrite(); } +} + + +function lineStart(cm, lineN) { + var line = getLine(cm.doc, lineN) + var visual = visualLine(line) + if (visual != line) { lineN = lineNo(visual) } + return endOfLine(true, cm, visual, lineN, 1) +} +function lineEnd(cm, lineN) { + var line = getLine(cm.doc, lineN) + var visual = visualLineEnd(line) + if (visual != line) { lineN = lineNo(visual) } + return endOfLine(true, cm, line, lineN, -1) +} +function lineStartSmart(cm, pos) { + var start = lineStart(cm, pos.line) + var line = getLine(cm.doc, start.line) + var order = getOrder(line, cm.doc.direction) + if (!order || order[0].level == 0) { + var firstNonWS = Math.max(0, line.text.search(/\S/)) + var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch + return Pos(start.line, inWS ? 0 : firstNonWS, start.sticky) + } + return start +} + +// Run a handler that was bound to a key. +function doHandleBinding(cm, bound, dropShift) { + if (typeof bound == "string") { + bound = commands[bound] + if (!bound) { return false } + } + // Ensure previous input has been read, so that the handler sees a + // consistent view of the document + cm.display.input.ensurePolled() + var prevShift = cm.display.shift, done = false + try { + if (cm.isReadOnly()) { cm.state.suppressEdits = true } + if (dropShift) { cm.display.shift = false } + done = bound(cm) != Pass + } finally { + cm.display.shift = prevShift + cm.state.suppressEdits = false + } + return done +} + +function lookupKeyForEditor(cm, name, handle) { + for (var i = 0; i < cm.state.keyMaps.length; i++) { + var result = lookupKey(name, cm.state.keyMaps[i], handle, cm) + if (result) { return result } + } + return (cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm)) + || lookupKey(name, cm.options.keyMap, handle, cm) +} + +// Note that, despite the name, this function is also used to check +// for bound mouse clicks. + +var stopSeq = new Delayed + +function dispatchKey(cm, name, e, handle) { + var seq = cm.state.keySeq + if (seq) { + if (isModifierKey(name)) { return "handled" } + if (/\'$/.test(name)) + { cm.state.keySeq = null } + else + { stopSeq.set(50, function () { + if (cm.state.keySeq == seq) { + cm.state.keySeq = null + cm.display.input.reset() + } + }) } + if (dispatchKeyInner(cm, seq + " " + name, e, handle)) { return true } + } + return dispatchKeyInner(cm, name, e, handle) +} + +function dispatchKeyInner(cm, name, e, handle) { + var result = lookupKeyForEditor(cm, name, handle) + + if (result == "multi") + { cm.state.keySeq = name } + if (result == "handled") + { signalLater(cm, "keyHandled", cm, name, e) } + + if (result == "handled" || result == "multi") { + e_preventDefault(e) + restartBlink(cm) + } + + return !!result +} + +// Handle a key from the keydown event. +function handleKeyBinding(cm, e) { + var name = keyName(e, true) + if (!name) { return false } + + if (e.shiftKey && !cm.state.keySeq) { + // First try to resolve full name (including 'Shift-'). Failing + // that, see if there is a cursor-motion command (starting with + // 'go') bound to the keyname without 'Shift-'. + return dispatchKey(cm, "Shift-" + name, e, function (b) { return doHandleBinding(cm, b, true); }) + || dispatchKey(cm, name, e, function (b) { + if (typeof b == "string" ? /^go[A-Z]/.test(b) : b.motion) + { return doHandleBinding(cm, b) } + }) + } else { + return dispatchKey(cm, name, e, function (b) { return doHandleBinding(cm, b); }) + } +} + +// Handle a key from the keypress event +function handleCharBinding(cm, e, ch) { + return dispatchKey(cm, "'" + ch + "'", e, function (b) { return doHandleBinding(cm, b, true); }) +} + +var lastStoppedKey = null +function onKeyDown(e) { + var cm = this + cm.curOp.focus = activeElt() + if (signalDOMEvent(cm, e)) { return } + // IE does strange things with escape. + if (ie && ie_version < 11 && e.keyCode == 27) { e.returnValue = false } + var code = e.keyCode + cm.display.shift = code == 16 || e.shiftKey + var handled = handleKeyBinding(cm, e) + if (presto) { + lastStoppedKey = handled ? code : null + // Opera has no cut event... we try to at least catch the key combo + if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey)) + { cm.replaceSelection("", null, "cut") } + } + + // Turn mouse into crosshair when Alt is held on Mac. + if (code == 18 && !/\bCodeMirror-crosshair\b/.test(cm.display.lineDiv.className)) + { showCrossHair(cm) } +} + +function showCrossHair(cm) { + var lineDiv = cm.display.lineDiv + addClass(lineDiv, "CodeMirror-crosshair") + + function up(e) { + if (e.keyCode == 18 || !e.altKey) { + rmClass(lineDiv, "CodeMirror-crosshair") + off(document, "keyup", up) + off(document, "mouseover", up) + } + } + on(document, "keyup", up) + on(document, "mouseover", up) +} + +function onKeyUp(e) { + if (e.keyCode == 16) { this.doc.sel.shift = false } + signalDOMEvent(this, e) +} + +function onKeyPress(e) { + var cm = this + if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) { return } + var keyCode = e.keyCode, charCode = e.charCode + if (presto && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return} + if ((presto && (!e.which || e.which < 10)) && handleKeyBinding(cm, e)) { return } + var ch = String.fromCharCode(charCode == null ? keyCode : charCode) + // Some browsers fire keypress events for backspace + if (ch == "\x08") { return } + if (handleCharBinding(cm, e, ch)) { return } + cm.display.input.onKeyPress(e) +} + +var DOUBLECLICK_DELAY = 400 + +var PastClick = function(time, pos, button) { + this.time = time + this.pos = pos + this.button = button +}; + +PastClick.prototype.compare = function (time, pos, button) { + return this.time + DOUBLECLICK_DELAY > time && + cmp(pos, this.pos) == 0 && button == this.button +}; + +var lastClick; +var lastDoubleClick; +function clickRepeat(pos, button) { + var now = +new Date + if (lastDoubleClick && lastDoubleClick.compare(now, pos, button)) { + lastClick = lastDoubleClick = null + return "triple" + } else if (lastClick && lastClick.compare(now, pos, button)) { + lastDoubleClick = new PastClick(now, pos, button) + lastClick = null + return "double" + } else { + lastClick = new PastClick(now, pos, button) + lastDoubleClick = null + return "single" + } +} + +// A mouse down can be a single click, double click, triple click, +// start of selection drag, start of text drag, new cursor +// (ctrl-click), rectangle drag (alt-drag), or xwin +// middle-click-paste. Or it might be a click on something we should +// not interfere with, such as a scrollbar or widget. +function onMouseDown(e) { + var cm = this, display = cm.display + if (signalDOMEvent(cm, e) || display.activeTouch && display.input.supportsTouch()) { return } + display.input.ensurePolled() + display.shift = e.shiftKey + + if (eventInWidget(display, e)) { + if (!webkit) { + // Briefly turn off draggability, to allow widgets to do + // normal dragging things. + display.scroller.draggable = false + setTimeout(function () { return display.scroller.draggable = true; }, 100) + } + return + } + var button = e_button(e) + if (button == 3 && captureRightClick ? contextMenuInGutter(cm, e) : clickInGutter(cm, e)) { return } + var pos = posFromMouse(cm, e), repeat = pos ? clickRepeat(pos, button) : "single" + window.focus() + + // #3261: make sure, that we're not starting a second selection + if (button == 1 && cm.state.selectingText) + { cm.state.selectingText(e) } + + if (pos && handleMappedButton(cm, button, pos, repeat, e)) { return } + + if (button == 1) { + if (pos) { leftButtonDown(cm, pos, repeat, e) } + else if (e_target(e) == display.scroller) { e_preventDefault(e) } + } else if (button == 2) { + if (pos) { extendSelection(cm.doc, pos) } + setTimeout(function () { return display.input.focus(); }, 20) + } else if (button == 3) { + if (captureRightClick) { onContextMenu(cm, e) } + else { delayBlurEvent(cm) } + } +} + +function handleMappedButton(cm, button, pos, repeat, event) { + var name = "Click" + if (repeat == "double") { name = "Double" + name } + else if (repeat == "triple") { name = "Triple" + name } + name = (button == 1 ? "Left" : button == 2 ? "Middle" : "Right") + name + + return dispatchKey(cm, addModifierNames(name, event), event, function (bound) { + if (typeof bound == "string") { bound = commands[bound] } + if (!bound) { return false } + var done = false + try { + if (cm.isReadOnly()) { cm.state.suppressEdits = true } + done = bound(cm, pos) != Pass + } finally { + cm.state.suppressEdits = false + } + return done + }) +} + +function configureMouse(cm, repeat, event) { + var option = cm.getOption("configureMouse") + var value = option ? option(cm, repeat, event) : {} + if (value.unit == null) { + var rect = chromeOS ? event.shiftKey && event.metaKey : event.altKey + value.unit = rect ? "rectangle" : repeat == "single" ? "char" : repeat == "double" ? "word" : "line" + } + if (value.extend == null || cm.doc.extend) { value.extend = cm.doc.extend || event.shiftKey } + if (value.addNew == null) { value.addNew = mac ? event.metaKey : event.ctrlKey } + if (value.moveOnDrag == null) { value.moveOnDrag = !(mac ? event.altKey : event.ctrlKey) } + return value +} + +function leftButtonDown(cm, pos, repeat, event) { + if (ie) { setTimeout(bind(ensureFocus, cm), 0) } + else { cm.curOp.focus = activeElt() } + + var behavior = configureMouse(cm, repeat, event) + + var sel = cm.doc.sel, contained + if (cm.options.dragDrop && dragAndDrop && !cm.isReadOnly() && + repeat == "single" && (contained = sel.contains(pos)) > -1 && + (cmp((contained = sel.ranges[contained]).from(), pos) < 0 || pos.xRel > 0) && + (cmp(contained.to(), pos) > 0 || pos.xRel < 0)) + { leftButtonStartDrag(cm, event, pos, behavior) } + else + { leftButtonSelect(cm, event, pos, behavior) } +} + +// Start a text drag. When it ends, see if any dragging actually +// happen, and treat as a click if it didn't. +function leftButtonStartDrag(cm, event, pos, behavior) { + var display = cm.display, moved = false + var dragEnd = operation(cm, function (e) { + if (webkit) { display.scroller.draggable = false } + cm.state.draggingText = false + off(display.wrapper.ownerDocument, "mouseup", dragEnd) + off(display.wrapper.ownerDocument, "mousemove", mouseMove) + off(display.scroller, "dragstart", dragStart) + off(display.scroller, "drop", dragEnd) + if (!moved) { + e_preventDefault(e) + if (!behavior.addNew) + { extendSelection(cm.doc, pos, null, null, behavior.extend) } + // Work around unexplainable focus problem in IE9 (#2127) and Chrome (#3081) + if (webkit || ie && ie_version == 9) + { setTimeout(function () {display.wrapper.ownerDocument.body.focus(); display.input.focus()}, 20) } + else + { display.input.focus() } + } + }) + var mouseMove = function(e2) { + moved = moved || Math.abs(event.clientX - e2.clientX) + Math.abs(event.clientY - e2.clientY) >= 10 + } + var dragStart = function () { return moved = true; } + // Let the drag handler handle this. + if (webkit) { display.scroller.draggable = true } + cm.state.draggingText = dragEnd + dragEnd.copy = !behavior.moveOnDrag + // IE's approach to draggable + if (display.scroller.dragDrop) { display.scroller.dragDrop() } + on(display.wrapper.ownerDocument, "mouseup", dragEnd) + on(display.wrapper.ownerDocument, "mousemove", mouseMove) + on(display.scroller, "dragstart", dragStart) + on(display.scroller, "drop", dragEnd) + + delayBlurEvent(cm) + setTimeout(function () { return display.input.focus(); }, 20) +} + +function rangeForUnit(cm, pos, unit) { + if (unit == "char") { return new Range(pos, pos) } + if (unit == "word") { return cm.findWordAt(pos) } + if (unit == "line") { return new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))) } + var result = unit(cm, pos) + return new Range(result.from, result.to) +} + +// Normal selection, as opposed to text dragging. +function leftButtonSelect(cm, event, start, behavior) { + var display = cm.display, doc = cm.doc + e_preventDefault(event) + + var ourRange, ourIndex, startSel = doc.sel, ranges = startSel.ranges + if (behavior.addNew && !behavior.extend) { + ourIndex = doc.sel.contains(start) + if (ourIndex > -1) + { ourRange = ranges[ourIndex] } + else + { ourRange = new Range(start, start) } + } else { + ourRange = doc.sel.primary() + ourIndex = doc.sel.primIndex + } + + if (behavior.unit == "rectangle") { + if (!behavior.addNew) { ourRange = new Range(start, start) } + start = posFromMouse(cm, event, true, true) + ourIndex = -1 + } else { + var range = rangeForUnit(cm, start, behavior.unit) + if (behavior.extend) + { ourRange = extendRange(ourRange, range.anchor, range.head, behavior.extend) } + else + { ourRange = range } + } + + if (!behavior.addNew) { + ourIndex = 0 + setSelection(doc, new Selection([ourRange], 0), sel_mouse) + startSel = doc.sel + } else if (ourIndex == -1) { + ourIndex = ranges.length + setSelection(doc, normalizeSelection(ranges.concat([ourRange]), ourIndex), + {scroll: false, origin: "*mouse"}) + } else if (ranges.length > 1 && ranges[ourIndex].empty() && behavior.unit == "char" && !behavior.extend) { + setSelection(doc, normalizeSelection(ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0), + {scroll: false, origin: "*mouse"}) + startSel = doc.sel + } else { + replaceOneSelection(doc, ourIndex, ourRange, sel_mouse) + } + + var lastPos = start + function extendTo(pos) { + if (cmp(lastPos, pos) == 0) { return } + lastPos = pos + + if (behavior.unit == "rectangle") { + var ranges = [], tabSize = cm.options.tabSize + var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize) + var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize) + var left = Math.min(startCol, posCol), right = Math.max(startCol, posCol) + for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line)); + line <= end; line++) { + var text = getLine(doc, line).text, leftPos = findColumn(text, left, tabSize) + if (left == right) + { ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos))) } + else if (text.length > leftPos) + { ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize)))) } + } + if (!ranges.length) { ranges.push(new Range(start, start)) } + setSelection(doc, normalizeSelection(startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex), + {origin: "*mouse", scroll: false}) + cm.scrollIntoView(pos) + } else { + var oldRange = ourRange + var range = rangeForUnit(cm, pos, behavior.unit) + var anchor = oldRange.anchor, head + if (cmp(range.anchor, anchor) > 0) { + head = range.head + anchor = minPos(oldRange.from(), range.anchor) + } else { + head = range.anchor + anchor = maxPos(oldRange.to(), range.head) + } + var ranges$1 = startSel.ranges.slice(0) + ranges$1[ourIndex] = bidiSimplify(cm, new Range(clipPos(doc, anchor), head)) + setSelection(doc, normalizeSelection(ranges$1, ourIndex), sel_mouse) + } + } + + var editorSize = display.wrapper.getBoundingClientRect() + // Used to ensure timeout re-tries don't fire when another extend + // happened in the meantime (clearTimeout isn't reliable -- at + // least on Chrome, the timeouts still happen even when cleared, + // if the clear happens after their scheduled firing time). + var counter = 0 + + function extend(e) { + var curCount = ++counter + var cur = posFromMouse(cm, e, true, behavior.unit == "rectangle") + if (!cur) { return } + if (cmp(cur, lastPos) != 0) { + cm.curOp.focus = activeElt() + extendTo(cur) + var visible = visibleLines(display, doc) + if (cur.line >= visible.to || cur.line < visible.from) + { setTimeout(operation(cm, function () {if (counter == curCount) { extend(e) }}), 150) } + } else { + var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0 + if (outside) { setTimeout(operation(cm, function () { + if (counter != curCount) { return } + display.scroller.scrollTop += outside + extend(e) + }), 50) } + } + } + + function done(e) { + cm.state.selectingText = false + counter = Infinity + e_preventDefault(e) + display.input.focus() + off(display.wrapper.ownerDocument, "mousemove", move) + off(display.wrapper.ownerDocument, "mouseup", up) + doc.history.lastSelOrigin = null + } + + var move = operation(cm, function (e) { + if (e.buttons === 0 || !e_button(e)) { done(e) } + else { extend(e) } + }) + var up = operation(cm, done) + cm.state.selectingText = up + on(display.wrapper.ownerDocument, "mousemove", move) + on(display.wrapper.ownerDocument, "mouseup", up) +} + +// Used when mouse-selecting to adjust the anchor to the proper side +// of a bidi jump depending on the visual position of the head. +function bidiSimplify(cm, range) { + var anchor = range.anchor; + var head = range.head; + var anchorLine = getLine(cm.doc, anchor.line) + if (cmp(anchor, head) == 0 && anchor.sticky == head.sticky) { return range } + var order = getOrder(anchorLine) + if (!order) { return range } + var index = getBidiPartAt(order, anchor.ch, anchor.sticky), part = order[index] + if (part.from != anchor.ch && part.to != anchor.ch) { return range } + var boundary = index + ((part.from == anchor.ch) == (part.level != 1) ? 0 : 1) + if (boundary == 0 || boundary == order.length) { return range } + + // Compute the relative visual position of the head compared to the + // anchor (<0 is to the left, >0 to the right) + var leftSide + if (head.line != anchor.line) { + leftSide = (head.line - anchor.line) * (cm.doc.direction == "ltr" ? 1 : -1) > 0 + } else { + var headIndex = getBidiPartAt(order, head.ch, head.sticky) + var dir = headIndex - index || (head.ch - anchor.ch) * (part.level == 1 ? -1 : 1) + if (headIndex == boundary - 1 || headIndex == boundary) + { leftSide = dir < 0 } + else + { leftSide = dir > 0 } + } + + var usePart = order[boundary + (leftSide ? -1 : 0)] + var from = leftSide == (usePart.level == 1) + var ch = from ? usePart.from : usePart.to, sticky = from ? "after" : "before" + return anchor.ch == ch && anchor.sticky == sticky ? range : new Range(new Pos(anchor.line, ch, sticky), head) +} + + +// Determines whether an event happened in the gutter, and fires the +// handlers for the corresponding event. +function gutterEvent(cm, e, type, prevent) { + var mX, mY + if (e.touches) { + mX = e.touches[0].clientX + mY = e.touches[0].clientY + } else { + try { mX = e.clientX; mY = e.clientY } + catch(e) { return false } + } + if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) { return false } + if (prevent) { e_preventDefault(e) } + + var display = cm.display + var lineBox = display.lineDiv.getBoundingClientRect() + + if (mY > lineBox.bottom || !hasHandler(cm, type)) { return e_defaultPrevented(e) } + mY -= lineBox.top - display.viewOffset + + for (var i = 0; i < cm.options.gutters.length; ++i) { + var g = display.gutters.childNodes[i] + if (g && g.getBoundingClientRect().right >= mX) { + var line = lineAtHeight(cm.doc, mY) + var gutter = cm.options.gutters[i] + signal(cm, type, cm, line, gutter, e) + return e_defaultPrevented(e) + } + } +} + +function clickInGutter(cm, e) { + return gutterEvent(cm, e, "gutterClick", true) +} + +// CONTEXT MENU HANDLING + +// To make the context menu work, we need to briefly unhide the +// textarea (making it as unobtrusive as possible) to let the +// right-click take effect on it. +function onContextMenu(cm, e) { + if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) { return } + if (signalDOMEvent(cm, e, "contextmenu")) { return } + cm.display.input.onContextMenu(e) +} + +function contextMenuInGutter(cm, e) { + if (!hasHandler(cm, "gutterContextMenu")) { return false } + return gutterEvent(cm, e, "gutterContextMenu", false) +} + +function themeChanged(cm) { + cm.display.wrapper.className = cm.display.wrapper.className.replace(/\s*cm-s-\S+/g, "") + + cm.options.theme.replace(/(^|\s)\s*/g, " cm-s-") + clearCaches(cm) +} + +var Init = {toString: function(){return "CodeMirror.Init"}} + +var defaults = {} +var optionHandlers = {} + +function defineOptions(CodeMirror) { + var optionHandlers = CodeMirror.optionHandlers + + function option(name, deflt, handle, notOnInit) { + CodeMirror.defaults[name] = deflt + if (handle) { optionHandlers[name] = + notOnInit ? function (cm, val, old) {if (old != Init) { handle(cm, val, old) }} : handle } + } + + CodeMirror.defineOption = option + + // Passed to option handlers when there is no old value. + CodeMirror.Init = Init + + // These two are, on init, called from the constructor because they + // have to be initialized before the editor can start at all. + option("value", "", function (cm, val) { return cm.setValue(val); }, true) + option("mode", null, function (cm, val) { + cm.doc.modeOption = val + loadMode(cm) + }, true) + + option("indentUnit", 2, loadMode, true) + option("indentWithTabs", false) + option("smartIndent", true) + option("tabSize", 4, function (cm) { + resetModeState(cm) + clearCaches(cm) + regChange(cm) + }, true) + + option("lineSeparator", null, function (cm, val) { + cm.doc.lineSep = val + if (!val) { return } + var newBreaks = [], lineNo = cm.doc.first + cm.doc.iter(function (line) { + for (var pos = 0;;) { + var found = line.text.indexOf(val, pos) + if (found == -1) { break } + pos = found + val.length + newBreaks.push(Pos(lineNo, found)) + } + lineNo++ + }) + for (var i = newBreaks.length - 1; i >= 0; i--) + { replaceRange(cm.doc, val, newBreaks[i], Pos(newBreaks[i].line, newBreaks[i].ch + val.length)) } + }) + option("specialChars", /[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b-\u200f\u2028\u2029\ufeff]/g, function (cm, val, old) { + cm.state.specialChars = new RegExp(val.source + (val.test("\t") ? "" : "|\t"), "g") + if (old != Init) { cm.refresh() } + }) + option("specialCharPlaceholder", defaultSpecialCharPlaceholder, function (cm) { return cm.refresh(); }, true) + option("electricChars", true) + option("inputStyle", mobile ? "contenteditable" : "textarea", function () { + throw new Error("inputStyle can not (yet) be changed in a running editor") // FIXME + }, true) + option("spellcheck", false, function (cm, val) { return cm.getInputField().spellcheck = val; }, true) + option("rtlMoveVisually", !windows) + option("wholeLineUpdateBefore", true) + + option("theme", "default", function (cm) { + themeChanged(cm) + guttersChanged(cm) + }, true) + option("keyMap", "default", function (cm, val, old) { + var next = getKeyMap(val) + var prev = old != Init && getKeyMap(old) + if (prev && prev.detach) { prev.detach(cm, next) } + if (next.attach) { next.attach(cm, prev || null) } + }) + option("extraKeys", null) + option("configureMouse", null) + + option("lineWrapping", false, wrappingChanged, true) + option("gutters", [], function (cm) { + setGuttersForLineNumbers(cm.options) + guttersChanged(cm) + }, true) + option("fixedGutter", true, function (cm, val) { + cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + "px" : "0" + cm.refresh() + }, true) + option("coverGutterNextToScrollbar", false, function (cm) { return updateScrollbars(cm); }, true) + option("scrollbarStyle", "native", function (cm) { + initScrollbars(cm) + updateScrollbars(cm) + cm.display.scrollbars.setScrollTop(cm.doc.scrollTop) + cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft) + }, true) + option("lineNumbers", false, function (cm) { + setGuttersForLineNumbers(cm.options) + guttersChanged(cm) + }, true) + option("firstLineNumber", 1, guttersChanged, true) + option("lineNumberFormatter", function (integer) { return integer; }, guttersChanged, true) + option("showCursorWhenSelecting", false, updateSelection, true) + + option("resetSelectionOnContextMenu", true) + option("lineWiseCopyCut", true) + option("pasteLinesPerSelection", true) + + option("readOnly", false, function (cm, val) { + if (val == "nocursor") { + onBlur(cm) + cm.display.input.blur() + } + cm.display.input.readOnlyChanged(val) + }) + option("disableInput", false, function (cm, val) {if (!val) { cm.display.input.reset() }}, true) + option("dragDrop", true, dragDropChanged) + option("allowDropFileTypes", null) + + option("cursorBlinkRate", 530) + option("cursorScrollMargin", 0) + option("cursorHeight", 1, updateSelection, true) + option("singleCursorHeightPerLine", true, updateSelection, true) + option("workTime", 100) + option("workDelay", 100) + option("flattenSpans", true, resetModeState, true) + option("addModeClass", false, resetModeState, true) + option("pollInterval", 100) + option("undoDepth", 200, function (cm, val) { return cm.doc.history.undoDepth = val; }) + option("historyEventDelay", 1250) + option("viewportMargin", 10, function (cm) { return cm.refresh(); }, true) + option("maxHighlightLength", 10000, resetModeState, true) + option("moveInputWithCursor", true, function (cm, val) { + if (!val) { cm.display.input.resetPosition() } + }) + + option("tabindex", null, function (cm, val) { return cm.display.input.getField().tabIndex = val || ""; }) + option("autofocus", null) + option("direction", "ltr", function (cm, val) { return cm.doc.setDirection(val); }, true) + option("phrases", null) +} + +function guttersChanged(cm) { + updateGutters(cm) + regChange(cm) + alignHorizontally(cm) +} + +function dragDropChanged(cm, value, old) { + var wasOn = old && old != Init + if (!value != !wasOn) { + var funcs = cm.display.dragFunctions + var toggle = value ? on : off + toggle(cm.display.scroller, "dragstart", funcs.start) + toggle(cm.display.scroller, "dragenter", funcs.enter) + toggle(cm.display.scroller, "dragover", funcs.over) + toggle(cm.display.scroller, "dragleave", funcs.leave) + toggle(cm.display.scroller, "drop", funcs.drop) + } +} + +function wrappingChanged(cm) { + if (cm.options.lineWrapping) { + addClass(cm.display.wrapper, "CodeMirror-wrap") + cm.display.sizer.style.minWidth = "" + cm.display.sizerWidth = null + } else { + rmClass(cm.display.wrapper, "CodeMirror-wrap") + findMaxLine(cm) + } + estimateLineHeights(cm) + regChange(cm) + clearCaches(cm) + setTimeout(function () { return updateScrollbars(cm); }, 100) +} + +// A CodeMirror instance represents an editor. This is the object +// that user code is usually dealing with. + +function CodeMirror(place, options) { + var this$1 = this; + + if (!(this instanceof CodeMirror)) { return new CodeMirror(place, options) } + + this.options = options = options ? copyObj(options) : {} + // Determine effective options based on given values and defaults. + copyObj(defaults, options, false) + setGuttersForLineNumbers(options) + + var doc = options.value + if (typeof doc == "string") { doc = new Doc(doc, options.mode, null, options.lineSeparator, options.direction) } + else if (options.mode) { doc.modeOption = options.mode } + this.doc = doc + + var input = new CodeMirror.inputStyles[options.inputStyle](this) + var display = this.display = new Display(place, doc, input) + display.wrapper.CodeMirror = this + updateGutters(this) + themeChanged(this) + if (options.lineWrapping) + { this.display.wrapper.className += " CodeMirror-wrap" } + initScrollbars(this) + + this.state = { + keyMaps: [], // stores maps added by addKeyMap + overlays: [], // highlighting overlays, as added by addOverlay + modeGen: 0, // bumped when mode/overlay changes, used to invalidate highlighting info + overwrite: false, + delayingBlurEvent: false, + focused: false, + suppressEdits: false, // used to disable editing during key handlers when in readOnly mode + pasteIncoming: false, cutIncoming: false, // help recognize paste/cut edits in input.poll + selectingText: false, + draggingText: false, + highlight: new Delayed(), // stores highlight worker timeout + keySeq: null, // Unfinished key sequence + specialChars: null + } + + if (options.autofocus && !mobile) { display.input.focus() } + + // Override magic textarea content restore that IE sometimes does + // on our hidden textarea on reload + if (ie && ie_version < 11) { setTimeout(function () { return this$1.display.input.reset(true); }, 20) } + + registerEventHandlers(this) + ensureGlobalHandlers() + + startOperation(this) + this.curOp.forceUpdate = true + attachDoc(this, doc) + + if ((options.autofocus && !mobile) || this.hasFocus()) + { setTimeout(bind(onFocus, this), 20) } + else + { onBlur(this) } + + for (var opt in optionHandlers) { if (optionHandlers.hasOwnProperty(opt)) + { optionHandlers[opt](this$1, options[opt], Init) } } + maybeUpdateLineNumberWidth(this) + if (options.finishInit) { options.finishInit(this) } + for (var i = 0; i < initHooks.length; ++i) { initHooks[i](this$1) } + endOperation(this) + // Suppress optimizelegibility in Webkit, since it breaks text + // measuring on line wrapping boundaries. + if (webkit && options.lineWrapping && + getComputedStyle(display.lineDiv).textRendering == "optimizelegibility") + { display.lineDiv.style.textRendering = "auto" } +} + +// The default configuration options. +CodeMirror.defaults = defaults +// Functions to run when options are changed. +CodeMirror.optionHandlers = optionHandlers + +// Attach the necessary event handlers when initializing the editor +function registerEventHandlers(cm) { + var d = cm.display + on(d.scroller, "mousedown", operation(cm, onMouseDown)) + // Older IE's will not fire a second mousedown for a double click + if (ie && ie_version < 11) + { on(d.scroller, "dblclick", operation(cm, function (e) { + if (signalDOMEvent(cm, e)) { return } + var pos = posFromMouse(cm, e) + if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) { return } + e_preventDefault(e) + var word = cm.findWordAt(pos) + extendSelection(cm.doc, word.anchor, word.head) + })) } + else + { on(d.scroller, "dblclick", function (e) { return signalDOMEvent(cm, e) || e_preventDefault(e); }) } + // Some browsers fire contextmenu *after* opening the menu, at + // which point we can't mess with it anymore. Context menu is + // handled in onMouseDown for these browsers. + if (!captureRightClick) { on(d.scroller, "contextmenu", function (e) { return onContextMenu(cm, e); }) } + + // Used to suppress mouse event handling when a touch happens + var touchFinished, prevTouch = {end: 0} + function finishTouch() { + if (d.activeTouch) { + touchFinished = setTimeout(function () { return d.activeTouch = null; }, 1000) + prevTouch = d.activeTouch + prevTouch.end = +new Date + } + } + function isMouseLikeTouchEvent(e) { + if (e.touches.length != 1) { return false } + var touch = e.touches[0] + return touch.radiusX <= 1 && touch.radiusY <= 1 + } + function farAway(touch, other) { + if (other.left == null) { return true } + var dx = other.left - touch.left, dy = other.top - touch.top + return dx * dx + dy * dy > 20 * 20 + } + on(d.scroller, "touchstart", function (e) { + if (!signalDOMEvent(cm, e) && !isMouseLikeTouchEvent(e) && !clickInGutter(cm, e)) { + d.input.ensurePolled() + clearTimeout(touchFinished) + var now = +new Date + d.activeTouch = {start: now, moved: false, + prev: now - prevTouch.end <= 300 ? prevTouch : null} + if (e.touches.length == 1) { + d.activeTouch.left = e.touches[0].pageX + d.activeTouch.top = e.touches[0].pageY + } + } + }) + on(d.scroller, "touchmove", function () { + if (d.activeTouch) { d.activeTouch.moved = true } + }) + on(d.scroller, "touchend", function (e) { + var touch = d.activeTouch + if (touch && !eventInWidget(d, e) && touch.left != null && + !touch.moved && new Date - touch.start < 300) { + var pos = cm.coordsChar(d.activeTouch, "page"), range + if (!touch.prev || farAway(touch, touch.prev)) // Single tap + { range = new Range(pos, pos) } + else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) // Double tap + { range = cm.findWordAt(pos) } + else // Triple tap + { range = new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))) } + cm.setSelection(range.anchor, range.head) + cm.focus() + e_preventDefault(e) + } + finishTouch() + }) + on(d.scroller, "touchcancel", finishTouch) + + // Sync scrolling between fake scrollbars and real scrollable + // area, ensure viewport is updated when scrolling. + on(d.scroller, "scroll", function () { + if (d.scroller.clientHeight) { + updateScrollTop(cm, d.scroller.scrollTop) + setScrollLeft(cm, d.scroller.scrollLeft, true) + signal(cm, "scroll", cm) + } + }) + + // Listen to wheel events in order to try and update the viewport on time. + on(d.scroller, "mousewheel", function (e) { return onScrollWheel(cm, e); }) + on(d.scroller, "DOMMouseScroll", function (e) { return onScrollWheel(cm, e); }) + + // Prevent wrapper from ever scrolling + on(d.wrapper, "scroll", function () { return d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; }) + + d.dragFunctions = { + enter: function (e) {if (!signalDOMEvent(cm, e)) { e_stop(e) }}, + over: function (e) {if (!signalDOMEvent(cm, e)) { onDragOver(cm, e); e_stop(e) }}, + start: function (e) { return onDragStart(cm, e); }, + drop: operation(cm, onDrop), + leave: function (e) {if (!signalDOMEvent(cm, e)) { clearDragCursor(cm) }} + } + + var inp = d.input.getField() + on(inp, "keyup", function (e) { return onKeyUp.call(cm, e); }) + on(inp, "keydown", operation(cm, onKeyDown)) + on(inp, "keypress", operation(cm, onKeyPress)) + on(inp, "focus", function (e) { return onFocus(cm, e); }) + on(inp, "blur", function (e) { return onBlur(cm, e); }) +} + +var initHooks = [] +CodeMirror.defineInitHook = function (f) { return initHooks.push(f); } + +// Indent the given line. The how parameter can be "smart", +// "add"/null, "subtract", or "prev". When aggressive is false +// (typically set to true for forced single-line indents), empty +// lines are not indented, and places where the mode returns Pass +// are left alone. +function indentLine(cm, n, how, aggressive) { + var doc = cm.doc, state + if (how == null) { how = "add" } + if (how == "smart") { + // Fall back to "prev" when the mode doesn't have an indentation + // method. + if (!doc.mode.indent) { how = "prev" } + else { state = getContextBefore(cm, n).state } + } + + var tabSize = cm.options.tabSize + var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize) + if (line.stateAfter) { line.stateAfter = null } + var curSpaceString = line.text.match(/^\s*/)[0], indentation + if (!aggressive && !/\S/.test(line.text)) { + indentation = 0 + how = "not" + } else if (how == "smart") { + indentation = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text) + if (indentation == Pass || indentation > 150) { + if (!aggressive) { return } + how = "prev" + } + } + if (how == "prev") { + if (n > doc.first) { indentation = countColumn(getLine(doc, n-1).text, null, tabSize) } + else { indentation = 0 } + } else if (how == "add") { + indentation = curSpace + cm.options.indentUnit + } else if (how == "subtract") { + indentation = curSpace - cm.options.indentUnit + } else if (typeof how == "number") { + indentation = curSpace + how + } + indentation = Math.max(0, indentation) + + var indentString = "", pos = 0 + if (cm.options.indentWithTabs) + { for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += "\t"} } + if (pos < indentation) { indentString += spaceStr(indentation - pos) } + + if (indentString != curSpaceString) { + replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), "+input") + line.stateAfter = null + return true + } else { + // Ensure that, if the cursor was in the whitespace at the start + // of the line, it is moved to the end of that space. + for (var i$1 = 0; i$1 < doc.sel.ranges.length; i$1++) { + var range = doc.sel.ranges[i$1] + if (range.head.line == n && range.head.ch < curSpaceString.length) { + var pos$1 = Pos(n, curSpaceString.length) + replaceOneSelection(doc, i$1, new Range(pos$1, pos$1)) + break + } + } + } +} + +// This will be set to a {lineWise: bool, text: [string]} object, so +// that, when pasting, we know what kind of selections the copied +// text was made out of. +var lastCopied = null + +function setLastCopied(newLastCopied) { + lastCopied = newLastCopied +} + +function applyTextInput(cm, inserted, deleted, sel, origin) { + var doc = cm.doc + cm.display.shift = false + if (!sel) { sel = doc.sel } + + var paste = cm.state.pasteIncoming || origin == "paste" + var textLines = splitLinesAuto(inserted), multiPaste = null + // When pasting N lines into N selections, insert one line per selection + if (paste && sel.ranges.length > 1) { + if (lastCopied && lastCopied.text.join("\n") == inserted) { + if (sel.ranges.length % lastCopied.text.length == 0) { + multiPaste = [] + for (var i = 0; i < lastCopied.text.length; i++) + { multiPaste.push(doc.splitLines(lastCopied.text[i])) } + } + } else if (textLines.length == sel.ranges.length && cm.options.pasteLinesPerSelection) { + multiPaste = map(textLines, function (l) { return [l]; }) + } + } + + var updateInput + // Normal behavior is to insert the new text into every selection + for (var i$1 = sel.ranges.length - 1; i$1 >= 0; i$1--) { + var range = sel.ranges[i$1] + var from = range.from(), to = range.to() + if (range.empty()) { + if (deleted && deleted > 0) // Handle deletion + { from = Pos(from.line, from.ch - deleted) } + else if (cm.state.overwrite && !paste) // Handle overwrite + { to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length)) } + else if (lastCopied && lastCopied.lineWise && lastCopied.text.join("\n") == inserted) + { from = to = Pos(from.line, 0) } + } + updateInput = cm.curOp.updateInput + var changeEvent = {from: from, to: to, text: multiPaste ? multiPaste[i$1 % multiPaste.length] : textLines, + origin: origin || (paste ? "paste" : cm.state.cutIncoming ? "cut" : "+input")} + makeChange(cm.doc, changeEvent) + signalLater(cm, "inputRead", cm, changeEvent) + } + if (inserted && !paste) + { triggerElectric(cm, inserted) } + + ensureCursorVisible(cm) + cm.curOp.updateInput = updateInput + cm.curOp.typing = true + cm.state.pasteIncoming = cm.state.cutIncoming = false +} + +function handlePaste(e, cm) { + var pasted = e.clipboardData && e.clipboardData.getData("Text") + if (pasted) { + e.preventDefault() + if (!cm.isReadOnly() && !cm.options.disableInput) + { runInOp(cm, function () { return applyTextInput(cm, pasted, 0, null, "paste"); }) } + return true + } +} + +function triggerElectric(cm, inserted) { + // When an 'electric' character is inserted, immediately trigger a reindent + if (!cm.options.electricChars || !cm.options.smartIndent) { return } + var sel = cm.doc.sel + + for (var i = sel.ranges.length - 1; i >= 0; i--) { + var range = sel.ranges[i] + if (range.head.ch > 100 || (i && sel.ranges[i - 1].head.line == range.head.line)) { continue } + var mode = cm.getModeAt(range.head) + var indented = false + if (mode.electricChars) { + for (var j = 0; j < mode.electricChars.length; j++) + { if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) { + indented = indentLine(cm, range.head.line, "smart") + break + } } + } else if (mode.electricInput) { + if (mode.electricInput.test(getLine(cm.doc, range.head.line).text.slice(0, range.head.ch))) + { indented = indentLine(cm, range.head.line, "smart") } + } + if (indented) { signalLater(cm, "electricInput", cm, range.head.line) } + } +} + +function copyableRanges(cm) { + var text = [], ranges = [] + for (var i = 0; i < cm.doc.sel.ranges.length; i++) { + var line = cm.doc.sel.ranges[i].head.line + var lineRange = {anchor: Pos(line, 0), head: Pos(line + 1, 0)} + ranges.push(lineRange) + text.push(cm.getRange(lineRange.anchor, lineRange.head)) + } + return {text: text, ranges: ranges} +} + +function disableBrowserMagic(field, spellcheck) { + field.setAttribute("autocorrect", "off") + field.setAttribute("autocapitalize", "off") + field.setAttribute("spellcheck", !!spellcheck) +} + +function hiddenTextarea() { + var te = elt("textarea", null, null, "position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none") + var div = elt("div", [te], null, "overflow: hidden; position: relative; width: 3px; height: 0px;") + // The textarea is kept positioned near the cursor to prevent the + // fact that it'll be scrolled into view on input from scrolling + // our fake cursor out of view. On webkit, when wrap=off, paste is + // very slow. So make the area wide instead. + if (webkit) { te.style.width = "1000px" } + else { te.setAttribute("wrap", "off") } + // If border: 0; -- iOS fails to open keyboard (issue #1287) + if (ios) { te.style.border = "1px solid black" } + disableBrowserMagic(te) + return div +} + +// The publicly visible API. Note that methodOp(f) means +// 'wrap f in an operation, performed on its `this` parameter'. + +// This is not the complete set of editor methods. Most of the +// methods defined on the Doc type are also injected into +// CodeMirror.prototype, for backwards compatibility and +// convenience. + +function addEditorMethods(CodeMirror) { + var optionHandlers = CodeMirror.optionHandlers + + var helpers = CodeMirror.helpers = {} + + CodeMirror.prototype = { + constructor: CodeMirror, + focus: function(){window.focus(); this.display.input.focus()}, + + setOption: function(option, value) { + var options = this.options, old = options[option] + if (options[option] == value && option != "mode") { return } + options[option] = value + if (optionHandlers.hasOwnProperty(option)) + { operation(this, optionHandlers[option])(this, value, old) } + signal(this, "optionChange", this, option) + }, + + getOption: function(option) {return this.options[option]}, + getDoc: function() {return this.doc}, + + addKeyMap: function(map, bottom) { + this.state.keyMaps[bottom ? "push" : "unshift"](getKeyMap(map)) + }, + removeKeyMap: function(map) { + var maps = this.state.keyMaps + for (var i = 0; i < maps.length; ++i) + { if (maps[i] == map || maps[i].name == map) { + maps.splice(i, 1) + return true + } } + }, + + addOverlay: methodOp(function(spec, options) { + var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec) + if (mode.startState) { throw new Error("Overlays may not be stateful.") } + insertSorted(this.state.overlays, + {mode: mode, modeSpec: spec, opaque: options && options.opaque, + priority: (options && options.priority) || 0}, + function (overlay) { return overlay.priority; }) + this.state.modeGen++ + regChange(this) + }), + removeOverlay: methodOp(function(spec) { + var this$1 = this; + + var overlays = this.state.overlays + for (var i = 0; i < overlays.length; ++i) { + var cur = overlays[i].modeSpec + if (cur == spec || typeof spec == "string" && cur.name == spec) { + overlays.splice(i, 1) + this$1.state.modeGen++ + regChange(this$1) + return + } + } + }), + + indentLine: methodOp(function(n, dir, aggressive) { + if (typeof dir != "string" && typeof dir != "number") { + if (dir == null) { dir = this.options.smartIndent ? "smart" : "prev" } + else { dir = dir ? "add" : "subtract" } + } + if (isLine(this.doc, n)) { indentLine(this, n, dir, aggressive) } + }), + indentSelection: methodOp(function(how) { + var this$1 = this; + + var ranges = this.doc.sel.ranges, end = -1 + for (var i = 0; i < ranges.length; i++) { + var range = ranges[i] + if (!range.empty()) { + var from = range.from(), to = range.to() + var start = Math.max(end, from.line) + end = Math.min(this$1.lastLine(), to.line - (to.ch ? 0 : 1)) + 1 + for (var j = start; j < end; ++j) + { indentLine(this$1, j, how) } + var newRanges = this$1.doc.sel.ranges + if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i].from().ch > 0) + { replaceOneSelection(this$1.doc, i, new Range(from, newRanges[i].to()), sel_dontScroll) } + } else if (range.head.line > end) { + indentLine(this$1, range.head.line, how, true) + end = range.head.line + if (i == this$1.doc.sel.primIndex) { ensureCursorVisible(this$1) } + } + } + }), + + // Fetch the parser token for a given character. Useful for hacks + // that want to inspect the mode state (say, for completion). + getTokenAt: function(pos, precise) { + return takeToken(this, pos, precise) + }, + + getLineTokens: function(line, precise) { + return takeToken(this, Pos(line), precise, true) + }, + + getTokenTypeAt: function(pos) { + pos = clipPos(this.doc, pos) + var styles = getLineStyles(this, getLine(this.doc, pos.line)) + var before = 0, after = (styles.length - 1) / 2, ch = pos.ch + var type + if (ch == 0) { type = styles[2] } + else { for (;;) { + var mid = (before + after) >> 1 + if ((mid ? styles[mid * 2 - 1] : 0) >= ch) { after = mid } + else if (styles[mid * 2 + 1] < ch) { before = mid + 1 } + else { type = styles[mid * 2 + 2]; break } + } } + var cut = type ? type.indexOf("overlay ") : -1 + return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1) + }, + + getModeAt: function(pos) { + var mode = this.doc.mode + if (!mode.innerMode) { return mode } + return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode + }, + + getHelper: function(pos, type) { + return this.getHelpers(pos, type)[0] + }, + + getHelpers: function(pos, type) { + var this$1 = this; + + var found = [] + if (!helpers.hasOwnProperty(type)) { return found } + var help = helpers[type], mode = this.getModeAt(pos) + if (typeof mode[type] == "string") { + if (help[mode[type]]) { found.push(help[mode[type]]) } + } else if (mode[type]) { + for (var i = 0; i < mode[type].length; i++) { + var val = help[mode[type][i]] + if (val) { found.push(val) } + } + } else if (mode.helperType && help[mode.helperType]) { + found.push(help[mode.helperType]) + } else if (help[mode.name]) { + found.push(help[mode.name]) + } + for (var i$1 = 0; i$1 < help._global.length; i$1++) { + var cur = help._global[i$1] + if (cur.pred(mode, this$1) && indexOf(found, cur.val) == -1) + { found.push(cur.val) } + } + return found + }, + + getStateAfter: function(line, precise) { + var doc = this.doc + line = clipLine(doc, line == null ? doc.first + doc.size - 1: line) + return getContextBefore(this, line + 1, precise).state + }, + + cursorCoords: function(start, mode) { + var pos, range = this.doc.sel.primary() + if (start == null) { pos = range.head } + else if (typeof start == "object") { pos = clipPos(this.doc, start) } + else { pos = start ? range.from() : range.to() } + return cursorCoords(this, pos, mode || "page") + }, + + charCoords: function(pos, mode) { + return charCoords(this, clipPos(this.doc, pos), mode || "page") + }, + + coordsChar: function(coords, mode) { + coords = fromCoordSystem(this, coords, mode || "page") + return coordsChar(this, coords.left, coords.top) + }, + + lineAtHeight: function(height, mode) { + height = fromCoordSystem(this, {top: height, left: 0}, mode || "page").top + return lineAtHeight(this.doc, height + this.display.viewOffset) + }, + heightAtLine: function(line, mode, includeWidgets) { + var end = false, lineObj + if (typeof line == "number") { + var last = this.doc.first + this.doc.size - 1 + if (line < this.doc.first) { line = this.doc.first } + else if (line > last) { line = last; end = true } + lineObj = getLine(this.doc, line) + } else { + lineObj = line + } + return intoCoordSystem(this, lineObj, {top: 0, left: 0}, mode || "page", includeWidgets || end).top + + (end ? this.doc.height - heightAtLine(lineObj) : 0) + }, + + defaultTextHeight: function() { return textHeight(this.display) }, + defaultCharWidth: function() { return charWidth(this.display) }, + + getViewport: function() { return {from: this.display.viewFrom, to: this.display.viewTo}}, + + addWidget: function(pos, node, scroll, vert, horiz) { + var display = this.display + pos = cursorCoords(this, clipPos(this.doc, pos)) + var top = pos.bottom, left = pos.left + node.style.position = "absolute" + node.setAttribute("cm-ignore-events", "true") + this.display.input.setUneditable(node) + display.sizer.appendChild(node) + if (vert == "over") { + top = pos.top + } else if (vert == "above" || vert == "near") { + var vspace = Math.max(display.wrapper.clientHeight, this.doc.height), + hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth) + // Default to positioning above (if specified and possible); otherwise default to positioning below + if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight) + { top = pos.top - node.offsetHeight } + else if (pos.bottom + node.offsetHeight <= vspace) + { top = pos.bottom } + if (left + node.offsetWidth > hspace) + { left = hspace - node.offsetWidth } + } + node.style.top = top + "px" + node.style.left = node.style.right = "" + if (horiz == "right") { + left = display.sizer.clientWidth - node.offsetWidth + node.style.right = "0px" + } else { + if (horiz == "left") { left = 0 } + else if (horiz == "middle") { left = (display.sizer.clientWidth - node.offsetWidth) / 2 } + node.style.left = left + "px" + } + if (scroll) + { scrollIntoView(this, {left: left, top: top, right: left + node.offsetWidth, bottom: top + node.offsetHeight}) } + }, + + triggerOnKeyDown: methodOp(onKeyDown), + triggerOnKeyPress: methodOp(onKeyPress), + triggerOnKeyUp: onKeyUp, + triggerOnMouseDown: methodOp(onMouseDown), + + execCommand: function(cmd) { + if (commands.hasOwnProperty(cmd)) + { return commands[cmd].call(null, this) } + }, + + triggerElectric: methodOp(function(text) { triggerElectric(this, text) }), + + findPosH: function(from, amount, unit, visually) { + var this$1 = this; + + var dir = 1 + if (amount < 0) { dir = -1; amount = -amount } + var cur = clipPos(this.doc, from) + for (var i = 0; i < amount; ++i) { + cur = findPosH(this$1.doc, cur, dir, unit, visually) + if (cur.hitSide) { break } + } + return cur + }, + + moveH: methodOp(function(dir, unit) { + var this$1 = this; + + this.extendSelectionsBy(function (range) { + if (this$1.display.shift || this$1.doc.extend || range.empty()) + { return findPosH(this$1.doc, range.head, dir, unit, this$1.options.rtlMoveVisually) } + else + { return dir < 0 ? range.from() : range.to() } + }, sel_move) + }), + + deleteH: methodOp(function(dir, unit) { + var sel = this.doc.sel, doc = this.doc + if (sel.somethingSelected()) + { doc.replaceSelection("", null, "+delete") } + else + { deleteNearSelection(this, function (range) { + var other = findPosH(doc, range.head, dir, unit, false) + return dir < 0 ? {from: other, to: range.head} : {from: range.head, to: other} + }) } + }), + + findPosV: function(from, amount, unit, goalColumn) { + var this$1 = this; + + var dir = 1, x = goalColumn + if (amount < 0) { dir = -1; amount = -amount } + var cur = clipPos(this.doc, from) + for (var i = 0; i < amount; ++i) { + var coords = cursorCoords(this$1, cur, "div") + if (x == null) { x = coords.left } + else { coords.left = x } + cur = findPosV(this$1, coords, dir, unit) + if (cur.hitSide) { break } + } + return cur + }, + + moveV: methodOp(function(dir, unit) { + var this$1 = this; + + var doc = this.doc, goals = [] + var collapse = !this.display.shift && !doc.extend && doc.sel.somethingSelected() + doc.extendSelectionsBy(function (range) { + if (collapse) + { return dir < 0 ? range.from() : range.to() } + var headPos = cursorCoords(this$1, range.head, "div") + if (range.goalColumn != null) { headPos.left = range.goalColumn } + goals.push(headPos.left) + var pos = findPosV(this$1, headPos, dir, unit) + if (unit == "page" && range == doc.sel.primary()) + { addToScrollTop(this$1, charCoords(this$1, pos, "div").top - headPos.top) } + return pos + }, sel_move) + if (goals.length) { for (var i = 0; i < doc.sel.ranges.length; i++) + { doc.sel.ranges[i].goalColumn = goals[i] } } + }), + + // Find the word at the given position (as returned by coordsChar). + findWordAt: function(pos) { + var doc = this.doc, line = getLine(doc, pos.line).text + var start = pos.ch, end = pos.ch + if (line) { + var helper = this.getHelper(pos, "wordChars") + if ((pos.sticky == "before" || end == line.length) && start) { --start; } else { ++end } + var startChar = line.charAt(start) + var check = isWordChar(startChar, helper) + ? function (ch) { return isWordChar(ch, helper); } + : /\s/.test(startChar) ? function (ch) { return /\s/.test(ch); } + : function (ch) { return (!/\s/.test(ch) && !isWordChar(ch)); } + while (start > 0 && check(line.charAt(start - 1))) { --start } + while (end < line.length && check(line.charAt(end))) { ++end } + } + return new Range(Pos(pos.line, start), Pos(pos.line, end)) + }, + + toggleOverwrite: function(value) { + if (value != null && value == this.state.overwrite) { return } + if (this.state.overwrite = !this.state.overwrite) + { addClass(this.display.cursorDiv, "CodeMirror-overwrite") } + else + { rmClass(this.display.cursorDiv, "CodeMirror-overwrite") } + + signal(this, "overwriteToggle", this, this.state.overwrite) + }, + hasFocus: function() { return this.display.input.getField() == activeElt() }, + isReadOnly: function() { return !!(this.options.readOnly || this.doc.cantEdit) }, + + scrollTo: methodOp(function (x, y) { scrollToCoords(this, x, y) }), + getScrollInfo: function() { + var scroller = this.display.scroller + return {left: scroller.scrollLeft, top: scroller.scrollTop, + height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight, + width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth, + clientHeight: displayHeight(this), clientWidth: displayWidth(this)} + }, + + scrollIntoView: methodOp(function(range, margin) { + if (range == null) { + range = {from: this.doc.sel.primary().head, to: null} + if (margin == null) { margin = this.options.cursorScrollMargin } + } else if (typeof range == "number") { + range = {from: Pos(range, 0), to: null} + } else if (range.from == null) { + range = {from: range, to: null} + } + if (!range.to) { range.to = range.from } + range.margin = margin || 0 + + if (range.from.line != null) { + scrollToRange(this, range) + } else { + scrollToCoordsRange(this, range.from, range.to, range.margin) + } + }), + + setSize: methodOp(function(width, height) { + var this$1 = this; + + var interpret = function (val) { return typeof val == "number" || /^\d+$/.test(String(val)) ? val + "px" : val; } + if (width != null) { this.display.wrapper.style.width = interpret(width) } + if (height != null) { this.display.wrapper.style.height = interpret(height) } + if (this.options.lineWrapping) { clearLineMeasurementCache(this) } + var lineNo = this.display.viewFrom + this.doc.iter(lineNo, this.display.viewTo, function (line) { + if (line.widgets) { for (var i = 0; i < line.widgets.length; i++) + { if (line.widgets[i].noHScroll) { regLineChange(this$1, lineNo, "widget"); break } } } + ++lineNo + }) + this.curOp.forceUpdate = true + signal(this, "refresh", this) + }), + + operation: function(f){return runInOp(this, f)}, + startOperation: function(){return startOperation(this)}, + endOperation: function(){return endOperation(this)}, + + refresh: methodOp(function() { + var oldHeight = this.display.cachedTextHeight + regChange(this) + this.curOp.forceUpdate = true + clearCaches(this) + scrollToCoords(this, this.doc.scrollLeft, this.doc.scrollTop) + updateGutterSpace(this) + if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5) + { estimateLineHeights(this) } + signal(this, "refresh", this) + }), + + swapDoc: methodOp(function(doc) { + var old = this.doc + old.cm = null + attachDoc(this, doc) + clearCaches(this) + this.display.input.reset() + scrollToCoords(this, doc.scrollLeft, doc.scrollTop) + this.curOp.forceScroll = true + signalLater(this, "swapDoc", this, old) + return old + }), + + phrase: function(phraseText) { + var phrases = this.options.phrases + return phrases && Object.prototype.hasOwnProperty.call(phrases, phraseText) ? phrases[phraseText] : phraseText + }, + + getInputField: function(){return this.display.input.getField()}, + getWrapperElement: function(){return this.display.wrapper}, + getScrollerElement: function(){return this.display.scroller}, + getGutterElement: function(){return this.display.gutters} + } + eventMixin(CodeMirror) + + CodeMirror.registerHelper = function(type, name, value) { + if (!helpers.hasOwnProperty(type)) { helpers[type] = CodeMirror[type] = {_global: []} } + helpers[type][name] = value + } + CodeMirror.registerGlobalHelper = function(type, name, predicate, value) { + CodeMirror.registerHelper(type, name, value) + helpers[type]._global.push({pred: predicate, val: value}) + } +} + +// Used for horizontal relative motion. Dir is -1 or 1 (left or +// right), unit can be "char", "column" (like char, but doesn't +// cross line boundaries), "word" (across next word), or "group" (to +// the start of next group of word or non-word-non-whitespace +// chars). The visually param controls whether, in right-to-left +// text, direction 1 means to move towards the next index in the +// string, or towards the character to the right of the current +// position. The resulting position will have a hitSide=true +// property if it reached the end of the document. +function findPosH(doc, pos, dir, unit, visually) { + var oldPos = pos + var origDir = dir + var lineObj = getLine(doc, pos.line) + function findNextLine() { + var l = pos.line + dir + if (l < doc.first || l >= doc.first + doc.size) { return false } + pos = new Pos(l, pos.ch, pos.sticky) + return lineObj = getLine(doc, l) + } + function moveOnce(boundToLine) { + var next + if (visually) { + next = moveVisually(doc.cm, lineObj, pos, dir) + } else { + next = moveLogically(lineObj, pos, dir) + } + if (next == null) { + if (!boundToLine && findNextLine()) + { pos = endOfLine(visually, doc.cm, lineObj, pos.line, dir) } + else + { return false } + } else { + pos = next + } + return true + } + + if (unit == "char") { + moveOnce() + } else if (unit == "column") { + moveOnce(true) + } else if (unit == "word" || unit == "group") { + var sawType = null, group = unit == "group" + var helper = doc.cm && doc.cm.getHelper(pos, "wordChars") + for (var first = true;; first = false) { + if (dir < 0 && !moveOnce(!first)) { break } + var cur = lineObj.text.charAt(pos.ch) || "\n" + var type = isWordChar(cur, helper) ? "w" + : group && cur == "\n" ? "n" + : !group || /\s/.test(cur) ? null + : "p" + if (group && !first && !type) { type = "s" } + if (sawType && sawType != type) { + if (dir < 0) {dir = 1; moveOnce(); pos.sticky = "after"} + break + } + + if (type) { sawType = type } + if (dir > 0 && !moveOnce(!first)) { break } + } + } + var result = skipAtomic(doc, pos, oldPos, origDir, true) + if (equalCursorPos(oldPos, result)) { result.hitSide = true } + return result +} + +// For relative vertical movement. Dir may be -1 or 1. Unit can be +// "page" or "line". The resulting position will have a hitSide=true +// property if it reached the end of the document. +function findPosV(cm, pos, dir, unit) { + var doc = cm.doc, x = pos.left, y + if (unit == "page") { + var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight) + var moveAmount = Math.max(pageSize - .5 * textHeight(cm.display), 3) + y = (dir > 0 ? pos.bottom : pos.top) + dir * moveAmount + + } else if (unit == "line") { + y = dir > 0 ? pos.bottom + 3 : pos.top - 3 + } + var target + for (;;) { + target = coordsChar(cm, x, y) + if (!target.outside) { break } + if (dir < 0 ? y <= 0 : y >= doc.height) { target.hitSide = true; break } + y += dir * 5 + } + return target +} + +// CONTENTEDITABLE INPUT STYLE + +var ContentEditableInput = function(cm) { + this.cm = cm + this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null + this.polling = new Delayed() + this.composing = null + this.gracePeriod = false + this.readDOMTimeout = null +}; + +ContentEditableInput.prototype.init = function (display) { + var this$1 = this; + + var input = this, cm = input.cm + var div = input.div = display.lineDiv + disableBrowserMagic(div, cm.options.spellcheck) + + on(div, "paste", function (e) { + if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { return } + // IE doesn't fire input events, so we schedule a read for the pasted content in this way + if (ie_version <= 11) { setTimeout(operation(cm, function () { return this$1.updateFromDOM(); }), 20) } + }) + + on(div, "compositionstart", function (e) { + this$1.composing = {data: e.data, done: false} + }) + on(div, "compositionupdate", function (e) { + if (!this$1.composing) { this$1.composing = {data: e.data, done: false} } + }) + on(div, "compositionend", function (e) { + if (this$1.composing) { + if (e.data != this$1.composing.data) { this$1.readFromDOMSoon() } + this$1.composing.done = true + } + }) + + on(div, "touchstart", function () { return input.forceCompositionEnd(); }) + + on(div, "input", function () { + if (!this$1.composing) { this$1.readFromDOMSoon() } + }) + + function onCopyCut(e) { + if (signalDOMEvent(cm, e)) { return } + if (cm.somethingSelected()) { + setLastCopied({lineWise: false, text: cm.getSelections()}) + if (e.type == "cut") { cm.replaceSelection("", null, "cut") } + } else if (!cm.options.lineWiseCopyCut) { + return + } else { + var ranges = copyableRanges(cm) + setLastCopied({lineWise: true, text: ranges.text}) + if (e.type == "cut") { + cm.operation(function () { + cm.setSelections(ranges.ranges, 0, sel_dontScroll) + cm.replaceSelection("", null, "cut") + }) + } + } + if (e.clipboardData) { + e.clipboardData.clearData() + var content = lastCopied.text.join("\n") + // iOS exposes the clipboard API, but seems to discard content inserted into it + e.clipboardData.setData("Text", content) + if (e.clipboardData.getData("Text") == content) { + e.preventDefault() + return + } + } + // Old-fashioned briefly-focus-a-textarea hack + var kludge = hiddenTextarea(), te = kludge.firstChild + cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild) + te.value = lastCopied.text.join("\n") + var hadFocus = document.activeElement + selectInput(te) + setTimeout(function () { + cm.display.lineSpace.removeChild(kludge) + hadFocus.focus() + if (hadFocus == div) { input.showPrimarySelection() } + }, 50) + } + on(div, "copy", onCopyCut) + on(div, "cut", onCopyCut) +}; + +ContentEditableInput.prototype.prepareSelection = function () { + var result = prepareSelection(this.cm, false) + result.focus = this.cm.state.focused + return result +}; + +ContentEditableInput.prototype.showSelection = function (info, takeFocus) { + if (!info || !this.cm.display.view.length) { return } + if (info.focus || takeFocus) { this.showPrimarySelection() } + this.showMultipleSelections(info) +}; + +ContentEditableInput.prototype.getSelection = function () { + return this.cm.display.wrapper.ownerDocument.getSelection() +}; + +ContentEditableInput.prototype.showPrimarySelection = function () { + var sel = this.getSelection(), cm = this.cm, prim = cm.doc.sel.primary() + var from = prim.from(), to = prim.to() + + if (cm.display.viewTo == cm.display.viewFrom || from.line >= cm.display.viewTo || to.line < cm.display.viewFrom) { + sel.removeAllRanges() + return + } + + var curAnchor = domToPos(cm, sel.anchorNode, sel.anchorOffset) + var curFocus = domToPos(cm, sel.focusNode, sel.focusOffset) + if (curAnchor && !curAnchor.bad && curFocus && !curFocus.bad && + cmp(minPos(curAnchor, curFocus), from) == 0 && + cmp(maxPos(curAnchor, curFocus), to) == 0) + { return } + + var view = cm.display.view + var start = (from.line >= cm.display.viewFrom && posToDOM(cm, from)) || + {node: view[0].measure.map[2], offset: 0} + var end = to.line < cm.display.viewTo && posToDOM(cm, to) + if (!end) { + var measure = view[view.length - 1].measure + var map = measure.maps ? measure.maps[measure.maps.length - 1] : measure.map + end = {node: map[map.length - 1], offset: map[map.length - 2] - map[map.length - 3]} + } + + if (!start || !end) { + sel.removeAllRanges() + return + } + + var old = sel.rangeCount && sel.getRangeAt(0), rng + try { rng = range(start.node, start.offset, end.offset, end.node) } + catch(e) {} // Our model of the DOM might be outdated, in which case the range we try to set can be impossible + if (rng) { + if (!gecko && cm.state.focused) { + sel.collapse(start.node, start.offset) + if (!rng.collapsed) { + sel.removeAllRanges() + sel.addRange(rng) + } + } else { + sel.removeAllRanges() + sel.addRange(rng) + } + if (old && sel.anchorNode == null) { sel.addRange(old) } + else if (gecko) { this.startGracePeriod() } + } + this.rememberSelection() +}; + +ContentEditableInput.prototype.startGracePeriod = function () { + var this$1 = this; + + clearTimeout(this.gracePeriod) + this.gracePeriod = setTimeout(function () { + this$1.gracePeriod = false + if (this$1.selectionChanged()) + { this$1.cm.operation(function () { return this$1.cm.curOp.selectionChanged = true; }) } + }, 20) +}; + +ContentEditableInput.prototype.showMultipleSelections = function (info) { + removeChildrenAndAdd(this.cm.display.cursorDiv, info.cursors) + removeChildrenAndAdd(this.cm.display.selectionDiv, info.selection) +}; + +ContentEditableInput.prototype.rememberSelection = function () { + var sel = this.getSelection() + this.lastAnchorNode = sel.anchorNode; this.lastAnchorOffset = sel.anchorOffset + this.lastFocusNode = sel.focusNode; this.lastFocusOffset = sel.focusOffset +}; + +ContentEditableInput.prototype.selectionInEditor = function () { + var sel = this.getSelection() + if (!sel.rangeCount) { return false } + var node = sel.getRangeAt(0).commonAncestorContainer + return contains(this.div, node) +}; + +ContentEditableInput.prototype.focus = function () { + if (this.cm.options.readOnly != "nocursor") { + if (!this.selectionInEditor()) + { this.showSelection(this.prepareSelection(), true) } + this.div.focus() + } +}; +ContentEditableInput.prototype.blur = function () { this.div.blur() }; +ContentEditableInput.prototype.getField = function () { return this.div }; + +ContentEditableInput.prototype.supportsTouch = function () { return true }; + +ContentEditableInput.prototype.receivedFocus = function () { + var input = this + if (this.selectionInEditor()) + { this.pollSelection() } + else + { runInOp(this.cm, function () { return input.cm.curOp.selectionChanged = true; }) } + + function poll() { + if (input.cm.state.focused) { + input.pollSelection() + input.polling.set(input.cm.options.pollInterval, poll) + } + } + this.polling.set(this.cm.options.pollInterval, poll) +}; + +ContentEditableInput.prototype.selectionChanged = function () { + var sel = this.getSelection() + return sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset || + sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset +}; + +ContentEditableInput.prototype.pollSelection = function () { + if (this.readDOMTimeout != null || this.gracePeriod || !this.selectionChanged()) { return } + var sel = this.getSelection(), cm = this.cm + // On Android Chrome (version 56, at least), backspacing into an + // uneditable block element will put the cursor in that element, + // and then, because it's not editable, hide the virtual keyboard. + // Because Android doesn't allow us to actually detect backspace + // presses in a sane way, this code checks for when that happens + // and simulates a backspace press in this case. + if (android && chrome && this.cm.options.gutters.length && isInGutter(sel.anchorNode)) { + this.cm.triggerOnKeyDown({type: "keydown", keyCode: 8, preventDefault: Math.abs}) + this.blur() + this.focus() + return + } + if (this.composing) { return } + this.rememberSelection() + var anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset) + var head = domToPos(cm, sel.focusNode, sel.focusOffset) + if (anchor && head) { runInOp(cm, function () { + setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll) + if (anchor.bad || head.bad) { cm.curOp.selectionChanged = true } + }) } +}; + +ContentEditableInput.prototype.pollContent = function () { + if (this.readDOMTimeout != null) { + clearTimeout(this.readDOMTimeout) + this.readDOMTimeout = null + } + + var cm = this.cm, display = cm.display, sel = cm.doc.sel.primary() + var from = sel.from(), to = sel.to() + if (from.ch == 0 && from.line > cm.firstLine()) + { from = Pos(from.line - 1, getLine(cm.doc, from.line - 1).length) } + if (to.ch == getLine(cm.doc, to.line).text.length && to.line < cm.lastLine()) + { to = Pos(to.line + 1, 0) } + if (from.line < display.viewFrom || to.line > display.viewTo - 1) { return false } + + var fromIndex, fromLine, fromNode + if (from.line == display.viewFrom || (fromIndex = findViewIndex(cm, from.line)) == 0) { + fromLine = lineNo(display.view[0].line) + fromNode = display.view[0].node + } else { + fromLine = lineNo(display.view[fromIndex].line) + fromNode = display.view[fromIndex - 1].node.nextSibling + } + var toIndex = findViewIndex(cm, to.line) + var toLine, toNode + if (toIndex == display.view.length - 1) { + toLine = display.viewTo - 1 + toNode = display.lineDiv.lastChild + } else { + toLine = lineNo(display.view[toIndex + 1].line) - 1 + toNode = display.view[toIndex + 1].node.previousSibling + } + + if (!fromNode) { return false } + var newText = cm.doc.splitLines(domTextBetween(cm, fromNode, toNode, fromLine, toLine)) + var oldText = getBetween(cm.doc, Pos(fromLine, 0), Pos(toLine, getLine(cm.doc, toLine).text.length)) + while (newText.length > 1 && oldText.length > 1) { + if (lst(newText) == lst(oldText)) { newText.pop(); oldText.pop(); toLine-- } + else if (newText[0] == oldText[0]) { newText.shift(); oldText.shift(); fromLine++ } + else { break } + } + + var cutFront = 0, cutEnd = 0 + var newTop = newText[0], oldTop = oldText[0], maxCutFront = Math.min(newTop.length, oldTop.length) + while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront)) + { ++cutFront } + var newBot = lst(newText), oldBot = lst(oldText) + var maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0), + oldBot.length - (oldText.length == 1 ? cutFront : 0)) + while (cutEnd < maxCutEnd && + newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) + { ++cutEnd } + // Try to move start of change to start of selection if ambiguous + if (newText.length == 1 && oldText.length == 1 && fromLine == from.line) { + while (cutFront && cutFront > from.ch && + newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) { + cutFront-- + cutEnd++ + } + } + + newText[newText.length - 1] = newBot.slice(0, newBot.length - cutEnd).replace(/^\u200b+/, "") + newText[0] = newText[0].slice(cutFront).replace(/\u200b+$/, "") + + var chFrom = Pos(fromLine, cutFront) + var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0) + if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) { + replaceRange(cm.doc, newText, chFrom, chTo, "+input") + return true + } +}; + +ContentEditableInput.prototype.ensurePolled = function () { + this.forceCompositionEnd() +}; +ContentEditableInput.prototype.reset = function () { + this.forceCompositionEnd() +}; +ContentEditableInput.prototype.forceCompositionEnd = function () { + if (!this.composing) { return } + clearTimeout(this.readDOMTimeout) + this.composing = null + this.updateFromDOM() + this.div.blur() + this.div.focus() +}; +ContentEditableInput.prototype.readFromDOMSoon = function () { + var this$1 = this; + + if (this.readDOMTimeout != null) { return } + this.readDOMTimeout = setTimeout(function () { + this$1.readDOMTimeout = null + if (this$1.composing) { + if (this$1.composing.done) { this$1.composing = null } + else { return } + } + this$1.updateFromDOM() + }, 80) +}; + +ContentEditableInput.prototype.updateFromDOM = function () { + var this$1 = this; + + if (this.cm.isReadOnly() || !this.pollContent()) + { runInOp(this.cm, function () { return regChange(this$1.cm); }) } +}; + +ContentEditableInput.prototype.setUneditable = function (node) { + node.contentEditable = "false" +}; + +ContentEditableInput.prototype.onKeyPress = function (e) { + if (e.charCode == 0 || this.composing) { return } + e.preventDefault() + if (!this.cm.isReadOnly()) + { operation(this.cm, applyTextInput)(this.cm, String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), 0) } +}; + +ContentEditableInput.prototype.readOnlyChanged = function (val) { + this.div.contentEditable = String(val != "nocursor") +}; + +ContentEditableInput.prototype.onContextMenu = function () {}; +ContentEditableInput.prototype.resetPosition = function () {}; + +ContentEditableInput.prototype.needsContentAttribute = true + +function posToDOM(cm, pos) { + var view = findViewForLine(cm, pos.line) + if (!view || view.hidden) { return null } + var line = getLine(cm.doc, pos.line) + var info = mapFromLineView(view, line, pos.line) + + var order = getOrder(line, cm.doc.direction), side = "left" + if (order) { + var partPos = getBidiPartAt(order, pos.ch) + side = partPos % 2 ? "right" : "left" + } + var result = nodeAndOffsetInLineMap(info.map, pos.ch, side) + result.offset = result.collapse == "right" ? result.end : result.start + return result +} + +function isInGutter(node) { + for (var scan = node; scan; scan = scan.parentNode) + { if (/CodeMirror-gutter-wrapper/.test(scan.className)) { return true } } + return false +} + +function badPos(pos, bad) { if (bad) { pos.bad = true; } return pos } + +function domTextBetween(cm, from, to, fromLine, toLine) { + var text = "", closing = false, lineSep = cm.doc.lineSeparator(), extraLinebreak = false + function recognizeMarker(id) { return function (marker) { return marker.id == id; } } + function close() { + if (closing) { + text += lineSep + if (extraLinebreak) { text += lineSep } + closing = extraLinebreak = false + } + } + function addText(str) { + if (str) { + close() + text += str + } + } + function walk(node) { + if (node.nodeType == 1) { + var cmText = node.getAttribute("cm-text") + if (cmText) { + addText(cmText) + return + } + var markerID = node.getAttribute("cm-marker"), range + if (markerID) { + var found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID)) + if (found.length && (range = found[0].find(0))) + { addText(getBetween(cm.doc, range.from, range.to).join(lineSep)) } + return + } + if (node.getAttribute("contenteditable") == "false") { return } + var isBlock = /^(pre|div|p|li|table|br)$/i.test(node.nodeName) + if (!/^br$/i.test(node.nodeName) && node.textContent.length == 0) { return } + + if (isBlock) { close() } + for (var i = 0; i < node.childNodes.length; i++) + { walk(node.childNodes[i]) } + + if (/^(pre|p)$/i.test(node.nodeName)) { extraLinebreak = true } + if (isBlock) { closing = true } + } else if (node.nodeType == 3) { + addText(node.nodeValue.replace(/\u200b/g, "").replace(/\u00a0/g, " ")) + } + } + for (;;) { + walk(from) + if (from == to) { break } + from = from.nextSibling + extraLinebreak = false + } + return text +} + +function domToPos(cm, node, offset) { + var lineNode + if (node == cm.display.lineDiv) { + lineNode = cm.display.lineDiv.childNodes[offset] + if (!lineNode) { return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true) } + node = null; offset = 0 + } else { + for (lineNode = node;; lineNode = lineNode.parentNode) { + if (!lineNode || lineNode == cm.display.lineDiv) { return null } + if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) { break } + } + } + for (var i = 0; i < cm.display.view.length; i++) { + var lineView = cm.display.view[i] + if (lineView.node == lineNode) + { return locateNodeInLineView(lineView, node, offset) } + } +} + +function locateNodeInLineView(lineView, node, offset) { + var wrapper = lineView.text.firstChild, bad = false + if (!node || !contains(wrapper, node)) { return badPos(Pos(lineNo(lineView.line), 0), true) } + if (node == wrapper) { + bad = true + node = wrapper.childNodes[offset] + offset = 0 + if (!node) { + var line = lineView.rest ? lst(lineView.rest) : lineView.line + return badPos(Pos(lineNo(line), line.text.length), bad) + } + } + + var textNode = node.nodeType == 3 ? node : null, topNode = node + if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) { + textNode = node.firstChild + if (offset) { offset = textNode.nodeValue.length } + } + while (topNode.parentNode != wrapper) { topNode = topNode.parentNode } + var measure = lineView.measure, maps = measure.maps + + function find(textNode, topNode, offset) { + for (var i = -1; i < (maps ? maps.length : 0); i++) { + var map = i < 0 ? measure.map : maps[i] + for (var j = 0; j < map.length; j += 3) { + var curNode = map[j + 2] + if (curNode == textNode || curNode == topNode) { + var line = lineNo(i < 0 ? lineView.line : lineView.rest[i]) + var ch = map[j] + offset + if (offset < 0 || curNode != textNode) { ch = map[j + (offset ? 1 : 0)] } + return Pos(line, ch) + } + } + } + } + var found = find(textNode, topNode, offset) + if (found) { return badPos(found, bad) } + + // FIXME this is all really shaky. might handle the few cases it needs to handle, but likely to cause problems + for (var after = topNode.nextSibling, dist = textNode ? textNode.nodeValue.length - offset : 0; after; after = after.nextSibling) { + found = find(after, after.firstChild, 0) + if (found) + { return badPos(Pos(found.line, found.ch - dist), bad) } + else + { dist += after.textContent.length } + } + for (var before = topNode.previousSibling, dist$1 = offset; before; before = before.previousSibling) { + found = find(before, before.firstChild, -1) + if (found) + { return badPos(Pos(found.line, found.ch + dist$1), bad) } + else + { dist$1 += before.textContent.length } + } +} + +// TEXTAREA INPUT STYLE + +var TextareaInput = function(cm) { + this.cm = cm + // See input.poll and input.reset + this.prevInput = "" + + // Flag that indicates whether we expect input to appear real soon + // now (after some event like 'keypress' or 'input') and are + // polling intensively. + this.pollingFast = false + // Self-resetting timeout for the poller + this.polling = new Delayed() + // Used to work around IE issue with selection being forgotten when focus moves away from textarea + this.hasSelection = false + this.composing = null +}; + +TextareaInput.prototype.init = function (display) { + var this$1 = this; + + var input = this, cm = this.cm + this.createField(display) + var te = this.textarea + + display.wrapper.insertBefore(this.wrapper, display.wrapper.firstChild) + + // Needed to hide big blue blinking cursor on Mobile Safari (doesn't seem to work in iOS 8 anymore) + if (ios) { te.style.width = "0px" } + + on(te, "input", function () { + if (ie && ie_version >= 9 && this$1.hasSelection) { this$1.hasSelection = null } + input.poll() + }) + + on(te, "paste", function (e) { + if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { return } + + cm.state.pasteIncoming = true + input.fastPoll() + }) + + function prepareCopyCut(e) { + if (signalDOMEvent(cm, e)) { return } + if (cm.somethingSelected()) { + setLastCopied({lineWise: false, text: cm.getSelections()}) + } else if (!cm.options.lineWiseCopyCut) { + return + } else { + var ranges = copyableRanges(cm) + setLastCopied({lineWise: true, text: ranges.text}) + if (e.type == "cut") { + cm.setSelections(ranges.ranges, null, sel_dontScroll) + } else { + input.prevInput = "" + te.value = ranges.text.join("\n") + selectInput(te) + } + } + if (e.type == "cut") { cm.state.cutIncoming = true } + } + on(te, "cut", prepareCopyCut) + on(te, "copy", prepareCopyCut) + + on(display.scroller, "paste", function (e) { + if (eventInWidget(display, e) || signalDOMEvent(cm, e)) { return } + cm.state.pasteIncoming = true + input.focus() + }) + + // Prevent normal selection in the editor (we handle our own) + on(display.lineSpace, "selectstart", function (e) { + if (!eventInWidget(display, e)) { e_preventDefault(e) } + }) + + on(te, "compositionstart", function () { + var start = cm.getCursor("from") + if (input.composing) { input.composing.range.clear() } + input.composing = { + start: start, + range: cm.markText(start, cm.getCursor("to"), {className: "CodeMirror-composing"}) + } + }) + on(te, "compositionend", function () { + if (input.composing) { + input.poll() + input.composing.range.clear() + input.composing = null + } + }) +}; + +TextareaInput.prototype.createField = function (_display) { + // Wraps and hides input textarea + this.wrapper = hiddenTextarea() + // The semihidden textarea that is focused when the editor is + // focused, and receives input. + this.textarea = this.wrapper.firstChild +}; + +TextareaInput.prototype.prepareSelection = function () { + // Redraw the selection and/or cursor + var cm = this.cm, display = cm.display, doc = cm.doc + var result = prepareSelection(cm) + + // Move the hidden textarea near the cursor to prevent scrolling artifacts + if (cm.options.moveInputWithCursor) { + var headPos = cursorCoords(cm, doc.sel.primary().head, "div") + var wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect() + result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10, + headPos.top + lineOff.top - wrapOff.top)) + result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10, + headPos.left + lineOff.left - wrapOff.left)) + } + + return result +}; + +TextareaInput.prototype.showSelection = function (drawn) { + var cm = this.cm, display = cm.display + removeChildrenAndAdd(display.cursorDiv, drawn.cursors) + removeChildrenAndAdd(display.selectionDiv, drawn.selection) + if (drawn.teTop != null) { + this.wrapper.style.top = drawn.teTop + "px" + this.wrapper.style.left = drawn.teLeft + "px" + } +}; + +// Reset the input to correspond to the selection (or to be empty, +// when not typing and nothing is selected) +TextareaInput.prototype.reset = function (typing) { + if (this.contextMenuPending || this.composing) { return } + var cm = this.cm + if (cm.somethingSelected()) { + this.prevInput = "" + var content = cm.getSelection() + this.textarea.value = content + if (cm.state.focused) { selectInput(this.textarea) } + if (ie && ie_version >= 9) { this.hasSelection = content } + } else if (!typing) { + this.prevInput = this.textarea.value = "" + if (ie && ie_version >= 9) { this.hasSelection = null } + } +}; + +TextareaInput.prototype.getField = function () { return this.textarea }; + +TextareaInput.prototype.supportsTouch = function () { return false }; + +TextareaInput.prototype.focus = function () { + if (this.cm.options.readOnly != "nocursor" && (!mobile || activeElt() != this.textarea)) { + try { this.textarea.focus() } + catch (e) {} // IE8 will throw if the textarea is display: none or not in DOM + } +}; + +TextareaInput.prototype.blur = function () { this.textarea.blur() }; + +TextareaInput.prototype.resetPosition = function () { + this.wrapper.style.top = this.wrapper.style.left = 0 +}; + +TextareaInput.prototype.receivedFocus = function () { this.slowPoll() }; + +// Poll for input changes, using the normal rate of polling. This +// runs as long as the editor is focused. +TextareaInput.prototype.slowPoll = function () { + var this$1 = this; + + if (this.pollingFast) { return } + this.polling.set(this.cm.options.pollInterval, function () { + this$1.poll() + if (this$1.cm.state.focused) { this$1.slowPoll() } + }) +}; + +// When an event has just come in that is likely to add or change +// something in the input textarea, we poll faster, to ensure that +// the change appears on the screen quickly. +TextareaInput.prototype.fastPoll = function () { + var missed = false, input = this + input.pollingFast = true + function p() { + var changed = input.poll() + if (!changed && !missed) {missed = true; input.polling.set(60, p)} + else {input.pollingFast = false; input.slowPoll()} + } + input.polling.set(20, p) +}; + +// Read input from the textarea, and update the document to match. +// When something is selected, it is present in the textarea, and +// selected (unless it is huge, in which case a placeholder is +// used). When nothing is selected, the cursor sits after previously +// seen text (can be empty), which is stored in prevInput (we must +// not reset the textarea when typing, because that breaks IME). +TextareaInput.prototype.poll = function () { + var this$1 = this; + + var cm = this.cm, input = this.textarea, prevInput = this.prevInput + // Since this is called a *lot*, try to bail out as cheaply as + // possible when it is clear that nothing happened. hasSelection + // will be the case when there is a lot of text in the textarea, + // in which case reading its value would be expensive. + if (this.contextMenuPending || !cm.state.focused || + (hasSelection(input) && !prevInput && !this.composing) || + cm.isReadOnly() || cm.options.disableInput || cm.state.keySeq) + { return false } + + var text = input.value + // If nothing changed, bail. + if (text == prevInput && !cm.somethingSelected()) { return false } + // Work around nonsensical selection resetting in IE9/10, and + // inexplicable appearance of private area unicode characters on + // some key combos in Mac (#2689). + if (ie && ie_version >= 9 && this.hasSelection === text || + mac && /[\uf700-\uf7ff]/.test(text)) { + cm.display.input.reset() + return false + } + + if (cm.doc.sel == cm.display.selForContextMenu) { + var first = text.charCodeAt(0) + if (first == 0x200b && !prevInput) { prevInput = "\u200b" } + if (first == 0x21da) { this.reset(); return this.cm.execCommand("undo") } + } + // Find the part of the input that is actually new + var same = 0, l = Math.min(prevInput.length, text.length) + while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) { ++same } + + runInOp(cm, function () { + applyTextInput(cm, text.slice(same), prevInput.length - same, + null, this$1.composing ? "*compose" : null) + + // Don't leave long text in the textarea, since it makes further polling slow + if (text.length > 1000 || text.indexOf("\n") > -1) { input.value = this$1.prevInput = "" } + else { this$1.prevInput = text } + + if (this$1.composing) { + this$1.composing.range.clear() + this$1.composing.range = cm.markText(this$1.composing.start, cm.getCursor("to"), + {className: "CodeMirror-composing"}) + } + }) + return true +}; + +TextareaInput.prototype.ensurePolled = function () { + if (this.pollingFast && this.poll()) { this.pollingFast = false } +}; + +TextareaInput.prototype.onKeyPress = function () { + if (ie && ie_version >= 9) { this.hasSelection = null } + this.fastPoll() +}; + +TextareaInput.prototype.onContextMenu = function (e) { + var input = this, cm = input.cm, display = cm.display, te = input.textarea + var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop + if (!pos || presto) { return } // Opera is difficult. + + // Reset the current text selection only if the click is done outside of the selection + // and 'resetSelectionOnContextMenu' option is true. + var reset = cm.options.resetSelectionOnContextMenu + if (reset && cm.doc.sel.contains(pos) == -1) + { operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll) } + + var oldCSS = te.style.cssText, oldWrapperCSS = input.wrapper.style.cssText + input.wrapper.style.cssText = "position: absolute" + var wrapperBox = input.wrapper.getBoundingClientRect() + te.style.cssText = "position: absolute; width: 30px; height: 30px;\n top: " + (e.clientY - wrapperBox.top - 5) + "px; left: " + (e.clientX - wrapperBox.left - 5) + "px;\n z-index: 1000; background: " + (ie ? "rgba(255, 255, 255, .05)" : "transparent") + ";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);" + var oldScrollY + if (webkit) { oldScrollY = window.scrollY } // Work around Chrome issue (#2712) + display.input.focus() + if (webkit) { window.scrollTo(null, oldScrollY) } + display.input.reset() + // Adds "Select all" to context menu in FF + if (!cm.somethingSelected()) { te.value = input.prevInput = " " } + input.contextMenuPending = true + display.selForContextMenu = cm.doc.sel + clearTimeout(display.detectingSelectAll) + + // Select-all will be greyed out if there's nothing to select, so + // this adds a zero-width space so that we can later check whether + // it got selected. + function prepareSelectAllHack() { + if (te.selectionStart != null) { + var selected = cm.somethingSelected() + var extval = "\u200b" + (selected ? te.value : "") + te.value = "\u21da" // Used to catch context-menu undo + te.value = extval + input.prevInput = selected ? "" : "\u200b" + te.selectionStart = 1; te.selectionEnd = extval.length + // Re-set this, in case some other handler touched the + // selection in the meantime. + display.selForContextMenu = cm.doc.sel + } + } + function rehide() { + input.contextMenuPending = false + input.wrapper.style.cssText = oldWrapperCSS + te.style.cssText = oldCSS + if (ie && ie_version < 9) { display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos) } + + // Try to detect the user choosing select-all + if (te.selectionStart != null) { + if (!ie || (ie && ie_version < 9)) { prepareSelectAllHack() } + var i = 0, poll = function () { + if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0 && + te.selectionEnd > 0 && input.prevInput == "\u200b") { + operation(cm, selectAll)(cm) + } else if (i++ < 10) { + display.detectingSelectAll = setTimeout(poll, 500) + } else { + display.selForContextMenu = null + display.input.reset() + } + } + display.detectingSelectAll = setTimeout(poll, 200) + } + } + + if (ie && ie_version >= 9) { prepareSelectAllHack() } + if (captureRightClick) { + e_stop(e) + var mouseup = function () { + off(window, "mouseup", mouseup) + setTimeout(rehide, 20) + } + on(window, "mouseup", mouseup) + } else { + setTimeout(rehide, 50) + } +}; + +TextareaInput.prototype.readOnlyChanged = function (val) { + if (!val) { this.reset() } + this.textarea.disabled = val == "nocursor" +}; + +TextareaInput.prototype.setUneditable = function () {}; + +TextareaInput.prototype.needsContentAttribute = false + +function fromTextArea(textarea, options) { + options = options ? copyObj(options) : {} + options.value = textarea.value + if (!options.tabindex && textarea.tabIndex) + { options.tabindex = textarea.tabIndex } + if (!options.placeholder && textarea.placeholder) + { options.placeholder = textarea.placeholder } + // Set autofocus to true if this textarea is focused, or if it has + // autofocus and no other element is focused. + if (options.autofocus == null) { + var hasFocus = activeElt() + options.autofocus = hasFocus == textarea || + textarea.getAttribute("autofocus") != null && hasFocus == document.body + } + + function save() {textarea.value = cm.getValue()} + + var realSubmit + if (textarea.form) { + on(textarea.form, "submit", save) + // Deplorable hack to make the submit method do the right thing. + if (!options.leaveSubmitMethodAlone) { + var form = textarea.form + realSubmit = form.submit + try { + var wrappedSubmit = form.submit = function () { + save() + form.submit = realSubmit + form.submit() + form.submit = wrappedSubmit + } + } catch(e) {} + } + } + + options.finishInit = function (cm) { + cm.save = save + cm.getTextArea = function () { return textarea; } + cm.toTextArea = function () { + cm.toTextArea = isNaN // Prevent this from being ran twice + save() + textarea.parentNode.removeChild(cm.getWrapperElement()) + textarea.style.display = "" + if (textarea.form) { + off(textarea.form, "submit", save) + if (typeof textarea.form.submit == "function") + { textarea.form.submit = realSubmit } + } + } + } + + textarea.style.display = "none" + var cm = CodeMirror(function (node) { return textarea.parentNode.insertBefore(node, textarea.nextSibling); }, + options) + return cm +} + +function addLegacyProps(CodeMirror) { + CodeMirror.off = off + CodeMirror.on = on + CodeMirror.wheelEventPixels = wheelEventPixels + CodeMirror.Doc = Doc + CodeMirror.splitLines = splitLinesAuto + CodeMirror.countColumn = countColumn + CodeMirror.findColumn = findColumn + CodeMirror.isWordChar = isWordCharBasic + CodeMirror.Pass = Pass + CodeMirror.signal = signal + CodeMirror.Line = Line + CodeMirror.changeEnd = changeEnd + CodeMirror.scrollbarModel = scrollbarModel + CodeMirror.Pos = Pos + CodeMirror.cmpPos = cmp + CodeMirror.modes = modes + CodeMirror.mimeModes = mimeModes + CodeMirror.resolveMode = resolveMode + CodeMirror.getMode = getMode + CodeMirror.modeExtensions = modeExtensions + CodeMirror.extendMode = extendMode + CodeMirror.copyState = copyState + CodeMirror.startState = startState + CodeMirror.innerMode = innerMode + CodeMirror.commands = commands + CodeMirror.keyMap = keyMap + CodeMirror.keyName = keyName + CodeMirror.isModifierKey = isModifierKey + CodeMirror.lookupKey = lookupKey + CodeMirror.normalizeKeyMap = normalizeKeyMap + CodeMirror.StringStream = StringStream + CodeMirror.SharedTextMarker = SharedTextMarker + CodeMirror.TextMarker = TextMarker + CodeMirror.LineWidget = LineWidget + CodeMirror.e_preventDefault = e_preventDefault + CodeMirror.e_stopPropagation = e_stopPropagation + CodeMirror.e_stop = e_stop + CodeMirror.addClass = addClass + CodeMirror.contains = contains + CodeMirror.rmClass = rmClass + CodeMirror.keyNames = keyNames +} + +// EDITOR CONSTRUCTOR + +defineOptions(CodeMirror) + +addEditorMethods(CodeMirror) + +// Set up methods on CodeMirror's prototype to redirect to the editor's document. +var dontDelegate = "iter insert remove copy getEditor constructor".split(" ") +for (var prop in Doc.prototype) { if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0) + { CodeMirror.prototype[prop] = (function(method) { + return function() {return method.apply(this.doc, arguments)} + })(Doc.prototype[prop]) } } + +eventMixin(Doc) + +// INPUT HANDLING + +CodeMirror.inputStyles = {"textarea": TextareaInput, "contenteditable": ContentEditableInput} + +// MODE DEFINITION AND QUERYING + +// Extra arguments are stored as the mode's dependencies, which is +// used by (legacy) mechanisms like loadmode.js to automatically +// load a mode. (Preferred mechanism is the require/define calls.) +CodeMirror.defineMode = function(name/*, mode, …*/) { + if (!CodeMirror.defaults.mode && name != "null") { CodeMirror.defaults.mode = name } + defineMode.apply(this, arguments) +} + +CodeMirror.defineMIME = defineMIME + +// Minimal default mode. +CodeMirror.defineMode("null", function () { return ({token: function (stream) { return stream.skipToEnd(); }}); }) +CodeMirror.defineMIME("text/plain", "null") + +// EXTENSIONS + +CodeMirror.defineExtension = function (name, func) { + CodeMirror.prototype[name] = func +} +CodeMirror.defineDocExtension = function (name, func) { + Doc.prototype[name] = func +} + +CodeMirror.fromTextArea = fromTextArea + +addLegacyProps(CodeMirror) + +CodeMirror.version = "5.40.2" + +return CodeMirror; + +}))); \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/lib/diff/README.md b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/lib/diff/README.md new file mode 100644 index 0000000..e1a90b0 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/lib/diff/README.md @@ -0,0 +1,34 @@ +# diff + +implementation of myers diff algorithm + +[![Build Status](https://travis-ci.org/Swatinem/diff.png?branch=master)](https://travis-ci.org/Swatinem/diff) +[![Coverage Status](https://coveralls.io/repos/Swatinem/diff/badge.png?branch=master)](https://coveralls.io/r/Swatinem/diff) +[![Dependency Status](https://gemnasium.com/Swatinem/diff.png)](https://gemnasium.com/Swatinem/diff) + + +This uses the [*An O(ND) Difference Algorithm and Its Variations*](http://www.xmailserver.org/diff2.pdf) +Also see http://simplygenius.net/Article/DiffTutorial2 and +http://www.mathertel.de/Diff/ViewSrc.aspx for more inspiration + +## Installation + + $ npm install diff + $ component install Swatinem/diff + +## Usage + +### diff(a, b, [eql(a, b)]) + +Given two arrays (or array-likes, such as strings) `a` and `b` and an optional +equal function `eql`, this will return an array with the following operations: +* *nop* the element is in both arrays +* *ins* the element is only in array `b` and will be inserted +* *del* the element in only in array `a` and will be removed +* *rep* the element from `a` will be replaced by the element from `b`. +This is essentially the same as a del+ins + +## License + + LGPLv3 + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/lib/diff/swatinem_diff.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/lib/diff/swatinem_diff.js new file mode 100644 index 0000000..d21b57d --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/lib/diff/swatinem_diff.js @@ -0,0 +1,207 @@ +/******************************************************************************* + + Key portions of code below was borrowed from: + https://github.com/Swatinem/diff + + License is LGPL3 (thanks!) as per: + https://github.com/Swatinem/diff/blob/b58391504759/README.md + + I chose to pick this implementation over + https://github.com/google/diff-match-patch as suggested by CodeMirror + because: + + - Code is clean and simple to read -- useful when unfamiliar with the diff + algorithm, this makes changing the code easier if/when needed. + + - Smaller -- diff_match_patch comes with an extended API most of which is + of no use to the current project. + - diff_match_patch uncompressed: 74.7 KB + - Swatinem's diff uncompressed: 3.66 KB + + - I can easily adapt Swatinem's diff to deal with arrays of strings, which + is best suited for the current project -- it natively work with arrays. + + I removed portions of code which are of no use for the current project. + + I modified the diff script generator (Diff.prototype.editscript) since I + need to generate a script which is compatible with the output of the + diff_match_patch, as expected by CodeMirror. + +**/ + +'use strict'; + +(function(context) { + + // CodeMirror expect these globals: + context.DIFF_INSERT = 1; + context.DIFF_DELETE = -1; + context.DIFF_EQUAL = 0; + context.diff_match_patch = function(){}; + + context.diff_match_patch.prototype.diff_main = function(a, b) { + if ( a === b ) { return [ [ 0, a ] ]; } + var aa = a.match(/\n|[^\n]+\n?/g) || []; + var bb = b.match(/\n|[^\n]+\n?/g) || []; + var d = new Diff(aa, bb, eqlDefault); + return d.editscript(); + }; + + function eqlDefault(a, b) { return a === b; } + + function Diff(a, b, eql) { + this.a = a; + this.b = b; + this.eql = eql; + + this.moda = Array.apply(null, new Array(a.length)).map(true.valueOf, false); + this.modb = Array.apply(null, new Array(b.length)).map(true.valueOf, false); + + // just to save some allocations: + this.down = {}; + this.up = {}; + + this.lcs(0, a.length, 0, b.length); + } + + Diff.prototype.editscript = function Diff_editscript() { + var moda = this.moda, modb = this.modb; + var astart = 0, aend = moda.length; + var bstart = 0, bend = modb.length; + var result = []; + while (astart < aend || bstart < bend) { + if (astart < aend && bstart < bend) { + if (!moda[astart] && !modb[bstart]) { + result.push([ 0, this.a[astart] ]); + astart++; bstart++; + continue; + } else if (moda[astart] && modb[bstart]) { + result.push([ -1, this.a[astart] ]); + result.push([ 1, this.b[bstart] ]); + astart++; bstart++; + continue; + } + } + if (astart < aend && (bstart >= bend || moda[astart])) { + result.push([ -1, this.a[astart] ]); + astart++; + } + if (bstart < bend && (astart >= aend || modb[bstart])) { + result.push([ 1, this.b[bstart] ]); + bstart++; + } + } + return result; + }; + + Diff.prototype.lcs = function Diff_lcs(astart, aend, bstart, bend) { + var a = this.a, b = this.b, eql = this.eql; + // separate common head + while (astart < aend && bstart < bend && eql(a[astart], b[bstart])) { + astart++; bstart++; + } + // separate common tail + while (astart < aend && bstart < bend && eql(a[aend - 1], b[bend - 1])) { + aend--; bend--; + } + + if (astart === aend) { + // only insertions + while (bstart < bend) { + this.modb[bstart] = true; + bstart++; + } + } else if (bend === bstart) { + // only deletions + while (astart < aend) { + this.moda[astart] = true; + astart++; + } + } else { + var snake = this.snake(astart, aend, bstart, bend); + + this.lcs(astart, snake.x, bstart, snake.y); + this.lcs(snake.u, aend, snake.v, bend); + } + }; + + Diff.prototype.snake = function Diff_snake(astart, aend, bstart, bend) { + var a = this.a, b = this.b, eql = this.eql; + + var N = aend - astart, + M = bend - bstart; + + var kdown = astart - bstart; + var kup = aend - bend; + + var delta = N - M; + var deltaOdd = delta & 1; + + var down = this.down; + down[kdown + 1] = astart; + var up = this.up; + up[kup - 1] = aend; + + var Dmax = (N + M + 1) / 2; + for (var D = 0; D <= Dmax; D++) { + var k, x, y; + // forward path + for (k = kdown - D; k <= kdown + D; k += 2) { + if (k === kdown - D) { + x = down[k + 1]; // down + } else { + x = down[k - 1] + 1; // right + if ((k < kdown + D) && (down[k + 1] >= x)) { + x = down[k + 1]; // down + } + } + y = x - k; + + while (x < aend && y < bend && eql(a[x], b[y])) { + x++; y++; // diagonal + } + down[k] = x; + + if (deltaOdd && (kup - D < k) && (k < kup + D) && + up[k] <= down[k]) { + return { + x: down[k], + y: down[k] - k, + u: up[k], + v: up[k] - k, + }; + } + } + + // reverse path + for (k = kup - D; k <= kup + D; k += 2) { + if (k === kup + D) { + x = up[k - 1]; // up + } else { + x = up[k + 1] - 1; // left + if ((k > kup - D) && (up[k - 1] < x)) { + x = up[k - 1]; // up + } + } + y = x - k; + + while (x > astart && y > bstart && eql(a[x - 1], b[y - 1])) { + x--; y--; // diagonal + } + up[k] = x; + + if (!deltaOdd && (kdown - D <= k) && (k <= kdown + D) && + up[k] <= down[k]) { + return { + x: down[k], + y: down[k] - k, + u: up[k], + v: up[k] - k, + }; + } + } + } + }; + + return Diff; +})(self); diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/lib/publicsuffixlist.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/lib/publicsuffixlist.js new file mode 100644 index 0000000..530f224 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/lib/publicsuffixlist.js @@ -0,0 +1,343 @@ +/******************************************************************************* + + publicsuffixlist.js - an efficient javascript implementation to deal with + Mozilla Foundation's Public Suffix List + Copyright (C) 2013 Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + +*/ + +/*! Home: https://github.com/gorhill/publicsuffixlist.js */ + +'use strict'; + +/* + This code is mostly dumb: I consider this to be lower-level code, thus + in order to ensure efficiency, the caller is responsible for sanitizing + the inputs. +*/ + +/******************************************************************************/ + +// A single instance of PublicSuffixList is enough. + +;(function(root) { + +/******************************************************************************/ + +var exceptions = new Map(); +var rules = new Map(); + +// This value dictate how the search will be performed: +// < this.cutoffLength = indexOf() +// >= this.cutoffLength = binary search +var cutoffLength = 256; +var mustPunycode = /[^\w.*-]/; + +/******************************************************************************/ + +// In the context of this code, a domain is defined as: +// "{label}.{public suffix}". +// A single standalone label is a public suffix as per +// http://publicsuffix.org/list/: +// "If no rules match, the prevailing rule is '*' " +// This means 'localhost' is not deemed a domain by this +// code, since according to the definition above, it would be +// evaluated as a public suffix. The caller is therefore responsible to +// decide how to further interpret such public suffix. +// +// `hostname` must be a valid ascii-based hostname. + +function getDomain(hostname) { + // A hostname starting with a dot is not a valid hostname. + if ( !hostname || hostname.charAt(0) === '.' ) { + return ''; + } + hostname = hostname.toLowerCase(); + var suffix = getPublicSuffix(hostname); + if ( suffix === hostname ) { + return ''; + } + var pos = hostname.lastIndexOf('.', hostname.lastIndexOf('.', hostname.length - suffix.length) - 1); + if ( pos <= 0 ) { + return hostname; + } + return hostname.slice(pos + 1); +} + +/******************************************************************************/ + +// Return longest public suffix. +// +// `hostname` must be a valid ascii-based string which respect hostname naming. + +function getPublicSuffix(hostname) { + if ( !hostname ) { + return ''; + } + // Since we slice down the hostname with each pass, the first match + // is the longest, so no need to find all the matching rules. + while ( true ) { + let pos = hostname.indexOf('.'); + if ( pos < 0 ) { + return hostname; + } + if ( search(exceptions, hostname) ) { + return hostname.slice(pos + 1); + } + if ( search(rules, hostname) ) { + return hostname; + } + if ( search(rules, '*' + hostname.slice(pos)) ) { + return hostname; + } + hostname = hostname.slice(pos + 1); + } + // unreachable +} + +/******************************************************************************/ + +// Look up a specific hostname. + +function search(store, hostname) { + // Extract TLD + let tld, remainder; + let pos = hostname.lastIndexOf('.'); + if ( pos === -1 ) { + tld = hostname; + remainder = hostname; + } else { + tld = hostname.slice(pos + 1); + remainder = hostname.slice(0, pos); + } + let substore = store.get(tld); + if ( substore === undefined ) { + return false; + } + // If substore is a string, use indexOf() + if ( typeof substore === 'string' ) { + return substore.indexOf(' ' + remainder + ' ') >= 0; + } + // It is an array: use binary search. + let l = remainder.length; + if ( l >= substore.length ) { + return false; + } + let haystack = substore[l]; + if ( haystack === null ) { + return false; + } + let left = 0; + let right = Math.floor(haystack.length / l + 0.5); + while ( left < right ) { + let i = left + right >> 1; + let needle = haystack.substr(l*i, l); + if ( remainder < needle ) { + right = i; + } else if ( remainder > needle ) { + left = i + 1; + } else { + return true; + } + } + return false; +} + +/******************************************************************************/ + +// Parse and set a UTF-8 text-based suffix list. Format is same as found at: +// http://publicsuffix.org/list/ +// +// `toAscii` is a converter from unicode to punycode. Required since the +// Public Suffix List contains unicode characters. +// Suggestion: use it's quite good. + +function parse(text, toAscii) { + exceptions = new Map(); + rules = new Map(); + + let lineBeg = 0; + let textEnd = text.length; + + while ( lineBeg < textEnd ) { + let lineEnd = text.indexOf('\n', lineBeg); + if ( lineEnd < 0 ) { + lineEnd = text.indexOf('\r', lineBeg); + if ( lineEnd < 0 ) { + lineEnd = textEnd; + } + } + let line = text.slice(lineBeg, lineEnd).trim(); + lineBeg = lineEnd + 1; + + if ( line.length === 0 ) { + continue; + } + + // Ignore comments + let pos = line.indexOf('//'); + if ( pos !== -1 ) { + line = line.slice(0, pos); + } + + // Ignore surrounding whitespaces + line = line.trim(); + if ( line.length === 0 ) { + continue; + } + + // Is this an exception rule? + let store; + if ( line.charAt(0) === '!' ) { + store = exceptions; + line = line.slice(1); + } else { + store = rules; + } + + if ( mustPunycode.test(line) ) { + line = toAscii(line); + } + + // http://publicsuffix.org/list/: + // "... all rules must be canonicalized in the normal way + // for hostnames - lower-case, Punycode ..." + line = line.toLowerCase(); + + // Extract TLD + let tld; + pos = line.lastIndexOf('.'); + if ( pos === -1 ) { + tld = line; + } else { + tld = line.slice(pos + 1); + line = line.slice(0, pos); + } + + // Store suffix using tld as key + let substore = store.get(tld); + if ( substore === undefined ) { + store.set(tld, substore = []); + } + if ( line ) { + substore.push(line); + } + } + + crystallize(exceptions); + crystallize(rules); + + window.dispatchEvent(new CustomEvent('publicSuffixList')); +} + +/******************************************************************************/ + +// Cristallize the storage of suffixes using optimal internal representation +// for future look up. + +function crystallize(store) { + for ( let entry of store ) { + let tld = entry[0]; + let suffixes = entry[1]; + + // No suffix + if ( suffixes.length === 0 ) { + store.set(tld, ''); + continue; + } + + // Concatenated list of suffixes less than cutoff length: + // Store as string, lookup using indexOf() + let s = suffixes.join(' '); + if ( s.length < cutoffLength ) { + store.set(tld, ' ' + s + ' '); + continue; + } + + // Concatenated list of suffixes greater or equal to cutoff length + // Store as array keyed on suffix length, lookup using binary search. + // I borrowed the idea to key on string length here: + // http://ejohn.org/blog/dictionary-lookups-in-javascript/#comment-392072 + let buckets = []; + for ( let suffix of suffixes ) { + let l = suffix.length; + if ( buckets.length <= l ) { + extendArray(buckets, l); + } + if ( buckets[l] === null ) { + buckets[l] = []; + } + buckets[l].push(suffix); + } + for ( let i = 0; i < buckets.length; i++ ) { + let bucket = buckets[i]; + if ( bucket !== null ) { + buckets[i] = bucket.sort().join(''); + } + } + store.set(tld, buckets); + } + + return store; +} + +let extendArray = function(aa, rb) { + for ( let i = aa.length; i <= rb; i++ ) { + aa.push(null); + } +}; + +/******************************************************************************/ + +let selfieMagic = 3; + +let toSelfie = function() { + return { + magic: selfieMagic, + rules: Array.from(rules), + exceptions: Array.from(exceptions) + }; +}; + +let fromSelfie = function(selfie) { + if ( selfie instanceof Object === false || selfie.magic !== selfieMagic ) { + return false; + } + rules = new Map(selfie.rules); + exceptions = new Map(selfie.exceptions); + window.dispatchEvent(new CustomEvent('publicSuffixList')); + return true; +}; + +/******************************************************************************/ + +// Public API + +root = root || window; + +root.publicSuffixList = { + 'version': '1.0', + 'parse': parse, + 'getDomain': getDomain, + 'getPublicSuffix': getPublicSuffix, + 'toSelfie': toSelfie, + 'fromSelfie': fromSelfie +}; + +/******************************************************************************/ + +})(this); + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/lib/punycode.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/lib/punycode.js new file mode 100644 index 0000000..ac68597 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/lib/punycode.js @@ -0,0 +1,530 @@ +/*! https://mths.be/punycode v1.3.2 by @mathias */ +;(function(root) { + + /** Detect free variables */ + var freeExports = typeof exports == 'object' && exports && + !exports.nodeType && exports; + var freeModule = typeof module == 'object' && module && + !module.nodeType && module; + var freeGlobal = typeof global == 'object' && global; + if ( + freeGlobal.global === freeGlobal || + freeGlobal.window === freeGlobal || + freeGlobal.self === freeGlobal + ) { + root = freeGlobal; + } + + /** + * The `punycode` object. + * @name punycode + * @type Object + */ + var punycode, + + /** Highest positive signed 32-bit float value */ + maxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1 + + /** Bootstring parameters */ + base = 36, + tMin = 1, + tMax = 26, + skew = 38, + damp = 700, + initialBias = 72, + initialN = 128, // 0x80 + delimiter = '-', // '\x2D' + + /** Regular expressions */ + regexPunycode = /^xn--/, + regexNonASCII = /[^\x20-\x7E]/, // unprintable ASCII chars + non-ASCII chars + regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g, // RFC 3490 separators + + /** Error messages */ + errors = { + 'overflow': 'Overflow: input needs wider integers to process', + 'not-basic': 'Illegal input >= 0x80 (not a basic code point)', + 'invalid-input': 'Invalid input' + }, + + /** Convenience shortcuts */ + baseMinusTMin = base - tMin, + floor = Math.floor, + stringFromCharCode = String.fromCharCode, + + /** Temporary variable */ + key; + + /*--------------------------------------------------------------------------*/ + + /** + * A generic error utility function. + * @private + * @param {String} type The error type. + * @returns {Error} Throws a `RangeError` with the applicable error message. + */ + function error(type) { + throw RangeError(errors[type]); + } + + /** + * A generic `Array#map` utility function. + * @private + * @param {Array} array The array to iterate over. + * @param {Function} callback The function that gets called for every array + * item. + * @returns {Array} A new array of values returned by the callback function. + */ + function map(array, fn) { + var length = array.length; + var result = []; + while (length--) { + result[length] = fn(array[length]); + } + return result; + } + + /** + * A simple `Array#map`-like wrapper to work with domain name strings or email + * addresses. + * @private + * @param {String} domain The domain name or email address. + * @param {Function} callback The function that gets called for every + * character. + * @returns {Array} A new string of characters returned by the callback + * function. + */ + function mapDomain(string, fn) { + var parts = string.split('@'); + var result = ''; + if (parts.length > 1) { + // In email addresses, only the domain name should be punycoded. Leave + // the local part (i.e. everything up to `@`) intact. + result = parts[0] + '@'; + string = parts[1]; + } + // Avoid `split(regex)` for IE8 compatibility. See #17. + string = string.replace(regexSeparators, '\x2E'); + var labels = string.split('.'); + var encoded = map(labels, fn).join('.'); + return result + encoded; + } + + /** + * Creates an array containing the numeric code points of each Unicode + * character in the string. While JavaScript uses UCS-2 internally, + * this function will convert a pair of surrogate halves (each of which + * UCS-2 exposes as separate characters) into a single code point, + * matching UTF-16. + * @see `punycode.ucs2.encode` + * @see + * @memberOf punycode.ucs2 + * @name decode + * @param {String} string The Unicode input string (UCS-2). + * @returns {Array} The new array of code points. + */ + function ucs2decode(string) { + var output = [], + counter = 0, + length = string.length, + value, + extra; + while (counter < length) { + value = string.charCodeAt(counter++); + if (value >= 0xD800 && value <= 0xDBFF && counter < length) { + // high surrogate, and there is a next character + extra = string.charCodeAt(counter++); + if ((extra & 0xFC00) == 0xDC00) { // low surrogate + output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); + } else { + // unmatched surrogate; only append this code unit, in case the next + // code unit is the high surrogate of a surrogate pair + output.push(value); + counter--; + } + } else { + output.push(value); + } + } + return output; + } + + /** + * Creates a string based on an array of numeric code points. + * @see `punycode.ucs2.decode` + * @memberOf punycode.ucs2 + * @name encode + * @param {Array} codePoints The array of numeric code points. + * @returns {String} The new Unicode string (UCS-2). + */ + function ucs2encode(array) { + return map(array, function(value) { + var output = ''; + if (value > 0xFFFF) { + value -= 0x10000; + output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800); + value = 0xDC00 | value & 0x3FF; + } + output += stringFromCharCode(value); + return output; + }).join(''); + } + + /** + * Converts a basic code point into a digit/integer. + * @see `digitToBasic()` + * @private + * @param {Number} codePoint The basic numeric code point value. + * @returns {Number} The numeric value of a basic code point (for use in + * representing integers) in the range `0` to `base - 1`, or `base` if + * the code point does not represent a value. + */ + function basicToDigit(codePoint) { + if (codePoint - 48 < 10) { + return codePoint - 22; + } + if (codePoint - 65 < 26) { + return codePoint - 65; + } + if (codePoint - 97 < 26) { + return codePoint - 97; + } + return base; + } + + /** + * Converts a digit/integer into a basic code point. + * @see `basicToDigit()` + * @private + * @param {Number} digit The numeric value of a basic code point. + * @returns {Number} The basic code point whose value (when used for + * representing integers) is `digit`, which needs to be in the range + * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is + * used; else, the lowercase form is used. The behavior is undefined + * if `flag` is non-zero and `digit` has no uppercase form. + */ + function digitToBasic(digit, flag) { + // 0..25 map to ASCII a..z or A..Z + // 26..35 map to ASCII 0..9 + return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5); + } + + /** + * Bias adaptation function as per section 3.4 of RFC 3492. + * http://tools.ietf.org/html/rfc3492#section-3.4 + * @private + */ + function adapt(delta, numPoints, firstTime) { + var k = 0; + delta = firstTime ? floor(delta / damp) : delta >> 1; + delta += floor(delta / numPoints); + for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) { + delta = floor(delta / baseMinusTMin); + } + return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); + } + + /** + * Converts a Punycode string of ASCII-only symbols to a string of Unicode + * symbols. + * @memberOf punycode + * @param {String} input The Punycode string of ASCII-only symbols. + * @returns {String} The resulting string of Unicode symbols. + */ + function decode(input) { + // Don't use UCS-2 + var output = [], + inputLength = input.length, + out, + i = 0, + n = initialN, + bias = initialBias, + basic, + j, + index, + oldi, + w, + k, + digit, + t, + /** Cached calculation results */ + baseMinusT; + + // Handle the basic code points: let `basic` be the number of input code + // points before the last delimiter, or `0` if there is none, then copy + // the first basic code points to the output. + + basic = input.lastIndexOf(delimiter); + if (basic < 0) { + basic = 0; + } + + for (j = 0; j < basic; ++j) { + // if it's not a basic code point + if (input.charCodeAt(j) >= 0x80) { + error('not-basic'); + } + output.push(input.charCodeAt(j)); + } + + // Main decoding loop: start just after the last delimiter if any basic code + // points were copied; start at the beginning otherwise. + + for (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) { + + // `index` is the index of the next character to be consumed. + // Decode a generalized variable-length integer into `delta`, + // which gets added to `i`. The overflow checking is easier + // if we increase `i` as we go, then subtract off its starting + // value at the end to obtain `delta`. + for (oldi = i, w = 1, k = base; /* no condition */; k += base) { + + if (index >= inputLength) { + error('invalid-input'); + } + + digit = basicToDigit(input.charCodeAt(index++)); + + if (digit >= base || digit > floor((maxInt - i) / w)) { + error('overflow'); + } + + i += digit * w; + t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); + + if (digit < t) { + break; + } + + baseMinusT = base - t; + if (w > floor(maxInt / baseMinusT)) { + error('overflow'); + } + + w *= baseMinusT; + + } + + out = output.length + 1; + bias = adapt(i - oldi, out, oldi == 0); + + // `i` was supposed to wrap around from `out` to `0`, + // incrementing `n` each time, so we'll fix that now: + if (floor(i / out) > maxInt - n) { + error('overflow'); + } + + n += floor(i / out); + i %= out; + + // Insert `n` at position `i` of the output + output.splice(i++, 0, n); + + } + + return ucs2encode(output); + } + + /** + * Converts a string of Unicode symbols (e.g. a domain name label) to a + * Punycode string of ASCII-only symbols. + * @memberOf punycode + * @param {String} input The string of Unicode symbols. + * @returns {String} The resulting Punycode string of ASCII-only symbols. + */ + function encode(input) { + var n, + delta, + handledCPCount, + basicLength, + bias, + j, + m, + q, + k, + t, + currentValue, + output = [], + /** `inputLength` will hold the number of code points in `input`. */ + inputLength, + /** Cached calculation results */ + handledCPCountPlusOne, + baseMinusT, + qMinusT; + + // Convert the input in UCS-2 to Unicode + input = ucs2decode(input); + + // Cache the length + inputLength = input.length; + + // Initialize the state + n = initialN; + delta = 0; + bias = initialBias; + + // Handle the basic code points + for (j = 0; j < inputLength; ++j) { + currentValue = input[j]; + if (currentValue < 0x80) { + output.push(stringFromCharCode(currentValue)); + } + } + + handledCPCount = basicLength = output.length; + + // `handledCPCount` is the number of code points that have been handled; + // `basicLength` is the number of basic code points. + + // Finish the basic string - if it is not empty - with a delimiter + if (basicLength) { + output.push(delimiter); + } + + // Main encoding loop: + while (handledCPCount < inputLength) { + + // All non-basic code points < n have been handled already. Find the next + // larger one: + for (m = maxInt, j = 0; j < inputLength; ++j) { + currentValue = input[j]; + if (currentValue >= n && currentValue < m) { + m = currentValue; + } + } + + // Increase `delta` enough to advance the decoder's state to , + // but guard against overflow + handledCPCountPlusOne = handledCPCount + 1; + if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { + error('overflow'); + } + + delta += (m - n) * handledCPCountPlusOne; + n = m; + + for (j = 0; j < inputLength; ++j) { + currentValue = input[j]; + + if (currentValue < n && ++delta > maxInt) { + error('overflow'); + } + + if (currentValue == n) { + // Represent delta as a generalized variable-length integer + for (q = delta, k = base; /* no condition */; k += base) { + t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); + if (q < t) { + break; + } + qMinusT = q - t; + baseMinusT = base - t; + output.push( + stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)) + ); + q = floor(qMinusT / baseMinusT); + } + + output.push(stringFromCharCode(digitToBasic(q, 0))); + bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength); + delta = 0; + ++handledCPCount; + } + } + + ++delta; + ++n; + + } + return output.join(''); + } + + /** + * Converts a Punycode string representing a domain name or an email address + * to Unicode. Only the Punycoded parts of the input will be converted, i.e. + * it doesn't matter if you call it on a string that has already been + * converted to Unicode. + * @memberOf punycode + * @param {String} input The Punycoded domain name or email address to + * convert to Unicode. + * @returns {String} The Unicode representation of the given Punycode + * string. + */ + function toUnicode(input) { + return mapDomain(input, function(string) { + return regexPunycode.test(string) + ? decode(string.slice(4).toLowerCase()) + : string; + }); + } + + /** + * Converts a Unicode string representing a domain name or an email address to + * Punycode. Only the non-ASCII parts of the domain name will be converted, + * i.e. it doesn't matter if you call it with a domain that's already in + * ASCII. + * @memberOf punycode + * @param {String} input The domain name or email address to convert, as a + * Unicode string. + * @returns {String} The Punycode representation of the given domain name or + * email address. + */ + function toASCII(input) { + return mapDomain(input, function(string) { + return regexNonASCII.test(string) + ? 'xn--' + encode(string) + : string; + }); + } + + /*--------------------------------------------------------------------------*/ + + /** Define the public API */ + punycode = { + /** + * A string representing the current Punycode.js version number. + * @memberOf punycode + * @type String + */ + 'version': '1.3.2', + /** + * An object of methods to convert from JavaScript's internal character + * representation (UCS-2) to Unicode code points, and back. + * @see + * @memberOf punycode + * @type Object + */ + 'ucs2': { + 'decode': ucs2decode, + 'encode': ucs2encode + }, + 'decode': decode, + 'encode': encode, + 'toASCII': toASCII, + 'toUnicode': toUnicode + }; + + /** Expose `punycode` */ + // Some AMD build optimizers, like r.js, check for specific condition patterns + // like the following: + if ( + typeof define == 'function' && + typeof define.amd == 'object' && + define.amd + ) { + define('punycode', function() { + return punycode; + }); + } else if (freeExports && freeModule) { + if (module.exports == freeExports) { // in Node.js or RingoJS v0.8.0+ + freeModule.exports = punycode; + } else { // in Narwhal or RingoJS v0.7.0- + for (key in punycode) { + punycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]); + } + } + } else { // in Rhino or a web browser + root.punycode = punycode; + } + +}(this)); diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/logger-ui.html b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/logger-ui.html new file mode 100644 index 0000000..cf4f3dc --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/logger-ui.html @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + +

+
+ + refresh + th +
+
+ double-angle-up + times + eraser + filter + + +
+
+ +
+ +
+ + + + +
+
+ +
+
+
+
+
+
+   +
+ refresh +
+
+
+
+
+ reply + lock +
+ +
+
+ +
+
+ + + + + + + + + + + + + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/main-blocked.html b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/main-blocked.html new file mode 100644 index 0000000..cd3fc2f --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/main-blocked.html @@ -0,0 +1,43 @@ + + + + + + + + + + + +
exclamation-triangle
+
+

+ +
+ + + +
+

+

+
+ + + + + + + + + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/manifest.json b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/manifest.json new file mode 100644 index 0000000..47b995c --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/manifest.json @@ -0,0 +1,43 @@ +{ + "author": "Raymond Hill", + "background": { + "page": "background.html" + }, + "browser_action": { + "default_icon": { + "19": "img/browsericons/icon19-19.png" + }, + "default_popup": "popup.html", + "default_title": "uMatrix" + }, + "content_scripts": [ { + "all_frames": true, + "js": [ "/js/vapi-client.js", "/js/contentscript-start.js" ], + "matches": [ "http://*/*", "https://*/*" ], + "run_at": "document_start" + }, { + "all_frames": true, + "js": [ "/js/contentscript.js" ], + "matches": [ "http://*/*", "https://*/*" ], + "run_at": "document_end" + } ], + "default_locale": "en", + "description": "__MSG_extShortDesc__", + "homepage_url": "https://github.com/gorhill/uMatrix/wiki", + "icons": { + "128": "img/icon_128.png", + "16": "img/icon_16.png" + }, + "key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA63zAZ0qqFYE9IDsUkNMQQNXlrgTRUsvVPGSRX8VyISj9wPUpqnGNrXy+2aCvI3mIJjI3sCAnnIBnELD5jFz9zi4gZXr6582P/Bsuo0L9+Xp8RGuPhh3yFr0cmP80I7/NjH7DhR6a60apWSmElpn7TylH8qQiZE69rYhIeOpwFK69GXo26xLB/rhUmRV2XvJtYqumOangnG8Qr9OnHr3RFMBT6uLJpwcoRwqnOY9cWvs1Oks6X3+09/koqywCwy9CQZv+IFd3eMJ+7W4qWsejDixa/BExbSt7i6eXT7iekZqQF34l1H4jPSRsTyqBPzgsLyL3cxE/C0WIo8BTKnyU+QIDAQAB", + "manifest_version": 2, + "minimum_chrome_version": "45.0", + "name": "uMatrix", + "options_ui": { + "open_in_tab": true, + "page": "dashboard.html" + }, + "permissions": [ "browsingData", "cookies", "privacy", "storage", "tabs", "unlimitedStorage", "webNavigation", "webRequest", "webRequestBlocking", "\u003Call_urls>" ], + "short_name": "uMatrix", + "update_url": "https://clients2.google.com/service/update2/crx", + "version": "1.4.4" +} diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/popup.html b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/popup.html new file mode 100644 index 0000000..94368f6 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/popup.html @@ -0,0 +1,129 @@ + + + + + + + + + + +uMatrix panel + + + + +
+ uMatrix +
+
+   + power-off + ellipsis-v + puzzle-piece + lock + reply +
+
+ refresh +
+
+ reply-all + list-alt +
+
+
+ +
+
+ +
+ + +
+ + + + + +
+ + +
+ + +
+ +
+ + + + + + + + + + + + + + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/raw-settings.html b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/raw-settings.html new file mode 100644 index 0000000..bfa7948 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/raw-settings.html @@ -0,0 +1,34 @@ + + + + + + + + + + + + + +
+ +

info-circle +

+

  +

+ + + +
+ + + + + + + + + + + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/settings.html b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/settings.html new file mode 100644 index 0000000..b7f583c --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/settings.html @@ -0,0 +1,126 @@ + + + + +uMatrix — Settings + + + + + + + +
+ +

+
    +
  • + +
  • + +
      +
    • + +
    +
  • + +
  • + +
  • + + +
+

+
    +
  •  −+ +
  • +
  • + +
  • +
  • + + +
+

+
    +
  • + + question-circle +
    +
  • + + + question-circle +
    + +
  • + +
  • + + + question-circle +
    +
  • + + question-circle +
    +
  • + + question-circle +
    +
  • + + question-circle +
    +
+ +
+ + + + + + + + + + + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/user-rules.html b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/user-rules.html new file mode 100644 index 0000000..9e5528d --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/ogfcmafjalglgifnmanfmnieipoejdcf/1.4.4_0/user-rules.html @@ -0,0 +1,68 @@ + + + + + +uMatrix — Your rules + + + + + + + + + + + + +
+ +
+ +
+ + +
+
+
+

+
+ + +
+
+
+

+
+ + + +
+
+
filter
+
+
+
+ +
+ + +
+ + + + + + + + + + + + + + + + + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/ar/messages.json b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/ar/messages.json new file mode 100644 index 0000000..fa88a1e --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/ar/messages.json @@ -0,0 +1,161 @@ +{ + "about": { + "message": "عن" + }, + "addYourFavoriteInstances": { + "description": "used in the settings page", + "message": "أضِف نُسخك المُفضلة" + }, + "auto": { + "description": "used in the settings page", + "message": "تلقائي" + }, + "autoPickInstance": { + "message": "اختر النُسخ تلقائيًا" + }, + "block": { + "message": "احجب" + }, + "bookmarksMenu": { + "message": "قائمة العلامات" + }, + "both": { + "description": "used in the settings page", + "message": "الإثنين" + }, + "bypass": { + "message": "تجاوز" + }, + "copied": { + "description": "used in the popup", + "message": "نُسِخ" + }, + "copyOriginal": { + "message": "انسخ الأصل" + }, + "dark": { + "description": "used in the settings page", + "message": "داكن" + }, + "disable": { + "message": "عطِّل" + }, + "embedFrontend": { + "message": "واجهة التضمين (Embed)" + }, + "enable": { + "description": "used in the settings page", + "message": "تفعيل" + }, + "excludeFromRedirecting": { + "description": "used in the settings page", + "message": "استبعاد من التوجيه" + }, + "exportSettings": { + "description": "used in the settings page", + "message": "تصدير الإعدادات" + }, + "exportSettingsToSync": { + "message": "صدّر الإعدادات للمزامنة" + }, + "extensionDescription": { + "description": "extension description", + "message": "إضافة متصفح تعيد توجيه مواقع مشهورة إلى واجهات أمامية تحترم الخصوصية" + }, + "extensionName": { + "description": "extension name", + "message": "LibRedirect" + }, + "fetchPublicInstances": { + "message": "اجلب النُسخ العامة" + }, + "frontend": { + "description": "used in the settings page", + "message": "الواجهة الأمامية" + }, + "general": { + "description": "used in the settings page", + "message": "العامة" + }, + "importSettings": { + "description": "used in the settings page", + "message": "استيراد الإعدادات" + }, + "importSettingsFromSync": { + "message": "استورد الإعدادات من المزامنة" + }, + "light": { + "description": "used in the settings page", + "message": "فاتح" + }, + "onlyEmbedded": { + "description": "used in the settings page", + "message": "فقط المضمنة" + }, + "onlyNotEmbedded": { + "description": "used in the settings page", + "message": "فقط الغير مضمنة" + }, + "pingInstances": { + "message": "بينج النُسخ" + }, + "redirect": { + "message": "أعد التوجيه" + }, + "redirectGoogle": { + "message": "إعادة توجيه جوجل" + }, + "redirectLink": { + "description": "Used in context menus when right clicking on a hyperlink", + "message": "محاولة إعادة توجيه" + }, + "redirectOnlyInIncognito": { + "message": "أعد التوجيه في وضع التصفح المتخفي فقط" + }, + "redirectToOriginal": { + "description": "Used in context menus when right clicking on a page/tab", + "message": "إعادة التوجيه إلى الأصلي" + }, + "redirectType": { + "description": "used in the settings page", + "message": "نوع التوجيه" + }, + "resetSettings": { + "description": "used in the settings page", + "message": "إعادة تعيين الإعدادات" + }, + "searchHint": { + "message": "اجعل LibRedirect محرك البحث الافتراضي. لمعرفة كيفية القيام بذلك في متصفحات كروميوم، انقر \u003Ca href='https://libredirect.github.io/docs.html#search_engine_chromium' target='_blank' rel='noopener noreferrer'>هنا\u003C/a>." + }, + "searchService": { + "message": "خدمة البحث" + }, + "search_frontend": { + "message": "واجهة البحث" + }, + "service": { + "message": "الخدمة" + }, + "services": { + "message": "الخدمات" + }, + "settings": { + "description": "used in the popup", + "message": "الإعدادات" + }, + "showInPopup": { + "description": "used in the settings page", + "message": "الإظهار في المنبثقة" + }, + "switchInstance": { + "description": "used in the popup", + "message": "بدّل النُسخة" + }, + "theme": { + "description": "used in the settings page", + "message": "السمة" + }, + "unsupportedIframesHandling": { + "message": "معالجة التضمينات غير مدعومة" + } +} diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/bn/messages.json b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/bn/messages.json new file mode 100644 index 0000000..71a216d --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/bn/messages.json @@ -0,0 +1,160 @@ +{ + "about": { + "message": "আমাদের সম্পর্কে" + }, + "addYourFavoriteInstances": { + "description": "used in the settings page", + "message": "পছন্দের ইন্সট্যান্স যোগ করো" + }, + "auto": { + "description": "used in the settings page", + "message": "স্বয়ংক্রিয়" + }, + "autoPickInstance": { + "message": "স্বয়ংক্রিয়ভাবে নির্বাচন করো" + }, + "block": { + "message": "Block" + }, + "bookmarksMenu": { + "message": "বুকমার্ক তালিকা" + }, + "both": { + "description": "used in the settings page", + "message": "উভয়" + }, + "bypass": { + "message": "উপেক্ষা করো" + }, + "copied": { + "message": "অনুলিপিত" + }, + "copyOriginal": { + "message": "মূলটা অনুলিপি করো" + }, + "dark": { + "description": "used in the settings page", + "message": "অন্ধকার" + }, + "disable": { + "message": "নিষ্করিয়" + }, + "embedFrontend": { + "message": "সম্মূখাংশ স্থাপন করো" + }, + "enable": { + "description": "used in the settings page", + "message": "সক্রিয়" + }, + "excludeFromRedirecting": { + "description": "used in the settings page", + "message": "পুনঃনির্দেশ থেকে বাদ দেওয়া" + }, + "exportSettings": { + "description": "used in the settings page", + "message": "পছন্দসমূহ রপ্তানি করো" + }, + "exportSettingsToSync": { + "message": "পছন্দসমূহ সিঙ্কে রপ্তানি করো" + }, + "extensionDescription": { + "description": "description of the extension", + "message": "একটি ওয়েব এক্সটেনশন যা জনপ্রিয় সাইটগুলোকে বিকল্প গোপনীয়তা-বান্ধব ফ্রন্টএন্ড এবং ব্যাকএন্ডে পুনর্নির্দেশ করে" + }, + "extensionName": { + "description": "name of the extension", + "message": "লিবরিডাইরেক্ট" + }, + "fetchPublicInstances": { + "message": "প্রকাশিত সম্মুখাংশ আনো" + }, + "frontend": { + "description": "used in the settings page", + "message": "সামনের অংশ" + }, + "general": { + "description": "used in the settings page", + "message": "সাধারণ" + }, + "importSettings": { + "description": "used in the settings page", + "message": "পছন্দসমূহ আমদানি করো" + }, + "importSettingsFromSync": { + "message": "পছন্দসমূহ সিঙ্ক থেকে আমদানি করো" + }, + "light": { + "description": "used in the settings page", + "message": "সাদা" + }, + "onlyEmbedded": { + "description": "used in the settings page", + "message": "শুধু এমবেডকৃত" + }, + "onlyNotEmbedded": { + "description": "used in the settings page", + "message": "এমবেডকৃত নয়" + }, + "pingInstances": { + "message": "সার্ভার পিং করো" + }, + "redirect": { + "message": "পুনর্নির্দেশ" + }, + "redirectGoogle": { + "message": "গুগল পুনর্নির্দেশ করো" + }, + "redirectLink": { + "description": "Used in context menus when right clicking on a hyperlink", + "message": "পুনঃনির্দেশ করার চেষ্টা করো" + }, + "redirectOnlyInIncognito": { + "message": "শুধু ইনকগনিটোতে পুনর্নির্দেশ করো" + }, + "redirectToOriginal": { + "description": "Used in context menus when right clicking on a page/tab", + "message": "আসলটায় পুনঃনির্দেশ করো" + }, + "redirectType": { + "description": "used in the settings page", + "message": "পুনঃনির্দেশ ধরণ" + }, + "resetSettings": { + "description": "used in the settings page", + "message": "পছন্দসমূহ সহজাত অবস্থায় ফিরত নাও" + }, + "searchHint": { + "message": "লিবরিডাইরেক্টকে সহজাত অনুসন্ধান যন্ত্র হিসেবে রাখো। ক্রোমিয়াম ব্রাউজারে এটা করার জন্য \u003Ca href='https://libredirect.github.io/docs.html#search_engine_chromium' target='_blank' rel='noopener noreferrer'>এখানে টিপ দাও\u003C/a>।" + }, + "searchService": { + "message": "অনুসন্ধান সেবা" + }, + "search_frontend": { + "message": "অনুসন্ধান সম্মূখাংশ" + }, + "service": { + "message": "Service" + }, + "services": { + "message": "সেবাসমূহ" + }, + "settings": { + "description": "used in the popup", + "message": "পছন্দসমূহ" + }, + "showInPopup": { + "description": "used in the settings page", + "message": "পপআপে দেখাও" + }, + "switchInstance": { + "description": "used in manifest.json as shortcut description", + "message": "ইন্সট্যান্স পাল্টাও" + }, + "theme": { + "description": "used in the settings page", + "message": "রঙ" + }, + "unsupportedIframesHandling": { + "message": "এমবেড স্থাপন অসমর্থিত" + } +} diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/bs/messages.json b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/bs/messages.json new file mode 100644 index 0000000..d684146 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/bs/messages.json @@ -0,0 +1,160 @@ +{ + "about": { + "message": "O" + }, + "addYourFavoriteInstances": { + "description": "used in the settings page", + "message": "Dodajte vaše omiljene instance" + }, + "auto": { + "description": "used in the settings page", + "message": "Auto" + }, + "autoPickInstance": { + "message": "Odaberite automatski instancu" + }, + "block": { + "message": "Blokirajte" + }, + "bookmarksMenu": { + "message": "Izbornik obilježaka" + }, + "both": { + "description": "used in the settings page", + "message": "oba" + }, + "bypass": { + "message": "Zaobiđite" + }, + "copied": { + "message": "Kopirano" + }, + "copyOriginal": { + "message": "Kopirajte original" + }, + "dark": { + "description": "used in the settings page", + "message": "Mračna" + }, + "disable": { + "message": "Isključite" + }, + "embedFrontend": { + "message": "Ugradite sučelje" + }, + "enable": { + "description": "used in the settings page", + "message": "Omogući" + }, + "excludeFromRedirecting": { + "description": "used in the settings page", + "message": "Isključeno iz preusmjeravanja" + }, + "exportSettings": { + "description": "used in the settings page", + "message": "Izvozne Postavke" + }, + "exportSettingsToSync": { + "message": "Izvezite postavke za sinkronizaciju" + }, + "extensionDescription": { + "description": "description of the extension", + "message": "Web proširnica koja preusmjerava poznate web stranice na prema alternativnim sučeljima i pozadinama prilagođenim privatnosti" + }, + "extensionName": { + "description": "name of the extension", + "message": "LibRedirect" + }, + "fetchPublicInstances": { + "message": "Dohvatite javne instance" + }, + "frontend": { + "description": "used in the settings page", + "message": "Sučelje" + }, + "general": { + "description": "used in the settings page", + "message": "Općenito" + }, + "importSettings": { + "description": "used in the settings page", + "message": "Uvozne Postavke" + }, + "importSettingsFromSync": { + "message": "Uvezite postavke iz sinkronizacije" + }, + "light": { + "description": "used in the settings page", + "message": "Svjetla" + }, + "onlyEmbedded": { + "description": "used in the settings page", + "message": "samo ugrađeno" + }, + "onlyNotEmbedded": { + "description": "used in the settings page", + "message": "samo neugrađeno" + }, + "pingInstances": { + "message": "Testirajte instance" + }, + "redirect": { + "message": "Preusmjerite" + }, + "redirectGoogle": { + "message": "Preusmjerite Google" + }, + "redirectLink": { + "description": "Used in context menus when right clicking on a hyperlink", + "message": "Pokušajte preusmjeriti" + }, + "redirectOnlyInIncognito": { + "message": "Preusmjerite samo u inkognito" + }, + "redirectToOriginal": { + "description": "Used in context menus when right clicking on a page/tab", + "message": "Preusmjerite prema originalnoj" + }, + "redirectType": { + "description": "used in the settings page", + "message": "Vrsta Preusmjeravanja" + }, + "resetSettings": { + "description": "used in the settings page", + "message": "Obnovite Postavke" + }, + "searchHint": { + "message": "Postavite LibRedirect kao standardni tražionik. \u003Ca href='https://libredirect.github.io/docs.html#search_engine_chromium' target='_blank' rel='noopener noreferrer'>Ovdje\u003C/a> pogledajte kako se to radi u Kromijum mrežnom pregledniku." + }, + "searchService": { + "message": "Tražite uslužnik" + }, + "search_frontend": { + "message": "Tražite sučelje" + }, + "service": { + "message": "Service" + }, + "services": { + "message": "Usluge" + }, + "settings": { + "description": "used in the popup", + "message": "Podešavanja" + }, + "showInPopup": { + "description": "used in the settings page", + "message": "Prikaži u skočnom prozoru" + }, + "switchInstance": { + "description": "used in manifest.json as shortcut description", + "message": "Prebaci instancu" + }, + "theme": { + "description": "used in the settings page", + "message": "Tema" + }, + "unsupportedIframesHandling": { + "message": "Nepodržano rukovanje iframeovima" + } +} diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/cs/messages.json b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/cs/messages.json new file mode 100644 index 0000000..28e5ee2 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/cs/messages.json @@ -0,0 +1,160 @@ +{ + "about": { + "message": "O rozšíření" + }, + "addYourFavoriteInstances": { + "description": "used in the settings page", + "message": "Přidejte své oblíbené instance" + }, + "auto": { + "description": "used in the settings page", + "message": "Auto" + }, + "autoPickInstance": { + "message": "Automaticky zvolit instanci" + }, + "block": { + "message": "Blokovat" + }, + "bookmarksMenu": { + "message": "Nabídka záložek" + }, + "both": { + "description": "used in the settings page", + "message": "oba" + }, + "bypass": { + "message": "Obejít" + }, + "copied": { + "message": "Zkopírováno" + }, + "copyOriginal": { + "message": "Kopírovat originál" + }, + "dark": { + "description": "used in the settings page", + "message": "Tmavé" + }, + "disable": { + "message": "Zakázat" + }, + "embedFrontend": { + "message": "Vložený frontend" + }, + "enable": { + "description": "used in the settings page", + "message": "Povolit" + }, + "excludeFromRedirecting": { + "description": "used in the settings page", + "message": "Vyloučeno z přesměrování" + }, + "exportSettings": { + "description": "used in the settings page", + "message": "Exportovat nastavení" + }, + "exportSettingsToSync": { + "message": "Exportovat nastavení do synchronizace" + }, + "extensionDescription": { + "description": "description of the extension", + "message": "Webové rozšíření, které přesměrovává oblíbené weby na alternativní ‘frontends‘ a ‘backends‘ respektující soukromí" + }, + "extensionName": { + "description": "name of the extension", + "message": "LibRedirect" + }, + "fetchPublicInstances": { + "message": "Načíst veřejné instance" + }, + "frontend": { + "description": "used in the settings page", + "message": "Frontend" + }, + "general": { + "description": "used in the settings page", + "message": "Obecné" + }, + "importSettings": { + "description": "used in the settings page", + "message": "Importovat nastavení" + }, + "importSettingsFromSync": { + "message": "Importovat nastavení ze synchronizace" + }, + "light": { + "description": "used in the settings page", + "message": "Světlé" + }, + "onlyEmbedded": { + "description": "used in the settings page", + "message": "pouze vložené" + }, + "onlyNotEmbedded": { + "description": "used in the settings page", + "message": "pouze nevložené" + }, + "pingInstances": { + "message": "Otestovat odezvu instancí" + }, + "redirect": { + "message": "Přesměrovat" + }, + "redirectGoogle": { + "message": "Přesměrovat Google" + }, + "redirectLink": { + "description": "Used in context menus when right clicking on a hyperlink", + "message": "Pokusit se přesměrovat" + }, + "redirectOnlyInIncognito": { + "message": "Přesměrovat pouze v anonymním okně" + }, + "redirectToOriginal": { + "description": "Used in context menus when right clicking on a page/tab", + "message": "Přesměrovat na originál" + }, + "redirectType": { + "description": "used in the settings page", + "message": "Typ přesměrování" + }, + "resetSettings": { + "description": "used in the settings page", + "message": "Obnovit nastavení" + }, + "searchHint": { + "message": "Nastavte LibRedirect jako výchozí vyhledávač. Návod pro Chromium prohlížeče naleznete \u003Ca href='https://libredirect.github.io/docs.html#search_engine_chromium' target='_blank' rel='noopener noreferrer'>zde\u003C/a>." + }, + "searchService": { + "message": "Služba vyhledávání" + }, + "search_frontend": { + "message": "Hledat frontend" + }, + "service": { + "message": "Služba" + }, + "services": { + "message": "Služby" + }, + "settings": { + "description": "used in the popup", + "message": "Nastavení" + }, + "showInPopup": { + "description": "used in the settings page", + "message": "Zobrazit ve vyskakovacím okně" + }, + "switchInstance": { + "description": "used in manifest.json as shortcut description", + "message": "Přepnout instanci" + }, + "theme": { + "description": "used in the settings page", + "message": "Téma" + }, + "unsupportedIframesHandling": { + "message": "Nepodporovaná manipulace s iframe" + } +} diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/de/messages.json b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/de/messages.json new file mode 100644 index 0000000..8247e30 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/de/messages.json @@ -0,0 +1,160 @@ +{ + "about": { + "message": "Über" + }, + "addYourFavoriteInstances": { + "description": "used in the settings page", + "message": "Eigene Instanz hinzufügen" + }, + "auto": { + "description": "used in the settings page", + "message": "System" + }, + "autoPickInstance": { + "message": "Automatisch auswählen Instanz" + }, + "block": { + "message": "Block" + }, + "bookmarksMenu": { + "message": "Lesezeichen-Menü" + }, + "both": { + "description": "used in the settings page", + "message": "beides" + }, + "bypass": { + "message": "Umgehen" + }, + "copied": { + "message": "Kopiert" + }, + "copyOriginal": { + "message": "Original kopieren" + }, + "dark": { + "description": "used in the settings page", + "message": "Dunkel" + }, + "disable": { + "message": "Deaktivieren" + }, + "embedFrontend": { + "message": "Frontend einbetten" + }, + "enable": { + "description": "used in the settings page", + "message": "Aktivieren" + }, + "excludeFromRedirecting": { + "description": "used in the settings page", + "message": "Vom Umleiten ausschließen" + }, + "exportSettings": { + "description": "used in the settings page", + "message": "Einstellungen exportieren" + }, + "exportSettingsToSync": { + "message": "Einstellungen zur Synchronisierung exportieren" + }, + "extensionDescription": { + "description": "description of the extension", + "message": "Eine Erweiterung, die beliebte Websites auf alternative, datenschutzfreundliche Frontends und Backends umleitet" + }, + "extensionName": { + "description": "name of the extension", + "message": "LibRedirect" + }, + "fetchPublicInstances": { + "message": "Abrufen öffentlicher Instanzen" + }, + "frontend": { + "description": "used in the settings page", + "message": "Frontend" + }, + "general": { + "description": "used in the settings page", + "message": "Allgemein" + }, + "importSettings": { + "description": "used in the settings page", + "message": "Einstellungen importieren" + }, + "importSettingsFromSync": { + "message": "Einstellungen aus Sync importieren" + }, + "light": { + "description": "used in the settings page", + "message": "Hell" + }, + "onlyEmbedded": { + "description": "used in the settings page", + "message": "nur eingebettet" + }, + "onlyNotEmbedded": { + "description": "used in the settings page", + "message": "nur nicht eingebettet" + }, + "pingInstances": { + "message": "Instanzen anpingen" + }, + "redirect": { + "message": "Umleiten" + }, + "redirectGoogle": { + "message": "Google umleiten" + }, + "redirectLink": { + "description": "Used in context menus when right clicking on a hyperlink", + "message": "Versuchen umzuleiten" + }, + "redirectOnlyInIncognito": { + "message": "Nur in Inkognito umleiten" + }, + "redirectToOriginal": { + "description": "Used in context menus when right clicking on a page/tab", + "message": "Zur Originalseite umleiten" + }, + "redirectType": { + "description": "used in the settings page", + "message": "Art der Umleitung" + }, + "resetSettings": { + "description": "used in the settings page", + "message": "Einstellungen zurücksetzen" + }, + "searchHint": { + "message": "Legen Sie LibRedirect als Standard-Suchmaschine fest. Wie man das in Chromium-Browsern macht, erfahren Sie \u003Ca href='https://libredirect.github.io/docs.html#search_engine_chromium' target='_blank' rel='noopener noreferrer'>hier\u003C/a>." + }, + "searchService": { + "message": "Suche Dienst" + }, + "search_frontend": { + "message": "Suche Frontend" + }, + "service": { + "message": "Service" + }, + "services": { + "message": "Dienstleistungen" + }, + "settings": { + "description": "used in the popup", + "message": "Einstellungen" + }, + "showInPopup": { + "description": "used in the settings page", + "message": "Im Pop-up-Fenster anzeigen" + }, + "switchInstance": { + "description": "used in manifest.json as shortcut description", + "message": "Instanz wechseln" + }, + "theme": { + "description": "used in the settings page", + "message": "Farbschema" + }, + "unsupportedIframesHandling": { + "message": "Nicht unterstützte Einbettungenbehandlung" + } +} diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/delete.py b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/delete.py new file mode 100644 index 0000000..d5360c9 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/delete.py @@ -0,0 +1,75 @@ +import json + + +# langs = ['bs', 'cs', 'de', 'es', 'fr', 'gl', 'hr', 'id', 'it', 'ja', 'ko', +# 'nb_NO', 'nl', 'pl', 'pt', 'pt_BR', 'ro', 'ru', 'sr', 'tr', 'uk', 'vi', 'zh_Hans'] +en_json = {} + +with open('./en/messages.json') as data: + en_json = json.load(data) + +keys = ['extensionName', + 'extensionDescription', + 'general', + 'services', + 'service', + 'theme', + 'auto', + 'light', + 'dark', + 'excludeFromRedirecting', + 'fetchPublicInstances', + 'importSettings', + 'exportSettings', + 'exportSettingsToSync', + 'importSettingsFromSync', + 'resetSettings', + 'enable', + 'disable', + 'showInPopup', + 'frontend', + 'redirectType', + 'both', + 'onlyEmbedded', + 'onlyNotEmbedded', + 'addYourFavoriteInstances', + 'switchInstance', + 'copyOriginal', + 'copied', + 'settings', + 'about', + 'redirectToOriginal', + 'redirectLink', + 'redirectOnlyInIncognito', + 'bookmarksMenu', + 'showInPopup', + 'unsupportedIframesHandling', + 'bypass', + 'block', + 'searchHint', + 'excludeFromRedirecting', + 'pingInstances', + 'redirect', + 'autoPickInstance', + 'redirectGoogle', + 'search_frontend', + 'searchService', + 'embedFrontend', + ] + +tmp = {} + +for key in en_json: + if key in keys: + tmp[key] = en_json[key] + +en_json = tmp + +with open('en/messages.json', 'w') as outfile: + outfile.write( + json.dumps( + en_json, + ensure_ascii=False, + indent=4 + ) + ) diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/en/messages.json b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/en/messages.json new file mode 100644 index 0000000..4c4d6fe --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/en/messages.json @@ -0,0 +1,160 @@ +{ + "about": { + "message": "About" + }, + "addYourFavoriteInstances": { + "description": "used in the settings page", + "message": "Add your favorite instances" + }, + "auto": { + "description": "used in the settings page", + "message": "Auto" + }, + "autoPickInstance": { + "message": "Auto-pick Instance" + }, + "block": { + "message": "Block" + }, + "bookmarksMenu": { + "message": "Bookmarks menu" + }, + "both": { + "description": "used in the settings page", + "message": "both" + }, + "bypass": { + "message": "Bypass" + }, + "copied": { + "message": "Copied" + }, + "copyOriginal": { + "message": "Copy Original" + }, + "dark": { + "description": "used in the settings page", + "message": "Dark" + }, + "disable": { + "message": "Disable" + }, + "embedFrontend": { + "message": "Embed Frontend" + }, + "enable": { + "description": "used in the settings page", + "message": "Enable" + }, + "excludeFromRedirecting": { + "description": "used in the settings page", + "message": "Excluded from redirecting" + }, + "exportSettings": { + "description": "used in the settings page", + "message": "Export Settings" + }, + "exportSettingsToSync": { + "message": "Export Settings to Sync" + }, + "extensionDescription": { + "description": "description of the extension", + "message": "A web extension that redirects popular sites to alternative privacy-friendly frontends and backends" + }, + "extensionName": { + "description": "name of the extension", + "message": "LibRedirect" + }, + "fetchPublicInstances": { + "message": "Fetch public instances" + }, + "frontend": { + "description": "used in the settings page", + "message": "Frontend" + }, + "general": { + "description": "used in the settings page", + "message": "General" + }, + "importSettings": { + "description": "used in the settings page", + "message": "Import Settings" + }, + "importSettingsFromSync": { + "message": "Import Settings from Sync" + }, + "light": { + "description": "used in the settings page", + "message": "Light" + }, + "onlyEmbedded": { + "description": "used in the settings page", + "message": "only embedded" + }, + "onlyNotEmbedded": { + "description": "used in the settings page", + "message": "only not embedded" + }, + "pingInstances": { + "message": "Ping Instances" + }, + "redirect": { + "message": "Redirect" + }, + "redirectGoogle": { + "message": "Redirect Google" + }, + "redirectLink": { + "description": "Used in context menus when right clicking on a hyperlink", + "message": "Attempt to redirect" + }, + "redirectOnlyInIncognito": { + "message": "Redirect Only in Incognito" + }, + "redirectToOriginal": { + "description": "Used in context menus when right clicking on a page/tab", + "message": "Redirect to original" + }, + "redirectType": { + "description": "used in the settings page", + "message": "Redirect Type" + }, + "resetSettings": { + "description": "used in the settings page", + "message": "Reset Settings" + }, + "searchHint": { + "message": "Set LibRedirect as Default Search Engine. For how to do in chromium browsers, click \u003Ca href='https://libredirect.github.io/docs.html#search_engine_chromium' target='_blank' rel='noopener noreferrer'>here\u003C/a>." + }, + "searchService": { + "message": "Search Service" + }, + "search_frontend": { + "message": "Search Frontend" + }, + "service": { + "message": "Service" + }, + "services": { + "message": "Services" + }, + "settings": { + "description": "used in the popup", + "message": "Settings" + }, + "showInPopup": { + "description": "used in the settings page", + "message": "Show in popup" + }, + "switchInstance": { + "description": "used in manifest.json as shortcut description", + "message": "Switch Instance" + }, + "theme": { + "description": "used in the settings page", + "message": "Theme" + }, + "unsupportedIframesHandling": { + "message": "Unsupported embeds handling" + } +} diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/eo/messages.json b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/eo/messages.json new file mode 100644 index 0000000..885c780 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/eo/messages.json @@ -0,0 +1,145 @@ +{ + "extensionName": { + "message": "LibRedirect", + "description": "name of the extension" + }, + "extensionDescription": { + "message": "A web extension that redirects popular sites to alternative privacy-friendly frontends and backends", + "description": "description of the extension" + }, + "switchInstance": { + "message": "Switch Instance", + "description": "used in manifest.json as shortcut description" + }, + "settings": { + "message": "Settings", + "description": "used in the popup" + }, + "general": { + "message": "General", + "description": "used in the settings page" + }, + "theme": { + "message": "Theme", + "description": "used in the settings page" + }, + "light": { + "message": "Light", + "description": "used in the settings page" + }, + "dark": { + "message": "Dark", + "description": "used in the settings page" + }, + "auto": { + "message": "Auto", + "description": "used in the settings page" + }, + "excludeFromRedirecting": { + "message": "Excluded from redirecting", + "description": "used in the settings page" + }, + "importSettings": { + "message": "Import Settings", + "description": "used in the settings page" + }, + "exportSettings": { + "message": "Export Settings", + "description": "used in the settings page" + }, + "resetSettings": { + "message": "Reset Settings", + "description": "used in the settings page" + }, + "enable": { + "message": "Enable", + "description": "used in the settings page" + }, + "showInPopup": { + "message": "Show in popup", + "description": "used in the settings page" + }, + "frontend": { + "message": "Frontend", + "description": "used in the settings page" + }, + "redirectType": { + "message": "Redirect Type", + "description": "used in the settings page" + }, + "both": { + "message": "both", + "description": "used in the settings page" + }, + "onlyEmbedded": { + "message": "only embedded", + "description": "used in the settings page" + }, + "onlyNotEmbedded": { + "message": "only not embedded", + "description": "used in the settings page" + }, + "addYourFavoriteInstances": { + "message": "Add your favorite instances", + "description": "used in the settings page" + }, + "copyOriginal": { + "message": "Copy Original" + }, + "copied": { + "message": "Copied" + }, + "redirectToOriginal": { + "message": "Redirect to original", + "description": "Used in context menus when right clicking on a page/tab" + }, + "redirectLink": { + "message": "Attempt to redirect", + "description": "Used in context menus when right clicking on a hyperlink" + }, + "about": { + "message": "About" + }, + "unsupportedIframesHandling": { + "message": "Unsupported embeds handling" + }, + "fetchPublicInstances": { + "message": "Fetch public instances" + }, + "disable": { + "message": "Disable" + }, + "pingInstances": { + "message": "Ping Instances" + }, + "exportSettingsToSync": { + "message": "Export Settings to Sync" + }, + "importSettingsFromSync": { + "message": "Import Settings from Sync" + }, + "services": { + "message": "Services" + }, + "service": { + "message": "Service" + }, + "bookmarksMenu": { + "message": "Bookmarks menu" + }, + "redirectOnlyInIncognito": { + "message": "Redirect Only in Incognito" + }, + "bypass": { + "message": "Bypass" + }, + "block": { + "message": "Block" + }, + "searchHint": { + "message": "Set LibRedirect as Default Search Engine. For how to do in chromium browsers, click here." + }, + "redirect": { + "message": "Redirect" + } +} \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/es/messages.json b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/es/messages.json new file mode 100644 index 0000000..131e076 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/es/messages.json @@ -0,0 +1,160 @@ +{ + "about": { + "message": "Acerca de" + }, + "addYourFavoriteInstances": { + "description": "used in the settings page", + "message": "Añade tus instancias preferidas" + }, + "auto": { + "description": "used in the settings page", + "message": "Auto" + }, + "autoPickInstance": { + "message": "Selección automática de instancias" + }, + "block": { + "message": "Bloquear" + }, + "bookmarksMenu": { + "message": "Menú de marcadores" + }, + "both": { + "description": "used in the settings page", + "message": "ambos" + }, + "bypass": { + "message": "Bypass" + }, + "copied": { + "message": "Copiado" + }, + "copyOriginal": { + "message": "Copiar original" + }, + "dark": { + "description": "used in the settings page", + "message": "Oscuro" + }, + "disable": { + "message": "Desactivar" + }, + "embedFrontend": { + "message": "Integrar Frontend" + }, + "enable": { + "description": "used in the settings page", + "message": "Activar" + }, + "excludeFromRedirecting": { + "description": "used in the settings page", + "message": "Excluidos del redireccionamiento" + }, + "exportSettings": { + "description": "used in the settings page", + "message": "Exportar Ajustes" + }, + "exportSettingsToSync": { + "message": "Exportar configuraciones para sincronizar" + }, + "extensionDescription": { + "description": "description of the extension", + "message": "Una extensión web que redirige sitios populares a frontends y backends alternativos que respetan la privacidad" + }, + "extensionName": { + "description": "name of the extension", + "message": "LibRedirect" + }, + "fetchPublicInstances": { + "message": "Recuperar las instancias públicas" + }, + "frontend": { + "description": "used in the settings page", + "message": "Interfaz" + }, + "general": { + "description": "used in the settings page", + "message": "General" + }, + "importSettings": { + "description": "used in the settings page", + "message": "Importar Ajustes" + }, + "importSettingsFromSync": { + "message": "Importar configuraciones para sincronizar" + }, + "light": { + "description": "used in the settings page", + "message": "Claro" + }, + "onlyEmbedded": { + "description": "used in the settings page", + "message": "solo incrustados" + }, + "onlyNotEmbedded": { + "description": "used in the settings page", + "message": "solo los no incrustados" + }, + "pingInstances": { + "message": "Prueba de velocidad de las instancias" + }, + "redirect": { + "message": "Redirigir" + }, + "redirectGoogle": { + "message": "Redirigir a Google" + }, + "redirectLink": { + "description": "Used in context menus when right clicking on a hyperlink", + "message": "Intento de redirección" + }, + "redirectOnlyInIncognito": { + "message": "Redirigir solo en modo incógnito" + }, + "redirectToOriginal": { + "description": "Used in context menus when right clicking on a page/tab", + "message": "Redirigir al original" + }, + "redirectType": { + "description": "used in the settings page", + "message": "Tipo de Redirección" + }, + "resetSettings": { + "description": "used in the settings page", + "message": "Restablecer Ajustes" + }, + "searchHint": { + "message": "Establece LibRedirect como motor de búsqueda predeterminado. Para saber cómo hacerlo en los navegadores Chromium, haz clic \u003Ca href='https://libredirect.github.io/docs.html#search_engine_chromium' target='_blank' rel='noopener noreferrer'>aquí\u003C/a>." + }, + "searchService": { + "message": "Servicio de búsqueda" + }, + "search_frontend": { + "message": "Interfaz de búsqueda" + }, + "service": { + "message": "Service" + }, + "services": { + "message": "Servicios" + }, + "settings": { + "description": "used in the popup", + "message": "Ajustes" + }, + "showInPopup": { + "description": "used in the settings page", + "message": "Mostrar en ventanas emergentes" + }, + "switchInstance": { + "description": "used in manifest.json as shortcut description", + "message": "Cambiar instancia" + }, + "theme": { + "description": "used in the settings page", + "message": "Tema" + }, + "unsupportedIframesHandling": { + "message": "Manejo de incrustaciones de código no soportado" + } +} diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/fa/messages.json b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/fa/messages.json new file mode 100644 index 0000000..253f7d7 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/fa/messages.json @@ -0,0 +1,137 @@ +{ + "about": { + "message": "درباره" + }, + "addYourFavoriteInstances": { + "message": "افزودن نمونه‌های مورد پسند شما" + }, + "auto": { + "message": "خودکار" + }, + "autoPickInstance": { + "message": "گزینش خودکار نمونه" + }, + "block": { + "message": "مسدود کردن" + }, + "bookmarksMenu": { + "message": "فهرست نشان شده‌ها" + }, + "both": { + "message": "هر دو" + }, + "bypass": { + "message": "دور زدن" + }, + "copied": { + "message": "رونویسی شد" + }, + "copyOriginal": { + "message": "رونویسی اصلی" + }, + "dark": { + "message": "تیره" + }, + "disable": { + "message": "غیر‌فعال کردن" + }, + "embedFrontend": { + "message": "پیشگاه جاسازی‌شده" + }, + "enable": { + "message": "فعال‌کردن" + }, + "excludeFromRedirecting": { + "message": "چشم‌پوشی از هدایت کردن" + }, + "exportSettings": { + "message": "خروجی گرفتن از تنظیمات" + }, + "exportSettingsToSync": { + "message": "خروجی گرفتن از تنظیمات برای همگام‌سازی" + }, + "extensionDescription": { + "message": "یک افزونه مرورگر که وبگاه های محبوب را به نمونه‌های دوست‌دار حریم خصوصی هدایت میکند" + }, + "extensionName": { + "message": "LibRedirect" + }, + "fetchPublicInstances": { + "message": "دریافت نمونه‌های عمومی" + }, + "frontend": { + "message": "پیشگاه" + }, + "general": { + "message": "عمومی" + }, + "importSettings": { + "message": "واردکردن تنظیمات" + }, + "importSettingsFromSync": { + "message": "واردکردن تنظیمات برای همگام‌سازی" + }, + "light": { + "message": "روشن" + }, + "onlyEmbedded": { + "message": "تنها جاسازی شده" + }, + "onlyNotEmbedded": { + "message": "تنها جاسازی نشده" + }, + "pingInstances": { + "message": "پینگ گرفتن از نمونه‌ها" + }, + "redirect": { + "message": "هدایت کردن" + }, + "redirectGoogle": { + "message": "هدایت کردن گوگل" + }, + "redirectLink": { + "message": "تلاش برای هدایت" + }, + "redirectOnlyInIncognito": { + "message": "تنها هدایت کردن در حالت خصوصی" + }, + "redirectToOriginal": { + "message": "هدایت به اصلی" + }, + "redirectType": { + "message": "نوع هدایت" + }, + "resetSettings": { + "message": "بازنشانی تنظیمات" + }, + "searchHint": { + "message": "LIBREDIRECT را به عنوان موتور جستجوی پیش‌فرض تنظیم کنید. برای نحوه انجام در مرورگرهای کروم ، روی \u003Ca href='https://libredirect.github.io/docs.html#search_engine_chromium' target='_blank' rel='noopener noreferrer'>اینجا\u003C/a> ضربه بزنید." + }, + "searchService": { + "message": "جستجو سامانه" + }, + "search_frontend": { + "message": "جستجو پیشگاه" + }, + "service": { + "message": "سامانه" + }, + "services": { + "message": "سامانه‌ها" + }, + "settings": { + "message": "تنظیمات" + }, + "showInPopup": { + "message": "نمایش در بازشونده" + }, + "switchInstance": { + "message": "جایگزینی نمونه" + }, + "theme": { + "message": "پوسته" + }, + "unsupportedIframesHandling": { + "message": "مدیریت جاسازی‌های پشتیبانی نشده" + } +} diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/fi/messages.json b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/fi/messages.json new file mode 100644 index 0000000..c647c9e --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/fi/messages.json @@ -0,0 +1,160 @@ +{ + "about": { + "message": "Tietoja" + }, + "addYourFavoriteInstances": { + "description": "used in the settings page", + "message": "Lisää suosikki-instanssisi" + }, + "auto": { + "description": "used in the settings page", + "message": "Automaattinen" + }, + "autoPickInstance": { + "message": "Automaattisesti valitse instanssi" + }, + "block": { + "message": "Estä" + }, + "bookmarksMenu": { + "message": "Kirjanmerkkipalkki" + }, + "both": { + "description": "used in the settings page", + "message": "molemmat" + }, + "bypass": { + "message": "Ohita" + }, + "copied": { + "message": "Kopioitu" + }, + "copyOriginal": { + "message": "Kopioi alkuperäinen" + }, + "dark": { + "description": "used in the settings page", + "message": "Tumma" + }, + "disable": { + "message": "Poista käytöstä" + }, + "embedFrontend": { + "message": "Upota käyttöliittymä" + }, + "enable": { + "description": "used in the settings page", + "message": "Ota käyttöön" + }, + "excludeFromRedirecting": { + "description": "used in the settings page", + "message": "Poissuljettu uudelleenohjaukselta" + }, + "exportSettings": { + "description": "used in the settings page", + "message": "Vie asetukset" + }, + "exportSettingsToSync": { + "message": "Vie asetukset Sync:iin" + }, + "extensionDescription": { + "description": "description of the extension", + "message": "Selainlaajennus, joka uudelleenohjaa suositut sivustot vaihtoehtoisiin yksityisyysystävällisiin käyttöliittymiin" + }, + "extensionName": { + "description": "name of the extension", + "message": "LibRedirect" + }, + "fetchPublicInstances": { + "message": "Hae julkiset instanssit" + }, + "frontend": { + "description": "used in the settings page", + "message": "Käyttöliittymä" + }, + "general": { + "description": "used in the settings page", + "message": "Yleiset" + }, + "importSettings": { + "description": "used in the settings page", + "message": "Tuo asetukset" + }, + "importSettingsFromSync": { + "message": "Tuo asetukset Sync:istä" + }, + "light": { + "description": "used in the settings page", + "message": "Vaalea" + }, + "onlyEmbedded": { + "description": "used in the settings page", + "message": "vain upotetut" + }, + "onlyNotEmbedded": { + "description": "used in the settings page", + "message": "vain muut kuin upotetut" + }, + "pingInstances": { + "message": "Kokeile yhteyttä instansseihin" + }, + "redirect": { + "message": "Uudelleenohjaa" + }, + "redirectGoogle": { + "message": "Uudelleenohjaa Googleen" + }, + "redirectLink": { + "description": "Used in context menus when right clicking on a hyperlink", + "message": "Yritä uudelleenohjata" + }, + "redirectOnlyInIncognito": { + "message": "Uudelleenohjaa vain yksityisikkunassa" + }, + "redirectToOriginal": { + "description": "Used in context menus when right clicking on a page/tab", + "message": "Uudelleenohjaa alkuperäiseen" + }, + "redirectType": { + "description": "used in the settings page", + "message": "Uudelleenohjauksen tyyppi" + }, + "resetSettings": { + "description": "used in the settings page", + "message": "Nollaa asetukset" + }, + "searchHint": { + "message": "Aseta LibRedirect oletushakukoneeksi. Ohjeita varten chromium-selaimissa, paina \u003Ca href='https://libredirect.github.io/docs.html#search_engine_chromium' target='_blank' rel='noopener noreferrer'>tästä\u003C/a>." + }, + "searchService": { + "message": "Hae palveluja" + }, + "search_frontend": { + "message": "Hae käyttöliittymää" + }, + "service": { + "message": "Palvelu" + }, + "services": { + "message": "Palvelut" + }, + "settings": { + "description": "used in the popup", + "message": "Asetukset" + }, + "showInPopup": { + "description": "used in the settings page", + "message": "Näytä ponnahdusvalikossa" + }, + "switchInstance": { + "description": "used in manifest.json as shortcut description", + "message": "Vaihda instanssi" + }, + "theme": { + "description": "used in the settings page", + "message": "Teema" + }, + "unsupportedIframesHandling": { + "message": "Tukemattomien upotusten käsittely" + } +} diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/fil/messages.json b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/fil/messages.json new file mode 100644 index 0000000..a2d2457 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/fil/messages.json @@ -0,0 +1,137 @@ +{ + "about": { + "message": "Tungkol sa" + }, + "addYourFavoriteInstances": { + "message": "Idagdag ang iyong mga paboritong instansya" + }, + "auto": { + "message": "Awto" + }, + "autoPickInstance": { + "message": "Awtomatikong piliin ang Instansya" + }, + "block": { + "message": "I-block" + }, + "bookmarksMenu": { + "message": "Menu ng mga bookmark" + }, + "both": { + "message": "pareho" + }, + "bypass": { + "message": "I-bypass" + }, + "copied": { + "message": "Kinopya" + }, + "copyOriginal": { + "message": "Kopyahin ang Orihinal" + }, + "dark": { + "message": "Madilim" + }, + "disable": { + "message": "I-disable" + }, + "embedFrontend": { + "message": "Frontend ng Embed" + }, + "enable": { + "message": "I-enable" + }, + "excludeFromRedirecting": { + "message": "Hindi kasama mula sa pag-redirect" + }, + "exportSettings": { + "message": "I-export ang mga setting" + }, + "exportSettingsToSync": { + "message": "I-export ang Mga Setting para Mag-sync" + }, + "extensionDescription": { + "message": "Isang web extension na nagre-redirect ng mga popular na site sa mga alternatibong privacy-friendly na frontend at backend" + }, + "extensionName": { + "message": "LibRedirect" + }, + "fetchPublicInstances": { + "message": "Kunin ang mga publikong instansya" + }, + "frontend": { + "message": "Frontend" + }, + "general": { + "message": "General" + }, + "importSettings": { + "message": "I-import ang mga setting" + }, + "importSettingsFromSync": { + "message": "I-import ang Mga Setting mula sa Sync" + }, + "light": { + "message": "Maliwanag" + }, + "onlyEmbedded": { + "message": "embedded lamang" + }, + "onlyNotEmbedded": { + "message": "mga hindi embedded lamang" + }, + "pingInstances": { + "message": "I-ping ang Mga Instansya" + }, + "redirect": { + "message": "I-redirect" + }, + "redirectGoogle": { + "message": "I-redirect ang Google" + }, + "redirectLink": { + "message": "Subukang mag-redirect" + }, + "redirectOnlyInIncognito": { + "message": "Mag-redirect lamang sa Incognito" + }, + "redirectToOriginal": { + "message": "Mag-redirect sa orihinal" + }, + "redirectType": { + "message": "Uri ng Redirect" + }, + "resetSettings": { + "message": "I-reset ang mga setting" + }, + "searchHint": { + "message": "Itakda ang LibRedirect bilang Default na Search Engine. Para sa kung paano gawin sa mga Chromium browser, mag-click \u003Ca href='https://libredirect.github.io/docs.html#search_engine_chromium' target='_blank' rel='noopener noreferrer'>dito\u003C/a>." + }, + "searchService": { + "message": "Serbisyo ng Paghahanap" + }, + "search_frontend": { + "message": "Frontend ng Paghahanap" + }, + "service": { + "message": "Serbisyo" + }, + "services": { + "message": "Mga Serbisyo" + }, + "settings": { + "message": "Mga Setting" + }, + "showInPopup": { + "message": "Ipakita sa popup" + }, + "switchInstance": { + "message": "Palitan ang Instansya" + }, + "theme": { + "message": "Tema" + }, + "unsupportedIframesHandling": { + "message": "Pag-handle sa mga hindi sinusuportahang embed" + } +} diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/filter.py b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/filter.py new file mode 100644 index 0000000..b6a30f0 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/filter.py @@ -0,0 +1,60 @@ +import json + + +langs = [ + 'ar', + 'bn', + 'bs', + 'cs', + 'de', + 'eo', + 'es', + 'fi', + 'fr', + 'gl', + 'hi', + 'hr', + 'id', + 'it', + 'ja', + 'jv', + 'ko', + 'nb_NO', + 'nl', + 'pl', + 'pt', + 'pt_BR', + 'ro', + 'ru', + 'sr', + 'tr', + 'uk', + 'vi', + 'zh_Hans', + 'zh_Hant', +] +en_json = {} + +with open('src/_locales/en/messages.json') as data: + en_json = json.load(data) + + + +for lang in langs: + lang_json = {} + with open('src/_locales/'+lang+'/messages.json') as data: + lang_json = json.load(data) + lang_json_new = {} + for key in en_json: + if key in lang_json: + lang_json_new[key] = lang_json[key] + else: + lang_json_new[key] = en_json[key] + with open('src/_locales/'+lang+'/messages.json', 'w') as outfile: + outfile.write( + json.dumps( + lang_json_new, + ensure_ascii=False, + indent=4 + ) + ) diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/fr/messages.json b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/fr/messages.json new file mode 100644 index 0000000..aefdab4 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/fr/messages.json @@ -0,0 +1,160 @@ +{ + "about": { + "message": "À propos" + }, + "addYourFavoriteInstances": { + "description": "used in the settings page", + "message": "Ajoutez vos instances favorites" + }, + "auto": { + "description": "used in the settings page", + "message": "Auto" + }, + "autoPickInstance": { + "message": "Choix d'instance automatique" + }, + "block": { + "message": "Bloquer" + }, + "bookmarksMenu": { + "message": "Menu des marque-pages" + }, + "both": { + "description": "used in the settings page", + "message": "les deux" + }, + "bypass": { + "message": "Laisser tel quel" + }, + "copied": { + "message": "Copié" + }, + "copyOriginal": { + "message": "Copier l'original" + }, + "dark": { + "description": "used in the settings page", + "message": "Sombre" + }, + "disable": { + "message": "Désactiver" + }, + "embedFrontend": { + "message": "Interface des éléments embarqués" + }, + "enable": { + "description": "used in the settings page", + "message": "Activer" + }, + "excludeFromRedirecting": { + "description": "used in the settings page", + "message": "Exclus de la redirection" + }, + "exportSettings": { + "description": "used in the settings page", + "message": "Exporter les paramètres" + }, + "exportSettingsToSync": { + "message": "Exporter les paramètres vers Sync" + }, + "extensionDescription": { + "description": "description of the extension", + "message": "Une extension web qui redirige les sites populaires vers des interfaces et des serveurs alternatifs respectueux de la vie privée" + }, + "extensionName": { + "description": "name of the extension", + "message": "LibRedirect" + }, + "fetchPublicInstances": { + "message": "Récupérer des instances publiques" + }, + "frontend": { + "description": "used in the settings page", + "message": "Interface" + }, + "general": { + "description": "used in the settings page", + "message": "Général" + }, + "importSettings": { + "description": "used in the settings page", + "message": "Importer les paramètres" + }, + "importSettingsFromSync": { + "message": "Importer les paramètres depuis Sync" + }, + "light": { + "description": "used in the settings page", + "message": "Clair" + }, + "onlyEmbedded": { + "description": "used in the settings page", + "message": "éléments embarqués seulement" + }, + "onlyNotEmbedded": { + "description": "used in the settings page", + "message": "tout sauf éléments embarqués" + }, + "pingInstances": { + "message": "Envoyer un ping aux instances" + }, + "redirect": { + "message": "Rediriger" + }, + "redirectGoogle": { + "message": "Rediriger Google" + }, + "redirectLink": { + "description": "Used in context menus when right clicking on a hyperlink", + "message": "Essayer de rediriger" + }, + "redirectOnlyInIncognito": { + "message": "Rediriger seulement en Mode Incognito" + }, + "redirectToOriginal": { + "description": "Used in context menus when right clicking on a page/tab", + "message": "Rediriger vers l'original" + }, + "redirectType": { + "description": "used in the settings page", + "message": "Type de redirection" + }, + "resetSettings": { + "description": "used in the settings page", + "message": "Réinitialiser les paramètres" + }, + "searchHint": { + "message": "Paramétrez LibRedirect pour être votre moteur de recherche par défaut. Pour savoir comment faire sur un navigateur chromium, cliquez \u003Ca href='https://libredirect.github.io/docs.html#search_engine_chromium' target='_blank' rel='noopener noreferrer'>ici\u003C/a>." + }, + "searchService": { + "message": "Chercher un service" + }, + "search_frontend": { + "message": "Chercher une interface" + }, + "service": { + "message": "Service" + }, + "services": { + "message": "Services" + }, + "settings": { + "description": "used in the popup", + "message": "Paramètres" + }, + "showInPopup": { + "description": "used in the settings page", + "message": "Afficher dans la fenêtre contextuelle de l'extension" + }, + "switchInstance": { + "description": "used in manifest.json as shortcut description", + "message": "Changer d'instance" + }, + "theme": { + "description": "used in the settings page", + "message": "Thème" + }, + "unsupportedIframesHandling": { + "message": "Gestion des éléments embarqués non-pris-en-charge" + } +} diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/gl/messages.json b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/gl/messages.json new file mode 100644 index 0000000..7f44b2b --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/gl/messages.json @@ -0,0 +1,160 @@ +{ + "extensionName": { + "message": "LibRedirect", + "description": "name of the extension" + }, + "extensionDescription": { + "message": "Un complemento do navegador que redirixe o tráfico cara alternativas amigables e respetuosas", + "description": "description of the extension" + }, + "switchInstance": { + "message": "Cambiar de Instancia", + "description": "used in manifest.json as shortcut description" + }, + "settings": { + "message": "Axustes", + "description": "used in the popup" + }, + "general": { + "message": "Xeral", + "description": "used in the settings page" + }, + "theme": { + "message": "Decorado", + "description": "used in the settings page" + }, + "light": { + "message": "Claro", + "description": "used in the settings page" + }, + "dark": { + "message": "Escuro", + "description": "used in the settings page" + }, + "auto": { + "message": "Auto", + "description": "used in the settings page" + }, + "excludeFromRedirecting": { + "message": "Excluído da redirección", + "description": "used in the settings page" + }, + "importSettings": { + "message": "Importar Axustes", + "description": "used in the settings page" + }, + "exportSettings": { + "message": "Exportar Axustes", + "description": "used in the settings page" + }, + "resetSettings": { + "message": "Restablecer Axustes", + "description": "used in the settings page" + }, + "enable": { + "message": "Activar", + "description": "used in the settings page" + }, + "showInPopup": { + "message": "Mostrar nunha xanela emerxente", + "description": "used in the settings page" + }, + "frontend": { + "message": "Interface", + "description": "used in the settings page" + }, + "redirectType": { + "message": "Tipo de Redirección", + "description": "used in the settings page" + }, + "both": { + "message": "ambos", + "description": "used in the settings page" + }, + "onlyEmbedded": { + "message": "só incrustados", + "description": "used in the settings page" + }, + "onlyNotEmbedded": { + "message": "só non incrustados", + "description": "used in the settings page" + }, + "addYourFavoriteInstances": { + "message": "Engade as túas instancias favoritas", + "description": "used in the settings page" + }, + "copyOriginal": { + "message": "Copiar Orixinal" + }, + "copied": { + "message": "Copiouse" + }, + "redirectToOriginal": { + "message": "Ir ao orixinal", + "description": "Used in context menus when right clicking on a page/tab" + }, + "redirectLink": { + "message": "Tenta redirixir", + "description": "Used in context menus when right clicking on a hyperlink" + }, + "about": { + "message": "Sobre" + }, + "unsupportedIframesHandling": { + "message": "Xestión de incrustacións sen soporte" + }, + "fetchPublicInstances": { + "message": "Obter instancias públicas" + }, + "disable": { + "message": "Desactivar" + }, + "pingInstances": { + "message": "Comprobar Instancias" + }, + "exportSettingsToSync": { + "message": "Exportar Axustes a Sincr." + }, + "importSettingsFromSync": { + "message": "Importar Axustes de Sincr" + }, + "services": { + "message": "Servizos" + }, + "service": { + "message": "Service" + }, + "bookmarksMenu": { + "message": "Menú dos marcadores" + }, + "redirectOnlyInIncognito": { + "message": "Redirect só en Incógnito" + }, + "bypass": { + "message": "Omitir" + }, + "block": { + "message": "Block" + }, + "searchHint": { + "message": "Establece a LibRedirect como Motor de Busca predeterminado. Para facelo nos navegadores chromium, preme aquí." + }, + "redirect": { + "message": "Redirect" + }, + "autoPickInstance": { + "message": "Selecc. automática instancia" + }, + "redirectGoogle": { + "message": "Redirect a Google" + }, + "search_frontend": { + "message": "Buscar Interface Alt." + }, + "searchService": { + "message": "Buscar Servizo" + }, + "embedFrontend": { + "message": "Incrustar Interface" + } +} diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/hi/messages.json b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/hi/messages.json new file mode 100644 index 0000000..2c63c08 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/hi/messages.json @@ -0,0 +1,2 @@ +{ +} diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/hr/messages.json b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/hr/messages.json new file mode 100644 index 0000000..346e030 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/hr/messages.json @@ -0,0 +1,160 @@ +{ + "about": { + "message": "O" + }, + "addYourFavoriteInstances": { + "description": "used in the settings page", + "message": "Dodaj svoje omiljene instance" + }, + "auto": { + "description": "used in the settings page", + "message": "Automatski" + }, + "autoPickInstance": { + "message": "Odaberi instancu automatski" + }, + "block": { + "message": "Blokiraj" + }, + "bookmarksMenu": { + "message": "Izbornik zabilješki" + }, + "both": { + "description": "used in the settings page", + "message": "oboje" + }, + "bypass": { + "message": "Zaobiđi" + }, + "copied": { + "message": "Kopirano" + }, + "copyOriginal": { + "message": "Kopiraj original" + }, + "dark": { + "description": "used in the settings page", + "message": "Tamna" + }, + "disable": { + "message": "Deaktiviraj" + }, + "embedFrontend": { + "message": "Ugradi sučelje" + }, + "enable": { + "description": "used in the settings page", + "message": "Aktiviraj" + }, + "excludeFromRedirecting": { + "description": "used in the settings page", + "message": "Isključeno iz preusmjeravanja" + }, + "exportSettings": { + "description": "used in the settings page", + "message": "Izvezi postavke" + }, + "exportSettingsToSync": { + "message": "Izvezi postavke za sinkronizaciju" + }, + "extensionDescription": { + "description": "description of the extension", + "message": "Web proširenje koje preusmjerava popularne web stranice na alternativna sučelja i pozadinske sustave prilagođene privatnosti" + }, + "extensionName": { + "description": "name of the extension", + "message": "LibRedirect" + }, + "fetchPublicInstances": { + "message": "Dohvati javne instance" + }, + "frontend": { + "description": "used in the settings page", + "message": "Sučelje" + }, + "general": { + "description": "used in the settings page", + "message": "Opće" + }, + "importSettings": { + "description": "used in the settings page", + "message": "Uvezi postavke" + }, + "importSettingsFromSync": { + "message": "Uvezi postavke iz sinkronizacije" + }, + "light": { + "description": "used in the settings page", + "message": "Svijetla" + }, + "onlyEmbedded": { + "description": "used in the settings page", + "message": "samo ugrađena" + }, + "onlyNotEmbedded": { + "description": "used in the settings page", + "message": "samo neugrađena" + }, + "pingInstances": { + "message": "Testiraj instance" + }, + "redirect": { + "message": "Preusmjeri" + }, + "redirectGoogle": { + "message": "Preusmjeri na Google" + }, + "redirectLink": { + "description": "Used in context menus when right clicking on a hyperlink", + "message": "Pokušaj preusmjeriti" + }, + "redirectOnlyInIncognito": { + "message": "Preusmjeri samo u inkognito modusu" + }, + "redirectToOriginal": { + "description": "Used in context menus when right clicking on a page/tab", + "message": "Preusmjeri na original" + }, + "redirectType": { + "description": "used in the settings page", + "message": "Vrsta preusmjeravanja" + }, + "resetSettings": { + "description": "used in the settings page", + "message": "Obnovi postavke" + }, + "searchHint": { + "message": "Postavi LibRedirect kao standardnu tražilicu. \u003Ca href='https://libredirect.github.io/docs.html#search_engine_chromium' target='_blank' rel='noopener noreferrer'>Ovdje\u003C/a> pogledaj kako se to radi u Chromium web pregledniku." + }, + "searchService": { + "message": "Traži uslugu" + }, + "search_frontend": { + "message": "Traži sučelje" + }, + "service": { + "message": "Usluga" + }, + "services": { + "message": "Usluge" + }, + "settings": { + "description": "used in the popup", + "message": "Postavke" + }, + "showInPopup": { + "description": "used in the settings page", + "message": "Pokaži u skočnom prozoru" + }, + "switchInstance": { + "description": "used in manifest.json as shortcut description", + "message": "Zamijeni instancu" + }, + "theme": { + "description": "used in the settings page", + "message": "Tema" + }, + "unsupportedIframesHandling": { + "message": "Nepodržano rukovanje iframeovima" + } +} diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/hu/messages.json b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/hu/messages.json new file mode 100644 index 0000000..edf6f6e --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/hu/messages.json @@ -0,0 +1,137 @@ +{ + "about": { + "message": "Névjegy" + }, + "addYourFavoriteInstances": { + "message": "Adja hozzá kedvenc példányait" + }, + "auto": { + "message": "Automatikus" + }, + "autoPickInstance": { + "message": "Példány automatikus kiválasztása" + }, + "block": { + "message": "Letiltás" + }, + "bookmarksMenu": { + "message": "Könyvjelzők menü" + }, + "both": { + "message": "mindkettő" + }, + "bypass": { + "message": "Megkerülés" + }, + "copied": { + "message": "Másolva" + }, + "copyOriginal": { + "message": "Eredeti másolása" + }, + "dark": { + "message": "Sötét" + }, + "disable": { + "message": "Tiltás" + }, + "embedFrontend": { + "message": "Beágyazott előtétprogram" + }, + "enable": { + "message": "Engedélyezés" + }, + "excludeFromRedirecting": { + "message": "Átirányításból kizárt" + }, + "exportSettings": { + "message": "Beállítások exportálása" + }, + "exportSettingsToSync": { + "message": "Beállítások exportálása a szinkronizáláshoz" + }, + "extensionDescription": { + "message": "Egy webes kiterjesztés, amely népszerű webhelyeket irányít át alternatív, adatvédelemet tiszteletben tartó elő- és háttérprogramokra" + }, + "extensionName": { + "message": "LibRedirect" + }, + "fetchPublicInstances": { + "message": "Nyilvános példányok lekérése" + }, + "frontend": { + "message": "Előtétprogram" + }, + "general": { + "message": "Általános" + }, + "importSettings": { + "message": "Beállítások importálása" + }, + "importSettingsFromSync": { + "message": "Beállítások importálása a szinkronizációból" + }, + "light": { + "message": "Világos" + }, + "onlyEmbedded": { + "message": "csak beágyazott" + }, + "onlyNotEmbedded": { + "message": "csak nem beágyazott" + }, + "pingInstances": { + "message": "Példányok pingelése" + }, + "redirect": { + "message": "Átirányítás" + }, + "redirectGoogle": { + "message": "Google átirányítása" + }, + "redirectLink": { + "message": "Kísérlet az átirányításra" + }, + "redirectOnlyInIncognito": { + "message": "Átirányítás csak inkognitóban" + }, + "redirectToOriginal": { + "message": "Átirányítás az eredetire" + }, + "redirectType": { + "message": "Átirányítás típusa" + }, + "resetSettings": { + "message": "Beállítások visszaállítása" + }, + "searchHint": { + "message": "LibRedirect beállítása alapértelmezett keresőmotornak. A Chromium böngészőkben történő művelethez kattintson \u003Ca href='https://libredirect.github.io/docs.html#search_engine_chromium' target='_blank' rel='noopener noreferrer'>ide\u003C/a>." + }, + "searchService": { + "message": "Szolgáltatás keresése" + }, + "search_frontend": { + "message": "Előtétprogram keresése" + }, + "service": { + "message": "Szolgáltatás" + }, + "services": { + "message": "Szolgáltatások" + }, + "settings": { + "message": "Beállítások" + }, + "showInPopup": { + "message": "Megjelenítés felugró ablakban" + }, + "switchInstance": { + "message": "Példány váltása" + }, + "theme": { + "message": "Téma" + }, + "unsupportedIframesHandling": { + "message": "Nem támogatott beágyazások kezelése" + } +} diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/id/messages.json b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/id/messages.json new file mode 100644 index 0000000..323df46 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/id/messages.json @@ -0,0 +1,160 @@ +{ + "about": { + "message": "Tentang" + }, + "addYourFavoriteInstances": { + "description": "used in the settings page", + "message": "Tambahkan server favorit Anda" + }, + "auto": { + "description": "used in the settings page", + "message": "Auto" + }, + "autoPickInstance": { + "message": "Pilih Server Otomatis" + }, + "block": { + "message": "Block" + }, + "bookmarksMenu": { + "message": "Menu penanda" + }, + "both": { + "description": "used in the settings page", + "message": "keduanya" + }, + "bypass": { + "message": "Mengakali" + }, + "copied": { + "message": "Disalin" + }, + "copyOriginal": { + "message": "Salin Asli" + }, + "dark": { + "description": "used in the settings page", + "message": "Gelap" + }, + "disable": { + "message": "Nonaktifkan" + }, + "embedFrontend": { + "message": "Frontend Sematan" + }, + "enable": { + "description": "used in the settings page", + "message": "Aktifkan" + }, + "excludeFromRedirecting": { + "description": "used in the settings page", + "message": "Tidak disertakan dari pengalihan" + }, + "exportSettings": { + "description": "used in the settings page", + "message": "Ekspor Pengaturan" + }, + "exportSettingsToSync": { + "message": "Pengaturan Ekspor ke Sinkronisasi" + }, + "extensionDescription": { + "description": "description of the extension", + "message": "Ekstensi web yang mengalihkan situs-situs terkenal ke frontend dan backend alternatif yang menghargai privasi" + }, + "extensionName": { + "description": "name of the extension", + "message": "Libredirect" + }, + "fetchPublicInstances": { + "message": "Dapatkan server publik" + }, + "frontend": { + "description": "used in the settings page", + "message": "Frontend" + }, + "general": { + "description": "used in the settings page", + "message": "Umum" + }, + "importSettings": { + "description": "used in the settings page", + "message": "Impor Pengaturan" + }, + "importSettingsFromSync": { + "message": "Mengimpor Pengaturan dari Sinkronisasi" + }, + "light": { + "description": "used in the settings page", + "message": "Terang" + }, + "onlyEmbedded": { + "description": "used in the settings page", + "message": "hanya tersemat" + }, + "onlyNotEmbedded": { + "description": "used in the settings page", + "message": "hanya tidak tersemat" + }, + "pingInstances": { + "message": "Ping Server" + }, + "redirect": { + "message": "Pengalihan" + }, + "redirectGoogle": { + "message": "Alihkan Google" + }, + "redirectLink": { + "description": "Used in context menus when right clicking on a hyperlink", + "message": "Coba alihkan" + }, + "redirectOnlyInIncognito": { + "message": "Alihkan Hanya dalam Penyamaran" + }, + "redirectToOriginal": { + "description": "Used in context menus when right clicking on a page/tab", + "message": "Alihkan ke asli" + }, + "redirectType": { + "description": "used in the settings page", + "message": "Jenis Pengalihan" + }, + "resetSettings": { + "description": "used in the settings page", + "message": "Atur Ulang Pengaturan" + }, + "searchHint": { + "message": "Tetapkan LibRedirect sebagai Mesin Pencari Default. Untuk cara melakukannya di browser kromium, klik\u003Ca href='https://libredirect.github.io/docs.html#search_engine_chromium' target='_blank' rel='noopener noreferrer'>here\u003C/a>." + }, + "searchService": { + "message": "Layanan Pencarian" + }, + "search_frontend": { + "message": "Frontend Pencarian" + }, + "service": { + "message": "Service" + }, + "services": { + "message": "Layanan" + }, + "settings": { + "description": "used in the popup", + "message": "Setelan" + }, + "showInPopup": { + "description": "used in the settings page", + "message": "Tampilkan di sembulan" + }, + "switchInstance": { + "description": "used in manifest.json as shortcut description", + "message": "Ganti Server" + }, + "theme": { + "description": "used in the settings page", + "message": "Tema" + }, + "unsupportedIframesHandling": { + "message": "Penanganan sematan tidak didukung" + } +} diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/it/messages.json b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/it/messages.json new file mode 100644 index 0000000..61f9513 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/it/messages.json @@ -0,0 +1,160 @@ +{ + "about": { + "message": "Informazioni" + }, + "addYourFavoriteInstances": { + "description": "used in the settings page", + "message": "Aggiungi le tue istanze preferite" + }, + "auto": { + "description": "used in the settings page", + "message": "Auto" + }, + "autoPickInstance": { + "message": "Scegli istanza automaticamente" + }, + "block": { + "message": "Block" + }, + "bookmarksMenu": { + "message": "Menu Segnalibri" + }, + "both": { + "description": "used in the settings page", + "message": "entrambi" + }, + "bypass": { + "message": "Ignora" + }, + "copied": { + "message": "Copiato" + }, + "copyOriginal": { + "message": "Copia originale" + }, + "dark": { + "description": "used in the settings page", + "message": "Scuro" + }, + "disable": { + "message": "Disattiva" + }, + "embedFrontend": { + "message": "Incorpora frontend" + }, + "enable": { + "description": "used in the settings page", + "message": "Attiva" + }, + "excludeFromRedirecting": { + "description": "used in the settings page", + "message": "Escluso dal reindirizzamento" + }, + "exportSettings": { + "description": "used in the settings page", + "message": "Esporta impostazioni" + }, + "exportSettingsToSync": { + "message": "Esporta impostazioni in Sync" + }, + "extensionDescription": { + "description": "description of the extension", + "message": "Un'estensione per il browser che reindirizza i siti più popolari verso frontend e backend alternativi rispettosi della privacy" + }, + "extensionName": { + "description": "name of the extension", + "message": "LibRedirect" + }, + "fetchPublicInstances": { + "message": "Recupera istanze pubbliche" + }, + "frontend": { + "description": "used in the settings page", + "message": "Interfaccia" + }, + "general": { + "description": "used in the settings page", + "message": "Generali" + }, + "importSettings": { + "description": "used in the settings page", + "message": "Importa impostazioni" + }, + "importSettingsFromSync": { + "message": "Importa impostazioni da Sync" + }, + "light": { + "description": "used in the settings page", + "message": "Chiaro" + }, + "onlyEmbedded": { + "description": "used in the settings page", + "message": "solo incorporati" + }, + "onlyNotEmbedded": { + "description": "used in the settings page", + "message": "solo non incorporati" + }, + "pingInstances": { + "message": "Ping istanze" + }, + "redirect": { + "message": "Reindirizza" + }, + "redirectGoogle": { + "message": "Reindirizza Google" + }, + "redirectLink": { + "description": "Used in context menus when right clicking on a hyperlink", + "message": "Prova a reindirizzare" + }, + "redirectOnlyInIncognito": { + "message": "Reindirizza solo in Incognito" + }, + "redirectToOriginal": { + "description": "Used in context menus when right clicking on a page/tab", + "message": "Reindirizza all'originale" + }, + "redirectType": { + "description": "used in the settings page", + "message": "Tipo di reindirizzamento" + }, + "resetSettings": { + "description": "used in the settings page", + "message": "Ripristina impostazioni" + }, + "searchHint": { + "message": "Impostare LibRedirect come motore di ricerca predefinito. Per i browser Chromium, premere \u003Ca href='https://libredirect.github.io/docs.html#search_engine_chromium' target='_blank' rel='noopener noreferrer'>qui\u003C/a>." + }, + "searchService": { + "message": "Cerca servizio" + }, + "search_frontend": { + "message": "Cerca frontend" + }, + "service": { + "message": "Service" + }, + "services": { + "message": "Servizi" + }, + "settings": { + "description": "used in the popup", + "message": "Impostazioni" + }, + "showInPopup": { + "description": "used in the settings page", + "message": "Mostra nel popup" + }, + "switchInstance": { + "description": "used in manifest.json as shortcut description", + "message": "Cambia istanza" + }, + "theme": { + "description": "used in the settings page", + "message": "Tema" + }, + "unsupportedIframesHandling": { + "message": "Gestione degli elementi incorporati non supportata" + } +} diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/ja/messages.json b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/ja/messages.json new file mode 100644 index 0000000..016c3ce --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/ja/messages.json @@ -0,0 +1,160 @@ +{ + "about": { + "message": "公式サイト" + }, + "addYourFavoriteInstances": { + "description": "used in the settings page", + "message": "独自のインスタンスを追加" + }, + "auto": { + "description": "used in the settings page", + "message": "自動" + }, + "autoPickInstance": { + "message": "インスタンスを自動で取得" + }, + "block": { + "message": "表示しない" + }, + "bookmarksMenu": { + "message": "ブークマークのメニューに追加" + }, + "both": { + "description": "used in the settings page", + "message": "両方" + }, + "bypass": { + "message": "転送なし" + }, + "copied": { + "message": "コピーしました" + }, + "copyOriginal": { + "message": "元のサービスのURIをコピー" + }, + "dark": { + "description": "used in the settings page", + "message": "ダーク" + }, + "disable": { + "message": "無効" + }, + "embedFrontend": { + "message": "埋め込みフロントエンド" + }, + "enable": { + "description": "used in the settings page", + "message": "有効化" + }, + "excludeFromRedirecting": { + "description": "used in the settings page", + "message": "転送から除外" + }, + "exportSettings": { + "description": "used in the settings page", + "message": "設定のエクスポート" + }, + "exportSettingsToSync": { + "message": "設定を同期にエクスポート" + }, + "extensionDescription": { + "description": "description of the extension", + "message": "人気サイトを個人情報に配慮した代替のフロントエンド/バックエンドに転送するウェブ拡張機能" + }, + "extensionName": { + "description": "name of the extension", + "message": "LibRedirect" + }, + "fetchPublicInstances": { + "message": "公開インスタンスの一覧を取得" + }, + "frontend": { + "description": "used in the settings page", + "message": "フロントエンド" + }, + "general": { + "description": "used in the settings page", + "message": "一般" + }, + "importSettings": { + "description": "used in the settings page", + "message": "設定のインポート" + }, + "importSettingsFromSync": { + "message": "設定を同期からインポート" + }, + "light": { + "description": "used in the settings page", + "message": "ライト" + }, + "onlyEmbedded": { + "description": "used in the settings page", + "message": "埋め込み型のみ" + }, + "onlyNotEmbedded": { + "description": "used in the settings page", + "message": "非埋め込み型のみ" + }, + "pingInstances": { + "message": "インスタンスの応答時間を確認" + }, + "redirect": { + "message": "転送する" + }, + "redirectGoogle": { + "message": "Googleを転送する" + }, + "redirectLink": { + "description": "Used in context menus when right clicking on a hyperlink", + "message": "転送する" + }, + "redirectOnlyInIncognito": { + "message": "シークレットモードでのみ転送" + }, + "redirectToOriginal": { + "description": "Used in context menus when right clicking on a page/tab", + "message": "元のサービスに転送" + }, + "redirectType": { + "description": "used in the settings page", + "message": "転送の種類" + }, + "resetSettings": { + "description": "used in the settings page", + "message": "設定を初期化" + }, + "searchHint": { + "message": "LibRedirect を標準の検索エンジンに設定します。chromium ブラウザーでのやり方は、\u003Ca href='https://libredirect.github.io/docs.html#search_engine_chromium' target='_blank' rel='noopener noreferrer'>こちらをクリック\u003C/a>。" + }, + "searchService": { + "message": "検索サービス" + }, + "search_frontend": { + "message": "検索フロントエンド" + }, + "service": { + "message": "サービス" + }, + "services": { + "message": "サービス" + }, + "settings": { + "description": "used in the popup", + "message": "設定" + }, + "showInPopup": { + "description": "used in the settings page", + "message": "ポップアップ内に表示" + }, + "switchInstance": { + "description": "used in manifest.json as shortcut description", + "message": "インスタンスを変更" + }, + "theme": { + "description": "used in the settings page", + "message": "テーマ" + }, + "unsupportedIframesHandling": { + "message": "未対応の埋め込み動画の処理" + } +} diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/jv/messages.json b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/jv/messages.json new file mode 100644 index 0000000..90a2fc4 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/jv/messages.json @@ -0,0 +1,145 @@ +{ + "extensionName": { + "message": "LibRedirect", + "description": "name of the extension" + }, + "extensionDescription": { + "message": "A web extension that redirects popular sites to alternative privacy-friendly frontends and backends", + "description": "description of the extension" + }, + "switchInstance": { + "message": "Switch Instance", + "description": "used in manifest.json as shortcut description" + }, + "settings": { + "message": "Settings", + "description": "used in the popup" + }, + "general": { + "message": "General", + "description": "used in the settings page" + }, + "theme": { + "message": "Téma", + "description": "used in the settings page" + }, + "light": { + "message": "Terang", + "description": "used in the settings page" + }, + "dark": { + "message": "Peteng", + "description": "used in the settings page" + }, + "auto": { + "message": "Auto", + "description": "used in the settings page" + }, + "excludeFromRedirecting": { + "message": "Excluded from redirecting", + "description": "used in the settings page" + }, + "importSettings": { + "message": "Import Settings", + "description": "used in the settings page" + }, + "exportSettings": { + "message": "Export Settings", + "description": "used in the settings page" + }, + "resetSettings": { + "message": "Reset Settings", + "description": "used in the settings page" + }, + "enable": { + "message": "Enable", + "description": "used in the settings page" + }, + "showInPopup": { + "message": "Show in popup", + "description": "used in the settings page" + }, + "frontend": { + "message": "Frontend", + "description": "used in the settings page" + }, + "redirectType": { + "message": "Redirect Type", + "description": "used in the settings page" + }, + "both": { + "message": "both", + "description": "used in the settings page" + }, + "onlyEmbedded": { + "message": "only embedded", + "description": "used in the settings page" + }, + "onlyNotEmbedded": { + "message": "only not embedded", + "description": "used in the settings page" + }, + "addYourFavoriteInstances": { + "message": "Add your favorite instances", + "description": "used in the settings page" + }, + "copyOriginal": { + "message": "Copy Original" + }, + "copied": { + "message": "Copied" + }, + "redirectToOriginal": { + "message": "Redirect to original", + "description": "Used in context menus when right clicking on a page/tab" + }, + "redirectLink": { + "message": "Attempt to redirect", + "description": "Used in context menus when right clicking on a hyperlink" + }, + "about": { + "message": "About" + }, + "unsupportedIframesHandling": { + "message": "Unsupported embeds handling" + }, + "fetchPublicInstances": { + "message": "Fetch public instances" + }, + "disable": { + "message": "Disable" + }, + "pingInstances": { + "message": "Ping Instances" + }, + "exportSettingsToSync": { + "message": "Export Settings to Sync" + }, + "importSettingsFromSync": { + "message": "Import Settings from Sync" + }, + "services": { + "message": "Services" + }, + "service": { + "message": "Service" + }, + "bookmarksMenu": { + "message": "Bookmarks menu" + }, + "redirectOnlyInIncognito": { + "message": "Redirect Only in Incognito" + }, + "bypass": { + "message": "Bypass" + }, + "block": { + "message": "Block" + }, + "searchHint": { + "message": "Set LibRedirect as Default Search Engine. For how to do in chromium browsers, click here." + }, + "redirect": { + "message": "Redirect" + } +} \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/ko/messages.json b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/ko/messages.json new file mode 100644 index 0000000..f77c522 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/ko/messages.json @@ -0,0 +1,145 @@ +{ + "about": { + "message": "About" + }, + "addYourFavoriteInstances": { + "description": "used in the settings page", + "message": "Add your favorite instances" + }, + "auto": { + "description": "used in the settings page", + "message": "Auto" + }, + "block": { + "message": "Block" + }, + "bookmarksMenu": { + "message": "Bookmarks menu" + }, + "both": { + "description": "used in the settings page", + "message": "둘 다" + }, + "bypass": { + "message": "Bypass" + }, + "copied": { + "message": "복사됨" + }, + "copyOriginal": { + "message": "Copy Original" + }, + "dark": { + "description": "used in the settings page", + "message": "어두움" + }, + "disable": { + "message": "Disable" + }, + "enable": { + "description": "used in the settings page", + "message": "활성화" + }, + "excludeFromRedirecting": { + "description": "used in the settings page", + "message": "Excluded from redirecting" + }, + "exportSettings": { + "description": "used in the settings page", + "message": "설정 내보내기" + }, + "exportSettingsToSync": { + "message": "Export Settings to Sync" + }, + "extensionDescription": { + "description": "description of the extension", + "message": "A web extension that redirects popular sites to alternative privacy-friendly frontends and backends" + }, + "extensionName": { + "description": "name of the extension", + "message": "LibRedirect" + }, + "fetchPublicInstances": { + "message": "Fetch public instances" + }, + "frontend": { + "description": "used in the settings page", + "message": "프론트엔드" + }, + "general": { + "description": "used in the settings page", + "message": "일반" + }, + "importSettings": { + "description": "used in the settings page", + "message": "설정 불러오기" + }, + "importSettingsFromSync": { + "message": "Import Settings from Sync" + }, + "light": { + "description": "used in the settings page", + "message": "밝음" + }, + "onlyEmbedded": { + "description": "used in the settings page", + "message": "임베디드 된 것만" + }, + "onlyNotEmbedded": { + "description": "used in the settings page", + "message": "임베디드 안된 것만" + }, + "pingInstances": { + "message": "Ping Instances" + }, + "redirect": { + "message": "Redirect" + }, + "redirectLink": { + "description": "Used in context menus when right clicking on a hyperlink", + "message": "Attempt to redirect this hyperlink" + }, + "redirectOnlyInIncognito": { + "message": "Redirect Only in Incognito" + }, + "redirectToOriginal": { + "description": "Used in context menus when right clicking on a page/tab", + "message": "Redirect to original" + }, + "redirectType": { + "description": "used in the settings page", + "message": "리다이렉트 종류" + }, + "resetSettings": { + "description": "used in the settings page", + "message": "설정 초기화" + }, + "searchHint": { + "message": "Set LibRedirect as Default Search Engine. For how to do in chromium browsers, click \u003Ca href='https://libredirect.github.io/docs.html#search_engine_chromium' target='_blank' rel='noopener noreferrer'>here\u003C/a>." + }, + "service": { + "message": "Service" + }, + "services": { + "message": "Services" + }, + "settings": { + "description": "used in the popup", + "message": "설정" + }, + "showInPopup": { + "description": "used in the settings page", + "message": "Show in popup" + }, + "switchInstance": { + "description": "used in manifest.json as shortcut description", + "message": "인스턴스 바꾸기" + }, + "theme": { + "description": "used in the settings page", + "message": "테마" + }, + "unsupportedIframesHandling": { + "message": "Unsupported iframes handling" + } +} diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/lv/messages.json b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/lv/messages.json new file mode 100644 index 0000000..d94ee29 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/lv/messages.json @@ -0,0 +1,95 @@ +{ + "about": { + "message": "Par paplašinājumu" + }, + "addYourFavoriteInstances": { + "message": "Pievienojiet savus iecienītākos serverus (instances)" + }, + "autoPickInstance": { + "message": "Automātiski atlasīt serveri (instanci)" + }, + "bookmarksMenu": { + "message": "Grāmatzīmju izvēlne" + }, + "both": { + "message": "abus" + }, + "bypass": { + "message": "Apiet" + }, + "copied": { + "message": "Nokopēts" + }, + "copyOriginal": { + "message": "Kopēt oriģinālu" + }, + "dark": { + "message": "Tumšs" + }, + "disable": { + "message": "Atspējot" + }, + "enable": { + "message": "Iespējot" + }, + "excludeFromRedirecting": { + "message": "Novirzīšanas izņēmumi (Izslēgt no novirzīšanas)" + }, + "exportSettings": { + "message": "Izgūt iestatījumus" + }, + "extensionDescription": { + "message": "Pārlūka paplašinājums, kas novirza populāras vietnes uz konfidencialitātes drošām saskarnes un servera programmatūras alternatīvām" + }, + "extensionName": { + "message": "LibRedirect" + }, + "fetchPublicInstances": { + "message": "Iegūt publiskos serverus (instances)" + }, + "frontend": { + "message": "Saskarne" + }, + "general": { + "message": "Vispārīgie" + }, + "importSettings": { + "message": "Ievietot iestatījumus" + }, + "light": { + "message": "Gaišs" + }, + "onlyEmbedded": { + "message": "tikai iebūvēto" + }, + "onlyNotEmbedded": { + "message": "tikai neiebūvēto" + }, + "redirectToOriginal": { + "message": "Novirzīt uz oriģinālo vietni" + }, + "redirectType": { + "message": "Novirzīšanas veids" + }, + "resetSettings": { + "message": "Atiestatīt iestatījumus" + }, + "service": { + "message": "Pakalpojums" + }, + "services": { + "message": "Pakalpojumi" + }, + "settings": { + "message": "Iestatījumi" + }, + "showInPopup": { + "message": "Rādīt uznirstošajā logā" + }, + "switchInstance": { + "message": "Mainīt serveri (instanci)" + }, + "theme": { + "message": "Motīvs" + } +} diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/nb_NO/messages.json b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/nb_NO/messages.json new file mode 100644 index 0000000..40d8a53 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/nb_NO/messages.json @@ -0,0 +1,145 @@ +{ + "about": { + "message": "About" + }, + "addYourFavoriteInstances": { + "description": "used in the settings page", + "message": "Add your favorite instances" + }, + "auto": { + "description": "used in the settings page", + "message": "Auto" + }, + "block": { + "message": "Block" + }, + "bookmarksMenu": { + "message": "Bookmarks menu" + }, + "both": { + "description": "used in the settings page", + "message": "begge" + }, + "bypass": { + "message": "Bypass" + }, + "copied": { + "message": "Kopiert" + }, + "copyOriginal": { + "message": "Copy Original" + }, + "dark": { + "description": "used in the settings page", + "message": "Mørk" + }, + "disable": { + "message": "Disable" + }, + "enable": { + "description": "used in the settings page", + "message": "Skru på" + }, + "excludeFromRedirecting": { + "description": "used in the settings page", + "message": "Excluded from redirecting" + }, + "exportSettings": { + "description": "used in the settings page", + "message": "Eksporter innstillinger" + }, + "exportSettingsToSync": { + "message": "Export Settings to Sync" + }, + "extensionDescription": { + "description": "description of the extension", + "message": "En vev-utvidelse som videresender populære sider til alternative personvernsrespekterende grenseflater og bakender" + }, + "extensionName": { + "description": "name of the extension", + "message": "LibRedirect" + }, + "fetchPublicInstances": { + "message": "Fetch public instances" + }, + "frontend": { + "description": "used in the settings page", + "message": "Grenseflate" + }, + "general": { + "description": "used in the settings page", + "message": "Generelt" + }, + "importSettings": { + "description": "used in the settings page", + "message": "Importer innstillinger" + }, + "importSettingsFromSync": { + "message": "Import Settings from Sync" + }, + "light": { + "description": "used in the settings page", + "message": "Lys" + }, + "onlyEmbedded": { + "description": "used in the settings page", + "message": "kun innebygde" + }, + "onlyNotEmbedded": { + "description": "used in the settings page", + "message": "kun ikke-innebygde" + }, + "pingInstances": { + "message": "Ping Instances" + }, + "redirect": { + "message": "Redirect" + }, + "redirectLink": { + "description": "Used in context menus when right clicking on a hyperlink", + "message": "Attempt to redirect this hyperlink" + }, + "redirectOnlyInIncognito": { + "message": "Redirect Only in Incognito" + }, + "redirectToOriginal": { + "description": "Used in context menus when right clicking on a page/tab", + "message": "Redirect to original" + }, + "redirectType": { + "description": "used in the settings page", + "message": "Videresendingstype" + }, + "resetSettings": { + "description": "used in the settings page", + "message": "Tilbakestill innstillinger" + }, + "searchHint": { + "message": "Set LibRedirect as Default Search Engine. For how to do in chromium browsers, click \u003Ca href='https://libredirect.github.io/docs.html#search_engine_chromium' target='_blank' rel='noopener noreferrer'>here\u003C/a>." + }, + "service": { + "message": "Service" + }, + "services": { + "message": "Services" + }, + "settings": { + "description": "used in the popup", + "message": "Innstillinger" + }, + "showInPopup": { + "description": "used in the settings page", + "message": "Show in popup" + }, + "switchInstance": { + "description": "used in manifest.json as shortcut description", + "message": "Bytt instans" + }, + "theme": { + "description": "used in the settings page", + "message": "Drakt" + }, + "unsupportedIframesHandling": { + "message": "Unsupported iframes handling" + } +} diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/nl/messages.json b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/nl/messages.json new file mode 100644 index 0000000..2c7cea4 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/nl/messages.json @@ -0,0 +1,160 @@ +{ + "about": { + "message": "Over" + }, + "addYourFavoriteInstances": { + "description": "used in the settings page", + "message": "Toevoegen aan favoriete instanties" + }, + "auto": { + "description": "used in the settings page", + "message": "Auto" + }, + "autoPickInstance": { + "message": "Automatisch instantie kiezen" + }, + "block": { + "message": "Blokkeren" + }, + "bookmarksMenu": { + "message": "Bladwijzermenu" + }, + "both": { + "description": "used in the settings page", + "message": "beide" + }, + "bypass": { + "message": "Omzeilen" + }, + "copied": { + "message": "Gekopieerd" + }, + "copyOriginal": { + "message": "Origineel kopiëren" + }, + "dark": { + "description": "used in the settings page", + "message": "Donker" + }, + "disable": { + "message": "Uitschakelen" + }, + "embedFrontend": { + "message": "Front-end insluiten" + }, + "enable": { + "description": "used in the settings page", + "message": "Inschakelen" + }, + "excludeFromRedirecting": { + "description": "used in the settings page", + "message": "Uitgesloten van doorverwijzen" + }, + "exportSettings": { + "description": "used in the settings page", + "message": "Instellingen exporteren" + }, + "exportSettingsToSync": { + "message": "Instellingen synchroniseren" + }, + "extensionDescription": { + "description": "description of the extension", + "message": "Een webextensie die populaire sites doorverwijst naar alternatieve privacy-vriendelijke frontends en backends" + }, + "extensionName": { + "description": "name of the extension", + "message": "LibRedirect" + }, + "fetchPublicInstances": { + "message": "Openbare instanties ophalen" + }, + "frontend": { + "description": "used in the settings page", + "message": "Front-end" + }, + "general": { + "description": "used in the settings page", + "message": "Algemeen" + }, + "importSettings": { + "description": "used in the settings page", + "message": "Instellingen importeren" + }, + "importSettingsFromSync": { + "message": "Instellingen ophalen uit synchronisatie" + }, + "light": { + "description": "used in the settings page", + "message": "Licht" + }, + "onlyEmbedded": { + "description": "used in the settings page", + "message": "alleen ingesloten" + }, + "onlyNotEmbedded": { + "description": "used in the settings page", + "message": "alleen niet-ingesloten" + }, + "pingInstances": { + "message": "Instanties pingen" + }, + "redirect": { + "message": "Doorverwijzen" + }, + "redirectGoogle": { + "message": "Google doorverwijzen" + }, + "redirectLink": { + "description": "Used in context menus when right clicking on a hyperlink", + "message": "Doorverwijzing proberen" + }, + "redirectOnlyInIncognito": { + "message": "Alleen doorverwijzen in privévensters" + }, + "redirectToOriginal": { + "description": "Used in context menus when right clicking on a page/tab", + "message": "Doorverwijzen naar origineel" + }, + "redirectType": { + "description": "used in the settings page", + "message": "Omleidingstype" + }, + "resetSettings": { + "description": "used in the settings page", + "message": "Standaardwaarden" + }, + "searchHint": { + "message": "Stel LibRedirect in als de standaard zoekmachine. Hoe je dit doet in op Chromium gebaseerde browsers, lees je \u003Ca href='' target='_blank' rel='noopener noreferrer'>hier\u003C/a>." + }, + "searchService": { + "message": "Zoeken naar dienst" + }, + "search_frontend": { + "message": "Zoeken naar front-end" + }, + "service": { + "message": "Dienst" + }, + "services": { + "message": "Diensten" + }, + "settings": { + "description": "used in the popup", + "message": "Instellingen" + }, + "showInPopup": { + "description": "used in the settings page", + "message": "Tonen in uitrolmenu" + }, + "switchInstance": { + "description": "used in manifest.json as shortcut description", + "message": "Schakelen tussen instanties" + }, + "theme": { + "description": "used in the settings page", + "message": "Thema" + }, + "unsupportedIframesHandling": { + "message": "Niet-ondersteunde insluitafhandeling" + } +} diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/pl/messages.json b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/pl/messages.json new file mode 100644 index 0000000..0e60f6c --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/pl/messages.json @@ -0,0 +1,160 @@ +{ + "about": { + "message": "Informacje" + }, + "addYourFavoriteInstances": { + "description": "used in the settings page", + "message": "Dodaj ulubione instancje" + }, + "auto": { + "description": "used in the settings page", + "message": "Automatyczny" + }, + "autoPickInstance": { + "message": "Automatyczny wybór instancji" + }, + "block": { + "message": "Zablokuj" + }, + "bookmarksMenu": { + "message": "Menu zakładek" + }, + "both": { + "description": "used in the settings page", + "message": "oba" + }, + "bypass": { + "message": "Omiń" + }, + "copied": { + "message": "Skopiowano" + }, + "copyOriginal": { + "message": "Kopiuj oryginał" + }, + "dark": { + "description": "used in the settings page", + "message": "Ciemny" + }, + "disable": { + "message": "Wyłącz" + }, + "embedFrontend": { + "message": "Frontend osadzania" + }, + "enable": { + "description": "used in the settings page", + "message": "Włącz" + }, + "excludeFromRedirecting": { + "description": "used in the settings page", + "message": "Wykluczone z przekierowania" + }, + "exportSettings": { + "description": "used in the settings page", + "message": "Eksportuj ustawienia" + }, + "exportSettingsToSync": { + "message": "Eksportuj ustawienia do synchronizacji" + }, + "extensionDescription": { + "description": "description of the extension", + "message": "Rozszerzenie, które przekierowuje popularne witryny do alternatywnych, szanujących prywatność frontendów i backendów" + }, + "extensionName": { + "description": "name of the extension", + "message": "LibRedirect" + }, + "fetchPublicInstances": { + "message": "Pobierz instancje publiczne" + }, + "frontend": { + "description": "used in the settings page", + "message": "Frontend" + }, + "general": { + "description": "used in the settings page", + "message": "Ogólne" + }, + "importSettings": { + "description": "used in the settings page", + "message": "Importuj ustawienia" + }, + "importSettingsFromSync": { + "message": "Importuj ustawienia do synchronizacji" + }, + "light": { + "description": "used in the settings page", + "message": "Jasny" + }, + "onlyEmbedded": { + "description": "used in the settings page", + "message": "tylko osadzone" + }, + "onlyNotEmbedded": { + "description": "used in the settings page", + "message": "tylko nieosadzone" + }, + "pingInstances": { + "message": "Pinguj instancje" + }, + "redirect": { + "message": "Przekieruj" + }, + "redirectGoogle": { + "message": "Przekieruj Google" + }, + "redirectLink": { + "description": "Used in context menus when right clicking on a hyperlink", + "message": "Spróbuj przekierować" + }, + "redirectOnlyInIncognito": { + "message": "Przekieruj tylko w trybie incognito" + }, + "redirectToOriginal": { + "description": "Used in context menus when right clicking on a page/tab", + "message": "Przekieruj do oryginału" + }, + "redirectType": { + "description": "used in the settings page", + "message": "Typ przekierowania" + }, + "resetSettings": { + "description": "used in the settings page", + "message": "Zresetuj ustawienia" + }, + "searchHint": { + "message": "Ustaw LibRedirect jako domyślną wyszukiwarkę. Aby dowiedzieć się, jak to zrobić w przeglądarkach Chromium, kliknij \u003Ca href='https://libredirect.github.io/docs.html#search_engine_chromium' target='_blank' rel='noopener noreferrer'>tutaj\u003C/a>." + }, + "searchService": { + "message": "Usługa wyszukiwania" + }, + "search_frontend": { + "message": "Frontend wyszukiwania" + }, + "service": { + "message": "Usługa" + }, + "services": { + "message": "Usługi" + }, + "settings": { + "description": "used in the popup", + "message": "Ustawienia" + }, + "showInPopup": { + "description": "used in the settings page", + "message": "Pokaż w wyskakującym okienku" + }, + "switchInstance": { + "description": "used in manifest.json as shortcut description", + "message": "Przełącz instancję" + }, + "theme": { + "description": "used in the settings page", + "message": "Motyw" + }, + "unsupportedIframesHandling": { + "message": "Brak obsługi osadzania" + } +} diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/pt/messages.json b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/pt/messages.json new file mode 100644 index 0000000..4320b20 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/pt/messages.json @@ -0,0 +1,145 @@ +{ + "about": { + "message": "Sobre" + }, + "addYourFavoriteInstances": { + "description": "used in the settings page", + "message": "Adicionar a sua instância favorita" + }, + "auto": { + "description": "used in the settings page", + "message": "Auto" + }, + "block": { + "message": "Block" + }, + "bookmarksMenu": { + "message": "Bookmarks menu" + }, + "both": { + "description": "used in the settings page", + "message": "ambos" + }, + "bypass": { + "message": "Bypass" + }, + "copied": { + "message": "Copiado" + }, + "copyOriginal": { + "message": "Copy Original" + }, + "dark": { + "description": "used in the settings page", + "message": "Escuro" + }, + "disable": { + "message": "Disable" + }, + "enable": { + "description": "used in the settings page", + "message": "Ativar" + }, + "excludeFromRedirecting": { + "description": "used in the settings page", + "message": "Excluído do redirecionamento" + }, + "exportSettings": { + "description": "used in the settings page", + "message": "Exportar configurações" + }, + "exportSettingsToSync": { + "message": "Export Settings to Sync" + }, + "extensionDescription": { + "description": "description of the extension", + "message": "Uma extensão para os navegadores de Internet que redireciona sites populares para interfaces gráficas e interfaces de textos alternativas e amigáveis que respeitam a privacidade" + }, + "extensionName": { + "description": "name of the extension", + "message": "LibRedirect" + }, + "fetchPublicInstances": { + "message": "Fetch public instances" + }, + "frontend": { + "description": "used in the settings page", + "message": "Interface" + }, + "general": { + "description": "used in the settings page", + "message": "Geral" + }, + "importSettings": { + "description": "used in the settings page", + "message": "Importar configurações" + }, + "importSettingsFromSync": { + "message": "Import Settings from Sync" + }, + "light": { + "description": "used in the settings page", + "message": "Claro" + }, + "onlyEmbedded": { + "description": "used in the settings page", + "message": "só embutidos" + }, + "onlyNotEmbedded": { + "description": "used in the settings page", + "message": "apenas os não embutidos" + }, + "pingInstances": { + "message": "Ping Instances" + }, + "redirect": { + "message": "Redirect" + }, + "redirectLink": { + "description": "Used in context menus when right clicking on a hyperlink", + "message": "Tentar redirecionar" + }, + "redirectOnlyInIncognito": { + "message": "Redirect Only in Incognito" + }, + "redirectToOriginal": { + "description": "Used in context menus when right clicking on a page/tab", + "message": "Redirecionar para o original" + }, + "redirectType": { + "description": "used in the settings page", + "message": "Tipo de redirecionamento" + }, + "resetSettings": { + "description": "used in the settings page", + "message": "Repor configurações" + }, + "searchHint": { + "message": "Set LibRedirect as Default Search Engine. For how to do in chromium browsers, click \u003Ca href='https://libredirect.github.io/docs.html#search_engine_chromium' target='_blank' rel='noopener noreferrer'>here\u003C/a>." + }, + "service": { + "message": "Service" + }, + "services": { + "message": "Services" + }, + "settings": { + "description": "used in the popup", + "message": "Configurações" + }, + "showInPopup": { + "description": "used in the settings page", + "message": "Mostrar no pop-up" + }, + "switchInstance": { + "description": "used in manifest.json as shortcut description", + "message": "Trocar de instância" + }, + "theme": { + "description": "used in the settings page", + "message": "Tema" + }, + "unsupportedIframesHandling": { + "message": "Unsupported iframes handling" + } +} diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/pt_BR/messages.json b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/pt_BR/messages.json new file mode 100644 index 0000000..17274d9 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/pt_BR/messages.json @@ -0,0 +1,160 @@ +{ + "about": { + "message": "Sobre" + }, + "addYourFavoriteInstances": { + "description": "used in the settings page", + "message": "Adicione sua instância favorita" + }, + "auto": { + "description": "used in the settings page", + "message": "Automático" + }, + "autoPickInstance": { + "message": "Instância automática" + }, + "block": { + "message": "Block" + }, + "bookmarksMenu": { + "message": "Menu de favoritos" + }, + "both": { + "description": "Utilizado na página de configurações", + "message": "ambos" + }, + "bypass": { + "message": "Ultrapassar" + }, + "copied": { + "message": "Copiado" + }, + "copyOriginal": { + "message": "Copiar Original" + }, + "dark": { + "description": "Utilizado na página de configurações", + "message": "Escuro" + }, + "disable": { + "message": "Desativar" + }, + "embedFrontend": { + "message": "Incorporar front -end" + }, + "enable": { + "description": "Utilizado na página de configurações", + "message": "Ativar" + }, + "excludeFromRedirecting": { + "description": "used in the settings page", + "message": "Excluído do redirecionamento" + }, + "exportSettings": { + "description": "Utilizado na página de configurações", + "message": "Exportar as configurações" + }, + "exportSettingsToSync": { + "message": "Exportar Configurações para a Sincronização" + }, + "extensionDescription": { + "description": "Descrição da Extensão", + "message": "Uma extensão para os navegadores de internet que redireciona os sítios/sites populares para interfaces gráficas e interfaces de textos alternativas e amigáveis que respeitam sua privacidade" + }, + "extensionName": { + "description": "Nome da Extensão", + "message": "LibRedirect" + }, + "fetchPublicInstances": { + "message": "Buscando instâncias públicas" + }, + "frontend": { + "description": "Utilizado na página de configurações", + "message": "Interface gráfica" + }, + "general": { + "description": "Utilizado na página de configurações", + "message": "Geral" + }, + "importSettings": { + "description": "Utilizado na página de configurações", + "message": "Importar as configurações" + }, + "importSettingsFromSync": { + "message": "Importar Configurações da Sincronização" + }, + "light": { + "description": "Utilizado na página de configurações", + "message": "Claro" + }, + "onlyEmbedded": { + "description": "Utilizado na página de configurações", + "message": "apenas os incorporados" + }, + "onlyNotEmbedded": { + "description": "Utilizado na página de configurações", + "message": "apenas os não incorporados" + }, + "pingInstances": { + "message": "Fazer Ping nas Instâncias" + }, + "redirect": { + "message": "Redirecionar" + }, + "redirectGoogle": { + "message": "Redirecionar o Google" + }, + "redirectLink": { + "description": "Used in context menus when right clicking on a hyperlink", + "message": "Tentar redirecionar" + }, + "redirectOnlyInIncognito": { + "message": "Redirecionar Somente em Anônimo" + }, + "redirectToOriginal": { + "description": "Used in context menus when right clicking on a page/tab", + "message": "Redirecionar para original" + }, + "redirectType": { + "description": "Utilizado na página de configurações", + "message": "Tipo de redirecionamento" + }, + "resetSettings": { + "description": "Utilizado na página de configurações", + "message": "Redefinir as configurações" + }, + "searchHint": { + "message": "Configure LibRedirect como Motor de Pesquisa Padrão. Para como fazer em navegadores Chromium, clique \u003Ca href='https://libredirect.github.io/docs.html#search_engine_chromium' target='_blank' rel='noopener noreferrer'>aqui\u003C/a>." + }, + "searchService": { + "message": "Serviço de pesquisa" + }, + "search_frontend": { + "message": "Pesquise front -end" + }, + "service": { + "message": "Service" + }, + "services": { + "message": "Serviços" + }, + "settings": { + "description": "Utilizado na janela da caixa de diálogo", + "message": "Configurações" + }, + "showInPopup": { + "description": "used in the settings page", + "message": "Mostrar em pop-up" + }, + "switchInstance": { + "description": "Utilizado no arquivo manifest.json como descrição do atalho", + "message": "Trocar a instância" + }, + "theme": { + "description": "Utilizado na página de configurações", + "message": "Tema" + }, + "unsupportedIframesHandling": { + "message": "Unsupported iframes handling" + } +} diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/ro/messages.json b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/ro/messages.json new file mode 100644 index 0000000..ca02507 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/ro/messages.json @@ -0,0 +1,157 @@ +{ + "about": { + "message": "About" + }, + "addYourFavoriteInstances": { + "description": "used in the settings page", + "message": "Add your favorite instances" + }, + "auto": { + "description": "used in the settings page", + "message": "Auto" + }, + "block": { + "message": "Block" + }, + "bookmarksMenu": { + "message": "Bookmarks menu" + }, + "both": { + "description": "used in the settings page", + "message": "ambele" + }, + "bypass": { + "message": "Bypass" + }, + "copied": { + "message": "Copiat" + }, + "copyOriginal": { + "message": "Copy Original" + }, + "dark": { + "description": "used in the settings page", + "message": "Întunecat" + }, + "disable": { + "message": "Dezactivează" + }, + "embedFrontend": { + "message": "Embed Frontend" + }, + "enable": { + "description": "used in the settings page", + "message": "Activează" + }, + "excludeFromRedirecting": { + "description": "used in the settings page", + "message": "Excluded from redirecting" + }, + "exportSettings": { + "description": "used in the settings page", + "message": "Exportul setărilor" + }, + "exportSettingsToSync": { + "message": "Export Settings to Sync" + }, + "extensionDescription": { + "description": "description of the extension", + "message": "O extensie web care redirecționează site-urile populare către frontend-uri și backend-uri alternative prietenoase cu confidențialitatea" + }, + "extensionName": { + "description": "name of the extension", + "message": "LibRedirect" + }, + "fetchPublicInstances": { + "message": "Obține instanțe publice" + }, + "frontend": { + "description": "used in the settings page", + "message": "Frontend" + }, + "general": { + "description": "used in the settings page", + "message": "General" + }, + "importSettings": { + "description": "used in the settings page", + "message": "Import setări" + }, + "importSettingsFromSync": { + "message": "Import Settings from Sync" + }, + "light": { + "description": "used in the settings page", + "message": "Luminat" + }, + "onlyEmbedded": { + "description": "used in the settings page", + "message": "numai încorporat" + }, + "onlyNotEmbedded": { + "description": "used in the settings page", + "message": "numai încorporat" + }, + "pingInstances": { + "message": "Ping Instances" + }, + "redirect": { + "message": "Redirect" + }, + "redirectGoogle": { + "message": "Redirectare Google" + }, + "redirectLink": { + "description": "Used in context menus when right clicking on a hyperlink", + "message": "Încercați să redirecționați" + }, + "redirectOnlyInIncognito": { + "message": "Redirect Only in Incognito" + }, + "redirectToOriginal": { + "description": "Used in context menus when right clicking on a page/tab", + "message": "Redirect to original" + }, + "redirectType": { + "description": "used in the settings page", + "message": "Tip redirecționare" + }, + "resetSettings": { + "description": "used in the settings page", + "message": "Resetează setarile" + }, + "searchHint": { + "message": "Set LibRedirect as Default Search Engine. For how to do in chromium browsers, click \u003Ca href='https://libredirect.github.io/docs.html#search_engine_chromium' target='_blank' rel='noopener noreferrer'>here\u003C/a>." + }, + "searchService": { + "message": "Servicii Căutare" + }, + "search_frontend": { + "message": "Căutare Frontend" + }, + "service": { + "message": "Service" + }, + "services": { + "message": "Services" + }, + "settings": { + "description": "used in the popup", + "message": "Setări" + }, + "showInPopup": { + "description": "used in the settings page", + "message": "Show in popup" + }, + "switchInstance": { + "description": "used in manifest.json as shortcut description", + "message": "Comutare Instanță" + }, + "theme": { + "description": "used in the settings page", + "message": "Temă" + }, + "unsupportedIframesHandling": { + "message": "Manipulare embeds neacceptată" + } +} diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/ru/messages.json b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/ru/messages.json new file mode 100644 index 0000000..8d1622b --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/ru/messages.json @@ -0,0 +1,160 @@ +{ + "about": { + "message": "О расширении" + }, + "addYourFavoriteInstances": { + "description": "used in the settings page", + "message": "Добавить в избранное" + }, + "auto": { + "description": "used in the settings page", + "message": "Автоопределение" + }, + "autoPickInstance": { + "message": "Выбрать сервер автоматически" + }, + "block": { + "message": "Block" + }, + "bookmarksMenu": { + "message": "Меню закладок" + }, + "both": { + "description": "used in the settings page", + "message": "оба" + }, + "bypass": { + "message": "Обход" + }, + "copied": { + "message": "Скопировано" + }, + "copyOriginal": { + "message": "Копировать исходную" + }, + "dark": { + "description": "used in the settings page", + "message": "Тёмная" + }, + "disable": { + "message": "Выключить" + }, + "embedFrontend": { + "message": "Встроить интерфейс" + }, + "enable": { + "description": "used in the settings page", + "message": "Включить" + }, + "excludeFromRedirecting": { + "description": "used in the settings page", + "message": "Исключения" + }, + "exportSettings": { + "description": "used in the settings page", + "message": "Экспортировать настройки" + }, + "exportSettingsToSync": { + "message": "Экспортировать настройки в службу синхронизации" + }, + "extensionDescription": { + "description": "description of the extension", + "message": "Расширение для браузера, перенаправляющее популярные сайты на обеспечивающие конфиденциальность альтернативны" + }, + "extensionName": { + "description": "name of the extension", + "message": "LibRedirect" + }, + "fetchPublicInstances": { + "message": "Получить общедоступные серверы" + }, + "frontend": { + "description": "used in the settings page", + "message": "Интерфейс" + }, + "general": { + "description": "used in the settings page", + "message": "Общее" + }, + "importSettings": { + "description": "used in the settings page", + "message": "Импортировать настройки" + }, + "importSettingsFromSync": { + "message": "Импортировать настройки из службы синхронизации" + }, + "light": { + "description": "used in the settings page", + "message": "Светлая" + }, + "onlyEmbedded": { + "description": "used in the settings page", + "message": "только встроенные" + }, + "onlyNotEmbedded": { + "description": "used in the settings page", + "message": "только не встроенные" + }, + "pingInstances": { + "message": "Опросить серверы" + }, + "redirect": { + "message": "Перенаправить" + }, + "redirectGoogle": { + "message": "Перенаправление Google" + }, + "redirectLink": { + "description": "Used in context menus when right clicking on a hyperlink", + "message": "Попытаться перенаправить" + }, + "redirectOnlyInIncognito": { + "message": "Перенаправлять только в приватных окнах" + }, + "redirectToOriginal": { + "description": "Used in context menus when right clicking on a page/tab", + "message": "Обратно на исходный сайт" + }, + "redirectType": { + "description": "used in the settings page", + "message": "Тип перенаправления" + }, + "resetSettings": { + "description": "used in the settings page", + "message": "Сброс настроек" + }, + "searchHint": { + "message": "Установить LibRedirect в качестве поисковой системы по умолчанию. Подробности о том, как это сделать в браузерах на Chromium, доступны \u003Ca href='https://libredirect.github.io/docs.html#search_engine_chromium' target='_blank' rel='noopener noreferrer'>здесь\u003C/a>." + }, + "searchService": { + "message": "Служба поиска" + }, + "search_frontend": { + "message": "Поисковый интерфейс" + }, + "service": { + "message": "Служба" + }, + "services": { + "message": "Службы" + }, + "settings": { + "description": "used in the popup", + "message": "Настройки" + }, + "showInPopup": { + "description": "used in the settings page", + "message": "Показывать во всплывающем окне" + }, + "switchInstance": { + "description": "used in manifest.json as shortcut description", + "message": "Сменить сервер" + }, + "theme": { + "description": "used in the settings page", + "message": "Тема" + }, + "unsupportedIframesHandling": { + "message": "Обработка неподдерживаемых встроенных сайтов" + } +} diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/sr/messages.json b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/sr/messages.json new file mode 100644 index 0000000..7a080d0 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/sr/messages.json @@ -0,0 +1,160 @@ +{ + "about": { + "message": "О" + }, + "addYourFavoriteInstances": { + "description": "used in the settings page", + "message": "Додајте своје омиљене инстанце" + }, + "auto": { + "description": "used in the settings page", + "message": "Auto" + }, + "autoPickInstance": { + "message": "Одаберите аутоматски инстанцу" + }, + "block": { + "message": "Блокирајте" + }, + "bookmarksMenu": { + "message": "Изборник обиљежака" + }, + "both": { + "description": "used in the settings page", + "message": "оба" + }, + "bypass": { + "message": "Заобиђите" + }, + "copied": { + "message": "Копирано" + }, + "copyOriginal": { + "message": "Копирајте оригинал" + }, + "dark": { + "description": "used in the settings page", + "message": "Мрачна" + }, + "disable": { + "message": "Искључите" + }, + "embedFrontend": { + "message": "Уградите сучеље" + }, + "enable": { + "description": "used in the settings page", + "message": "Омогући" + }, + "excludeFromRedirecting": { + "description": "used in the settings page", + "message": "Искључено из преусмеравања" + }, + "exportSettings": { + "description": "used in the settings page", + "message": "Извозна Подешавања" + }, + "exportSettingsToSync": { + "message": "Извезите подешавања за синкронизацију" + }, + "extensionDescription": { + "description": "description of the extension", + "message": "Веб проширница која преусмерава познате сајтове на према алтернативним сучељима и позадинским страницама прилагођенима приватности" + }, + "extensionName": { + "description": "name of the extension", + "message": "LibRedirect" + }, + "fetchPublicInstances": { + "message": "Дохватите јавне инстанце" + }, + "frontend": { + "description": "used in the settings page", + "message": "Сучеље" + }, + "general": { + "description": "used in the settings page", + "message": "Општенито" + }, + "importSettings": { + "description": "used in the settings page", + "message": "Увозна Подешавања" + }, + "importSettingsFromSync": { + "message": "Увезите подешавања из синкронизације" + }, + "light": { + "description": "used in the settings page", + "message": "Светла" + }, + "onlyEmbedded": { + "description": "used in the settings page", + "message": "само уграђено" + }, + "onlyNotEmbedded": { + "description": "used in the settings page", + "message": "само неуграђено" + }, + "pingInstances": { + "message": "Тестирајте инстанце" + }, + "redirect": { + "message": "Преусмерите" + }, + "redirectGoogle": { + "message": "Преусмерите Google" + }, + "redirectLink": { + "description": "Used in context menus when right clicking on a hyperlink", + "message": "Покушајте да преусмерите" + }, + "redirectOnlyInIncognito": { + "message": "Преусмерите само у инкогнитоа" + }, + "redirectToOriginal": { + "description": "Used in context menus when right clicking on a page/tab", + "message": "Преусмерите према оригиналној" + }, + "redirectType": { + "description": "used in the settings page", + "message": "Тип Преусмеравања" + }, + "resetSettings": { + "description": "used in the settings page", + "message": "Обновите Подешавања" + }, + "searchHint": { + "message": "Поставите ЛибРедирецт као стандардни тражионик. \u003Ca href='https://libredirect.github.io/docs.html#search_engine_chromium' target='_blank' rel='noopener noreferrer'>Овде\u003C/a> погледајте како се то ради у Кромијум мрежном прегледнику." + }, + "searchService": { + "message": "Тражите услужник" + }, + "search_frontend": { + "message": "Тражите сучеље" + }, + "service": { + "message": "Услуга" + }, + "services": { + "message": "Услуге" + }, + "settings": { + "description": "used in the popup", + "message": "Подешавања" + }, + "showInPopup": { + "description": "used in the settings page", + "message": "Прикажи у искачућем прозору" + }, + "switchInstance": { + "description": "used in manifest.json as shortcut description", + "message": "Пребаци инстанцу" + }, + "theme": { + "description": "used in the settings page", + "message": "Тема" + }, + "unsupportedIframesHandling": { + "message": "Неподржано руковање и-фрамеовима" + } +} diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/ta/messages.json b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/ta/messages.json new file mode 100644 index 0000000..5972d81 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/ta/messages.json @@ -0,0 +1,137 @@ +{ + "about": { + "message": "பற்றி" + }, + "addYourFavoriteInstances": { + "message": "உங்களுக்கு பிடித்த நிகழ்வுகளைச் சேர்க்கவும்" + }, + "auto": { + "message": "தானி" + }, + "autoPickInstance": { + "message": "ஆட்டோ-பிக் நிகழ்வு" + }, + "block": { + "message": "தொகுதி" + }, + "bookmarksMenu": { + "message": "புக்மார்க்ச் பட்டியல்" + }, + "both": { + "message": "இரண்டும்" + }, + "bypass": { + "message": "பைபாச்" + }, + "copied": { + "message": "நகலெடுக்கப்பட்டது" + }, + "copyOriginal": { + "message": "அசல் நகலெடுக்கவும்" + }, + "dark": { + "message": "இருண்ட" + }, + "disable": { + "message": "முடக்கு" + }, + "embedFrontend": { + "message": "ஃபிரான்டெண்ட் உட்பொதிக்கவும்" + }, + "enable": { + "message": "இயக்கு" + }, + "excludeFromRedirecting": { + "message": "திருப்பிவிடுவதிலிருந்து விலக்கப்பட்டது" + }, + "exportSettings": { + "message": "ஏற்றுமதி அமைப்புகள்" + }, + "exportSettingsToSync": { + "message": "ஒத்திசைக்க அமைப்புகளை ஏற்றுமதி செய்யுங்கள்" + }, + "extensionDescription": { + "message": "பிரபலமான தளங்களை மாற்று தனியுரிமை நட்பு முன்பக்கங்கள் மற்றும் பின்தளத்தில் திருப்பி விடும் ஒரு வலை நீட்டிப்பு" + }, + "extensionName": { + "message": "லிப்ரெடிரிடர்" + }, + "fetchPublicInstances": { + "message": "பொது நிகழ்வுகளைப் பெறுங்கள்" + }, + "frontend": { + "message": "ஃபிரான்ட்" + }, + "general": { + "message": "பொது" + }, + "importSettings": { + "message": "அமைப்புகளை இறக்குமதி செய்யுங்கள்" + }, + "importSettingsFromSync": { + "message": "ஒத்திசைவிலிருந்து அமைப்புகளை இறக்குமதி செய்யுங்கள்" + }, + "light": { + "message": "ஒளி" + }, + "onlyEmbedded": { + "message": "உட்பொதிக்கப்பட்டது" + }, + "onlyNotEmbedded": { + "message": "உட்பொதிக்கப்படவில்லை" + }, + "pingInstances": { + "message": "பிங் நிகழ்வுகள்" + }, + "redirect": { + "message": "திருப்பி விடுங்கள்" + }, + "redirectGoogle": { + "message": "Google ஐ திருப்பி விடுங்கள்" + }, + "redirectLink": { + "message": "திருப்பிவிட முயற்சி" + }, + "redirectOnlyInIncognito": { + "message": "மறைமுகத்தில் மட்டுமே திருப்பி விடுங்கள்" + }, + "redirectToOriginal": { + "message": "அசலுக்கு திருப்பி விடுங்கள்" + }, + "redirectType": { + "message": "திருப்பி வகை" + }, + "resetSettings": { + "message": "அமைப்புகளை மீட்டமைக்கவும்" + }, + "searchHint": { + "message": "இயல்புநிலை தேடுபொறியாக Lirbredirect ஐ அமைக்கவும். குரோமியம் உலாவிகளில் எவ்வாறு செய்வது என்பதற்கு, \u003Ca href = 'https: //libredirect.github.io/docs.html#search_engine_chromium' target = '_ வெற்று' rel = 'noopener norferrer'> இங்கே \u003C/a>." + }, + "searchService": { + "message": "தேடல் பணி" + }, + "search_frontend": { + "message": "முன்பக்கத்தைத் தேடுங்கள்" + }, + "service": { + "message": "பணி" + }, + "services": { + "message": "சேவைகள்" + }, + "settings": { + "message": "அமைப்புகள்" + }, + "showInPopup": { + "message": "பாப்அப்பில் காட்டு" + }, + "switchInstance": { + "message": "சான்று" + }, + "theme": { + "message": "கருப்பொருள்" + }, + "unsupportedIframesHandling": { + "message": "ஆதரிக்கப்படாத உட்பொதிகள் கையாளுதல்" + } +} diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/tr/messages.json b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/tr/messages.json new file mode 100644 index 0000000..985b094 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/tr/messages.json @@ -0,0 +1,160 @@ +{ + "about": { + "message": "Hakkında" + }, + "addYourFavoriteInstances": { + "description": "used in the settings page", + "message": "Sevdiğiniz örnekleri ekleyin" + }, + "auto": { + "description": "used in the settings page", + "message": "Otomatik" + }, + "autoPickInstance": { + "message": "Örneği Otomatik Seç" + }, + "block": { + "message": "Block" + }, + "bookmarksMenu": { + "message": "Yer imleri menüsü" + }, + "both": { + "description": "used in the settings page", + "message": "her ikisi de" + }, + "bypass": { + "message": "Atla" + }, + "copied": { + "message": "Kopyalandı" + }, + "copyOriginal": { + "message": "Aslını Kopyala" + }, + "dark": { + "description": "used in the settings page", + "message": "Koyu" + }, + "disable": { + "message": "Devre dışı bırak" + }, + "embedFrontend": { + "message": "Ön Ucu Göm" + }, + "enable": { + "description": "used in the settings page", + "message": "Etkinleştir" + }, + "excludeFromRedirecting": { + "description": "used in the settings page", + "message": "Yönlendirme dışında bırakılanlar" + }, + "exportSettings": { + "description": "used in the settings page", + "message": "Ayarları Dışa Aktar" + }, + "exportSettingsToSync": { + "message": "Ayarlayı Eşzamanlamaya Aktar" + }, + "extensionDescription": { + "description": "description of the extension", + "message": "Popüler siteleri alternatif gizlilik dostu ön uçlara ve arka uçlara yönlendiren bir web uzantısı" + }, + "extensionName": { + "description": "name of the extension", + "message": "LibRedirect" + }, + "fetchPublicInstances": { + "message": "Herkese açık örnekleri getir" + }, + "frontend": { + "description": "used in the settings page", + "message": "Ön Uç" + }, + "general": { + "description": "used in the settings page", + "message": "Genel" + }, + "importSettings": { + "description": "used in the settings page", + "message": "Ayarları İçe Aktar" + }, + "importSettingsFromSync": { + "message": "Ayarları Eşzamanlamadan İçe Aktar" + }, + "light": { + "description": "used in the settings page", + "message": "Açık" + }, + "onlyEmbedded": { + "description": "used in the settings page", + "message": "yalnızca gömülü" + }, + "onlyNotEmbedded": { + "description": "used in the settings page", + "message": "yalnızca gömülü olmayan" + }, + "pingInstances": { + "message": "Örneklere Ping At" + }, + "redirect": { + "message": "Yönlendir" + }, + "redirectGoogle": { + "message": "Yönlendir (Google)" + }, + "redirectLink": { + "description": "Used in context menus when right clicking on a hyperlink", + "message": "Yeniden yönlendirmeyi dene" + }, + "redirectOnlyInIncognito": { + "message": "Yalnızca Gizli Modda Yönlendir" + }, + "redirectToOriginal": { + "description": "Used in context menus when right clicking on a page/tab", + "message": "Aslına yönlendir" + }, + "redirectType": { + "description": "used in the settings page", + "message": "Yönlendirme Türü" + }, + "resetSettings": { + "description": "used in the settings page", + "message": "Ayarları Sıfırla" + }, + "searchHint": { + "message": "LibRedirect'i öntanımlı arama moturu olarak ayarlayın. Chromium tabanlı tarayıcılarda nasıl yapılacağını öğrenmek için \u003Ca href='https://libredirect.github.io/docs.html#search_engine_chromium' target='_blank' rel='noopener noreferrer'>buraya\u003C/a> tıklayın." + }, + "searchService": { + "message": "Arama Hizmeti" + }, + "search_frontend": { + "message": "Arama Ön Ucu" + }, + "service": { + "message": "Service" + }, + "services": { + "message": "Hizmetler" + }, + "settings": { + "description": "used in the popup", + "message": "Ayarlar" + }, + "showInPopup": { + "description": "used in the settings page", + "message": "Açılır pencerede göster" + }, + "switchInstance": { + "description": "used in manifest.json as shortcut description", + "message": "Örneği Değiştir" + }, + "theme": { + "description": "used in the settings page", + "message": "Tema" + }, + "unsupportedIframesHandling": { + "message": "Desteklenmeyen gömülü kullanımı" + } +} diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/uk/messages.json b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/uk/messages.json new file mode 100644 index 0000000..65b86c8 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/uk/messages.json @@ -0,0 +1,160 @@ +{ + "about": { + "message": "Про застосунок" + }, + "addYourFavoriteInstances": { + "description": "used in the settings page", + "message": "Додати свої улюблені сервери" + }, + "auto": { + "description": "used in the settings page", + "message": "Auto" + }, + "autoPickInstance": { + "message": "Автопідбір сервера" + }, + "block": { + "message": "Block" + }, + "bookmarksMenu": { + "message": "Меню закладок" + }, + "both": { + "description": "used in the settings page", + "message": "обоє" + }, + "bypass": { + "message": "Обхід" + }, + "copied": { + "message": "Скопійовано" + }, + "copyOriginal": { + "message": "Скопіювати оригінал" + }, + "dark": { + "description": "used in the settings page", + "message": "Темна" + }, + "disable": { + "message": "Вимкнути" + }, + "embedFrontend": { + "message": "Вбудований інтерфейс" + }, + "enable": { + "description": "used in the settings page", + "message": "Увімкнути" + }, + "excludeFromRedirecting": { + "description": "used in the settings page", + "message": "Виключено з перенаправлення" + }, + "exportSettings": { + "description": "used in the settings page", + "message": "Експортувати налаштування" + }, + "exportSettingsToSync": { + "message": "Експорт налаштувань до служби синхронізації" + }, + "extensionDescription": { + "description": "description of the extension", + "message": "Веброзширення, що переспрямовує популярні сайти на альтернативні дружні до приватності фронтенди та бекенди" + }, + "extensionName": { + "description": "name of the extension", + "message": "LibRedirect" + }, + "fetchPublicInstances": { + "message": "Отримати загальнодоступні сервери" + }, + "frontend": { + "description": "used in the settings page", + "message": "Фронтенд" + }, + "general": { + "description": "used in the settings page", + "message": "Загальні" + }, + "importSettings": { + "description": "used in the settings page", + "message": "Імпортувати налаштування" + }, + "importSettingsFromSync": { + "message": "Імпорт налаштувань зі служби синхронізації" + }, + "light": { + "description": "used in the settings page", + "message": "Світла" + }, + "onlyEmbedded": { + "description": "used in the settings page", + "message": "лише вбудовані" + }, + "onlyNotEmbedded": { + "description": "used in the settings page", + "message": "лише не вбудований" + }, + "pingInstances": { + "message": "Опитати сервери" + }, + "redirect": { + "message": "Переспрямувати" + }, + "redirectGoogle": { + "message": "Переспрямування Google" + }, + "redirectLink": { + "description": "Used in context menus when right clicking on a hyperlink", + "message": "Спроба перенаправлення" + }, + "redirectOnlyInIncognito": { + "message": "Переспрямовувати лише в режимі інкогніто" + }, + "redirectToOriginal": { + "description": "Used in context menus when right clicking on a page/tab", + "message": "Перенаправити на оригінал" + }, + "redirectType": { + "description": "used in the settings page", + "message": "Що переспрямовувати" + }, + "resetSettings": { + "description": "used in the settings page", + "message": "Скинути налаштування" + }, + "searchHint": { + "message": "Установити LibRedirect усталеним засобом пошуку. Як це зробити у браузерах на основі chromium, читайте \u003Ca href='https://libredirect.github.io/docs.html#search_engine_chromium' target='_blank' rel='noopener noreferrer'>тут\u003C/a>." + }, + "searchService": { + "message": "Служба пошуку" + }, + "search_frontend": { + "message": "Пошуковий інтерфейс" + }, + "service": { + "message": "Служба" + }, + "services": { + "message": "Служби" + }, + "settings": { + "description": "used in the popup", + "message": "Налаштування" + }, + "showInPopup": { + "description": "used in the settings page", + "message": "Показувати у спливному вікні" + }, + "switchInstance": { + "description": "used in manifest.json as shortcut description", + "message": "Інший сервер" + }, + "theme": { + "description": "used in the settings page", + "message": "Тема" + }, + "unsupportedIframesHandling": { + "message": "Обробка непідтримуваних вбудовувань" + } +} diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/vi/messages.json b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/vi/messages.json new file mode 100644 index 0000000..890ea8f --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/vi/messages.json @@ -0,0 +1,145 @@ +{ + "about": { + "message": "Về tiện ích" + }, + "addYourFavoriteInstances": { + "description": "used in the settings page", + "message": "Thêm những instance bạn yêu thích" + }, + "auto": { + "description": "used in the settings page", + "message": "Tự động" + }, + "block": { + "message": "Block" + }, + "bookmarksMenu": { + "message": "Bookmarks menu" + }, + "both": { + "description": "used in the settings page", + "message": "cả hai" + }, + "bypass": { + "message": "Bypass" + }, + "copied": { + "message": "Đã Sao Chép" + }, + "copyOriginal": { + "message": "Copy Original" + }, + "dark": { + "description": "used in the settings page", + "message": "Tối" + }, + "disable": { + "message": "Tắt" + }, + "enable": { + "description": "used in the settings page", + "message": "Bật" + }, + "excludeFromRedirecting": { + "description": "used in the settings page", + "message": "Không được chuyển hướng" + }, + "exportSettings": { + "description": "used in the settings page", + "message": "Xuất ra cài đặt" + }, + "exportSettingsToSync": { + "message": "Export Settings to Sync" + }, + "extensionDescription": { + "description": "description of the extension", + "message": "Một tiện ích mở rộng chuyển hướng một số trang web phổ biến đến các frontend và backend khác thân thiện với quyền riêng tư" + }, + "extensionName": { + "description": "name of the extension", + "message": "LibRedirect" + }, + "fetchPublicInstances": { + "message": "Tìm các instance công cộng" + }, + "frontend": { + "description": "used in the settings page", + "message": "Frontend" + }, + "general": { + "description": "used in the settings page", + "message": "Cài đặt chung" + }, + "importSettings": { + "description": "used in the settings page", + "message": "Nhập vào cài đặt" + }, + "importSettingsFromSync": { + "message": "Import Settings from Sync" + }, + "light": { + "description": "used in the settings page", + "message": "Sáng" + }, + "onlyEmbedded": { + "description": "used in the settings page", + "message": "chỉ các mã nhúng" + }, + "onlyNotEmbedded": { + "description": "used in the settings page", + "message": "chỉ những cái không phải là mã nhúng" + }, + "pingInstances": { + "message": "Ping Instances" + }, + "redirect": { + "message": "Redirect" + }, + "redirectLink": { + "description": "Used in context menus when right clicking on a hyperlink", + "message": "Chuyển hướng liên kết này" + }, + "redirectOnlyInIncognito": { + "message": "Redirect Only in Incognito" + }, + "redirectToOriginal": { + "description": "Used in context menus when right clicking on a page/tab", + "message": "Chuyển hướng tới trang web gốc" + }, + "redirectType": { + "description": "used in the settings page", + "message": "Loại chuyển hướng" + }, + "resetSettings": { + "description": "used in the settings page", + "message": "Đặt lại cài đặt" + }, + "searchHint": { + "message": "Set LibRedirect as Default Search Engine. For how to do in chromium browsers, click \u003Ca href='https://libredirect.github.io/docs.html#search_engine_chromium' target='_blank' rel='noopener noreferrer'>here\u003C/a>." + }, + "service": { + "message": "Service" + }, + "services": { + "message": "Services" + }, + "settings": { + "description": "used in the popup", + "message": "Cài Đặt" + }, + "showInPopup": { + "description": "used in the settings page", + "message": "Hiển thị trong cửa sổ bật lên" + }, + "switchInstance": { + "description": "used in manifest.json as shortcut description", + "message": "Đổi Instance" + }, + "theme": { + "description": "used in the settings page", + "message": "Giao diện" + }, + "unsupportedIframesHandling": { + "message": "Cách xử lý các iframe không được hỗ trợ" + } +} diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/zh_Hans/messages.json b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/zh_Hans/messages.json new file mode 100644 index 0000000..2332d2d --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/zh_Hans/messages.json @@ -0,0 +1,160 @@ +{ + "about": { + "message": "关于" + }, + "addYourFavoriteInstances": { + "description": "used in the settings page", + "message": "添加您喜欢的实例" + }, + "auto": { + "description": "used in the settings page", + "message": "自动" + }, + "autoPickInstance": { + "message": "自动挑选实例" + }, + "block": { + "message": "屏蔽" + }, + "bookmarksMenu": { + "message": "书签菜单" + }, + "both": { + "description": "used in the settings page", + "message": "所有页面" + }, + "bypass": { + "message": "绕过" + }, + "copied": { + "message": "已复制" + }, + "copyOriginal": { + "message": "复制原始链接" + }, + "dark": { + "description": "used in the settings page", + "message": "深色" + }, + "disable": { + "message": "禁用" + }, + "embedFrontend": { + "message": "嵌入页面前端" + }, + "enable": { + "description": "used in the settings page", + "message": "启用" + }, + "excludeFromRedirecting": { + "description": "used in the settings page", + "message": "排除于重定向" + }, + "exportSettings": { + "description": "used in the settings page", + "message": "导出设置" + }, + "exportSettingsToSync": { + "message": "导出设置到同步服务" + }, + "extensionDescription": { + "description": "description of the extension", + "message": "将常用网站按需重定向到隐私友好的替代前端/后端的 Web 扩展程序" + }, + "extensionName": { + "description": "name of the extension", + "message": "LibRedirect" + }, + "fetchPublicInstances": { + "message": "获取公共实例" + }, + "frontend": { + "description": "used in the settings page", + "message": "前端" + }, + "general": { + "description": "used in the settings page", + "message": "通用" + }, + "importSettings": { + "description": "used in the settings page", + "message": "导入设置" + }, + "importSettingsFromSync": { + "message": "从同步服务导入设置" + }, + "light": { + "description": "used in the settings page", + "message": "浅色" + }, + "onlyEmbedded": { + "description": "used in the settings page", + "message": "仅嵌入页面" + }, + "onlyNotEmbedded": { + "description": "used in the settings page", + "message": "仅常规页面" + }, + "pingInstances": { + "message": "对实例进行测速" + }, + "redirect": { + "message": "重定向" + }, + "redirectGoogle": { + "message": "重定向 Google" + }, + "redirectLink": { + "description": "Used in context menus when right clicking on a hyperlink", + "message": "尝试重定向" + }, + "redirectOnlyInIncognito": { + "message": "仅在隐私模式下重定向" + }, + "redirectToOriginal": { + "description": "Used in context menus when right clicking on a page/tab", + "message": "重定向至原网址" + }, + "redirectType": { + "description": "used in the settings page", + "message": "重定向类型" + }, + "resetSettings": { + "description": "used in the settings page", + "message": "重置设置" + }, + "searchHint": { + "message": "请将 LibRedirect 设为默认搜索引擎。对于 Chromium 的操作方法,点击\u003Ca href='https://libredirect.github.io/docs.html#search_engine_chromium' target='_blank' rel='noopener noreferrer'>此处\u003C/a>了解。" + }, + "searchService": { + "message": "搜索服务" + }, + "search_frontend": { + "message": "搜索前端" + }, + "service": { + "message": "服务" + }, + "services": { + "message": "服务" + }, + "settings": { + "description": "used in the popup", + "message": "设置" + }, + "showInPopup": { + "description": "used in the settings page", + "message": "显示在弹窗中" + }, + "switchInstance": { + "description": "used in manifest.json as shortcut description", + "message": "切换实例" + }, + "theme": { + "description": "used in the settings page", + "message": "主题" + }, + "unsupportedIframesHandling": { + "message": "未支持的嵌入页面的处理方式" + } +} diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/zh_Hant/messages.json b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/zh_Hant/messages.json new file mode 100644 index 0000000..44486bd --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/_locales/zh_Hant/messages.json @@ -0,0 +1,160 @@ +{ + "about": { + "message": "關於" + }, + "addYourFavoriteInstances": { + "description": "used in the settings page", + "message": "新增你喜歡的實例" + }, + "auto": { + "description": "used in the settings page", + "message": "自動" + }, + "autoPickInstance": { + "message": "自動選擇實例" + }, + "block": { + "message": "封鎖" + }, + "bookmarksMenu": { + "message": "書籤選單" + }, + "both": { + "description": "used in the settings page", + "message": "兩者" + }, + "bypass": { + "message": "繞行" + }, + "copied": { + "message": "已複製" + }, + "copyOriginal": { + "message": "複製原始的" + }, + "dark": { + "description": "used in the settings page", + "message": "深色" + }, + "disable": { + "message": "停用" + }, + "embedFrontend": { + "message": "嵌入前端" + }, + "enable": { + "description": "used in the settings page", + "message": "啟用" + }, + "excludeFromRedirecting": { + "description": "used in the settings page", + "message": "排除重新導向" + }, + "exportSettings": { + "description": "used in the settings page", + "message": "匯出設定" + }, + "exportSettingsToSync": { + "message": "匯出設定以同步" + }, + "extensionDescription": { + "description": "description of the extension", + "message": "一個網路擴充功能可以將熱門網站重新導向至隱私友好的替代服務" + }, + "extensionName": { + "description": "name of the extension", + "message": "LibRedirect" + }, + "fetchPublicInstances": { + "message": "取得公共實例" + }, + "frontend": { + "description": "used in the settings page", + "message": "前端" + }, + "general": { + "description": "used in the settings page", + "message": "一般" + }, + "importSettings": { + "description": "used in the settings page", + "message": "匯入設定" + }, + "importSettingsFromSync": { + "message": "從同步匯入設定" + }, + "light": { + "description": "used in the settings page", + "message": "淺色" + }, + "onlyEmbedded": { + "description": "used in the settings page", + "message": "僅已內嵌" + }, + "onlyNotEmbedded": { + "description": "used in the settings page", + "message": "僅非已內嵌" + }, + "pingInstances": { + "message": "Ping 實例" + }, + "redirect": { + "message": "重新導向" + }, + "redirectGoogle": { + "message": "重新導向 Google" + }, + "redirectLink": { + "description": "Used in context menus when right clicking on a hyperlink", + "message": "嘗試重新導向" + }, + "redirectOnlyInIncognito": { + "message": "僅在隱身模式下重新導向" + }, + "redirectToOriginal": { + "description": "Used in context menus when right clicking on a page/tab", + "message": "重新導向至原始網址" + }, + "redirectType": { + "description": "used in the settings page", + "message": "重新導向類型" + }, + "resetSettings": { + "description": "used in the settings page", + "message": "重設設定" + }, + "searchHint": { + "message": "設定 LibRedirect 為預設搜尋引擎。如要了解如何在 Chromium 瀏覽器中執行操作,請點擊\u003Ca href='https://libredirect.github.io/docs.html#search_engine_chromium' target='_blank' rel='noopener noreferrer'>此處\u003C/a>。" + }, + "searchService": { + "message": "搜尋服務" + }, + "search_frontend": { + "message": "搜尋前端" + }, + "service": { + "message": "服務" + }, + "services": { + "message": "服務" + }, + "settings": { + "description": "used in the popup", + "message": "設定" + }, + "showInPopup": { + "description": "used in the settings page", + "message": "在快顯視窗顯示" + }, + "switchInstance": { + "description": "used in manifest.json as shortcut description", + "message": "切換實例" + }, + "theme": { + "description": "used in the settings page", + "message": "主題" + }, + "unsupportedIframesHandling": { + "message": "不支援的嵌入處理" + } +} diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/about-icon-light.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/about-icon-light.svg new file mode 100644 index 0000000..acd7163 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/about-icon-light.svg @@ -0,0 +1 @@ + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/about-icon.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/about-icon.svg new file mode 100644 index 0000000..26fbc4b --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/about-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/baiduTieba-icon.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/baiduTieba-icon.svg new file mode 100644 index 0000000..70f8c46 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/baiduTieba-icon.svg @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/bandcamp-icon.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/bandcamp-icon.svg new file mode 100644 index 0000000..5c46120 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/bandcamp-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/bilibili-icon-light.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/bilibili-icon-light.svg new file mode 100644 index 0000000..7e24f30 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/bilibili-icon-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/bilibili-icon.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/bilibili-icon.svg new file mode 100644 index 0000000..8cb0016 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/bilibili-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/bluesky-icon.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/bluesky-icon.svg new file mode 100644 index 0000000..dfdf196 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/bluesky-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/chatGpt-icon-light.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/chatGpt-icon-light.svg new file mode 100644 index 0000000..b3df81f --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/chatGpt-icon-light.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/chatGpt-icon.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/chatGpt-icon.svg new file mode 100644 index 0000000..e04db75 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/chatGpt-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/chefkoch-icon.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/chefkoch-icon.svg new file mode 100644 index 0000000..12e1f3b --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/chefkoch-icon.svg @@ -0,0 +1,43 @@ + + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/coub-icon.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/coub-icon.svg new file mode 100644 index 0000000..cc08cd5 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/coub-icon.svg @@ -0,0 +1,44 @@ + + + + + + + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/deviantArt-icon.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/deviantArt-icon.svg new file mode 100644 index 0000000..30836c1 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/deviantArt-icon.svg @@ -0,0 +1,474 @@ + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/fandom-icon.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/fandom-icon.svg new file mode 100644 index 0000000..c49375b --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/fandom-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/geeksForGeeks-icon.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/geeksForGeeks-icon.svg new file mode 100644 index 0000000..52e1960 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/geeksForGeeks-icon.svg @@ -0,0 +1,39 @@ + + + + + + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/general-icon-light.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/general-icon-light.svg new file mode 100644 index 0000000..b806a4c --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/general-icon-light.svg @@ -0,0 +1 @@ + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/general-icon.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/general-icon.svg new file mode 100644 index 0000000..a6f96ba --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/general-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/genius-icon.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/genius-icon.svg new file mode 100644 index 0000000..3bd7d72 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/genius-icon.svg @@ -0,0 +1 @@ + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/github-icon-light.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/github-icon-light.svg new file mode 100644 index 0000000..e8d2b8a --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/github-icon-light.svg @@ -0,0 +1 @@ + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/github-icon.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/github-icon.svg new file mode 100644 index 0000000..38c6889 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/github-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/gitlab-icon.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/gitlab-icon.svg new file mode 100644 index 0000000..bb61f3b --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/gitlab-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/goodreads-icon-light.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/goodreads-icon-light.svg new file mode 100644 index 0000000..668208d --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/goodreads-icon-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/goodreads-icon.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/goodreads-icon.svg new file mode 100644 index 0000000..b41201f --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/goodreads-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/ifunny-icon.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/ifunny-icon.svg new file mode 100644 index 0000000..bceff0e --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/ifunny-icon.svg @@ -0,0 +1 @@ + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/imdb-icon.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/imdb-icon.svg new file mode 100644 index 0000000..888dafc --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/imdb-icon.svg @@ -0,0 +1 @@ + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/imgur-icon.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/imgur-icon.svg new file mode 100644 index 0000000..6d5296c --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/imgur-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/instagram-icon.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/instagram-icon.svg new file mode 100644 index 0000000..cfbab00 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/instagram-icon.svg @@ -0,0 +1 @@ + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/instructables-icon.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/instructables-icon.svg new file mode 100644 index 0000000..7b21ca3 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/instructables-icon.svg @@ -0,0 +1 @@ + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/knowyourmeme-icon.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/knowyourmeme-icon.svg new file mode 100644 index 0000000..db68467 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/knowyourmeme-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/libredirect-128.png b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/libredirect-128.png new file mode 100644 index 0000000..be041be Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/libredirect-128.png differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/libredirect-16.png b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/libredirect-16.png new file mode 100644 index 0000000..db4c453 Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/libredirect-16.png differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/libredirect-32.png b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/libredirect-32.png new file mode 100644 index 0000000..d62ae4f Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/libredirect-32.png differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/libredirect-48.png b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/libredirect-48.png new file mode 100644 index 0000000..e56758a Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/libredirect-48.png differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/libredirect-64.png b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/libredirect-64.png new file mode 100644 index 0000000..58e68ec Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/libredirect-64.png differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/libredirect-96.png b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/libredirect-96.png new file mode 100644 index 0000000..3950fc2 Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/libredirect-96.png differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/libredirect.png b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/libredirect.png new file mode 100644 index 0000000..a8706b2 Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/libredirect.png differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/libredirect.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/libredirect.svg new file mode 100644 index 0000000..a9d63d9 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/libredirect.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/maps-icon-light.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/maps-icon-light.svg new file mode 100644 index 0000000..4cb6f47 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/maps-icon-light.svg @@ -0,0 +1 @@ + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/maps-icon.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/maps-icon.svg new file mode 100644 index 0000000..c721b60 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/maps-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/medium-icon.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/medium-icon.svg new file mode 100644 index 0000000..a286957 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/medium-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/meet-icon-light.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/meet-icon-light.svg new file mode 100644 index 0000000..8277ad7 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/meet-icon-light.svg @@ -0,0 +1 @@ + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/meet-icon.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/meet-icon.svg new file mode 100644 index 0000000..74af6cc --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/meet-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/mozhi-icon.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/mozhi-icon.svg new file mode 100644 index 0000000..b04b541 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/mozhi-icon.svg @@ -0,0 +1,154 @@ + + + + + + + + + + + + + + + + + O + M + Z + H + + + + + + + + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/office-icon-light.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/office-icon-light.svg new file mode 100644 index 0000000..fffa366 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/office-icon-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/office-icon.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/office-icon.svg new file mode 100644 index 0000000..d2b79cb --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/office-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/pastebin-icon-light.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/pastebin-icon-light.svg new file mode 100644 index 0000000..406714d --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/pastebin-icon-light.svg @@ -0,0 +1,101 @@ + + + + + Pastebin icon + + + + + + + + + + + + + + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/pastebin-icon.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/pastebin-icon.svg new file mode 100644 index 0000000..341fbd8 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/pastebin-icon.svg @@ -0,0 +1,2 @@ + +Pastebin icon \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/peertube-icon.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/peertube-icon.svg new file mode 100644 index 0000000..25f6491 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/peertube-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/pinterest-icon.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/pinterest-icon.svg new file mode 100644 index 0000000..810da5a --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/pinterest-icon.svg @@ -0,0 +1 @@ + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/pixiv-icon.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/pixiv-icon.svg new file mode 100644 index 0000000..8de64da --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/pixiv-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/quora-icon.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/quora-icon.svg new file mode 100644 index 0000000..ed74b30 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/quora-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/reddit-icon.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/reddit-icon.svg new file mode 100644 index 0000000..0dba3c4 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/reddit-icon.svg @@ -0,0 +1 @@ + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/reuters-icon.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/reuters-icon.svg new file mode 100644 index 0000000..15a0d22 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/reuters-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/search-icon-light.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/search-icon-light.svg new file mode 100644 index 0000000..ecf12d8 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/search-icon-light.svg @@ -0,0 +1 @@ + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/search-icon.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/search-icon.svg new file mode 100644 index 0000000..4af443f --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/search-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/sendFiles-icon-light.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/sendFiles-icon-light.svg new file mode 100644 index 0000000..107a437 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/sendFiles-icon-light.svg @@ -0,0 +1 @@ + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/sendFiles-icon.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/sendFiles-icon.svg new file mode 100644 index 0000000..e4a65ab --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/sendFiles-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/snopes-icon.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/snopes-icon.svg new file mode 100644 index 0000000..b3f6148 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/snopes-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/soundcloud-icon.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/soundcloud-icon.svg new file mode 100644 index 0000000..b249ac1 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/soundcloud-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/stackOverflow-icon-light.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/stackOverflow-icon-light.svg new file mode 100644 index 0000000..6bbf26e --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/stackOverflow-icon-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/stackOverflow-icon.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/stackOverflow-icon.svg new file mode 100644 index 0000000..de6243f --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/stackOverflow-icon.svg @@ -0,0 +1 @@ + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/tekstowo-icon.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/tekstowo-icon.svg new file mode 100644 index 0000000..1c99147 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/tekstowo-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/tenor-icon.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/tenor-icon.svg new file mode 100644 index 0000000..0264ede --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/tenor-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/textStorage-icon-light.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/textStorage-icon-light.svg new file mode 100644 index 0000000..58a3edd --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/textStorage-icon-light.svg @@ -0,0 +1 @@ + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/textStorage-icon.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/textStorage-icon.svg new file mode 100644 index 0000000..d6073d6 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/textStorage-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/threads-icon-light.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/threads-icon-light.svg new file mode 100644 index 0000000..809c12d --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/threads-icon-light.svg @@ -0,0 +1,21 @@ + + + + + + + + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/threads-icon.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/threads-icon.svg new file mode 100644 index 0000000..e99823b --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/threads-icon.svg @@ -0,0 +1,18 @@ + + + + + + + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/tiktok-icon.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/tiktok-icon.svg new file mode 100644 index 0000000..3ed3c6c --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/tiktok-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/translate-icon-light.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/translate-icon-light.svg new file mode 100644 index 0000000..cf1a6da --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/translate-icon-light.svg @@ -0,0 +1 @@ + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/translate-icon.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/translate-icon.svg new file mode 100644 index 0000000..a79f1ab --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/translate-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/tumblr-icon.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/tumblr-icon.svg new file mode 100644 index 0000000..a7e084a --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/tumblr-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/twitch-icon.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/twitch-icon.svg new file mode 100644 index 0000000..8b49d5f --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/twitch-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/twitter-icon.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/twitter-icon.svg new file mode 100644 index 0000000..1f44830 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/twitter-icon.svg @@ -0,0 +1 @@ + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/ultimateGuitar-icon.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/ultimateGuitar-icon.svg new file mode 100644 index 0000000..5f587c3 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/ultimateGuitar-icon.svg @@ -0,0 +1 @@ + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/urbanDictionary-icon.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/urbanDictionary-icon.svg new file mode 100644 index 0000000..8bf07b0 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/urbanDictionary-icon.svg @@ -0,0 +1 @@ + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/waybackMachine-icon-light.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/waybackMachine-icon-light.svg new file mode 100644 index 0000000..e3d6ced --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/waybackMachine-icon-light.svg @@ -0,0 +1 @@ + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/waybackMachine-icon.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/waybackMachine-icon.svg new file mode 100644 index 0000000..f0e6497 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/waybackMachine-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/wikipedia-icon.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/wikipedia-icon.svg new file mode 100644 index 0000000..9b28a3a --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/wikipedia-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/wolframAlpha-icon.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/wolframAlpha-icon.svg new file mode 100644 index 0000000..a81d803 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/wolframAlpha-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/youtube-icon.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/youtube-icon.svg new file mode 100644 index 0000000..8570ec0 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/youtube-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/youtubeMusic-icon.svg b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/youtubeMusic-icon.svg new file mode 100644 index 0000000..76b052f --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/images/youtubeMusic-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/javascripts/services.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/javascripts/services.js new file mode 100644 index 0000000..ef9d904 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/javascripts/services.js @@ -0,0 +1,1108 @@ +import utils from "./utils.js" + +const isChrome = browser.runtime.getBrowserInfo === undefined +window.browser = window.browser || window.chrome + +let config, options + +async function init() { + options = await utils.getOptions() + config = await utils.getConfig() +} + +init() +browser.storage.onChanged.addListener(init) + +function all(service, frontend, options, config) { + let instances = [] + if (!frontend) { + for (const frontend in config.services[service].frontends) { + if (options[frontend]) { + instances.push(...options[frontend]) + } + } + } else if (options[frontend]) { + instances = options[frontend] + } + return instances +} + +/** + * @param {string} service + * @param {URL} url + * @param {{}} config + * @param {{}} options + * @param {string} frontend + */ +function regexArray(service, url, config, options, frontend) { + let targetList = config.services[service].targets + if (frontend) { + if ( + "excludeTargets" in config.services[service].frontends[frontend] && + (service !== "search" || !options["search"].redirectGoogle) + ) { + targetList = targetList.filter( + val => !config.services[service].frontends[frontend].excludeTargets.includes(targetList.indexOf(val)) + ) + } + if (service === "twitter" && options["twitter"].disableTwimg) { + targetList.splice(2, 1) + } + } + for (const targetString in targetList) { + const target = new RegExp(targetList[targetString]) + if (target.test(url.href)) return true + } + return false +} + +/** + * @param {URL} url + * @param {string} frontend + * @param {string} randomInstance + * @param {string} type + * @returns {undefined|string} + */ +function rewrite(url, originUrl, frontend, randomInstance, type) { + switch (frontend) { + case "hyperpipe": + for (const key of [...url.searchParams.keys()]) if (key !== "q") url.searchParams.delete(key) + return `${randomInstance}${url.pathname}${url.search}`.replace(/\/search\?q=.*/, searchQuery => + searchQuery.replace("?q=", "/") + ) + case "searx": + case "searxng": + for (const key of [...url.searchParams.keys()]) if (key !== "q") url.searchParams.delete(key) + return `${randomInstance}/${url.search}` + case "websurfx": + case "whoogle": + for (const key of [...url.searchParams.keys()]) if (key !== "q") url.searchParams.delete(key) + return `${randomInstance}/search${url.search}` + case "4get": { + const s = url.searchParams.get("q") + if (s !== null) return `${randomInstance}/web?s=${encodeURIComponent(s)}` + return randomInstance + } + case "librey": + for (const key in url.searchParams.keys()) if (key != "q") url.searchParams.delete(key) + return `${randomInstance}/search.php${url.search}` + case "yattee": + url.searchParams.delete("si") + return url.href.replace(/^https?:\/{2}/, "yattee://") + case "freetube": + url.searchParams.delete("si") + return "freetube://" + url.href + case "freetubePwa": + url.searchParams.delete("si") + return "freetube://" + url.href + case "poketube": { + url.searchParams.delete("si") + if (url.pathname.startsWith("/channel")) { + const reg = /\/channel\/(.*)\/?$/.exec(url.pathname) + if (reg) { + const id = reg[1] + return `${randomInstance}/channel?id=${id}${url.search}` + } + } + if (/\/@[a-z]+\//.exec(url.pathname)) return randomInstance + return `${randomInstance}${url.pathname}${url.search}` + } + case "small": + case "libMedium": + case "freedium": + case "scribe": { + const regex = url.hostname.match(/^(link|cdn-images-\d+|.*)\.medium\.com/) + if (regex && regex.length > 1) { + const subdomain = regex[1] + if (subdomain != "link" || !subdomain.startsWith("cdn-images")) { + return `${randomInstance}/@${subdomain}${url.pathname}${url.search}` + } + } + return `${randomInstance}${url.pathname}${url.search}` + } + case "translite": + case "simplyTranslate": + return `${randomInstance}/${url.search}` + case "send": + case "mozhi": + return randomInstance + case "libreTranslate": + return `${randomInstance}/${url.search.replace("sl", "source").replace("tl", "target").replace("text", "q")}` + case "osm": { + if (originUrl && originUrl.host === "earth.google.com") return randomInstance + + let prefs = { layers: "mapnik" } + + let mapCentre = "#" + const mapCentreData = utils.convertMapCentre(url) + if (mapCentreData.zoom && mapCentreData.lon && mapCentreData.lat) { + mapCentre = `#map=${mapCentreData.zoom}/${mapCentreData.lon}/${mapCentreData.lat}` + } + + if (url.pathname.includes("/embed")) { + // https://www.google.com/maps/embed/v1/place?key=AIzaSyD4iE2xVSpkLLOXoyqT-RuPwURN3ddScAI&q=Eiffel+Tower,Paris+France + const query = utils.getQuery(url) + let { coordinate, boundingbox } = utils.addressToLatLng(query) + prefs.bbox = boundingbox + prefs.marker = coordinate + return `${randomInstance}/export/embed.html?${utils.prefsEncoded(prefs)}` + } + + if (url.pathname.includes("/dir")) { + if (url.searchParams.has("travelmode")) { + const travelModes = { + driving: "fossgis_osrm_car", + walking: "fossgis_osrm_foot", + bicycling: "fossgis_osrm_bike", + transit: "fossgis_osrm_car", // not implemented on OSM, default to car. + } + prefs.engine = travelModes[url.searchParams.get("travelmode")] + } + const regex1 = /\/dir\/([^@/]+)\/([^@/]+)\/@-?\d[0-9.]*,-?\d[0-9.]*,\d{1,2}[.z]/.exec(url.pathname) + const regex2 = /\/dir\/([^@/]+)\//.exec(url.pathname) + if (regex1) { + // https://www.google.com/maps/dir/92+Rue+Moncey,+69003+Lyon,+France/M%C3%A9dip%C3%B4le+Lyon-Villeurbanne/@45.760254,4.8486298,13z?travelmode=bicycling + const origin = utils.addressToLatLng(decodeURIComponent(regex1[1])).coordinate ?? "" + const destination = utils.addressToLatLng(decodeURIComponent(regex1[2])).coordinate ?? "" + prefs.route = `${origin};${destination}` + } else if (regex2) { + // https://www.google.com/maps/dir/92+Rue+Moncey,+69003+Lyon,+France/@45.760254,4.8486298,13z?travelmode=bicycling + const origin = utils.addressToLatLng(decodeURIComponent(regex2[1])).coordinate ?? "" + prefs.route = `${origin};` + } else { + // https://www.google.com/maps/dir/?api=1&origin=Space+Needle+Seattle+WA&destination=Pike+Place+Market+Seattle+WA&travelmode=bicycling + const origin = utils.addressToLatLng(url.searchParams.get("origin")).coordinate ?? "" + const destination = utils.addressToLatLng(url.searchParams.get("destination")).coordinate ?? "" + prefs.route = `${origin};${destination}` + } + return `${randomInstance}/directions?${utils.prefsEncoded(prefs)}${mapCentre}` + } + + const placeRegex = /\/place\/(.*?)\// + if (url.pathname.match(placeRegex)) { + // https://www.google.com/maps/place/H%C3%B4tel+de+Londres+Eiffel/@40.9845265,28.7081268,14z + const query = url.pathname.match(placeRegex)[1] + return `${randomInstance}/search?query=${query}${mapCentre}` + } + + if (url.searchParams.has("ll")) { + // https://maps.google.com/?ll=38.882147,-76.99017 + const [mlat, mlon] = url.searchParams.get("ll").split(",") + return `${randomInstance}/search?query=${mlat}%2C${mlon}` + } + + if (url.searchParams.has("viewpoint")) { + // https://www.google.com/maps/@?api=1&map_action=pano&viewpoint=48.857832,2.295226&heading=-45&pitch=38&fov=80 + const [mlat, mlon] = url.searchParams.get("viewpoint").split(",") + return `${randomInstance}/search?query=${mlat}%2C${mlon}` + } + + const query = utils.getQuery(url) + if (query) return `${randomInstance}/search?query=${query}${mapCentre}&${utils.prefsEncoded(prefs)}` + return `${randomInstance}/${mapCentre}&${utils.prefsEncoded(prefs)}` + } + case "phantom": + case "breezeWiki": { + let wiki, + urlpath = "" + if (url.hostname.match(/^[a-zA-Z0-9-]+\.(?:fandom|wikia)\.com/)) { + wiki = url.hostname.match(/^[a-zA-Z0-9-]+(?=\.(?:fandom|wikia)\.com)/) + if (wiki == "www" || !wiki) wiki = "" + else wiki = `/${wiki}` + urlpath = url.pathname + } else { + wiki = url.pathname.match(/(?<=wiki\/w:c:)[a-zA-Z0-9-]+(?=:)/) + if (!wiki) wiki = "" + else { + wiki = "/" + wiki + "/wiki/" + urlpath = url.pathname.match(/(?<=wiki\/w:c:[a-zA-Z0-9-]+:).+/) + } + } + if (url.href.search(/Special:Search\?query/) > -1) { + return `${randomInstance}${wiki}${urlpath}${url.search}` + .replace(/Special:Search\?query/, "search?q") + .replace(/\/wiki/, "") + } + return `${randomInstance}${wiki}${urlpath}${url.search}` + } + case "rimgo": + if (url.href.search(/^https?:\/{2}(?:[im]\.)?stack\./) > -1) + return `${randomInstance}/stack${url.pathname}${url.search}` + return `${randomInstance}${url.pathname}${url.search}` + case "redlib": + case "libreddit": { + const subdomain = url.hostname.match(/^(?:((?:external-)?preview|i)\.)?redd\.it/) + if (!subdomain) return `${randomInstance}${url.pathname}${url.search}` + switch (subdomain[1]) { + case "preview": + return `${randomInstance}/preview/pre${url.pathname}${url.search}` + case "external-preview": + return `${randomInstance}/preview/external-pre${url.pathname}${url.search}` + case "i": + return `${randomInstance}/img${url.pathname}` + } + return `${randomInstance}/comments${url.pathname}` + } + case "teddit": + if (/^(?:(?:external-)?preview|i)\.redd\.it/.test(url.hostname)) { + if (url.search == "") return `${randomInstance}${url.pathname}?teddit_proxy=${url.hostname}` + else return `${randomInstance}${url.pathname}${url.search}&teddit_proxy=${url.hostname}` + } + return `${randomInstance}${url.pathname}${url.search}` + case "troddit": + case "eddrit": + if (/^(?:(?:external-)?preview|i)\.redd\.it/.test(url.hostname)) return randomInstance + return `${randomInstance}${url.pathname}${url.search}` + case "neuters": { + const p = url.pathname + if (p.startsWith("/article/") || p.startsWith("/pf/") || p.startsWith("/arc/") || p.startsWith("/resizer/")) { + return randomInstance + } + return `${randomInstance}${p}` + } + case "dumb": + if (url.pathname.endsWith("-lyrics")) return `${randomInstance}${url.pathname}` + return `${randomInstance}${url.pathname}${url.search}` + case "intellectual": + return `${randomInstance}${url.pathname}${url.search}` + case "ruralDictionary": + if (!url.pathname.includes("/define.php") && !url.pathname.includes("/random.php") && url.pathname != "/") + return randomInstance + return `${randomInstance}${url.pathname}${url.search}` + case "anonymousOverflow": { + if (url.hostname == "stackoverflow.com") { + const threadID = /^\/a\/(\d+)\/?/.exec(url.pathname) + if (threadID) return `${randomInstance}/questions/${threadID[1]}${url.search}` + return `${randomInstance}${url.pathname}${url.search}` + } + if (url.pathname == "/" || url.pathname == "") { + // https://stackexchange.com or https://superuser.com + return `${randomInstance}${url.pathname}${url.search}` + } + const regex = url.href.match(/https?:\/{2}(?:([a-zA-Z0-9-]+)\.(meta\.)?)?stackexchange\.com\//) + if (regex && regex.length > 1) { + if (regex[2]) { + return `${randomInstance}/exchange/${url.hostname}${url.pathname}${url.search}` + } + const subdomain = regex[1] + return `${randomInstance}/exchange/${subdomain}${url.pathname}${url.search}` + } + const notExchangeRegex = url.hostname.match( + /(?:[a-zA-Z]+\.)?(?:askubuntu\.com|mathoverflow\.net|serverfault\.com|stackapps\.com|superuser\.com|stackoverflow\.com)/ + ) + if (notExchangeRegex) { + return `${randomInstance}/exchange/${notExchangeRegex[0]}${url.pathname}${url.search}` + } + return `${randomInstance}${url.pathname}${url.search}` + } + case "biblioReads": + return `${randomInstance}${url.pathname}${url.search}` + case "wikimore": { + let hostSplit = url.host.split(".") + // wikiless doesn't have mobile view support yet + if (hostSplit[0] != "wikipedia" && hostSplit[0] != "www") { + const lang = url.hostname.split(".")[0] + return `${randomInstance}/wiki/${lang}${url.pathname}${url.search}${url.hash}` + } + return `${randomInstance}${url.pathname}${url.search}${url.hash}` + } + case "wikiless": { + let hostSplit = url.host.split(".") + // wikiless doesn't have mobile view support yet + if (hostSplit[0] != "wikipedia" && hostSplit[0] != "www") { + if (hostSplit[0] == "m") url.searchParams.append("mobileaction", "toggle_view_mobile") + else url.searchParams.append("lang", hostSplit[0]) + if (hostSplit[1] == "m") url.searchParams.append("mobileaction", "toggle_view_mobile") + } + return `${randomInstance}${url.pathname}${url.search}${url.hash}` + } + case "offtiktok": + case "proxiTok": + if (url.pathname.startsWith("/email")) return randomInstance + return `${randomInstance}${url.pathname}${url.search}` + case "waybackClassic": { + const regex = /^\/\web\/(?:[0-9]+)?\*\/(.*)/.exec(url.pathname) + if (regex) { + const link = regex[1] + return `${randomInstance}/cgi-bin/history.cgi?utf8=✓&q=${encodeURIComponent(link)}` + } + const regex2 = /(^\/\web\/([0-9]+)\/.*)/.exec(url.pathname) + if (regex2) { + let link = regex2[1] + link = link.replace(regex2[2], regex2[2] + "if_") + return `https://web.archive.org${link}` + } + return + } + case "gothub": + if (url.hostname == "gist.github.com") return `${randomInstance}/gist${url.pathname}${url.search}` + if (url.hostname == "raw.githubusercontent.com") return `${randomInstance}/raw${url.pathname}${url.search}` + return `${randomInstance}${url.pathname}${url.search}` + case "mikuInvidious": + if (url.hostname == "bilibili.com" || url.hostname == "www.bilibili.com" || url.hostname == "b23.tv") + return `${randomInstance}${url.pathname}${url.search}` + if (url.hostname == "space.bilibili.com") return `${randomInstance}/space${url.pathname}${url.search}` + case "tent": { + if (url.hostname == "bandcamp.com" && url.pathname == "/search") { + const query = url.searchParams.get("q") + return `${randomInstance}/search.php?query=${encodeURIComponent(query)}` + } + if (url.hostname.endsWith("bandcamp.com")) { + const regex = /^(.*)\.bandcamp\.com/.exec(url.hostname) + const artist = regex[1] + if (url.pathname == "/" || url.pathname == "/music") { + return `${randomInstance}/artist.php?name=${artist}` + } else { + const regex = /^\/(.*)\/(.*)/.exec(url.pathname) + if (regex) { + const type = regex[1] + const name = regex[2] + return `${randomInstance}/release.php?artist=${artist}&type=${type}&name=${name}` + } + } + } + if (url.hostname == "f4.bcbits.com") { + const regex = /\/img\/(.*)/.exec(url.pathname) + const image = regex[1] + return `${randomInstance}/image.php?file=${image}` + } + if (url.hostname == "t4.bcbits.com") { + const regex = /\/stream\/(.*)\/(.*)\/(.*)/.exec(url.pathname) + if (regex) { + const directory = regex[1] + const format = regex[2] + const file = regex[3] + const token = url.searchParams.get("token") + return `${randomInstance}/audio.php/?directory=${directory}&format=${format}&file=${file}&token=${encodeURIComponent(token)}` + } + } + } + case "binternet": + if (url.hostname == "i.pinimg.com") return `${randomInstance}/image_proxy.php?url=${encodeURIComponent(url.href)}` + return `${randomInstance}${url.pathname}${url.search}` + case "painterest": + if (url.hostname == "i.pinimg.com") return `${randomInstance}/_/proxy?url=${encodeURIComponent(url.href)}` + const regex = /^\/pin\/[^\/]+/.exec(url.pathname) + if (regex) return `${randomInstance}${regex[0]}` + return `${randomInstance}${url.pathname}${url.search}` + case "laboratory": { + let path = url.pathname + if (path == "/") path = "" + return `${randomInstance}/${url.hostname}${path}${url.search}` + } + case "quetre": { + const regex = /([a-z]+)\.quora\.com/.exec(url.hostname) + if (regex) { + const lang = regex[1] + url.searchParams.append("lang", lang) + return `${randomInstance}${url.pathname}${url.search}` + } + return `${randomInstance}${url.pathname}${url.search}` + } + case "pixivViewer": + case "liteXiv": + case "pixivFe": { + const regex = /\/[a-z]{1,3}\/(.*)/.exec(url.pathname) + if (regex) { + const path = regex[1] + return `${randomInstance}/${path}${url.search}` + } + return `${randomInstance}${url.pathname}${url.search}` + } + case "vixipy": { + const regex = /\/[a-z]{1,3}\/(.*)/.exec(url.pathname) + if (regex) { + let path = regex[1] + if (path.startsWith("tags/")) path = path.replace(/tags/, "tag") + return `${randomInstance}/${path}${url.search}` + } + return `${randomInstance}${url.pathname}${url.search}` + } + case "invidious": { + // tracker + url.searchParams.delete("si") + + if (type == "sub_frame") url.searchParams.append("autoplay", "0") + + if (url.hostname == "youtu.be" || (url.hostname.endsWith("youtube.com") && url.pathname.startsWith("/live"))) { + const watch = url.pathname.substring(url.pathname.lastIndexOf("/") + 1) + return `${randomInstance}/watch?v=${watch}&${url.search.substring(1)}` + } + if (url.hostname.endsWith("youtube.com") && url.pathname.startsWith("/redirect?")) return url.href + return `${randomInstance}${url.pathname}${url.search}` + } + case "freetubeMusic": { + if (url.hostname == "youtu.be" || (url.hostname.endsWith("youtube.com") && url.pathname.startsWith("/live"))) { + const watch = url.pathname.substring(url.pathname.lastIndexOf("/") + 1) + return `freetube://youtube.com/watch?v=${watch}` + } + return "freetube://" + url.href + } + case "invidiousMusic": { + if (url.hostname == "youtu.be" || (url.hostname.endsWith("youtube.com") && url.pathname.startsWith("/live"))) { + const watch = url.pathname.substring(url.pathname.lastIndexOf("/") + 1) + return `${randomInstance}/watch?v=${watch}` + } + return `${randomInstance}${url.pathname}${url.search}` + } + case "materialious": { + url.searchParams.delete("si") + if (url.hostname == "youtu.be" || (url.hostname.endsWith("youtube.com") && url.pathname.startsWith("/live"))) { + const watch = url.pathname.substring(url.pathname.lastIndexOf("/") + 1) + return `${randomInstance}/watch/${watch}${url.search.replace("?", "&")}` + } + if (url.hostname.endsWith("youtube.com")) { + if (url.pathname.startsWith("/watch")) { + if (url.searchParams.has("v")) { + const watch = url.searchParams.get("v") + url.searchParams.delete("v") + return `${randomInstance}/watch/${watch}${url.search.replace("?", "&")}` + } + return `${randomInstance}/watch/${url.search.replace("?", "&")}` + } + if (url.pathname.startsWith("/results")) { + if (url.searchParams.has("search_query")) { + const search = url.searchParams.get("search_query") + url.searchParams.delete("search_query") + return `${randomInstance}/search/${search}${url.search.replace("?", "&")}` + } + return `${randomInstance}/search/${url.search.replace("?", "&")}` + } + if (url.pathname.startsWith("/redirect?")) { + return url.href + } + } + return `${randomInstance}${url.pathname}${url.search}` + } + case "libremdb": { + if (/\/((?:name|title)\/\w+)\/?$/.exec(url.pathname)) { + return `${randomInstance}${url.pathname}${url.search}` + } + return randomInstance + } + case "tuboYoutube": + url.searchParams.delete("si") + if (url.pathname.startsWith("/channel")) return `${randomInstance}/channel?url=${encodeURIComponent(url.href)}` + if (url.pathname.startsWith("/watch")) return `${randomInstance}/stream?url=${encodeURIComponent(url.href)}` + return randomInstance + case "tuboSoundcloud": + if (url.pathname == "/") return `${randomInstance}?kiosk?serviceId=1` + if (url.pathname.match(/^\/[^\/]+(\/$|$)/)) return `${randomInstance}/channel?url=${encodeURIComponent(url.href)}` + if (url.pathname.match(/^\/[^\/]+\/[^\/]+/)) return `${randomInstance}/stream?url=${encodeURIComponent(url.href)}` + return randomInstance + case "twineo": + case "safetwitch": + if (url.hostname.startsWith("clips.")) return `${randomInstance}/clip${url.pathname}${url.search}` + return `${randomInstance}${url.pathname}${url.search}` + + case "tekstoLibre": + return `${randomInstance}/?${url.pathname.slice(1)}` + case "skyview": + if (url.pathname == "/") return randomInstance + return `${randomInstance}?url=${encodeURIComponent(url.href)}` + case "nitter": { + let search = new URLSearchParams(url.search) + + search.delete("ref_src") + search.delete("ref_url") + search.delete("s") // type of device that shared the link + search.delete("t") // some sort of tracking ID + + search = search.toString() + if (search !== "") search = `?${search}` + + if (url.host.split(".")[0] === "pbs" || url.host.split(".")[0] === "video") { + try { + const [, id, format, extra] = search.match(/(.*)\?format=(.*)&(.*)/) + const query = encodeURIComponent(`${id}.${format}?${extra}`) + return `${randomInstance}/pic${url.pathname}${query}` + } catch { + return `${randomInstance}/pic${url.pathname}${search}` + } + } + if (url.pathname.split("/").includes("tweets")) + return `${randomInstance}${url.pathname.replace("/tweets", "")}${search}` + if (url.host == "t.co") return `${randomInstance}/t.co${url.pathname}` + return `${randomInstance}${url.pathname}${search}#m` + } + case "priviblur": { + if (url.hostname == "www.tumblr.com") return `${randomInstance}${url.pathname}${url.search}` + if (url.hostname.startsWith("assets")) return `${randomInstance}/tblr/assets${url.pathname}${url.search}` + if (url.hostname.startsWith("static")) return `${randomInstance}/tblr/static${url.pathname}${url.search}` + + const reg = /^([0-9]+)\.media\.tumblr\.com/.exec(url.hostname) // *.media.tumblr.com + if (reg) return `${randomInstance}/tblr/media/${reg[1]}${url.pathname}${url.search}` + + const blogregex = /^(?:www\.)?([a-z\d-]+)\.tumblr\.com/.exec(url.hostname) // .tumblr.com + if (blogregex) { + const blog_name = blogregex[1] + // Under the .tumblr.com domain posts are under a /post path + if (url.pathname.startsWith("/post")) + return `${randomInstance}/${blog_name}${url.pathname.slice(5)}${url.search}` + else return `${randomInstance}/${blog_name}${url.pathname}${url.search}` + } + return `${randomInstance}${url.pathname}${url.search}` + } + case "ultimateTab": + case "freetar": + if (url.pathname.startsWith("/search.php")) { + url.searchParams.set("search_term", url.searchParams.get("value")) + url.searchParams.delete("value") + url.searchParams.delete("search_type") + return `${randomInstance}/search${url.search}` + } + if (url.pathname.startsWith("/artist")) return + return `${randomInstance}${url.pathname}${url.search}` + case "ratAintTieba": + url.searchParams.delete("ie") + return `${randomInstance}${url.pathname}${url.search}` + case "shoelace": { + const reg = /^\/(?:(?:(?:[^\/])?\/post)|t)\/([^\/])/.exec(url.pathname) + if (reg) return `${randomInstance}/t/${reg[1]}${url.search}` + return `${randomInstance}${url.pathname}${url.search}` + } + case "skunkyArt": { + if (url.pathname.startsWith("/search")) return `${randomInstance}${url.pathname}${url.search}&type=all` + + const artReg = /^\/(.*?)\/art\/(.*)\/?/.exec(url.pathname) + if (artReg) return `${randomInstance}/post/${artReg[1]}/${artReg[2]}${url.search}` + + const userReg = /^\/([^\/]+)$/.exec(url.pathname) + if (userReg) return `${randomInstance}/group_user?q=${userReg[1]}&type=about` + + const galleryReg = /^\/(.*?)\/gallery(\/$|$)$/.exec(url.pathname) + if (galleryReg) return `${randomInstance}/group_user?q=${galleryReg[1]}&type=gallery` + + return `${randomInstance}${url.pathname}${url.search}` + } + case "ytifyMusic": + case "ytify": { + if (url.pathname.startsWith("/watch")) + return `${randomInstance}/?s=${encodeURIComponent(url.searchParams.get("v"))}` + + const channelReg = /\/channel\/([^\/]+)/.exec(url.pathname) + if (channelReg) return `${randomInstance}/list?channel=${channelReg[1]}` + + if (url.pathname.startsWith("/playlist")) + return `${randomInstance}/list?playlists=${encodeURIComponent(url.searchParams.get("list"))}` + return `${randomInstance}${url.pathname}${url.search}` + } + case "koub": { + if (url.pathname.startsWith("/view/") || url.pathname.startsWith("/stories/")) { + return `${randomInstance}${url.pathname}${url.search}` + } + const accountReg = /^\/([^\/]+)\/?$/.exec(url.pathname) + if (accountReg) return `${randomInstance}/account${url.pathname}${url.search}` + return randomInstance + } + case "duckDuckGoAiChat": + return "https://duckduckgo.com/?q=DuckDuckGo+AI+Chat&ia=chat&duckai=1" + + case "protonLumo": + return "https://lumo.proton.me/" + + case "soundcloak": + if (url.pathname.startsWith("/feed") || url.pathname.startsWith("/stream")) { + // this feature requires authentication and is unsupported, so just redirect to main page + return randomInstance + } + + if (url.pathname.startsWith("/search")) { + if (!url.search) { + return randomInstance + } + + let type = "" + if (url.pathname.startsWith("/search/sounds")) { + type = "tracks" + } else if (url.pathname.startsWith("/search/people")) { + type = "users" + } else if (url.pathname.startsWith("/search/albums") || url.pathname.startsWith("/search/sets")) { + type = "playlists" + } + + if (type) { + type = "&type=" + type + } else { + return randomInstance // fallback for unsupported search types (searching for anything for example) + } + + return `${randomInstance}/search${url.search}${type}` + } + + if (url.host == "on.soundcloud.com") { + return `${randomInstance}/on${url.pathname}` + } + + return `${randomInstance}${url.pathname}${url.search}` + case "piped": + case "pipedMaterial": + case "cloudtube": + case "lightTube": + case "viewtube": + url.searchParams.delete("si") + default: + return `${randomInstance}${url.pathname}${url.search}` + } +} + +/** + * @param {URL} url + * @param {string} type + * @param {URL} originUrl + * @param {URL} documentUrl + * @param {boolean} incognito + * @param {boolean} forceRedirection + * @returns {string | undefined} + */ +function redirect(url, type, originUrl, documentUrl, incognito, forceRedirection) { + if (type != "main_frame" && type != "sub_frame" && type != "image") return + let randomInstance + let frontend + if (!forceRedirection && options.redirectOnlyInIncognito == true && !incognito) return + for (const service in config.services) { + if (!forceRedirection && !options[service].enabled) continue + if (!forceRedirection && options[service].redirectOnlyInIncognito == true && !incognito) continue + + frontend = options[service].frontend + + if ( + config.services[service].frontends[frontend].desktopApp && + type != "main_frame" && + options[service].redirectType != "main_frame" + ) + frontend = options[service].embedFrontend + + if (!regexArray(service, url, config, options, frontend)) { + frontend = null + continue + } + + if (type != "main_frame" && documentUrl && options[service].redirectType == "sub_frame") { + if (regexArray(service, documentUrl, config, options, frontend)) { + return + } + } + + if ( + config.services[service].embeddable && + type != options[service].redirectType && + options[service].redirectType != "both" + ) { + if (options[service].unsupportedUrls == "block") return "CANCEL" + return + } + + let instanceList = options[frontend] + if (instanceList === undefined) break // should not happen if settings are correct + + if (config.services[service].frontends[frontend].localhost && options[service].instance == "localhost") { + randomInstance = `http://${frontend}.localhost:8080` + } else if (instanceList.length === 0) { + return `https://no-instance.libredirect.invalid?frontend=${encodeURIComponent(frontend)}&url=${encodeURIComponent(url.href)}` + } else { + randomInstance = utils.getRandomInstance(instanceList) + } + + if (originUrl && instanceList.includes(originUrl.origin)) { + if (type == "main_frame") return "BYPASSTAB" + else return null + } + break + } + if (!frontend) return + + return rewrite(url, originUrl, frontend, randomInstance, type) +} + +/** + * @param {URL} url + * @param {string} type + * @param {URL} originUrl + * @param {URL} documentUrl + * @param {boolean} incognito + * @param {boolean} forceRedirection + * @returns {Promise} + */ +async function redirectAsync(url, type, originUrl, documentUrl, incognito, forceRedirection) { + await init() + return redirect(url, type, originUrl, documentUrl, incognito, forceRedirection) +} + +/** + * @param {URL} url + */ +async function computeServiceFrontend(url) { + const config = await utils.getConfig() + const options = await utils.getOptions() + for (const service in config.services) { + if (regexArray(service, url, config, options)) { + return { service, frontend: null } + } else { + for (const frontend in config.services[service].frontends) { + const instances = all(service, frontend, options, config) + const i = instances.findIndex(instance => url.href.startsWith(instance)) + if (i >= 0) { + return { service, frontend } + } + } + } + } +} + +/** + * @param {URL} url + * @param {string} customService + */ +function switchInstance(url, customService) { + return new Promise(async resolve => { + let options = await utils.getOptions() + let config = await utils.getConfig() + + const protocolHost = utils.protocolHost(url) + if (customService) { + const instancesList = options[options[customService].frontend] + if (instancesList !== undefined) { + const newInstance = utils.getNextInstance(url.origin, instancesList) + if (newInstance) { + return resolve(`${newInstance}${url.pathname}${url.search}`) + } + } + } else { + for (const service in config.services) { + let instancesList = options[options[service].frontend] + if (instancesList === undefined) continue + const index = instancesList.findIndex(instance => url.href.startsWith(instance)) + if (index < 0) continue + instancesList.splice(index, 1) + if (instancesList.length === 0) return resolve() + const newInstance = utils.getNextInstance(url.origin, instancesList) + if (newInstance) { + return resolve(`${newInstance}${url.pathname}${url.search}`) + } + } + } + resolve() + }) +} + +/** + * @param {URL} url + */ +async function reverse(url) { + let options = await utils.getOptions() + let config = await utils.getConfig() + for (const service in config.services) { + let frontend = options[service].frontend + if (options[frontend] == undefined) continue + if ( + options[frontend].findIndex(instance => url.href.startsWith(instance)) < 0 && + !url.href.startsWith(`http://${frontend}.localhost:8080`) + ) + continue + switch (service) { + case "youtube": + case "imdb": + case "imgur": + case "tiktok": + case "reddit": + case "imdb": + case "snopes": + case "urbanDictionary": + case "quora": + case "twitter": + case "medium": + case "pinterest": + return `${config.services[service].url}${url.pathname}${url.search}` + case "fandom": { + let regex = url.pathname.match(/^\/([a-zA-Z0-9-]+)\/wiki\/(.*)/) + if (regex) return `https://${regex[1]}.fandom.com/wiki/${regex[2]}` + return + } + case "wikipedia": { + const lang = url.searchParams.get("lang") + if (lang != null) { + return `https://${lang}.wikipedia.org${url.pathname}${url.search}${url.hash}` + } + return `https://wikipedia.org${url.pathname}${url.search}${url.hash}` + } + case "stackOverflow": { + if (url.pathname.startsWith("/questions/")) { + return `https://stackoverflow.com${url.pathname}${url.search}` + } + if (url.pathname.startsWith("/exchange/")) { + const regex = /\/exchange\/(.*?)(\/.*)/.exec(url.pathname) + if (regex) { + if (regex[1].includes(".")) { + return `https://${regex[1]}${regex[2]}` + } else { + return `https://${regex[1]}.stackexchange.com${regex[2]}` + } + } + } + return + } + case "tekstowo": + return `${config.services[service].url}/${url.search.slice(1)}` + case "goodreads": + return `https://goodreads.com${url.pathname}${url.search}` + case "soundcloud": + if (frontend == "soundcloak") { + if (url.pathname.includes("/_/")) { + // soundcloak-specific pages + return `${config.services[service].url}${url.pathname.split("/_/")[0]}` + } + + if (url.pathname == "/search") { + let type = url.searchParams.get("type") + switch (type) { + case "playlists": + type = "sets" + break + case "tracks": + type = "sounds" + break + case "users": + type = "people" + break + default: + type = "" + } + + url.searchParams.delete("type") + if (!type) { + return `${config.services[service].url}/search?${url.searchParams.toString()}` + } else { + return `${config.services[service].url}/search/${type}?${url.searchParams.toString()}` + } + } + + return `${config.services[service].url}${url.pathname}` + } + default: + return + } + } + return +} + +const defaultInstances = { + materialious: ["https://app.materialio.us"], + viewtube: ["https://viewtube.io"], + piped: ["https://pipedapi-libre.kavin.rocks"], + pipedMaterial: ["https://piped-material.xn--17b.net"], + cloudtube: ["https://tube.cadence.moe"], + lightTube: ["https://tube.kuylar.dev"], + poketube: ["https://poketube.fun"], + proxiTok: ["https://proxitok.pabloferreiro.es"], + offtiktok: ["https://www.offtiktok.com"], + redlib: ["https://safereddit.com"], + eddrit: ["https://eddrit.com"], + troddit: ["https://www.troddit.com"], + scribe: ["https://scribe.rip"], + libMedium: ["https://md.vern.cc"], + small: ["https://small.bloat.cat"], + freedium: ["https://freedium.cfd"], + quetre: ["https://quetre.iket.me"], + libremdb: ["https://libremdb.iket.me"], + simplyTranslate: ["https://simplytranslate.org"], + translite: ["https://tl.bloat.cat"], + mozhi: ["https://mozhi.aryak.me"], + searxng: ["https://nyc1.sx.ggtyler.dev"], + "4get": ["https://4get.ca"], + websurfx: ["https://alamin655-spacex.hf.space"], + rimgo: ["https://rimgo.vern.cc"], + hyperpipe: ["https://hyperpipe.surge.sh"], + osm: ["https://www.openstreetmap.org"], + breezeWiki: ["https://breezewiki.com"], + neuters: ["https://neuters.de"], + dumb: ["https://dm.vern.cc"], + intellectual: ["https://intellectual.insprill.net"], + ruralDictionary: ["https://rd.vern.cc"], + anonymousOverflow: ["https://code.whatever.social"], + suds: ["https://sd.vern.cc"], + unfunny: ["https://uf.vern.cc"], + soprano: ["https://sp.vern.cc"], + meme: ["https://mm.vern.cc"], + waybackClassic: ["https://wayback-classic.net"], + tent: ["https://tent.sny.sh"], + laboratory: ["https://lab.vern.cc"], + binternet: ["https://bn.bloat.cat"], + painterest: ["https://pt.bloat.cat"], + pixivFe: ["https://pixiv.perennialte.ch"], + liteXiv: ["https://litexiv.465321.best", "https://litexiv.bloat.cat"], + pixivViewer: ["https://pixiv.pictures"], + vixipy: ["https://vx.maid.zone"], + indestructables: ["https://indestructables.private.coffee"], + destructables: ["https://ds.vern.cc"], + structables: ["https://structables.private.coffee"], + safetwitch: ["https://safetwitch.drgns.space"], + twineo: ["https://twineo.exozy.me"], + kittygram: ["https://kittygram.irelephant.net/"], + proxigram: ["https://ig.opnxng.com"], + tuboYoutube: ["https://tubo.media"], + tuboSoundcloud: ["https://tubo.media"], + tekstoLibre: ["https://davilarek.github.io/TekstoLibre"], + skyview: ["https://skyview.social"], + skylib: ["https://skylib.coffee"], + priviblur: ["https://pb.bloat.cat"], + nitter: ["https://nitter.privacydev.net"], + pasted: ["https://pasted.drakeerv.com"], + pasty: ["https://pasty.lus.pm"], + freetar: ["https://freetar.de"], + ultimateTab: ["https://ultimate-tab.com"], + ratAintTieba: ["https://rat.fis.land"], + shoelace: ["https://shoelace.mint.lgbt"], + skunkyArt: ["https://skunky.bloat.cat"], + ytify: ["https://ytify.pp.ua"], + ytifyMusic: ["https://ytify.pp.ua"], + nerdsForNerds: ["https://nn.vern.cc"], + ducksForDucks: ["https://ducksforducks.private.coffee"], + koub: ["https://koub.clovius.club"], + soundcloak: ["https://soundcloak.fly.dev"], + gocook: ["https://cook.adminforge.de"], + wikimore: ["https://wikimore.private.coffee"], + libreTranslate: ["https://libretranslate.com"], + cryptPad: ["https://cryptpad.org"], + phantom: ["https://phantom.kuuro.net"] +} + +async function getDefaults() { + let config = await utils.getConfig() + let options = {} + for (const service in config.services) { + options[service] = {} + for (const defaultOption in config.services[service].options) { + options[service][defaultOption] = config.services[service].options[defaultOption] + } + for (const frontend in config.services[service].frontends) { + if (config.services[service].frontends[frontend].instanceList) { + options[frontend] = [] + } + } + } + options.exceptions = { + url: [], + regex: [], + } + options.theme = "detect" + options.popupServices = ["youtube", "tiktok", "imgur", "reddit", "quora", "translate", "maps"] + options.fetchInstances = "github" + options.redirectOnlyInIncognito = false + options = { ...options, ...defaultInstances } + return options +} + +function initDefaults() { + return new Promise(resolve => { + browser.storage.local.clear(async () => { + options = await getDefaults() + browser.storage.local.set({ options }, () => resolve()) + }) + }) +} + +function processUpdate(_options) { + return new Promise(async resolve => { + const config = await utils.getConfig() + let options = _options ?? (await utils.getOptions()) + + const defaults = await getDefaults() + + // Remove any unknown option or subOption + for (const optionName in options) { + if (!(optionName in defaults)) delete options[optionName] + else if (typeof optionName === "object" && optionName !== null) { + for (const subOptionName in options[optionName]) { + if (!(subOptionName in defaults[optionName])) delete options[optionName][subOptionName] + } + } + } + + // Remove any unknwon popupService + options.popupServices = options.popupServices.filter(service => service in config.services) + + // Add missing options + for (const [defaultName, defaultValue] of Object.entries(defaults)) { + if (!(defaultName in options)) { + options[defaultName] = defaultValue + } + } + + for (const [serviceName, serviceValue] of Object.entries(config.services)) { + // Reset service options if selected frontend is deprecated + if (!(options[serviceName].frontend in serviceValue.frontends)) { + options[serviceName] = serviceValue.options + } + + // Add a default service option if it's not present + for (const optionName in serviceValue.options) { + if (!(optionName in options[serviceName])) { + options[serviceName][optionName] = serviceValue.options[optionName] + } + } + } + + browser.storage.local.clear(() => browser.storage.local.set({ options }, () => resolve())) + }) +} + +/** + * @param {URL} url + */ +async function copyRaw(url) { + const newUrl = await reverse(url) + if (newUrl) { + if (!isChrome) { + navigator.clipboard.writeText(newUrl) + } else { + var copyFrom = document.createElement("textarea") + copyFrom.textContent = newUrl + document.body.appendChild(copyFrom) + copyFrom.select() + document.execCommand("copy") + copyFrom.blur() + document.body.removeChild(copyFrom) + } + } +} + +/** + * @param {URL} url + */ +function isException(url) { + if (!options) return false + if (!options.exceptions) return false + let exceptions = options.exceptions + if (exceptions && url) { + if (exceptions.url) { + for (let item of exceptions.url) { + item = new URL(item) + item = item.href.replace(/^http:\/\//, "https://") + if (item == url.href) { + return true + } + } + } + if (exceptions.regex) { + for (const item of exceptions.regex) { + if (new RegExp(item).test(url.href)) { + return true + } + } + } + } + return false +} + +export default { + redirect, + redirectAsync, + computeServiceFrontend, + reverse, + initDefaults, + processUpdate, + copyRaw, + switchInstance, + isException, +} diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/javascripts/utils.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/javascripts/utils.js new file mode 100644 index 0000000..1f5db8d --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/assets/javascripts/utils.js @@ -0,0 +1,297 @@ +window.browser = window.browser || window.chrome + +/** + * @param {Array.} instances + * @returns {T} + */ +function getRandomInstance(instances) { + return instances[~~(instances.length * Math.random())] +} + +/** + * @param {string} currentInstanceUrl + * @param {Array.} instances + * @returns {T} + */ +function getNextInstance(currentInstanceUrl, instances) { + const currentInstanceIndex = instances.indexOf(currentInstanceUrl) + if (currentInstanceIndex === -1) return getRandomInstance(instances) + const nextInstanceIndex = (currentInstanceIndex + 1) % instances.length + return instances[nextInstanceIndex] +} + +/** + * @param {URL} url + */ +function protocolHost(url) { + const pathname = url.pathname.replace(/\/$/, "") + + // workaround + if (pathname == "/TekstoLibre" && url.host.endsWith("github.io")) + return `${url.protocol}//${url.host}${pathname.slice(0, -1)}` + + if (url.username && url.password) return `${url.protocol}//${url.username}:${url.password}@${url.host}${pathname}` + + return `${url.protocol}//${url.host}${pathname}` +} + +/** + * @typedef FrontendInfo + * @prop {boolean} instanceList + * @prop {string} name + * @prop {string} url + */ + +/** + * @typedef {Object} Service + * @prop {Object.} frontends + * @prop {Object} options + */ + +/** + * @typedef {Object} Config + * @prop {Object.} services + */ + +/** + * @returns {Promise} + */ +function getConfig() { + return new Promise(resolve => { + fetch("/config.json") + .then(response => response.text()) + .then(json => { + resolve(JSON.parse(json)) + return + }) + }) +} + +/** + * @typedef {Object} Option + * @prop {string} frontend + */ + +/** + * @returns {Promise>} + */ +function getOptions() { + return new Promise(resolve => browser.storage.local.get("options", r => resolve(r.options))) +} + +function getPingCache() { + return new Promise(resolve => browser.storage.local.get("pingCache", r => resolve(r.pingCache ?? {}))) +} + +function getBlacklist(options) { + return new Promise(resolve => { + let url + if (options.fetchInstances == "github") + url = "https://raw.githubusercontent.com/libredirect/instances/main/blacklist.json" + else if (options.fetchInstances == "codeberg") + url = "https://codeberg.org/LibRedirect/instances/raw/branch/main/blacklist.json" + else return resolve("disabled") + const http = new XMLHttpRequest() + http.open("GET", url, true) + http.onreadystatechange = () => { + if (http.status === 200 && http.readyState == XMLHttpRequest.DONE) resolve(JSON.parse(http.responseText)) + } + http.onerror = () => resolve() + http.ontimeout = () => resolve() + http.send(null) + }) +} + +function getList(options) { + return new Promise(resolve => { + let url + if (options.fetchInstances == "github") + url = "https://raw.githubusercontent.com/libredirect/instances/main/data.json" + else if (options.fetchInstances == "codeberg") + url = "https://codeberg.org/LibRedirect/instances/raw/branch/main/data.json" + else return resolve("disabled") + const http = new XMLHttpRequest() + http.open("GET", url, true) + http.onreadystatechange = () => { + if (http.status === 200 && http.readyState == XMLHttpRequest.DONE) return resolve(JSON.parse(http.responseText)) + } + http.onerror = () => resolve() + http.ontimeout = () => resolve() + http.send(null) + }) +} + +/** + * @param {string} href + */ +function pingOnce(href) { + return new Promise(async resolve => { + let started + let http = new XMLHttpRequest() + http.timeout = 5000 + http.ontimeout = () => resolve(5000) + http.onerror = () => resolve() + http.onreadystatechange = () => { + if (http.readyState == 2) { + if (http.status == 200) { + let ended = new Date().getTime() + http.abort() + resolve(ended - started) + } else { + resolve(5000 + http.status) + } + } + } + http.open("GET", `${href}?_=${new Date().getTime()}`, true) + started = new Date().getTime() + http.send(null) + }) +} + +/** + * @param {string} href + */ +function ping(href) { + return new Promise(async resolve => { + let average = 0 + let time + for (let i = 0; i < 3; i++) { + time = await pingOnce(href) + if (i == 0) continue + if (time >= 5000) { + resolve(time) + return + } + average += time + } + average = parseInt(average / 3) + resolve(average) + }) +} + +function addressToLatLng(address) { + const http = new XMLHttpRequest() + http.open( + "GET", + `https://nominatim.openstreetmap.org/search?q=${encodeURIComponent(address)}&format=json&limit=1`, + false + ) + http.send() + if (http.status == 200) { + const json = JSON.parse(http.responseText)[0] + if (json) { + return { + coordinate: `${json.lat},${json.lon}`, + boundingbox: `${json.boundingbox[2]},${json.boundingbox[1]},${json.boundingbox[3]},${json.boundingbox[0]}`, + } + } + return {} + } +} + +function getQuery(url) { + let query = "" + if (url.searchParams.has("q")) query = url.searchParams.get("q") + else if (url.searchParams.has("query")) query = url.searchParams.has("query") + return query +} +function prefsEncoded(prefs) { + return new URLSearchParams(prefs).toString() +} + +function convertMapCentre(url) { + let [lat, lon, zoom] = [null, null, null] + const reg = url.pathname.match(/@(-?\d[0-9.]*),(-?\d[0-9.]*),(\d{1,2})[.z]/) + if (reg) { + ;[, lon, lat, zoom] = reg + } else if (url.searchParams.has("center")) { + // Set map centre if present + ;[lat, lon] = url.searchParams.get("center").split(",") + zoom = url.searchParams.get("zoom") ?? "17" + } + return { zoom, lon, lat } +} + +export function randomInstances(clearnet, n) { + let instances = [] + if (n > clearnet.length) n = clearnet.length + for (let i = 0; i < n; i++) { + const randomNumber = Math.floor(Math.random() * clearnet.length) + const randomInstance = clearnet[randomNumber] + instances.push(randomInstance) + } + return instances +} + +async function autoPickInstance(clearnet, url) { + if (url) { + const i = clearnet.findIndex(instance => url.href.startsWith(instance)) + if (i >= 0) clearnet.splice(i, 1) + } + const random = randomInstances(clearnet, 5) + const pings = await Promise.all([ + ...random.map(async instance => { + return [instance, await ping(instance)] + }), + ]) + pings.sort((a, b) => a[1] - b[1]) + return pings[0][0] +} + +export function style(options, window) { + const vars = cssVariables(options, window) + return `--text: ${vars.text}; + --bg-main: ${vars.bgMain}; + --bg-secondary: ${vars.bgSecondary}; + --active: ${vars.active}; + --danger: ${vars.danger}; + --light-grey: ${vars.lightGrey};` +} + +function cssVariables(options, window) { + const dark = { + text: "#fff", + bgMain: "#121212", + bgSecondary: "#202020", + active: "#fbc117", + danger: "#f04141", + lightGrey: "#c3c3c3", + } + + const light = { + text: "black", + bgMain: "white", + bgSecondary: "#e4e4e4", + active: "#fb9817", + danger: "#f04141", + lightGrey: "#c3c3c3", + } + if (options.theme == "dark") { + return dark + } else if (options.theme == "light") { + return light + } else if (window.matchMedia("(prefers-color-scheme: dark)").matches) { + return dark + } else { + return light + } +} + +export default { + getRandomInstance, + getNextInstance, + protocolHost, + getList, + getBlacklist, + getConfig, + getOptions, + getPingCache, + ping, + addressToLatLng, + getQuery, + prefsEncoded, + convertMapCentre, + randomInstances, + style, + autoPickInstance, +} diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/config.json b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/config.json new file mode 100644 index 0000000..5db9fb9 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/config.json @@ -0,0 +1,1526 @@ +{ + "networks": { + "clearnet": { + "tld": "org", + "name": "Clearnet" + }, + "tor": { + "tld": "onion", + "name": "Tor" + }, + "i2p": { + "tld": "i2p", + "name": "I2P" + }, + "loki": { + "tld": "loki", + "name": "Lokinet" + } + }, + "services": { + "youtube": { + "frontends": { + "invidious": { + "name": "Invidious", + "embeddable": true, + "instanceList": true, + "url": "https://invidious.io/" + }, + "materialious": { + "name": "Materialious", + "embeddable": true, + "instanceList": true, + "url": "https://materialio.us/" + }, + "piped": { + "excludeTargets": [ + 2, + 3 + ], + "name": "Piped", + "embeddable": true, + "instanceList": true, + "url": "https://github.com/TeamPiped/Piped" + }, + "pipedMaterial": { + "excludeTargets": [ + 2, + 3 + ], + "name": "Piped-Material", + "embeddable": false, + "instanceList": true, + "url": "https://github.com/mmjee/Piped-Material" + }, + "poketube": { + "excludeTargets": [ + 2, + 3 + ], + "name": "Poke", + "embeddable": true, + "instanceList": true, + "url": "https://codeberg.org/ashley/poke" + }, + "cloudtube": { + "name": "CloudTube", + "embeddable": false, + "instanceList": true, + "url": "https://sr.ht/~cadence/tube", + "excludeTargets": [ + 2, + 3 + ] + }, + "lightTube": { + "name": "LightTube", + "embeddable": false, + "instanceList": true, + "url": "https://github.com/lighttube-org/LightTube" + }, + "tuboYoutube": { + "name": "Tubo", + "embeddable": false, + "instanceList": true, + "url": "https://github.com/migalmoreno/tubo", + "excludeTargets": [ + 2, + 3 + ] + }, + "freetube": { + "excludeTargets": [ + 2, + 3 + ], + "name": "FreeTube", + "embeddable": false, + "desktopApp": true, + "instanceList": false, + "url": "https://github.com/FreeTubeApp/FreeTube" + }, + "yattee": { + "excludeTargets": [ + 2, + 3 + ], + "name": "Yattee", + "embeddable": false, + "desktopApp": true, + "instanceList": false, + "url": "https://github.com/yattee/yattee" + }, + "freetubePwa": { + "excludeTargets": [ + 2, + 3 + ], + "name": "FreeTube PWA", + "embeddable": false, + "instanceList": false, + "url": "https://github.com/MarmadileManteater/FreeTubeCordova" + }, + "viewtube": { + "name": "ViewTube", + "embeddable": true, + "instanceList": true, + "url": "https://github.com/ViewTube/viewtube" + }, + "ytify": { + "name": "ytify", + "embeddable": false, + "instanceList": true, + "url": "https://github.com/n-ce/ytify/" + } + }, + "targets": [ + "^https?:\\/{2}(www\\.|m\\.)?youtube.com(\\/|$)(?!iframe_api\\/|redirect\\/)", + "^https?:\\/{2}img\\.youtube.com\\/vi\\/.*\\/..*", + "^https?:\\/{2}(i|s)\\.ytimg.com\\/vi\\/.*\\/..*", + "^https?:\\/{2}(www\\.)?youtube.com\\/watch?v=..*", + "^https?:\\/{2}(www\\.)?youtu\\.be\\/..*", + "^https?:\\/{2}(www\\.)?(youtube|youtube-nocookie)\\.com\\/embed\\/..*" + ], + "name": "YouTube", + "options": { + "enabled": true, + "redirectType": "main_frame", + "frontend": "invidious", + "embedFrontend": "invidious", + "unsupportedUrls": "bypass", + "redirectOnlyInIncognito": false + }, + "imageType": "svg", + "embeddable": true, + "url": "https://youtube.com" + }, + "youtubeMusic": { + "frontends": { + "ytifyMusic": { + "name": "ytify", + "embeddable": false, + "instanceList": true, + "url": "https://github.com/n-ce/ytify/" + }, + "hyperpipe": { + "name": "Hyperpipe", + "instanceList": true, + "url": "https://codeberg.org/Hyperpipe/Hyperpipe" + }, + "invidiousMusic": { + "name": "Invidious", + "embeddable": true, + "instanceList": true, + "url": "https://invidious.io/" + }, + "freetubeMusic": { + "name": "FreeTube", + "embeddable": false, + "desktopApp": true, + "instanceList": false, + "url": "https://github.com/FreeTubeApp/FreeTube" + } + }, + "targets": [ + "^https?:\\/{2}music\\.youtube\\.com\\/" + ], + "name": "YT Music", + "options": { + "enabled": false, + "frontend": "hyperpipe", + "unsupportedUrls": "bypass", + "redirectOnlyInIncognito": false + }, + "imageType": "svg", + "url": "https://music.youtube.com" + }, + "twitter": { + "frontends": { + "nitter": { + "name": "Nitter", + "embeddable": true, + "instanceList": true, + "url": "https://github.com/zedeus/nitter", + "localhost": true + } + }, + "targets": [ + "^https?:\\/{2}(www\\.|mobile\\.)?twitter\\.com\\/", + "^https?:\\/{2}(www\\.|mobile\\.)?x\\.com\\/", + "^https?:\\/{2}(pbs\\.|video\\.)twimg\\.com\\/", + "^https?:\\/{2}platform\\.x\\.com/embed\\/", + "^https?:\\/{2}platform\\.twitter\\.com/embed\\/", + "^https?:\\/{2}t\\.co\\/" + ], + "name": "Twitter", + "options": { + "enabled": false, + "redirectType": "main_frame", + "unsupportedUrls": "bypass", + "frontend": "nitter", + "instance": "public", + "redirectOnlyInIncognito": false + }, + "imageType": "svg", + "embeddable": true, + "url": "https://twitter.com" + }, + "chatGpt": { + "frontends": { + "duckDuckGoAiChat": { + "name": "DuckDuckGo AI Chat", + "instanceList": false, + "url": "https://duckduckgo.com/duckduckgo-help-pages/aichat/" + }, + "protonLumo": { + "name": "Lumo by Proton", + "instanceList": false, + "url": "https://lumo.proton.me/" + } + }, + "targets": ["^https?:\\/{2}chatgpt\\.com"], + "name": "ChatGPT", + "options": { + "enabled": false, + "unsupportedUrls": "bypass", + "frontend": "duckDuckGoAiChat", + "redirectOnlyInIncognito": false + }, + "imageType": "svgMono", + "url": "https://chatgpt.com/" + }, + "bluesky": { + "frontends": { + "skyview": { + "name": "Skyview", + "instanceList": true, + "url": "https://github.com/badlogic/skyview" + }, + "skylib": { + "name": "Skylib", + "instanceList": true, + "url": "https://codeberg.org/bg443/skylib-backend" + } + }, + "targets": [ + "^https?:\\/{2}bsky\\.app\\/" + ], + "name": "Bluesky", + "options": { + "enabled": false, + "unsupportedUrls": "bypass", + "frontend": "skyview", + "redirectOnlyInIncognito": false + }, + "imageType": "svg", + "url": "https://bsky.app/" + }, + "reddit": { + "frontends": { + "libreddit": { + "name": "Libreddit", + "instanceList": true, + "url": "https://github.com/spikecodes/libreddit", + "localhost": true + }, + "redlib": { + "name": "Redlib", + "instanceList": true, + "url": "https://github.com/redlib-org/redlib", + "localhost": false + }, + "teddit": { + "name": "Teddit", + "instanceList": true, + "url": "https://codeberg.org/teddit/teddit", + "localhost": false + }, + "eddrit": { + "name": "Eddrit", + "instanceList": true, + "url": "https://github.com/corenting/eddrit", + "localhost": false + }, + "troddit": { + "name": "Troddit", + "instanceList": false, + "url": "https://github.com/burhan-syed/troddit", + "localhost": false + } + }, + "targets": [ + "^https?:\\/{2}(www\\.|old\\.|np\\.|new\\.|amp\\.)?(reddit|reddittorjg6rue252oqsxryoxengawnmo46qy4kyii5wtqnwfj4ooad)\\.(com|onion)(?=\\/u(ser)?\\/|\\/r\\/|\\/search|\\/new|\\/comments|\\/?$)", + "^https?:\\/{2}((i|(external-)?preview)\\.)?redd\\.it" + ], + "name": "Reddit", + "options": { + "enabled": false, + "frontend": "redlib", + "unsupportedUrls": "bypass", + "instance": "public", + "redirectOnlyInIncognito": false + }, + "imageType": "svg", + "url": "https://reddit.com" + }, + "tumblr": { + "frontends": { + "priviblur": { + "name": "Priviblur", + "embeddable": true, + "instanceList": true, + "url": "https://github.com/syeopite/priviblur", + "localhost": true + } + }, + "targets": [ + "^https?:\\/{2}(media\\.|assets\\.|static\\.)?tumblr\\.com\\/", + "^https?:\\/{2}[0-9]+\\.media\\.tumblr\\.com\\/", + "^https?:\\/{2}(www\\.)?(.*)\\.tumblr.com\\/" + ], + "name": "Tumblr", + "options": { + "enabled": false, + "redirectType": "main_frame", + "unsupportedUrls": "bypass", + "frontend": "priviblur", + "instance": "public", + "redirectOnlyInIncognito": false + }, + "imageType": "svg", + "embeddable": true, + "url": "https://tumblr.com" + }, + "twitch": { + "frontends": { + "safetwitch": { + "name": "SafeTwitch", + "embeddable": true, + "instanceList": true, + "url": "https://codeberg.org/dragongoose/safetwitch", + "localhost": false + }, + "twineo": { + "name": "Twineo", + "embeddable": true, + "instanceList": true, + "url": "https://codeberg.org/CloudyyUw/twineo", + "localhost": false + } + }, + "targets": [ + "^https?:\\/{2}(www\\.|clips\\.)?twitch\\.(tv|com)\\/" + ], + "name": "Twitch", + "options": { + "enabled": false, + "redirectType": "main_frame", + "unsupportedUrls": "bypass", + "frontend": "safetwitch", + "instance": "public", + "redirectOnlyInIncognito": false + }, + "imageType": "svg", + "embeddable": true, + "url": "https://twitch.tv" + }, + "tiktok": { + "frontends": { + "proxiTok": { + "name": "ProxiTok", + "instanceList": true, + "url": "https://github.com/pablouser1/ProxiTok", + "localhost": true + }, + "offtiktok": { + "name": "Offtiktok", + "instanceList": true, + "url": "https://github.com/MarsHeer/offtiktok", + "localhost": false + } + }, + "targets": [ + "^https?:\\/{2}(www\\.)?tiktok\\.com\\/" + ], + "name": "TikTok", + "options": { + "enabled": false, + "unsupportedUrls": "bypass", + "frontend": "proxiTok", + "instance": "public", + "redirectOnlyInIncognito": false + }, + "imageType": "svg", + "url": "https://tiktok.com" + }, + "instagram": { + "frontends": { + "kittygram": { + "name": "kittygram", + "instanceList": true, + "url": "https://codeberg.org/irelephant/kittygram", + "localhost": true + }, + "proxigram": { + "name": "Proxigram", + "instanceList": true, + "url": "https://codeberg.org/ThePenguinDev/Proxigram", + "localhost": false + } + }, + "targets": [ + "^https?:\\/{2}(www\\.)?instagram\\.com" + ], + "name": "Instagram", + "options": { + "enabled": false, + "frontend": "kittygram", + "embedFrontend": "kittygram", + "unsupportedUrls": "bypass", + "instance": "public", + "redirectOnlyInIncognito": false + }, + "imageType": "svg", + "url": "https://www.instagram.com" + }, + "imdb": { + "frontends": { + "libremdb": { + "name": "libremdb", + "instanceList": true, + "url": "https://github.com/zyachel/libremdb", + "localhost": true + } + }, + "targets": [ + "^https?:\\/{2}(www\\.|m\\.)?imdb\\.com" + ], + "name": "IMDb", + "options": { + "enabled": false, + "unsupportedUrls": "bypass", + "frontend": "libremdb", + "instance": "public", + "redirectOnlyInIncognito": false + }, + "imageType": "svg", + "url": "https://imdb.com" + }, + "bilibili": { + "frontends": { + "mikuInvidious": { + "name": "MikuInvidious", + "instanceList": true, + "url": "https://0xacab.org/johnxina/mikuinvidious" + } + }, + "targets": [ + "^https?:\\/{2}(www\\.|space\\.)?bilibili\\.com\\/", + "^https?:\\/{2}b23\\.tv\\/" + ], + "name": "Bilibili", + "options": { + "enabled": false, + "unsupportedUrls": "bypass", + "frontend": "mikuInvidious", + "redirectOnlyInIncognito": false + }, + "imageType": "svgMono", + "url": "https://bilibili.com/" + }, + "pixiv": { + "name": "Pixiv", + "frontends": { + "pixivFe": { + "name": "PixivFE", + "instanceList": true, + "url": "https://codeberg.org/VnPower/pixivfe" + }, + "liteXiv": { + "name": "LiteXiv", + "instanceList": true, + "url": "https://codeberg.org/LiteXiv/LiteXiv" + }, + "vixipy": { + "name": "Vixipy", + "instanceList": true, + "url": "https://codeberg.org/vixipy/Vixipy" + }, + "pixivViewer": { + "name": "Pixiv Viewer", + "instanceList": true, + "url": "https://github.com/asadahimeka/pixiv-viewer" + } + }, + "targets": [ + "^https?:\\/{2}(www\\.)?pixiv\\.net\\/" + ], + "options": { + "enabled": false, + "unsupportedUrls": "bypass", + "frontend": "pixivFe", + "redirectOnlyInIncognito": false + }, + "imageType": "svg", + "url": "https://www.pixiv.net" + }, + "fandom": { + "frontends": { + "breezeWiki": { + "name": "BreezeWiki", + "instanceList": true, + "url": "https://breezewiki.com" + }, + "phantom": { + "name": "Phantom", + "instanceList": true, + "url": "https://codeberg.org/phantom-org/phantom" + } + }, + "targets": [ + "^https?:\\/{2}([a-zA-Z0-9-]+\\.)?(fandom|wikia)\\.com(?=\\/wiki|\\/?$)" + ], + "name": "Fandom", + "options": { + "enabled": false, + "unsupportedUrls": "bypass", + "instance": "public", + "frontend": "breezeWiki", + "redirectOnlyInIncognito": false + }, + "imageType": "svg", + "url": "https://fandom.com" + }, + "imgur": { + "frontends": { + "rimgo": { + "name": "rimgo", + "instanceList": true, + "url": "https://codeberg.org/video-prize-ranch/rimgo", + "localhost": true, + "embeddable": true + } + }, + "targets": [ + "^https?:\\/{2}([im]\\.)?(stack\\.)?imgur\\.(com|io)\\/" + ], + "name": "Imgur", + "options": { + "enabled": false, + "redirectType": "main_frame", + "unsupportedUrls": "bypass", + "frontend": "rimgo", + "instance": "public", + "redirectOnlyInIncognito": false + }, + "imageType": "svg", + "embeddable": true, + "url": "https://imgur.com" + }, + "pinterest": { + "name": "Pinterest", + "frontends": { + "binternet": { + "name": "Binternet", + "instanceList": true, + "url": "https://github.com/Ahwxorg/Binternet", + "embeddable": true + }, + "painterest": { + "name": "Painterest", + "instanceList": true, + "url": "https://codeberg.org/thirtysix/painterest", + "embeddable": true + } + }, + "targets": [ + "^https?:\\/{2}i\\.pinimg\\.com", + "^https?:\\/{2}((?!api\\.)[a-zA-Z]+\\.)?pinterest\\.com" + ], + "options": { + "enabled": false, + "unsupportedUrls": "bypass", + "redirectType": "main_frame", + "frontend": "binternet", + "redirectOnlyInIncognito": false + }, + "imageType": "svg", + "embeddable": true, + "url": "https://pinterest.com" + }, + "soundcloud": { + "frontends": { + "tuboSoundcloud": { + "name": "Tubo", + "embeddable": false, + "instanceList": true, + "url": "https://github.com/migalmoreno/tubo" + }, + "soundcloak": { + "name": "soundcloak", + "embeddable": false, + "instanceList": true, + "url": "https://git.maid.zone/stuff/soundcloak" + } + }, + "targets": [ + "^https?:\\/{2}soundcloud\\.com" + ], + "name": "SoundCloud", + "options": { + "enabled": false, + "redirectType": "main_frame", + "frontend": "tuboSoundcloud", + "unsupportedUrls": "bypass", + "redirectOnlyInIncognito": false + }, + "imageType": "svg", + "embeddable": false, + "url": "https://soundcloud.com" + }, + "bandcamp": { + "frontends": { + "tent": { + "name": "Tent", + "instanceList": true, + "url": "https://forgejo.sny.sh/sun/Tent" + } + }, + "targets": [ + "^https?:\\/{2}(.*\\.)?bandcamp\\.com\\/", + "^https?:\\/{2}(f4|t4)\\.bcbits\\.com\\/" + ], + "name": "Bandcamp", + "options": { + "enabled": false, + "unsupportedUrls": "bypass", + "frontend": "tent", + "redirectOnlyInIncognito": false + }, + "imageType": "svg", + "url": "https://bandcamp.com" + }, + "tekstowo": { + "frontends": { + "tekstoLibre": { + "name": "TekstoLibre", + "instanceList": true, + "url": "https://github.com/Davilarek/TekstoLibre" + } + }, + "targets": [ + "^https?:\\/{2}(www\\.)?tekstowo\\.pl\\/" + ], + "name": "Tekstowo.pl", + "options": { + "enabled": false, + "unsupportedUrls": "bypass", + "frontend": "tekstoLibre", + "redirectOnlyInIncognito": false + }, + "imageType": "svg", + "url": "https://www.tekstowo.pl" + }, + "genius": { + "frontends": { + "dumb": { + "name": "Dumb", + "instanceList": true, + "url": "https://github.com/rramiachraf/dumb", + "localhost": true + }, + "intellectual": { + "name": "Intellectual", + "instanceList": true, + "url": "https://github.com/Insprill/intellectual", + "localhost": false + } + }, + "targets": [ + "^https?:\\/{2}(www\\.)?genius\\.com\\/" + ], + "name": "Genius", + "options": { + "enabled": false, + "unsupportedUrls": "bypass", + "frontend": "dumb", + "instance": "public", + "redirectOnlyInIncognito": false + }, + "imageType": "svg", + "url": "https://genius.com" + }, + "medium": { + "frontends": { + "scribe": { + "name": "Scribe", + "instanceList": true, + "url": "https://sr.ht/~edwardloveall/Scribe" + }, + "libMedium": { + "name": "LibMedium", + "instanceList": true, + "url": "https://github.com/realaravinth/libmedium" + }, + "small": { + "name": "Small", + "instanceList": true, + "url": "https://git.private.coffee/PrivateCoffee/small" + }, + "freedium": { + "name": "Freedium", + "instanceList": true, + "url": "https://codeberg.org/Freedium-cfd" + } + }, + "targets": [ + "^https:\\/{2}([a-zA-Z0-9-]+\\.)?medium\\.com", + "^https?:\\/{2}towardsdatascience\\.com\\/", + "^https?:\\/{2}uxdesign\\.cc\\/", + "^https?:\\/{2}uxplanet\\.org\\/", + "^https?:\\/{2}betterprogramming\\.pub\\/", + "^https?:\\/{2}aninjusticemag\\.com\\/", + "^https?:\\/{2}betterhumans\\.pub\\/", + "^https?:\\/{2}psiloveyou\\.xyz\\/", + "^https?:\\/{2}entrepreneurshandbook\\.co\\/", + "^https?:\\/{2}blog\\.coinbase\\.com\\/", + "^https?:\\/{2}levelup\\.gitconnected\\.com\\/", + "^https?:\\/{2}javascript\\.plainenglish\\.io\\/", + "^https?:\\/{2}blog\\.bitsrc\\.io\\/", + "^https?:\\/{2}itnext\\.io\\/", + "^https?:\\/{2}codeburst\\.io\\/", + "^https?:\\/{2}infosecwriteups\\.com\\/", + "^https?:\\/{2}blog\\.devgenius\\.io\\/", + "^https?:\\/{2}writingcooperative\\.com\\/", + "^https?:\\/{2}proandroiddev\\.com\\/" + ], + "name": "Medium", + "options": { + "frontend": "scribe", + "enabled": false, + "unsupportedUrls": "bypass", + "redirectOnlyInIncognito": false + }, + "imageType": "svg", + "url": "https://medium.com" + }, + "quora": { + "frontends": { + "quetre": { + "name": "Quetre", + "instanceList": true, + "url": "https://github.com/zyachel/quetre", + "localhost": true + } + }, + "targets": [ + "^https?:\\/{2}([a-zA-Z0-9-]+\\.)*quora\\.com\\/" + ], + "name": "Quora", + "options": { + "enabled": false, + "unsupportedUrls": "bypass", + "frontend": "quetre", + "instance": "public", + "redirectOnlyInIncognito": false + }, + "imageType": "svg", + "url": "https://quora.com" + }, + "github": { + "frontends": { + "gothub": { + "name": "Gothub", + "instanceList": true, + "url": "https://codeberg.org/gothub/gothub" + } + }, + "targets": [ + "^https?:\\/{2}github\\.com\\/", + "^https?:\\/{2}gist\\.github\\.com\\/[^\\/]+\\/[^\\/]+\\/?", + "^https?:\\/{2}raw\\.githubusercontent\\.com\\/[^\\/]+\\/[^\\/]+\\/?" + ], + "name": "GitHub", + "options": { + "enabled": false, + "unsupportedUrls": "bypass", + "frontend": "gothub", + "redirectOnlyInIncognito": false + }, + "imageType": "svgMono", + "url": "https://github.com" + }, + "gitlab": { + "frontends": { + "laboratory": { + "name": "Laboratory", + "instanceList": true, + "url": "https://git.vitali64.duckdns.org/utils/laboratory.git/about/" + } + }, + "targets": [ + "^https?:\\/{2}gitlab\\.com\\/", + "^https?:\\/{2}gitlab\\.freedesktop\\.com\\/", + "^https?:\\/{2}gitlab\\.archlinux\\.com\\/" + ], + "name": "GitLab", + "options": { + "enabled": false, + "unsupportedUrls": "bypass", + "frontend": "laboratory", + "redirectOnlyInIncognito": false + }, + "imageType": "svg", + "url": "https://gitlab.com/" + }, + "stackOverflow": { + "frontends": { + "anonymousOverflow": { + "name": "AnonymousOverflow", + "instanceList": true, + "url": "https://github.com/httpjamesm/AnonymousOverflow", + "localhost": true + } + }, + "targets": [ + "^https?:\\/{2}(www\\.)?([a-zA-Z]+\\.)?stackoverflow\\.com\\/", + "^https?:\\/{2}((?!(api|data|blog)\\.)[a-zA-Z0-9-]+\\.(meta\\.)?)?stackexchange\\.com\\/", + "^https?:\\/{2}(www\\.)?([a-zA-Z]+\\.)?(askubuntu\\.com|mathoverflow\\.net|serverfault\\.com|stackapps\\.com|superuser\\.com)\\/" + ], + "name": "Stack Overflow", + "options": { + "enabled": false, + "unsupportedUrls": "bypass", + "frontend": "anonymousOverflow", + "instance": "public", + "redirectOnlyInIncognito": false + }, + "imageType": "svgMono", + "url": "https://stackoverflow.com/" + }, + "reuters": { + "frontends": { + "neuters": { + "name": "Neuters", + "instanceList": true, + "url": "https://github.com/HookedBehemoth/neuters" + } + }, + "targets": [ + "^https?:\\/{2}(www\\.)?reuters\\.com\\/" + ], + "name": "Reuters", + "options": { + "enabled": false, + "unsupportedUrls": "bypass", + "frontend": "neuters", + "redirectOnlyInIncognito": false + }, + "imageType": "svg", + "url": "https://reuters.com" + }, + "snopes": { + "frontends": { + "suds": { + "name": "Suds", + "instanceList": true, + "url": "https://git.vern.cc/cobra/Suds" + } + }, + "targets": [ + "^https?:\\/{2}(www\\.)?snopes\\.com\\/" + ], + "name": "Snopes", + "options": { + "enabled": false, + "unsupportedUrls": "bypass", + "frontend": "suds", + "redirectOnlyInIncognito": false + }, + "imageType": "svg", + "url": "https://www.snopes.com" + }, + "ifunny": { + "frontends": { + "unfunny": { + "name": "UNfunny", + "instanceList": true, + "url": "https://git.vern.cc/cobra/UNfunny" + } + }, + "targets": [ + "^https?:\\/{2}(www\\.)?ifunny\\.co\\/" + ], + "name": "iFunny", + "options": { + "enabled": false, + "unsupportedUrls": "bypass", + "frontend": "unfunny", + "redirectOnlyInIncognito": false + }, + "imageType": "svg", + "url": "https://ifunny.co" + }, + "tenor": { + "frontends": { + "soprano": { + "name": "Soprano", + "instanceList": true, + "url": "https://git.vern.cc/cobra/Soprano" + } + }, + "targets": [ + "^https?:\\/{2}(www\\.)?tenor\\.com\\/" + ], + "name": "Tenor", + "options": { + "enabled": false, + "unsupportedUrls": "bypass", + "frontend": "soprano", + "redirectOnlyInIncognito": false + }, + "imageType": "svg", + "url": "https://tenor.com" + }, + "knowyourmeme": { + "frontends": { + "meme": { + "name": "MeMe", + "instanceList": true, + "url": "https://git.vern.cc/cobra/MeMe" + } + }, + "targets": [ + "^https?:\\/{2}(www\\.)?knowyourmeme\\.com\\/" + ], + "name": "KnowYourMeme", + "options": { + "enabled": false, + "unsupportedUrls": "bypass", + "frontend": "meme", + "redirectOnlyInIncognito": false + }, + "imageType": "svg", + "url": "https://knowyourmeme.com" + }, + "urbanDictionary": { + "frontends": { + "ruralDictionary": { + "name": "Rural Dictionary", + "instanceList": true, + "url": "https://codeberg.org/cobra/rural-dict" + } + }, + "targets": [ + "^https?:\\/{2}(www\\.)?urbandictionary\\.com\\/" + ], + "name": "Urban Dictionary", + "options": { + "enabled": false, + "unsupportedUrls": "bypass", + "frontend": "ruralDictionary", + "redirectOnlyInIncognito": false + }, + "imageType": "svg", + "url": "https://urbandictionary.com" + }, + "goodreads": { + "frontends": { + "biblioReads": { + "name": "BiblioReads", + "instanceList": true, + "url": "https://github.com/nesaku/BiblioReads", + "localhost": true + } + }, + "targets": [ + "^https?:\\/{2}(www\\.)?goodreads\\.com\\/" + ], + "name": "Goodreads", + "options": { + "enabled": false, + "unsupportedUrls": "bypass", + "frontend": "biblioReads", + "instance": "public", + "redirectOnlyInIncognito": false + }, + "imageType": "svgMono", + "url": "https://goodreads.com/" + }, + "wolframAlpha": { + "frontends": { + "wolfreeAlpha": { + "name": "WolfreeAlpha", + "instanceList": true, + "url": "https://git.disroot.org/wolfree" + } + }, + "targets": [ + "^https?:\\/{2}(www\\.)?wolframalpha\\.com\\/" + ], + "name": "Wolfram Alpha", + "options": { + "enabled": false, + "unsupportedUrls": "bypass", + "frontend": "wolfreeAlpha", + "redirectOnlyInIncognito": false + }, + "imageType": "svg", + "url": "https://www.wolframalpha.com" + }, + "instructables": { + "name": "Instructables", + "frontends": { + "structables": { + "name": "Structables", + "instanceList": true, + "url": "https://github.com/PrivateCoffee/structables" + }, + "destructables": { + "name": "Destructables", + "instanceList": true, + "url": "https://git.vern.cc/cobra/Destructables" + }, + "indestructables": { + "name": "Indestructables", + "instanceList": true, + "url": "https://indestructables.codeberg.page" + } + }, + "targets": [ + "^https?:\\/{2}(www\\.)?instructables\\.com\\/" + ], + "options": { + "enabled": false, + "unsupportedUrls": "bypass", + "frontend": "structables", + "redirectOnlyInIncognito": false + }, + "imageType": "svg", + "url": "https://www.instructables.com" + }, + "wikipedia": { + "frontends": { + "wikiless": { + "name": "Wikiless", + "instanceList": true, + "url": "https://wikiless.org" + }, + "wikimore": { + "name": "Wikimore", + "instanceList": true, + "url": "https://git.private.coffee/privatecoffee/wikimore" + } + }, + "targets": [ + "^https?:\\/{2}([a-z]+\\.)*wikipedia\\.org\\/?" + ], + "name": "Wikipedia", + "options": { + "enabled": false, + "unsupportedUrls": "bypass", + "frontend": "wikiless", + "redirectOnlyInIncognito": false + }, + "imageType": "svg", + "url": "https://wikipedia.org" + }, + "waybackMachine": { + "frontends": { + "waybackClassic": { + "name": "Wayback Classic", + "instanceList": true, + "url": "https://github.com/ticky/wayback-classic" + } + }, + "targets": [ + "^https?:\\/{2}web\\.archive\\.org\\/" + ], + "name": "Wayback Machine", + "options": { + "enabled": false, + "unsupportedUrls": "bypass", + "frontend": "waybackClassic", + "redirectOnlyInIncognito": false + }, + "imageType": "svgMono", + "url": "https://web.archive.org" + }, + "pastebin": { + "frontends": { + "pasted": { + "name": "Pasted", + "instanceList": true, + "url": "https://github.com/Dragynfruit/pasted" + } + }, + "targets": [ + "^https?:\\/{2}pastebin\\.com\\/" + ], + "name": "Pastebin", + "options": { + "enabled": false, + "unsupportedUrls": "bypass", + "frontend": "pasted", + "instance": "public", + "redirectOnlyInIncognito": false + }, + "imageType": "svgMono", + "embeddable": true, + "url": "https://pastebin.com" + }, + "search": { + "frontends": { + "searxng": { + "name": "SearXNG", + "instanceList": true, + "url": "https://github.com/searxng/searxng", + "localhost": true, + "excludeTargets": [ + 2, + 3 + ] + }, + "searx": { + "name": "SearX", + "instanceList": true, + "url": "https://searx.github.io/searx/", + "excludeTargets": [ + 2, + 3 + ] + }, + "whoogle": { + "name": "Whoogle", + "instanceList": true, + "url": "https://benbusby.com/projects/whoogle-search/", + "excludeTargets": [ + 2, + 3 + ] + }, + "librey": { + "name": "LibreY", + "instanceList": true, + "url": "https://github.com/Ahwxorg/librey/", + "excludeTargets": [ + 2, + 3 + ] + }, + "4get": { + "name": "4get", + "instanceList": true, + "url": "https://git.lolcat.ca/lolcat/4get", + "excludeTargets": [ + 2, + 3 + ] + }, + "websurfx": { + "name": "Websurfx", + "instanceList": true, + "url": "https://github.com/neon-mmd/websurfx", + "excludeTargets": [ + 2, + 3 + ] + } + }, + "targets": [ + "^https?:\\/{2}search\\.libredirect\\.invalid", + "^https?:\\/{2}libredirect\\.github\\.io\\/\\?q", + "^https?:\\/{2}(www\\.)?google\\.com", + "^https?:\\/{2}(www\\.)?bing\\.com" + ], + "name": "Search", + "options": { + "enabled": false, + "frontend": "searxng", + "unsupportedUrls": "bypass", + "redirectGoogle": false, + "instance": "public", + "redirectOnlyInIncognito": false + }, + "imageType": "svgMono", + "url": "https://search.libredirect.invalid" + }, + "translate": { + "frontends": { + "simplyTranslate": { + "name": "SimplyTranslate", + "instanceList": true, + "url": "https://codeberg.org/ManeraKai/simplytranslate", + "localhost": true + }, + "mozhi": { + "name": "Mozhi", + "instanceList": true, + "url": "https://codeberg.org/aryak/mozhi", + "localhost": false, + "imageType": "svg" + }, + "libreTranslate": { + "name": "LibreTranslate", + "instanceList": true, + "url": "https://github.com/LibreTranslate/LibreTranslate" + }, + "translite": { + "name": "Translite", + "instanceList": true, + "url": "https://codeberg.org/gospodin/translite" + } + }, + "targets": [ + "^https?:\\/{2}translate\\.google(\\.[a-z]{2,3}){1,2}\\/", + "^https?:\\/{2}translate\\.libredirect\\.invalid" + ], + "name": "Translate", + "options": { + "enabled": false, + "frontend": "simplyTranslate", + "unsupportedUrls": "bypass", + "instance": "public", + "redirectOnlyInIncognito": false + }, + "imageType": "svgMono", + "url": "https://translate.libredirect.invalid" + }, + "maps": { + "frontends": { + "osm": { + "name": "OpenStreetMap", + "instanceList": true, + "embeddable": true, + "url": "https://www.openstreetmap.org/" + } + }, + "targets": [ + "^https?:\\/{2}maps\\.libredirect\\.invalid", + "^https?:\\/{2}(www\\.)?maps\\.google(\\.[a-z]{2,3}){1,2}\\/", + "^https?:\\/{2}(www\\.)?google(\\.[a-z]{2,3}){1,2}\\/maps\\/?" + ], + "name": "Maps", + "options": { + "redirectType": "main_frame", + "enabled": false, + "frontend": "osm", + "unsupportedUrls": "bypass", + "redirectOnlyInIncognito": false + }, + "imageType": "svgMono", + "url": "https://maps.libredirect.invalid" + }, + "meet": { + "name": "Meet", + "frontends": { + "jitsi": { + "name": "Jitsi", + "instanceList": true, + "url": "https://jitsi.org" + } + }, + "targets": [ + "^https?:\\/{2}meet\\.libredirect\\.invalid\\/" + ], + "options": { + "enabled": false, + "unsupportedUrls": "bypass", + "frontend": "jitsi", + "redirectOnlyInIncognito": false + }, + "imageType": "svgMono", + "url": "https://meet.libredirect.invalid" + }, + "sendFiles": { + "frontends": { + "send": { + "name": "Send", + "instanceList": true, + "url": "https://gitlab.com/timvisee/send" + } + }, + "targets": [ + "^https?:\\/{2}send\\.libredirect\\.invalid", + "^https?:\\/{2}send\\.firefox\\.com\\/?$", + "^https?:\\/{2}sendfiles\\.online\\/?$" + ], + "name": "Send Files", + "options": { + "enabled": false, + "unsupportedUrls": "bypass", + "frontend": "send", + "redirectOnlyInIncognito": false + }, + "imageType": "svgMono", + "url": "https://send.libredirect.invalid" + }, + "textStorage": { + "frontends": { + "privateBin": { + "name": "PrivateBin", + "instanceList": true, + "url": "https://privatebin.info" + }, + "pasted": { + "name": "Pasted", + "instanceList": true, + "url": "https://github.com/Dragynfruit/pasted" + }, + "pasty": { + "name": "Pasty", + "instanceList": true, + "url": "https://github.com/lus/pasty" + } + }, + "targets": [ + "^https?:\\/{2}paste\\.libredirect\\.invalid" + ], + "name": "Paste Text", + "options": { + "enabled": false, + "unsupportedUrls": "bypass", + "frontend": "privateBin", + "redirectOnlyInIncognito": false + }, + "imageType": "svgMono", + "url": "https://paste.libredirect.invalid" + }, + "office": { + "frontends": { + "cryptPad": { + "name": "CryptPad", + "instanceList": true, + "url": "https://cryptpad.org" + } + }, + "targets": ["^https?:\\/{2}office\\.libredirect\\.invalid"], + "name": "Office", + "options": { + "enabled": false, + "unsupportedUrls": "bypass", + "frontend": "cryptPad", + "redirectOnlyInIncognito": false + }, + "imageType": "svgMono", + "url": "https://office.libredirect.invalid" + }, + "ultimateGuitar": { + "frontends": { + "freetar": { + "name": "Freetar", + "instanceList": true, + "url": "https://github.com/kmille/freetar" + }, + "ultimateTab": { + "name": "Ultimate Tab", + "instanceList": false, + "url": "https://github.com/BenoitBellegarde/UltimateTab" + } + }, + "targets": [ + "^https?:\\/{2}(tabs\\.|www\\.)?ultimate-guitar\\.com" + ], + "name": "Ultimate Guitar", + "options": { + "enabled": false, + "unsupportedUrls": "bypass", + "frontend": "freetar", + "redirectOnlyInIncognito": false + }, + "imageType": "svg", + "url": "https://www.ultimate-guitar.com" + }, + "baiduTieba": { + "frontends": { + "ratAintTieba": { + "name": "Rat Aint Tieba", + "instanceList": true, + "url": "https://0xacab.org/johnxina/rat" + } + }, + "targets": [ + "^https?:\\/{2}tieba\\.baidu\\.com" + ], + "name": "Baidu Tieba", + "options": { + "enabled": false, + "unsupportedUrls": "bypass", + "frontend": "ratAintTieba", + "redirectOnlyInIncognito": false + }, + "imageType": "svg", + "url": "https://tieba.baidu.com" + }, + "threads": { + "frontends": { + "shoelace": { + "name": "Shoelace", + "instanceList": true, + "url": "https://git.sr.ht/~nixgoat/shoelace" + } + }, + "targets": [ + "^https?:\\/{2}(www\\.)?threads\\.(net|com)" + ], + "name": "Threads", + "options": { + "enabled": false, + "unsupportedUrls": "bypass", + "frontend": "shoelace", + "redirectOnlyInIncognito": false + }, + "imageType": "svgMono", + "url": "https://threads.net" + }, + "deviantArt": { + "frontends": { + "skunkyArt": { + "name": "SkunkyArt", + "instanceList": true, + "url": "https://codeberg.org/skunky/skunkyart" + } + }, + "targets": [ + "^https?:\\/{2}(www\\.)?deviantart\\.com" + ], + "name": "DeviantArt", + "options": { + "enabled": false, + "unsupportedUrls": "bypass", + "frontend": "skunkyArt", + "redirectOnlyInIncognito": false + }, + "imageType": "svg", + "url": "https://deviantart.com" + }, + "geeksForGeeks": { + "frontends": { + "nerdsForNerds": { + "name": "NerdsforNerds", + "instanceList": true, + "url": "https://git.vern.cc/cobra/NerdsforNerds" + }, + "ducksForDucks": { + "name": "Ducks for Ducks", + "instanceList": true, + "url": "https://git.private.coffee/PrivateCoffee/ducksforducks" + } + }, + "targets": [ + "^https?:\\/{2}(www\\.)?geeksforgeeks\\.org" + ], + "name": "GeeksforGeeks", + "options": { + "enabled": false, + "unsupportedUrls": "bypass", + "frontend": "nerdsForNerds", + "redirectOnlyInIncognito": false + }, + "imageType": "svg", + "url": "https://www.geeksforgeeks.org" + }, + "coub": { + "frontends": { + "koub": { + "name": "Koub", + "instanceList": true, + "url": "https://codeberg.org/gospodin/koub" + } + }, + "targets": [ + "^https?:\\/{2}(www\\.)?coub\\.com" + ], + "name": "Coub", + "options": { + "enabled": false, + "unsupportedUrls": "bypass", + "frontend": "koub", + "redirectOnlyInIncognito": false + }, + "imageType": "svg", + "url": "https://coub.com" + }, + "chefkoch": { + "frontends": { + "gocook": { + "name": "GoCook", + "instanceList": true, + "url": "https://github.com/NoUmlautsAllowed/gocook" + } + }, + "targets": [ + "^https?:\\/{2}(www\\.)?chefkoch\\.de" + ], + "name": "Chefkoch", + "options": { + "enabled": false, + "unsupportedUrls": "bypass", + "frontend": "gocook", + "redirectOnlyInIncognito": false + }, + "imageType": "svg", + "url": "https://www.chefkoch.de" + } + } +} diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/manifest.json b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/manifest.json new file mode 100644 index 0000000..752750d --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/manifest.json @@ -0,0 +1,86 @@ +{ + "background": { + "page": "pages/background/background.html", + "persistent": true + }, + "browser_action": { + "browser_style": false, + "default_icon": { + "128": "assets/images/libredirect-128.png", + "16": "assets/images/libredirect-16.png", + "32": "assets/images/libredirect-32.png", + "48": "assets/images/libredirect-48.png", + "64": "assets/images/libredirect-64.png", + "96": "assets/images/libredirect-96.png" + }, + "default_popup": "pages/popup/index.html", + "default_title": "__MSG_extensionName__" + }, + "browser_specific_settings": { + "gecko": { + "id": "7esoorv3@alefvanoon.anonaddy.me", + "strict_min_version": "89.0" + }, + "gecko_android": { + "strict_min_version": "113.0" + } + }, + "chrome_settings_overrides": { + "search_provider": { + "encoding": "UTF-8", + "favicon_url": "https://raw.githubusercontent.com/libredirect/browser_extension/master/src/assets/images/libredirect.svg", + "is_default": false, + "keyword": "@libredirect", + "name": "__MSG_extensionName__", + "search_url": "https://search.libredirect.invalid/?q={searchTerms}" + } + }, + "commands": { + "copyRaw": { + "description": "Copies the original link. Ex: Copies the original twitter link while in the nitter website", + "suggested_key": { + "default": "Alt+Shift+C" + } + }, + "redirect": { + "description": "Redirect link. Ex: Redirects original twitter link to nitter", + "suggested_key": { + "default": "Alt+Shift+R" + } + }, + "reverse": { + "description": "Redirect to the original link. Ex: Redirects to the original twitter link while in the nitter website", + "suggested_key": { + "default": "Alt+Shift+O" + } + }, + "switchInstance": { + "description": "__MSG_switchInstance__", + "suggested_key": { + "default": "Alt+Shift+L" + } + } + }, + "default_locale": "en", + "description": "__MSG_extensionDescription__", + "icons": { + "128": "assets/images/libredirect-128.png", + "16": "assets/images/libredirect-16.png", + "32": "assets/images/libredirect-32.png", + "48": "assets/images/libredirect-48.png", + "64": "assets/images/libredirect-64.png", + "96": "assets/images/libredirect-96.png" + }, + "key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAroWDSoSRZ1scj+eJRrvnhJbrqXTKnhQuxs6+AJg16sqr0bsMdFV+MSY4i4xnK+K5WOYkBliWXgUyk/wzicoAjOnSJddrL/Md4FuWHI2NVIkrlsLOrYkygi5OLqGPajRH/w8Cdmg7KzEpXe/OnYV0/qS8li8huEdTzdeLdhfbiVl1j3DOr4OJALQ7mPeeNFHFo/oVQ+OkSezWLezA5jUGfhtzPYV6u1TXzX7lCi8E/BbDbwkvvXOMcjXCv08kjdLOY2djCA2a6zr0xAb3q8DlexAMZ8vMof7AQRFtBKhLc9n9VFoipMMdBOVQQj/eIcRILBrmkcZNnJxFKiHNJ+NcZQIDAQAB", + "manifest_version": 2, + "name": "__MSG_extensionName__", + "optional_permissions": [ "bookmarks" ], + "options_ui": { + "browser_style": false, + "open_in_tab": true, + "page": "pages/options/index.html" + }, + "permissions": [ "webRequest", "webRequestBlocking", "storage", "clipboardWrite", "contextMenus", "\u003Call_urls>" ], + "update_url": "https://raw.githubusercontent.com/libredirect/libredirect/master/src/updates/updates.xml", + "version": "3.3.0" +} diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/background/background.html b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/background/background.html new file mode 100644 index 0000000..787d419 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/background/background.html @@ -0,0 +1,7 @@ + + + + + + + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/background/background.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/background/background.js new file mode 100644 index 0000000..49bae0b --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/background/background.js @@ -0,0 +1,361 @@ +"use strict" + +import utils from "../../assets/javascripts/utils.js" +import servicesHelper from "../../assets/javascripts/services.js" + +const isChrome = browser.runtime.getBrowserInfo === undefined +window.browser = window.browser || window.chrome + +browser.runtime.onInstalled.addListener(async details => { + if (details.previousVersion != browser.runtime.getManifest().version) { + // ^Used to prevent this running when debugging with auto-reload + if (details.reason == "install") { + if (!(await utils.getOptions())) { + await servicesHelper.initDefaults() + } + } else if (details.reason == "update") { + await servicesHelper.processUpdate() + } + } +}) + +// true to redirect, false to bypass +let tabIdRedirects = {} + +// true == Always redirect, false == Never redirect, null/undefined == follow options for services +browser.webRequest.onBeforeRequest.addListener( + details => { + const old_href = details.url + const url = new URL(details.url) + if (new RegExp(/^chrome-extension:\/{2}.*\/instances\/.*.json$/).test(url.href) && details.type == "xmlhttprequest") + return null + + // if url is previously bypassed + if (tabIdRedirects[details.tabId] == false) return null + + // Bypass embeds from excepted urls + if ( + details.frameAncestors && + details.frameAncestors.length >= 1 && + servicesHelper.isException(new URL(details.frameAncestors[0].url)) + ) + return null + + if (servicesHelper.isException(url)) { + if (details.type == "main_frame") { + console.log(`Bypassing ${details.tabId} ${url}`) + tabIdRedirects[details.tabId] = false + } + return null + } + + let originUrl + let documentUrl + try { + if (details.originUrl) originUrl = new URL(details.originUrl) + else if (details.initiator) originUrl = new URL(details.initiator) + if (details.documentUrl) documentUrl = new URL(details.documentUrl) + } catch { + return null + } + + let newUrl = servicesHelper.redirect( + url, + details.type, + originUrl, + documentUrl, + details.incognito, + tabIdRedirects[details.tabId] + ) + + if ( + (newUrl && newUrl.startsWith("https://no-instance.libredirect.invalid")) || + (!newUrl && url.href.startsWith("https://no-instance.libredirect.invalid")) + ) { + if (details.type != "main_frame") return null + newUrl = newUrl ? new URL(newUrl) : url + const frontend = newUrl.searchParams.get("frontend") + const oldUrl = new URL(newUrl.searchParams.get("url")) + const params = new URLSearchParams({ + message: "no_instance", + url: oldUrl, + frontend: frontend, + }) + browser.tabs.update({ + url: browser.runtime.getURL(`/pages/messages/index.html?${params.toString()}`), + }) + return { cancel: true } + } + + if (!newUrl && url.href.match(/^https?:\/{2}(.*\.)?libredirect\.invalid.*/)) { + if (details.type != "main_frame") return null + const params = new URLSearchParams({ + message: "disabled", + url: url.href, + }) + browser.tabs.update({ + url: browser.runtime.getURL(`/pages/messages/index.html?${params.toString()}`), + }) + return { cancel: true } + } + + if (newUrl === "CANCEL") { + console.log(`Cancelling ${url}`) + return { cancel: true } + } + if (newUrl === "BYPASSTAB") { + console.log(`Bypassing ${details.tabId} ${url}`) + tabIdRedirects[details.tabId] = false + return null + } + if (newUrl) { + console.log("Redirecting", old_href, "=>", newUrl) + return { redirectUrl: newUrl } + } + return null + }, + { urls: [""] }, + ["blocking"] +) + +browser.tabs.onRemoved.addListener(tabId => { + if (tabIdRedirects[tabId] != undefined) { + delete tabIdRedirects[tabId] + console.log(`Removed tab ${tabId} from tabIdRedirects`) + } +}) + +browser.runtime.getPlatformInfo(r => { + if (r.os != "fuchsia" && r.os != "ios" && r.os != "android") { + browser.commands.onCommand.addListener(async command => { + browser.tabs.query({ active: true, currentWindow: true }, async tabs => { + const url = new URL(tabs[0].url) + switch (command) { + case "switchInstance": { + const newUrl = await servicesHelper.switchInstance(url) + if (newUrl) browser.tabs.update({ url: newUrl }) + break + } + case "copyRaw": + servicesHelper.copyRaw(url) + break + case "redirect": + browser.tabs.query({ active: true, currentWindow: true }, async tabs => { + if (tabs[0].url) { + const url = new URL(tabs[0].url) + const newUrl = servicesHelper.redirect(url, "main_frame", null, null, false, true) + if (newUrl) { + browser.tabs.update(tabs[0].id, { url: newUrl }, () => { + tabIdRedirects[tabs[0].id] = true + }) + } + } + }) + break + case "reverse": + browser.tabs.query({ active: true, currentWindow: true }, async tabs => { + if (tabs[0].url) { + const url = new URL(tabs[0].url) + const newUrl = await servicesHelper.reverse(url) + if (newUrl) { + browser.tabs.update(tabs[0].id, { url: newUrl }, () => { + tabIdRedirects[tabs[0].id] = false + }) + } + } + }) + break + } + }) + }) + + browser.contextMenus.create({ + id: "settingsTab", + title: browser.i18n.getMessage("settings"), + contexts: ["browser_action"], + }) + browser.contextMenus.create({ + id: "switchInstanceTab", + title: browser.i18n.getMessage("switchInstance"), + contexts: ["browser_action"], + }) + browser.contextMenus.create({ id: "copyReverseTab", title: "Copy Original", contexts: ["browser_action"] }) + browser.contextMenus.create({ id: "redirectTab", title: "Redirect", contexts: ["browser_action"] }) + browser.contextMenus.create({ id: "reverseTab", title: "Redirect To Original", contexts: ["browser_action"] }) + + browser.contextMenus.create({ id: "redirectLink", title: "Redirect", contexts: ["link"] }) + browser.contextMenus.create({ id: "redirectLinkInNewTab", title: "Redirect In New Tab", contexts: ["link"] }) + browser.contextMenus.create({ id: "reverseLink", title: "Redirect To Original", contexts: ["link"] }) + browser.contextMenus.create({ + id: "reverseLinkInNewTab", + title: "Redirect To Original In New Tab", + contexts: ["link"], + }) + browser.contextMenus.create({ id: "copyReverseLink", title: "Copy Original", contexts: ["link"] }) + browser.contextMenus.create({ id: "bypassLink", title: "Bypass", contexts: ["link"] }) + browser.contextMenus.create({ id: "bypassLinkInNewTab", title: "Bypass In New Tab", contexts: ["link"] }) + + if (!isChrome) { + browser.contextMenus.create({ id: "redirectBookmark", title: "Redirect", contexts: ["bookmark"] }) + browser.contextMenus.create({ + id: "redirectBookmarkInNewTab", + title: "Redirect In New Tab", + contexts: ["bookmark"], + }) + browser.contextMenus.create({ id: "reverseBookmark", title: "Redirect To Original", contexts: ["bookmark"] }) + browser.contextMenus.create({ + id: "reverseBookmarkInNewTab", + title: "Redirect To Original In New Tab", + contexts: ["bookmark"], + }) + browser.contextMenus.create({ id: "copyReverseBookmark", title: "Copy Original", contexts: ["bookmark"] }) + browser.contextMenus.create({ id: "bypassBookmark", title: "Bypass", contexts: ["bookmark"] }) + browser.contextMenus.create({ id: "bypassBookmarkInNewTab", title: "Bypass In New Tab", contexts: ["bookmark"] }) + } + + browser.contextMenus.onClicked.addListener(async info => { + switch (info.menuItemId) { + case "switchInstanceTab": { + const url = new URL(info.pageUrl) + const newUrl = await servicesHelper.switchInstance(url) + if (newUrl) browser.tabs.update({ url: newUrl }) + return + } + case "settingsTab": + browser.runtime.openOptionsPage() + return + case "copyReverseTab": + browser.tabs.query({ active: true, currentWindow: true }, async tabs => { + if (tabs[0].url) { + const url = new URL(tabs[0].url) + servicesHelper.copyRaw(url) + } + }) + return + case "reverseTab": + browser.tabs.query({ active: true, currentWindow: true }, async tabs => { + if (tabs[0].url) { + const url = new URL(tabs[0].url) + const newUrl = await servicesHelper.reverse(url) + if (newUrl) { + browser.tabs.update(tabs[0].id, { url: newUrl }, () => { + tabIdRedirects[tabs[0].id] = false + }) + } + } + }) + return + case "redirectTab": + browser.tabs.query({ active: true, currentWindow: true }, async tabs => { + if (tabs[0].url) { + const url = new URL(tabs[0].url) + const newUrl = servicesHelper.redirect(url, "main_frame", null, null, false, true) + if (newUrl) { + browser.tabs.update(tabs[0].id, { url: newUrl }, () => { + tabIdRedirects[tabs[0].id] = true + }) + } + } + }) + return + case "copyReverseLink": { + const url = new URL(info.linkUrl) + await servicesHelper.copyRaw(url) + return + } + case "redirectLink": + case "redirectLinkInNewTab": { + const url = new URL(info.linkUrl) + const newUrl = servicesHelper.redirect(url, "main_frame", null, null, false, true) + if (newUrl) { + if (info.menuItemId == "redirectLink") browser.tabs.update({ url: newUrl }) + else browser.tabs.create({ url: newUrl }) + } + return + } + case "reverseLink": + case "reverseLinkInNewTab": { + const url = new URL(info.linkUrl) + const newUrl = await servicesHelper.reverse(url) + if (newUrl) { + if (info.menuItemId == "reverseLink") { + browser.tabs.update({ url: newUrl }, tab => { + tabIdRedirects[tab.id] = false + }) + } else { + browser.tabs.create({ url: newUrl }, tab => { + tabIdRedirects[tab.id] = false + }) + } + } + return + } + case "bypassLink": + case "bypassLinkInNewTab": { + const url = new URL(info.linkUrl) + if (info.menuItemId == "bypassLink") { + browser.tabs.update({ url: url.href }, tab => { + tabIdRedirects[tab.id] = false + }) + } else { + browser.tabs.create({ url: url.href }, tab => { + tabIdRedirects[tab.id] = false + }) + } + return + } + case "copyReverseBookmark": + browser.bookmarks.get(info.bookmarkId, bookmarks => { + const url = new URL(bookmarks[0].url) + servicesHelper.copyRaw(url) + }) + return + case "redirectBookmark": + case "redirectBookmarkInNewTab": + browser.bookmarks.get(info.bookmarkId, bookmarks => { + const url = new URL(bookmarks[0].url) + const newUrl = servicesHelper.redirect(url, "main_frame", null, null, false, true) + if (newUrl) { + if (info.menuItemId == "redirectBookmark") browser.tabs.update({ url: newUrl }) + else browser.tabs.create({ url: newUrl }) + } + }) + return + case "reverseBookmark": + case "reverseBookmarkInNewTab": + browser.bookmarks.get(info.bookmarkId, async bookmarks => { + const url = new URL(bookmarks[0].url) + const newUrl = await servicesHelper.reverse(url) + if (newUrl) { + if (info.menuItemId == "reverseBookmark") { + browser.tabs.update({ url: newUrl }, tab => { + tabIdRedirects[tab.id] = false + }) + } else { + browser.tabs.create({ url: newUrl }, tab => { + tabIdRedirects[tab.id] = false + }) + } + } + }) + return + case "bypassBookmark": + case "bypassBookmarkInNewTab": + browser.bookmarks.get(info.bookmarkId, async bookmarks => { + const url = new URL(bookmarks[0].url) + if (info.menuItemId == "bypassBookmark") { + browser.tabs.update({ url: url.href }, tab => (tabIdRedirects[tab.id] = false)) + } else { + browser.tabs.create({ url: url.href }, tab => (tabIdRedirects[tab.id] = false)) + } + return + }) + } + }) + } +}) + +browser.runtime.onMessage.addListener(r => { + if (r.message == "reverse") tabIdRedirects[r.tabId] = false + else if (r.message == "redirect") tabIdRedirects[r.tabId] = true +}) diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/components/Button.svelte b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/components/Button.svelte new file mode 100644 index 0000000..6ae2ba6 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/components/Button.svelte @@ -0,0 +1,35 @@ + + + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/components/Checkbox.svelte b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/components/Checkbox.svelte new file mode 100644 index 0000000..d42a4f1 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/components/Checkbox.svelte @@ -0,0 +1,52 @@ + + + + + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/components/Input.svelte b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/components/Input.svelte new file mode 100644 index 0000000..59e584d --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/components/Input.svelte @@ -0,0 +1,46 @@ + + + + + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/components/Label.svelte b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/components/Label.svelte new file mode 100644 index 0000000..d59b943 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/components/Label.svelte @@ -0,0 +1,18 @@ + + + + + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/components/Row.svelte b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/components/Row.svelte new file mode 100644 index 0000000..09246d9 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/components/Row.svelte @@ -0,0 +1,12 @@ +
+ +
+ + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/components/Select.svelte b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/components/Select.svelte new file mode 100644 index 0000000..7829c53 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/components/Select.svelte @@ -0,0 +1,34 @@ + + + + + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/fonts/Inter-VariableFont_slnt,wght.ttf b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/fonts/Inter-VariableFont_slnt,wght.ttf new file mode 100644 index 0000000..969a990 Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/fonts/Inter-VariableFont_slnt,wght.ttf differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/fonts/Vazirmatn-VariableFont_wght.ttf b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/fonts/Vazirmatn-VariableFont_wght.ttf new file mode 100644 index 0000000..f4b97c0 Binary files /dev/null and b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/fonts/Vazirmatn-VariableFont_wght.ttf differ diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/fonts/styles.css b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/fonts/styles.css new file mode 100644 index 0000000..754543b --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/fonts/styles.css @@ -0,0 +1,13 @@ +@font-face { + font-family: "Inter"; + src: url("Inter-VariableFont_slnt,wght.ttf"); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: "Vazirmatn"; + src: url("Vazirmatn-VariableFont_wght.ttf"); + font-weight: normal; + font-style: normal; +} \ No newline at end of file diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/icons/AboutIcon.svelte b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/icons/AboutIcon.svelte new file mode 100644 index 0000000..e113dd6 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/icons/AboutIcon.svelte @@ -0,0 +1,11 @@ + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/icons/AddIcon.svelte b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/icons/AddIcon.svelte new file mode 100644 index 0000000..b828f9e --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/icons/AddIcon.svelte @@ -0,0 +1,7 @@ + + + + + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/icons/AutoPickIcon.svelte b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/icons/AutoPickIcon.svelte new file mode 100644 index 0000000..86adfa2 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/icons/AutoPickIcon.svelte @@ -0,0 +1,11 @@ + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/icons/CloseIcon.svelte b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/icons/CloseIcon.svelte new file mode 100644 index 0000000..2a4f028 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/icons/CloseIcon.svelte @@ -0,0 +1,7 @@ + + + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/icons/CopyIcon.svelte b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/icons/CopyIcon.svelte new file mode 100644 index 0000000..37c13f9 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/icons/CopyIcon.svelte @@ -0,0 +1,12 @@ + + + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/icons/ExportIcon.svelte b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/icons/ExportIcon.svelte new file mode 100644 index 0000000..d155e5c --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/icons/ExportIcon.svelte @@ -0,0 +1,12 @@ + + + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/icons/GeneralIcon.svelte b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/icons/GeneralIcon.svelte new file mode 100644 index 0000000..b942902 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/icons/GeneralIcon.svelte @@ -0,0 +1,13 @@ + + + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/icons/ImportIcon.svelte b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/icons/ImportIcon.svelte new file mode 100644 index 0000000..f64d0ff --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/icons/ImportIcon.svelte @@ -0,0 +1,12 @@ + + + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/icons/PingIcon.svelte b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/icons/PingIcon.svelte new file mode 100644 index 0000000..34c4a37 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/icons/PingIcon.svelte @@ -0,0 +1,12 @@ + + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/icons/RedirectIcon.svelte b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/icons/RedirectIcon.svelte new file mode 100644 index 0000000..9392762 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/icons/RedirectIcon.svelte @@ -0,0 +1,10 @@ + + + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/icons/RedirectToOriginalIcon.svelte b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/icons/RedirectToOriginalIcon.svelte new file mode 100644 index 0000000..aad5c48 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/icons/RedirectToOriginalIcon.svelte @@ -0,0 +1,13 @@ + + + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/icons/ResetIcon.svelte b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/icons/ResetIcon.svelte new file mode 100644 index 0000000..6daf57e --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/icons/ResetIcon.svelte @@ -0,0 +1,16 @@ + + + + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/icons/ServicesIcon.svelte b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/icons/ServicesIcon.svelte new file mode 100644 index 0000000..ec24259 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/icons/ServicesIcon.svelte @@ -0,0 +1,11 @@ + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/icons/SettingsIcon.svelte b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/icons/SettingsIcon.svelte new file mode 100644 index 0000000..0079828 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/icons/SettingsIcon.svelte @@ -0,0 +1,15 @@ + + + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/icons/SwitchInstanceIcon.svelte b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/icons/SwitchInstanceIcon.svelte new file mode 100644 index 0000000..6a1f96a --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/icons/SwitchInstanceIcon.svelte @@ -0,0 +1,15 @@ + + + diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/messages/build/bundle.css b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/messages/build/bundle.css new file mode 100644 index 0000000..9cb8443 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/messages/build/bundle.css @@ -0,0 +1,2 @@ +button.svelte-efu498{color:var(--text);border:none;text-decoration:none;cursor:pointer;font-size:16px;font-weight:bold;transition-duration:0.1s;display:inline-flex;align-items:center;margin:7.5px 0;background-color:var(--bg-secondary);border-radius:5px;padding:10px}button.svelte-efu498:hover:enabled{color:var(--active)}button.svelte-efu498:active:enabled{transform:translateY(1px)}button.svelte-efu498:disabled{cursor:not-allowed;opacity:0.5} +body{width:100vw;height:100vh;margin:0;padding:0}div.main.svelte-14zc8ex{height:100%;display:grid;grid-template-columns:800px;margin:0;padding-top:50px;justify-content:center;font-family:"Inter", sans-serif;box-sizing:border-box;font-size:16px;background-color:var(--bg-main);color:var(--text);overflow:scroll}.margin{margin-right:10px;margin-left:0}.margin_rtl{margin-right:0;margin-left:10px} diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/messages/build/bundle.js b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/messages/build/bundle.js new file mode 100644 index 0000000..39064ab --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/messages/build/bundle.js @@ -0,0 +1,2 @@ +var app=function(){"use strict";function e(){}function t(e,t){for(const n in t)e[n]=t[n];return e}function n(e){return e()}function a(){return Object.create(null)}function r(e){e.forEach(n)}function s(e){return"function"==typeof e}function c(e,t){return e!=e?t==t:e!==t||e&&"object"==typeof e||"function"==typeof e}function o(e,n,a,r){return e[1]&&r?t(a.ctx.slice(),e[1](r(n))):a.ctx}function i(e){const t={};for(const n in e)"$"!==n[0]&&(t[n]=e[n]);return t}function h(e,t){const n={};t=new Set(t);for(const a in e)t.has(a)||"$"===a[0]||(n[a]=e[a]);return n}function u(e,t){e.appendChild(t)}function p(e,t,n){e.insertBefore(t,n||null)}function l(e){e.parentNode&&e.parentNode.removeChild(e)}function m(e){return document.createElement(e)}function $(e){return document.createElementNS("http://www.w3.org/2000/svg",e)}function d(e){return document.createTextNode(e)}function f(){return d(" ")}function g(e,t,n){null==n?e.removeAttribute(t):e.getAttribute(t)!==n&&e.setAttribute(t,n)}const b=["width","height"];function w(e,t){const n=Object.getOwnPropertyDescriptors(e.__proto__);for(const a in t)null==t[a]?e.removeAttribute(a):"style"===a?e.style.cssText=t[a]:"__value"===a?e.value=e[a]=t[a]:n[a]&&n[a].set&&-1===b.indexOf(a)?e[a]=t[a]:g(e,a,t[a])}function y(e,t){for(const n in t)g(e,n,t[n])}function v(e,t,n){e.classList[n?"add":"remove"](t)}let x;function k(e){x=e}function P(){if(!x)throw new Error("Function called outside component initialization");return x}function _(e,t){const n=e.$$.callbacks[t.type];n&&n.slice().forEach((e=>e.call(this,t)))}const I=[],W=[];let C=[];const q=[],L=Promise.resolve();let T=!1;function R(e){C.push(e)}const O=new Set;let S=0;function z(){if(0!==S)return;const e=x;do{try{for(;S{M.delete(e),a&&(n&&e.d(1),a())})),e.o(t)}else a&&a()}function D(e,t){const n={},a={},r={$$scope:1};let s=e.length;for(;s--;){const c=e[s],o=t[s];if(o){for(const e in c)e in o||(a[e]=1);for(const e in o)r[e]||(n[e]=o[e],r[e]=1);e[s]=o}else for(const e in c)r[e]=1}for(const e in a)e in n||(n[e]=void 0);return n}function j(e){e&&e.c()}function Z(e,t,a,c){const{fragment:o,after_update:i}=e.$$;o&&o.m(t,a),c||R((()=>{const t=e.$$.on_mount.map(n).filter(s);e.$$.on_destroy?e.$$.on_destroy.push(...t):r(t),e.$$.on_mount=[]})),i.forEach(R)}function G(e,t){const n=e.$$;null!==n.fragment&&(!function(e){const t=[],n=[];C.forEach((a=>-1===e.indexOf(a)?t.push(a):n.push(a))),n.forEach((e=>e())),C=t}(n.after_update),r(n.on_destroy),n.fragment&&n.fragment.d(t),n.on_destroy=n.fragment=null,n.ctx=[])}function H(e,t){-1===e.$$.dirty[0]&&(I.push(e),T||(T=!0,L.then(z)),e.$$.dirty.fill(0)),e.$$.dirty[t/31|0]|=1<{const r=a.length?a[0]:n;return m.ctx&&o(m.ctx[e],m.ctx[e]=r)&&(!m.skip_bound&&m.bound[e]&&m.bound[e](r),$&&H(t,e)),n})):[],m.update(),$=!0,r(m.before_update),m.fragment=!!c&&c(m.ctx),n.target){if(n.hydrate){const e=function(e){return Array.from(e.childNodes)}(n.target);m.fragment&&m.fragment.l(e),e.forEach(l)}else m.fragment&&m.fragment.c();n.intro&&A(t.$$.fragment),Z(t,n.target,n.anchor,n.customElement),z()}k(p)}class X{$destroy(){G(this,1),this.$destroy=e}$on(t,n){if(!s(n))return e;const a=this.$$.callbacks[t]||(this.$$.callbacks[t]=[]);return a.push(n),()=>{const e=a.indexOf(n);-1!==e&&a.splice(e,1)}}$set(e){var t;this.$$set&&(t=e,0!==Object.keys(t).length)&&(this.$$.skip_bound=!0,this.$$set(e),this.$$.skip_bound=!1)}}function B(e){return e[~~(e.length*Math.random())]}function Y(e){return new Promise((async t=>{let n,a=new XMLHttpRequest;a.timeout=5e3,a.ontimeout=()=>t(5e3),a.onerror=()=>t(),a.onreadystatechange=()=>{if(2==a.readyState)if(200==a.status){let e=(new Date).getTime();a.abort(),t(e-n)}else t(5e3+a.status)},a.open("GET",`${e}?_=${(new Date).getTime()}`,!0),n=(new Date).getTime(),a.send(null)}))}function J(e){return new Promise((async t=>{let n,a=0;for(let r=0;r<3;r++)if(n=await Y(e),0!=r){if(n>=5e3)return void t(n);a+=n}a=parseInt(a/3),t(a)}))}function Q(e,t){let n=[];t>e.length&&(t=e.length);for(let a=0;a{let n;if("github"==e.fetchInstances)n="https://raw.githubusercontent.com/libredirect/instances/main/data.json";else{if("codeberg"!=e.fetchInstances)return t("disabled");n="https://codeberg.org/LibRedirect/instances/raw/branch/main/data.json"}const a=new XMLHttpRequest;a.open("GET",n,!0),a.onreadystatechange=()=>{if(200===a.status&&a.readyState==XMLHttpRequest.DONE)return t(JSON.parse(a.responseText))},a.onerror=()=>t(),a.ontimeout=()=>t(),a.send(null)}))},getBlacklist:function(e){return new Promise((t=>{let n;if("github"==e.fetchInstances)n="https://raw.githubusercontent.com/libredirect/instances/main/blacklist.json";else{if("codeberg"!=e.fetchInstances)return t("disabled");n="https://codeberg.org/LibRedirect/instances/raw/branch/main/blacklist.json"}const a=new XMLHttpRequest;a.open("GET",n,!0),a.onreadystatechange=()=>{200===a.status&&a.readyState==XMLHttpRequest.DONE&&t(JSON.parse(a.responseText))},a.onerror=()=>t(),a.ontimeout=()=>t(),a.send(null)}))},getConfig:function(){return new Promise((e=>{fetch("/config.json").then((e=>e.text())).then((t=>{e(JSON.parse(t))}))}))},getOptions:function(){return new Promise((e=>browser.storage.local.get("options",(t=>e(t.options)))))},getPingCache:function(){return new Promise((e=>browser.storage.local.get("pingCache",(t=>e(t.pingCache??{})))))},ping:J,addressToLatLng:function(e){const t=new XMLHttpRequest;if(t.open("GET",`https://nominatim.openstreetmap.org/search?q=${encodeURIComponent(e)}&format=json&limit=1`,!1),t.send(),200==t.status){const e=JSON.parse(t.responseText)[0];return e?{coordinate:`${e.lat},${e.lon}`,boundingbox:`${e.boundingbox[2]},${e.boundingbox[1]},${e.boundingbox[3]},${e.boundingbox[0]}`}:{}}},getQuery:function(e){let t="";return e.searchParams.has("q")?t=e.searchParams.get("q"):e.searchParams.has("query")&&(t=e.searchParams.has("query")),t},prefsEncoded:function(e){return new URLSearchParams(e).toString()},convertMapCentre:function(e){let[t,n,a]=[null,null,null];const r=e.pathname.match(/@(-?\d[0-9.]*),(-?\d[0-9.]*),(\d{1,2})[.z]/);return r?[,n,t,a]=r:e.searchParams.has("center")&&([t,n]=e.searchParams.get("center").split(","),a=e.searchParams.get("zoom")??"17"),{zoom:a,lon:n,lat:t}},randomInstances:Q,style:function(e,t){const n=function(e,t){const n={text:"#fff",bgMain:"#121212",bgSecondary:"#202020",active:"#fbc117",danger:"#f04141",lightGrey:"#c3c3c3"},a={text:"black",bgMain:"white",bgSecondary:"#e4e4e4",active:"#fb9817",danger:"#f04141",lightGrey:"#c3c3c3"};return"dark"==e.theme?n:"light"==e.theme?a:t.matchMedia("(prefers-color-scheme: dark)").matches?n:a}(e,t);return`--text: ${n.text};\n --bg-main: ${n.bgMain};\n --bg-secondary: ${n.bgSecondary};\n --active: ${n.active};\n --danger: ${n.danger};\n --light-grey: ${n.lightGrey};`},autoPickInstance:async function(e,t){if(t){const n=e.findIndex((e=>t.href.startsWith(e)));n>=0&&e.splice(n,1)}const n=Q(e,5),a=await Promise.all([...n.map((async e=>[e,await J(e)]))]);return a.sort(((e,t)=>e[1]-t[1])),a[0][0]}};const K=void 0===browser.runtime.getBrowserInfo;let ee,te;async function ne(){te=await V.getOptions(),ee=await V.getConfig()}function ae(e,t,n,a){let r=[];if(t)n[t]&&(r=n[t]);else for(const t in a.services[e].frontends)n[t]&&r.push(...n[t]);return r}function re(e,t,n,a,r){let s=n.services[e].targets;r&&(!("excludeTargets"in n.services[e].frontends[r])||"search"===e&&a.search.redirectGoogle||(s=s.filter((t=>!n.services[e].frontends[r].excludeTargets.includes(s.indexOf(t))))),"twitter"===e&&a.twitter.disableTwimg&&(s=s.splice(2,1)));for(const e in s){if(new RegExp(s[e]).test(t.href))return!0}return!1}function se(e,t,n,a,r,s){if("main_frame"!=t&&"sub_frame"!=t&&"image"!=t)return;let c,o;if(s||1!=te.redirectOnlyInIncognito||r){for(const i in ee.services){if(!s&&!te[i].enabled)continue;if(!s&&1==te[i].redirectOnlyInIncognito&&!r)continue;if(o=te[i].frontend,ee.services[i].frontends[o].desktopApp&&"main_frame"!=t&&"main_frame"!=te[i].redirectType&&(o=te[i].embedFrontend),!re(i,e,ee,te,o)){o=null;continue}if("main_frame"!=t&&a&&"sub_frame"==te[i].redirectType&&re(i,a,ee,te,o))return;if(ee.services[i].embeddable&&t!=te[i].redirectType&&"both"!=te[i].redirectType)return"block"==te[i].unsupportedUrls?"CANCEL":void 0;let h=te[o];if(void 0===h)break;if(ee.services[i].frontends[o].localhost&&"localhost"==te[i].instance)c=`http://${o}.localhost:8080`;else{if(0===h.length)return`https://no-instance.libredirect.invalid?frontend=${encodeURIComponent(o)}&url=${encodeURIComponent(e.href)}`;c=V.getRandomInstance(h)}if(n&&h.includes(n.origin))return"main_frame"==t?"BYPASSTAB":null;break}if(o)return function(e,t,n,a,r){switch(n){case"hyperpipe":for(const t of[...e.searchParams.keys()])"q"!==t&&e.searchParams.delete(t);return`${a}${e.pathname}${e.search}`.replace(/\/search\?q=.*/,(e=>e.replace("?q=","/")));case"searx":case"searxng":for(const t of[...e.searchParams.keys()])"q"!==t&&e.searchParams.delete(t);return`${a}/${e.search}`;case"websurfx":case"whoogle":for(const t of[...e.searchParams.keys()])"q"!==t&&e.searchParams.delete(t);return`${a}/search${e.search}`;case"4get":{const t=e.searchParams.get("q");return null!==t?`${a}/web?s=${encodeURIComponent(t)}`:a}case"librey":for(const t in e.searchParams.keys())"q"!=t&&e.searchParams.delete(t);return`${a}/search.php${e.search}`;case"yattee":return e.searchParams.delete("si"),e.href.replace(/^https?:\/{2}/,"yattee://");case"freetube":case"freetubePwa":return e.searchParams.delete("si"),"freetube://"+e.href;case"poketube":if(e.searchParams.delete("si"),e.pathname.startsWith("/channel")){const t=/\/channel\/(.*)\/?$/.exec(e.pathname);if(t)return`${a}/channel?id=${t[1]}${e.search}`}return/\/@[a-z]+\//.exec(e.pathname)?a:`${a}${e.pathname}${e.search}`;case"small":case"libMedium":case"freedium":case"scribe":{const t=e.hostname.match(/^(link|cdn-images-\d+|.*)\.medium\.com/);if(t&&t.length>1){const n=t[1];if("link"!=n||!n.startsWith("cdn-images"))return`${a}/@${n}${e.pathname}${e.search}`}return`${a}${e.pathname}${e.search}`}case"translite":case"simplyTranslate":return`${a}/${e.search}`;case"send":case"mozhi":return a;case"libreTranslate":return`${a}/${e.search.replace("sl","source").replace("tl","target").replace("text","q")}`;case"osm":{if(t&&"earth.google.com"===t.host)return a;let n={layers:"mapnik"},r="#";const s=V.convertMapCentre(e);if(s.zoom&&s.lon&&s.lat&&(r=`#map=${s.zoom}/${s.lon}/${s.lat}`),e.pathname.includes("/embed")){const t=V.getQuery(e);let{coordinate:r,boundingbox:s}=V.addressToLatLng(t);return n.bbox=s,n.marker=r,`${a}/export/embed.html?${V.prefsEncoded(n)}`}if(e.pathname.includes("/dir")){if(e.searchParams.has("travelmode")){const t={driving:"fossgis_osrm_car",walking:"fossgis_osrm_foot",bicycling:"fossgis_osrm_bike",transit:"fossgis_osrm_car"};n.engine=t[e.searchParams.get("travelmode")]}const t=/\/dir\/([^@/]+)\/([^@/]+)\/@-?\d[0-9.]*,-?\d[0-9.]*,\d{1,2}[.z]/.exec(e.pathname),s=/\/dir\/([^@/]+)\//.exec(e.pathname);if(t){const e=V.addressToLatLng(decodeURIComponent(t[1])).coordinate??"",a=V.addressToLatLng(decodeURIComponent(t[2])).coordinate??"";n.route=`${e};${a}`}else if(s){const e=V.addressToLatLng(decodeURIComponent(s[1])).coordinate??"";n.route=`${e};`}else{const t=V.addressToLatLng(e.searchParams.get("origin")).coordinate??"",a=V.addressToLatLng(e.searchParams.get("destination")).coordinate??"";n.route=`${t};${a}`}return`${a}/directions?${V.prefsEncoded(n)}${r}`}const c=/\/place\/(.*?)\//;if(e.pathname.match(c))return`${a}/search?query=${e.pathname.match(c)[1]}${r}`;if(e.searchParams.has("ll")){const[t,n]=e.searchParams.get("ll").split(",");return`${a}/search?query=${t}%2C${n}`}if(e.searchParams.has("viewpoint")){const[t,n]=e.searchParams.get("viewpoint").split(",");return`${a}/search?query=${t}%2C${n}`}const o=V.getQuery(e);return o?`${a}/search?query="${o}${r}&${V.prefsEncoded(n)}`:`${a}/${r}&${V.prefsEncoded(n)}`}case"phantom":case"breezeWiki":{let t,n="";return e.hostname.match(/^[a-zA-Z0-9-]+\.(?:fandom|wikia)\.com/)?(t=e.hostname.match(/^[a-zA-Z0-9-]+(?=\.(?:fandom|wikia)\.com)/),t="www"!=t&&t?`/${t}`:"",n=e.pathname):(t=e.pathname.match(/(?<=wiki\/w:c:)[a-zA-Z0-9-]+(?=:)/),t?(t="/"+t+"/wiki/",n=e.pathname.match(/(?<=wiki\/w:c:[a-zA-Z0-9-]+:).+/)):t=""),e.href.search(/Special:Search\?query/)>-1?`${a}${t}${n}${e.search}`.replace(/Special:Search\?query/,"search?q").replace(/\/wiki/,""):`${a}${t}${n}${e.search}`}case"rimgo":return e.href.search(/^https?:\/{2}(?:[im]\.)?stack\./)>-1?`${a}/stack${e.pathname}${e.search}`:`${a}${e.pathname}${e.search}`;case"redlib":case"libreddit":{const t=e.hostname.match(/^(?:((?:external-)?preview|i)\.)?redd\.it/);if(!t)return`${a}${e.pathname}${e.search}`;switch(t[1]){case"preview":return`${a}/preview/pre${e.pathname}${e.search}`;case"external-preview":return`${a}/preview/external-pre${e.pathname}${e.search}`;case"i":return`${a}/img${e.pathname}`}return`${a}/comments${e.pathname}`}case"teddit":return/^(?:(?:external-)?preview|i)\.redd\.it/.test(e.hostname)?""==e.search?`${a}${e.pathname}?teddit_proxy=${e.hostname}`:`${a}${e.pathname}${e.search}&teddit_proxy=${e.hostname}`:`${a}${e.pathname}${e.search}`;case"troddit":case"eddrit":return/^(?:(?:external-)?preview|i)\.redd\.it/.test(e.hostname)?a:`${a}${e.pathname}${e.search}`;case"neuters":{const t=e.pathname;return t.startsWith("/article/")||t.startsWith("/pf/")||t.startsWith("/arc/")||t.startsWith("/resizer/")?a:`${a}${t}`}case"dumb":return e.pathname.endsWith("-lyrics")?`${a}${e.pathname}`:`${a}${e.pathname}${e.search}`;case"intellectual":return`${a}${e.pathname}${e.search}`;case"ruralDictionary":return e.pathname.includes("/define.php")||e.pathname.includes("/random.php")||"/"==e.pathname?`${a}${e.pathname}${e.search}`:a;case"anonymousOverflow":{if("stackoverflow.com"==e.hostname){const t=/^\/a\/(\d+)\/?/.exec(e.pathname);return t?`${a}/questions/${t[1]}${e.search}`:`${a}${e.pathname}${e.search}`}if("/"==e.pathname||""==e.pathname)return`${a}${e.pathname}${e.search}`;const t=e.href.match(/https?:\/{2}(?:([a-zA-Z0-9-]+)\.(meta\.)?)?stackexchange\.com\//);if(t&&t.length>1)return t[2]?`${a}/exchange/${e.hostname}${e.pathname}${e.search}`:`${a}/exchange/${t[1]}${e.pathname}${e.search}`;const n=e.hostname.match(/(?:[a-zA-Z]+\.)?(?:askubuntu\.com|mathoverflow\.net|serverfault\.com|stackapps\.com|superuser\.com|stackoverflow\.com)/);return n?`${a}/exchange/${n[0]}${e.pathname}${e.search}`:`${a}${e.pathname}${e.search}`}case"biblioReads":return`${a}${e.pathname}${e.search}`;case"wikimore":{let t=e.host.split(".");return"wikipedia"!=t[0]&&"www"!=t[0]?`${a}/wiki/${e.hostname.split(".")[0]}${e.pathname}${e.search}${e.hash}`:`${a}${e.pathname}${e.search}${e.hash}`}case"wikiless":{let t=e.host.split(".");return"wikipedia"!=t[0]&&"www"!=t[0]&&("m"==t[0]?e.searchParams.append("mobileaction","toggle_view_mobile"):e.searchParams.append("lang",t[0]),"m"==t[1]&&e.searchParams.append("mobileaction","toggle_view_mobile")),`${a}${e.pathname}${e.search}${e.hash}`}case"offtiktok":case"proxiTok":return e.pathname.startsWith("/email")?a:`${a}${e.pathname}${e.search}`;case"waybackClassic":{const t=/^\/\web\/(?:[0-9]+)?\*\/(.*)/.exec(e.pathname);if(t){const e=t[1];return`${a}/cgi-bin/history.cgi?utf8=✓&q=${encodeURIComponent(e)}`}const n=/(^\/\web\/([0-9]+)\/.*)/.exec(e.pathname);if(n){let e=n[1];return e=e.replace(n[2],n[2]+"if_"),`https://web.archive.org${e}`}return}case"gothub":return"gist.github.com"==e.hostname?`${a}/gist${e.pathname}${e.search}`:"raw.githubusercontent.com"==e.hostname?`${a}/raw${e.pathname}${e.search}`:`${a}${e.pathname}${e.search}`;case"mikuInvidious":if("bilibili.com"==e.hostname||"www.bilibili.com"==e.hostname||"b23.tv"==e.hostname)return`${a}${e.pathname}${e.search}`;if("space.bilibili.com"==e.hostname)return`${a}/space${e.pathname}${e.search}`;case"tent":if("bandcamp.com"==e.hostname&&"/search"==e.pathname){const t=e.searchParams.get("q");return`${a}/search.php?query=${encodeURIComponent(t)}`}if(e.hostname.endsWith("bandcamp.com")){const t=/^(.*)\.bandcamp\.com/.exec(e.hostname)[1];if("/"==e.pathname||"/music"==e.pathname)return`${a}/artist.php?name=${t}`;{const n=/^\/(.*)\/(.*)/.exec(e.pathname);if(n)return`${a}/release.php?artist=${t}&type=${n[1]}&name=${n[2]}`}}if("f4.bcbits.com"==e.hostname)return`${a}/image.php?file=${/\/img\/(.*)/.exec(e.pathname)[1]}`;if("t4.bcbits.com"==e.hostname){const t=/\/stream\/(.*)\/(.*)\/(.*)/.exec(e.pathname);if(t){const n=t[1],r=t[2],s=t[3],c=e.searchParams.get("token");return`${a}/audio.php/?directory=${n}&format=${r}&file=${s}&token=${encodeURIComponent(c)}`}}case"binternet":return"i.pinimg.com"==e.hostname?`${a}/image_proxy.php?url=${encodeURIComponent(e.href)}`:`${a}${e.pathname}${e.search}`;case"painterest":if("i.pinimg.com"==e.hostname)return`${a}/_/proxy?url=${encodeURIComponent(e.href)}`;const n=/^\/pin\/[^\/]+/.exec(e.pathname);return n?`${a}${n[0]}`:`${a}${e.pathname}${e.search}`;case"laboratory":{let t=e.pathname;return"/"==t&&(t=""),`${a}/${e.hostname}${t}${e.search}`}case"quetre":{const t=/([a-z]+)\.quora\.com/.exec(e.hostname);if(t){const n=t[1];return e.searchParams.append("lang",n),`${a}${e.pathname}${e.search}`}return`${a}${e.pathname}${e.search}`}case"pixivViewer":case"liteXiv":case"pixivFe":{const t=/\/[a-z]{1,3}\/(.*)/.exec(e.pathname);return t?`${a}/${t[1]}${e.search}`:`${a}${e.pathname}${e.search}`}case"vixipy":{const t=/\/[a-z]{1,3}\/(.*)/.exec(e.pathname);if(t){let n=t[1];return n.startsWith("tags/")&&(n=n.replace(/tags/,"tag")),`${a}/${n}${e.search}`}return`${a}${e.pathname}${e.search}`}case"invidious":return e.searchParams.delete("si"),"sub_frame"==r&&e.searchParams.append("autoplay","0"),"youtu.be"==e.hostname||e.hostname.endsWith("youtube.com")&&e.pathname.startsWith("/live")?`${a}/watch?v=${e.pathname.substring(e.pathname.lastIndexOf("/")+1)}&${e.search.substring(1)}`:e.hostname.endsWith("youtube.com")&&e.pathname.startsWith("/redirect?")?e.href:`${a}${e.pathname}${e.search}`;case"freetubeMusic":return"youtu.be"==e.hostname||e.hostname.endsWith("youtube.com")&&e.pathname.startsWith("/live")?`freetube://youtube.com/watch?v=${e.pathname.substring(e.pathname.lastIndexOf("/")+1)}`:"freetube://"+e.href;case"invidiousMusic":return"youtu.be"==e.hostname||e.hostname.endsWith("youtube.com")&&e.pathname.startsWith("/live")?`${a}/watch?v=${e.pathname.substring(e.pathname.lastIndexOf("/")+1)}`:`${a}${e.pathname}${e.search}`;case"materialious":if(e.searchParams.delete("si"),"youtu.be"==e.hostname||e.hostname.endsWith("youtube.com")&&e.pathname.startsWith("/live"))return`${a}/watch/${e.pathname.substring(e.pathname.lastIndexOf("/")+1)}${e.search.replace("?","&")}`;if(e.hostname.endsWith("youtube.com")){if(e.pathname.startsWith("/watch")){if(e.searchParams.has("v")){const t=e.searchParams.get("v");return e.searchParams.delete("v"),`${a}/watch/${t}${e.search.replace("?","&")}`}return`${a}/watch/${e.search.replace("?","&")}`}if(e.pathname.startsWith("/results")){if(e.searchParams.has("search_query")){const t=e.searchParams.get("search_query");return e.searchParams.delete("search_query"),`${a}/search/${t}${e.search.replace("?","&")}`}return`${a}/search/${e.search.replace("?","&")}`}if(e.pathname.startsWith("/redirect?"))return e.href}return`${a}${e.pathname}${e.search}`;case"libremdb":return/\/((?:name|title)\/\w+)\/?$/.exec(e.pathname)?`${a}${e.pathname}${e.search}`:a;case"tuboYoutube":return e.searchParams.delete("si"),e.pathname.startsWith("/channel")?`${a}/channel?url=${encodeURIComponent(e.href)}`:e.pathname.startsWith("/watch")?`${a}/stream?url=${encodeURIComponent(e.href)}`:a;case"tuboSoundcloud":return"/"==e.pathname?`${a}?kiosk?serviceId=1`:e.pathname.match(/^\/[^\/]+(\/$|$)/)?`${a}/channel?url=${encodeURIComponent(e.href)}`:e.pathname.match(/^\/[^\/]+\/[^\/]+/)?`${a}/stream?url=${encodeURIComponent(e.href)}`:a;case"twineo":case"safetwitch":return e.hostname.startsWith("clips.")?`${a}/clip${e.pathname}${e.search}`:`${a}${e.pathname}${e.search}`;case"tekstoLibre":return`${a}/?${e.pathname.slice(1)}`;case"skyview":return"/"==e.pathname?a:`${a}?url=${encodeURIComponent(e.href)}`;case"nitter":{let t=new URLSearchParams(e.search);if(t.delete("ref_src"),t.delete("ref_url"),t.delete("s"),t.delete("t"),t=t.toString(),""!==t&&(t=`?${t}`),"pbs"===e.host.split(".")[0]||"video"===e.host.split(".")[0])try{const[,n,r,s]=t.match(/(.*)\?format=(.*)&(.*)/),c=encodeURIComponent(`${n}.${r}?${s}`);return`${a}/pic${e.pathname}${c}`}catch{return`${a}/pic${e.pathname}${t}`}return e.pathname.split("/").includes("tweets")?`${a}${e.pathname.replace("/tweets","")}${t}`:"t.co"==e.host?`${a}/t.co${e.pathname}`:`${a}${e.pathname}${t}#m`}case"priviblur":{if("www.tumblr.com"==e.hostname)return`${a}${e.pathname}${e.search}`;if(e.hostname.startsWith("assets"))return`${a}/tblr/assets${e.pathname}${e.search}`;if(e.hostname.startsWith("static"))return`${a}/tblr/static${e.pathname}${e.search}`;const t=/^([0-9]+)\.media\.tumblr\.com/.exec(e.hostname);if(t)return`${a}/tblr/media/${t[1]}${e.pathname}${e.search}`;const n=/^(?:www\.)?([a-z\d-]+)\.tumblr\.com/.exec(e.hostname);if(n){const t=n[1];return e.pathname.startsWith("/post")?`${a}/${t}${e.pathname.slice(5)}${e.search}`:`${a}/${t}${e.pathname}${e.search}`}return`${a}${e.pathname}${e.search}`}case"ultimateTab":case"freetar":if(e.pathname.startsWith("/search.php"))return e.searchParams.set("search_term",e.searchParams.get("value")),e.searchParams.delete("value"),e.searchParams.delete("search_type"),`${a}/search${e.search}`;if(e.pathname.startsWith("/artist"))return;return`${a}${e.pathname}${e.search}`;case"ratAintTieba":return e.searchParams.delete("ie"),`${a}${e.pathname}${e.search}`;case"shoelace":{const t=/^\/(?:(?:(?:[^\/])?\/post)|t)\/([^\/])/.exec(e.pathname);return t?`${a}/t/${t[1]}${e.search}`:`${a}${e.pathname}${e.search}`}case"skunkyArt":{if(e.pathname.startsWith("/search"))return`${a}${e.pathname}${e.search}&type=all`;const t=/^\/(.*?)\/art\/(.*)\/?/.exec(e.pathname);if(t)return`${a}/post/${t[1]}/${t[2]}${e.search}`;const n=/^\/([^\/]+)$/.exec(e.pathname);if(n)return`${a}/group_user?q=${n[1]}&type=about`;const r=/^\/(.*?)\/gallery(\/$|$)$/.exec(e.pathname);return r?`${a}/group_user?q=${r[1]}&type=gallery`:`${a}${e.pathname}${e.search}`}case"ytifyMusic":case"ytify":{if(e.pathname.startsWith("/watch"))return`${a}/?s=${encodeURIComponent(e.searchParams.get("v"))}`;const t=/\/channel\/([^\/]+)/.exec(e.pathname);return t?`${a}/list?channel=${t[1]}`:e.pathname.startsWith("/playlist")?`${a}/list?playlists=${encodeURIComponent(e.searchParams.get("list"))}`:`${a}${e.pathname}${e.search}`}case"koub":return e.pathname.startsWith("/view/")||e.pathname.startsWith("/stories/")?`${a}${e.pathname}${e.search}`:/^\/([^\/]+)\/?$/.exec(e.pathname)?`${a}/account${e.pathname}${e.search}`:a;case"duckDuckGoAiChat":return"https://duckduckgo.com/?q=DuckDuckGo+AI+Chat&ia=chat&duckai=1";case"protonLumo":return"https://lumo.proton.me/";case"soundcloak":if(e.pathname.startsWith("/feed")||e.pathname.startsWith("/stream"))return a;if(e.pathname.startsWith("/search")){if(!e.search)return a;let t="";return e.pathname.startsWith("/search/sounds")?t="tracks":e.pathname.startsWith("/search/people")?t="users":(e.pathname.startsWith("/search/albums")||e.pathname.startsWith("/search/sets"))&&(t="playlists"),t?(t="&type="+t,`${a}/search${e.search}${t}`):a}return"on.soundcloud.com"==e.host?`${a}/on${e.pathname}`:`${a}${e.pathname}${e.search}`;case"piped":case"pipedMaterial":case"cloudtube":case"lightTube":case"viewtube":e.searchParams.delete("si");default:return`${a}${e.pathname}${e.search}`}}(e,n,o,c,t)}}async function ce(e){let t=await V.getOptions(),n=await V.getConfig();for(const a in n.services){let r=t[a].frontend;if(null!=t[r]&&(!(t[r].findIndex((t=>e.href.startsWith(t)))<0)||e.href.startsWith(`http://${r}.localhost:8080`)))switch(a){case"youtube":case"imdb":case"imgur":case"tiktok":case"reddit":case"imdb":case"snopes":case"urbanDictionary":case"quora":case"twitter":case"medium":case"pinterest":return`${n.services[a].url}${e.pathname}${e.search}`;case"fandom":{let t=e.pathname.match(/^\/([a-zA-Z0-9-]+)\/wiki\/(.*)/);return t?`https://${t[1]}.fandom.com/wiki/${t[2]}`:void 0}case"wikipedia":{const t=e.searchParams.get("lang");return null!=t?`https://${t}.wikipedia.org${e.pathname}${e.search}${e.hash}`:`https://wikipedia.org${e.pathname}${e.search}${e.hash}`}case"stackOverflow":if(e.pathname.startsWith("/questions/"))return`https://stackoverflow.com${e.pathname}${e.search}`;if(e.pathname.startsWith("/exchange/")){const t=/\/exchange\/(.*?)(\/.*)/.exec(e.pathname);if(t)return t[1].includes(".")?`https://${t[1]}${t[2]}`:`https://${t[1]}.stackexchange.com${t[2]}`}return;case"tekstowo":return`${n.services[a].url}/${e.search.slice(1)}`;case"goodreads":return`https://goodreads.com${e.pathname}${e.search}`;case"soundcloud":if("soundcloak"==r){if(e.pathname.includes("/_/"))return`${n.services[a].url}${e.pathname.split("/_/")[0]}`;if("/search"==e.pathname){let t=e.searchParams.get("type");switch(t){case"playlists":t="sets";break;case"tracks":t="sounds";break;case"users":t="people";break;default:t=""}return e.searchParams.delete("type"),t?`${n.services[a].url}/search/${t}?${e.searchParams.toString()}`:`${n.services[a].url}/search?${e.searchParams.toString()}`}return`${n.services[a].url}${e.pathname}`}default:return}}}window.browser=window.browser||window.chrome,ne(),browser.storage.onChanged.addListener(ne);const oe={materialious:["https://app.materialio.us"],viewtube:["https://viewtube.io"],piped:["https://pipedapi-libre.kavin.rocks"],pipedMaterial:["https://piped-material.xn--17b.net"],cloudtube:["https://tube.cadence.moe"],lightTube:["https://tube.kuylar.dev"],poketube:["https://poketube.fun"],proxiTok:["https://proxitok.pabloferreiro.es"],offtiktok:["https://www.offtiktok.com"],redlib:["https://safereddit.com"],eddrit:["https://eddrit.com"],troddit:["https://www.troddit.com"],scribe:["https://scribe.rip"],libMedium:["https://md.vern.cc"],small:["https://small.bloat.cat"],freedium:["https://freedium.cfd"],quetre:["https://quetre.iket.me"],libremdb:["https://libremdb.iket.me"],simplyTranslate:["https://simplytranslate.org"],translite:["https://tl.bloat.cat"],mozhi:["https://mozhi.aryak.me"],searxng:["https://nyc1.sx.ggtyler.dev"],"4get":["https://4get.ca"],websurfx:["https://alamin655-spacex.hf.space"],rimgo:["https://rimgo.vern.cc"],hyperpipe:["https://hyperpipe.surge.sh"],osm:["https://www.openstreetmap.org"],breezeWiki:["https://breezewiki.com"],neuters:["https://neuters.de"],dumb:["https://dm.vern.cc"],intellectual:["https://intellectual.insprill.net"],ruralDictionary:["https://rd.vern.cc"],anonymousOverflow:["https://code.whatever.social"],suds:["https://sd.vern.cc"],unfunny:["https://uf.vern.cc"],soprano:["https://sp.vern.cc"],meme:["https://mm.vern.cc"],waybackClassic:["https://wayback-classic.net"],tent:["https://tent.sny.sh"],laboratory:["https://lab.vern.cc"],binternet:["https://bn.bloat.cat"],painterest:["https://pt.bloat.cat"],pixivFe:["https://pixiv.perennialte.ch"],liteXiv:["https://litexiv.465321.best","https://litexiv.bloat.cat"],pixivViewer:["https://pixiv.pictures"],vixipy:["https://vx.maid.zone"],indestructables:["https://indestructables.private.coffee"],destructables:["https://ds.vern.cc"],structables:["https://structables.private.coffee"],safetwitch:["https://safetwitch.drgns.space"],twineo:["https://twineo.exozy.me"],kittygram:["https://kittygram.irelephant.net/"],proxigram:["https://ig.opnxng.com"],tuboYoutube:["https://tubo.media"],tuboSoundcloud:["https://tubo.media"],tekstoLibre:["https://davilarek.github.io/TekstoLibre"],skyview:["https://skyview.social"],skylib:["https://skylib.coffee"],priviblur:["https://pb.bloat.cat"],nitter:["https://nitter.privacydev.net"],pasted:["https://pasted.drakeerv.com"],pasty:["https://pasty.lus.pm"],freetar:["https://freetar.de"],ultimateTab:["https://ultimate-tab.com"],ratAintTieba:["https://rat.fis.land"],shoelace:["https://shoelace.mint.lgbt"],skunkyArt:["https://skunky.bloat.cat"],ytify:["https://ytify.pp.ua"],ytifyMusic:["https://ytify.pp.ua"],nerdsForNerds:["https://nn.vern.cc"],ducksForDucks:["https://ducksforducks.private.coffee"],koub:["https://koub.clovius.club"],soundcloak:["https://soundcloak.fly.dev"],gocook:["https://cook.adminforge.de"],wikimore:["https://wikimore.private.coffee"],libreTranslate:["https://libretranslate.com"],cryptPad:["https://cryptpad.org"],phantom:["https://phantom.kuuro.net"]};async function ie(){let e=await V.getConfig(),t={};for(const n in e.services){t[n]={};for(const a in e.services[n].options)t[n][a]=e.services[n].options[a];for(const a in e.services[n].frontends)e.services[n].frontends[a].instanceList&&(t[a]=[])}return t.exceptions={url:[],regex:[]},t.theme="detect",t.popupServices=["youtube","tiktok","imgur","reddit","quora","translate","maps"],t.fetchInstances="github",t.redirectOnlyInIncognito=!1,t={...t,...oe},t}var he={redirect:se,redirectAsync:async function(e,t,n,a,r,s){return await ne(),se(e,t,n,a,r,s)},computeServiceFrontend:async function(e){const t=await V.getConfig(),n=await V.getOptions();for(const a in t.services){if(re(a,e,t,n))return{service:a,frontend:null};for(const r in t.services[a].frontends){const s=ae(a,r,n,t).findIndex((t=>e.href.startsWith(t)));if(s>=0)return{service:a,frontend:r}}}},reverse:ce,initDefaults:function(){return new Promise((e=>{browser.storage.local.clear((async()=>{te=await ie(),browser.storage.local.set({options:te},(()=>e()))}))}))},processUpdate:function(e){return new Promise((async t=>{const n=await V.getConfig();let a=e??await V.getOptions();const r=await ie();for(const e in a)if(e in r){if("object"==typeof e&&null!==e)for(const t in a[e])t in r[e]||delete a[e][t]}else delete a[e];a.popupServices=a.popupServices.filter((e=>e in n.services));for(const[e,t]of Object.entries(r))e in a||(a[e]=t);for(const[e,t]of Object.entries(n.services)){a[e].frontend in t.frontends||(a[e]=t.options);for(const n in t.options)n in a[e]||(a[e][n]=t.options[n])}browser.storage.local.clear((()=>browser.storage.local.set({options:a},(()=>t()))))}))},copyRaw:async function(e){const t=await ce(e);if(t)if(K){var n=document.createElement("textarea");n.textContent=t,document.body.appendChild(n),n.select(),document.execCommand("copy"),n.blur(),document.body.removeChild(n)}else navigator.clipboard.writeText(t)},switchInstance:function(e,t){return new Promise((async n=>{let a=await V.getOptions(),r=await V.getConfig();if(V.protocolHost(e),t){const r=a[a[t].frontend];if(void 0!==r){const t=V.getNextInstance(e.origin,r);if(t)return n(`${t}${e.pathname}${e.search}`)}}else for(const t in r.services){let r=a[a[t].frontend];if(void 0===r)continue;const s=r.findIndex((t=>e.href.startsWith(t)));if(s<0)continue;if(r.splice(s,1),0===r.length)return n();const c=V.getNextInstance(e.origin,r);if(c)return n(`${c}${e.pathname}${e.search}`)}n()}))},isException:function(e){if(!te)return!1;if(!te.exceptions)return!1;let t=te.exceptions;if(t&&e){if(t.url)for(let n of t.url)if(n=new URL(n),n=n.href.replace(/^http:\/\//,"https://"),n==e.href)return!0;if(t.regex)for(const n of t.regex)if(new RegExp(n).test(e.href))return!0}return!1}};const ue=[];function pe(t,n=e){let a;const r=new Set;function s(e){if(c(t,e)&&(t=e,a)){const e=!ue.length;for(const e of r)e[1](),ue.push(e,t);if(e){for(let e=0;e{r.delete(i),0===r.size&&a&&(a(),a=null)}}}}const le=pe(null),me=pe(null),$e=pe("general");function de(e){let n,a,r,s;const c=e[3].default,i=function(e,t,n,a){if(e){const r=o(e,t,n,a);return e[0](r)}}(c,e,e[2],null);let h=[e[0],e[1]],u={};for(let e=0;ee.removeEventListener(t,n,a)}(n,"click",e[4]),r=!0)},p(e,[t]){i&&i.p&&(!a||4&t)&&function(e,t,n,a,r,s){if(r){const c=o(t,n,a,s);e.p(c,r)}}(i,c,e,e[2],a?function(e,t,n,a){if(e[2]&&a){const r=e[2](a(n));if(void 0===t.dirty)return r;if("object"==typeof r){const e=[],n=Math.max(t.dirty.length,r.length);for(let a=0;a32){const t=[],n=e.ctx.length/32;for(let e=0;e{a(1,n=t(t({},n),i(e))),a(0,s=h(n,r)),"$$scope"in e&&a(2,o=e.$$scope)},n=i(n),[s,n,o,c,function(t){_.call(this,e,t)}]}class ge extends X{constructor(e){super(),F(this,e,fe,de,c,{})}}function be(n){let a,r,s=[n[0],{xmlns:"http://www.w3.org/2000/svg"},{height:"20px"},{viewBox:"0 -960 960 960"},{width:"20px"},{fill:"currentColor"}],c={};for(let e=0;e{n=t(t({},n),i(e)),a(0,s=h(n,r))},[s]}class ye extends X{constructor(e){super(),F(this,e,we,be,c,{})}}function ve(t){let n;return{c(){n=m("p"),n.textContent="Loading..."},m(e,t){p(e,n,t)},p:e,i:e,o:e,d(e){e&&l(n)}}}function xe(e){let t,n,a,r;const s=[Pe,ke],c=[];return~(n=function(e){return"disabled"==e[5].get("message")?0:"no_instance"==e[5].get("message")?1:-1}(e))&&(a=c[n]=s[n](e)),{c(){t=m("div"),a&&a.c(),g(t,"class","main svelte-14zc8ex"),g(t,"dir","auto"),g(t,"style",e[2])},m(e,a){p(e,t,a),~n&&c[n].m(t,null),r=!0},p(e,n){a&&a.p(e,n),(!r||4&n)&&g(t,"style",e[2])},i(e){r||(A(a),r=!0)},o(e){N(a),r=!1},d(e){e&&l(t),~n&&c[n].d()}}}function ke(e){let t,n,a,r,s;return r=new ge({props:{disabled:e[3],$$slots:{default:[_e]},$$scope:{ctx:e}}}),r.$on("click",e[10]),{c(){t=m("div"),n=m("h1"),n.textContent="You have no instance selected for this frontend",a=f(),j(r.$$.fragment)},m(e,c){p(e,t,c),u(t,n),u(t,a),Z(r,t,null),s=!0},p(e,t){const n={};8&t&&(n.disabled=e[3]),16384&t&&(n.$$scope={dirty:t,ctx:e}),r.$set(n)},i(e){s||(A(r.$$.fragment,e),s=!0)},o(e){N(r.$$.fragment,e),s=!1},d(e){e&&l(t),G(r)}}}function Pe(e){let t,n,a,r,s;return r=new ge({props:{$$slots:{default:[Ie]},$$scope:{ctx:e}}}),r.$on("click",e[9]),{c(){t=m("div"),n=m("h1"),n.textContent="You disabled redirections for this service",a=f(),j(r.$$.fragment)},m(e,c){p(e,t,c),u(t,n),u(t,a),Z(r,t,null),s=!0},p(e,t){const n={};16384&t&&(n.$$scope={dirty:t,ctx:e}),r.$set(n)},i(e){s||(A(r.$$.fragment,e),s=!0)},o(e){N(r.$$.fragment,e),s=!1},d(e){e&&l(t),G(r)}}}function _e(t){let n,a,r,s,c=(t[4].i18n.getMessage("autoPickInstance")||"Auto Pick Instance")+"";return n=new ye({props:{class:"margin margin_"+document.body.dir}}),{c(){j(n.$$.fragment),a=f(),r=d(c)},m(e,t){Z(n,e,t),p(e,a,t),p(e,r,t),s=!0},p:e,i(e){s||(A(n.$$.fragment,e),s=!0)},o(e){N(n.$$.fragment,e),s=!1},d(e){G(n,e),e&&l(a),e&&l(r)}}}function Ie(t){let n,a=(t[4].i18n.getMessage("enable")||"Enable")+"";return{c(){n=d(a)},m(e,t){p(e,n,t)},p:e,d(e){e&&l(n)}}}function We(e){let t,n,a,s;const c=[xe,ve],o=[];function i(e,t){return e[0]&&e[1]?0:1}return t=i(e),n=o[t]=c[t](e),{c(){n.c(),a=d("")},m(e,n){o[t].m(e,n),p(e,a,n),s=!0},p(e,[s]){let h=t;t=i(e),t===h?o[t].p(e,s):(U={r:0,c:[],p:U},N(o[h],1,1,(()=>{o[h]=null})),U.r||r(U.c),U=U.p,n=o[t],n?n.p(e,s):(n=o[t]=c[t](e),n.c()),A(n,1),n.m(a.parentNode,a))},i(e){s||(A(n),s=!0)},o(e){N(n),s=!1},d(e){o[t].d(e),e&&l(a)}}}function Ce(e,t,n){const a=window.browser||window.chrome;let r;const s=le.subscribe((e=>{e&&(n(0,r=e),a.storage.local.set({options:e}))}));let c;const o=me.subscribe((e=>n(1,c=e)));var i;let h;i=()=>{s(),o()},P().$$.on_destroy.push(i),function(e){P().$$.on_mount.push(e)}((async()=>{let e=await V.getOptions();e||(await he.initDefaults(),e=await V.getOptions()),le.set(e),me.set(await V.getConfig())})),$e.subscribe((e=>e));let u=!1;const p=new URLSearchParams(window.location.search),l=new URL(p.get("url"));async function m(){n(3,u=!0);const e=p.get("frontend"),t=(await V.getList(r))[e].clearnet,a=await V.autoPickInstance(t);r[e].push(a),le.set(r),n(3,u=!1)}async function $(){const e=await he.redirectAsync(l,"main_frame",null,null,!1,!0);a.tabs.update({url:e})}return e.$$.update=()=>{1&e.$$.dirty&&r&&n(2,h=V.style(r,window))},[r,c,h,u,a,p,l,m,$,async()=>{const{service:e}=await he.computeServiceFrontend(l);n(0,r[e].enabled=!0,r),le.set(r),await $()},async()=>{await m(),await $()}]}const qe=new class extends X{constructor(e){super(),F(this,e,Ce,We,c,{})}}({target:document.body});return qe}(); +//# sourceMappingURL=bundle.js.map diff --git a/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/messages/build/bundle.js.map b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/messages/build/bundle.js.map new file mode 100644 index 0000000..3189784 --- /dev/null +++ b/net.imput.helium/.config/net.imput.helium/Default/Extensions/oladmjdebphlnjjcnomfhhbfdldiimaf/3.3.0_0/pages/messages/build/bundle.js.map @@ -0,0 +1 @@ +{"version":3,"file":"bundle.js","sources":["../../../../node_modules/svelte/internal/index.mjs","../../../assets/javascripts/utils.js","../../../assets/javascripts/services.js","../../../../node_modules/svelte/store/index.mjs","../../messages_src/stores.js","../../components/Button.svelte","../../icons/AutoPickIcon.svelte","../../messages_src/App.svelte","../../messages_src/main.js"],"sourcesContent":["function noop() { }\nconst identity = x => x;\nfunction assign(tar, src) {\n // @ts-ignore\n for (const k in src)\n tar[k] = src[k];\n return tar;\n}\n// Adapted from https://github.com/then/is-promise/blob/master/index.js\n// Distributed under MIT License https://github.com/then/is-promise/blob/master/LICENSE\nfunction is_promise(value) {\n return !!value && (typeof value === 'object' || typeof value === 'function') && typeof value.then === 'function';\n}\nfunction add_location(element, file, line, column, char) {\n element.__svelte_meta = {\n loc: { file, line, column, char }\n };\n}\nfunction run(fn) {\n return fn();\n}\nfunction blank_object() {\n return Object.create(null);\n}\nfunction run_all(fns) {\n fns.forEach(run);\n}\nfunction is_function(thing) {\n return typeof thing === 'function';\n}\nfunction safe_not_equal(a, b) {\n return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');\n}\nlet src_url_equal_anchor;\nfunction src_url_equal(element_src, url) {\n if (!src_url_equal_anchor) {\n src_url_equal_anchor = document.createElement('a');\n }\n src_url_equal_anchor.href = url;\n return element_src === src_url_equal_anchor.href;\n}\nfunction not_equal(a, b) {\n return a != a ? b == b : a !== b;\n}\nfunction is_empty(obj) {\n return Object.keys(obj).length === 0;\n}\nfunction validate_store(store, name) {\n if (store != null && typeof store.subscribe !== 'function') {\n throw new Error(`'${name}' is not a store with a 'subscribe' method`);\n }\n}\nfunction subscribe(store, ...callbacks) {\n if (store == null) {\n return noop;\n }\n const unsub = store.subscribe(...callbacks);\n return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;\n}\nfunction get_store_value(store) {\n let value;\n subscribe(store, _ => value = _)();\n return value;\n}\nfunction component_subscribe(component, store, callback) {\n component.$$.on_destroy.push(subscribe(store, callback));\n}\nfunction create_slot(definition, ctx, $$scope, fn) {\n if (definition) {\n const slot_ctx = get_slot_context(definition, ctx, $$scope, fn);\n return definition[0](slot_ctx);\n }\n}\nfunction get_slot_context(definition, ctx, $$scope, fn) {\n return definition[1] && fn\n ? assign($$scope.ctx.slice(), definition[1](fn(ctx)))\n : $$scope.ctx;\n}\nfunction get_slot_changes(definition, $$scope, dirty, fn) {\n if (definition[2] && fn) {\n const lets = definition[2](fn(dirty));\n if ($$scope.dirty === undefined) {\n return lets;\n }\n if (typeof lets === 'object') {\n const merged = [];\n const len = Math.max($$scope.dirty.length, lets.length);\n for (let i = 0; i < len; i += 1) {\n merged[i] = $$scope.dirty[i] | lets[i];\n }\n return merged;\n }\n return $$scope.dirty | lets;\n }\n return $$scope.dirty;\n}\nfunction update_slot_base(slot, slot_definition, ctx, $$scope, slot_changes, get_slot_context_fn) {\n if (slot_changes) {\n const slot_context = get_slot_context(slot_definition, ctx, $$scope, get_slot_context_fn);\n slot.p(slot_context, slot_changes);\n }\n}\nfunction update_slot(slot, slot_definition, ctx, $$scope, dirty, get_slot_changes_fn, get_slot_context_fn) {\n const slot_changes = get_slot_changes(slot_definition, $$scope, dirty, get_slot_changes_fn);\n update_slot_base(slot, slot_definition, ctx, $$scope, slot_changes, get_slot_context_fn);\n}\nfunction get_all_dirty_from_scope($$scope) {\n if ($$scope.ctx.length > 32) {\n const dirty = [];\n const length = $$scope.ctx.length / 32;\n for (let i = 0; i < length; i++) {\n dirty[i] = -1;\n }\n return dirty;\n }\n return -1;\n}\nfunction exclude_internal_props(props) {\n const result = {};\n for (const k in props)\n if (k[0] !== '$')\n result[k] = props[k];\n return result;\n}\nfunction compute_rest_props(props, keys) {\n const rest = {};\n keys = new Set(keys);\n for (const k in props)\n if (!keys.has(k) && k[0] !== '$')\n rest[k] = props[k];\n return rest;\n}\nfunction compute_slots(slots) {\n const result = {};\n for (const key in slots) {\n result[key] = true;\n }\n return result;\n}\nfunction once(fn) {\n let ran = false;\n return function (...args) {\n if (ran)\n return;\n ran = true;\n fn.call(this, ...args);\n };\n}\nfunction null_to_empty(value) {\n return value == null ? '' : value;\n}\nfunction set_store_value(store, ret, value) {\n store.set(value);\n return ret;\n}\nconst has_prop = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop);\nfunction action_destroyer(action_result) {\n return action_result && is_function(action_result.destroy) ? action_result.destroy : noop;\n}\nfunction split_css_unit(value) {\n const split = typeof value === 'string' && value.match(/^\\s*(-?[\\d.]+)([^\\s]*)\\s*$/);\n return split ? [parseFloat(split[1]), split[2] || 'px'] : [value, 'px'];\n}\nconst contenteditable_truthy_values = ['', true, 1, 'true', 'contenteditable'];\n\nconst is_client = typeof window !== 'undefined';\nlet now = is_client\n ? () => window.performance.now()\n : () => Date.now();\nlet raf = is_client ? cb => requestAnimationFrame(cb) : noop;\n// used internally for testing\nfunction set_now(fn) {\n now = fn;\n}\nfunction set_raf(fn) {\n raf = fn;\n}\n\nconst tasks = new Set();\nfunction run_tasks(now) {\n tasks.forEach(task => {\n if (!task.c(now)) {\n tasks.delete(task);\n task.f();\n }\n });\n if (tasks.size !== 0)\n raf(run_tasks);\n}\n/**\n * For testing purposes only!\n */\nfunction clear_loops() {\n tasks.clear();\n}\n/**\n * Creates a new task that runs on each raf frame\n * until it returns a falsy value or is aborted\n */\nfunction loop(callback) {\n let task;\n if (tasks.size === 0)\n raf(run_tasks);\n return {\n promise: new Promise(fulfill => {\n tasks.add(task = { c: callback, f: fulfill });\n }),\n abort() {\n tasks.delete(task);\n }\n };\n}\n\nconst globals = (typeof window !== 'undefined'\n ? window\n : typeof globalThis !== 'undefined'\n ? globalThis\n : global);\n\n/**\n * Resize observer singleton.\n * One listener per element only!\n * https://groups.google.com/a/chromium.org/g/blink-dev/c/z6ienONUb5A/m/F5-VcUZtBAAJ\n */\nclass ResizeObserverSingleton {\n constructor(options) {\n this.options = options;\n this._listeners = 'WeakMap' in globals ? new WeakMap() : undefined;\n }\n observe(element, listener) {\n this._listeners.set(element, listener);\n this._getObserver().observe(element, this.options);\n return () => {\n this._listeners.delete(element);\n this._observer.unobserve(element); // this line can probably be removed\n };\n }\n _getObserver() {\n var _a;\n return (_a = this._observer) !== null && _a !== void 0 ? _a : (this._observer = new ResizeObserver((entries) => {\n var _a;\n for (const entry of entries) {\n ResizeObserverSingleton.entries.set(entry.target, entry);\n (_a = this._listeners.get(entry.target)) === null || _a === void 0 ? void 0 : _a(entry);\n }\n }));\n }\n}\n// Needs to be written like this to pass the tree-shake-test\nResizeObserverSingleton.entries = 'WeakMap' in globals ? new WeakMap() : undefined;\n\n// Track which nodes are claimed during hydration. Unclaimed nodes can then be removed from the DOM\n// at the end of hydration without touching the remaining nodes.\nlet is_hydrating = false;\nfunction start_hydrating() {\n is_hydrating = true;\n}\nfunction end_hydrating() {\n is_hydrating = false;\n}\nfunction upper_bound(low, high, key, value) {\n // Return first index of value larger than input value in the range [low, high)\n while (low < high) {\n const mid = low + ((high - low) >> 1);\n if (key(mid) <= value) {\n low = mid + 1;\n }\n else {\n high = mid;\n }\n }\n return low;\n}\nfunction init_hydrate(target) {\n if (target.hydrate_init)\n return;\n target.hydrate_init = true;\n // We know that all children have claim_order values since the unclaimed have been detached if target is not \n let children = target.childNodes;\n // If target is , there may be children without claim_order\n if (target.nodeName === 'HEAD') {\n const myChildren = [];\n for (let i = 0; i < children.length; i++) {\n const node = children[i];\n if (node.claim_order !== undefined) {\n myChildren.push(node);\n }\n }\n children = myChildren;\n }\n /*\n * Reorder claimed children optimally.\n * We can reorder claimed children optimally by finding the longest subsequence of\n * nodes that are already claimed in order and only moving the rest. The longest\n * subsequence of nodes that are claimed in order can be found by\n * computing the longest increasing subsequence of .claim_order values.\n *\n * This algorithm is optimal in generating the least amount of reorder operations\n * possible.\n *\n * Proof:\n * We know that, given a set of reordering operations, the nodes that do not move\n * always form an increasing subsequence, since they do not move among each other\n * meaning that they must be already ordered among each other. Thus, the maximal\n * set of nodes that do not move form a longest increasing subsequence.\n */\n // Compute longest increasing subsequence\n // m: subsequence length j => index k of smallest value that ends an increasing subsequence of length j\n const m = new Int32Array(children.length + 1);\n // Predecessor indices + 1\n const p = new Int32Array(children.length);\n m[0] = -1;\n let longest = 0;\n for (let i = 0; i < children.length; i++) {\n const current = children[i].claim_order;\n // Find the largest subsequence length such that it ends in a value less than our current value\n // upper_bound returns first greater value, so we subtract one\n // with fast path for when we are on the current longest subsequence\n const seqLen = ((longest > 0 && children[m[longest]].claim_order <= current) ? longest + 1 : upper_bound(1, longest, idx => children[m[idx]].claim_order, current)) - 1;\n p[i] = m[seqLen] + 1;\n const newLen = seqLen + 1;\n // We can guarantee that current is the smallest value. Otherwise, we would have generated a longer sequence.\n m[newLen] = i;\n longest = Math.max(newLen, longest);\n }\n // The longest increasing subsequence of nodes (initially reversed)\n const lis = [];\n // The rest of the nodes, nodes that will be moved\n const toMove = [];\n let last = children.length - 1;\n for (let cur = m[longest] + 1; cur != 0; cur = p[cur - 1]) {\n lis.push(children[cur - 1]);\n for (; last >= cur; last--) {\n toMove.push(children[last]);\n }\n last--;\n }\n for (; last >= 0; last--) {\n toMove.push(children[last]);\n }\n lis.reverse();\n // We sort the nodes being moved to guarantee that their insertion order matches the claim order\n toMove.sort((a, b) => a.claim_order - b.claim_order);\n // Finally, we move the nodes\n for (let i = 0, j = 0; i < toMove.length; i++) {\n while (j < lis.length && toMove[i].claim_order >= lis[j].claim_order) {\n j++;\n }\n const anchor = j < lis.length ? lis[j] : null;\n target.insertBefore(toMove[i], anchor);\n }\n}\nfunction append(target, node) {\n target.appendChild(node);\n}\nfunction append_styles(target, style_sheet_id, styles) {\n const append_styles_to = get_root_for_style(target);\n if (!append_styles_to.getElementById(style_sheet_id)) {\n const style = element('style');\n style.id = style_sheet_id;\n style.textContent = styles;\n append_stylesheet(append_styles_to, style);\n }\n}\nfunction get_root_for_style(node) {\n if (!node)\n return document;\n const root = node.getRootNode ? node.getRootNode() : node.ownerDocument;\n if (root && root.host) {\n return root;\n }\n return node.ownerDocument;\n}\nfunction append_empty_stylesheet(node) {\n const style_element = element('style');\n append_stylesheet(get_root_for_style(node), style_element);\n return style_element.sheet;\n}\nfunction append_stylesheet(node, style) {\n append(node.head || node, style);\n return style.sheet;\n}\nfunction append_hydration(target, node) {\n if (is_hydrating) {\n init_hydrate(target);\n if ((target.actual_end_child === undefined) || ((target.actual_end_child !== null) && (target.actual_end_child.parentNode !== target))) {\n target.actual_end_child = target.firstChild;\n }\n // Skip nodes of undefined ordering\n while ((target.actual_end_child !== null) && (target.actual_end_child.claim_order === undefined)) {\n target.actual_end_child = target.actual_end_child.nextSibling;\n }\n if (node !== target.actual_end_child) {\n // We only insert if the ordering of this node should be modified or the parent node is not target\n if (node.claim_order !== undefined || node.parentNode !== target) {\n target.insertBefore(node, target.actual_end_child);\n }\n }\n else {\n target.actual_end_child = node.nextSibling;\n }\n }\n else if (node.parentNode !== target || node.nextSibling !== null) {\n target.appendChild(node);\n }\n}\nfunction insert(target, node, anchor) {\n target.insertBefore(node, anchor || null);\n}\nfunction insert_hydration(target, node, anchor) {\n if (is_hydrating && !anchor) {\n append_hydration(target, node);\n }\n else if (node.parentNode !== target || node.nextSibling != anchor) {\n target.insertBefore(node, anchor || null);\n }\n}\nfunction detach(node) {\n if (node.parentNode) {\n node.parentNode.removeChild(node);\n }\n}\nfunction destroy_each(iterations, detaching) {\n for (let i = 0; i < iterations.length; i += 1) {\n if (iterations[i])\n iterations[i].d(detaching);\n }\n}\nfunction element(name) {\n return document.createElement(name);\n}\nfunction element_is(name, is) {\n return document.createElement(name, { is });\n}\nfunction object_without_properties(obj, exclude) {\n const target = {};\n for (const k in obj) {\n if (has_prop(obj, k)\n // @ts-ignore\n && exclude.indexOf(k) === -1) {\n // @ts-ignore\n target[k] = obj[k];\n }\n }\n return target;\n}\nfunction svg_element(name) {\n return document.createElementNS('http://www.w3.org/2000/svg', name);\n}\nfunction text(data) {\n return document.createTextNode(data);\n}\nfunction space() {\n return text(' ');\n}\nfunction empty() {\n return text('');\n}\nfunction comment(content) {\n return document.createComment(content);\n}\nfunction listen(node, event, handler, options) {\n node.addEventListener(event, handler, options);\n return () => node.removeEventListener(event, handler, options);\n}\nfunction prevent_default(fn) {\n return function (event) {\n event.preventDefault();\n // @ts-ignore\n return fn.call(this, event);\n };\n}\nfunction stop_propagation(fn) {\n return function (event) {\n event.stopPropagation();\n // @ts-ignore\n return fn.call(this, event);\n };\n}\nfunction stop_immediate_propagation(fn) {\n return function (event) {\n event.stopImmediatePropagation();\n // @ts-ignore\n return fn.call(this, event);\n };\n}\nfunction self(fn) {\n return function (event) {\n // @ts-ignore\n if (event.target === this)\n fn.call(this, event);\n };\n}\nfunction trusted(fn) {\n return function (event) {\n // @ts-ignore\n if (event.isTrusted)\n fn.call(this, event);\n };\n}\nfunction attr(node, attribute, value) {\n if (value == null)\n node.removeAttribute(attribute);\n else if (node.getAttribute(attribute) !== value)\n node.setAttribute(attribute, value);\n}\n/**\n * List of attributes that should always be set through the attr method,\n * because updating them through the property setter doesn't work reliably.\n * In the example of `width`/`height`, the problem is that the setter only\n * accepts numeric values, but the attribute can also be set to a string like `50%`.\n * If this list becomes too big, rethink this approach.\n */\nconst always_set_through_set_attribute = ['width', 'height'];\nfunction set_attributes(node, attributes) {\n // @ts-ignore\n const descriptors = Object.getOwnPropertyDescriptors(node.__proto__);\n for (const key in attributes) {\n if (attributes[key] == null) {\n node.removeAttribute(key);\n }\n else if (key === 'style') {\n node.style.cssText = attributes[key];\n }\n else if (key === '__value') {\n node.value = node[key] = attributes[key];\n }\n else if (descriptors[key] && descriptors[key].set && always_set_through_set_attribute.indexOf(key) === -1) {\n node[key] = attributes[key];\n }\n else {\n attr(node, key, attributes[key]);\n }\n }\n}\nfunction set_svg_attributes(node, attributes) {\n for (const key in attributes) {\n attr(node, key, attributes[key]);\n }\n}\nfunction set_custom_element_data_map(node, data_map) {\n Object.keys(data_map).forEach((key) => {\n set_custom_element_data(node, key, data_map[key]);\n });\n}\nfunction set_custom_element_data(node, prop, value) {\n if (prop in node) {\n node[prop] = typeof node[prop] === 'boolean' && value === '' ? true : value;\n }\n else {\n attr(node, prop, value);\n }\n}\nfunction set_dynamic_element_data(tag) {\n return (/-/.test(tag)) ? set_custom_element_data_map : set_attributes;\n}\nfunction xlink_attr(node, attribute, value) {\n node.setAttributeNS('http://www.w3.org/1999/xlink', attribute, value);\n}\nfunction get_binding_group_value(group, __value, checked) {\n const value = new Set();\n for (let i = 0; i < group.length; i += 1) {\n if (group[i].checked)\n value.add(group[i].__value);\n }\n if (!checked) {\n value.delete(__value);\n }\n return Array.from(value);\n}\nfunction init_binding_group(group) {\n let _inputs;\n return {\n /* push */ p(...inputs) {\n _inputs = inputs;\n _inputs.forEach(input => group.push(input));\n },\n /* remove */ r() {\n _inputs.forEach(input => group.splice(group.indexOf(input), 1));\n }\n };\n}\nfunction init_binding_group_dynamic(group, indexes) {\n let _group = get_binding_group(group);\n let _inputs;\n function get_binding_group(group) {\n for (let i = 0; i < indexes.length; i++) {\n group = group[indexes[i]] = group[indexes[i]] || [];\n }\n return group;\n }\n function push() {\n _inputs.forEach(input => _group.push(input));\n }\n function remove() {\n _inputs.forEach(input => _group.splice(_group.indexOf(input), 1));\n }\n return {\n /* update */ u(new_indexes) {\n indexes = new_indexes;\n const new_group = get_binding_group(group);\n if (new_group !== _group) {\n remove();\n _group = new_group;\n push();\n }\n },\n /* push */ p(...inputs) {\n _inputs = inputs;\n push();\n },\n /* remove */ r: remove\n };\n}\nfunction to_number(value) {\n return value === '' ? null : +value;\n}\nfunction time_ranges_to_array(ranges) {\n const array = [];\n for (let i = 0; i < ranges.length; i += 1) {\n array.push({ start: ranges.start(i), end: ranges.end(i) });\n }\n return array;\n}\nfunction children(element) {\n return Array.from(element.childNodes);\n}\nfunction init_claim_info(nodes) {\n if (nodes.claim_info === undefined) {\n nodes.claim_info = { last_index: 0, total_claimed: 0 };\n }\n}\nfunction claim_node(nodes, predicate, processNode, createNode, dontUpdateLastIndex = false) {\n // Try to find nodes in an order such that we lengthen the longest increasing subsequence\n init_claim_info(nodes);\n const resultNode = (() => {\n // We first try to find an element after the previous one\n for (let i = nodes.claim_info.last_index; i < nodes.length; i++) {\n const node = nodes[i];\n if (predicate(node)) {\n const replacement = processNode(node);\n if (replacement === undefined) {\n nodes.splice(i, 1);\n }\n else {\n nodes[i] = replacement;\n }\n if (!dontUpdateLastIndex) {\n nodes.claim_info.last_index = i;\n }\n return node;\n }\n }\n // Otherwise, we try to find one before\n // We iterate in reverse so that we don't go too far back\n for (let i = nodes.claim_info.last_index - 1; i >= 0; i--) {\n const node = nodes[i];\n if (predicate(node)) {\n const replacement = processNode(node);\n if (replacement === undefined) {\n nodes.splice(i, 1);\n }\n else {\n nodes[i] = replacement;\n }\n if (!dontUpdateLastIndex) {\n nodes.claim_info.last_index = i;\n }\n else if (replacement === undefined) {\n // Since we spliced before the last_index, we decrease it\n nodes.claim_info.last_index--;\n }\n return node;\n }\n }\n // If we can't find any matching node, we create a new one\n return createNode();\n })();\n resultNode.claim_order = nodes.claim_info.total_claimed;\n nodes.claim_info.total_claimed += 1;\n return resultNode;\n}\nfunction claim_element_base(nodes, name, attributes, create_element) {\n return claim_node(nodes, (node) => node.nodeName === name, (node) => {\n const remove = [];\n for (let j = 0; j < node.attributes.length; j++) {\n const attribute = node.attributes[j];\n if (!attributes[attribute.name]) {\n remove.push(attribute.name);\n }\n }\n remove.forEach(v => node.removeAttribute(v));\n return undefined;\n }, () => create_element(name));\n}\nfunction claim_element(nodes, name, attributes) {\n return claim_element_base(nodes, name, attributes, element);\n}\nfunction claim_svg_element(nodes, name, attributes) {\n return claim_element_base(nodes, name, attributes, svg_element);\n}\nfunction claim_text(nodes, data) {\n return claim_node(nodes, (node) => node.nodeType === 3, (node) => {\n const dataStr = '' + data;\n if (node.data.startsWith(dataStr)) {\n if (node.data.length !== dataStr.length) {\n return node.splitText(dataStr.length);\n }\n }\n else {\n node.data = dataStr;\n }\n }, () => text(data), true // Text nodes should not update last index since it is likely not worth it to eliminate an increasing subsequence of actual elements\n );\n}\nfunction claim_space(nodes) {\n return claim_text(nodes, ' ');\n}\nfunction claim_comment(nodes, data) {\n return claim_node(nodes, (node) => node.nodeType === 8, (node) => {\n node.data = '' + data;\n return undefined;\n }, () => comment(data), true);\n}\nfunction find_comment(nodes, text, start) {\n for (let i = start; i < nodes.length; i += 1) {\n const node = nodes[i];\n if (node.nodeType === 8 /* comment node */ && node.textContent.trim() === text) {\n return i;\n }\n }\n return nodes.length;\n}\nfunction claim_html_tag(nodes, is_svg) {\n // find html opening tag\n const start_index = find_comment(nodes, 'HTML_TAG_START', 0);\n const end_index = find_comment(nodes, 'HTML_TAG_END', start_index);\n if (start_index === end_index) {\n return new HtmlTagHydration(undefined, is_svg);\n }\n init_claim_info(nodes);\n const html_tag_nodes = nodes.splice(start_index, end_index - start_index + 1);\n detach(html_tag_nodes[0]);\n detach(html_tag_nodes[html_tag_nodes.length - 1]);\n const claimed_nodes = html_tag_nodes.slice(1, html_tag_nodes.length - 1);\n for (const n of claimed_nodes) {\n n.claim_order = nodes.claim_info.total_claimed;\n nodes.claim_info.total_claimed += 1;\n }\n return new HtmlTagHydration(claimed_nodes, is_svg);\n}\nfunction set_data(text, data) {\n data = '' + data;\n if (text.data === data)\n return;\n text.data = data;\n}\nfunction set_data_contenteditable(text, data) {\n data = '' + data;\n if (text.wholeText === data)\n return;\n text.data = data;\n}\nfunction set_data_maybe_contenteditable(text, data, attr_value) {\n if (~contenteditable_truthy_values.indexOf(attr_value)) {\n set_data_contenteditable(text, data);\n }\n else {\n set_data(text, data);\n }\n}\nfunction set_input_value(input, value) {\n input.value = value == null ? '' : value;\n}\nfunction set_input_type(input, type) {\n try {\n input.type = type;\n }\n catch (e) {\n // do nothing\n }\n}\nfunction set_style(node, key, value, important) {\n if (value == null) {\n node.style.removeProperty(key);\n }\n else {\n node.style.setProperty(key, value, important ? 'important' : '');\n }\n}\nfunction select_option(select, value, mounting) {\n for (let i = 0; i < select.options.length; i += 1) {\n const option = select.options[i];\n if (option.__value === value) {\n option.selected = true;\n return;\n }\n }\n if (!mounting || value !== undefined) {\n select.selectedIndex = -1; // no option should be selected\n }\n}\nfunction select_options(select, value) {\n for (let i = 0; i < select.options.length; i += 1) {\n const option = select.options[i];\n option.selected = ~value.indexOf(option.__value);\n }\n}\nfunction select_value(select) {\n const selected_option = select.querySelector(':checked');\n return selected_option && selected_option.__value;\n}\nfunction select_multiple_value(select) {\n return [].map.call(select.querySelectorAll(':checked'), option => option.__value);\n}\n// unfortunately this can't be a constant as that wouldn't be tree-shakeable\n// so we cache the result instead\nlet crossorigin;\nfunction is_crossorigin() {\n if (crossorigin === undefined) {\n crossorigin = false;\n try {\n if (typeof window !== 'undefined' && window.parent) {\n void window.parent.document;\n }\n }\n catch (error) {\n crossorigin = true;\n }\n }\n return crossorigin;\n}\nfunction add_iframe_resize_listener(node, fn) {\n const computed_style = getComputedStyle(node);\n if (computed_style.position === 'static') {\n node.style.position = 'relative';\n }\n const iframe = element('iframe');\n iframe.setAttribute('style', 'display: block; position: absolute; top: 0; left: 0; width: 100%; height: 100%; ' +\n 'overflow: hidden; border: 0; opacity: 0; pointer-events: none; z-index: -1;');\n iframe.setAttribute('aria-hidden', 'true');\n iframe.tabIndex = -1;\n const crossorigin = is_crossorigin();\n let unsubscribe;\n if (crossorigin) {\n iframe.src = \"data:text/html,\";\n unsubscribe = listen(window, 'message', (event) => {\n if (event.source === iframe.contentWindow)\n fn();\n });\n }\n else {\n iframe.src = 'about:blank';\n iframe.onload = () => {\n unsubscribe = listen(iframe.contentWindow, 'resize', fn);\n // make sure an initial resize event is fired _after_ the iframe is loaded (which is asynchronous)\n // see https://github.com/sveltejs/svelte/issues/4233\n fn();\n };\n }\n append(node, iframe);\n return () => {\n if (crossorigin) {\n unsubscribe();\n }\n else if (unsubscribe && iframe.contentWindow) {\n unsubscribe();\n }\n detach(iframe);\n };\n}\nconst resize_observer_content_box = /* @__PURE__ */ new ResizeObserverSingleton({ box: 'content-box' });\nconst resize_observer_border_box = /* @__PURE__ */ new ResizeObserverSingleton({ box: 'border-box' });\nconst resize_observer_device_pixel_content_box = /* @__PURE__ */ new ResizeObserverSingleton({ box: 'device-pixel-content-box' });\nfunction toggle_class(element, name, toggle) {\n element.classList[toggle ? 'add' : 'remove'](name);\n}\nfunction custom_event(type, detail, { bubbles = false, cancelable = false } = {}) {\n const e = document.createEvent('CustomEvent');\n e.initCustomEvent(type, bubbles, cancelable, detail);\n return e;\n}\nfunction query_selector_all(selector, parent = document.body) {\n return Array.from(parent.querySelectorAll(selector));\n}\nfunction head_selector(nodeId, head) {\n const result = [];\n let started = 0;\n for (const node of head.childNodes) {\n if (node.nodeType === 8 /* comment node */) {\n const comment = node.textContent.trim();\n if (comment === `HEAD_${nodeId}_END`) {\n started -= 1;\n result.push(node);\n }\n else if (comment === `HEAD_${nodeId}_START`) {\n started += 1;\n result.push(node);\n }\n }\n else if (started > 0) {\n result.push(node);\n }\n }\n return result;\n}\nclass HtmlTag {\n constructor(is_svg = false) {\n this.is_svg = false;\n this.is_svg = is_svg;\n this.e = this.n = null;\n }\n c(html) {\n this.h(html);\n }\n m(html, target, anchor = null) {\n if (!this.e) {\n if (this.is_svg)\n this.e = svg_element(target.nodeName);\n /** #7364 target for