From dfb97f1ad263fcc79e2be1bb3b39be2234afe7e4 Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Wed, 12 Feb 2025 14:23:41 +1100 Subject: [PATCH 01/17] Update version number to 2.6.3 --- cli/onionshare_cli/resources/version.txt | 2 +- cli/pyproject.toml | 2 +- desktop/org.onionshare.OnionShare.appdata.xml | 2 +- desktop/poetry.lock | 2 +- desktop/pyproject.toml | 2 +- desktop/setup.py | 2 +- docs/source/conf.py | 4 ++-- flatpak/org.onionshare.OnionShare.yaml | 4 ++-- snap/snapcraft.yaml | 2 +- 9 files changed, 11 insertions(+), 11 deletions(-) diff --git a/cli/onionshare_cli/resources/version.txt b/cli/onionshare_cli/resources/version.txt index 097a15a2..ec1cf33c 100644 --- a/cli/onionshare_cli/resources/version.txt +++ b/cli/onionshare_cli/resources/version.txt @@ -1 +1 @@ -2.6.2 +2.6.3 diff --git a/cli/pyproject.toml b/cli/pyproject.toml index bf4595aa..5bc9df08 100644 --- a/cli/pyproject.toml +++ b/cli/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "onionshare_cli" -version = "2.6.2" +version = "2.6.3" description = "OnionShare lets you securely and anonymously send and receive files. It works by starting a web server, making it accessible as a Tor onion service, and generating an unguessable web address so others can download files from you, or upload files to you. It does _not_ require setting up a separate server or using a third party file-sharing service." authors = ["Micah Lee "] license = "GPLv3+" diff --git a/desktop/org.onionshare.OnionShare.appdata.xml b/desktop/org.onionshare.OnionShare.appdata.xml index bff830db..28451f78 100644 --- a/desktop/org.onionshare.OnionShare.appdata.xml +++ b/desktop/org.onionshare.OnionShare.appdata.xml @@ -24,6 +24,6 @@ micah@micahflee.com - + diff --git a/desktop/poetry.lock b/desktop/poetry.lock index 7997860f..d53b6eeb 100644 --- a/desktop/poetry.lock +++ b/desktop/poetry.lock @@ -1168,7 +1168,7 @@ files = [ [[package]] name = "onionshare-cli" -version = "2.6.2" +version = "2.6.3" description = "OnionShare lets you securely and anonymously send and receive files. It works by starting a web server, making it accessible as a Tor onion service, and generating an unguessable web address so others can download files from you, or upload files to you. It does _not_ require setting up a separate server or using a third party file-sharing service." optional = false python-versions = ">=3.9,<3.13" diff --git a/desktop/pyproject.toml b/desktop/pyproject.toml index 9aca0ffa..595c15af 100644 --- a/desktop/pyproject.toml +++ b/desktop/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "onionshare" -version = "2.6.2" +version = "2.6.3" description = "OnionShare lets you securely and anonymously send and receive files. It works by starting a web server, making it accessible as a Tor onion service, and generating an unguessable web address so others can download files from you, or upload files to you. It does _not_ require setting up a separate server or using a third party file-sharing service." authors = ["Micah Lee "] license = "GPLv3+" diff --git a/desktop/setup.py b/desktop/setup.py index cba2736b..825b000c 100644 --- a/desktop/setup.py +++ b/desktop/setup.py @@ -3,7 +3,7 @@ import setuptools # The version must be hard-coded because Snapcraft won't have access to ../cli -version = "2.6.2" +version = "2.6.3" setuptools.setup( name="onionshare", diff --git a/docs/source/conf.py b/docs/source/conf.py index 3336ebc4..0b64a078 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -1,6 +1,6 @@ project = "OnionShare" author = copyright = "Micah Lee, et al." -version = release = "2.6.2" +version = release = "2.6.3" extensions = ["sphinx_rtd_theme"] templates_path = ["_templates"] @@ -25,7 +25,7 @@ languages = [ ("Tiếng Việt", "vi"), # Vietnamese ] -versions = ["2.3", "2.3.1", "2.3.2", "2.3.3", "2.4", "2.5", "2.6", "2.6.1", "2.6.2"] +versions = ["2.3", "2.3.1", "2.3.2", "2.3.3", "2.4", "2.5", "2.6", "2.6.1", "2.6.2", "2.6.3"] html_theme = "sphinx_rtd_theme" html_logo = "_static/logo.png" diff --git a/flatpak/org.onionshare.OnionShare.yaml b/flatpak/org.onionshare.OnionShare.yaml index 75e874a9..cd97ba78 100644 --- a/flatpak/org.onionshare.OnionShare.yaml +++ b/flatpak/org.onionshare.OnionShare.yaml @@ -119,7 +119,7 @@ modules: path: .. # - type: git # url: https://github.com/onionshare/onionshare.git - # tag: v2.6.2 + # tag: v2.6.3 modules: - onionshare-desktop.yaml - name: onionshare-cli @@ -132,6 +132,6 @@ modules: path: .. # - type: git # url: https://github.com/onionshare/onionshare.git - # tag: v2.6.2 + # tag: v2.6.3 modules: - onionshare-cli.yaml diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml index 4f627738..35ce0cbc 100644 --- a/snap/snapcraft.yaml +++ b/snap/snapcraft.yaml @@ -1,6 +1,6 @@ name: onionshare base: core24 -version: "2.6.2" +version: "2.6.3" summary: Securely and anonymously share files, host websites, and chat using Tor description: | OnionShare lets you securely and anonymously send and receive files. It works by starting From 5f65caf044f0bf4385d7d31d2f980364d7c64d4e Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Wed, 12 Feb 2025 14:23:52 +1100 Subject: [PATCH 02/17] Update available locales --- cli/onionshare_cli/settings.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/cli/onionshare_cli/settings.py b/cli/onionshare_cli/settings.py index 9ee65a87..4cd56ee9 100644 --- a/cli/onionshare_cli/settings.py +++ b/cli/onionshare_cli/settings.py @@ -76,7 +76,7 @@ class Settings(object): "el": "Ελληνικά", # Greek "is": "Íslenska", # Icelandic # "id": "Bahasa Indonesia", # Indonesian - # "ga": "Gaeilge", # Irish + "ga": "Gaeilge", # Irish "it": "Italiano", # Italian "ja": "日本語", # Japanese "km": "ខ្មែរ", # Khmer(Central) @@ -91,10 +91,11 @@ class Settings(object): "ru": "Русский", # Russian "sn": "chiShona", # Shona # "sr_Latn": "Srpska (latinica)", # Serbian (latin) - # "sk": "Slovenčina", # Slovak + "sk": "Slovenčina", # Slovak "es": "Español", # Spanish "sw": "Kiswahili", # Swahili "sv": "Svenska", # Swedish + "ta": "Tamil", # Tamil # "te": "తెలుగు", # Telugu "tr": "Türkçe", # Turkish "uk": "Українська", # Ukrainian From b793b02b3850082aea1d6b04afa060bcff1fc03a Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Wed, 12 Feb 2025 14:25:16 +1100 Subject: [PATCH 03/17] Update countries json for new locales --- desktop/onionshare/resources/countries/ga.json | 1 + desktop/onionshare/resources/countries/sk.json | 1 + desktop/onionshare/resources/countries/ta.json | 1 + 3 files changed, 3 insertions(+) create mode 100644 desktop/onionshare/resources/countries/ga.json create mode 100644 desktop/onionshare/resources/countries/sk.json create mode 100644 desktop/onionshare/resources/countries/ta.json diff --git a/desktop/onionshare/resources/countries/ga.json b/desktop/onionshare/resources/countries/ga.json new file mode 100644 index 00000000..1850091c --- /dev/null +++ b/desktop/onionshare/resources/countries/ga.json @@ -0,0 +1 @@ +{"ET": "an Aet\u00f3ip", "AF": "an Afganast\u00e1in", "ZA": "an Afraic Theas", "DZ": "an Ailg\u00e9ir", "AR": "an Airgint\u00edn", "AM": "an Airm\u00e9in", "AL": "an Alb\u00e1in", "AQ": "an Antartaice", "SA": "an Araib Sh\u00e1dach", "AZ": "an Asarbaise\u00e1in", "AU": "an Astr\u00e1il", "BD": "an Bhanglaid\u00e9is", "BY": "an Bhealar\u00fais", "BE": "an Bheilg", "BZ": "an Bheil\u00eds", "BA": "an Bhoisnia agus an Heirseagaiv\u00e9in", "BO": "an Bholaiv", "BW": "an Bhotsu\u00e1in", "BR": "an Bhrasa\u00edl", "BG": "an Bhulg\u00e1ir", "BI": "an Bhur\u00fain", "BT": "an Bh\u00fat\u00e1in", "KH": "an Chamb\u00f3id", "KZ": "an Chasacst\u00e1in", "KE": "an Ch\u00e9inia", "CY": "an Chipir", "KG": "an Chirgeast\u00e1in", "KR": "an Ch\u00f3ir\u00e9 Theas", "KP": "an Ch\u00f3ir\u00e9 Thuaidh", "CO": "an Chol\u00f3im", "HR": "an Chr\u00f3it", "CG": "an Cong\u00f3", "CI": "an C\u00f3sta Eabhair", "DK": "an Danmhairg", "EE": "an East\u00f3in", "EG": "an \u00c9igipt", "CH": "an Eilv\u00e9is", "ER": "an Eiritr\u00e9", "FI": "an Fhionlainn", "FR": "an Fhrainc", "GA": "an Ghab\u00fain", "GM": "an Ghaimbia", "DE": "an Ghearm\u00e1in", "GL": "an Ghraonlainn", "GR": "an Ghr\u00e9ig", "GY": "an Ghu\u00e1in", "GN": "an Ghuine", "GQ": "an Ghuine Mhe\u00e1nchiorclach", "IQ": "an Iar\u00e1ic", "IR": "an Iar\u00e1in", "IN": "an India", "ID": "an Indin\u00e9is", "IT": "an Iod\u00e1il", "JO": "an Iord\u00e1in", "NO": "an Iorua", "IS": "an \u00cdoslainn", "NL": "an \u00cdsilt\u00edr", "BQ": "an \u00cdsilt\u00edr Chairibeach", "LV": "an Laitvia", "LR": "an Lib\u00e9ir", "LY": "an Libia", "LB": "an Liob\u00e1in", "LT": "an Liotu\u00e1in", "MK": "an Mhacad\u00f3in Thuaidh", "MY": "an Mhalaeisia", "MW": "an Mhal\u00e1iv", "MR": "an Mh\u00e1rat\u00e1in", "MD": "an Mhold\u00f3iv", "MN": "an Mhong\u00f3il", "NA": "an Namaib", "NG": "an Nig\u00e9ir", "NE": "an N\u00edgir", "NC": "an Nua-Chalad\u00f3in", "NZ": "an Nua-Sh\u00e9alainn", "AT": "an Ostair", "PK": "an Phacast\u00e1in", "DO": "an Phoblacht Dhoiminiceach", "PL": "an Pholainn", "PT": "an Phortaing\u00e9il", "GB": "an R\u00edocht Aontaithe", "RO": "an R\u00f3m\u00e1in", "RU": "an R\u00fais", "EH": "an Sah\u00e1ra Thiar", "ES": "an Sp\u00e1inn", "TJ": "an T\u00e1ids\u00edceast\u00e1in", "TZ": "an Tans\u00e1in", "TH": "an T\u00e9alainn", "TW": "an T\u00e9av\u00e1in", "ZM": "an tSaimbia", "SV": "an tSalvad\u00f3ir", "JP": "an tSeap\u00e1in", "CZ": "an tSeicia", "SN": "an tSeineag\u00e1il", "RS": "an tSeirbia", "GE": "an tSeoirsia", "GS": "an tSeoirsia Theas agus Oile\u00e1in Sandwich Theas", "CL": "an tSile", "CN": "an tS\u00edn", "ZW": "an tSiomb\u00e1ib", "SY": "an tSiria", "SI": "an tSl\u00f3iv\u00e9in", "SK": "an tSl\u00f3vaic", "SO": "an tSom\u00e1il", "SE": "an tSualainn", "SD": "an tS\u00fad\u00e1in", "SS": "an tS\u00fad\u00e1in Theas", "TN": "an T\u00fain\u00e9is", "TR": "an Tuirc", "TM": "an Tuircm\u00e9anast\u00e1in", "UA": "an \u00dacr\u00e1in", "UZ": "an \u00daisb\u00e9iceast\u00e1in", "HU": "an Ung\u00e1ir", "AD": "And\u00f3ra", "AI": "Anga\u00edle", "AO": "Ang\u00f3la", "AG": "Antigua agus Barb\u00fada", "AE": "Aontas na n\u00c9im\u00edr\u00edochta\u00ed Arabacha", "AW": "Ar\u00faba", "BH": "Bair\u00e9in", "BB": "Barbad\u00f3s", "BJ": "Beinin", "BM": "Beirmi\u00fada", "BN": "Br\u00fain\u00e9", "BF": "Buirc\u00edne Fas\u00f3", "CM": "Camar\u00fan", "QA": "Catar", "VA": "Cathair na Vatac\u00e1ine", "CA": "Ceanada", "KI": "Cireabait\u00ed", "CR": "C\u00f3sta R\u00edce", "IO": "Cr\u00edoch Aig\u00e9an Indiach na Breataine", "TF": "Cr\u00edocha Francacha Dheisceart an Domhain", "KW": "Cu\u00e1it", "CU": "C\u00faba", "CW": "Cura\u00e7ao", "DJ": "Djibouti", "DM": "Doiminice", "EC": "Eacuad\u00f3r", "YE": "\u00c9imin", "IE": "\u00c9ire", "SZ": "eSuait\u00edn\u00ed", "FJ": "Fids\u00ed", "GH": "G\u00e1na", "GG": "Geansa\u00ed", "GI": "Giobr\u00e1ltar", "GD": "Grean\u00e1da", "GP": "Guadal\u00faip", "GF": "Gu\u00e1in na Fraince", "GU": "Guam", "GT": "Guatamala", "GW": "Guine Bissau", "HT": "H\u00e1\u00edt\u00ed", "HN": "Hond\u00faras", "JM": "Iam\u00e1ice", "IL": "Iosrael", "LA": "Laos", "LS": "Leos\u00f3ta", "LI": "Lichtinst\u00e9in", "LU": "Lucsamburg", "MG": "Madagascar", "MM": "Maenmar (Burma)", "ML": "Mail\u00ed", "MT": "M\u00e1lta", "MA": "Marac\u00f3", "MQ": "Martinique", "YT": "Mayotte", "MX": "Meicsiceo", "MC": "Monac\u00f3", "ME": "Montain\u00e9agr\u00f3", "MS": "Montsarat", "MZ": "M\u00f3saimb\u00edc", "BS": "na Bah\u00e1ma\u00ed", "PH": "na hOile\u00e1in Fhilip\u00edneacha", "SC": "na S\u00e9is\u00e9il", "NR": "N\u00e1r\u00fa", "NP": "Neipeal", "NI": "Nicearagua", "NU": "Niue", "PG": "Nua-Ghuine Phapua", "AX": "Oile\u00e1in \u00c5land", "VG": "Oile\u00e1in Bhriotanacha na Maighdean", "KY": "Oile\u00e1in Cayman", "KM": "Oile\u00e1in Chom\u00f3ra", "CC": "Oile\u00e1in Cocos (Keeling)", "CK": "Oile\u00e1in Cook", "FK": "Oile\u00e1in Fh\u00e1clainne", "FO": "Oile\u00e1in Fhar\u00f3", "MV": "Oile\u00e1in Mhaild\u00edve", "VI": "Oile\u00e1in Mheirice\u00e1nacha na Maighdean", "TC": "Oile\u00e1in na dTurcach agus Caicos", "PW": "Oile\u00e1in Palau", "PN": "Oile\u00e1in Pitcairn", "SB": "Oile\u00e1in Sholom\u00f3n", "BV": "Oile\u00e1n Bouvet", "HM": "Oile\u00e1n Heard agus Oile\u00e1in McDonald", "IM": "Oile\u00e1n Mhanann", "MU": "Oile\u00e1n Mhuir\u00eds", "CX": "Oile\u00e1n na Nollag", "TT": "Oile\u00e1n na Tr\u00edon\u00f3ide agus Tob\u00e1ga", "NF": "Oile\u00e1n Norfolk", "OM": "\u00d3man", "PA": "Panama", "PY": "Paragua", "PE": "Peiri\u00fa", "CD": "Poblacht Dhaonlathach an Chong\u00f3", "CF": "Poblacht na hAfraice L\u00e1ir", "PF": "Polain\u00e9is na Fraince", "PR": "P\u00f3rt\u00f3 R\u00edce", "RE": "R\u00e9union", "CV": "Rinn Verde", "RW": "Ruanda", "HK": "S.R.R. na S\u00edne Hong Cong", "MO": "S.R.R. na S\u00edne Macao", "BL": "Saint Barth\u00e9lemy", "LC": "Saint Lucia", "MF": "Saint-Martin", "WS": "Sam\u00f3", "AS": "Sam\u00f3 Mheirice\u00e1", "KN": "San Cr\u00edost\u00f3ir-Nimheas", "SH": "San H\u00e9ilin", "SM": "San Mair\u00edne", "PM": "San Pierre agus Miquelon", "VC": "San Uinseann agus na Grean\u00e1id\u00edn\u00ed", "ST": "S\u00e3o Tom\u00e9 agus Pr\u00edncipe", "TD": "Sead", "SL": "Siarra Leon", "SG": "Singeap\u00f3r", "SX": "Sint Maarten", "LK": "Sr\u00ed Lanca", "US": "St\u00e1it Aontaithe Mheirice\u00e1", "SR": "Suranam", "SJ": "Svalbard agus Jan Mayen", "TL": "T\u00edom\u00f3r Thoir", "TK": "T\u00f3cal\u00e1", "TG": "T\u00f3ga", "TO": "Tonga", "UG": "Uganda", "UY": "Uragua", "WF": "Vail\u00eds agus Fut\u00fana", "VU": "Vanuat\u00fa", "VE": "Veinis\u00e9ala", "VN": "V\u00edtneam"} \ No newline at end of file diff --git a/desktop/onionshare/resources/countries/sk.json b/desktop/onionshare/resources/countries/sk.json new file mode 100644 index 00000000..1ba570f7 --- /dev/null +++ b/desktop/onionshare/resources/countries/sk.json @@ -0,0 +1 @@ +{"AF": "Afganistan", "AX": "Alandy", "AL": "Alb\u00e1nsko", "DZ": "Al\u017e\u00edrsko", "AS": "Americk\u00e1 Samoa", "VI": "Americk\u00e9 Panensk\u00e9 ostrovy", "AD": "Andorra", "AO": "Angola", "AI": "Anguilla", "AQ": "Antarkt\u00edda", "AG": "Antigua a Barbuda", "AR": "Argent\u00edna", "AM": "Arm\u00e9nsko", "AW": "Aruba", "AU": "Austr\u00e1lia", "AZ": "Azerbajd\u017ean", "BS": "Bahamy", "BH": "Bahrajn", "BD": "Banglad\u00e9\u0161", "BB": "Barbados", "BE": "Belgicko", "BZ": "Belize", "BJ": "Benin", "BM": "Bermudy", "BT": "Bhut\u00e1n", "BY": "Bielorusko", "BO": "Bol\u00edvia", "BA": "Bosna a Hercegovina", "BW": "Botswana", "BV": "Bouvetov ostrov", "BR": "Braz\u00edlia", "IO": "Britsk\u00e9 indickooce\u00e1nske \u00fazemie", "VG": "Britsk\u00e9 Panensk\u00e9 ostrovy", "BN": "Brunej", "BG": "Bulharsko", "BF": "Burkina Faso", "BI": "Burundi", "CK": "Cookove ostrovy", "CW": "Cura\u00e7ao", "CY": "Cyprus", "TD": "\u010cad", "CZ": "\u010cesko", "ME": "\u010cierna Hora", "CL": "\u010cile", "CN": "\u010c\u00edna", "DK": "D\u00e1nsko", "DM": "Dominika", "DO": "Dominik\u00e1nska republika", "DJ": "D\u017eibutsko", "EG": "Egypt", "EC": "Ekv\u00e1dor", "ER": "Eritrea", "EE": "Est\u00f3nsko", "SZ": "Eswatini", "ET": "Eti\u00f3pia", "FO": "Faersk\u00e9 ostrovy", "FK": "Falklandy", "FJ": "Fid\u017ei", "PH": "Filip\u00edny", "FI": "F\u00ednsko", "GF": "Franc\u00fazska Guyana", "PF": "Franc\u00fazska Polyn\u00e9zia", "TF": "Franc\u00fazske ju\u017en\u00e9 a antarktick\u00e9 \u00fazemia", "FR": "Franc\u00fazsko", "GA": "Gabon", "GM": "Gambia", "GH": "Ghana", "GI": "Gibralt\u00e1r", "GR": "Gr\u00e9cko", "GD": "Grenada", "GL": "Gr\u00f3nsko", "GE": "Gruz\u00ednsko", "GP": "Guadeloupe", "GU": "Guam", "GT": "Guatemala", "GG": "Guernsey", "GN": "Guinea", "GW": "Guinea-Bissau", "GY": "Guyana", "HT": "Haiti", "HM": "Heardov ostrov a Macdonaldove ostrovy", "NL": "Holandsko", "HN": "Honduras", "HK": "Hongkong \u2013 OAO \u010c\u00edny", "HR": "Chorv\u00e1tsko", "IN": "India", "ID": "Indon\u00e9zia", "IQ": "Irak", "IR": "Ir\u00e1n", "IE": "\u00cdrsko", "IS": "Island", "IL": "Izrael", "JM": "Jamajka", "JP": "Japonsko", "YE": "Jemen", "JO": "Jord\u00e1nsko", "ZA": "Ju\u017en\u00e1 Afrika", "GS": "Ju\u017en\u00e1 Georgia a Ju\u017en\u00e9 Sandwichove ostrovy", "KR": "Ju\u017en\u00e1 K\u00f3rea", "SS": "Ju\u017en\u00fd Sud\u00e1n", "KY": "Kajmanie ostrovy", "KH": "Kambod\u017ea", "CM": "Kamerun", "CA": "Kanada", "CV": "Kapverdy", "BQ": "Karibsk\u00e9 Holandsko", "QA": "Katar", "KZ": "Kazachstan", "KE": "Ke\u0148a", "KG": "Kirgizsko", "KI": "Kiribati", "CC": "Kokosov\u00e9 ostrovy", "CO": "Kolumbia", "KM": "Komory", "CD": "Kon\u017esk\u00e1 demokratick\u00e1 republika", "CG": "Kon\u017esk\u00e1 republika", "CR": "Kostarika", "CU": "Kuba", "KW": "Kuvajt", "LA": "Laos", "LS": "Lesotho", "LB": "Libanon", "LR": "Lib\u00e9ria", "LY": "L\u00edbya", "LI": "Lichten\u0161tajnsko", "LT": "Litva", "LV": "Loty\u0161sko", "LU": "Luxembursko", "MO": "Macao \u2013 OAO \u010c\u00edny", "MG": "Madagaskar", "HU": "Ma\u010farsko", "MY": "Malajzia", "MW": "Malawi", "MV": "Maldivy", "ML": "Mali", "MT": "Malta", "MA": "Maroko", "MQ": "Martinik", "MU": "Maur\u00edcius", "MR": "Maurit\u00e1nia", "YT": "Mayotte", "MX": "Mexiko", "MM": "Mjanmarsko", "MD": "Moldavsko", "MC": "Monako", "MN": "Mongolsko", "MS": "Montserrat", "MZ": "Mozambik", "NA": "Nam\u00edbia", "NR": "Nauru", "DE": "Nemecko", "NP": "Nep\u00e1l", "NE": "Niger", "NG": "Nig\u00e9ria", "NI": "Nikaragua", "NU": "Niue", "NF": "Norfolk", "NO": "N\u00f3rsko", "NC": "Nov\u00e1 Kaled\u00f3nia", "NZ": "Nov\u00fd Z\u00e9land", "OM": "Om\u00e1n", "IM": "Ostrov Man", "PK": "Pakistan", "PW": "Palau", "PA": "Panama", "PG": "Papua-Nov\u00e1 Guinea", "PY": "Paraguaj", "PE": "Peru", "PN": "Pitcairnove ostrovy", "CI": "Pobre\u017eie Slonoviny", "PL": "Po\u013esko", "PR": "Portoriko", "PT": "Portugalsko", "AT": "Rak\u00fasko", "RE": "R\u00e9union", "GQ": "Rovn\u00edkov\u00e1 Guinea", "RO": "Rumunsko", "RU": "Rusko", "RW": "Rwanda", "PM": "Saint Pierre a Miquelon", "SV": "Salv\u00e1dor", "WS": "Samoa", "SM": "San Mar\u00edno", "SA": "Saudsk\u00e1 Ar\u00e1bia", "SN": "Senegal", "KP": "Severn\u00e1 K\u00f3rea", "MK": "Severn\u00e9 Maced\u00f3nsko", "SC": "Seychely", "SL": "Sierra Leone", "SG": "Singapur", "SK": "Slovensko", "SI": "Slovinsko", "SO": "Som\u00e1lsko", "AE": "Spojen\u00e9 arabsk\u00e9 emir\u00e1ty", "GB": "Spojen\u00e9 kr\u00e1\u013eovstvo", "US": "Spojen\u00e9 \u0161t\u00e1ty", "RS": "Srbsko", "LK": "Sr\u00ed Lanka", "CF": "Stredoafrick\u00e1 republika", "SD": "Sud\u00e1n", "SR": "Surinam", "SJ": "Svalbard a Jan Mayen", "SH": "Sv\u00e4t\u00e1 Helena", "LC": "Sv\u00e4t\u00e1 Lucia", "BL": "Sv\u00e4t\u00fd Bartolomej", "KN": "Sv\u00e4t\u00fd Kri\u0161tof a Nevis", "MF": "Sv\u00e4t\u00fd Martin (fr.)", "SX": "Sv\u00e4t\u00fd Martin (hol.)", "ST": "Sv\u00e4t\u00fd Tom\u00e1\u0161 a Princov ostrov", "VC": "Sv\u00e4t\u00fd Vincent a Grenad\u00edny", "SY": "S\u00fdria", "SB": "\u0160alam\u00fanove ostrovy", "ES": "\u0160panielsko", "CH": "\u0160vaj\u010diarsko", "SE": "\u0160v\u00e9dsko", "TJ": "Tad\u017eikistan", "TW": "Taiwan", "IT": "Taliansko", "TZ": "Tanz\u00e1nia", "TH": "Thajsko", "TG": "Togo", "TK": "Tokelau", "TO": "Tonga", "TT": "Trinidad a Tobago", "TN": "Tunisko", "TR": "Turecko", "TM": "Turkm\u00e9nsko", "TC": "Turks a Caicos", "UG": "Uganda", "UA": "Ukrajina", "UY": "Uruguaj", "UZ": "Uzbekistan", "VU": "Vanuatu", "VA": "Vatik\u00e1n", "VE": "Venezuela", "CX": "Viano\u010dn\u00fd ostrov", "VN": "Vietnam", "TL": "V\u00fdchodn\u00fd Timor", "WF": "Wallis a Futuna", "ZM": "Zambia", "EH": "Z\u00e1padn\u00e1 Sahara", "ZW": "Zimbabwe"} \ No newline at end of file diff --git a/desktop/onionshare/resources/countries/ta.json b/desktop/onionshare/resources/countries/ta.json new file mode 100644 index 00000000..2277f4e5 --- /dev/null +++ b/desktop/onionshare/resources/countries/ta.json @@ -0,0 +1 @@ +{"AI": "\u0b85\u0b99\u0bcd\u0b95\u0bbf\u0baf\u0bc1\u0bb2\u0bbe", "AO": "\u0b85\u0b99\u0bcd\u0b95\u0bcb\u0bb2\u0bbe", "AZ": "\u0b85\u0b9a\u0bb0\u0bcd\u0baa\u0bc8\u0b9c\u0bbe\u0ba9\u0bcd", "AQ": "\u0b85\u0ba3\u0bcd\u0b9f\u0bbe\u0bb0\u0bcd\u0b9f\u0bbf\u0b95\u0bbe", "AS": "\u0b85\u0bae\u0bc6\u0bb0\u0bbf\u0b95\u0bcd\u0b95 \u0b9a\u0bae\u0bcb\u0bb5\u0bbe", "US": "\u0b85\u0bae\u0bc6\u0bb0\u0bbf\u0b95\u0bcd\u0b95\u0bbe", "IE": "\u0b85\u0baf\u0bb0\u0bcd\u0bb2\u0bbe\u0ba8\u0bcd\u0ba4\u0bc1", "AM": "\u0b85\u0bb0\u0bcd\u0bae\u0bc7\u0ba9\u0bbf\u0baf\u0bbe", "AR": "\u0b85\u0bb0\u0bcd\u0b9c\u0bc6\u0ba9\u0bcd\u0b9f\u0bbf\u0ba9\u0bbe", "AW": "\u0b85\u0bb0\u0bc2\u0baa\u0bbe", "AL": "\u0b85\u0bb2\u0bcd\u0baa\u0bc7\u0ba9\u0bbf\u0baf\u0bbe", "DZ": "\u0b85\u0bb2\u0bcd\u0b9c\u0bc0\u0bb0\u0bbf\u0baf\u0bbe", "AD": "\u0b85\u0ba9\u0bcd\u0b9f\u0bcb\u0bb0\u0bbe", "AF": "\u0b86\u0b83\u0baa\u0bcd\u0b95\u0bbe\u0ba9\u0bbf\u0bb8\u0bcd\u0ba4\u0bbe\u0ba9\u0bcd", "AG": "\u0b86\u0ba3\u0bcd\u0b9f\u0bbf\u0b95\u0bc1\u0bb5\u0bbe \u0bae\u0bb1\u0bcd\u0bb1\u0bc1\u0bae\u0bcd \u0baa\u0bbe\u0bb0\u0bcd\u0baa\u0bc1\u0b9f\u0bbe", "AX": "\u0b86\u0bb2\u0ba8\u0bcd\u0ba4\u0bc1 \u0ba4\u0bc0\u0bb5\u0bc1\u0b95\u0bb3\u0bcd", "AT": "\u0b86\u0bb8\u0bcd\u0ba4\u0bbf\u0bb0\u0bbf\u0baf\u0bbe", "AU": "\u0b86\u0bb8\u0bcd\u0ba4\u0bbf\u0bb0\u0bc7\u0bb2\u0bbf\u0baf\u0bbe", "IT": "\u0b87\u0ba4\u0bcd\u0ba4\u0bbe\u0bb2\u0bbf", "IN": "\u0b87\u0ba8\u0bcd\u0ba4\u0bbf\u0baf\u0bbe", "ID": "\u0b87\u0ba8\u0bcd\u0ba4\u0bcb\u0ba9\u0bc7\u0b9a\u0bbf\u0baf\u0bbe", "LK": "\u0b87\u0bb2\u0b99\u0bcd\u0b95\u0bc8", "IL": "\u0b87\u0bb8\u0bcd\u0bb0\u0bc7\u0bb2\u0bcd", "EC": "\u0b88\u0b95\u0bcd\u0bb5\u0b9f\u0bbe\u0bb0\u0bcd", "GQ": "\u0b88\u0b95\u0bcd\u0bb5\u0b9f\u0bcb\u0bb0\u0bbf\u0baf\u0bb2\u0bcd \u0b95\u0bbf\u0ba9\u0bbf\u0baf\u0bbe", "IQ": "\u0b88\u0bb0\u0bbe\u0b95\u0bcd", "IR": "\u0b88\u0bb0\u0bbe\u0ba9\u0bcd", "UA": "\u0b89\u0b95\u0bcd\u0bb0\u0bc8\u0ba9\u0bcd", "UG": "\u0b89\u0b95\u0bbe\u0ba3\u0bcd\u0b9f\u0bbe", "UY": "\u0b89\u0bb0\u0bc1\u0b95\u0bc1\u0bb5\u0bc7", "UZ": "\u0b89\u0bb8\u0bcd\u0baa\u0bc6\u0b95\u0bbf\u0bb8\u0bcd\u0ba4\u0bbe\u0ba9\u0bcd", "EG": "\u0b8e\u0b95\u0bbf\u0baa\u0bcd\u0ba4\u0bc1", "ET": "\u0b8e\u0ba4\u0bcd\u0ba4\u0bbf\u0baf\u0bcb\u0baa\u0bcd\u0baa\u0bbf\u0baf\u0bbe", "ER": "\u0b8e\u0bb0\u0bbf\u0b9f\u0bcd\u0bb0\u0bbf\u0baf\u0bbe", "SV": "\u0b8e\u0bb2\u0bcd \u0b9a\u0bbe\u0bb2\u0bcd\u0bb5\u0b9f\u0bbe\u0bb0\u0bcd", "EE": "\u0b8e\u0bb8\u0bcd\u0b9f\u0bcb\u0ba9\u0bbf\u0baf\u0bbe", "SZ": "\u0b8e\u0bb8\u0bcd\u0bb5\u0bbe\u0b9f\u0bcd\u0b9f\u0bc0\u0ba9\u0bbf", "YE": "\u0b8f\u0bae\u0ba9\u0bcd", "AE": "\u0b90\u0b95\u0bcd\u0b95\u0bbf\u0baf \u0b85\u0bb0\u0baa\u0bc1 \u0b8e\u0bae\u0bbf\u0bb0\u0bc7\u0b9f\u0bcd\u0bb8\u0bcd", "IM": "\u0b90\u0bb2\u0bcd \u0b86\u0b83\u0baa\u0bcd \u0bae\u0bc7\u0ba9\u0bcd", "IS": "\u0b90\u0bb8\u0bcd\u0bb2\u0bbe\u0ba8\u0bcd\u0ba4\u0bc1", "OM": "\u0b93\u0bae\u0ba9\u0bcd", "FK": "\u0b83\u0baa\u0bbe\u0b95\u0bcd\u0bb2\u0bbe\u0ba8\u0bcd\u0ba4\u0bc1 \u0ba4\u0bc0\u0bb5\u0bc1\u0b95\u0bb3\u0bcd", "FO": "\u0b83\u0baa\u0bbe\u0bb0\u0bcb \u0ba4\u0bc0\u0bb5\u0bc1\u0b95\u0bb3\u0bcd", "FJ": "\u0b83\u0baa\u0bbf\u0b9c\u0bbf", "GP": "\u0b95\u0bcd\u0bb5\u0bbe\u0ba4\u0bc7\u0bb2\u0bcb\u0baa\u0bcd", "QA": "\u0b95\u0ba4\u0bcd\u0ba4\u0bbe\u0bb0\u0bcd", "KH": "\u0b95\u0bae\u0bcd\u0baa\u0bcb\u0b9f\u0bbf\u0baf\u0bbe", "GY": "\u0b95\u0baf\u0bbe\u0ba9\u0bbe", "BQ": "\u0b95\u0bb0\u0bc0\u0baa\u0bbf\u0baf\u0ba9\u0bcd \u0ba8\u0bc6\u0ba4\u0bb0\u0bcd\u0bb2\u0bbe\u0ba8\u0bcd\u0ba4\u0bc1", "GT": "\u0b95\u0bb5\u0bc1\u0ba4\u0bae\u0bbe\u0bb2\u0bbe", "CA": "\u0b95\u0ba9\u0b9f\u0bbe", "KZ": "\u0b95\u0bb8\u0b95\u0bb8\u0bcd\u0ba4\u0bbe\u0ba9\u0bcd", "CD": "\u0b95\u0bbe\u0b99\u0bcd\u0b95\u0bcb - \u0b95\u0bbf\u0ba9\u0bcd\u0bb7\u0bbe\u0b9a\u0bbe", "CG": "\u0b95\u0bbe\u0b99\u0bcd\u0b95\u0bcb - \u0baa\u0bcd\u0bb0\u0bbe\u0bb8\u0bbe\u0bb5\u0bbf\u0bb2\u0bcd\u0bb2\u0bc7", "GM": "\u0b95\u0bbe\u0bae\u0bcd\u0baa\u0bbf\u0baf\u0bbe", "GH": "\u0b95\u0bbe\u0ba9\u0bbe", "CU": "\u0b95\u0bbf\u0baf\u0bc2\u0baa\u0bbe", "KG": "\u0b95\u0bbf\u0bb0\u0bcd\u0b95\u0bbf\u0bb8\u0bcd\u0ba4\u0bbe\u0ba9\u0bcd", "GD": "\u0b95\u0bbf\u0bb0\u0ba9\u0bc6\u0b9f\u0bbe", "KI": "\u0b95\u0bbf\u0bb0\u0bbf\u0baa\u0bbe\u0b9f\u0bcd\u0b9f\u0bbf", "GL": "\u0b95\u0bbf\u0bb0\u0bc0\u0ba9\u0bcd\u0bb2\u0bbe\u0ba8\u0bcd\u0ba4\u0bc1", "GR": "\u0b95\u0bbf\u0bb0\u0bc0\u0bb8\u0bcd", "CX": "\u0b95\u0bbf\u0bb1\u0bbf\u0bb8\u0bcd\u0ba4\u0bc1\u0bae\u0bb8\u0bcd \u0ba4\u0bc0\u0bb5\u0bc1", "GN": "\u0b95\u0bbf\u0ba9\u0bbf\u0baf\u0bbe", "GW": "\u0b95\u0bbf\u0ba9\u0bbf\u0baf\u0bbe-\u0baa\u0bbf\u0bb8\u0bcd\u0bb8\u0bbe\u0bb5\u0bcd", "CK": "\u0b95\u0bc1\u0b95\u0bcd \u0ba4\u0bc0\u0bb5\u0bc1\u0b95\u0bb3\u0bcd", "CW": "\u0b95\u0bc1\u0bb0\u0bbe\u0b95\u0bb5\u0bcd", "HR": "\u0b95\u0bc1\u0bb0\u0bcb\u0bb7\u0bbf\u0baf\u0bbe", "GU": "\u0b95\u0bc1\u0bb5\u0bbe\u0bae\u0bcd", "KW": "\u0b95\u0bc1\u0bb5\u0bc8\u0ba4\u0bcd", "KY": "\u0b95\u0bc6\u0baf\u0bcd\u0bae\u0bc6\u0ba9\u0bcd \u0ba4\u0bc0\u0bb5\u0bc1\u0b95\u0bb3\u0bcd", "GG": "\u0b95\u0bc6\u0bb0\u0bcd\u0ba9\u0bcd\u0b9a\u0bbf", "KE": "\u0b95\u0bc6\u0ba9\u0bcd\u0baf\u0bbe", "CV": "\u0b95\u0bc7\u0baa\u0bcd \u0bb5\u0bc6\u0bb0\u0bcd\u0b9f\u0bc7", "GA": "\u0b95\u0bc7\u0baa\u0bbe\u0ba9\u0bcd", "CM": "\u0b95\u0bc7\u0bae\u0bb0\u0bc2\u0ba9\u0bcd", "CO": "\u0b95\u0bca\u0bb2\u0bae\u0bcd\u0baa\u0bbf\u0baf\u0bbe", "CC": "\u0b95\u0bcb\u0b95\u0bcb\u0bb8\u0bcd (\u0b95\u0bc0\u0bb2\u0bbf\u0b99\u0bcd) \u0ba4\u0bc0\u0bb5\u0bc1\u0b95\u0bb3\u0bcd", "CI": "\u0b95\u0bcb\u0b9f\u0bcd \u0ba4\u0bbf\u2019\u0bb5\u0bbe\u0baf\u0bb0\u0bcd", "KM": "\u0b95\u0bcb\u0bae\u0bb0\u0bcb\u0bb8\u0bcd", "CR": "\u0b95\u0bcb\u0bb8\u0bcd\u0b9f\u0bbe\u0bb0\u0bbf\u0b95\u0bbe", "WS": "\u0b9a\u0bae\u0bcb\u0bb5\u0bbe", "SA": "\u0b9a\u0bb5\u0bc2\u0ba4\u0bbf \u0b85\u0bb0\u0bc7\u0baa\u0bbf\u0baf\u0bbe", "TD": "\u0b9a\u0bbe\u0b9f\u0bcd", "SB": "\u0b9a\u0bbe\u0bb2\u0bae\u0ba9\u0bcd \u0ba4\u0bc0\u0bb5\u0bc1\u0b95\u0bb3\u0bcd", "ST": "\u0b9a\u0bbe\u0bb5\u0bcd \u0ba4\u0bcb\u0bae\u0bcd & \u0baa\u0bcd\u0bb0\u0bbf\u0ba9\u0bcd\u0b9a\u0bbf\u0baa\u0bbf", "SM": "\u0b9a\u0bbe\u0ba9\u0bcd \u0bae\u0bb0\u0bbf\u0ba9\u0bcb", "SG": "\u0b9a\u0bbf\u0b99\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0bc2\u0bb0\u0bcd", "SL": "\u0b9a\u0bbf\u0baf\u0bbe\u0bb0\u0bbe \u0bb2\u0bbf\u0baf\u0bcb\u0ba9\u0bcd", "SY": "\u0b9a\u0bbf\u0bb0\u0bbf\u0baf\u0bbe", "CL": "\u0b9a\u0bbf\u0bb2\u0bbf", "SX": "\u0b9a\u0bbf\u0ba9\u0bcd\u0b9f\u0bcd \u0bae\u0bbe\u0bb0\u0bcd\u0b9f\u0bc6\u0ba9\u0bcd", "CN": "\u0b9a\u0bc0\u0ba9\u0bbe", "SC": "\u0b9a\u0bc0\u0bb7\u0bc6\u0bb2\u0bcd\u0bb8\u0bcd", "SR": "\u0b9a\u0bc1\u0bb0\u0bbf\u0ba9\u0bbe\u0bae\u0bcd", "SD": "\u0b9a\u0bc2\u0b9f\u0bbe\u0ba9\u0bcd", "CZ": "\u0b9a\u0bc6\u0b9a\u0bbf\u0baf\u0bbe", "KN": "\u0b9a\u0bc6\u0baf\u0bbf\u0ba9\u0bcd\u0b9f\u0bcd \u0b95\u0bbf\u0b9f\u0bcd\u0bb8\u0bcd & \u0ba8\u0bc6\u0bb5\u0bbf\u0bb8\u0bcd", "BL": "\u0b9a\u0bc6\u0baf\u0bbf\u0ba9\u0bcd\u0b9f\u0bcd \u0baa\u0bbe\u0bb0\u0bcd\u0ba4\u0bc7\u0bb2\u0bc6\u0bae\u0bbf", "PM": "\u0b9a\u0bc6\u0baf\u0bbf\u0ba9\u0bcd\u0b9f\u0bcd \u0baa\u0bbf\u0baf\u0bb0\u0bcd & \u0bae\u0bbf\u0b95\u0bcd\u0bb5\u0bc7\u0bb2\u0bbe\u0ba9\u0bcd", "MF": "\u0b9a\u0bc6\u0baf\u0bbf\u0ba9\u0bcd\u0b9f\u0bcd \u0bae\u0bbe\u0bb0\u0bcd\u0b9f\u0bcd\u0b9f\u0bc0\u0ba9\u0bcd", "LC": "\u0b9a\u0bc6\u0baf\u0bbf\u0ba9\u0bcd\u0b9f\u0bcd \u0bb2\u0bc2\u0b9a\u0bbf\u0baf\u0bbe", "VC": "\u0b9a\u0bc6\u0baf\u0bbf\u0ba9\u0bcd\u0b9f\u0bcd \u0bb5\u0bbf\u0ba9\u0bcd\u0b9a\u0bc6\u0ba9\u0bcd\u0b9f\u0bcd & \u0b95\u0bbf\u0bb0\u0bc6\u0ba9\u0b9f\u0bc8\u0ba9\u0bcd\u0bb8\u0bcd", "SH": "\u0b9a\u0bc6\u0baf\u0bbf\u0ba9\u0bcd\u0b9f\u0bcd \u0bb9\u0bc6\u0bb2\u0bc6\u0ba9\u0bbe", "RS": "\u0b9a\u0bc6\u0bb0\u0bcd\u0baa\u0bbf\u0baf\u0bbe", "SN": "\u0b9a\u0bc6\u0ba9\u0bc6\u0b95\u0bb2\u0bcd", "CY": "\u0b9a\u0bc8\u0baa\u0bcd\u0bb0\u0bb8\u0bcd", "SO": "\u0b9a\u0bcb\u0bae\u0bbe\u0bb2\u0bbf\u0baf\u0bbe", "TC": "\u0b9f\u0bb0\u0bcd\u0b95\u0bcd\u0bb8\u0bcd & \u0b95\u0bc8\u0b95\u0bcb\u0bb8\u0bcd \u0ba4\u0bc0\u0bb5\u0bc1\u0b95\u0bb3\u0bcd", "TT": "\u0b9f\u0bbf\u0bb0\u0bbf\u0ba9\u0bbf\u0b9f\u0bbe\u0b9f\u0bcd & \u0b9f\u0bca\u0baa\u0bbe\u0b95\u0bcb", "TN": "\u0b9f\u0bc1\u0ba9\u0bbf\u0b9a\u0bbf\u0baf\u0bbe", "DK": "\u0b9f\u0bc6\u0ba9\u0bcd\u0bae\u0bbe\u0bb0\u0bcd\u0b95\u0bcd", "DO": "\u0b9f\u0bca\u0bae\u0bbf\u0ba9\u0bbf\u0b95\u0ba9\u0bcd \u0b95\u0bc1\u0b9f\u0bbf\u0baf\u0bb0\u0b9a\u0bc1", "DM": "\u0b9f\u0bca\u0bae\u0bbf\u0ba9\u0bbf\u0b95\u0bbe", "TK": "\u0b9f\u0bcb\u0b95\u0bc7\u0bb2\u0bcb", "TG": "\u0b9f\u0bcb\u0b95\u0bcb", "TO": "\u0b9f\u0bcb\u0b99\u0bcd\u0b95\u0bbe", "TJ": "\u0ba4\u0b9c\u0bbf\u0b95\u0bbf\u0bb8\u0bcd\u0ba4\u0bbe\u0ba9\u0bcd", "TH": "\u0ba4\u0bbe\u0baf\u0bcd\u0bb2\u0bbe\u0ba8\u0bcd\u0ba4\u0bc1", "TZ": "\u0ba4\u0bbe\u0ba9\u0bcd\u0b9a\u0bbe\u0ba9\u0bbf\u0baf\u0bbe", "TL": "\u0ba4\u0bbf\u0bae\u0bcb\u0bb0\u0bcd-\u0bb2\u0bc6\u0bb8\u0bcd\u0ba4\u0bc7", "TM": "\u0ba4\u0bc1\u0bb0\u0bcd\u0b95\u0bcd\u0bae\u0bc6\u0ba9\u0bbf\u0bb8\u0bcd\u0ba4\u0bbe\u0ba9\u0bcd", "TR": "\u0ba4\u0bc1\u0bb0\u0bc1\u0b95\u0bcd\u0b95\u0bbf", "SS": "\u0ba4\u0bc6\u0bb1\u0bcd\u0b95\u0bc1 \u0b9a\u0bc2\u0b9f\u0bbe\u0ba9\u0bcd", "GS": "\u0ba4\u0bc6\u0bb1\u0bcd\u0b95\u0bc1 \u0b9c\u0bbe\u0bb0\u0bcd\u0b9c\u0bbf\u0baf\u0bbe \u0bae\u0bb1\u0bcd\u0bb1\u0bc1\u0bae\u0bcd \u0ba4\u0bc6\u0bb1\u0bcd\u0b95\u0bc1 \u0b9a\u0bbe\u0ba3\u0bcd\u0b9f\u0bcd\u0bb5\u0bbf\u0b9a\u0bcd \u0ba4\u0bc0\u0bb5\u0bc1\u0b95\u0bb3\u0bcd", "ZA": "\u0ba4\u0bc6\u0ba9\u0bcd \u0b86\u0baa\u0bcd\u0baa\u0bbf\u0bb0\u0bbf\u0b95\u0bcd\u0b95\u0bbe", "KR": "\u0ba4\u0bc6\u0ba9\u0bcd \u0b95\u0bca\u0bb0\u0bbf\u0baf\u0bbe", "TW": "\u0ba4\u0bc8\u0bb5\u0bbe\u0ba9\u0bcd", "NA": "\u0ba8\u0bae\u0bc0\u0baa\u0bbf\u0baf\u0bbe", "NF": "\u0ba8\u0bbe\u0bb0\u0bcd\u0b83\u0baa\u0bcb\u0b95\u0bcd \u0ba4\u0bc0\u0bb5\u0bc1", "NO": "\u0ba8\u0bbe\u0bb0\u0bcd\u0bb5\u0bc7", "NI": "\u0ba8\u0bbf\u0b95\u0bb0\u0b95\u0bc1\u0bb5\u0bbe", "NU": "\u0ba8\u0bbf\u0baf\u0bc1\u0bb5\u0bc7", "NC": "\u0ba8\u0bbf\u0baf\u0bc2 \u0b95\u0bc7\u0bb2\u0bbf\u0b9f\u0bcb\u0ba9\u0bbf\u0baf\u0bbe", "NZ": "\u0ba8\u0bbf\u0baf\u0bc2\u0b9a\u0bbf\u0bb2\u0bbe\u0ba8\u0bcd\u0ba4\u0bc1", "NL": "\u0ba8\u0bc6\u0ba4\u0bb0\u0bcd\u0bb2\u0bbe\u0ba8\u0bcd\u0ba4\u0bc1", "NP": "\u0ba8\u0bc7\u0baa\u0bbe\u0bb3\u0bae\u0bcd", "NE": "\u0ba8\u0bc8\u0b9c\u0bb0\u0bcd", "NG": "\u0ba8\u0bc8\u0b9c\u0bc0\u0bb0\u0bbf\u0baf\u0bbe", "NR": "\u0ba8\u0bcc\u0bb0\u0bc1", "BD": "\u0baa\u0b99\u0bcd\u0b95\u0bb3\u0bbe\u0ba4\u0bc7\u0bb7\u0bcd", "PG": "\u0baa\u0baa\u0bcd\u0baa\u0bc1\u0bb5\u0bbe \u0ba8\u0bbf\u0baf\u0bc2 \u0b95\u0bbf\u0ba9\u0bbf\u0baf\u0bbe", "PY": "\u0baa\u0bb0\u0bbe\u0b95\u0bc1\u0bb5\u0bc7", "BG": "\u0baa\u0bb2\u0bcd\u0b95\u0bc7\u0bb0\u0bbf\u0baf\u0bbe", "PA": "\u0baa\u0ba9\u0bbe\u0bae\u0bbe", "BH": "\u0baa\u0bb9\u0bcd\u0bb0\u0bc8\u0ba9\u0bcd", "BS": "\u0baa\u0bb9\u0bbe\u0bae\u0bbe\u0bb8\u0bcd", "PK": "\u0baa\u0bbe\u0b95\u0bbf\u0bb8\u0bcd\u0ba4\u0bbe\u0ba9\u0bcd", "BB": "\u0baa\u0bbe\u0bb0\u0bcd\u0baa\u0b9f\u0bbe\u0bb8\u0bcd", "PW": "\u0baa\u0bbe\u0bb2\u0bcb", "PN": "\u0baa\u0bbf\u0b9f\u0bcd\u0b95\u0bc6\u0baf\u0bcd\u0bb0\u0bcd\u0ba9\u0bcd \u0ba4\u0bc0\u0bb5\u0bc1\u0b95\u0bb3\u0bcd", "PR": "\u0baa\u0bbf\u0baf\u0bc2\u0bb0\u0bcd\u0b9f\u0bcb \u0bb0\u0bbf\u0b95\u0bcb", "FR": "\u0baa\u0bbf\u0bb0\u0bbe\u0ba9\u0bcd\u0bb8\u0bcd", "IO": "\u0baa\u0bbf\u0bb0\u0bbf\u0b9f\u0bcd\u0b9f\u0bbf\u0bb7\u0bcd \u0b87\u0ba8\u0bcd\u0ba4\u0bbf\u0baf\u0baa\u0bcd \u0baa\u0bc6\u0bb0\u0bc1\u0b99\u0bcd\u0b95\u0b9f\u0bb2\u0bcd \u0baa\u0bbf\u0bb0\u0ba4\u0bc7\u0b9a\u0bae\u0bcd", "VG": "\u0baa\u0bbf\u0bb0\u0bbf\u0b9f\u0bcd\u0b9f\u0bc0\u0bb7\u0bcd \u0b95\u0ba9\u0bcd\u0ba9\u0bbf\u0ba4\u0bcd \u0ba4\u0bc0\u0bb5\u0bc1\u0b95\u0bb3\u0bcd", "GF": "\u0baa\u0bbf\u0bb0\u0bc6\u0b9e\u0bcd\u0b9a\u0bc1 \u0b95\u0baf\u0bbe\u0ba9\u0bbe", "TF": "\u0baa\u0bbf\u0bb0\u0bc6\u0b9e\u0bcd\u0b9a\u0bc1 \u0ba4\u0bc6\u0bb1\u0bcd\u0b95\u0bc1 \u0baa\u0bbf\u0bb0\u0ba4\u0bc7\u0b9a\u0b99\u0bcd\u0b95\u0bb3\u0bcd", "PF": "\u0baa\u0bbf\u0bb0\u0bc6\u0b9e\u0bcd\u0b9a\u0bc1 \u0baa\u0bbe\u0bb2\u0bbf\u0ba9\u0bc7\u0bb7\u0bbf\u0baf\u0bbe", "BR": "\u0baa\u0bbf\u0bb0\u0bc7\u0b9a\u0bbf\u0bb2\u0bcd", "PH": "\u0baa\u0bbf\u0bb2\u0bbf\u0baa\u0bcd\u0baa\u0bc8\u0ba9\u0bcd\u0bb8\u0bcd", "FI": "\u0baa\u0bbf\u0ba9\u0bcd\u0bb2\u0bbe\u0ba8\u0bcd\u0ba4\u0bc1", "BF": "\u0baa\u0bc1\u0bb0\u0bcd\u0b95\u0bbf\u0ba9\u0bbe \u0b83\u0baa\u0bbe\u0bb8\u0bcb", "BI": "\u0baa\u0bc1\u0bb0\u0bc1\u0ba3\u0bcd\u0b9f\u0bbf", "BN": "\u0baa\u0bc1\u0bb0\u0bc1\u0ba9\u0bc7", "BT": "\u0baa\u0bc2\u0b9f\u0bbe\u0ba9\u0bcd", "BM": "\u0baa\u0bc6\u0bb0\u0bcd\u0bae\u0bc1\u0b9f\u0bbe", "PE": "\u0baa\u0bc6\u0bb0\u0bc1", "BE": "\u0baa\u0bc6\u0bb2\u0bcd\u0b9c\u0bbf\u0baf\u0bae\u0bcd", "BY": "\u0baa\u0bc6\u0bb2\u0bbe\u0bb0\u0bb8\u0bcd", "BZ": "\u0baa\u0bc6\u0bb2\u0bbf\u0bb8\u0bcd", "BJ": "\u0baa\u0bc6\u0ba9\u0bbf\u0ba9\u0bcd", "BO": "\u0baa\u0bca\u0bb2\u0bbf\u0bb5\u0bbf\u0baf\u0bbe", "BV": "\u0baa\u0bca\u0bb5\u0bc7\u0b9f\u0bcd \u0ba4\u0bc0\u0bb5\u0bc1", "BW": "\u0baa\u0bcb\u0b9f\u0bcd\u0bb8\u0bcd\u0bb5\u0bbe\u0ba9\u0bbe", "PT": "\u0baa\u0bcb\u0bb0\u0bcd\u0b9a\u0bcd\u0b9a\u0bc1\u0b95\u0bcd\u0b95\u0bb2\u0bcd", "PL": "\u0baa\u0bcb\u0bb2\u0ba8\u0bcd\u0ba4\u0bc1", "BA": "\u0baa\u0bcb\u0bb8\u0bcd\u0ba9\u0bbf\u0baf\u0bbe & \u0bb9\u0bc6\u0bb0\u0bcd\u0bb8\u0b95\u0bcb\u0bb5\u0bbf\u0ba9\u0bbe", "MO": "\u0bae\u0b95\u0bbe\u0bb5\u0bcd \u0b8e\u0bb8\u0bcd\u0b8f\u0b86\u0bb0\u0bcd \u0b9a\u0bc0\u0ba9\u0bbe", "MN": "\u0bae\u0b99\u0bcd\u0b95\u0bcb\u0bb2\u0bbf\u0baf\u0bbe", "MG": "\u0bae\u0b9f\u0b95\u0bbe\u0bb8\u0bcd\u0b95\u0bb0\u0bcd", "CF": "\u0bae\u0ba4\u0bcd\u0ba4\u0bbf\u0baf \u0b86\u0baa\u0bcd\u0bb0\u0bbf\u0b95\u0bcd\u0b95\u0b95\u0bcd \u0b95\u0bc1\u0b9f\u0bbf\u0baf\u0bb0\u0b9a\u0bc1", "YT": "\u0bae\u0baf\u0bcb\u0b9f\u0bcd", "MW": "\u0bae\u0bb2\u0bbe\u0bb5\u0bbf", "MY": "\u0bae\u0bb2\u0bc7\u0b9a\u0bbf\u0baf\u0bbe", "MS": "\u0bae\u0bbe\u0ba3\u0bcd\u0b9f\u0bcd\u0b9a\u0bc6\u0bb0\u0bbe\u0b9f\u0bcd", "MQ": "\u0bae\u0bbe\u0bb0\u0bcd\u0b9f\u0bbf\u0ba9\u0bbf\u0b95\u0bcd", "MT": "\u0bae\u0bbe\u0bb2\u0bcd\u0b9f\u0bbe", "MD": "\u0bae\u0bbe\u0bb2\u0bcd\u0b9f\u0bcb\u0bb5\u0bbe", "MV": "\u0bae\u0bbe\u0bb2\u0ba4\u0bcd\u0ba4\u0bc0\u0bb5\u0bc1", "ML": "\u0bae\u0bbe\u0bb2\u0bbf", "ME": "\u0bae\u0bbe\u0ba9\u0bcd\u0b9f\u0bc7\u0ba9\u0bc6\u0b95\u0bcd\u0bb0\u0bcb", "MM": "\u0bae\u0bbf\u0baf\u0bbe\u0ba9\u0bcd\u0bae\u0bbe\u0bb0\u0bcd (\u0baa\u0bb0\u0bcd\u0bae\u0bbe)", "MX": "\u0bae\u0bc6\u0b95\u0bcd\u0b9a\u0bbf\u0b95\u0bcb", "EH": "\u0bae\u0bc7\u0bb1\u0bcd\u0b95\u0bc1 \u0b9a\u0bb9\u0bbe\u0bb0\u0bbe", "MZ": "\u0bae\u0bca\u0b9a\u0bbe\u0bae\u0bcd\u0baa\u0bbf\u0b95\u0bcd", "MA": "\u0bae\u0bca\u0bb0\u0bbe\u0b95\u0bcd\u0b95\u0bcb", "MU": "\u0bae\u0bca\u0bb0\u0bbf\u0b9a\u0bbf\u0baf\u0bb8\u0bcd", "MC": "\u0bae\u0bca\u0ba9\u0bbe\u0b95\u0bcd\u0b95\u0bcb", "MR": "\u0bae\u0bcc\u0bb0\u0bbf\u0b9f\u0bbe\u0ba9\u0bbf\u0baf\u0bbe", "GB": "\u0baf\u0bc1\u0ba9\u0bc8\u0b9f\u0bc6\u0b9f\u0bcd \u0b95\u0bbf\u0b99\u0bcd\u0b9f\u0bae\u0bcd", "VI": "\u0baf\u0bc2.\u0b8e\u0bb8\u0bcd. \u0b95\u0ba9\u0bcd\u0ba9\u0bbf\u0ba4\u0bcd \u0ba4\u0bc0\u0bb5\u0bc1\u0b95\u0bb3\u0bcd", "RU": "\u0bb0\u0bb7\u0bcd\u0baf\u0bbe", "RE": "\u0bb0\u0bc0\u0baf\u0bc2\u0ba9\u0bbf\u0baf\u0ba9\u0bcd", "RO": "\u0bb0\u0bc1\u0bae\u0bc7\u0ba9\u0bbf\u0baf\u0bbe", "RW": "\u0bb0\u0bc1\u0bb5\u0bbe\u0ba3\u0bcd\u0b9f\u0bbe", "LU": "\u0bb2\u0b95\u0bcd\u0bb8\u0bcd\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcd\u0b95\u0bcd", "LV": "\u0bb2\u0bbe\u0b9f\u0bcd\u0bb5\u0bbf\u0baf\u0bbe", "LA": "\u0bb2\u0bbe\u0bb5\u0bcb\u0bb8\u0bcd", "LI": "\u0bb2\u0bbf\u0b9a\u0bcd\u0b9a\u0bc6\u0ba3\u0bcd\u0bb8\u0bcd\u0b9f\u0bc6\u0baf\u0bcd\u0ba9\u0bcd", "LT": "\u0bb2\u0bbf\u0ba4\u0bc1\u0bb5\u0bc7\u0ba9\u0bbf\u0baf\u0bbe", "LY": "\u0bb2\u0bbf\u0baa\u0bbf\u0baf\u0bbe", "LS": "\u0bb2\u0bc6\u0b9a\u0bcb\u0ba4\u0bcb", "LB": "\u0bb2\u0bc6\u0baa\u0ba9\u0bbe\u0ba9\u0bcd", "LR": "\u0bb2\u0bc8\u0baa\u0bc0\u0bb0\u0bbf\u0baf\u0bbe", "KP": "\u0bb5\u0b9f \u0b95\u0bca\u0bb0\u0bbf\u0baf\u0bbe", "MK": "\u0bb5\u0b9f\u0b95\u0bcd\u0b95\u0bc1 \u0bae\u0bbe\u0b9a\u0bbf\u0b9f\u0bcb\u0ba9\u0bbf\u0baf\u0bbe", "VU": "\u0bb5\u0ba9\u0bc1\u0bb5\u0bbe\u0b9f\u0bcd\u0b9f\u0bc1", "VA": "\u0bb5\u0bbe\u0b9f\u0bbf\u0b95\u0ba9\u0bcd \u0ba8\u0b95\u0bb0\u0bae\u0bcd", "WF": "\u0bb5\u0bbe\u0bb2\u0bbf\u0bb8\u0bcd \u0bae\u0bb1\u0bcd\u0bb1\u0bc1\u0bae\u0bcd \u0b83\u0baa\u0bc1\u0b9f\u0bc1\u0ba9\u0bbe", "VN": "\u0bb5\u0bbf\u0baf\u0b9f\u0bcd\u0ba8\u0bbe\u0bae\u0bcd", "VE": "\u0bb5\u0bc6\u0ba9\u0bbf\u0b9a\u0bc1\u0bb2\u0bbe", "JP": "\u0b9c\u0baa\u0bcd\u0baa\u0bbe\u0ba9\u0bcd", "JM": "\u0b9c\u0bae\u0bc8\u0b95\u0bbe", "ZM": "\u0b9c\u0bbe\u0bae\u0bcd\u0baa\u0bbf\u0baf\u0bbe", "GE": "\u0b9c\u0bbe\u0bb0\u0bcd\u0b9c\u0bbf\u0baf\u0bbe", "GI": "\u0b9c\u0bbf\u0baa\u0bcd\u0bb0\u0bbe\u0bb2\u0bcd\u0b9f\u0bb0\u0bcd", "DJ": "\u0b9c\u0bbf\u0baa\u0bcc\u0b9f\u0bcd\u0b9f\u0bbf", "ZW": "\u0b9c\u0bbf\u0bae\u0bcd\u0baa\u0bbe\u0baa\u0bcd\u0bb5\u0bc7", "DE": "\u0b9c\u0bc6\u0bb0\u0bcd\u0bae\u0ba9\u0bbf", "JO": "\u0b9c\u0bcb\u0bb0\u0bcd\u0b9f\u0bbe\u0ba9\u0bcd", "ES": "\u0bb8\u0bcd\u0baa\u0bc6\u0baf\u0bbf\u0ba9\u0bcd", "SK": "\u0bb8\u0bcd\u0bb2\u0bcb\u0bb5\u0bbe\u0b95\u0bbf\u0baf\u0bbe", "SI": "\u0bb8\u0bcd\u0bb2\u0bcb\u0bb5\u0bc7\u0ba9\u0bbf\u0baf\u0bbe", "SJ": "\u0bb8\u0bcd\u0bb5\u0bb2\u0bcd\u0baa\u0bbe\u0bb0\u0bcd\u0b9f\u0bc1 & \u0b9c\u0bbe\u0ba9\u0bcd \u0bae\u0bc7\u0baf\u0ba9\u0bcd", "CH": "\u0bb8\u0bcd\u0bb5\u0bbf\u0b9f\u0bcd\u0b9a\u0bb0\u0bcd\u0bb2\u0bbe\u0ba8\u0bcd\u0ba4\u0bc1", "SE": "\u0bb8\u0bcd\u0bb5\u0bc0\u0b9f\u0ba9\u0bcd", "HU": "\u0bb9\u0b99\u0bcd\u0b95\u0bc7\u0bb0\u0bbf", "HK": "\u0bb9\u0bbe\u0b99\u0bcd\u0b95\u0bbe\u0b99\u0bcd \u0b8e\u0bb8\u0bcd\u0b8f\u0b86\u0bb0\u0bcd \u0b9a\u0bc0\u0ba9\u0bbe", "HM": "\u0bb9\u0bc7\u0bb0\u0bcd\u0b9f\u0bcd \u0bae\u0bb1\u0bcd\u0bb1\u0bc1\u0bae\u0bcd \u0bae\u0bc6\u0b95\u0bcd\u0b9f\u0bca\u0ba9\u0bbe\u0bb2\u0bcd\u0b9f\u0bc1 \u0ba4\u0bc0\u0bb5\u0bc1\u0b95\u0bb3\u0bcd", "HT": "\u0bb9\u0bc8\u0b9f\u0bcd\u0b9f\u0bbf", "HN": "\u0bb9\u0bcb\u0ba3\u0bcd\u0b9f\u0bc2\u0bb0\u0bbe\u0bb8\u0bcd"} \ No newline at end of file From 3d8f3b4b620fa1b89440e653c4b28657e4b1dad1 Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Wed, 12 Feb 2025 14:32:54 +1100 Subject: [PATCH 04/17] Update docs to 90+% translated locales --- docs/build.sh | 2 +- docs/source/conf.py | 11 ++++------- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/docs/build.sh b/docs/build.sh index 3c52d283..00becc19 100755 --- a/docs/build.sh +++ b/docs/build.sh @@ -3,7 +3,7 @@ VERSION=$(cat ../cli/onionshare_cli/resources/version.txt) # Supported locales -LOCALES="en fr de el ja pl ru es tr uk vi" +LOCALES="en sq bg zh_Hans de el ga ja pl ru es tr uk" # Generate English .po files make gettext diff --git a/docs/source/conf.py b/docs/source/conf.py index 0b64a078..21e4b6be 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -8,21 +8,18 @@ exclude_patterns = [] languages = [ ("English", "en"), # English - ("Français", "fr"), # French + ("Shqip", "sq"), # Albanian + ("Български", "bg"), #Bulgarian + ("中文 (简体)", "zh_Hans"), # Simplified Chinese ("Deutsch", "de"), # German ("Ελληνικά", "el"), # Greek - # ("Italiano", "it"), # Italian + ("Gaeilge", "ga"), # Irish ("日本語", "ja"), # Japanese - # ("ភាសាខ្មែរ", "km"), # Khmer (Central) - # ("Norsk Bokmål", "nb_NO"), # Norwegian Bokmål ("Polish", "pl"), # Polish - # ("Portuguese (Brazil)", "pt_BR"), # Portuguese (Brazil)) ("Русский", "ru"), # Russian ("Español", "es"), # Spanish - # ("Svenska", "sv"), # Swedish ("Türkçe", "tr"), # Turkish ("Українська", "uk"), # Ukrainian - ("Tiếng Việt", "vi"), # Vietnamese ] versions = ["2.3", "2.3.1", "2.3.2", "2.3.3", "2.4", "2.5", "2.6", "2.6.1", "2.6.2", "2.6.3"] From a269ae47019976366e386a596711cdec48d6aee0 Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Wed, 12 Feb 2025 14:33:41 +1100 Subject: [PATCH 05/17] Rebuild docs with latest 90%+ locales --- docs/gettext/.doctrees/advanced.doctree | Bin 46395 -> 46437 bytes docs/gettext/.doctrees/develop.doctree | Bin 35492 -> 35506 bytes docs/gettext/.doctrees/environment.pickle | Bin 328382 -> 46871 bytes docs/gettext/.doctrees/features.doctree | Bin 46721 -> 46737 bytes docs/gettext/.doctrees/help.doctree | Bin 7369 -> 7384 bytes docs/gettext/.doctrees/index.doctree | Bin 3552 -> 3567 bytes docs/gettext/.doctrees/install.doctree | Bin 57993 -> 58190 bytes docs/gettext/.doctrees/security.doctree | Bin 11476 -> 11491 bytes docs/gettext/.doctrees/tor.doctree | Bin 40788 -> 40806 bytes docs/gettext/advanced.pot | 4 +- docs/gettext/develop.pot | 4 +- docs/gettext/features.pot | 4 +- docs/gettext/help.pot | 4 +- docs/gettext/index.pot | 4 +- docs/gettext/install.pot | 14 +- docs/gettext/security.pot | 4 +- docs/gettext/sphinx.pot | 4 +- docs/gettext/tor.pot | 4 +- .../locale/zh_Hans/LC_MESSAGES/advanced.po | 353 ++++++++++++++ .../locale/zh_Hans/LC_MESSAGES/develop.po | 189 ++++++++ .../locale/zh_Hans/LC_MESSAGES/features.po | 442 ++++++++++++++++++ .../source/locale/zh_Hans/LC_MESSAGES/help.po | 70 +++ .../locale/zh_Hans/LC_MESSAGES/index.po | 31 ++ .../locale/zh_Hans/LC_MESSAGES/install.po | 433 +++++++++++++++++ .../locale/zh_Hans/LC_MESSAGES/security.po | 105 +++++ .../locale/zh_Hans/LC_MESSAGES/sphinx.po | 29 ++ docs/source/locale/zh_Hans/LC_MESSAGES/tor.po | 374 +++++++++++++++ 27 files changed, 2049 insertions(+), 23 deletions(-) create mode 100644 docs/source/locale/zh_Hans/LC_MESSAGES/advanced.po create mode 100644 docs/source/locale/zh_Hans/LC_MESSAGES/develop.po create mode 100644 docs/source/locale/zh_Hans/LC_MESSAGES/features.po create mode 100644 docs/source/locale/zh_Hans/LC_MESSAGES/help.po create mode 100644 docs/source/locale/zh_Hans/LC_MESSAGES/index.po create mode 100644 docs/source/locale/zh_Hans/LC_MESSAGES/install.po create mode 100644 docs/source/locale/zh_Hans/LC_MESSAGES/security.po create mode 100644 docs/source/locale/zh_Hans/LC_MESSAGES/sphinx.po create mode 100644 docs/source/locale/zh_Hans/LC_MESSAGES/tor.po diff --git a/docs/gettext/.doctrees/advanced.doctree b/docs/gettext/.doctrees/advanced.doctree index c58bb9f004e854e4215f53781046e2b6c3d35cd2..da2cb3f10604f7ff47004d9e7349ea98a15cd9ed 100644 GIT binary patch delta 2552 zcmZWqZRnm=8Q=Z<*Ounmn)pJSd+vW^7FIhi*E#1p%Pc_+63rkCjJD2oUi!Dt*>Y;3 z(7w&FTzIe0YQ?hEX8K_})`v8aNQflA1Vuyyf)s;9NOHYE{hnE{vFCy3h6k?ux~|{b z_4KLP%co|mzw)N9-+p5C;bERktu^@A5))NorK54#azU|RG)0FIk_lR z^&J;%!0T(%-m0W*&Qug}RJmkNitt;D^n(}vXfZ^UnoVL+OgWOY%8pc4p+*d$`|TIq zIE-v`=9*%WOjHs@@-`Ne&7vw~)1O=S3f88OL|JRS))b73Mv-{Wi@6@TdL;&|mJhB?;CF6(5gqi9J&RSi42 zYK*Cx`V;TEXjnGIvrRT;f`~Opg9M_Exdb>s6CIkqaM_mW^{XBppo^_{%${vP*ZauM%@f1mnunY3QECdk-bX&Kks>B7!$b0S49UJ07&vsr2@8= zxS_PaaP>c-A#Z}pslkN}f`*G?6A;p{18_Fe%kO`56h}J8YOBTq0*TiK@z|JLYtWYT z?`-v}$D(y)P~|`?VS#9Lp&X(&tbNL*zh>uP)HLm+xal5{x!hD#6YzYMQCrK2vh6tM$kXKzvN&18QYj{Z;rz#Zc zybv$;2wt#6_DZo!wcoStN}yG3)CnFZC=HH9az!>Ava33W;``Gd_%?=@lC7>9v_U0! zPcD%WFm@4S)z#_V5B_T`$P~;_vWfwrQlkV%Vu5VZB$E2W*Y01~QoL#<6vn?+H)d@T zG>oSf&$(ao;n(J4tqM)f#6ckJhDb#ePzIihe$;RM%;sSvV+vDgP?%7o!rWR(H3vkX zVPJY7eGkzSk#JQN*aD*B#K~X?<4r>_GyCb5{OSnhdMh>*VZ2CF3W>Ey)xjpDneN-m zhNU?YnN>=`Akzs!n>-%C3adm%t$+2ikE|V`Y-0p{0KeuAf|h z9AFE?OGHM2B$1e`1f3E0#si7I=}QNpttY`^oNR~A_LOpb+(36vs7AVm&0A_Yh^n125^emacGG0qjT87qV7m@qUG zCsz;fgJW>3=!=0>&!P%HozIKgj}>P!fU|`~XnU z+JE!idtqs4y*Mz|oWaq9UK%JWre`@ z`u3yShGj?qvx7FwLI~ezGT`$@DGMM}J+ECD`X7IA`E0}PUAykyao6tJK6l@t1H;xs z)8CGLbmP7Q>%Lg?-FNP}W5<1M*X}zG?du;uJ`TfmefQ&kpAGx^&L{t{G<ubq~ExMkYh-!@%;a{iWMYget>BRh}dF@5dC@^tXz4YOaK zTk-t=D>e>4pSJc*=hfWPubsVgZq1+0u37)o`8BsaMYDgOTl0^zYqs`F*Ib90cOILD HA8-3F^KkF_ delta 2457 zcmZWrU8ts26+Z8Gj&n4W5&w#gp6?yeEQV_Bz1RL(qfG``!Ju{_B~jY`^>9RItjvlL z@~Rw6!FLL+CYfr+CiP-wt59kT^mCEqO`t>sB8W1ecwx?97xjEsGtk9%vH8}1-)BAR zd7kyYeq#3AiP_5c&-yVPT{$q!mG-JQE6ob!}tk#-$s}8<%Z-d}Dpr)_(cw`fP5scD_d3HY`zMh~mWwJEgPD zrr&zb`NJr!hy;~{Byi0l6pe7O*`+|b`u@-do)|`7ic4835ns54CLF7;%H$06F~cgmbk?n#2Q7cLaAhJj{T(zUk1^V zskGuT0K*B$f@-ZPm0iYFCH+qqUp&lf@{NtkEmkfXP=XFhYh0q3bMB`uxezY|dSzV3 zY#Zm|f(Y;kTMnugX?^>LX3L`#@)rG6t1OdpG5M5>sx4bg4|H9>_6}fyx@TnipHKn@M<%qa zf(22nANi;QDOIFKiV~7z>z&jVm4{x$l$@RI|NYpL!|1pGlgrtJ1nM9`4TUzXDtqXJ z`-|J(hlbdLQy_F%G5IXy*;G-w+S;u5)9asjbSye}TQgDdm6fu|8rC`oQ%w-1bpORC z-O9Ld1N`lhbq;fHN$_C9P=>b>TI%nb`NGjD2HikLu`Cc|GYtjRvt{Z!5A;%PJ zhDS^$&duSp7=K|;Xqu?+^7CQtLab4XrK<6__YxbCui8f+N#}ll_}efhrz#rM35+w8 zm8_y_OD(J@N3#9fJFXl?n==dsy+dkjEJO3vdO<{yB@BHYJ5xQ{)1-!86finxemRPfZQCAKxjLy#;m9Wm?f#=ryKG+coc>~85xKih)^^KL=_xrLIK64-%`$B zo@)@F$Q!3(Mt~KG1u0(<$)arJ{-fI-SsgLv%-M!UVvyWOSw&8P9D!&Y#eUuHXU`cK z53$j>29dCo3^1Y@!3jSW7`d-~_o0BtmS`?|ks>)zJhZ7?m(nVv~!wngjL%7D@oj+V}qC_n0%fbE#ou5LJsV8Eh=r zPD4sCRPJAT*0(S=8-#qZ*fDCCRi6@6ZLUuvnfI3m@W2C)CeW-Yi89q51tz4iLf9M_%TJ8LlX1~lU4*jz7JZP zK6B`*e)Ly&4cinn=#XhxMHL?egwKK&94~fEOU>5minGUJBE2P9?K>p zOI%|wFlI?Cj&O3>@#4YDYnwlqb|0Siwa5QGOqU<|!bQ7=2hRIu&ELB7?mKS%PTT#B zJNEAy`raesFnqcn`0abM8IJp(`sea+{j}%kq1h9wlltlUwBFAielzVncH`NHSC^LV zPMeQUd;1mB?~YwJ`^)KyKca$Wo5!cE&s;L??q{7@oMx|{F8tS-g*QHZM&VbVzIpck R>B5tz3)hCj)Ana}{12Yu;Q9an diff --git a/docs/gettext/.doctrees/develop.doctree b/docs/gettext/.doctrees/develop.doctree index 81f0bf1dd95bc9297457e22c4db5b548baba3e45..a127cd8fd7e8967a3c5ebadc8a90ab768b95f609 100644 GIT binary patch delta 1257 zcmYk5OK6=%6vy*@_l8O(wInK)w7H*)E_{^CNr+ei|*$(8s@ zf#E<|@TFz3ww{Qm#*$zgrA?8_Hla@`njm}v${M`r2FL%bn*a_1383f=NUNN6fHo_QWV02ab#u@6 zCi{1_-_G699?gB&}g;5mFaYMkSjgupm!LM5Gc32qD?-om02X4ty@YFkO(OSaAxj1jpSmd9tXx>t{Z! z8k0q`Dgtpw0Bu6D3`J|usGP&ly*fBsH97@tgpOFGg-F3mhMI)o3W3F__Pge=3C=kU z%4(7VQV@>C=j4SIK8PHBH@^Eszu_8)QAzYXp>c)0kp?j4qNelO?&Gsxo*RU~YFV!F zQ)${Ia#m?$QUD(_b!$(&SvOcjpp@7b%Sbsf+8ZPXo~KI?UAyqquZ`t8o3+x!zOn6| z-R1#Iv^s#6p*!{TLv>?a1}jYzG6M5T?4&f3k1C^cDt6;%#|w?+%pfS0CZ zNvihk(cc3P28&gsw1VsyN)l2DPEq3DJTdk``@_ap4LBVoFOZjPrIOyM;yL%2_~sc~ zcd&WB8U(Flvet1%AxOOrO7S*5B`1g;NE=y%JdQ@3v>PP@cxx;zKv;Rr`@}J YvA*_S$=ClYsjjq-?JaWimAwc40o^@u!2kdN delta 1267 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%0DkyGoO@ab(6YqFQ)En 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 PnVP_;F-ajC6h{6(2tr$5 literal 328382 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 VQD27E+gV)}5czLez;-J${~rUY$jATy diff --git a/docs/gettext/.doctrees/features.doctree b/docs/gettext/.doctrees/features.doctree index 1e13217a44875a4fc44f86b79904e69ab2909cea..f5e1edbc0b16955657336765810813dc008019de 100644 GIT binary patch delta 2902 zcmYk8TZ~p$8HT$z1EtoArBbcn%mxwB8eE5Oos7n|5fu%JTD7&6y1sP?VsYf4rHK@p zRD@EDxM_oEs-cZysa9MJiI)wD(P)h(UU<<&z4C^pq$b)c>O1f^nYoz!`~UY^>pQ&f z^R0(p>W{tDPaRnN_`$PN@8}0X%4eN~bFolWC5ohD%w#gxWZAXb`y*3BG0{sANm+7~ zoMR4@P0<`w4pqhR;*wVek=PoRHYA-%8y|g&kyzFeqpwkom#@7rWUVp_NtP&+7ltWi z<(0OjO6g>6|62M&H^juoWIR&}c)|i z%r>xElsSr zzH9GY5j&)vYh@)<;!Fj>mh7{VQfZZp;?&OEyms-Rly+IyAlXRLA#pS^t034E=d}sr z%PYr0uqzSEY>0{|q?lPpRGOVvvc}R*t@>Lx)QT*G5kd>1q7q9(N=a>lm%d6jJ~4fA z`PEogZyUCs>#n(G+v;tL+Pyp1bYmVi4I)S-l$M4q6AH`Px*~$GXfs(S#utX4O*VMf z!VSK&dafU=Mo22SLTFG5Dnu7tw8lXq0^Mj|T6?mau||d>D4^4cP(-fL1mUGD!o^tI zP3wN!4<%p?Ifpn5Im_O;AdP1<5^?1)UR?joB#sRW<2e1Ejs4&SSM7qPQVd~9)IuB5 z6eV^^F0>ooH`UKD9?^qpgcqbG3Lm5p7Kh|&lN-f`vy&5O!3pDkHoP_j=g>%0C6_?5 zX3i*eB%{2p*;(6`i#PQ{W+x#|4rm8Cq*;|wPI_;ker?itn|g9`!Uu7}*ZQl?7%!>U zh8Qxl%MrqWCg2{$QUz~P48?O4Z5b^`m16Sv8U3LIhQe~&AP{PF2ZnvASo5pE2 zkg=#oCicQxEv@pwhGMI0&wlvr{j`$C6fT6WTcM&Z&|ks3Bw<81zBtNp#U1-5(QaB0 zZF~BT9o>*B1eXGAADAi^xE&U%)y0f1W#)N#|s zbCVN3z3_x(AN^lHEnE#*_$U=JO%fTatVx*|i}1Cr-L!sca5c~G2)8rzYVo~cEmbW- zD<^b@k!Hptn-30^r9}F{WavVL5|R-*A=m8TXd|2a)Yg8$GwVtar6lqmuN&j5D1ZU1 zC31Ui%dsVch`Rd38YxtGE^yG%sH*l`meN306l~GYKUTBErWsId0(fe>aQFIt2r@%yGB}0OMyX>4PmrUu8BnshU4QS^ zB}4VO!i*xLg#=;71hg5gL=sq#WIN2C?|`;KzOX^59J!Js%s?UqBuUXJYL^rBLlUx@ z3ZRqrs748zZIY>YGhfuC+h^;^ZU8i#;Fz!U#{0-s3aV;R+54OKES~V`*V{inHKU_)Wfk86W|qsF6^RESVWiP{x8UiX(>wYad>)cD!-( zs&VR}{oSD}X+QPQsevKbXk4~Jz=__4>ML198VcB)sFnTyo*JTvG1UOi_(G9K~*&#<~8l^?{4Xa>|uah6X51x1~Als zdT@r8>Ie6L=eSETW(khtPt4$j{aw2(T@8(N39 z7F&W?>)C}VTMI|^7oc-10h$j~w@#Eu%ArcI5U!(+pa1RNV6+XcU zpdBUDu5ElmVCaaFE$58u3FDfO*}z}(nv|wm4Q0ghWd%>=jz=_tvt3OW>AFbOjYFv=>*_Q22Y!5t8Ew-Ofy2~S&)AVLeKkYa&LO?2&* z)3Sf_uG!f=_kCkmsbAfD{ITx+$H&!YKC%4JV>j$BY0uZcx#PaQb#~W|V*Geg&H zY(IVWzkPS8op|mGeRsIMeD-43eQtcQ{k{L?(((B_*N>OxmiEsq9Y3>mdR#JRyVK)` o=4AJaads|te;ofh_wN4p^FPjvx17JRyD;8*ekES{*!d6qAJx%N@Bjb+ delta 2910 zcmZXWTZ~m#9mcyi!<1TEQYx(q&e?$`Sx6sar4*crtYTED-Ps?W8B~-i8bQt) zMJc+dt1>}r>B+jpa=bYE?;*M*G?!#u6;y-|WThk*Dvo4n<9O-XH-_Y+v8AL$mC34@ zywpkfs-&qhDBs>(b)g$%h`JafQ^v2n_9+)UG%_l3DcRco^uDE;p_t%f4oL==D3y!` zysOOGv1ey}`{n8*D+W`f@*KU2l*kDc1L`-VvhXETGUJY$&#oI5HZN>gSh28i;iC(a zZMQz17H;2i;OM@i^9w7RSbKffKE5`hEF5w!r|O)>EHXxtYpznHtc(__oxWw$${~}j znPqf@7sgydwwxpCvVm%jH2!PdI5?k;)zJoRG8th*z$ScQ62V20bvv>CuiX$zwz|~F zrWP^<@6pAPV=I%wDL)>YJHBSvb+)_an)j5yu|4+0#%?Ub)}iW{qO1{HDHOc)n7gf* zhV;fJ8^#O6E6X3SxqW}bQa=bOm9nG-Ye8g__b4GODT{#VQE_*6T!ivRP=5AGh<2yl ze%+j}I1qHI8bc7-_)Oly1cW6qx7Tj}a6iW?6e>gzl&--~$Dnl~0moUP$G?wqTzl8P z<<;KTPTsY<8@zLnTb%w$lC`E%*?FIR*0sc1NBQ}8hhU9PCc$#HqL&0?v0(^Su~x;Z zaqHb@m%m|0TYb-e`?=@>WLza_OBi+185l86N=QuRwrT79%#h%DQ>xEgG7y4SQKhOi z_L>}(2qR6#!`puVs1zrysh)%+r6@Y>bT-Zl&-d)hH9}ui0f+ zC7$TGy}n~{cFaYQNca@5}_|DINfgAZ1V}1UgFEU=mh%*6r5E zH}yj)L4dkh8!M^Egy|qG0t(fMj7ja$C%(}Q$`t?^SYt3KIM5Dl1Fj)!DKi9rabAue z-1E%xTK0}_ubUgs?>RET-ZZ9Qjb~JXND@W@vRbn@gf{PMC|E<& zGLl9fi;%N4CVSC#KXM|KXPjM;bZNx41vud__6wdWNY>_Q zC)}=GJO>9$#X>p~jMQTUU_rcMN&&RQax-ZA>*cR_xxIAsP&WV=u#jU2N`hX<1q9`l zI8yLcaqXUC0$l(_T&o069C=~9PYEeN7!>1fps$c{>BZ;ZZB!PagPMu!F5|^0T z%99VSm`JPzwFt zx!83Nj2GMA`qQh%^AFCyaBfw9YSs9_&bjfHCEL9+ZeNn!tKdud!Ikyf!dFb4y{|D$=SkeFh diff --git a/docs/gettext/.doctrees/help.doctree b/docs/gettext/.doctrees/help.doctree index f5fd8a4492cd6117791cfa7fcd5d8fee472065f4..aa2f4f1e1c7d12ea663aca58728cbba24fd9afb6 100644 GIT binary patch delta 417 zcmWlUJ&uzx5QgQD6d*0iA{L1TK2E^c9(%@Dpy2{YEC0+$6d@26X`vxyitX}IQE~$0 zQ&2#=&~k#U5GAIYS9=Qvv)G#{LmW0@_6kU@7Ay>oJP4|#=D(aS%~UE3 zi7x@ma7rs`xp>bt%OFGTcJ=$#6dSf8%8*B&cb>zbDhhatSfX@)`|c}`US#b$Ii zGbe%iKQyf^<(}{SSWQAw3%9XPDu(Kq*+y&CQL2<0^yllfnbcPx# delta 403 zcmWO0J&Ke;5C&lSa|Tpc*@azX6aDrE{Zn1tbpv4oFR&n0)z#T3{(+b{2heE7z}OQ= z=jJA+YHH#QOtr(}t(W)tN#AI*-+ui1Wpi{_nPWu8R-R8mJ zhkLtnVXY0tLlQ6m&c@(v+EG-AW*)SUjo}XuYv0_{z!9V)oTOpKaV)Gbwdp z1&z?KQDbenloYU{WE)}o`_@X5Tc~0-aiC?6LkeP$eDD=eM!Iv)ttd%Batam#lwN9z znv=Ii#Jyx0eE0iy#ZIk3OrjH?JX5GWM(f0ifm0ZdPfsTv31f}(FLY2VoV9Vo9J#5c zLgU@pep!7dnsKGx079PtuZRpP7DQ4U56^Gh;lstF^K1A1}QU-t=cLcE@Ws V{#>lieHyp#|6P`O{=59O{0Be|boBrL diff --git a/docs/gettext/.doctrees/index.doctree b/docs/gettext/.doctrees/index.doctree index 4e8256d9345af7c2a35799580dd2d06c5164d85e..0ebaf104dd8042141ea5635b38887f893819ad32 100644 GIT binary patch delta 206 zcmV~$Jxatt6aZje%(8-ti)~bL0rAaGCV6;+^#T?`NM_zJ7Q2zS!j={yDHbd?+j|8W zD=%VeVQ=9D{J!t(H%p%;yPx+oLM|$gUSeBGt+Xg*BTB@Utx&CW=*0F5-j2`0ML54s zLlzFhY1oS|$qsU>OKcQ*TR5lLI1)-1Y=rh~j6jZ8X$?8+3Y$V3L*#WSJxMZzOpUT+ z(7O0Jxq(^Vb*uWmXMeXIH*h&_XVdw~usM2QyIMXj>b39s#W=*}Gza*Iuls)q4DtEk GHu(plZ9j1U delta 192 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 OV^?(!SC@Zs)_(wjv-FAp delta 3994 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 diff --git a/docs/gettext/.doctrees/security.doctree b/docs/gettext/.doctrees/security.doctree index 2e1e8d086024e38989ac3e427f3c1561b68980c0..399685d8d16a016aac5b7560267733d67efc083e 100644 GIT binary patch delta 491 zcmWm9y^2&p5CvfF?Cb=JC>yy3PK$qFpw<7?fnc`a0|<-4Qq@(B2J6VU!iHiX6D%0q z5d_6|kbVLM-@w3B%zOZ2uh|LCf%E-1{Czloz5D*>m-*+xuyBc3K?;-*sB$SuIHqiK z^@yo|8y?M!Dr+l=nUf2Eo~kCVO~6%5kZ8pDpKGi{O_aGs3XLkdRPxjeq9Dogc6_{l zb)?-7CfOuPxnLj-K!Gu(keg6+FrP zgH2*)YilbIEHsQtki?c+qKM1={Kcm`CbevF+B&W&G>4=l*#eS_u6d+B?%iFO32!H# z_bM1#@Qjdc5SJ!W@e%v4%Ll`9O633htq(hbIuqpMA=FN@)L@0m|qLrXhIb`o0aMnVZz3caHyd5sBSF4kw7i(?LPPb>nz3uq* p=EJ?s*@c%{PoBRzK00ly_3?Jom$%F?eD4o#|D6q+j(0xI{sGCZlQ94Q delta 477 zcmWlVyNVS-5QdqvvnOy7K@402cf=bQXjgYtbyr|~giVZuMM0{2x-eMk!J5RtITOh@QDK(SDBf9Dl**Ns|}XmZgLR-m?=zrCJfF^Iv; zqGbfh5+fI>DOsxI2-@$9o8h4Iu`AKx);y&|kP3_U>XS%MY;%d$2Z@X8B%;b_*>c$? z3KwcWk;ZdiU@zjxtqcz^aqEia$GI)41x co;^Q4IUL%Z8`Cg+Z})HhTdjJ#xplhw4=rzr*#H0l diff --git a/docs/gettext/.doctrees/tor.doctree b/docs/gettext/.doctrees/tor.doctree index c8efb495143fd63161f50dbab9e3cdb007a91419..09905fd3b60cb534221a23ed14726226049f5e23 100644 GIT binary patch delta 2399 zcmZ8jU8tQ$743JpJ*)y}JXsZy>M37P;QWewL^W#<8Mq;d? zR4h^S3PFYM#wte97oYrTn4o=-fG-8DFKT@je8`KXh)B=}(RI?>q8=_BIG6pm_F8Mt z^H&$wt}fP|+;j0`m)E{GsqVyw%F-Hp(y2>nspU$sr`&80<5$z$CPgJ{6MW8WiAqn& z=o+hyEt(LWGxN>M->%=j_4ci!AKbfjcBwI_e5Enk^b%-Tj|)MALV(TSqeT1}A{ zQcZP!`oLACwFE(LB|0JYja|!{TuY9`OS1FVU-QRJZ#wH@sp6X=`tRbJH7vFD5X9}w zzq|Fw{DbwqyC59`NSAMbbY*=xZAweFT1(8S5E{=3=t$*kQtriIu>TEz!^`3Gt8V?* zW{@hRJ@BMTSRPwLm8p0wF}EQ9AN|HxqVv5+<}(NXwA<91@cS2UH1*Kyb|zJkGqrBD zH$uTMR})jMMK?p(f*!ZM{#*N0*1BflW-BLR9og6bNCW3afWwa899dtgXdK(XR%{n? z#)h} zFGt>>!I$3hb7d`7WqqlxH9}ipST?0m@(pdW9}nK~%wj{*s%vXZESH**0+uS|-O_*!WUxXJdpljl*|cpA>83LI}B|G6^;!EVd-Dz4wB@Vealr z`$j;xuiVKurR7il%~LB?n_8kX@;cb7(Kg?ifF<0<^)9K<|(NKB5V7)h;E; zu5%c-rN<{_Yz_|4rkpa>mQsjWBr=MWCc@*V_q@1N>CJJys(>jcNPuzk|(c%>r)2%YZL z6+NDn!%KzPDBqw)gx5w%CVP+n`&JrSHDl^0_ijLQmMzAjKoBg$&P%o^7$D7F$72u6 zLJ??XpjdDLeC>eCz!h`>*=%W{kAFPs_8diEBHS69a3-*t>~L(L%I2d;8pqFGnG^y| zvQ8J@BjK2V+;$~{)?ADs=W+XErxwbg2&#kvucv~v#+wRfGo}S+U^SP{)kzgtr9_Rx ziYYDQ>~uilq}LK*?PjRQuPhY9W}<~*;SQ2r@dx*meJm?k+Ze~+pZFml1s6L;u^s0Z zEwQAmQEVln5L2A@@BCzz^T#njMY0M-;*5ERLn~amhEnh>(2nMfi*Fr&J^wWjF{$r)!=O%-}$mdVQkefbiER8Pq@Gg5gAONJ4S8eFWXNnRVy6>77Hvj z30@z7tVizH2?y47eD%UZfX(}2p&}SyTs<6;DH*m|Vk+=+jJod|e_m6i!S}p%!Q(X7 zj?-VjSO_0NAlo}ey{=*_@W+<4c%W93pi+-`0EOBr4%pbZ_`>wsGpA3VJ@uJ0t$*s= z&V}inJM;dhP8{66aNx78oPG3jkDNN!PoH^YXM23|DK$-p#`d?bFQ)DB6G{vlS8AwJ4RKN9$~0;hf@>2OT^SM=)EFiB99$q6H|Lyt&&+)9Jiq7s znZ-+I78_sN^VE@38_!P4cT>r6^3__d&F2z~vo#s^Ue{d5Z>H-fm0L_zQ*UG#6_2ALv}?ZmK<;b z&Cg$YMhUKmxjO?54i=v?-ZNH8>8_>u+n4=mr)k`fJo(avZ8X{ClnqzsP3%=L+4nxO zefjG2YIAk!4UBFdzc{d*c5*dMOp@+;VQx9+#NLUR!hl4Z|Fe1CcloP3n9g#tT)Ych zvQ1KJ1#!J;0;Kx&y_dcD!E?TOdp>sX&mip4H-c2YZ$FHd*V)S_71Ik0#gZyGc>kO`gZn*WYi|r5`fwCTRW85!$ z+jN7G5K&2-ox^QE0Yo2Mya}Q^#w)jd6!+4BXqRtuSt*I^T8Z$6Noi z`7_64rLX(??jyU`uJ+829{%k7(BaccKxvI+J-5!W>*!({9LbYHsF{XU zY>et?GwS*<-dDG_$!pkWkbYAh&>asM4RU96%b*cw8HaG{U@ zjU#(?uv)j08;!Gfp4?Cwwi4fcXJFl3kl-9r!+LTMskh^?&s~F6)S(`#8g60ZObo?Y zR|zLpC!EJw*@R9whFnt)+A$XwVlEV0s?nK-$gyLifBNF>j;g3h3N*yltYf?bHpl|I zo%7?NFUmscYK?BLx`xTvml$fuF@zXPLcF>0&-?72EmTK=G+c6UR51vJb+@EkaeA@i z;}4uhS^#3)C3q{$E+T?5VAsv#6JE+tU%6+YN@9y-N*Z4>r;x2=cnlSS9F%LQ^BARPV=6S3s{YO`uoGrZ75;t z8GWi5rb0r+UOb8qGN}TM`Fa2DPv>^xh%#_5^nh#GuN^}L0*N`D-l4xms>&eeAunK|E*C\n" "Language-Team: LANGUAGE \n" diff --git a/docs/gettext/develop.pot b/docs/gettext/develop.pot index 06711c2d..71635283 100644 --- a/docs/gettext/develop.pot +++ b/docs/gettext/develop.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: OnionShare 2.6.2\n" +"Project-Id-Version: OnionShare 2.6.3\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-02-11 14:47+1100\n" +"POT-Creation-Date: 2025-02-12 14:33+1100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/docs/gettext/features.pot b/docs/gettext/features.pot index 6603c1ce..ef890d1b 100644 --- a/docs/gettext/features.pot +++ b/docs/gettext/features.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: OnionShare 2.6.2\n" +"Project-Id-Version: OnionShare 2.6.3\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-02-11 14:47+1100\n" +"POT-Creation-Date: 2025-02-12 14:33+1100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/docs/gettext/help.pot b/docs/gettext/help.pot index 104c8a3e..1906e5cc 100644 --- a/docs/gettext/help.pot +++ b/docs/gettext/help.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: OnionShare 2.6.2\n" +"Project-Id-Version: OnionShare 2.6.3\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-02-11 14:47+1100\n" +"POT-Creation-Date: 2025-02-12 14:33+1100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/docs/gettext/index.pot b/docs/gettext/index.pot index 96846f31..f1618307 100644 --- a/docs/gettext/index.pot +++ b/docs/gettext/index.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: OnionShare 2.6.2\n" +"Project-Id-Version: OnionShare 2.6.3\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-02-11 14:47+1100\n" +"POT-Creation-Date: 2025-02-12 14:33+1100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/docs/gettext/install.pot b/docs/gettext/install.pot index 897b37ac..b99b1917 100644 --- a/docs/gettext/install.pot +++ b/docs/gettext/install.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: OnionShare 2.6.2\n" +"Project-Id-Version: OnionShare 2.6.3\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-02-11 14:47+1100\n" +"POT-Creation-Date: 2025-02-12 14:33+1100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -36,7 +36,7 @@ msgstr "" msgid "You can download OnionShare for Mobile from the follow links" msgstr "" -#: ../../source/install.rst:18 +#: ../../source/install.rst:16 msgid "Android" msgstr "" @@ -48,7 +48,7 @@ msgstr "" msgid "F-Droid: https://github.com/onionshare/onionshare-android-nightly" msgstr "" -#: ../../source/install.rst:24 +#: ../../source/install.rst:20 msgid "iOS" msgstr "" @@ -224,7 +224,7 @@ msgstr "" msgid "Packages are signed by the core developer who is responsible for the particular release. Here is the GPG key information for each of the core developers of OnionShare:" msgstr "" -#: ../../source/install.rst:122 +#: ../../source/install.rst:120 msgid "Micah Lee:" msgstr "" @@ -236,7 +236,7 @@ msgstr "" msgid "You can download Micah's key `from the keys.openpgp.org keyserver `_." msgstr "" -#: ../../source/install.rst:126 +#: ../../source/install.rst:124 msgid "Saptak Sengupta:" msgstr "" @@ -248,7 +248,7 @@ msgstr "" msgid "You can download Saptak's key `from the keys.openpgp.org keyserver `_." msgstr "" -#: ../../source/install.rst:130 +#: ../../source/install.rst:128 msgid "Miguel Jacq:" msgstr "" diff --git a/docs/gettext/security.pot b/docs/gettext/security.pot index 1672ef7c..f01c57e1 100644 --- a/docs/gettext/security.pot +++ b/docs/gettext/security.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: OnionShare 2.6.2\n" +"Project-Id-Version: OnionShare 2.6.3\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-02-11 14:47+1100\n" +"POT-Creation-Date: 2025-02-12 14:33+1100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/docs/gettext/sphinx.pot b/docs/gettext/sphinx.pot index 3bbe5c97..89f4b31d 100644 --- a/docs/gettext/sphinx.pot +++ b/docs/gettext/sphinx.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: OnionShare 2.6.2\n" +"Project-Id-Version: OnionShare 2.6.3\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-02-11 14:47+1100\n" +"POT-Creation-Date: 2025-02-12 14:33+1100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/docs/gettext/tor.pot b/docs/gettext/tor.pot index 911851df..157afc20 100644 --- a/docs/gettext/tor.pot +++ b/docs/gettext/tor.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: OnionShare 2.6.2\n" +"Project-Id-Version: OnionShare 2.6.3\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-02-11 14:47+1100\n" +"POT-Creation-Date: 2025-02-12 14:33+1100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/docs/source/locale/zh_Hans/LC_MESSAGES/advanced.po b/docs/source/locale/zh_Hans/LC_MESSAGES/advanced.po new file mode 100644 index 00000000..492016b3 --- /dev/null +++ b/docs/source/locale/zh_Hans/LC_MESSAGES/advanced.po @@ -0,0 +1,353 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) Micah Lee, et al. +# This file is distributed under the same license as the OnionShare package. +# FIRST AUTHOR , 2025. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: OnionShare 2.6.3\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-12 14:33+1100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language: zh_Hans\n" +"Language-Team: zh_Hans \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.17.0\n" + +#: ../../source/advanced.rst:2 +msgid "Advanced Usage" +msgstr "" + +#: ../../source/advanced.rst:7 +msgid "Save Tabs" +msgstr "" + +#: ../../source/advanced.rst:9 +msgid "" +"Closing OnionShare tabs you host destroys them, preventing reuse. " +"Persistently hosted websites are available on the same address even if " +"the computer they are shared from is rebooted." +msgstr "" + +#: ../../source/advanced.rst:12 +msgid "" +"Make any tab persistent by checking the \"Always open this tab when " +"OnionShare is started\" box before starting your server." +msgstr "" + +#: ../../source/advanced.rst:16 +msgid "" +"When opening OnionShare, your saved tabs from the prior session will " +"start opened. Each service then can be started manually, and will be " +"available on the same OnionShare address and be protected by the same " +"private key." +msgstr "" + +#: ../../source/advanced.rst:19 +msgid "" +"If you save a tab, a copy of its onion service secret key is stored on " +"your computer." +msgstr "" + +#: ../../source/advanced.rst:24 +msgid "Turn Off Private Key" +msgstr "" + +#: ../../source/advanced.rst:26 +msgid "" +"By default, all OnionShare services are protected with a private key, " +"which Tor calls \"client authentication\"." +msgstr "" + +#: ../../source/advanced.rst:28 +msgid "" +"The Tor Browser will ask you to enter your private key when you load an " +"OnionShare service. If you want to allow the public to use your service, " +"it's better to disable the private key altogether." +msgstr "" + +#: ../../source/advanced.rst:31 +msgid "" +"To turn off the private key for any tab, check the \"This is a public " +"OnionShare service (disables private key)\" box before starting the " +"server. Then the server will be public and a private key is not needed to" +" load it in the Tor Browser." +msgstr "" + +#: ../../source/advanced.rst:37 +msgid "Custom Titles" +msgstr "" + +#: ../../source/advanced.rst:39 +msgid "" +"When people load OnionShare services in the Tor Browser they see the " +"default title for each type of service. For example, the default title " +"for chat services is \"OnionShare Chat\"." +msgstr "" + +#: ../../source/advanced.rst:42 +msgid "" +"If you edit the \"Custom title\" setting before starting a server you can" +" change it." +msgstr "" + +#: ../../source/advanced.rst:45 +msgid "Scheduled Times" +msgstr "" + +#: ../../source/advanced.rst:47 +msgid "" +"OnionShare supports scheduling exactly when a service should start and " +"stop. Before starting a server, click \"Show advanced settings\" in its " +"tab and then check the boxes next to either \"Start onion service at " +"scheduled time\", \"Stop onion service at scheduled time\", or both, and " +"set the respective desired dates and times." +msgstr "" + +#: ../../source/advanced.rst:51 +msgid "" +"Services scheduled to start in the future display a countdown timer when " +"the \"Start sharing\" button is clicked. Services scheduled to stop in " +"the future display a countdown timer when started." +msgstr "" + +#: ../../source/advanced.rst:54 +msgid "" +"**Scheduling an OnionShare service to automatically start can be used as " +"a dead man's switch**. This means your service is made public at a given " +"time in the future if you are not there to prevent it. If nothing happens" +" to you, you can cancel the service before it's scheduled to start." +msgstr "" + +#: ../../source/advanced.rst:60 +msgid "" +"**Scheduling an OnionShare service to automatically stop limits its " +"exposure**. If you want to share secret info or something that will be " +"outdated, you can do so for selected limited time." +msgstr "" + +#: ../../source/advanced.rst:68 +msgid "Command-line Interface" +msgstr "" + +#: ../../source/advanced.rst:70 +msgid "" +"In addition to its graphical interface, OnionShare has a command-line " +"interface." +msgstr "" + +#: ../../source/advanced.rst:73 +msgid "Installing the CLI version" +msgstr "" + +#: ../../source/advanced.rst:75 +msgid "" +"If you have installed the Snap, macOS or Windows package, you already " +"have the CLI version installed." +msgstr "" + +#: ../../source/advanced.rst:77 +msgid "" +"Alternatively, you can install just the command-line version of " +"OnionShare using ``pip3``::" +msgstr "" + +#: ../../source/advanced.rst:81 +msgid "" +"Note that you will also need the ``tor`` package installed. In macOS, " +"install it with: ``brew install tor``" +msgstr "" + +#: ../../source/advanced.rst:83 +msgid "Then run it like this::" +msgstr "" + +#: ../../source/advanced.rst:87 +msgid "" +"Info about installing it on different operating systems can be found in " +"the `CLI README file " +"`_ " +"in the Git repository." +msgstr "" + +#: ../../source/advanced.rst:90 +msgid "Running the CLI from Snap" +msgstr "" + +#: ../../source/advanced.rst:92 +msgid "" +"If you installed OnionShare using the Snap package, you can run " +"``onionshare.cli`` to access the command-line interface version." +msgstr "" + +#: ../../source/advanced.rst:95 +msgid "Running the CLI from macOS" +msgstr "" + +#: ../../source/advanced.rst:97 +msgid "" +"From Terminal, you can run ``/Applications/OnionShare.app/Contents/MacOS" +"/onionshare-cli --help``" +msgstr "" + +#: ../../source/advanced.rst:100 +msgid "Running the CLI from Windows" +msgstr "" + +#: ../../source/advanced.rst:102 +msgid "" +"In the Windows installation, the executable ``onionshare-cli.exe`` is " +"available." +msgstr "" + +#: ../../source/advanced.rst:105 +msgid "Usage" +msgstr "" + +#: ../../source/advanced.rst:107 +msgid "Browse the command-line documentation by running ``onionshare --help``::" +msgstr "" + +#: ../../source/advanced.rst:170 +msgid "Running the CLI as a systemd unit file" +msgstr "" + +#: ../../source/advanced.rst:172 +msgid "" +"It is possible to automatically start OnionShare from the CLI using a " +"systemd unit file." +msgstr "" + +#: ../../source/advanced.rst:174 +msgid "" +"You may find this particularly useful if you are operating in " +"'persistent' mode, and want to start the same onion service every time " +"your machine starts." +msgstr "" + +#: ../../source/advanced.rst:176 +msgid "To do this, you need to prepare some OnionShare json config first." +msgstr "" + +#: ../../source/advanced.rst:178 +msgid "" +"Here is the main OnionShare config. In this example, it's stored in " +"``/home/user/.config/onionshare/onionshare.json``. You may need to adjust" +" some of the settings, but if you already have OnionShare installed, it " +"probably looks much like this already::" +msgstr "" + +#: ../../source/advanced.rst:207 +msgid "" +"Notice the 'persistent_tabs' section. We will now create a file at " +"``/home/user/.config/onionshare/persistent/my-persistent-onion.json``, " +"that looks like this::" +msgstr "" + +#: ../../source/advanced.rst:247 +msgid "" +"**Don't actually use this private key, service_id or client_auth keys! " +"They are shown only as an example. Never share the private_key with " +"anyone.**" +msgstr "" + +#: ../../source/advanced.rst:249 +msgid "" +"The easiest way to generate the onion address and private key is to first" +" create a 'pinned' OnionShare tab in the desktop app and started the " +"share for the first time. This will then have saved the persistent " +"settings to your ``.config/onionshare/persistent/`` folder with a random " +"name. You can unpin that tab once you've generated it the first time. Or," +" you can leave it where it is, and use that persistent file in your " +"systemd unit file below." +msgstr "" + +#: ../../source/advanced.rst:251 +msgid "" +"Now you can create a systemd unit file in ``/etc/systemd/system" +"/onionshare-cli.service``. Be sure to adjust the User and Group to your " +"own user/group, as well as changes to any paths to the onionshare-cli " +"binary or the paths to your JSON configs and shares." +msgstr "" + +#: ../../source/advanced.rst:253 +msgid "The systemd unit file should look like this::" +msgstr "" + +#: ../../source/advanced.rst:268 +msgid "" +"Note that although ``/home/user/my-shared-file.txt`` was defined in the " +"``filenames`` section of the ``my-persistent-onion.json`` file, it's " +"still necessary to specify it as the argument to the onionshare-cli " +"command." +msgstr "" + +#: ../../source/advanced.rst:270 +msgid "" +"Be sure to run ``sudo systemctl daemon-reload`` after creating the unit " +"file." +msgstr "" + +#: ../../source/advanced.rst:272 +msgid "" +"Now you can run ``sudo systemctl start onionshare-cli.service``. If you " +"have ``journalctl`` installed, you can run ``sudo journalctl -f -t " +"onionshare-cli``, and you should see some output of your service " +"starting::" +msgstr "" + +#: ../../source/advanced.rst:282 +msgid "" +"If you don't want your users to use a Private Key, set ``public`` to be " +"``true`` in the ``general`` settings of the my-persistent-onion.json " +"file." +msgstr "" + +#: ../../source/advanced.rst:286 +msgid "Keyboard Shortcuts" +msgstr "" + +#: ../../source/advanced.rst:288 +msgid "" +"The OnionShare desktop application contains some keyboard shortcuts, for " +"convenience and accessibility::" +msgstr "" + +#: ../../source/advanced.rst:293 +msgid "And from the main mode chooser screen::" +msgstr "" + +#: ../../source/advanced.rst:303 +msgid "Migrating your OnionShare data to another computer" +msgstr "" + +#: ../../source/advanced.rst:305 +msgid "" +"You may want to migrate your OnionShare data when switching to another " +"computer. This is especially true if you had a 'persistent' onion address" +" and you want to preserve it." +msgstr "" + +#: ../../source/advanced.rst:307 +msgid "" +"OnionShare stores all such data in a specific folder. Copy the relevant " +"folder for your operating system below, to your new computer:" +msgstr "" + +#: ../../source/advanced.rst:309 +msgid "Linux: ``~/.config/onionshare``" +msgstr "" + +#: ../../source/advanced.rst:310 +msgid "macOS: ``~/Library/Application Support/OnionShare``" +msgstr "" + +#: ../../source/advanced.rst:311 +msgid "Windows: ``%APPDATA%\\OnionShare``" +msgstr "" + diff --git a/docs/source/locale/zh_Hans/LC_MESSAGES/develop.po b/docs/source/locale/zh_Hans/LC_MESSAGES/develop.po new file mode 100644 index 00000000..b96e4bab --- /dev/null +++ b/docs/source/locale/zh_Hans/LC_MESSAGES/develop.po @@ -0,0 +1,189 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) Micah Lee, et al. +# This file is distributed under the same license as the OnionShare package. +# FIRST AUTHOR , 2025. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: OnionShare 2.6.3\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-12 14:33+1100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language: zh_Hans\n" +"Language-Team: zh_Hans \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.17.0\n" + +#: ../../source/develop.rst:2 +msgid "Developing OnionShare" +msgstr "" + +#: ../../source/develop.rst:7 +msgid "Collaborating" +msgstr "" + +#: ../../source/develop.rst:9 +msgid "" +"OnionShare has an open Keybase team to discuss the project, ask " +"questions, share ideas and designs, and making plans for future " +"development. (It's also an easy way to send end-to-end encrypted direct " +"messages to others in the OnionShare community, like OnionShare " +"addresses.) To use Keybase, download the `Keybase app " +"`_, make an account, and `join this team " +"`_. Within the app, go to \"Teams\", " +"click \"Join a Team\", and type \"onionshare\"." +msgstr "" + +#: ../../source/develop.rst:12 +msgid "" +"OnionShare also has a `mailing list " +"`_ for developers " +"and and designers to discuss the project." +msgstr "" + +#: ../../source/develop.rst:15 +msgid "Contributing Code" +msgstr "" + +#: ../../source/develop.rst:17 +msgid "" +"OnionShare source code is to be found in this Git repository: " +"https://github.com/onionshare/onionshare" +msgstr "" + +#: ../../source/develop.rst:19 +msgid "" +"If you'd like to contribute code to OnionShare, it helps to join the " +"Keybase team and ask questions about what you're thinking of working on. " +"You should also review all of the `open issues " +"`_ on GitHub to see if " +"there are any you'd like to tackle." +msgstr "" + +#: ../../source/develop.rst:22 +msgid "" +"When you're ready to contribute code, open a pull request in the GitHub " +"repository and one of the project maintainers will review it and possibly" +" ask questions, request changes, reject it, or merge it into the project." +msgstr "" + +#: ../../source/develop.rst:27 +msgid "Starting Development" +msgstr "" + +#: ../../source/develop.rst:29 +msgid "" +"OnionShare is developed in Python. To get started, clone the Git " +"repository at https://github.com/onionshare/onionshare/ and then consult " +"the ``cli/README.md`` file to learn how to set up your development " +"environment for the command-line version, and the ``desktop/README.md`` " +"file to learn how to set up your development environment for the " +"graphical version." +msgstr "" + +#: ../../source/develop.rst:32 +msgid "" +"Those files contain the necessary technical instructions and commands " +"install dependencies for your platform, and to run OnionShare from the " +"source tree." +msgstr "" + +#: ../../source/develop.rst:35 +msgid "Debugging tips" +msgstr "" + +#: ../../source/develop.rst:38 +msgid "Verbose mode" +msgstr "" + +#: ../../source/develop.rst:40 +msgid "" +"When developing, it's convenient to run OnionShare from a terminal and " +"add the ``--verbose`` (or ``-v``) flag to the command. This prints a lot " +"of helpful messages to the terminal, such as when certain objects are " +"initialized, when events occur (like buttons clicked, settings saved or " +"reloaded), and other debug info. For example::" +msgstr "" + +#: ../../source/develop.rst:117 +msgid "" +"You can add your own debug messages by running the ``Common.log`` method " +"from ``onionshare/common.py``. For example::" +msgstr "" + +#: ../../source/develop.rst:121 +msgid "" +"This can be useful when learning the chain of events that occur when " +"using OnionShare, or the value of certain variables before and after they" +" are manipulated." +msgstr "" + +#: ../../source/develop.rst:124 +msgid "Local Only" +msgstr "" + +#: ../../source/develop.rst:126 +msgid "" +"Tor is slow, and it's often convenient to skip starting onion services " +"altogether during development. You can do this with the ``--local-only`` " +"flag. For example::" +msgstr "" + +#: ../../source/develop.rst:165 +msgid "" +"In this case, you load the URL ``http://127.0.0.1:17641`` in a normal " +"web-browser like Firefox, instead of using the Tor Browser. The private " +"key is not actually needed in local-only mode, so you can ignore it." +msgstr "" + +#: ../../source/develop.rst:168 +msgid "Contributing Translations" +msgstr "" + +#: ../../source/develop.rst:170 +msgid "" +"Help make OnionShare easier to use and more familiar and welcoming for " +"people by translating it on `Hosted Weblate " +"`_. Always keep the " +"\"OnionShare\" in latin letters, and use \"OnionShare (localname)\" if " +"needed." +msgstr "" + +#: ../../source/develop.rst:172 +msgid "To help translate, make a Hosted Weblate account and start contributing." +msgstr "" + +#: ../../source/develop.rst:175 +msgid "Suggestions for Original English Strings" +msgstr "" + +#: ../../source/develop.rst:177 +msgid "" +"Sometimes the original English strings are wrong, or don't match between " +"the application and the documentation." +msgstr "" + +#: ../../source/develop.rst:179 +msgid "" +"File source string improvements by adding @kingu to your Weblate comment," +" or open a GitHub issue or pull request. The latter ensures all upstream " +"developers see the suggestion, and can potentially modify the string via " +"the usual code review processes." +msgstr "" + +#: ../../source/develop.rst:183 +msgid "Status of Translations" +msgstr "" + +#: ../../source/develop.rst:184 +msgid "" +"Here is the current translation status. If you want start a translation " +"in a language not yet started, please write to the mailing list: " +"onionshare-dev@lists.riseup.net" +msgstr "" + diff --git a/docs/source/locale/zh_Hans/LC_MESSAGES/features.po b/docs/source/locale/zh_Hans/LC_MESSAGES/features.po new file mode 100644 index 00000000..7fef1857 --- /dev/null +++ b/docs/source/locale/zh_Hans/LC_MESSAGES/features.po @@ -0,0 +1,442 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) Micah Lee, et al. +# This file is distributed under the same license as the OnionShare package. +# FIRST AUTHOR , 2025. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: OnionShare 2.6.3\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-12 14:33+1100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language: zh_Hans\n" +"Language-Team: zh_Hans \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.17.0\n" + +#: ../../source/features.rst:4 +msgid "How OnionShare Works" +msgstr "" + +#: ../../source/features.rst:6 +msgid "" +"Web servers are started locally on your computer and made accessible to " +"other people as `Tor `_ `onion services " +"`_." +msgstr "" + +#: ../../source/features.rst:8 +msgid "By default, OnionShare web addresses are protected with a private key." +msgstr "" + +#: ../../source/features.rst:10 +msgid "OnionShare addresses look something like this::" +msgstr "" + +#: ../../source/features.rst:14 +msgid "And private keys might look something like this::" +msgstr "" + +#: ../../source/features.rst:18 +msgid "" +"You're responsible for securely sharing that URL and private key using a " +"communication channel of your choice like in an encrypted chat message, " +"or using something less secure like unencrypted email, depending on your " +"`threat model `_." +msgstr "" + +#: ../../source/features.rst:20 +msgid "" +"The people you send the URL to then copy and paste it into their `Tor " +"Browser `_ to access the OnionShare service." +" Tor Browser will then prompt for the private key, which the people can " +"also then copy and paste in." +msgstr "" + +#: ../../source/features.rst:24 +msgid "" +"If you run OnionShare on your laptop to send someone files, and then " +"suspend it before the files are sent, the service will not be available " +"until your laptop is unsuspended and on the internet again. OnionShare " +"works best when working with people in real-time." +msgstr "" + +#: ../../source/features.rst:26 +msgid "" +"Because your own computer is the web server, *no third party can access " +"anything that happens in OnionShare*, not even the developers of " +"OnionShare. It's completely private. And because OnionShare is based on " +"Tor onion services too, it also protects your anonymity. See the " +":doc:`security design ` for more info." +msgstr "" + +#: ../../source/features.rst:29 +msgid "Share Files" +msgstr "" + +#: ../../source/features.rst:31 +msgid "" +"You can use OnionShare to send files and folders to people securely and " +"anonymously. Open a share tab, drag in the files and folders you wish to " +"share, and click \"Start sharing\"." +msgstr "" + +#: ../../source/features.rst:35 ../../source/features.rst:117 +msgid "" +"After you add files, you'll see some settings. Make sure you choose the " +"setting you're interested in before you start sharing." +msgstr "" + +#: ../../source/features.rst:39 +msgid "" +"As soon as someone finishes downloading your files, OnionShare will " +"automatically stop the server, removing the website from the internet. To" +" allow multiple people to download them, uncheck the \"Stop sharing after" +" files have been sent (uncheck to allow downloading individual files)\" " +"box." +msgstr "" + +#: ../../source/features.rst:42 +msgid "" +"Also, if you uncheck this box, people will be able to download the " +"individual files you share rather than a single compressed version of all" +" the files." +msgstr "" + +#: ../../source/features.rst:44 +msgid "" +"When you're ready to share, click the \"Start sharing\" button. You can " +"always click \"Stop sharing\", or quit OnionShare, immediately taking the" +" website down. You can also click the \"↑\" icon in the top-right corner " +"to show the history and progress of people downloading files from you." +msgstr "" + +#: ../../source/features.rst:48 +msgid "" +"Now that you have a OnionShare, copy the address and the private key and " +"send it to the person you want to receive the files. If the files need to" +" stay secure, or the person is otherwise exposed to danger, use an " +"encrypted messaging app." +msgstr "" + +#: ../../source/features.rst:50 +msgid "" +"That person then must load the address in Tor Browser. After logging in " +"with the private key, the files can be downloaded directly from your " +"computer by clicking the \"Download Files\" link in the corner." +msgstr "" + +#: ../../source/features.rst:55 +msgid "Receive Files and Messages" +msgstr "" + +#: ../../source/features.rst:57 +msgid "" +"You can use OnionShare to let people anonymously submit files and " +"messages directly to your computer, essentially turning it into an " +"anonymous dropbox. Open a receive tab and choose the settings that you " +"want." +msgstr "" + +#: ../../source/features.rst:62 +msgid "You can browse for a folder to save messages and files that get submitted." +msgstr "" + +#: ../../source/features.rst:64 +msgid "" +"You can check \"Disable submitting text\" if want to only allow file " +"uploads, and you can check \"Disable uploading files\" if you want to " +"only allow submitting text messages, like for an anonymous contact form." +msgstr "" + +#: ../../source/features.rst:66 +msgid "" +"You can check \"Use notification webhook\" and then choose a webhook URL " +"if you want to be notified when someone submits files or messages to your" +" OnionShare service. If you use this feature, OnionShare will make an " +"HTTP POST request to this URL whenever someone submits files or messages." +" For example, if you want to get an encrypted text messaging on the " +"messaging app `Keybase `_, you can start a " +"conversation with `@webhookbot `_, type " +"``!webhook create onionshare-alerts``, and it will respond with a URL. " +"Use that as the notification webhook URL. If someone uploads a file to " +"your receive mode service, @webhookbot will send you a message on Keybase" +" letting you know as soon as it happens." +msgstr "" + +#: ../../source/features.rst:71 +msgid "" +"When you are ready, click \"Start Receive Mode\". This starts the " +"OnionShare service. Anyone loading this address in their Tor Browser will" +" be able to submit files and messages which get uploaded to your " +"computer." +msgstr "" + +#: ../../source/features.rst:75 +msgid "" +"You can also click the down \"↓\" icon in the top-right corner to show " +"the history and progress of people sending files to you." +msgstr "" + +#: ../../source/features.rst:77 +msgid "Here is what it looks like for someone sending you files and messages." +msgstr "" + +#: ../../source/features.rst:81 +msgid "" +"When someone submits files or messages to your receive service, by " +"default they get saved to a folder called ``OnionShare`` in the home " +"folder on your computer, automatically organized into separate subfolders" +" based on the time that the files get uploaded." +msgstr "" + +#: ../../source/features.rst:83 +msgid "" +"Setting up an OnionShare receiving service is useful for journalists and " +"others needing to securely accept documents from anonymous sources. When " +"used in this way, OnionShare is sort of like a lightweight, simpler, not " +"quite as secure version of `SecureDrop `_, the " +"whistleblower submission system." +msgstr "" + +#: ../../source/features.rst:86 +msgid "Use at your own risk" +msgstr "" + +#: ../../source/features.rst:88 +msgid "" +"Just like with malicious email attachments, it's possible someone could " +"try to attack your computer by uploading a malicious file to your " +"OnionShare service. OnionShare does not add any safety mechanisms to " +"protect your system from malicious files." +msgstr "" + +#: ../../source/features.rst:90 +msgid "" +"If you receive an Office document or a PDF through OnionShare, you can " +"convert these documents into PDFs that are safe to open using `Dangerzone" +" `_. You can also protect yourself when " +"opening untrusted documents by opening them in `Tails " +"`_ or in a `Qubes `_ " +"disposableVM." +msgstr "" + +#: ../../source/features.rst:92 +msgid "However, it is always safe to open text messages sent through OnionShare." +msgstr "" + +#: ../../source/features.rst:95 +msgid "Tips for running a receive service" +msgstr "" + +#: ../../source/features.rst:97 +msgid "" +"If you want to host your own anonymous dropbox using OnionShare, it's " +"recommended you do so on a separate, dedicated computer always powered on" +" and connected to the internet, and not on the one you use on a regular " +"basis." +msgstr "" + +#: ../../source/features.rst:99 +msgid "" +"If you intend to put the OnionShare address on your website or social " +"media profiles, save the tab (see :ref:`save_tabs`) and run it as a " +"public service (see :ref:`turn_off_private_key`). It's also a good idea " +"to give it a custom title (see :ref:`custom_titles`)." +msgstr "" + +#: ../../source/features.rst:102 +msgid "Other caveats to be aware of in Receive Mode" +msgstr "" + +#: ../../source/features.rst:104 +msgid "" +"There are reports that OnionBrowser on iOS devices are unable to upload " +"files to an OnionShare in Receive Mode, when operating in 'Silver' " +"security mode. Try Bronze or Gold to see if you are able to upload a " +"message or a file." +msgstr "" + +#: ../../source/features.rst:107 +msgid "Host a Website" +msgstr "" + +#: ../../source/features.rst:109 +msgid "" +"To host a static HTML website with OnionShare, open a website tab, drag " +"the files and folders that make up the static content there, and click " +"\"Start sharing\" when you are ready." +msgstr "" + +#: ../../source/features.rst:113 +msgid "" +"If you add an ``index.html`` file, it will render when someone loads your" +" website. You should also include any other HTML files, CSS files, " +"JavaScript files, and images that make up the website. (Note that " +"OnionShare only supports hosting *static* websites. It can't host " +"websites that execute code or use databases. So you can't for example use" +" WordPress.)" +msgstr "" + +#: ../../source/features.rst:115 +msgid "" +"If you don't have an ``index.html`` file, it will show a directory " +"listing instead, and people loading it can look through the files and " +"download them." +msgstr "" + +#: ../../source/features.rst:122 +msgid "Content Security Policy" +msgstr "" + +#: ../../source/features.rst:124 +msgid "" +"By default OnionShare helps secure your website by setting a strict " +"`Content Security Policy " +"`_ header. " +"However, this prevents third-party content from loading inside the web " +"page." +msgstr "" + +#: ../../source/features.rst:126 +msgid "" +"If you want to load content from third-party websites, like assets or " +"JavaScript libraries from CDNs, you have two options:" +msgstr "" + +#: ../../source/features.rst:128 +msgid "" +"You can disable sending a Content Security Policy header by checking the " +"\"Don't send Content Security Policy header (allows your website to use " +"third-party resources)\" box before starting the service." +msgstr "" + +#: ../../source/features.rst:129 +msgid "You can send a custom Content Security Policy header." +msgstr "" + +#: ../../source/features.rst:132 +msgid "Tips for running a website service" +msgstr "" + +#: ../../source/features.rst:134 +msgid "" +"If you want to host a long-term website using OnionShare (meaning not " +"just to quickly show someone something), it's recommended you do it on a " +"separate, dedicated computer that is always powered on and connected to " +"the internet, and not on the one you use on a regular basis. Save the tab" +" (see :ref:`save_tabs`) so you can resume the website with the same " +"address if you close OnionShare and re-open it later." +msgstr "" + +#: ../../source/features.rst:137 +msgid "" +"If your website is intended for the public, you should run it as a public" +" service (see :ref:`turn_off_private_key`)." +msgstr "" + +#: ../../source/features.rst:140 +msgid "Chat Anonymously" +msgstr "" + +#: ../../source/features.rst:142 +msgid "" +"You can use OnionShare to set up a private, secure chat room that doesn't" +" log anything. Just open a chat tab and click \"Start chat server\"." +msgstr "" + +#: ../../source/features.rst:146 +msgid "" +"After you start the server, copy the OnionShare address and private key " +"and send them to the people you want in the anonymous chat room. If it's " +"important to limit exactly who can join, use an encrypted messaging app " +"to send out the OnionShare address and private key." +msgstr "" + +#: ../../source/features.rst:151 +msgid "" +"People can join the chat room by loading its OnionShare address in Tor " +"Browser. The chat room requires JavasScript, so everyone who wants to " +"participate must have their Tor Browser security level set to " +"\"Standard\" or \"Safer\", instead of \"Safest\"." +msgstr "" + +#: ../../source/features.rst:154 +msgid "" +"When someone joins the chat room they get assigned a random name. They " +"can change their name by typing a new name in the box in the left panel " +"and pressing ↵. Since the chat history isn't saved anywhere, it doesn't " +"get displayed at all, even if others were already chatting in the room." +msgstr "" + +#: ../../source/features.rst:160 +msgid "" +"In an OnionShare chat room, everyone is anonymous. Anyone can change " +"their name to anything, and there is no way to confirm anyone's identity." +msgstr "" + +#: ../../source/features.rst:163 +msgid "" +"However, if you create an OnionShare chat room and securely send the " +"address only to a small group of trusted friends using encrypted " +"messages, you can be reasonably confident the people joining the chat " +"room are your friends." +msgstr "" + +#: ../../source/features.rst:166 +msgid "How is this useful?" +msgstr "" + +#: ../../source/features.rst:168 +msgid "" +"If you need to already be using an encrypted messaging app, what's the " +"point of an OnionShare chat room to begin with? It leaves less traces." +msgstr "" + +#: ../../source/features.rst:170 +msgid "" +"If you for example send a message to a Signal group, a copy of your " +"message ends up on each device (the smartphones, and computers if they " +"set up Signal Desktop) of each member of the group. Even if disappearing " +"messages is turned on, it's hard to confirm all copies of the messages " +"are actually deleted from all devices, and from any other places (like " +"notifications databases) they may have been saved to. OnionShare chat " +"rooms don't store any messages anywhere, so the problem is reduced to a " +"minimum." +msgstr "" + +#: ../../source/features.rst:173 +msgid "" +"OnionShare chat rooms can also be useful for people wanting to chat " +"anonymously and securely with someone without needing to create any " +"accounts. For example, a source can send an OnionShare address to a " +"journalist using a disposable email address, and then wait for the " +"journalist to join the chat room, all without compromosing their " +"anonymity." +msgstr "" + +#: ../../source/features.rst:177 +msgid "How does the encryption work?" +msgstr "" + +#: ../../source/features.rst:179 +msgid "" +"Because OnionShare relies on Tor onion services, connections between the " +"Tor Browser and OnionShare are all end-to-end encrypted (E2EE). When " +"someone posts a message to an OnionShare chat room, they send it to the " +"server through the E2EE onion connection, which then sends it to all " +"other members of the chat room using WebSockets, through their E2EE onion" +" connections." +msgstr "" + +#: ../../source/features.rst:181 +msgid "" +"OnionShare doesn't implement any chat encryption on its own. It relies on" +" the Tor onion service's encryption instead." +msgstr "" + diff --git a/docs/source/locale/zh_Hans/LC_MESSAGES/help.po b/docs/source/locale/zh_Hans/LC_MESSAGES/help.po new file mode 100644 index 00000000..477fcb17 --- /dev/null +++ b/docs/source/locale/zh_Hans/LC_MESSAGES/help.po @@ -0,0 +1,70 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) Micah Lee, et al. +# This file is distributed under the same license as the OnionShare package. +# FIRST AUTHOR , 2025. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: OnionShare 2.6.3\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-12 14:33+1100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language: zh_Hans\n" +"Language-Team: zh_Hans \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.17.0\n" + +#: ../../source/help.rst:2 +msgid "Getting Help" +msgstr "" + +#: ../../source/help.rst:5 +msgid "Read This Website" +msgstr "" + +#: ../../source/help.rst:7 +msgid "" +"You will find instructions on how to use OnionShare. Look through all of " +"the sections first to see if anything answers your questions." +msgstr "" + +#: ../../source/help.rst:10 +msgid "Check the GitHub Issues" +msgstr "" + +#: ../../source/help.rst:12 +msgid "" +"If it isn't on the website, please check the `GitHub issues " +"`_. It's possible " +"someone else has encountered the same problem and either raised it with " +"the developers, or maybe even posted a solution." +msgstr "" + +#: ../../source/help.rst:15 +msgid "Submit an Issue Yourself" +msgstr "" + +#: ../../source/help.rst:17 +msgid "" +"If you are unable to find a solution, or wish to ask a question or " +"suggest a new feature, please `submit an issue " +"`_. This requires " +"`creating a GitHub account `_." +msgstr "" + +#: ../../source/help.rst:20 +msgid "Join our Keybase Team" +msgstr "" + +#: ../../source/help.rst:22 +msgid "" +"See :ref:`collaborating` on how to join the Keybase team used to discuss " +"the project." +msgstr "" + diff --git a/docs/source/locale/zh_Hans/LC_MESSAGES/index.po b/docs/source/locale/zh_Hans/LC_MESSAGES/index.po new file mode 100644 index 00000000..a9d61b0f --- /dev/null +++ b/docs/source/locale/zh_Hans/LC_MESSAGES/index.po @@ -0,0 +1,31 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) Micah Lee, et al. +# This file is distributed under the same license as the OnionShare package. +# FIRST AUTHOR , 2025. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: OnionShare 2.6.3\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-12 14:33+1100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language: zh_Hans\n" +"Language-Team: zh_Hans \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.17.0\n" + +#: ../../source/index.rst:2 +msgid "OnionShare's documentation" +msgstr "" + +#: ../../source/index.rst:6 +msgid "" +"OnionShare is an open source tool that lets you securely and anonymously " +"share files, host websites, and chat with friends using the Tor network." +msgstr "" + diff --git a/docs/source/locale/zh_Hans/LC_MESSAGES/install.po b/docs/source/locale/zh_Hans/LC_MESSAGES/install.po new file mode 100644 index 00000000..c76938ff --- /dev/null +++ b/docs/source/locale/zh_Hans/LC_MESSAGES/install.po @@ -0,0 +1,433 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) Micah Lee, et al. +# This file is distributed under the same license as the OnionShare package. +# FIRST AUTHOR , 2025. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: OnionShare 2.6.3\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-12 14:33+1100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language: zh_Hans\n" +"Language-Team: zh_Hans \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.17.0\n" + +#: ../../source/install.rst:2 +msgid "Installation" +msgstr "" + +#: ../../source/install.rst:5 +msgid "Windows or macOS" +msgstr "" + +#: ../../source/install.rst:7 +msgid "" +"You can download OnionShare for Windows and macOS from the `OnionShare " +"website `_." +msgstr "" + +#: ../../source/install.rst:12 +msgid "Mobile" +msgstr "" + +#: ../../source/install.rst:14 +msgid "You can download OnionShare for Mobile from the follow links" +msgstr "" + +#: ../../source/install.rst:16 +msgid "Android" +msgstr "" + +#: ../../source/install.rst:17 +msgid "" +"Google Play: " +"https://play.google.com/store/apps/details?id=org.onionshare.android" +msgstr "" + +#: ../../source/install.rst:18 +msgid "F-Droid: https://github.com/onionshare/onionshare-android-nightly" +msgstr "" + +#: ../../source/install.rst:20 +msgid "iOS" +msgstr "" + +#: ../../source/install.rst:21 +msgid "Apple App Store: https://apps.apple.com/app/onionshare/id1601890129" +msgstr "" + +#: ../../source/install.rst:22 +msgid "Direct IPA download: https://github.com/onionshare/onionshare-ios/releases" +msgstr "" + +#: ../../source/install.rst:23 +msgid "Testflight: https://testflight.apple.com/join/ZCJeY65W" +msgstr "" + +#: ../../source/install.rst:27 +msgid "Linux" +msgstr "" + +#: ../../source/install.rst:29 +msgid "" +"There are various ways to install OnionShare for Linux, but the " +"recommended way is to use either the `Flatpak `_ or" +" the `Snap `_ package. Flatpak and Snapcraft " +"ensure that you'll always use the newest version and run OnionShare " +"inside of a sandbox." +msgstr "" + +#: ../../source/install.rst:32 +msgid "" +"Snapcraft support is built-in to Ubuntu and Fedora comes with Flatpak " +"support, but which you use is up to you. Both work in all Linux " +"distributions." +msgstr "" + +#: ../../source/install.rst:34 +msgid "" +"**Install OnionShare using Flatpak**: " +"https://flathub.org/apps/details/org.onionshare.OnionShare" +msgstr "" + +#: ../../source/install.rst:36 +msgid "**Install OnionShare using Snapcraft**: https://snapcraft.io/onionshare" +msgstr "" + +#: ../../source/install.rst:38 +msgid "" +"You can also download and install PGP-signed ``.flatpak`` or ``.snap`` " +"packages from https://onionshare.org/dist/ if you prefer." +msgstr "" + +#: ../../source/install.rst:41 +msgid "Manual Flatpak Installation" +msgstr "" + +#: ../../source/install.rst:43 +msgid "" +"If you'd like to install OnionShare manually with Flatpak using the PGP-" +"signed `single-file bundle `_, you can do so like this:" +msgstr "" + +#: ../../source/install.rst:45 +msgid "" +"Install Flatpak by following the instructions at " +"https://flatpak.org/setup/." +msgstr "" + +#: ../../source/install.rst:46 +msgid "" +"Add the Flathub repository by running ``flatpak remote-add --if-not-" +"exists flathub https://flathub.org/repo/flathub.flatpakrepo``. Even " +"though you won't be downloading OnionShare from Flathub, OnionShare " +"depends on some packages that are only available there." +msgstr "" + +#: ../../source/install.rst:47 +msgid "" +"Go to https://onionshare.org/dist/, choose the latest version of " +"OnionShare, and download the ``.flatpak`` and ``.flatpak.asc`` files." +msgstr "" + +#: ../../source/install.rst:48 +msgid "" +"Verify the PGP signature of the ``.flatpak`` file. See " +":ref:`verifying_sigs` for more info." +msgstr "" + +#: ../../source/install.rst:49 +msgid "" +"Install the ``.flatpak`` file by running ``flatpak install OnionShare-" +"VERSION.flatpak``. Replace ``VERSION`` with the version number of the " +"file you downloaded." +msgstr "" + +#: ../../source/install.rst:51 +msgid "You can run OnionShare with: `flatpak run org.onionshare.OnionShare`." +msgstr "" + +#: ../../source/install.rst:54 +msgid "Manual Snapcraft Installation" +msgstr "" + +#: ../../source/install.rst:56 +msgid "" +"If you'd like to install OnionShare manually with Snapcraft using the " +"PGP-signed Snapcraft package, you can do so like this:" +msgstr "" + +#: ../../source/install.rst:58 +msgid "" +"Install Snapcraft by following the instructions at " +"https://snapcraft.io/docs/installing-snapd." +msgstr "" + +#: ../../source/install.rst:59 +msgid "" +"Go to https://onionshare.org/dist/, choose the latest version of " +"OnionShare, and download the ``.snap`` and ``.snap.asc`` files." +msgstr "" + +#: ../../source/install.rst:60 +msgid "" +"Verify the PGP signature of the ``.snap`` file. See :ref:`verifying_sigs`" +" for more info." +msgstr "" + +#: ../../source/install.rst:61 +msgid "" +"Install the ``.snap`` file by running ``snap install --dangerous " +"onionshare_VERSION_amd64.snap``. Replace ``VERSION`` with the version " +"number of the file you downloaded. Note that you must use `--dangerous` " +"because the package is not signed by the Snapcraft store, however you did" +" verify its PGP signature, so you know it's legitimate." +msgstr "" + +#: ../../source/install.rst:63 +msgid "You can run OnionShare with: `snap run onionshare`." +msgstr "" + +#: ../../source/install.rst:68 +msgid "Command-line only" +msgstr "" + +#: ../../source/install.rst:70 +msgid "" +"You can install just the command-line version of OnionShare on any " +"operating system using the Python package manager ``pip``. :ref:`cli` has" +" more info." +msgstr "" + +#: ../../source/install.rst:75 +msgid "FreeBSD" +msgstr "" + +#: ../../source/install.rst:77 +msgid "" +"Althought not being officially developed for this platform, OnionShare " +"can also be installed on `FreeBSD `_. It's " +"available via its ports collection or as pre-built package. Should you " +"opt to install and use OnionShare on a FreeBSD operating system, please " +"be aware that it's **NOT** officially supported by the OnionShare " +"project." +msgstr "" + +#: ../../source/install.rst:79 +msgid "" +"Though not being offered and officially maintained by the OnionShare " +"developers, the FreeBSD packages and ports do fetch and verifies the " +"source codes from the official OnionShare repository (or its official " +"release packages from `PyPI `_). Should you wish to check changes related to this platform, " +"please refer to the following resources:" +msgstr "" + +#: ../../source/install.rst:81 +msgid "https://cgit.freebsd.org/ports/log/www/onionshare" +msgstr "" + +#: ../../source/install.rst:82 +msgid "https://www.freshports.org/www/onionshare" +msgstr "" + +#: ../../source/install.rst:85 +msgid "Manual pkg Installation" +msgstr "" + +#: ../../source/install.rst:87 +msgid "" +"To install the binary package, use ``pkg install pyXY-onionshare``, with " +"``pyXY`` specifying the version of Python the package was built for. So, " +"in order to install OnionShare for Python 3.9, use::" +msgstr "" + +#: ../../source/install.rst:91 +msgid "" +"There's also a **Command-line only** version of OnionShare available as " +"pre-built package. Replace ``py39-onionshare`` by ``py39-onionshare-cli``" +" if you want to install that version." +msgstr "" + +#: ../../source/install.rst:93 +msgid "" +"For additional information and details about the FreeBSD pre-built " +"packages, please refer to its `official Handbook section about pkg " +"`_." +msgstr "" + +#: ../../source/install.rst:96 +msgid "Manual port Installation" +msgstr "" + +#: ../../source/install.rst:98 +msgid "" +"To install the FreeBSD port, change directory to the `ports collection " +"`_ you must have checked out before and run " +"the following::" +msgstr "" + +#: ../../source/install.rst:102 +msgid "" +"The ports collection also offers a dedicated port for the **Command-line " +"only** version of OnionShare. Replace ``www/onionshare`` by ``www" +"/onionshare-cli`` if you want to install that version." +msgstr "" + +#: ../../source/install.rst:104 +msgid "" +"For additional information and details about the FreeBSD ports " +"collection, please refer to its `official Handbook section about ports " +"`_." +msgstr "" + +#: ../../source/install.rst:109 +msgid "Verifying PGP signatures" +msgstr "" + +#: ../../source/install.rst:111 +msgid "" +"You can verify that the package you download is legitimate and hasn't " +"been tampered with by verifying its PGP signature. For Windows and macOS," +" this step is optional and provides defense in depth: the OnionShare " +"binaries include operating system-specific signatures, and you can just " +"rely on those alone if you'd like." +msgstr "" + +#: ../../source/install.rst:115 +msgid "Signing key" +msgstr "" + +#: ../../source/install.rst:117 +msgid "" +"Packages are signed by the core developer who is responsible for the " +"particular release. Here is the GPG key information for each of the core " +"developers of OnionShare:" +msgstr "" + +#: ../../source/install.rst:120 +msgid "Micah Lee:" +msgstr "" + +#: ../../source/install.rst:121 +msgid "PGP public key fingerprint ``927F419D7EC82C2F149C1BD1403C2657CD994F73``." +msgstr "" + +#: ../../source/install.rst:122 +msgid "" +"You can download Micah's key `from the keys.openpgp.org keyserver " +"`_." +msgstr "" + +#: ../../source/install.rst:124 +msgid "Saptak Sengupta:" +msgstr "" + +#: ../../source/install.rst:125 +msgid "PGP public key fingerprint ``2AE3D40A6905C8E4E8ED95ECE46A2B977C14666B``." +msgstr "" + +#: ../../source/install.rst:126 +msgid "" +"You can download Saptak's key `from the keys.openpgp.org keyserver " +"`_." +msgstr "" + +#: ../../source/install.rst:128 +msgid "Miguel Jacq:" +msgstr "" + +#: ../../source/install.rst:129 +msgid "PGP public key fingerprint ``00AE817C24A10C2540461A9C1D7CDE0234DB458D``." +msgstr "" + +#: ../../source/install.rst:130 +msgid "" +"You can download Miguel's key `from the keys.openpgp.org keyserver " +"`_." +msgstr "" + +#: ../../source/install.rst:132 +msgid "" +"You must have GnuPG installed to verify signatures. For macOS you " +"probably want `GPGTools `_, and for Windows you " +"probably want `Gpg4win `_." +msgstr "" + +#: ../../source/install.rst:135 +msgid "Signatures" +msgstr "" + +#: ../../source/install.rst:137 +msgid "" +"You can find the signatures (as ``.asc`` files), as well as Windows, " +"macOS, Flatpak, Snap, and source packages, at " +"https://onionshare.org/dist/ in the folders named for each version of " +"OnionShare. You can also find them on the `GitHub Releases page " +"`_." +msgstr "" + +#: ../../source/install.rst:141 +msgid "Verifying" +msgstr "" + +#: ../../source/install.rst:143 +msgid "" +"Once you have imported the core developers public keys into your GnuPG " +"keychain, downloaded the binary and ``.asc`` signature, you can verify " +"the binary in a terminal like this:" +msgstr "" + +#: ../../source/install.rst:145 +msgid "For Windows::" +msgstr "" + +#: ../../source/install.rst:149 +msgid "For macOS::" +msgstr "" + +#: ../../source/install.rst:153 +msgid "For Linux::" +msgstr "" + +#: ../../source/install.rst:159 +msgid "and for the source file::" +msgstr "" + +#: ../../source/install.rst:163 +msgid "The expected output looks like this::" +msgstr "" + +#: ../../source/install.rst:173 +msgid "" +"If you don't see ``Good signature from``, there might be a problem with " +"the integrity of the file (malicious or otherwise), and you should not " +"install the package." +msgstr "" + +#: ../../source/install.rst:175 +msgid "" +"The ``WARNING:`` shown above, is not a problem with the package, it only " +"means you haven't defined a level of \"trust\" of Micah's (the core " +"developer) PGP key." +msgstr "" + +#: ../../source/install.rst:177 +msgid "" +"If you want to learn more about verifying PGP signatures, the guides for " +"`Qubes OS `_ and" +" the `Tor Project `_ may be useful." +msgstr "" + diff --git a/docs/source/locale/zh_Hans/LC_MESSAGES/security.po b/docs/source/locale/zh_Hans/LC_MESSAGES/security.po new file mode 100644 index 00000000..e81f817d --- /dev/null +++ b/docs/source/locale/zh_Hans/LC_MESSAGES/security.po @@ -0,0 +1,105 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) Micah Lee, et al. +# This file is distributed under the same license as the OnionShare package. +# FIRST AUTHOR , 2025. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: OnionShare 2.6.3\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-12 14:33+1100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language: zh_Hans\n" +"Language-Team: zh_Hans \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.17.0\n" + +#: ../../source/security.rst:2 +msgid "Security Design" +msgstr "" + +#: ../../source/security.rst:4 +msgid "Read :ref:`how_it_works` first to get a handle on how OnionShare works." +msgstr "" + +#: ../../source/security.rst:6 +msgid "Like all software, OnionShare may contain bugs or vulnerabilities." +msgstr "" + +#: ../../source/security.rst:9 +msgid "What OnionShare protects against" +msgstr "" + +#: ../../source/security.rst:11 +msgid "" +"**Third parties don't have access to anything that happens in " +"OnionShare.** Using OnionShare means hosting services directly on your " +"computer. When sharing your files with OnionShare, they are not uploaded " +"to any third-party server. If you make an OnionShare chat room, your " +"computer acts as a server for that too. This avoids the traditional model" +" of having to trust the computers of others." +msgstr "" + +#: ../../source/security.rst:17 +msgid "" +"**Network eavesdroppers can't spy on anything that happens in OnionShare " +"in transit.** The connection between the Tor onion service and Tor " +"Browser is end-to-end encrypted. This means network attackers can't " +"eavesdrop on anything except encrypted Tor traffic. Even if an " +"eavesdropper is a malicious rendezvous node used to connect the Tor " +"Browser with OnionShare's onion service, the traffic is encrypted using " +"the onion service's private key." +msgstr "" + +#: ../../source/security.rst:23 +msgid "" +"**Anonymity of OnionShare users are protected by Tor.** OnionShare and " +"Tor Browser protect the anonymity of the users. As long as the OnionShare" +" user anonymously communicates the OnionShare address with the Tor " +"Browser users, the Tor Browser users and eavesdroppers can't learn the " +"identity of the OnionShare user." +msgstr "" + +#: ../../source/security.rst:28 +msgid "" +"**If an attacker learns about the onion service, they still can't access " +"anything.** Prior attacks against the Tor network to enumerate onion " +"services allowed attackers to discover private ``.onion`` addresses. To " +"access an OnionShare service from its address, the private key used for " +"client authentication must be guessed (unless the service is already made" +" public by turning off the private key -- see " +":ref:`turn_off_private_key`)." +msgstr "" + +#: ../../source/security.rst:33 +msgid "What OnionShare doesn't protect against" +msgstr "" + +#: ../../source/security.rst:35 +msgid "" +"**Communicating the OnionShare address and private key might not be " +"secure.** Communicating the OnionShare address to people is the " +"responsibility of the OnionShare user. If sent insecurely (such as " +"through an e-mail message monitored by an attacker), an eavesdropper can " +"tell that OnionShare is being used. Eavesdroppers can access services " +"that are still up by loading their addresses and/or lost key in the Tor " +"Browser. Avoid this by communicating the address securely, via encrypted " +"text message (probably with disappearing messages enabled), encrypted " +"e-mail, or in person. This isn't necessary when using OnionShare for " +"something that isn't secret." +msgstr "" + +#: ../../source/security.rst:42 +msgid "" +"**Communicating the OnionShare address and private key might not be " +"anonymous.** Extra precaution must be taken to ensure the OnionShare " +"address is communicated anonymously. A new e-mail or chat account, only " +"accessed over Tor, can be used to share the address. This isn't necessary" +" unless anonymity is a goal." +msgstr "" + diff --git a/docs/source/locale/zh_Hans/LC_MESSAGES/sphinx.po b/docs/source/locale/zh_Hans/LC_MESSAGES/sphinx.po new file mode 100644 index 00000000..8fd33649 --- /dev/null +++ b/docs/source/locale/zh_Hans/LC_MESSAGES/sphinx.po @@ -0,0 +1,29 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) Micah Lee, et al. +# This file is distributed under the same license as the OnionShare package. +# FIRST AUTHOR , 2025. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: OnionShare 2.6.3\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-12 14:33+1100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language: zh_Hans\n" +"Language-Team: zh_Hans \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.17.0\n" + +#: ../../source/_templates/versions.html:10 +msgid "Versions" +msgstr "" + +#: ../../source/_templates/versions.html:18 +msgid "Languages" +msgstr "" + diff --git a/docs/source/locale/zh_Hans/LC_MESSAGES/tor.po b/docs/source/locale/zh_Hans/LC_MESSAGES/tor.po new file mode 100644 index 00000000..13d2eade --- /dev/null +++ b/docs/source/locale/zh_Hans/LC_MESSAGES/tor.po @@ -0,0 +1,374 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) Micah Lee, et al. +# This file is distributed under the same license as the OnionShare package. +# FIRST AUTHOR , 2025. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: OnionShare 2.6.3\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-12 14:33+1100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language: zh_Hans\n" +"Language-Team: zh_Hans \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.17.0\n" + +#: ../../source/tor.rst:2 +msgid "Connecting to Tor" +msgstr "" + +#: ../../source/tor.rst:4 +msgid "" +"When OnionShare starts, it will show you a screen asking you to connect " +"to the Tor network." +msgstr "" + +#: ../../source/tor.rst:8 +msgid "" +"You can toggle on the switch \"Connect to Tor automatically\" before " +"clicking \"Connect to Tor\". This means that next time OnionShare starts," +" it will automatically connect with its Tor connection settings from the " +"last session, instead of presenting you with the connection options. If " +"the connection fails, you can still try bridges or reconfigure Tor via " +"the \"Network Settings\" button." +msgstr "" + +#: ../../source/tor.rst:11 +msgid "" +"You can click \"Connect to Tor\" to begin the connection process. If " +"there are no problems with your network, including any attempts to block " +"your access to the Tor network, this should hopefully work the first " +"time." +msgstr "" + +#: ../../source/tor.rst:13 +msgid "" +"Or, if you want to manually configure Bridges or other Tor settings " +"before you connect, you can click \"Network Settings\"." +msgstr "" + +#: ../../source/tor.rst:16 +msgid "Automatic censorship circumvention" +msgstr "" + +#: ../../source/tor.rst:18 +msgid "" +"When you click \"Connect to Tor\", if OnionShare fails to connect, it " +"might be because Tor is censored in your country or on your local " +"network." +msgstr "" + +#: ../../source/tor.rst:20 +msgid "If this occurs, you will have these choices:" +msgstr "" + +#: ../../source/tor.rst:22 +msgid "Try again without a bridge" +msgstr "" + +#: ../../source/tor.rst:23 +msgid "Automatically determine my country from my IP address for bridge settings" +msgstr "" + +#: ../../source/tor.rst:24 +msgid "Manually select my country for bridge settings" +msgstr "" + +#: ../../source/tor.rst:28 +msgid "" +"If you choose the \"Try again without a bridge\" option, OnionShare will " +"retry connecting to Tor like normal, without attempting to bypass " +"censorship." +msgstr "" + +#: ../../source/tor.rst:30 +msgid "" +"The other two options will attempt to automatically bypass censorship " +"using Tor bridges. If your network provider is blocking access to the Tor" +" network, you can hopefully still connect to a Tor bridge, which will " +"then connect you to the Tor network, circumventing the censorship. Both " +"of these options use the Tor Project's Censorship Circumvention API to " +"provide you with bridge settings that should work for you. OnionShare " +"will temporarily use the `Meek " +"`_ domain-" +"fronting proxy to make a non-Tor connection from your computer to Tor's " +"Censorship Circumvention API. The Meek proxy hides the fact that you are " +"trying to find a way to connect to Tor." +msgstr "" + +#: ../../source/tor.rst:36 +msgid "" +"If you choose \"Automatically determine my country from my IP address for" +" bridge settings\", the Censorship Circumvention API will consider your " +"IP address (yes, your real IP address) to determine what country you " +"might reside in. Based on the country information, the API will try to " +"automatically find bridges that suit your location." +msgstr "" + +#: ../../source/tor.rst:41 +msgid "" +"If you choose \"Manually select my country for bridge settings\", the " +"Censorship API will find the bridges that suit the country that you " +"specified." +msgstr "" + +#: ../../source/tor.rst:46 +msgid "How automatic censorship circumvention works" +msgstr "" + +#: ../../source/tor.rst:48 +msgid "" +"If the Censorship Circumvention API finds bridges that it believes will " +"suit you, OnionShare will try to reconnect to Tor using those bridges. If" +" the API does not find any bridges for your location, OnionShare will ask" +" the API for \"fallback\" options, and then try to reconnect using those." +msgstr "" + +#: ../../source/tor.rst:50 +msgid "" +"If for some reason OnionShare fails to connect to the Censorship API " +"itself, or if the API returns an error message, OnionShare will attempt " +"to use the obfs4 built-in bridges." +msgstr "" + +#: ../../source/tor.rst:52 +msgid "" +"It's important to note that the requests to the Censorship Circumvention " +"API do not go over the Tor network (because if you could connect to Tor " +"already, you wouldn't need to connect to the API)." +msgstr "" + +#: ../../source/tor.rst:54 +msgid "" +"Even though it's hard for an adversary to discover where the Meek request" +" is going, this may still be risky for some users. Therefore, it is an " +"opt-in feature. The use of Meek and non-torified network requests are " +"limited only to making one or two requests to the Censorship " +"Circumvention API. Then Meek is stopped, and all further network requests" +" happen over the Tor network." +msgstr "" + +#: ../../source/tor.rst:56 +msgid "" +"If you are uncomfortable with making a request that doesn't go over the " +"Tor network, you can click \"Network Settings\" (or the Settings icon in " +"the bottom right corner, followed by the Tor Settings tab in the screen " +"that appears), and manually configure bridges. After you save any bridge " +"settings, OnionShare will try to reconnect using those bridges." +msgstr "" + +#: ../../source/tor.rst:59 +msgid "Manually configure Tor settings" +msgstr "" + +#: ../../source/tor.rst:61 +msgid "" +"You can get to the Tor settings by clicking \"Network Settings\" on the " +"welcome screen, or by clicking the \"⚙\" icon in the bottom-right corner " +"of the application, and then switch to the Tor Settings tab in the screen" +" that appears." +msgstr "" + +#: ../../source/tor.rst:65 +msgid "" +"Here are the different ways you can configure OnionShare to connect to " +"Tor:" +msgstr "" + +#: ../../source/tor.rst:68 +msgid "Use the Tor version built into OnionShare" +msgstr "" + +#: ../../source/tor.rst:70 +msgid "" +"This is the default, simplest and most reliable way that OnionShare " +"connects to Tor. For this reason, it's recommended for most users." +msgstr "" + +#: ../../source/tor.rst:73 +msgid "" +"When you open OnionShare, it launches an already configured ``tor`` " +"process in the background for OnionShare to use. It doesn't interfere " +"with other ``tor`` processes on your computer, so you can use the Tor " +"Browser or the system ``tor`` on their own." +msgstr "" + +#: ../../source/tor.rst:76 +msgid "**Using bridges**" +msgstr "" + +#: ../../source/tor.rst:78 +msgid "" +"To use a bridge, you must select \"Use the Tor version built into " +"OnionShare\" and check the \"Use a bridge\" checkbox." +msgstr "" + +#: ../../source/tor.rst:80 +msgid "" +"Try using a built-in bridge first. Using `obfs4` or `snowflake` bridges " +"is recommended over using `meek-azure`." +msgstr "" + +#: ../../source/tor.rst:84 +msgid "" +"If using a built-in bridge doesn't work, you can request a bridge from " +"torproject.org. You will have to solve a CAPTCHA in order to request a " +"bridge. (This makes it more difficult for governments or ISPs to block " +"access to Tor bridges.)" +msgstr "" + +#: ../../source/tor.rst:88 +msgid "" +"You also have the option of using a bridge that you learned about from a " +"trusted source." +msgstr "" + +#: ../../source/tor.rst:91 +msgid "Attempt auto-configuration with Tor Browser" +msgstr "" + +#: ../../source/tor.rst:93 +msgid "" +"If you have `downloaded the Tor Browser `_ " +"and don't want two ``tor`` processes running, you can use the ``tor`` " +"process from the Tor Browser. Keep in mind you need to keep Tor Browser " +"open in the background while you're using OnionShare for this to work." +msgstr "" + +#: ../../source/tor.rst:97 +msgid "Using a system ``tor`` in Windows" +msgstr "" + +#: ../../source/tor.rst:99 +msgid "" +"This is fairly advanced. You'll need to know how edit plaintext files and" +" do stuff as an administrator." +msgstr "" + +#: ../../source/tor.rst:101 +msgid "" +"Download the Tor Windows Expert Bundle `from the Tor website " +"`_. Extract the compressed file" +" and copy the extracted folder to ``C:\\Program Files (x86)\\`` Rename " +"the extracted folder with ``Data`` and ``Tor`` in it to ``tor-win32``." +msgstr "" + +#: ../../source/tor.rst:105 +msgid "" +"Make up a control port password. (Using 7 words in a sequence like " +"``comprised stumble rummage work avenging construct volatile`` is a good " +"idea for a password.) Now open a command prompt (``cmd``) as an " +"administrator, and use ``tor.exe --hash-password`` to generate a hash of " +"your password. For example::" +msgstr "" + +#: ../../source/tor.rst:112 +msgid "" +"The hashed password output is displayed after some warnings (which you " +"can ignore). In the case of the above example, it is " +"``16:00322E903D96DE986058BB9ABDA91E010D7A863768635AC38E213FDBEF``." +msgstr "" + +#: ../../source/tor.rst:114 +msgid "" +"Now create a new text file at ``C:\\Program Files (x86)\\tor-" +"win32\\torrc`` and put your hashed password output in it, replacing the " +"``HashedControlPassword`` with the one you just generated::" +msgstr "" + +#: ../../source/tor.rst:119 +msgid "" +"In your administrator command prompt, install ``tor`` as a service using " +"the appropriate ``torrc`` file you just created (as described in " +"``_). Like " +"this::" +msgstr "" + +#: ../../source/tor.rst:123 +msgid "You are now running a system ``tor`` process in Windows!" +msgstr "" + +#: ../../source/tor.rst:125 +msgid "" +"Open OnionShare, click the \"⚙\" icon in it, and switch to the Tor " +"Settings tab. Under \"How should OnionShare connect to Tor?\" choose " +"\"Connect using control port\", and set \"Control port\" to ``127.0.0.1``" +" and \"Port\" to ``9051``. Under \"Tor authentication settings\" choose " +"\"Password\" and set the password to the control port password you picked" +" above. Click the \"Test Connection to Tor\" button. If all goes well, " +"you should see \"Connected to the Tor controller\"." +msgstr "" + +#: ../../source/tor.rst:134 +msgid "Using a system ``tor`` in macOS" +msgstr "" + +#: ../../source/tor.rst:136 +msgid "" +"First, install `Homebrew `_ if you don't already have " +"it, and then install Tor::" +msgstr "" + +#: ../../source/tor.rst:140 +msgid "Now configure Tor to allow connections from OnionShare::" +msgstr "" + +#: ../../source/tor.rst:147 +msgid "And start the system Tor service::" +msgstr "" + +#: ../../source/tor.rst:151 +msgid "" +"Open OnionShare, click the \"⚙\" icon in it, and switch to the Tor " +"Settings tab. Under \"How should OnionShare connect to Tor?\" choose " +"\"Connect using socket file\", and set the socket file to be " +"``/usr/local/var/run/tor/control.socket``. Under \"Tor authentication " +"settings\" choose \"No authentication, or cookie authentication\". Click " +"the \"Test Connection to Tor\" button." +msgstr "" + +#: ../../source/tor.rst:157 ../../source/tor.rst:177 +msgid "If all goes well, you should see \"Connected to the Tor controller\"." +msgstr "" + +#: ../../source/tor.rst:160 +msgid "Using a system ``tor`` in Linux" +msgstr "" + +#: ../../source/tor.rst:162 +msgid "" +"First, install the ``tor`` package. If you're using Debian, Ubuntu, or a " +"similar Linux distro, It is recommended to use the Tor Project's " +"`official repository `_." +msgstr "" + +#: ../../source/tor.rst:164 +msgid "" +"Next, add your user to the group that runs the ``tor`` process (in the " +"case of Debian and Ubuntu, ``debian-tor``) and configure OnionShare to " +"connect to your system ``tor``'s control socket file." +msgstr "" + +#: ../../source/tor.rst:166 +msgid "" +"Add your user to the ``debian-tor`` group by running this command " +"(replace ``username`` with your actual username)::" +msgstr "" + +#: ../../source/tor.rst:170 +msgid "" +"Reboot your computer. After it boots up again, open OnionShare, click the" +" \"⚙\" icon in it, and switch to the Tor Settings tab. Under \"How should" +" OnionShare connect to Tor?\" choose \"Connect using socket file\". Set " +"the socket file to be ``/var/run/tor/control``. Under \"Tor " +"authentication settings\" choose \"No authentication, or cookie " +"authentication\". Click the \"Test Connection to Tor\" button." +msgstr "" + From 7284446c939ffee0a35938ced8d6d8c610c336a9 Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Wed, 12 Feb 2025 14:51:20 +1100 Subject: [PATCH 06/17] Update CHANGELOG.md --- CHANGELOG.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a0715f83..543313f2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ # OnionShare Changelog +## 2.6.3 + +* Feature: It is now possible to view what URLs are visited in Share/Website mode using the CLI tool, with `--log-filenames`. +* Feature: It is now possible to automatically start a saved persistent onion tab, once OnionShare itself starts and once Tor is connected. +* Bug fix: It is now once again possible to request bridges and use meek as a Pluggable Transport. +* Locales: Gaeilge, Slovenčina and Tamil languages introduced, and various other translations in existing languages added or improved (thanks to the translators!) +* Documentation: Added examples of using a systemd unit file for persistent onions, and various other clarifications. +* Packaging: Built the snap with a cleanup step in such a way that it should work on Ubuntu 24.04 and higher. +* Packaging: Many internal packaging improvements that make it easier for us to release snap and flatpak. +* Miscellaneous: Many dependency updates to Python libraries, Tor, Snowflake +* Miscellaneous: Various minor bug fixes/warning messages resolved. + ## 2.6.2 * Security fix: Removes newlines from History item path From 62a160e2202a61782a275aaff5f460924524402c Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Thu, 13 Feb 2025 10:46:37 +1100 Subject: [PATCH 07/17] Updated changelog --- CHANGELOG.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 543313f2..3f850e4f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,9 +5,11 @@ * Feature: It is now possible to view what URLs are visited in Share/Website mode using the CLI tool, with `--log-filenames`. * Feature: It is now possible to automatically start a saved persistent onion tab, once OnionShare itself starts and once Tor is connected. * Bug fix: It is now once again possible to request bridges and use meek as a Pluggable Transport. +* Bug fix: Fix an issue with lack of gevent with SocketIO on systems that don't have it. +* Bug fix: Fix a thread-related race condition segfault with the CLI tool on shutdown. * Locales: Gaeilge, Slovenčina and Tamil languages introduced, and various other translations in existing languages added or improved (thanks to the translators!) * Documentation: Added examples of using a systemd unit file for persistent onions, and various other clarifications. -* Packaging: Built the snap with a cleanup step in such a way that it should work on Ubuntu 24.04 and higher. +* Packaging: Built the snap with a cleanup step in such a way that it should work on Ubuntu 24.04 and higher. Unfortunately, we have to drop support for armhf for now, as there are no PySide6 packages available on Pypi to install for that architecture. * Packaging: Many internal packaging improvements that make it easier for us to release snap and flatpak. * Miscellaneous: Many dependency updates to Python libraries, Tor, Snowflake * Miscellaneous: Various minor bug fixes/warning messages resolved. From 8665567861f28a9b549ea415a5d7134b5e95f135 Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Thu, 13 Feb 2025 12:41:41 +1100 Subject: [PATCH 08/17] Update date --- desktop/org.onionshare.OnionShare.appdata.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/desktop/org.onionshare.OnionShare.appdata.xml b/desktop/org.onionshare.OnionShare.appdata.xml index 28451f78..2b528cb6 100644 --- a/desktop/org.onionshare.OnionShare.appdata.xml +++ b/desktop/org.onionshare.OnionShare.appdata.xml @@ -24,6 +24,6 @@ micah@micahflee.com - + From cef9daff22f04ab6979a23e61d3a9d0cd3edf85e Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Fri, 14 Feb 2025 11:31:01 +1100 Subject: [PATCH 09/17] Add validation of python package downloaded for Mac during CI build --- .github/workflows/build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index da331951..fecbc430 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -123,6 +123,7 @@ jobs: - name: Install Python 3.12.8 (universal2) run: | curl -L https://www.python.org/ftp/python/3.12.8/python-3.12.8-macos11.pkg --output ~/Downloads/python.pkg + echo "c411b5372d563532f5e6b589af7eb16e95613d61bd5af7bfe78563467130bbfa ~/Downloads/python.pkg" | shasum -a 256 --check sudo installer -pkg ~/Downloads/python.pkg -target / - name: Install poetry From 8aba9e79ff30a5230b2269258a27db718e655751 Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Fri, 14 Feb 2025 11:35:05 +1100 Subject: [PATCH 10/17] fix check --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index fecbc430..bdf210ec 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -123,7 +123,7 @@ jobs: - name: Install Python 3.12.8 (universal2) run: | curl -L https://www.python.org/ftp/python/3.12.8/python-3.12.8-macos11.pkg --output ~/Downloads/python.pkg - echo "c411b5372d563532f5e6b589af7eb16e95613d61bd5af7bfe78563467130bbfa ~/Downloads/python.pkg" | shasum -a 256 --check + echo "c411b5372d563532f5e6b589af7eb16e95613d61bd5af7bfe78563467130bbfa python.pkg" | shasum -a 256 --check sudo installer -pkg ~/Downloads/python.pkg -target / - name: Install poetry From 187b6eaa6ac675b935d68a2af1078b0b4b282399 Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Fri, 14 Feb 2025 11:39:35 +1100 Subject: [PATCH 11/17] Tweak path --- .github/workflows/build.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index bdf210ec..5c57b638 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -123,8 +123,7 @@ jobs: - name: Install Python 3.12.8 (universal2) run: | curl -L https://www.python.org/ftp/python/3.12.8/python-3.12.8-macos11.pkg --output ~/Downloads/python.pkg - echo "c411b5372d563532f5e6b589af7eb16e95613d61bd5af7bfe78563467130bbfa python.pkg" | shasum -a 256 --check - sudo installer -pkg ~/Downloads/python.pkg -target / + cd ~/Downloads && echo "c411b5372d563532f5e6b589af7eb16e95613d61bd5af7bfe78563467130bbfa python.pkg" | shasum -a 256 --check && sudo installer -pkg python.pkg -target / - name: Install poetry run: | From 144665245a94a08f6113bf9555fad80addc431fa Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Fri, 14 Feb 2025 11:43:49 +1100 Subject: [PATCH 12/17] Correct sha256sum --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 5c57b638..cf897c84 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -123,7 +123,7 @@ jobs: - name: Install Python 3.12.8 (universal2) run: | curl -L https://www.python.org/ftp/python/3.12.8/python-3.12.8-macos11.pkg --output ~/Downloads/python.pkg - cd ~/Downloads && echo "c411b5372d563532f5e6b589af7eb16e95613d61bd5af7bfe78563467130bbfa python.pkg" | shasum -a 256 --check && sudo installer -pkg python.pkg -target / + cd ~/Downloads && echo "c411b5372d563532f5e6b589af7eb16e95613d61bd5af7bfe78563467130bbff python.pkg" | shasum -a 256 --check && sudo installer -pkg python.pkg -target / - name: Install poetry run: | From 2239c110ae1ca7d9aa0cf602b143b99406cf6b5a Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Sat, 15 Feb 2025 20:20:34 +1100 Subject: [PATCH 13/17] Update flatpak and snap dependencies after cli change to python >= 3.10 --- flatpak/onionshare-cli.yaml | 16 ++---- snap/local/cli-requirements.txt | 96 ++++++++++++++++----------------- 2 files changed, 50 insertions(+), 62 deletions(-) diff --git a/flatpak/onionshare-cli.yaml b/flatpak/onionshare-cli.yaml index b174d478..18197f84 100644 --- a/flatpak/onionshare-cli.yaml +++ b/flatpak/onionshare-cli.yaml @@ -1,13 +1,13 @@ name: poetry-deps buildsystem: simple build-commands: - - pip3 install --use-pep517 --no-index --find-links="file://${PWD}" --prefix=${FLATPAK_DEST} + - pip3 install --no-index --use-pep517 --find-links="file://${PWD}" --prefix=${FLATPAK_DEST} bidict blinker brotli brotlicffi certifi cffi charset-normalizer click colorama cython dnspython eventlet exceptiongroup flask flask-compress flask-socketio gevent - gevent-websocket greenlet h11 idna importlib-metadata iniconfig itsdangerous jinja2 - markupsafe packaging pluggy psutil pycparser pynacl pypng pysocks pytest python-engineio - python-socketio qrcode requests setuptools simple-websocket stem tomli typing-extensions - unidecode urllib3 waitress werkzeug wheel wsproto zipp zope-event zope-interface + gevent-websocket greenlet h11 idna iniconfig itsdangerous jinja2 markupsafe packaging + pluggy psutil pycparser pynacl pypng pysocks pytest python-engineio python-socketio + qrcode requests setuptools simple-websocket stem tomli typing-extensions unidecode + urllib3 waitress werkzeug wheel wsproto zope-event zope-interface sources: - type: file url: https://files.pythonhosted.org/packages/b5/82/ce0b6380f35f49d3fe687979a324c342cfa3588380232f3801db9dd62f9e/bidict-0.22.1-py3-none-any.whl @@ -72,9 +72,6 @@ sources: - type: file url: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl sha256: 946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3 - - type: file - url: https://files.pythonhosted.org/packages/c0/8b/d8427f023c081a8303e6ac7209c16e6878f2765d5b59667f3903fbcfd365/importlib_metadata-7.0.1-py3-none-any.whl - sha256: 4805911c3a4ec7c3966410053e9ec6a1fecd629117df5adee56dfc9432a1081e - type: file url: https://files.pythonhosted.org/packages/ef/a6/62565a6e1cf69e10f5727360368e451d4b7f58beeac6173dc9db836a5b46/iniconfig-2.0.0-py3-none-any.whl sha256: b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374 @@ -156,9 +153,6 @@ sources: - type: file url: https://files.pythonhosted.org/packages/78/58/e860788190eba3bcce367f74d29c4675466ce8dddfba85f7827588416f01/wsproto-1.2.0-py3-none-any.whl sha256: b9acddd652b585d75b20477888c56642fdade28bdfd3579aa24a4d2c037dd736 - - type: file - url: https://files.pythonhosted.org/packages/b7/1a/7e4798e9339adc931158c9d69ecc34f5e6791489d469f5e50ec15e35f458/zipp-3.21.0-py3-none-any.whl - sha256: ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931 - type: file url: https://files.pythonhosted.org/packages/fe/42/f8dbc2b9ad59e927940325a22d6d3931d630c3644dae7e2369ef5d9ba230/zope.event-5.0-py3-none-any.whl sha256: 2832e95014f4db26c47a13fdaef84cef2f4df37e66b59d8f1f4a8f319a632c26 diff --git a/snap/local/cli-requirements.txt b/snap/local/cli-requirements.txt index d1b5579d..e79827da 100644 --- a/snap/local/cli-requirements.txt +++ b/snap/local/cli-requirements.txt @@ -1,10 +1,10 @@ -bidict==0.22.1 ; python_version >= "3.9" and python_version < "3.13" \ +bidict==0.22.1 ; python_version >= "3.10" and python_version < "3.13" \ --hash=sha256:1e0f7f74e4860e6d0943a05d4134c63a2fad86f3d4732fb265bd79e4e856d81d \ --hash=sha256:6ef212238eb884b664f28da76f33f1d28b260f665fc737b413b287d5487d1e7b -blinker==1.7.0 ; python_version >= "3.9" and python_version < "3.13" \ +blinker==1.7.0 ; python_version >= "3.10" and python_version < "3.13" \ --hash=sha256:c3f865d4d54db7abc53758a01601cf343fe55b84c1de4e3fa910e420b438d5b9 \ --hash=sha256:e6820ff6fa4e4d1d8e2747c2283749c3f547e4fee112b98555cdcdae32996182 -brotli==1.1.0 ; python_version >= "3.9" and python_version < "3.13" and platform_python_implementation != "PyPy" \ +brotli==1.1.0 ; python_version >= "3.10" and python_version < "3.13" and platform_python_implementation != "PyPy" \ --hash=sha256:03d20af184290887bdea3f0f78c4f737d126c74dc2f3ccadf07e54ceca3bf208 \ --hash=sha256:0541e747cce78e24ea12d69176f6a7ddb690e62c425e01d31cc065e69ce55b48 \ --hash=sha256:069a121ac97412d1fe506da790b3e69f52254b9df4eb665cd42460c837193354 \ @@ -88,7 +88,7 @@ brotli==1.1.0 ; python_version >= "3.9" and python_version < "3.13" and platform --hash=sha256:fce1473f3ccc4187f75b4690cfc922628aed4d3dd013d047f95a9b3919a86596 \ --hash=sha256:fd5f17ff8f14003595ab414e45fce13d073e0762394f957182e69035c9f3d7c2 \ --hash=sha256:fdc3ff3bfccdc6b9cc7c342c03aa2400683f0cb891d46e94b64a197910dc4064 -brotlicffi==1.1.0.0 ; python_version >= "3.9" and python_version < "3.13" and platform_python_implementation == "PyPy" \ +brotlicffi==1.1.0.0 ; python_version >= "3.10" and python_version < "3.13" and platform_python_implementation == "PyPy" \ --hash=sha256:19ffc919fa4fc6ace69286e0a23b3789b4219058313cf9b45625016bf7ff996b \ --hash=sha256:1a807d760763e398bbf2c6394ae9da5815901aa93ee0a37bca5efe78d4ee3171 \ --hash=sha256:1b12b50e07c3911e1efa3a8971543e7648100713d4e0971b13631cce22c587eb \ @@ -116,10 +116,10 @@ brotlicffi==1.1.0.0 ; python_version >= "3.9" and python_version < "3.13" and pl --hash=sha256:ce01c7316aebc7fce59da734286148b1d1b9455f89cf2c8a4dfce7d41db55c2d \ --hash=sha256:d9eb71bb1085d996244439154387266fd23d6ad37161f6f52f1cd41dd95a3808 \ --hash=sha256:fa8ca0623b26c94fccc3a1fdd895be1743b838f3917300506d04aa3346fd2a14 -certifi==2025.1.31 ; python_version >= "3.9" and python_version < "3.13" \ +certifi==2025.1.31 ; python_version >= "3.10" and python_version < "3.13" \ --hash=sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651 \ --hash=sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe -cffi==1.16.0 ; python_version >= "3.9" and python_version < "3.13" \ +cffi==1.16.0 ; python_version >= "3.10" and python_version < "3.13" \ --hash=sha256:0c9ef6ff37e974b73c25eecc13952c55bceed9112be2d9d938ded8e856138bcc \ --hash=sha256:131fd094d1065b19540c3d72594260f118b231090295d8c34e19a7bbcf2e860a \ --hash=sha256:1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417 \ @@ -172,7 +172,7 @@ cffi==1.16.0 ; python_version >= "3.9" and python_version < "3.13" \ --hash=sha256:ee07e47c12890ef248766a6e55bd38ebfb2bb8edd4142d56db91b21ea68b7627 \ --hash=sha256:fa3a0128b152627161ce47201262d3140edb5a5c3da88d73a1b790a959126956 \ --hash=sha256:fcc8eb6d5902bb1cf6dc4f187ee3ea80a1eba0a89aba40a5cb20a5087d961357 -charset-normalizer==3.3.2 ; python_version >= "3.9" and python_version < "3.13" \ +charset-normalizer==3.3.2 ; python_version >= "3.10" and python_version < "3.13" \ --hash=sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027 \ --hash=sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087 \ --hash=sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786 \ @@ -263,13 +263,13 @@ charset-normalizer==3.3.2 ; python_version >= "3.9" and python_version < "3.13" --hash=sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33 \ --hash=sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519 \ --hash=sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561 -click==8.1.7 ; python_version >= "3.9" and python_version < "3.13" \ +click==8.1.7 ; python_version >= "3.10" and python_version < "3.13" \ --hash=sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28 \ --hash=sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de -colorama==0.4.6 ; python_version >= "3.9" and python_version < "3.13" \ +colorama==0.4.6 ; python_version >= "3.10" and python_version < "3.13" \ --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \ --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 -cython==3.0.8 ; python_version >= "3.9" and python_version < "3.13" \ +cython==3.0.8 ; python_version >= "3.10" and python_version < "3.13" \ --hash=sha256:000dc9e135d0eec6ecb2b40a5b02d0868a2f8d2e027a41b0fe16a908a9e6de02 \ --hash=sha256:05d7eddc668ae7993643f32c7661f25544e791edb745758672ea5b1a82ecffa6 \ --hash=sha256:0c38c9f0bcce2df0c3347285863621be904ac6b64c5792d871130569d893efd7 \ @@ -328,25 +328,25 @@ cython==3.0.8 ; python_version >= "3.9" and python_version < "3.13" \ --hash=sha256:f05c0bf9d085c031df8f583f0d506aa3be1692023de18c45d0aaf78685bbb944 \ --hash=sha256:fa97893d99385386925d00074654aeae3a98867f298d1e12ceaf38a9054a9bae \ --hash=sha256:fe81b339cffd87c0069c6049b4d33e28bdd1874625ee515785bf42c9fdff3658 -dnspython==2.7.0 ; python_version >= "3.9" and python_version < "3.13" \ +dnspython==2.7.0 ; python_version >= "3.10" and python_version < "3.13" \ --hash=sha256:b4c34b7d10b51bcc3a5071e7b8dee77939f1e878477eeecc965e9835f63c6c86 \ --hash=sha256:ce9c432eda0dc91cf618a5cedf1a4e142651196bbcd2c80e89ed5a907e5cfaf1 -eventlet==0.39.0 ; python_version >= "3.9" and python_version < "3.13" \ +eventlet==0.39.0 ; python_version >= "3.10" and python_version < "3.13" \ --hash=sha256:01ba0aa6ee2452690fc02b274a2409598a13b997c7b5af9dc66600fa42015a79 \ --hash=sha256:9522ca09ad4c1f874c238f06492a7e217ddb13bdeace4475d3b700dd0ba1f6be -flask-compress==1.14 ; python_version >= "3.9" and python_version < "3.13" \ +flask-compress==1.14 ; python_version >= "3.10" and python_version < "3.13" \ --hash=sha256:b86c9808f0f38ea2246c9730972cf978f2cdf6a9a1a69102ba81e07891e6b26c \ --hash=sha256:e46528f37b91857012be38e24e65db1a248662c3dc32ee7808b5986bf1d123ee -flask-socketio==5.3.4 ; python_version >= "3.9" and python_version < "3.13" \ +flask-socketio==5.3.4 ; python_version >= "3.10" and python_version < "3.13" \ --hash=sha256:1cbd379c9bf68ac37bcc4750d01708922fa6365d13a5447d3f8893792879410c \ --hash=sha256:564acfb24dcc9545cdae536cde0323653d9b547069a925f11eeb132338aa71c0 -flask==2.3.2 ; python_version >= "3.9" and python_version < "3.13" \ +flask==2.3.2 ; python_version >= "3.10" and python_version < "3.13" \ --hash=sha256:77fd4e1249d8c9923de34907236b747ced06e5467ecac1a7bb7115ae0e9670b0 \ --hash=sha256:8c2f9abd47a9e8df7f0c3f091ce9497d011dc3b31effcf4c85a6e2b50f4114ef -gevent-websocket==0.10.1 ; python_version >= "3.9" and python_version < "3.13" \ +gevent-websocket==0.10.1 ; python_version >= "3.10" and python_version < "3.13" \ --hash=sha256:17b67d91282f8f4c973eba0551183fc84f56f1c90c8f6b6b30256f31f66f5242 \ --hash=sha256:7eaef32968290c9121f7c35b973e2cc302ffb076d018c9068d2f5ca8b2d85fb0 -gevent==23.9.1 ; python_version >= "3.9" and python_version < "3.13" \ +gevent==23.9.1 ; python_version >= "3.10" and python_version < "3.13" \ --hash=sha256:272cffdf535978d59c38ed837916dfd2b5d193be1e9e5dcc60a5f4d5025dd98a \ --hash=sha256:2c7b5c9912378e5f5ccf180d1fdb1e83f42b71823483066eddbe10ef1a2fcaa2 \ --hash=sha256:36a549d632c14684bcbbd3014a6ce2666c5f2a500f34d58d32df6c9ea38b6535 \ @@ -387,7 +387,7 @@ gevent==23.9.1 ; python_version >= "3.9" and python_version < "3.13" \ --hash=sha256:f632487c87866094546a74eefbca2c74c1d03638b715b6feb12e80120960185a \ --hash=sha256:fae8d5b5b8fa2a8f63b39f5447168b02db10c888a3e387ed7af2bd1b8612e543 \ --hash=sha256:fde6402c5432b835fbb7698f1c7f2809c8d6b2bd9d047ac1f5a7c1d5aa569303 -greenlet==3.0.3 ; python_version >= "3.9" and python_version < "3.13" \ +greenlet==3.0.3 ; python_version >= "3.10" and python_version < "3.13" \ --hash=sha256:01bc7ea167cf943b4c802068e178bbf70ae2e8c080467070d01bfa02f337ee67 \ --hash=sha256:0448abc479fab28b00cb472d278828b3ccca164531daab4e970a0458786055d6 \ --hash=sha256:086152f8fbc5955df88382e8a75984e2bb1c892ad2e3c80a2508954e52295257 \ @@ -446,22 +446,19 @@ greenlet==3.0.3 ; python_version >= "3.9" and python_version < "3.13" \ --hash=sha256:fcd2469d6a2cf298f198f0487e0a5b1a47a42ca0fa4dfd1b6862c999f018ebbf \ --hash=sha256:fd096eb7ffef17c456cfa587523c5f92321ae02427ff955bebe9e3c63bc9f0da \ --hash=sha256:fe754d231288e1e64323cfad462fcee8f0288654c10bdf4f603a39ed923bef33 -h11==0.14.0 ; python_version >= "3.9" and python_version < "3.13" \ +h11==0.14.0 ; python_version >= "3.10" and python_version < "3.13" \ --hash=sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d \ --hash=sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761 -idna==3.10 ; python_version >= "3.9" and python_version < "3.13" \ +idna==3.10 ; python_version >= "3.10" and python_version < "3.13" \ --hash=sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9 \ --hash=sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3 -importlib-metadata==7.0.1 ; python_version >= "3.9" and python_version < "3.10" \ - --hash=sha256:4805911c3a4ec7c3966410053e9ec6a1fecd629117df5adee56dfc9432a1081e \ - --hash=sha256:f238736bb06590ae52ac1fab06a3a9ef1d8dce2b7a35b5ab329371d6c8f5d2cc -itsdangerous==2.1.2 ; python_version >= "3.9" and python_version < "3.13" \ +itsdangerous==2.1.2 ; python_version >= "3.10" and python_version < "3.13" \ --hash=sha256:2c2349112351b88699d8d4b6b075022c0808887cb7ad10069318a8b0bc88db44 \ --hash=sha256:5dbbc68b317e5e42f327f9021763545dc3fc3bfe22e6deb96aaf1fc38874156a -jinja2==3.1.5 ; python_version >= "3.9" and python_version < "3.13" \ +jinja2==3.1.5 ; python_version >= "3.10" and python_version < "3.13" \ --hash=sha256:8fefff8dc3034e27bb80d67c671eb8a9bc424c0ef4c0826edbff304cceff43bb \ --hash=sha256:aba0f4dc9ed8013c424088f68a5c226f7d6097ed89b246d7749c2ec4175c6adb -markupsafe==2.1.5 ; python_version >= "3.9" and python_version < "3.13" \ +markupsafe==2.1.5 ; python_version >= "3.10" and python_version < "3.13" \ --hash=sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf \ --hash=sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff \ --hash=sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f \ @@ -522,10 +519,10 @@ markupsafe==2.1.5 ; python_version >= "3.9" and python_version < "3.13" \ --hash=sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab \ --hash=sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd \ --hash=sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68 -packaging==24.2 ; python_version >= "3.9" and python_version < "3.13" \ +packaging==24.2 ; python_version >= "3.10" and python_version < "3.13" \ --hash=sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759 \ --hash=sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f -psutil==5.9.8 ; python_version >= "3.9" and python_version < "3.13" \ +psutil==5.9.8 ; python_version >= "3.10" and python_version < "3.13" \ --hash=sha256:02615ed8c5ea222323408ceba16c60e99c3f91639b07da6373fb7e6539abc56d \ --hash=sha256:05806de88103b25903dff19bb6692bd2e714ccf9e668d050d144012055cbca73 \ --hash=sha256:26bd09967ae00920df88e0352a91cff1a78f8d69b3ecabbfe733610c0af486c8 \ @@ -542,10 +539,10 @@ psutil==5.9.8 ; python_version >= "3.9" and python_version < "3.13" \ --hash=sha256:bd1184ceb3f87651a67b2708d4c3338e9b10c5df903f2e3776b62303b26cb631 \ --hash=sha256:d06016f7f8625a1825ba3732081d77c94589dca78b7a3fc072194851e88461a4 \ --hash=sha256:d16bbddf0693323b8c6123dd804100241da461e41d6e332fb0ba6058f630f8c8 -pycparser==2.21 ; python_version >= "3.9" and python_version < "3.13" \ +pycparser==2.21 ; python_version >= "3.10" and python_version < "3.13" \ --hash=sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9 \ --hash=sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206 -pynacl==1.5.0 ; python_version >= "3.9" and python_version < "3.13" \ +pynacl==1.5.0 ; python_version >= "3.10" and python_version < "3.13" \ --hash=sha256:06b8f6fa7f5de8d5d2f7573fe8c863c051225a27b61e6860fd047b1775807858 \ --hash=sha256:0c84947a22519e013607c9be43706dd42513f9e6ae5d39d3613ca1e142fba44d \ --hash=sha256:20f42270d27e1b6a29f54032090b972d97f0a1b0948cc52392041ef7831fee93 \ @@ -556,61 +553,58 @@ pynacl==1.5.0 ; python_version >= "3.9" and python_version < "3.13" \ --hash=sha256:a36d4a9dda1f19ce6e03c9a784a2921a4b726b02e1c736600ca9c22029474394 \ --hash=sha256:a422368fc821589c228f4c49438a368831cb5bbc0eab5ebe1d7fac9dded6567b \ --hash=sha256:e46dae94e34b085175f8abb3b0aaa7da40767865ac82c928eeb9e57e1ea8a543 -pypng==0.20220715.0 ; python_version >= "3.9" and python_version < "3.13" \ +pypng==0.20220715.0 ; python_version >= "3.10" and python_version < "3.13" \ --hash=sha256:4a43e969b8f5aaafb2a415536c1a8ec7e341cd6a3f957fd5b5f32a4cfeed902c \ --hash=sha256:739c433ba96f078315de54c0db975aee537cbc3e1d0ae4ed9aab0ca1e427e2c1 -pysocks==1.7.1 ; python_version >= "3.9" and python_version < "3.13" \ +pysocks==1.7.1 ; python_version >= "3.10" and python_version < "3.13" \ --hash=sha256:08e69f092cc6dbe92a0fdd16eeb9b9ffbc13cadfe5ca4c7bd92ffb078b293299 \ --hash=sha256:2725bd0a9925919b9b51739eea5f9e2bae91e83288108a9ad338b2e3a4435ee5 \ --hash=sha256:3f8804571ebe159c380ac6de37643bb4685970655d3bba243530d6558b799aa0 -python-engineio==4.9.0 ; python_version >= "3.9" and python_version < "3.13" \ +python-engineio==4.9.0 ; python_version >= "3.10" and python_version < "3.13" \ --hash=sha256:979859bff770725b75e60353d7ae53b397e8b517d05ba76733b404a3dcca3e4c \ --hash=sha256:e87459c15638e567711fd156e6f9c4a402668871bed79523f0ecfec744729ec7 -python-socketio==5.11.1 ; python_version >= "3.9" and python_version < "3.13" \ +python-socketio==5.11.1 ; python_version >= "3.10" and python_version < "3.13" \ --hash=sha256:bbcbd758ed8c183775cb2853ba001361e2fa018babf5cbe11a5b77e91c2ec2a2 \ --hash=sha256:f1a0228b8b1fbdbd93fbbedd821ebce0ef54b2b5bf6e98fcf710deaa7c574259 -qrcode==7.4.2 ; python_version >= "3.9" and python_version < "3.13" \ +qrcode==7.4.2 ; python_version >= "3.10" and python_version < "3.13" \ --hash=sha256:581dca7a029bcb2deef5d01068e39093e80ef00b4a61098a2182eac59d01643a \ --hash=sha256:9dd969454827e127dbd93696b20747239e6d540e082937c90f14ac95b30f5845 -requests==2.32.3 ; python_version >= "3.9" and python_version < "3.13" \ +requests==2.32.3 ; python_version >= "3.10" and python_version < "3.13" \ --hash=sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760 \ --hash=sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6 -setuptools==75.8.0 ; python_version >= "3.9" and python_version < "3.13" \ +setuptools==75.8.0 ; python_version >= "3.10" and python_version < "3.13" \ --hash=sha256:c5afc8f407c626b8313a86e10311dd3f661c6cd9c09d4bf8c15c0e11f9f2b0e6 \ --hash=sha256:e3982f444617239225d675215d51f6ba05f845d4eec313da4418fdbb56fb27e3 -simple-websocket==1.0.0 ; python_version >= "3.9" and python_version < "3.13" \ +simple-websocket==1.0.0 ; python_version >= "3.10" and python_version < "3.13" \ --hash=sha256:17d2c72f4a2bd85174a97e3e4c88b01c40c3f81b7b648b0cc3ce1305968928c8 \ --hash=sha256:1d5bf585e415eaa2083e2bcf02a3ecf91f9712e7b3e6b9fa0b461ad04e0837bc -stem==1.8.1 ; python_version >= "3.9" and python_version < "3.13" \ +stem==1.8.1 ; python_version >= "3.10" and python_version < "3.13" \ --hash=sha256:81d43a7c668ba9d7bc1103b2e7a911e9d148294b373d27a59ae8da79ef7a3e2f -typing-extensions==4.9.0 ; python_version >= "3.9" and python_version < "3.13" \ +typing-extensions==4.9.0 ; python_version >= "3.10" and python_version < "3.13" \ --hash=sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783 \ --hash=sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd -unidecode==1.3.8 ; python_version >= "3.9" and python_version < "3.13" \ +unidecode==1.3.8 ; python_version >= "3.10" and python_version < "3.13" \ --hash=sha256:cfdb349d46ed3873ece4586b96aa75258726e2fa8ec21d6f00a591d98806c2f4 \ --hash=sha256:d130a61ce6696f8148a3bd8fe779c99adeb4b870584eeb9526584e9aa091fd39 -urllib3==2.3.0 ; python_version >= "3.9" and python_version < "3.13" \ +urllib3==2.3.0 ; python_version >= "3.10" and python_version < "3.13" \ --hash=sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df \ --hash=sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d -waitress==3.0.2 ; python_version >= "3.9" and python_version < "3.13" \ +waitress==3.0.2 ; python_version >= "3.10" and python_version < "3.13" \ --hash=sha256:682aaaf2af0c44ada4abfb70ded36393f0e307f4ab9456a215ce0020baefc31f \ --hash=sha256:c56d67fd6e87c2ee598b76abdd4e96cfad1f24cacdea5078d382b1f9d7b5ed2e -werkzeug==3.0.6 ; python_version >= "3.9" and python_version < "3.13" \ +werkzeug==3.0.6 ; python_version >= "3.10" and python_version < "3.13" \ --hash=sha256:1bc0c2310d2fbb07b1dd1105eba2f7af72f322e1e455f2f93c993bee8c8a5f17 \ --hash=sha256:a8dd59d4de28ca70471a34cba79bed5f7ef2e036a76b3ab0835474246eb41f8d -wheel==0.41.3 ; python_version >= "3.9" and python_version < "3.13" \ +wheel==0.41.3 ; python_version >= "3.10" and python_version < "3.13" \ --hash=sha256:488609bc63a29322326e05560731bf7bfea8e48ad646e1f5e40d366607de0942 \ --hash=sha256:4d4987ce51a49370ea65c0bfd2234e8ce80a12780820d9dc462597a6e60d0841 -wsproto==1.2.0 ; python_version >= "3.9" and python_version < "3.13" \ +wsproto==1.2.0 ; python_version >= "3.10" and python_version < "3.13" \ --hash=sha256:ad565f26ecb92588a3e43bc3d96164de84cd9902482b130d0ddbaa9664a85065 \ --hash=sha256:b9acddd652b585d75b20477888c56642fdade28bdfd3579aa24a4d2c037dd736 -zipp==3.21.0 ; python_version >= "3.9" and python_version < "3.10" \ - --hash=sha256:2c9958f6430a2040341a52eb608ed6dd93ef4392e02ffe219417c1b28b5dd1f4 \ - --hash=sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931 -zope-event==5.0 ; python_version >= "3.9" and python_version < "3.13" \ +zope-event==5.0 ; python_version >= "3.10" and python_version < "3.13" \ --hash=sha256:2832e95014f4db26c47a13fdaef84cef2f4df37e66b59d8f1f4a8f319a632c26 \ --hash=sha256:bac440d8d9891b4068e2b5a2c5e2c9765a9df762944bda6955f96bb9b91e67cd -zope-interface==6.1 ; python_version >= "3.9" and python_version < "3.13" \ +zope-interface==6.1 ; python_version >= "3.10" and python_version < "3.13" \ --hash=sha256:0c8cf55261e15590065039696607f6c9c1aeda700ceee40c70478552d323b3ff \ --hash=sha256:13b7d0f2a67eb83c385880489dbb80145e9d344427b4262c49fbf2581677c11c \ --hash=sha256:1f294a15f7723fc0d3b40701ca9b446133ec713eafc1cc6afa7b3d98666ee1ac \ From 4c7ac8569f36d7deed7611e793b28a8204521f8f Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Mon, 17 Feb 2025 16:47:56 +1100 Subject: [PATCH 14/17] Build Flatpak on aarch64 properly (#1990) --- flatpak/org.onionshare.OnionShare.yaml | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/flatpak/org.onionshare.OnionShare.yaml b/flatpak/org.onionshare.OnionShare.yaml index cd97ba78..2a21b371 100644 --- a/flatpak/org.onionshare.OnionShare.yaml +++ b/flatpak/org.onionshare.OnionShare.yaml @@ -46,6 +46,27 @@ modules: - type: file url: https://files.pythonhosted.org/packages/7b/ff/ab4f287b9573e50b5a47c10e2af8feb5abecc3c7431bd5deec135efc969e/shiboken6-6.8.2.1-cp39-abi3-manylinux_2_28_x86_64.whl sha256: c83e90056f13d0872cc4d2b7bf60b6d6e3b1b172f1f91910c0ba5b641af01758 + - name: pyside6-essentials-aarch64 + only-arches: + - aarch64 + buildsystem: simple + build-commands: + - pip3 install --verbose --exists-action=i --no-index --find-links="file://${PWD}" + --prefix=${FLATPAK_DEST} "pyside6-essentials" --no-build-isolation + sources: + - type: file + url: https://files.pythonhosted.org/packages/fd/69/595002d860ee58431fe7add081d6f54fff94ae9680f2eb8cd355c1649bb6/PySide6_Essentials-6.8.2.1-cp39-abi3-manylinux_2_39_aarch64.whl + sha256: 7aed46f91d44399b4c713cf7387f5fb6f0114413fbcdbde493a528fb8e19f6ed + modules: + - name: shiboken6 + buildsystem: simple + build-commands: + - pip3 install --verbose --exists-action=i --no-index --find-links="file://${PWD}" + --prefix=${FLATPAK_DEST} "shiboken6" --no-build-isolation + sources: + - type: file + url: https://files.pythonhosted.org/packages/a6/b0/4fb102eb5260ee06d379769f3c4f0b82ef397c15f1cbbbbb3f6dceb86d5d/shiboken6-6.8.2.1-cp39-abi3-manylinux_2_39_aarch64.whl + sha256: 8592401423acc693f51dbbfae5e7493cc3ed6738be79daaf90afa07f4da5bb25 - name: snowflake-client buildsystem: simple build-options: From 58fbbb8035efa46ee8bb25e6f48c3640e26e6e02 Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Mon, 17 Feb 2025 16:58:15 +1100 Subject: [PATCH 15/17] Update CHANGELOG --- CHANGELOG.md | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3f850e4f..3c0766a4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,14 +5,19 @@ * Feature: It is now possible to view what URLs are visited in Share/Website mode using the CLI tool, with `--log-filenames`. * Feature: It is now possible to automatically start a saved persistent onion tab, once OnionShare itself starts and once Tor is connected. * Bug fix: It is now once again possible to request bridges and use meek as a Pluggable Transport. -* Bug fix: Fix an issue with lack of gevent with SocketIO on systems that don't have it. -* Bug fix: Fix a thread-related race condition segfault with the CLI tool on shutdown. +* Bug fix: Fixed a fatal error with Censorship Circumvention when no bridges are returned. +* Bug fix: Fixed an issue with lack of gevent with SocketIO on systems that don't have it. +* Bug fix: Fixed a thread-related race condition segfault with the CLI tool on shutdown. +* Bug fix: Fixed an issue with the 'auto-stop timer' when the CLI tool is being used in 'Share mode' and someone has visited the share at least once. Desktop was unaffected, as were all other modes. * Locales: Gaeilge, Slovenčina and Tamil languages introduced, and various other translations in existing languages added or improved (thanks to the translators!) * Documentation: Added examples of using a systemd unit file for persistent onions, and various other clarifications. -* Packaging: Built the snap with a cleanup step in such a way that it should work on Ubuntu 24.04 and higher. Unfortunately, we have to drop support for armhf for now, as there are no PySide6 packages available on Pypi to install for that architecture. +* Documentation: Documented all the config file parameters and what they mean, as well as that for persistent onion json files. +* Packaging: Built the snap with a cleanup step in such a way that it should work on Ubuntu 24.04 and higher. Unfortunately, we have to drop support for armhf for now, as there are no PySide6 packages available on Pypi to install for that architecture. However, ARM64 is supported. +* Packaging: Fixed ARM64 packaging for Flatpak. * Packaging: Many internal packaging improvements that make it easier for us to release snap and flatpak. * Miscellaneous: Many dependency updates to Python libraries, Tor, Snowflake -* Miscellaneous: Various minor bug fixes/warning messages resolved. +* Miscellaneous: Various minor bug fixes/warning messages resolved, and minor changes to some wording for the 'Save this tab' option to make it clearer that this means 'persistent onion address'. +* Miscellaneous: Nicer and more intuitive icons with better dark mode support. ## 2.6.2 From 8fc509d79d7e714e60c6eb712c0b88a24d11b219 Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Wed, 19 Feb 2025 14:57:30 +1100 Subject: [PATCH 16/17] Update snap desktop requirements.txt file --- snap/local/desktop-requirements.txt | 100 ++++++++++++++-------------- 1 file changed, 50 insertions(+), 50 deletions(-) diff --git a/snap/local/desktop-requirements.txt b/snap/local/desktop-requirements.txt index 03ee3a0b..77039328 100644 --- a/snap/local/desktop-requirements.txt +++ b/snap/local/desktop-requirements.txt @@ -1,10 +1,10 @@ -bidict==0.22.1 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x") or python_version >= "3.10" and python_version < "3.13" and sys_platform != "linux" or python_version >= "3.10" and python_version < "3.13" and (platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ +bidict==0.22.1 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x" or sys_platform != "linux" or platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ --hash=sha256:1e0f7f74e4860e6d0943a05d4134c63a2fad86f3d4732fb265bd79e4e856d81d \ --hash=sha256:6ef212238eb884b664f28da76f33f1d28b260f665fc737b413b287d5487d1e7b -blinker==1.7.0 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x") or python_version >= "3.10" and python_version < "3.13" and sys_platform != "linux" or python_version >= "3.10" and python_version < "3.13" and (platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ +blinker==1.7.0 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x" or sys_platform != "linux" or platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ --hash=sha256:c3f865d4d54db7abc53758a01601cf343fe55b84c1de4e3fa910e420b438d5b9 \ --hash=sha256:e6820ff6fa4e4d1d8e2747c2283749c3f547e4fee112b98555cdcdae32996182 -brotli==1.1.0 ; python_version >= "3.10" and python_version < "3.13" and platform_python_implementation != "PyPy" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x") or python_version >= "3.10" and python_version < "3.13" and platform_python_implementation != "PyPy" and sys_platform != "linux" or python_version >= "3.10" and python_version < "3.13" and platform_python_implementation != "PyPy" and (platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ +brotli==1.1.0 ; python_version >= "3.10" and python_version < "3.13" and platform_python_implementation != "PyPy" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x" or sys_platform != "linux" or platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ --hash=sha256:03d20af184290887bdea3f0f78c4f737d126c74dc2f3ccadf07e54ceca3bf208 \ --hash=sha256:0541e747cce78e24ea12d69176f6a7ddb690e62c425e01d31cc065e69ce55b48 \ --hash=sha256:069a121ac97412d1fe506da790b3e69f52254b9df4eb665cd42460c837193354 \ @@ -88,7 +88,7 @@ brotli==1.1.0 ; python_version >= "3.10" and python_version < "3.13" and platfor --hash=sha256:fce1473f3ccc4187f75b4690cfc922628aed4d3dd013d047f95a9b3919a86596 \ --hash=sha256:fd5f17ff8f14003595ab414e45fce13d073e0762394f957182e69035c9f3d7c2 \ --hash=sha256:fdc3ff3bfccdc6b9cc7c342c03aa2400683f0cb891d46e94b64a197910dc4064 -brotlicffi==1.1.0.0 ; python_version >= "3.10" and python_version < "3.13" and platform_python_implementation == "PyPy" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x") or python_version >= "3.10" and python_version < "3.13" and platform_python_implementation == "PyPy" and sys_platform != "linux" or python_version >= "3.10" and python_version < "3.13" and platform_python_implementation == "PyPy" and (platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ +brotlicffi==1.1.0.0 ; python_version >= "3.10" and python_version < "3.13" and platform_python_implementation == "PyPy" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x" or sys_platform != "linux" or platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ --hash=sha256:19ffc919fa4fc6ace69286e0a23b3789b4219058313cf9b45625016bf7ff996b \ --hash=sha256:1a807d760763e398bbf2c6394ae9da5815901aa93ee0a37bca5efe78d4ee3171 \ --hash=sha256:1b12b50e07c3911e1efa3a8971543e7648100713d4e0971b13631cce22c587eb \ @@ -116,10 +116,10 @@ brotlicffi==1.1.0.0 ; python_version >= "3.10" and python_version < "3.13" and p --hash=sha256:ce01c7316aebc7fce59da734286148b1d1b9455f89cf2c8a4dfce7d41db55c2d \ --hash=sha256:d9eb71bb1085d996244439154387266fd23d6ad37161f6f52f1cd41dd95a3808 \ --hash=sha256:fa8ca0623b26c94fccc3a1fdd895be1743b838f3917300506d04aa3346fd2a14 -certifi==2025.1.31 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x") or python_version >= "3.10" and python_version < "3.13" and sys_platform != "linux" or python_version >= "3.10" and python_version < "3.13" and (platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ +certifi==2025.1.31 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x" or sys_platform != "linux" or platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ --hash=sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651 \ --hash=sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe -cffi==1.16.0 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x") or python_version >= "3.10" and python_version < "3.13" and sys_platform != "linux" or python_version >= "3.10" and python_version < "3.13" and (platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ +cffi==1.16.0 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x" or sys_platform != "linux" or platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ --hash=sha256:0c9ef6ff37e974b73c25eecc13952c55bceed9112be2d9d938ded8e856138bcc \ --hash=sha256:131fd094d1065b19540c3d72594260f118b231090295d8c34e19a7bbcf2e860a \ --hash=sha256:1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417 \ @@ -172,7 +172,7 @@ cffi==1.16.0 ; python_version >= "3.10" and python_version < "3.13" and (platfor --hash=sha256:ee07e47c12890ef248766a6e55bd38ebfb2bb8edd4142d56db91b21ea68b7627 \ --hash=sha256:fa3a0128b152627161ce47201262d3140edb5a5c3da88d73a1b790a959126956 \ --hash=sha256:fcc8eb6d5902bb1cf6dc4f187ee3ea80a1eba0a89aba40a5cb20a5087d961357 -charset-normalizer==3.3.2 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x") or python_version >= "3.10" and python_version < "3.13" and sys_platform != "linux" or python_version >= "3.10" and python_version < "3.13" and (platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ +charset-normalizer==3.3.2 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x" or sys_platform != "linux" or platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ --hash=sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027 \ --hash=sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087 \ --hash=sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786 \ @@ -263,13 +263,13 @@ charset-normalizer==3.3.2 ; python_version >= "3.10" and python_version < "3.13" --hash=sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33 \ --hash=sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519 \ --hash=sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561 -click==8.1.7 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x") or python_version >= "3.10" and python_version < "3.13" and sys_platform != "linux" or python_version >= "3.10" and python_version < "3.13" and (platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ +click==8.1.7 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x" or sys_platform != "linux" or platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ --hash=sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28 \ --hash=sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de -colorama==0.4.6 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x") or python_version >= "3.10" and python_version < "3.13" and sys_platform != "linux" or python_version >= "3.10" and python_version < "3.13" and (platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ +colorama==0.4.6 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x" or sys_platform != "linux" or platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \ --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 -cython==3.0.8 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x") or python_version >= "3.10" and python_version < "3.13" and sys_platform != "linux" or python_version >= "3.10" and python_version < "3.13" and (platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ +cython==3.0.8 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x" or sys_platform != "linux" or platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ --hash=sha256:000dc9e135d0eec6ecb2b40a5b02d0868a2f8d2e027a41b0fe16a908a9e6de02 \ --hash=sha256:05d7eddc668ae7993643f32c7661f25544e791edb745758672ea5b1a82ecffa6 \ --hash=sha256:0c38c9f0bcce2df0c3347285863621be904ac6b64c5792d871130569d893efd7 \ @@ -328,25 +328,25 @@ cython==3.0.8 ; python_version >= "3.10" and python_version < "3.13" and (platfo --hash=sha256:f05c0bf9d085c031df8f583f0d506aa3be1692023de18c45d0aaf78685bbb944 \ --hash=sha256:fa97893d99385386925d00074654aeae3a98867f298d1e12ceaf38a9054a9bae \ --hash=sha256:fe81b339cffd87c0069c6049b4d33e28bdd1874625ee515785bf42c9fdff3658 -dnspython==2.7.0 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x") or python_version >= "3.10" and python_version < "3.13" and sys_platform != "linux" or python_version >= "3.10" and python_version < "3.13" and (platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ +dnspython==2.7.0 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x" or sys_platform != "linux" or platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ --hash=sha256:b4c34b7d10b51bcc3a5071e7b8dee77939f1e878477eeecc965e9835f63c6c86 \ --hash=sha256:ce9c432eda0dc91cf618a5cedf1a4e142651196bbcd2c80e89ed5a907e5cfaf1 -eventlet==0.39.0 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x") or python_version >= "3.10" and python_version < "3.13" and sys_platform != "linux" or python_version >= "3.10" and python_version < "3.13" and (platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ +eventlet==0.39.0 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x" or sys_platform != "linux" or platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ --hash=sha256:01ba0aa6ee2452690fc02b274a2409598a13b997c7b5af9dc66600fa42015a79 \ --hash=sha256:9522ca09ad4c1f874c238f06492a7e217ddb13bdeace4475d3b700dd0ba1f6be -flask-compress==1.14 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x") or python_version >= "3.10" and python_version < "3.13" and sys_platform != "linux" or python_version >= "3.10" and python_version < "3.13" and (platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ +flask-compress==1.14 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x" or sys_platform != "linux" or platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ --hash=sha256:b86c9808f0f38ea2246c9730972cf978f2cdf6a9a1a69102ba81e07891e6b26c \ --hash=sha256:e46528f37b91857012be38e24e65db1a248662c3dc32ee7808b5986bf1d123ee -flask-socketio==5.3.4 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x") or python_version >= "3.10" and python_version < "3.13" and sys_platform != "linux" or python_version >= "3.10" and python_version < "3.13" and (platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ +flask-socketio==5.3.4 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x" or sys_platform != "linux" or platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ --hash=sha256:1cbd379c9bf68ac37bcc4750d01708922fa6365d13a5447d3f8893792879410c \ --hash=sha256:564acfb24dcc9545cdae536cde0323653d9b547069a925f11eeb132338aa71c0 -flask==2.3.2 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x") or python_version >= "3.10" and python_version < "3.13" and sys_platform != "linux" or python_version >= "3.10" and python_version < "3.13" and (platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ +flask==2.3.2 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x" or sys_platform != "linux" or platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ --hash=sha256:77fd4e1249d8c9923de34907236b747ced06e5467ecac1a7bb7115ae0e9670b0 \ --hash=sha256:8c2f9abd47a9e8df7f0c3f091ce9497d011dc3b31effcf4c85a6e2b50f4114ef -gevent-websocket==0.10.1 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x") or python_version >= "3.10" and python_version < "3.13" and sys_platform != "linux" or python_version >= "3.10" and python_version < "3.13" and (platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ +gevent-websocket==0.10.1 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x" or sys_platform != "linux" or platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ --hash=sha256:17b67d91282f8f4c973eba0551183fc84f56f1c90c8f6b6b30256f31f66f5242 \ --hash=sha256:7eaef32968290c9121f7c35b973e2cc302ffb076d018c9068d2f5ca8b2d85fb0 -gevent==23.9.1 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x") or python_version >= "3.10" and python_version < "3.13" and sys_platform != "linux" or python_version >= "3.10" and python_version < "3.13" and (platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ +gevent==23.9.1 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x" or sys_platform != "linux" or platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ --hash=sha256:272cffdf535978d59c38ed837916dfd2b5d193be1e9e5dcc60a5f4d5025dd98a \ --hash=sha256:2c7b5c9912378e5f5ccf180d1fdb1e83f42b71823483066eddbe10ef1a2fcaa2 \ --hash=sha256:36a549d632c14684bcbbd3014a6ce2666c5f2a500f34d58d32df6c9ea38b6535 \ @@ -387,7 +387,7 @@ gevent==23.9.1 ; python_version >= "3.10" and python_version < "3.13" and (platf --hash=sha256:f632487c87866094546a74eefbca2c74c1d03638b715b6feb12e80120960185a \ --hash=sha256:fae8d5b5b8fa2a8f63b39f5447168b02db10c888a3e387ed7af2bd1b8612e543 \ --hash=sha256:fde6402c5432b835fbb7698f1c7f2809c8d6b2bd9d047ac1f5a7c1d5aa569303 -greenlet==3.0.3 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x") or python_version >= "3.10" and python_version < "3.13" and sys_platform != "linux" or python_version >= "3.10" and python_version < "3.13" and (platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ +greenlet==3.0.3 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x" or sys_platform != "linux" or platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ --hash=sha256:01bc7ea167cf943b4c802068e178bbf70ae2e8c080467070d01bfa02f337ee67 \ --hash=sha256:0448abc479fab28b00cb472d278828b3ccca164531daab4e970a0458786055d6 \ --hash=sha256:086152f8fbc5955df88382e8a75984e2bb1c892ad2e3c80a2508954e52295257 \ @@ -446,19 +446,19 @@ greenlet==3.0.3 ; python_version >= "3.10" and python_version < "3.13" and (plat --hash=sha256:fcd2469d6a2cf298f198f0487e0a5b1a47a42ca0fa4dfd1b6862c999f018ebbf \ --hash=sha256:fd096eb7ffef17c456cfa587523c5f92321ae02427ff955bebe9e3c63bc9f0da \ --hash=sha256:fe754d231288e1e64323cfad462fcee8f0288654c10bdf4f603a39ed923bef33 -h11==0.14.0 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x") or python_version >= "3.10" and python_version < "3.13" and sys_platform != "linux" or python_version >= "3.10" and python_version < "3.13" and (platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ +h11==0.14.0 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x" or sys_platform != "linux" or platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ --hash=sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d \ --hash=sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761 -idna==3.10 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x") or python_version >= "3.10" and python_version < "3.13" and sys_platform != "linux" or python_version >= "3.10" and python_version < "3.13" and (platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ +idna==3.10 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x" or sys_platform != "linux" or platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ --hash=sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9 \ --hash=sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3 -itsdangerous==2.1.2 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x") or python_version >= "3.10" and python_version < "3.13" and sys_platform != "linux" or python_version >= "3.10" and python_version < "3.13" and (platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ +itsdangerous==2.1.2 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x" or sys_platform != "linux" or platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ --hash=sha256:2c2349112351b88699d8d4b6b075022c0808887cb7ad10069318a8b0bc88db44 \ --hash=sha256:5dbbc68b317e5e42f327f9021763545dc3fc3bfe22e6deb96aaf1fc38874156a -jinja2==3.1.5 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x") or python_version >= "3.10" and python_version < "3.13" and sys_platform != "linux" or python_version >= "3.10" and python_version < "3.13" and (platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ +jinja2==3.1.5 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x" or sys_platform != "linux" or platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ --hash=sha256:8fefff8dc3034e27bb80d67c671eb8a9bc424c0ef4c0826edbff304cceff43bb \ --hash=sha256:aba0f4dc9ed8013c424088f68a5c226f7d6097ed89b246d7749c2ec4175c6adb -markupsafe==2.1.5 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x") or python_version >= "3.10" and python_version < "3.13" and sys_platform != "linux" or python_version >= "3.10" and python_version < "3.13" and (platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ +markupsafe==2.1.5 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x" or sys_platform != "linux" or platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ --hash=sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf \ --hash=sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff \ --hash=sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f \ @@ -519,10 +519,10 @@ markupsafe==2.1.5 ; python_version >= "3.10" and python_version < "3.13" and (pl --hash=sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab \ --hash=sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd \ --hash=sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68 -packaging==24.2 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x") or python_version >= "3.10" and python_version < "3.13" and sys_platform != "linux" or python_version >= "3.10" and python_version < "3.13" and (platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ +packaging==24.2 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x" or sys_platform != "linux" or platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ --hash=sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759 \ --hash=sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f -psutil==5.9.8 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x") or python_version >= "3.10" and python_version < "3.13" and sys_platform != "linux" or python_version >= "3.10" and python_version < "3.13" and (platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ +psutil==5.9.8 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x" or sys_platform != "linux" or platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ --hash=sha256:02615ed8c5ea222323408ceba16c60e99c3f91639b07da6373fb7e6539abc56d \ --hash=sha256:05806de88103b25903dff19bb6692bd2e714ccf9e668d050d144012055cbca73 \ --hash=sha256:26bd09967ae00920df88e0352a91cff1a78f8d69b3ecabbfe733610c0af486c8 \ @@ -539,10 +539,10 @@ psutil==5.9.8 ; python_version >= "3.10" and python_version < "3.13" and (platfo --hash=sha256:bd1184ceb3f87651a67b2708d4c3338e9b10c5df903f2e3776b62303b26cb631 \ --hash=sha256:d06016f7f8625a1825ba3732081d77c94589dca78b7a3fc072194851e88461a4 \ --hash=sha256:d16bbddf0693323b8c6123dd804100241da461e41d6e332fb0ba6058f630f8c8 -pycparser==2.21 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x") or python_version >= "3.10" and python_version < "3.13" and sys_platform != "linux" or python_version >= "3.10" and python_version < "3.13" and (platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ +pycparser==2.21 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x" or sys_platform != "linux" or platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ --hash=sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9 \ --hash=sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206 -pynacl==1.5.0 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x") or python_version >= "3.10" and python_version < "3.13" and sys_platform != "linux" or python_version >= "3.10" and python_version < "3.13" and (platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ +pynacl==1.5.0 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x" or sys_platform != "linux" or platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ --hash=sha256:06b8f6fa7f5de8d5d2f7573fe8c863c051225a27b61e6860fd047b1775807858 \ --hash=sha256:0c84947a22519e013607c9be43706dd42513f9e6ae5d39d3613ca1e142fba44d \ --hash=sha256:20f42270d27e1b6a29f54032090b972d97f0a1b0948cc52392041ef7831fee93 \ @@ -553,81 +553,81 @@ pynacl==1.5.0 ; python_version >= "3.10" and python_version < "3.13" and (platfo --hash=sha256:a36d4a9dda1f19ce6e03c9a784a2921a4b726b02e1c736600ca9c22029474394 \ --hash=sha256:a422368fc821589c228f4c49438a368831cb5bbc0eab5ebe1d7fac9dded6567b \ --hash=sha256:e46dae94e34b085175f8abb3b0aaa7da40767865ac82c928eeb9e57e1ea8a543 -pypng==0.20220715.0 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x") or python_version >= "3.10" and python_version < "3.13" and sys_platform != "linux" or python_version >= "3.10" and python_version < "3.13" and (platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ +pypng==0.20220715.0 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x" or sys_platform != "linux" or platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ --hash=sha256:4a43e969b8f5aaafb2a415536c1a8ec7e341cd6a3f957fd5b5f32a4cfeed902c \ --hash=sha256:739c433ba96f078315de54c0db975aee537cbc3e1d0ae4ed9aab0ca1e427e2c1 -pyside6-addons==6.8.2.1 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x") or python_version >= "3.10" and python_version < "3.13" and sys_platform != "linux" or python_version >= "3.10" and python_version < "3.13" and (platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ +pyside6-addons==6.8.2.1 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x" or sys_platform != "linux" or platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ --hash=sha256:5558816018042fecd0d782111ced529585a23ea9a010b518f8495764f578a01f \ --hash=sha256:c761cc45022aa79d8419e671e7fb34a4a3e5b3826f1e68fcb819bd6e3a387fbb \ --hash=sha256:d904179f16deeca4ba440b4ef78e8d54df2b994b46784ad9d53b741082f3b2a7 \ --hash=sha256:f3d85e676851ada8238bc76ebfacbee738fc0b35b3bc15c9765dd107b8ee6ec4 -pyside6-essentials==6.8.2.1 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x") or python_version >= "3.10" and python_version < "3.13" and sys_platform != "linux" or python_version >= "3.10" and python_version < "3.13" and (platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ +pyside6-essentials==6.8.2.1 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x" or sys_platform != "linux" or platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ --hash=sha256:18de224f09108998d194e60f2fb8a1e86367dd525dd8a6192598e80e6ada649e \ --hash=sha256:5ab31e5395a4724102edd6e8ff980fa3f7cde2aa79050763a1dcc30bb914195a \ --hash=sha256:7aed46f91d44399b4c713cf7387f5fb6f0114413fbcdbde493a528fb8e19f6ed \ --hash=sha256:ae5cc48f7e9a08e73e3ec2387ce245c8150e620b8d5a87548ebd4b8e3aeae49b -pyside6==6.8.2.1 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x") or python_version >= "3.10" and python_version < "3.13" and sys_platform != "linux" or python_version >= "3.10" and python_version < "3.13" and (platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ +pyside6==6.8.2.1 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x" or sys_platform != "linux" or platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ --hash=sha256:23d2a1a77b25459a049c4276b4e0bbfb375b73d3921061b1a16bcfa64e1fe517 \ --hash=sha256:3fcb551729f235475b2abe7d919027de54a65d850e744f60716f890202273720 \ --hash=sha256:92361e41727910e3560ea5ba494fabecc76cd20892c9fcb2ced07619081c4e65 \ --hash=sha256:bfefa80a93db06dc64c0e7beef0377c9b8ca51e007cfc34575defe065af893b6 -pysocks==1.7.1 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x") or python_version >= "3.10" and python_version < "3.13" and sys_platform != "linux" or python_version >= "3.10" and python_version < "3.13" and (platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ +pysocks==1.7.1 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x" or sys_platform != "linux" or platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ --hash=sha256:08e69f092cc6dbe92a0fdd16eeb9b9ffbc13cadfe5ca4c7bd92ffb078b293299 \ --hash=sha256:2725bd0a9925919b9b51739eea5f9e2bae91e83288108a9ad338b2e3a4435ee5 \ --hash=sha256:3f8804571ebe159c380ac6de37643bb4685970655d3bba243530d6558b799aa0 -python-engineio==4.9.0 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x") or python_version >= "3.10" and python_version < "3.13" and sys_platform != "linux" or python_version >= "3.10" and python_version < "3.13" and (platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ +python-engineio==4.9.0 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x" or sys_platform != "linux" or platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ --hash=sha256:979859bff770725b75e60353d7ae53b397e8b517d05ba76733b404a3dcca3e4c \ --hash=sha256:e87459c15638e567711fd156e6f9c4a402668871bed79523f0ecfec744729ec7 -python-gnupg==0.5.2 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x") or python_version >= "3.10" and python_version < "3.13" and sys_platform != "linux" or python_version >= "3.10" and python_version < "3.13" and (platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ +python-gnupg==0.5.2 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x" or sys_platform != "linux" or platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ --hash=sha256:01d8013931c9fa3f45824bbea7054c03d6e11f258a72e7e086e168dbcb91854c \ --hash=sha256:72ce142af6da7f07e433fef148b445fb3e07854acd2f88739008838745c0e9f5 -python-socketio==5.11.1 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x") or python_version >= "3.10" and python_version < "3.13" and sys_platform != "linux" or python_version >= "3.10" and python_version < "3.13" and (platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ +python-socketio==5.11.1 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x" or sys_platform != "linux" or platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ --hash=sha256:bbcbd758ed8c183775cb2853ba001361e2fa018babf5cbe11a5b77e91c2ec2a2 \ --hash=sha256:f1a0228b8b1fbdbd93fbbedd821ebce0ef54b2b5bf6e98fcf710deaa7c574259 -qrcode==7.4.2 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x") or python_version >= "3.10" and python_version < "3.13" and sys_platform != "linux" or python_version >= "3.10" and python_version < "3.13" and (platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ +qrcode==7.4.2 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x" or sys_platform != "linux" or platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ --hash=sha256:581dca7a029bcb2deef5d01068e39093e80ef00b4a61098a2182eac59d01643a \ --hash=sha256:9dd969454827e127dbd93696b20747239e6d540e082937c90f14ac95b30f5845 -requests==2.32.3 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x") or python_version >= "3.10" and python_version < "3.13" and sys_platform != "linux" or python_version >= "3.10" and python_version < "3.13" and (platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ +requests==2.32.3 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x" or sys_platform != "linux" or platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ --hash=sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760 \ --hash=sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6 -setuptools==75.8.0 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x") or python_version >= "3.10" and python_version < "3.13" and sys_platform != "linux" or python_version >= "3.10" and python_version < "3.13" and (platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ +setuptools==75.8.0 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x" or sys_platform != "linux" or platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ --hash=sha256:c5afc8f407c626b8313a86e10311dd3f661c6cd9c09d4bf8c15c0e11f9f2b0e6 \ --hash=sha256:e3982f444617239225d675215d51f6ba05f845d4eec313da4418fdbb56fb27e3 -shiboken6==6.8.2.1 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x") or python_version >= "3.10" and python_version < "3.13" and sys_platform != "linux" or python_version >= "3.10" and python_version < "3.13" and (platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ +shiboken6==6.8.2.1 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x" or sys_platform != "linux" or platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ --hash=sha256:1b751d47b759762b7ca31bad278d52eca4105d3028880d93979261ebbfba810c \ --hash=sha256:8592401423acc693f51dbbfae5e7493cc3ed6738be79daaf90afa07f4da5bb25 \ --hash=sha256:c83e90056f13d0872cc4d2b7bf60b6d6e3b1b172f1f91910c0ba5b641af01758 \ --hash=sha256:d3dedeb3732ecfc920c9f97da769c0022a1c3bda99346a9eba56fbf093deaa75 -simple-websocket==1.0.0 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x") or python_version >= "3.10" and python_version < "3.13" and sys_platform != "linux" or python_version >= "3.10" and python_version < "3.13" and (platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ +simple-websocket==1.0.0 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x" or sys_platform != "linux" or platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ --hash=sha256:17d2c72f4a2bd85174a97e3e4c88b01c40c3f81b7b648b0cc3ce1305968928c8 \ --hash=sha256:1d5bf585e415eaa2083e2bcf02a3ecf91f9712e7b3e6b9fa0b461ad04e0837bc -stem==1.8.1 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x") or python_version >= "3.10" and python_version < "3.13" and sys_platform != "linux" or python_version >= "3.10" and python_version < "3.13" and (platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ +stem==1.8.1 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x" or sys_platform != "linux" or platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ --hash=sha256:81d43a7c668ba9d7bc1103b2e7a911e9d148294b373d27a59ae8da79ef7a3e2f -typing-extensions==4.9.0 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x") or python_version >= "3.10" and python_version < "3.13" and sys_platform != "linux" or python_version >= "3.10" and python_version < "3.13" and (platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ +typing-extensions==4.9.0 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x" or sys_platform != "linux" or platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ --hash=sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783 \ --hash=sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd -unidecode==1.3.8 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x") or python_version >= "3.10" and python_version < "3.13" and sys_platform != "linux" or python_version >= "3.10" and python_version < "3.13" and (platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ +unidecode==1.3.8 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x" or sys_platform != "linux" or platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ --hash=sha256:cfdb349d46ed3873ece4586b96aa75258726e2fa8ec21d6f00a591d98806c2f4 \ --hash=sha256:d130a61ce6696f8148a3bd8fe779c99adeb4b870584eeb9526584e9aa091fd39 -urllib3==2.3.0 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x") or python_version >= "3.10" and python_version < "3.13" and sys_platform != "linux" or python_version >= "3.10" and python_version < "3.13" and (platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ +urllib3==2.3.0 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x" or sys_platform != "linux" or platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ --hash=sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df \ --hash=sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d -waitress==3.0.2 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x") or python_version >= "3.10" and python_version < "3.13" and sys_platform != "linux" or python_version >= "3.10" and python_version < "3.13" and (platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ +waitress==3.0.2 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x" or sys_platform != "linux" or platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ --hash=sha256:682aaaf2af0c44ada4abfb70ded36393f0e307f4ab9456a215ce0020baefc31f \ --hash=sha256:c56d67fd6e87c2ee598b76abdd4e96cfad1f24cacdea5078d382b1f9d7b5ed2e -werkzeug==3.0.6 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x") or python_version >= "3.10" and python_version < "3.13" and sys_platform != "linux" or python_version >= "3.10" and python_version < "3.13" and (platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ +werkzeug==3.0.6 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x" or sys_platform != "linux" or platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ --hash=sha256:1bc0c2310d2fbb07b1dd1105eba2f7af72f322e1e455f2f93c993bee8c8a5f17 \ --hash=sha256:a8dd59d4de28ca70471a34cba79bed5f7ef2e036a76b3ab0835474246eb41f8d -wheel==0.41.3 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x") or python_version >= "3.10" and python_version < "3.13" and sys_platform != "linux" or python_version >= "3.10" and python_version < "3.13" and (platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ +wheel==0.41.3 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x" or sys_platform != "linux" or platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ --hash=sha256:488609bc63a29322326e05560731bf7bfea8e48ad646e1f5e40d366607de0942 \ --hash=sha256:4d4987ce51a49370ea65c0bfd2234e8ce80a12780820d9dc462597a6e60d0841 -wsproto==1.2.0 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x") or python_version >= "3.10" and python_version < "3.13" and sys_platform != "linux" or python_version >= "3.10" and python_version < "3.13" and (platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ +wsproto==1.2.0 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x" or sys_platform != "linux" or platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ --hash=sha256:ad565f26ecb92588a3e43bc3d96164de84cd9902482b130d0ddbaa9664a85065 \ --hash=sha256:b9acddd652b585d75b20477888c56642fdade28bdfd3579aa24a4d2c037dd736 -zope-event==5.0 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x") or python_version >= "3.10" and python_version < "3.13" and sys_platform != "linux" or python_version >= "3.10" and python_version < "3.13" and (platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ +zope-event==5.0 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x" or sys_platform != "linux" or platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ --hash=sha256:2832e95014f4db26c47a13fdaef84cef2f4df37e66b59d8f1f4a8f319a632c26 \ --hash=sha256:bac440d8d9891b4068e2b5a2c5e2c9765a9df762944bda6955f96bb9b91e67cd -zope-interface==6.1 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x") or python_version >= "3.10" and python_version < "3.13" and sys_platform != "linux" or python_version >= "3.10" and python_version < "3.13" and (platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ +zope-interface==6.1 ; python_version >= "3.10" and python_version < "3.13" and (platform_machine == "x86_64" or platform_machine == "i686" or platform_machine == "aarch64" or platform_machine == "armv7l" or platform_machine == "ppc64le" or platform_machine == "s390x" or sys_platform != "linux" or platform_machine != "x86_64" and platform_machine != "i686" and platform_machine != "aarch64" and platform_machine != "armv7l" and platform_machine != "ppc64le" and platform_machine != "s390x") \ --hash=sha256:0c8cf55261e15590065039696607f6c9c1aeda700ceee40c70478552d323b3ff \ --hash=sha256:13b7d0f2a67eb83c385880489dbb80145e9d344427b4262c49fbf2581677c11c \ --hash=sha256:1f294a15f7723fc0d3b40701ca9b446133ec713eafc1cc6afa7b3d98666ee1ac \ From 542a07f171f7147c798744be3ff2db45102acda2 Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Wed, 19 Feb 2025 15:12:04 +1100 Subject: [PATCH 17/17] Small RELEASE.md docs tweaks --- RELEASE.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/RELEASE.md b/RELEASE.md index b81f029d..41d00927 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -74,7 +74,7 @@ Update the versions of `meek`, `obfs4proxy`, and `snowflake` in the `desktop/scr ### Make sure Snapcraft packaging works -Ensure you have the ability to run `poetry export`. You may need to run `poetry self add poetry-plugin-export`, as in recent versions of Poetry it is now a plugin rather than in the core. +Ensure you have the ability to run `poetry export`. You may need to run `poetry self add poetry-plugin-export@latest`, as in recent versions of Poetry it is now a plugin rather than in the core. Enter the `cli` directory and run `poetry export > ../snap/local/cli-requirements.txt` @@ -159,6 +159,7 @@ From https://snapcraft.io/onionshare/releases (you must be logged in), promote t - [ ] Create a new branch in https://github.com/flathub/org.onionshare.OnionShare for the version - [ ] Overwrite the manifest in the flathub repo with the updated version in [flatpak/org.onionshare.OnionShare.yaml](./flatpak/org.onionshare.OnionShare.yaml) - [ ] Edit it so that the sources for `onionshare` and `onionshare-cli` are the GitHub repo, with the correct git tag, rather than the local filesystem +- [ ] Ensure you also copy across the `onionshare-cli.yaml`, `onionshare-desktop.yaml`, `meek-client`, `snowflake` and `obfs4proxy` from the `flatpak/` folder into the flathub repository, so that the flathub repository has all the latest dependencies. - [ ] Make a PR in the flathub repo, and merge it to make a release ### Windows release