diff options
Diffstat (limited to 'browser')
604 files changed, 2464 insertions, 26577 deletions
diff --git a/browser/LICENSE b/browser/LICENSE index 99d9d6bcd..f1b2067a7 100644 --- a/browser/LICENSE +++ b/browser/LICENSE @@ -2,6 +2,10 @@ Please see the file ../toolkit/content/license.html for the copyright licensing conditions attached to this codebase, including copies of the licenses concerned. -You are not granted rights or licenses to the trademarks of the -Mozilla Foundation or any party, including without limitation the -Firefox name or logo. +You are not granted rights or licenses to the trademarks of Moonchild +Productions or any other party, including without limitation the +Basilisk name or logo. + +The Serpent logo in branding/unofficial is derived from "Sea Serpent" +by Lorc, licensed under the Creative Commons license CC-BY 3.0 + diff --git a/browser/app/Makefile.in b/browser/app/Makefile.in index cbd2ec0fc..d807b4337 100644 --- a/browser/app/Makefile.in +++ b/browser/app/Makefile.in @@ -28,7 +28,7 @@ ifeq ($(OS_ARCH),WINNT) # (this dependency should really be just for firefox.exe, not other targets) # Note the manifest file exists in the tree, so we use the explicit filename # here. -EXTRA_DEPS += firefox.exe.manifest +EXTRA_DEPS += basilisk.exe.manifest endif PROGRAMS_DEST = $(DIST)/bin diff --git a/browser/app/firefox.exe.manifest b/browser/app/basilisk.exe.manifest index 8b8db4b7b..079e15b58 100644 --- a/browser/app/firefox.exe.manifest +++ b/browser/app/basilisk.exe.manifest @@ -3,7 +3,7 @@ <assemblyIdentity version="1.0.0.0" processorArchitecture="*" - name="Firefox" + name="Basilisk" type="win32" /> <description>Firefox</description> diff --git a/browser/app/blocklist.xml b/browser/app/blocklist.xml index 2753992a5..239fe43a4 100644 --- a/browser/app/blocklist.xml +++ b/browser/app/blocklist.xml @@ -1,5 +1,5 @@ <?xml version='1.0' encoding='UTF-8'?> -<blocklist lastupdate="1500496563565" xmlns="http://www.mozilla.org/2006/addons-blocklist"> +<blocklist lastupdate="1521130300000" xmlns="http://www.mozilla.org/2006/addons-blocklist"> <emItems> <emItem blockID="i988" id="{b12785f5-d8d0-4530-a3ea-5c4263b85bef}"> <prefs/> @@ -604,10 +604,6 @@ <prefs/> <versionRange minVersion="0" maxVersion="*" severity="1"/> </emItem> - <emItem blockID="510bbd9b-b883-4837-90ab-8e353e27e1be" id="{3B4DE07A-DE43-4DBC-873F-05835FF67DCE}"> - <prefs/> - <versionRange minVersion="0" maxVersion="*" severity="3"/> - </emItem> <emItem blockID="i730" id="25p@9eAkaLq.net"> <prefs> <pref>browser.startup.homepage</pref> @@ -766,10 +762,6 @@ <prefs/> <versionRange minVersion="0" maxVersion="*" severity="1"/> </emItem> - <emItem blockID="84dd8a02-c879-4477-8ea7-bf2f225b0940" id="{87010166-e3d0-4db5-a394-0517917201df}"> - <prefs/> - <versionRange minVersion="0" maxVersion="*" severity="3"/> - </emItem> <emItem blockID="i380" id="{cc8f597b-0765-404e-a575-82aefbd81daf}"> <prefs/> <versionRange minVersion="0" maxVersion="*" severity="3"/> @@ -889,10 +881,6 @@ <prefs/> <versionRange minVersion="0" maxVersion="*" severity="3"/> </emItem> - <emItem blockID="28c805a9-e692-4ef8-b3ae-14e085c19ecd" id="{3602008d-8195-4860-965a-d01ac4f9ca96}"> - <prefs/> - <versionRange minVersion="0" maxVersion="*" severity="3"/> - </emItem> <emItem blockID="i1223" id="tmbepff@trendmicro.com"> <prefs/> <versionRange minVersion="9.2" maxVersion="9.2.0.1023" severity="1"/> @@ -937,6 +925,10 @@ <prefs/> <versionRange minVersion="0" maxVersion="*" severity="3"/> </emItem> + <emItem blockID="i1493" id="{de71f09a-3342-48c5-95c1-4b0f17567554}"> + <prefs/> + <versionRange minVersion="0" maxVersion="1.3.9" severity="3"/> + </emItem> <emItem blockID="i712" id="{a2bfe612-4cf5-48ea-907c-f3fb25bc9d6b}"> <prefs/> <versionRange minVersion="0" maxVersion="*" severity="3"/> @@ -949,6 +941,22 @@ <prefs/> <versionRange minVersion="0" maxVersion="*" severity="3"/> </emItem> + <emItem blockID="i453" id="/^brasilescape.*\@facebook\.com$/"> + <prefs/> + <versionRange minVersion="0" maxVersion="*" severity="3"/> + </emItem> + <emItem blockID="i816" id="noOpus@outlook.com"> + <prefs/> + <versionRange minVersion="0" maxVersion="*" severity="3"/> + </emItem> + <emItem blockID="i485" id="/^brasilescape.*\@facebook\.com$//"> + <prefs/> + <versionRange minVersion="0" maxVersion="*" severity="3"/> + </emItem> + <emItem blockID="i1262" id="my7thfakeid@gmail.com"> + <prefs/> + <versionRange minVersion="0" maxVersion="*" severity="3"/> + </emItem> <emItem blockID="i86" id="{45147e67-4020-47e2-8f7a-55464fb535aa}"> <prefs/> <versionRange minVersion="0" maxVersion="*" severity="3"/> @@ -957,18 +965,54 @@ <prefs/> <versionRange minVersion="0" maxVersion="*" severity="1"/> </emItem> + <emItem blockID="i402" id="{99079a25-328f-4bd4-be04-00955acaa0a7}"> + <prefs/> + <versionRange minVersion="0" maxVersion="*" severity="1"/> + </emItem> + <emItem blockID="i451" id="{e44a1809-4d10-4ab8-b343-3326b64c7cdd}"> + <prefs/> + <versionRange minVersion="0" maxVersion="*" severity="1"/> + </emItem> <emItem blockID="i108" id="{28bfb930-7620-11e1-b0c4-0800200c9a66}"> <prefs/> <versionRange minVersion="0" maxVersion="*" severity="3"/> </emItem> + <emItem blockID="i1056" id="{82AF8DCA-6DE9-405D-BD5E-43525BDAD38A}"> + <prefs/> + <versionRange minVersion="0" maxVersion="7.5.0.9082" severity="1"> + <targetApplication id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}"> + <versionRange maxVersion="*" minVersion="43.0a1"/> + </targetApplication> + </versionRange> + </emItem> + <emItem blockID="i350" id="sqlmoz@facebook.com"> + <prefs/> + <versionRange minVersion="0" maxVersion="*" severity="3"/> + </emItem> + <emItem blockID="i446" id="{E90FA778-C2B7-41D0-9FA9-3FEC1CA54D66}"> + <prefs/> + <versionRange minVersion="0" maxVersion="*" severity="1"/> + </emItem> + <emItem blockID="i13" id="{E8E88AB0-7182-11DF-904E-6045E0D72085}"> + <prefs/> + <versionRange minVersion="0" maxVersion="*" severity="3"/> + </emItem> <emItem blockID="i226" id="{462be121-2b54-4218-bf00-b9bf8135b23f}"> <prefs/> <versionRange minVersion="0" maxVersion="*" severity="1"/> </emItem> + <emItem blockID="i117" id="{ce7e73df-6a44-4028-8079-5927a588c948}"> + <prefs/> + <versionRange minVersion="0" maxVersion="1.0.8" severity="1"/> + </emItem> <emItem blockID="i44" id="sigma@labs.mozilla"> <prefs/> <versionRange minVersion="0" maxVersion="*" severity="1"/> </emItem> + <emItem blockID="i258" id="helperbar@helperbar.com"> + <prefs/> + <versionRange minVersion="0" maxVersion="1.0" severity="1"/> + </emItem> <emItem blockID="i96" id="youtubeee@youtuber3.com"> <prefs/> <versionRange minVersion="0" maxVersion="*" severity="3"/> @@ -1246,22 +1290,10 @@ <prefs/> <versionRange minVersion="0" maxVersion="*" severity="1"/> </emItem> - <emItem blockID="a84e6eba-4bc1-4416-b481-9b837d39f9f0" id="firefox@mega.co.nz"> - <prefs/> - <versionRange minVersion="0" maxVersion="3.16.1" severity="1"> - <targetApplication id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}"> - <versionRange maxVersion="*" minVersion="56.0a1"/> - </targetApplication> - </versionRange> - </emItem> <emItem blockID="i1034" id="a88a77ahjjfjakckmmabsy278djasi@jetpack"> <prefs/> <versionRange minVersion="0" maxVersion="*" severity="3"/> </emItem> - <emItem blockID="9abc7502-bd6f-40d7-b035-abe721345360" id="{368eb817-31b4-4be9-a761-b67598faf9fa}"> - <prefs/> - <versionRange minVersion="0" maxVersion="*" severity="3"/> - </emItem> <emItem blockID="i562" id="iobitapps@mybrowserbar.com"> <prefs/> <versionRange minVersion="0" maxVersion="*" severity="1"/> @@ -1428,10 +1460,6 @@ <prefs/> <versionRange minVersion="0" maxVersion="*" severity="3"/> </emItem> - <emItem blockID="e16408c3-4e08-47fd-85a9-3cbbce534e95" id="WebProtection@360safe.com"> - <prefs/> - <versionRange minVersion="0" maxVersion="5.0.0.1009" severity="3"/> - </emItem> <emItem blockID="i82" id="{8f42fb8b-b6f6-45de-81c0-d6d39f54f971}"> <prefs/> <versionRange minVersion="0" maxVersion="*" severity="3"/> @@ -1460,10 +1488,6 @@ <prefs/> <versionRange minVersion="0" maxVersion="*" severity="3"/> </emItem> - <emItem blockID="674b6e19-f087-4706-a91d-1e723ed6f79e" id="{1490068c-d8b7-4bd2-9621-a648942b312c}"> - <prefs/> - <versionRange minVersion="0" maxVersion="*" severity="3"/> - </emItem> <emItem blockID="i488" id="jid1-4P0kohSJxU1qGg@jetpack"> <prefs/> <versionRange minVersion="1.2.50" maxVersion="1.2.50" severity="1"/> @@ -1476,6 +1500,14 @@ <prefs/> <versionRange minVersion="0" maxVersion="*" severity="3"/> </emItem> + <emItem blockID="08addad8-2f03-4cff-a791-e6f2a1b170ed" id="WebProtection@360safe.com"> + <prefs/> + <versionRange minVersion="0" maxVersion="*" severity="3"> + <targetApplication id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}"> + <versionRange maxVersion="*" minVersion="52.0a1"/> + </targetApplication> + </versionRange> + </emItem> <emItem blockID="i838" id="{87b5a11e-3b54-42d2-9102-0a7cb1f79ebf}"> <prefs/> <versionRange minVersion="0" maxVersion="*" severity="3"/> @@ -1516,10 +1548,6 @@ <prefs/> <versionRange minVersion="0" maxVersion="*" severity="1"/> </emItem> - <emItem blockID="f7569261-f575-4719-8202-552b20d013b0" id="{7e907a15-0a4c-4ff4-b64f-5eeb8f841349}"> - <prefs/> - <versionRange minVersion="0" maxVersion="*" severity="3"/> - </emItem> <emItem blockID="i465" id="trtv3@trtv.com"> <prefs/> <versionRange minVersion="0" maxVersion="*" severity="1"/> @@ -1685,10 +1713,6 @@ <prefs/> <versionRange minVersion="0" maxVersion="*" severity="1"/> </emItem> - <emItem blockID="595e0e53-b76b-4188-a160-66f29c636094" id="@68eba425-7a05-4d62-82b1-1d6d5a51716b"> - <prefs/> - <versionRange minVersion="0" maxVersion="*" severity="1"/> - </emItem> <emItem blockID="i442" id="pennerdu@faceobooks.ws"> <prefs/> <versionRange minVersion="0" maxVersion="*" severity="3"/> @@ -1733,10 +1757,6 @@ <prefs/> <versionRange minVersion="0" maxVersion="*" severity="3"/> </emItem> - <emItem blockID="5df16afc-c804-43c9-9de5-f1835403e5fb" id="@H99KV4DO-UCCF-9PFO-9ZLK-8RRP4FVOKD9O"> - <prefs/> - <versionRange minVersion="0" maxVersion="*" severity="3"/> - </emItem> <emItem blockID="i764" id="prositez@prz.com"> <prefs/> <versionRange minVersion="0" maxVersion="*" severity="3"/> @@ -1789,10 +1809,6 @@ <prefs/> <versionRange minVersion="0" maxVersion="*" severity="3"/> </emItem> - <emItem blockID="28736359-700e-4b61-9c50-0b533a6bac55" id="xdict@www.iciba.com"> - <prefs/> - <versionRange minVersion="0" maxVersion="2.3.1" severity="1"/> - </emItem> <emItem blockID="i539" id="ScorpionSaver@jetpack"> <prefs/> <versionRange minVersion="0" maxVersion="*" severity="1"/> @@ -1801,14 +1817,6 @@ <prefs/> <versionRange minVersion="0" maxVersion="*" severity="3"/> </emItem> - <emItem blockID="0a47a2f7-f07c-489b-bd39-88122a2dfe6a" id="@DA3566E2-F709-11E5-8E87-A604BC8E7F8B"> - <prefs/> - <versionRange minVersion="0" maxVersion="*" severity="3"/> - </emItem> - <emItem blockID="455772a3-8360-4f5a-9a5f-a45b904d0b51" id="{dfa727cb-0246-4c5a-843a-e4a8592cc7b9}"> - <prefs/> - <versionRange minVersion="2.0.0" maxVersion="2.0.0" severity="1"/> - </emItem> <emItem blockID="i98" id="youtubeeing@youtuberie.com"> <prefs/> <versionRange minVersion="0" maxVersion="*" severity="3"/> @@ -1905,10 +1913,6 @@ <prefs/> <versionRange minVersion="0" maxVersion="*" severity="1"/> </emItem> - <emItem blockID="d83011de-67a4-479b-a778-916a7232095b" id="{efda3854-2bd9-45a1-9766-49d7ff18931d}"> - <prefs/> - <versionRange minVersion="0" maxVersion="0.8.17.2" severity="1"/> - </emItem> <emItem blockID="i800" id="{424b0d11-e7fe-4a04-b7df-8f2c77f58aaf}"> <prefs> <pref>browser.startup.homepage</pref> @@ -1944,14 +1948,6 @@ <prefs/> <versionRange minVersion="3.1.22.0" maxVersion="3.1.22.0" severity="1"/> </emItem> - <emItem blockID="22431713-a93b-40f4-8264-0b341b5f6454" id="fi@dictionaries.addons.mozilla.org"> - <prefs/> - <versionRange minVersion="0" maxVersion="2.1.0" severity="3"> - <targetApplication id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}"> - <versionRange maxVersion="*" minVersion="56.0a1"/> - </targetApplication> - </versionRange> - </emItem> <emItem blockID="i1230" id="addon@gemaoff"> <prefs/> <versionRange minVersion="0" maxVersion="*" severity="3"/> @@ -2024,10 +2020,6 @@ <prefs/> <versionRange minVersion="0" maxVersion="1.6.7" severity="3"/> </emItem> - <emItem blockID="c806b01c-3352-4083-afd9-9a8ab6e00b19" id="html5@encoding"> - <prefs/> - <versionRange minVersion="0" maxVersion="*" severity="3"/> - </emItem> <emItem blockID="i656" id="hdv@vovcacik.addons.mozilla.org"> <prefs/> <versionRange minVersion="102.0" maxVersion="102.0" severity="3"/> @@ -2075,10 +2067,6 @@ </prefs> <versionRange minVersion="0" maxVersion="*" severity="1"/> </emItem> - <emItem blockID="10d9ce89-b8d4-4b53-b3d7-ecd192681f4e" id="{d03b6b0f-4d44-4666-a6d6-f16ad9483593}"> - <prefs/> - <versionRange minVersion="0" maxVersion="*" severity="3"/> - </emItem> <emItem blockID="i842" id="{746505DC-0E21-4667-97F8-72EA6BCF5EEF}"> <prefs/> <versionRange minVersion="0" maxVersion="*" severity="1"/> @@ -2099,62 +2087,10 @@ <prefs/> <versionRange minVersion="0" maxVersion="15.0.5" severity="1"/> </emItem> - <emItem blockID="ccebab59-7190-4258-8faa-a0b752dd5301" id="{8ab60777-e899-475d-9a4f-5f2ee02c7ea4}"> - <prefs/> - <versionRange minVersion="0" maxVersion="*" severity="3"/> - </emItem> - <emItem blockID="i1493" id="{de71f09a-3342-48c5-95c1-4b0f17567554}"> - <prefs/> - <versionRange minVersion="0" maxVersion="1.3.9" severity="3"/> - </emItem> - <emItem blockID="i453" id="/^brasilescape.*\@facebook\.com$/"> - <prefs/> - <versionRange minVersion="0" maxVersion="*" severity="3"/> - </emItem> - <emItem blockID="i816" id="noOpus@outlook.com"> - <prefs/> - <versionRange minVersion="0" maxVersion="*" severity="3"/> - </emItem> - <emItem blockID="i1262" id="my7thfakeid@gmail.com"> - <prefs/> - <versionRange minVersion="0" maxVersion="*" severity="3"/> - </emItem> - <emItem blockID="i402" id="{99079a25-328f-4bd4-be04-00955acaa0a7}"> - <prefs/> - <versionRange minVersion="0" maxVersion="*" severity="1"/> - </emItem> - <emItem blockID="i451" id="{e44a1809-4d10-4ab8-b343-3326b64c7cdd}"> - <prefs/> - <versionRange minVersion="0" maxVersion="*" severity="1"/> - </emItem> - <emItem blockID="i1056" id="{82AF8DCA-6DE9-405D-BD5E-43525BDAD38A}"> - <prefs/> - <versionRange minVersion="0" maxVersion="7.5.0.9082" severity="1"> - <targetApplication id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}"> - <versionRange maxVersion="*" minVersion="43.0a1"/> - </targetApplication> - </versionRange> - </emItem> - <emItem blockID="i350" id="sqlmoz@facebook.com"> + <emItem blockID="2447476f-043b-4d0b-9d3c-8e859c97d950" id="{44e4b2cf-77ba-4f76-aca7-f3fcbc2dda2f}"> <prefs/> <versionRange minVersion="0" maxVersion="*" severity="3"/> </emItem> - <emItem blockID="i446" id="{E90FA778-C2B7-41D0-9FA9-3FEC1CA54D66}"> - <prefs/> - <versionRange minVersion="0" maxVersion="*" severity="1"/> - </emItem> - <emItem blockID="i13" id="{E8E88AB0-7182-11DF-904E-6045E0D72085}"> - <prefs/> - <versionRange minVersion="0" maxVersion="*" severity="3"/> - </emItem> - <emItem blockID="i117" id="{ce7e73df-6a44-4028-8079-5927a588c948}"> - <prefs/> - <versionRange minVersion="0" maxVersion="1.0.8" severity="1"/> - </emItem> - <emItem blockID="i258" id="helperbar@helperbar.com"> - <prefs/> - <versionRange minVersion="0" maxVersion="1.0" severity="1"/> - </emItem> </emItems> <pluginItems> <pluginItem blockID="p416"> @@ -2174,6 +2110,21 @@ </targetApplication> </versionRange> </pluginItem> + <pluginItem blockID="p1139"> + <match exp="(NPSWF32.*\.dll)|(NPSWF64.*\.dll)|(Flash\ Player\.plugin)" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="18.0.0.329" minVersion="18.0.0.326" severity="0" vulnerabilitystatus="1"/> + </pluginItem> + <pluginItem blockID="p1076" os="Linux"> + <match exp="libflashplayer\.so" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="11.2.202.554" minVersion="11.2.202.549" severity="0" vulnerabilitystatus="1"/> + </pluginItem> + <pluginItem blockID="p1028" os="Linux"> + <match exp="libflashplayer\.so" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="11.2.202.508" minVersion="11.2.202.482" severity="0" vulnerabilitystatus="1"/> + </pluginItem> <pluginItem blockID="p456"> <match exp="npvlc\.dll" name="filename"/> <versionRange maxVersion="2.0.5" minVersion="0" severity="0" vulnerabilitystatus="1"/> @@ -2186,6 +2137,11 @@ <match exp="nppdf32\.dll" name="filename"/> <versionRange maxVersion="10.1.5.9999" minVersion="10.0" severity="0" vulnerabilitystatus="1"/> </pluginItem> + <pluginItem blockID="p1044" os="Linux"> + <match exp="libflashplayer\.so" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="11.2.202.539" minVersion="11.2.202.509" severity="0" vulnerabilitystatus="1"/> + </pluginItem> <pluginItem blockID="p956"> <match exp="JavaAppletPlugin\.plugin" name="filename"/> <infoURL>https://java.com/</infoURL> @@ -2208,6 +2164,26 @@ </targetApplication> </versionRange> </pluginItem> + <pluginItem blockID="p1140"> + <match exp="(NPSWF32.*\.dll)|(NPSWF64.*\.dll)|(Flash\ Player\.plugin)" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="20.0.0.306" minVersion="20.0.0.286" severity="0" vulnerabilitystatus="1"/> + </pluginItem> + <pluginItem blockID="p830" os="Linux"> + <match exp="libflashplayer\.so" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="11.2.202.441" minVersion="11.2.202.439" severity="0" vulnerabilitystatus="1"/> + </pluginItem> + <pluginItem blockID="p938"> + <match exp="(NPSWF32.*\.dll)|(NPSWF64.*\.dll)|(Flash\ Player\.plugin)" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="18.0.0.202" minVersion="18.0.0.194" severity="0" vulnerabilitystatus="1"/> + </pluginItem> + <pluginItem blockID="p1122"> + <match exp="(NPSWF32.*\.dll)|(NPSWF64.*\.dll)|(Flash\ Player\.plugin)" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="18.0.0.326" minVersion="18.0.0.268" severity="0" vulnerabilitystatus="1"/> + </pluginItem> <pluginItem blockID="p134"> <match exp="Java\(TM\) Platform SE 7 U[5-6](\s[^\d\._U]|$)" name="name"/> <match exp="npjp2\.dll" name="filename"/> @@ -2221,6 +2197,26 @@ <match exp="CiscoWebCommunicator\.plugin" name="filename"/> <versionRange maxVersion="3.0.5.99999999999999" minVersion="0" severity="0" vulnerabilitystatus="1"/> </pluginItem> + <pluginItem blockID="p944"> + <match exp="(NPSWF32.*\.dll)|(NPSWF64.*\.dll)|(Flash\ Player\.plugin)" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="13.0.0.302" minVersion="13.0.0.302" severity="0" vulnerabilitystatus="1"/> + </pluginItem> + <pluginItem blockID="p1495" os="Linux"> + <match exp="libflashplayer\.so" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="24.0.0.186" minVersion="23.0.0.207" severity="0" vulnerabilitystatus="1"/> + </pluginItem> + <pluginItem blockID="p1420"> + <match exp="(NPSWF32.*\.dll)|(NPSWF64.*\.dll)|(Flash\ Player\.plugin)" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="23.0.0.205" minVersion="23.0.0.185" severity="0" vulnerabilitystatus="1"/> + </pluginItem> + <pluginItem blockID="26c2a4e2-9aff-4ab1-b654-20e478b375f0" os="Linux"> + <match exp="libflashplayer\.so" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="24.0.0.221" minVersion="24.0.0.194" severity="0" vulnerabilitystatus="1"/> + </pluginItem> <pluginItem blockID="p248"> <match exp="Scorch\.plugin" name="filename"/> <versionRange maxVersion="6.2.0b88" minVersion="0" severity="1"/> @@ -2247,6 +2243,16 @@ <pluginItem blockID="p31"> <match exp="NPMySrch.dll" name="filename"/> </pluginItem> + <pluginItem blockID="2b608fae-1750-4a06-a142-0bc9ba17a7d0"> + <match exp="(NPSWF32.*\.dll)|(NPSWF64.*\.dll)|(Flash\ Player\.plugin)" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="24.0.0.221" minVersion="24.0.0.194" severity="0" vulnerabilitystatus="1"/> + </pluginItem> + <pluginItem blockID="p1020"> + <match exp="(NPSWF32.*\.dll)|(NPSWF64.*\.dll)|(Flash\ Player\.plugin)" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="13.*" minVersion="13.0" severity="0" vulnerabilitystatus="1"/> + </pluginItem> <pluginItem blockID="p958"> <match exp="Java\(TM\) Platform SE 7 U(79|80)(\s[^\d\._U]|$)" name="name"/> <match exp="npjp2\.dll" name="filename"/> @@ -2265,11 +2271,10 @@ <match exp="npmozax\.dll" name="filename"/> <versionRange maxVersion="*" minVersion="0"/> </pluginItem> - <pluginItem blockID="33147281-45b2-487e-9fea-f66c6517252d"> - <match exp="Java\(TM\) Platform SE 8 U(7[6-9]|[8-9]\d|1([0-3]\d|40))(\s[^\d\._U]|$)" name="name"/> - <match exp="npjp2\.dll" name="filename"/> - <infoURL>https://java.com/</infoURL> - <versionRange severity="0" vulnerabilitystatus="1"/> + <pluginItem blockID="p1419" os="Linux"> + <match exp="libflashplayer\.so" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="11.2.202.643" minVersion="11.2.202.637" severity="0" vulnerabilitystatus="1"/> </pluginItem> <pluginItem blockID="p80"> <match exp="\(TM\)" name="name"/> @@ -2277,6 +2282,11 @@ <match exp="[^\d\._]((0(\.\d+(\.\d+([_\.]\d+)?)?)?)|(1\.(([0-5](\.\d+([_\.]\d+)?)?)|(6(\.0([_\.](0?\d|1\d|2\d|30))?)?)|(7(\.0([_\.][0-2])?)?))))([^\d\._]|$)" name="description"/> <versionRange severity="1"/> </pluginItem> + <pluginItem blockID="p1415"> + <match exp="(NPSWF32.*\.dll)|(NPSWF64.*\.dll)|(Flash\ Player\.plugin)" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="18.0.0.382" minVersion="18.0.0.366" severity="0" vulnerabilitystatus="1"/> + </pluginItem> <pluginItem blockID="p182"> <match exp="Java\(TM\) Platform SE 7 U([0-9]|(1[0-1]))(\s[^\d\._U]|$)" name="name"/> <match exp="npjp2\.dll" name="filename"/> @@ -2306,17 +2316,34 @@ </targetApplication> </versionRange> </pluginItem> + <pluginItem blockID="p1236"> + <match exp="(NPSWF32.*\.dll)|(NPSWF64.*\.dll)|(Flash\ Player\.plugin)" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="21.0.0.242" minVersion="21.0.0.226" severity="0" vulnerabilitystatus="1"/> + </pluginItem> + <pluginItem blockID="p176"> + <match exp="(NPSWF32\.dll)|(Flash\ Player\.plugin)" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="10.3.183.18.999" minVersion="10.3" severity="0" vulnerabilitystatus="1"> + <targetApplication id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}"> + <versionRange maxVersion="*" minVersion="19.0a1"/> + </targetApplication> + </versionRange> + </pluginItem> + <pluginItem blockID="p176"> + <match exp="(NPSWF32\.dll)|(Flash\ Player\.plugin)" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="10.3.183.18.999" minVersion="10.3" severity="0" vulnerabilitystatus="1"> + <targetApplication id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}"> + <versionRange maxVersion="17.0.*" minVersion="17.0.4"/> + </targetApplication> + </versionRange> + </pluginItem> <pluginItem blockID="3f136e56-4c93-4619-8c0d-d86258c1065d"> <match exp="(nppdf32\.dll)|(AdobePDFViewerNPAPI\.plugin)" name="filename"/> <infoURL>https://get.adobe.com/reader/</infoURL> <versionRange maxVersion="15.006.30244" minVersion="15.006" severity="0" vulnerabilitystatus="1"/> </pluginItem> - <pluginItem blockID="427f5ec6-d1a7-4725-ac29-d5c5e51de537"> - <match exp="Java\(TM\) Platform SE 7 U(97|98|99|1([0-4][0-9]|50))(\s[^\d\._U]|$)" name="name"/> - <match exp="npjp2\.dll" name="filename"/> - <infoURL>https://java.com/</infoURL> - <versionRange severity="0" vulnerabilitystatus="1"/> - </pluginItem> <pluginItem blockID="43b45ad8-a373-42c1-89c6-64e2746885e5"> <match exp="(nppdf32\.dll)|(AdobePDFViewerNPAPI\.plugin)" name="filename"/> <infoURL>https://get.adobe.com/reader/</infoURL> @@ -2326,6 +2353,11 @@ <match exp="Scorch\.plugin" name="filename"/> <versionRange maxVersion="6.2.0" minVersion="6.2.0" severity="1"/> </pluginItem> + <pluginItem blockID="p936" os="Linux"> + <match exp="libflashplayer\.so" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="11.2.202.480" minVersion="11.2.202.468" severity="0" vulnerabilitystatus="1"/> + </pluginItem> <pluginItem blockID="p123"> <match exp="JavaPlugin2_NPAPI\.plugin" name="filename"/> <versionRange maxVersion="14.2.0" minVersion="0" severity="1"> @@ -2347,11 +2379,6 @@ <match exp="npUnity3D32\.dll" name="filename"/> <versionRange maxVersion="5.0.3f1" minVersion="5.0" severity="0" vulnerabilitystatus="1"/> </pluginItem> - <pluginItem blockID="49b843cc-a8fc-4ede-be0c-a0da56d0214f" os="Linux"> - <match exp="libflashplayer\.so" name="filename"/> - <infoURL>https://get.adobe.com/flashplayer/</infoURL> - <versionRange maxVersion="27.0.0.159" minVersion="0" severity="0" vulnerabilitystatus="1"/> - </pluginItem> <pluginItem blockID="p85"> <match exp="JavaPlugin2_NPAPI\.plugin" name="filename"/> <versionRange maxVersion="13.6.0" minVersion="0" severity="1"/> @@ -2365,6 +2392,16 @@ <match exp="QuickTime Plugin\.plugin" name="filename"/> <versionRange maxVersion="7.6.5" minVersion="0" severity="0" vulnerabilitystatus="1"/> </pluginItem> + <pluginItem blockID="p1413"> + <match exp="(NPSWF32.*\.dll)|(NPSWF64.*\.dll)|(Flash\ Player\.plugin)" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="23.0.0.185" minVersion="22.0.0.211" severity="0" vulnerabilitystatus="1"/> + </pluginItem> + <pluginItem blockID="p946"> + <match exp="(NPSWF32.*\.dll)|(NPSWF64.*\.dll)|(Flash\ Player\.plugin)" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="18.0.0.203" minVersion="18.0.0.203" severity="0" vulnerabilitystatus="1"/> + </pluginItem> <pluginItem blockID="p214"> <match exp="Java\(TM\) Platform SE 7 U7(\s[^\d\._U]|$)" name="name"/> <match exp="npjp2\.dll" name="filename"/> @@ -2433,6 +2470,11 @@ <infoURL>https://get.adobe.com/shockwave/</infoURL> <versionRange maxVersion="12.2.0.162" minVersion="0" severity="0" vulnerabilitystatus="1"/> </pluginItem> + <pluginItem blockID="p834"> + <match exp="(NPSWF32.*\.dll)|(Flash\ Player\.plugin)" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="13.0.0.268" minVersion="13.0.0.263" severity="0" vulnerabilitystatus="1"/> + </pluginItem> <pluginItem blockID="p138"> <match exp="JavaAppletPlugin\.plugin" name="filename"/> <versionRange maxVersion="Java 7 Update 06" minVersion="Java 7 Update 01" severity="1"> @@ -2449,6 +2491,11 @@ </targetApplication> </versionRange> </pluginItem> + <pluginItem blockID="p832"> + <match exp="(NPSWF32.*\.dll)|(Flash\ Player\.plugin)" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="16.0.0.304" minVersion="16.0.0.295" severity="0" vulnerabilitystatus="1"/> + </pluginItem> <pluginItem blockID="p188"> <match exp="JavaAppletPlugin\.plugin" name="filename"/> <versionRange maxVersion="Java 6 Update 38" minVersion="Java 6 Update 0" severity="0" vulnerabilitystatus="1"> @@ -2466,6 +2513,11 @@ <match exp="npctrl\.dll" name="filename"/> <versionRange maxVersion="5.1.20124.9999" minVersion="5.0" severity="0" vulnerabilitystatus="1"/> </pluginItem> + <pluginItem blockID="p826" os="Linux"> + <match exp="libflashplayer\.so" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="11.2.202.439" minVersion="11.2.202.425" severity="0" vulnerabilitystatus="1"/> + </pluginItem> <pluginItem blockID="p1061"> <match exp="Java\(TM\) Platform SE 7 U(8[1-9]|90)(\s[^\d\._U]|$)" name="name"/> <match exp="npjp2\.dll" name="filename"/> @@ -2482,6 +2534,21 @@ </targetApplication> </versionRange> </pluginItem> + <pluginItem blockID="p1065" os="Linux"> + <match exp="libflashplayer\.so" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="11.2.202.548" minVersion="11.2.202.540" severity="0" vulnerabilitystatus="1"/> + </pluginItem> + <pluginItem blockID="p1026"> + <match exp="(NPSWF32.*\.dll)|(NPSWF64.*\.dll)|(Flash\ Player\.plugin)" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="18.0.0.232" minVersion="18.0.0.204" severity="0" vulnerabilitystatus="1"/> + </pluginItem> + <pluginItem blockID="p1274"> + <match exp="(NPSWF32.*\.dll)|(NPSWF64.*\.dll)|(Flash\ Player\.plugin)" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="22.0.0.211" minVersion="22.0.0.192" severity="0" vulnerabilitystatus="1"/> + </pluginItem> <pluginItem blockID="p422"> <match exp="JavaAppletPlugin\.plugin" name="filename"/> <versionRange maxVersion="Java 7 Update 24" minVersion="Java 7 Update 16" severity="0" vulnerabilitystatus="1"> @@ -2501,6 +2568,11 @@ <infoURL>https://java.com/</infoURL> <versionRange maxVersion="Java 7 Update 78" minVersion="Java 7 Update 45" severity="0" vulnerabilitystatus="1"/> </pluginItem> + <pluginItem blockID="p1273"> + <match exp="(NPSWF32.*\.dll)|(NPSWF64.*\.dll)|(Flash\ Player\.plugin)" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="18.0.0.366" minVersion="18.0.0.360" severity="0" vulnerabilitystatus="1"/> + </pluginItem> <pluginItem blockID="p125"> <match exp="Java\(TM\) Platform SE ((6( U(\d|([0-2]\d)|3[0-2]))?)|(7(\sU[0-4])?))(\s[^\d\._U]|$)" name="name"/> <match exp="npjp2\.dll" name="filename"/> @@ -2521,14 +2593,29 @@ <infoURL>https://java.com/</infoURL> <versionRange severity="0" vulnerabilitystatus="1"/> </pluginItem> + <pluginItem blockID="p1252" os="Linux"> + <match exp="libflashplayer\.so" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="11.2.202.626" minVersion="11.2.202.621" severity="0" vulnerabilitystatus="1"/> + </pluginItem> + <pluginItem blockID="p1149"> + <match exp="(NPSWF32.*\.dll)|(NPSWF64.*\.dll)|(Flash\ Player\.plugin)" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="18.0.0.333" minVersion="18.0.0.329" severity="0" vulnerabilitystatus="1"/> + </pluginItem> <pluginItem blockID="p252" os="Darwin"> <match exp="AdobePDFViewerNPAPI\.plugin" name="filename"/> <versionRange maxVersion="11.0.01" minVersion="11.0.0" severity="1"/> </pluginItem> - <pluginItem blockID="832dc9ff-3314-4df2-abcf-7bd65a645371"> + <pluginItem blockID="p1253"> <match exp="(NPSWF32.*\.dll)|(NPSWF64.*\.dll)|(Flash\ Player\.plugin)" name="filename"/> <infoURL>https://get.adobe.com/flashplayer/</infoURL> - <versionRange maxVersion="27.0.0.159" minVersion="0" severity="0" vulnerabilitystatus="1"/> + <versionRange maxVersion="18.0.0.360" minVersion="18.0.0.352" severity="0" vulnerabilitystatus="1"/> + </pluginItem> + <pluginItem blockID="p1226"> + <match exp="(NPSWF32.*\.dll)|(NPSWF64.*\.dll)|(Flash\ Player\.plugin)" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="21.0.0.226" minVersion="21.0.0.197" severity="0" vulnerabilitystatus="1"/> </pluginItem> <pluginItem blockID="p186"> <match exp="Java\(TM\) Platform SE 6 U3[1-8](\s[^\d\._U]|$)" name="name"/> @@ -2561,6 +2648,11 @@ </targetApplication> </versionRange> </pluginItem> + <pluginItem blockID="911f052b-77a0-46c4-bacf-9a6fd5b2044b" os="Linux"> + <match exp="libflashplayer\.so" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="25.0.0.163" minVersion="25.0.0.127" severity="0" vulnerabilitystatus="1"/> + </pluginItem> <pluginItem blockID="p34"> <match exp="[Nn][Pp][Jj][Pp][Ii]1[56]0_[0-9]+\.[Dd][Ll][Ll]" name="filename"/> <versionRange> @@ -2569,6 +2661,16 @@ </targetApplication> </versionRange> </pluginItem> + <pluginItem blockID="p1494"> + <match exp="(NPSWF32.*\.dll)|(NPSWF64.*\.dll)|(Flash\ Player\.plugin)" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="24.0.0.186" minVersion="23.0.0.207" severity="0" vulnerabilitystatus="1"/> + </pluginItem> + <pluginItem blockID="p798"> + <match exp="(NPSWF32.*\.dll)|(Flash\ Player\.plugin)" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="15.0.0.242" minVersion="14.0" severity="0" vulnerabilitystatus="1"/> + </pluginItem> <pluginItem blockID="97647cd8-03c5-416c-b9d3-cd5ef87ab39f"> <match exp="np32dsw_1227197\.dll" name="filename"/> <versionRange maxVersion="12.2.7.197" minVersion="0" severity="0" vulnerabilitystatus="1"/> @@ -2592,6 +2694,11 @@ <infoURL>https://java.com/</infoURL> <versionRange maxVersion="Java 7 Update 80" minVersion="Java 7 Update 79" severity="0" vulnerabilitystatus="1"/> </pluginItem> + <pluginItem blockID="p928"> + <match exp="(NPSWF32.*\.dll)|(NPSWF64.*\.dll)|(Flash\ Player\.plugin)" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="13.0.0.295" minVersion="13.0.0.269" severity="0" vulnerabilitystatus="1"/> + </pluginItem> <pluginItem blockID="p190"> <match exp="Java\(TM\) Plug-in 1\.6\.0_3[1-8]([^\d\._]|$)" name="name"/> <match exp="libnpjp2\.so" name="filename"/> @@ -2601,17 +2708,40 @@ </targetApplication> </versionRange> </pluginItem> + <pluginItem blockID="p1234" os="Linux"> + <match exp="libflashplayer\.so" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="11.2.202.621" minVersion="11.2.202.616" severity="0" vulnerabilitystatus="1"/> + </pluginItem> <pluginItem blockID="p1062"> <match exp="Java\(TM\) Platform SE 8 U(4[6-9]|5\d|6[0-4])(\s[^\d\._U]|$)" name="name"/> <match exp="npjp2\.dll" name="filename"/> <infoURL>https://java.com/</infoURL> <versionRange severity="0" vulnerabilitystatus="1"/> </pluginItem> - <pluginItem blockID="ab59635e-2e93-423a-9d57-871dde8ae675"> - <match exp="Java(\(TM\))? Plug-in 11\.(7[6-9]|[8-9]\d|1([0-3]\d|40))(\.\d+)?([^\d\._]|$)" name="name"/> - <match exp="libnpjp2\.so" name="filename"/> - <infoURL>https://java.com/</infoURL> - <versionRange severity="0" vulnerabilitystatus="1"/> + <pluginItem blockID="p794"> + <match exp="(NPSWF32.*\.dll)|(Flash\ Player\.plugin)" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="13.0.0.258" minVersion="10.3.183.66" severity="0" vulnerabilitystatus="1"/> + </pluginItem> + <pluginItem blockID="p1148"> + <match exp="(NPSWF32.*\.dll)|(NPSWF64.*\.dll)|(Flash\ Player\.plugin)" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="21.0.0.197" minVersion="20.0.0.306" severity="0" vulnerabilitystatus="1"/> + </pluginItem> + <pluginItem blockID="p1235"> + <match exp="(NPSWF32.*\.dll)|(NPSWF64.*\.dll)|(Flash\ Player\.plugin)" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="18.0.0.352" minVersion="18.0.0.343" severity="0" vulnerabilitystatus="1"/> + </pluginItem> + <pluginItem blockID="p160"> + <match exp="NPSWF32\.dll" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="10.2.9999" minVersion="0" severity="0" vulnerabilitystatus="1"> + <targetApplication id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}"> + <versionRange maxVersion="16.*" minVersion="4.0"/> + </targetApplication> + </versionRange> </pluginItem> <pluginItem blockID="p129"> <match exp="Silverlight\.plugin" name="filename"/> @@ -2650,11 +2780,34 @@ <match exp="npctrl\.dll" name="filename"/> <versionRange maxVersion="4.1.10328.0" minVersion="0" severity="0" vulnerabilitystatus="1"/> </pluginItem> + <pluginItem blockID="p1067"> + <match exp="(NPSWF32.*\.dll)|(NPSWF64.*\.dll)|(Flash\ Player\.plugin)" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="19.0.0.245" minVersion="19.0.0.226" severity="0" vulnerabilitystatus="1"/> + </pluginItem> <pluginItem blockID="p1060"> <match exp="JavaAppletPlugin\.plugin" name="filename"/> <infoURL>https://java.com/</infoURL> <versionRange maxVersion="Java 8 Update 64" minVersion="Java 8 Update 46" severity="0" vulnerabilitystatus="1"/> </pluginItem> + <pluginItem blockID="p290"> + <match exp="(NPSWF32\.dll)|(Flash\ Player\.plugin)" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="10.3.183.66" minVersion="10.3.183.19" severity="0" vulnerabilitystatus="1"> + <targetApplication id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}"> + <versionRange maxVersion="*" minVersion="19.0a1"/> + </targetApplication> + </versionRange> + </pluginItem> + <pluginItem blockID="p290"> + <match exp="(NPSWF32\.dll)|(Flash\ Player\.plugin)" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="10.3.183.66" minVersion="10.3.183.19" severity="0" vulnerabilitystatus="1"> + <targetApplication id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}"> + <versionRange maxVersion="17.0.*" minVersion="17.0.4"/> + </targetApplication> + </versionRange> + </pluginItem> <pluginItem blockID="p33"> <match exp="[0-6]\.0\.[01]\d{2}\.\d+" name="name"/> <match exp="npdeploytk.dll" name="filename"/> @@ -2697,6 +2850,11 @@ <infoURL>https://java.com/</infoURL> <versionRange severity="0" vulnerabilitystatus="1"/> </pluginItem> + <pluginItem blockID="p948" os="Linux"> + <match exp="libflashplayer\.so" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="11.2.202.481" minVersion="11.2.202.481" severity="0" vulnerabilitystatus="1"/> + </pluginItem> <pluginItem blockID="p1143"> <match exp="Java\(TM\) Platform SE 7 U(9[1-7])(\s[^\d\._U]|$)" name="name"/> <match exp="npjp2\.dll" name="filename"/> @@ -2709,6 +2867,11 @@ <infoURL>https://java.com/</infoURL> <versionRange severity="0" vulnerabilitystatus="1"/> </pluginItem> + <pluginItem blockID="p1075"> + <match exp="(NPSWF32.*\.dll)|(NPSWF64.*\.dll)|(Flash\ Player\.plugin)" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="18.0.0.268" minVersion="18.0.0.262" severity="0" vulnerabilitystatus="1"/> + </pluginItem> <pluginItem blockID="p250"> <match exp="npFoxitReaderPlugin\.dll" name="filename"/> <versionRange maxVersion="2.2.1.530" minVersion="0" severity="0" vulnerabilitystatus="2"/> @@ -2718,6 +2881,26 @@ <infoURL>https://java.com/</infoURL> <versionRange maxVersion="Java 7 Update 11" minVersion="Java 7 Update 11" severity="0" vulnerabilitystatus="1"/> </pluginItem> + <pluginItem blockID="p1272" os="Linux"> + <match exp="libflashplayer\.so" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="11.2.202.632" minVersion="11.2.202.626" severity="0" vulnerabilitystatus="1"/> + </pluginItem> + <pluginItem blockID="p1412" os="Linux"> + <match exp="libflashplayer\.so" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="11.2.202.637" minVersion="11.2.202.632" severity="0" vulnerabilitystatus="1"/> + </pluginItem> + <pluginItem blockID="c762d84b-9fce-425d-bc60-389a431d4453" os="Linux"> + <match exp="libflashplayer\.so" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="25.0.0.127" minVersion="24.0.0.221" severity="0" vulnerabilitystatus="1"/> + </pluginItem> + <pluginItem blockID="p1121"> + <match exp="(NPSWF32.*\.dll)|(NPSWF64.*\.dll)|(Flash\ Player\.plugin)" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="20.0.0.286" minVersion="20.0.0.235" severity="0" vulnerabilitystatus="1"/> + </pluginItem> <pluginItem blockID="p574"> <match exp="NPDjVu\.plugin" name="filename"/> <versionRange maxVersion="6.1.1" minVersion="0" severity="0" vulnerabilitystatus="1"/> @@ -2725,6 +2908,11 @@ <pluginItem blockID="p28"> <match exp="NPFFAddOn.dll" name="filename"/> </pluginItem> + <pluginItem blockID="p1421" os="Linux"> + <match exp="libflashplayer\.so" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="23.0.0.207" minVersion="11.2.202.643" severity="0" vulnerabilitystatus="1"/> + </pluginItem> <pluginItem blockID="p302"> <match exp="Java\(TM\) Plug-in 1\.6\.0_(39|40|41)([^\d\._]|$)" name="name"/> <match exp="libnpjp2\.so" name="filename"/> @@ -2734,6 +2922,24 @@ </targetApplication> </versionRange> </pluginItem> + <pluginItem blockID="p260"> + <match exp="(NPSWF32\.dll)|(Flash\ Player\.plugin)" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="10.2.9999" minVersion="0" severity="0" vulnerabilitystatus="1"> + <targetApplication id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}"> + <versionRange maxVersion="*" minVersion="18.0a1"/> + </targetApplication> + </versionRange> + </pluginItem> + <pluginItem blockID="p260"> + <match exp="(NPSWF32\.dll)|(Flash\ Player\.plugin)" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="10.2.9999" minVersion="0" severity="0" vulnerabilitystatus="1"> + <targetApplication id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}"> + <versionRange maxVersion="17.0.*" minVersion="17.0.4"/> + </targetApplication> + </versionRange> + </pluginItem> <pluginItem blockID="p242" os="Darwin"> <match exp="Flip4Mac" name="description"/> <versionRange maxVersion="2.4.3.999" minVersion="0" severity="1"> @@ -2768,6 +2974,11 @@ </targetApplication> </versionRange> </pluginItem> + <pluginItem blockID="d20ea67f-d851-4c59-a3aa-f7081248b14e"> + <match exp="(NPSWF32.*\.dll)|(NPSWF64.*\.dll)|(Flash\ Player\.plugin)" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="25.0.0.127" minVersion="24.0.0.221" severity="0" vulnerabilitystatus="1"/> + </pluginItem> <pluginItem blockID="p428"> <match exp="np[dD]eployJava1\.dll" name="filename"/> <versionRange severity="0" vulnerabilitystatus="2"/> @@ -2778,6 +2989,11 @@ <infoURL>https://java.com/</infoURL> <versionRange severity="0" vulnerabilitystatus="1"/> </pluginItem> + <pluginItem blockID="p1048"> + <match exp="(NPSWF32.*\.dll)|(NPSWF64.*\.dll)|(Flash\ Player\.plugin)" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="19.0.0.225" minVersion="19.0" severity="0" vulnerabilitystatus="1"/> + </pluginItem> <pluginItem blockID="p1064"> <match exp="Java(\(TM\))? Plug-in 11\.(4[6-9]|5\d|6[0-4])(\.[0-9]+)?([^\d\._]|$)" name="name"/> <match exp="libnpjp2\.so" name="filename"/> @@ -2793,20 +3009,35 @@ </targetApplication> </versionRange> </pluginItem> - <pluginItem blockID="d70fdf87-0441-479c-833f-2213b769eb40"> - <match exp="JavaAppletPlugin\.plugin" name="filename"/> - <infoURL>https://java.com/</infoURL> - <versionRange maxVersion="Java 7 Update 150" minVersion="Java 7 Update 97" severity="0" vulnerabilitystatus="1"/> - </pluginItem> <pluginItem blockID="p240"> <match exp="DivXBrowserPlugin\.plugin" name="filename"/> <versionRange maxVersion="1.4" minVersion="0" severity="1"/> </pluginItem> + <pluginItem blockID="p1254"> + <match exp="(NPSWF32.*\.dll)|(NPSWF64.*\.dll)|(Flash\ Player\.plugin)" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="22.0.0.192" minVersion="21.0.0.242" severity="0" vulnerabilitystatus="1"/> + </pluginItem> <pluginItem blockID="p1055"> <match exp="DirectorShockwave\.plugin" name="filename"/> <infoURL>https://get.adobe.com/shockwave/</infoURL> <versionRange maxVersion="12.2.0.162" minVersion="0" severity="0" vulnerabilitystatus="1"/> </pluginItem> + <pluginItem blockID="p796" os="Linux"> + <match exp="libflashplayer\.so" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="11.2.202.424" minVersion="0" severity="0" vulnerabilitystatus="1"/> + </pluginItem> + <pluginItem blockID="p824"> + <match exp="(NPSWF32.*\.dll)|(Flash\ Player\.plugin)" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="13.0.0.263" minVersion="13.0.0.259" severity="0" vulnerabilitystatus="1"/> + </pluginItem> + <pluginItem blockID="p1123" os="Linux"> + <match exp="libflashplayer\.so" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="11.2.202.559" minVersion="11.2.202.554" severity="0" vulnerabilitystatus="1"/> + </pluginItem> <pluginItem blockID="p328"> <match exp="Silverlight\.plugin" name="filename"/> <versionRange maxVersion="5.1.20124.9999" minVersion="5.1" severity="0" vulnerabilitystatus="1"> @@ -2823,6 +3054,11 @@ </targetApplication> </versionRange> </pluginItem> + <pluginItem blockID="p940"> + <match exp="(NPSWF32.*\.dll)|(NPSWF64.*\.dll)|(Flash\ Player\.plugin)" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="13.0.0.301" minVersion="13.0.0.296" severity="0" vulnerabilitystatus="1"/> + </pluginItem> <pluginItem blockID="p414"> <match exp="Java\(TM\) Platform SE 6 U4[2-5](\s[^\d\._U]|$)" name="name"/> <match exp="npjp2\.dll" name="filename"/> @@ -2832,6 +3068,44 @@ </targetApplication> </versionRange> </pluginItem> + <pluginItem blockID="p178"> + <match exp="(NPSWF[0-9_]*\.dll)|(Flash\ Player\.plugin)" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="11.7.700.169" minVersion="11.0" severity="0" vulnerabilitystatus="1"> + <targetApplication id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}"> + <versionRange maxVersion="*" minVersion="19.0a1"/> + </targetApplication> + </versionRange> + </pluginItem> + <pluginItem blockID="p178"> + <match exp="(NPSWF[0-9_]*\.dll)|(Flash\ Player\.plugin)" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="11.7.700.169" minVersion="11.0" severity="0" vulnerabilitystatus="1"> + <targetApplication id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}"> + <versionRange maxVersion="17.0.*" minVersion="17.0.4"/> + </targetApplication> + </versionRange> + </pluginItem> + <pluginItem blockID="p1225"> + <match exp="(NPSWF32.*\.dll)|(NPSWF64.*\.dll)|(Flash\ Player\.plugin)" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="18.0.0.343" minVersion="18.0.0.333" severity="0" vulnerabilitystatus="1"/> + </pluginItem> + <pluginItem blockID="p1046"> + <match exp="(NPSWF32.*\.dll)|(NPSWF64.*\.dll)|(Flash\ Player\.plugin)" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="18.0.0.254" minVersion="18.0.0.233" severity="0" vulnerabilitystatus="1"/> + </pluginItem> + <pluginItem blockID="p828"> + <match exp="(NPSWF32.*\.dll)|(Flash\ Player\.plugin)" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="16.0.0.287" minVersion="15.0.0.243" severity="0" vulnerabilitystatus="1"/> + </pluginItem> + <pluginItem blockID="e939e3f9-cb55-494d-b95a-c5ac82bd8d3d" os="Linux"> + <match exp="libflashplayer\.so" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="24.0.0.194" minVersion="24.0.0.186" severity="0" vulnerabilitystatus="1"/> + </pluginItem> <pluginItem blockID="p113"> <match exp="npuplaypc\.dll" name="filename"/> <versionRange maxVersion="1.0.0.0" minVersion="0" severity="1"/> @@ -2841,6 +3115,16 @@ <infoURL>https://get.adobe.com/reader</infoURL> <versionRange maxVersion="15.006.30174" minVersion="15.006.30174" severity="0" vulnerabilitystatus="1"/> </pluginItem> + <pluginItem blockID="p1422"> + <match exp="(NPSWF32.*\.dll)|(NPSWF64.*\.dll)|(Flash\ Player\.plugin)" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="23.0.0.207" minVersion="23.0.0.205" severity="0" vulnerabilitystatus="1"/> + </pluginItem> + <pluginItem blockID="ee35afac-d936-4e77-bbb1-bf7d0656f985"> + <match exp="(NPSWF32.*\.dll)|(NPSWF64.*\.dll)|(Flash\ Player\.plugin)" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="25.0.0.163" minVersion="25.0.0.127" severity="0" vulnerabilitystatus="1"/> + </pluginItem> <pluginItem blockID="p418"> <match exp="Java\(TM\) Plug-in 1\.7\.0_(1[6-9]|2[0-4])([^\d\._]|$)" name="name"/> <match exp="libnpjp2\.so" name="filename"/> @@ -2850,6 +3134,11 @@ </targetApplication> </versionRange> </pluginItem> + <pluginItem blockID="p1066"> + <match exp="(NPSWF32.*\.dll)|(NPSWF64.*\.dll)|(Flash\ Player\.plugin)" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="18.0.0.261" minVersion="18.0.0.255" severity="0" vulnerabilitystatus="1"/> + </pluginItem> <pluginItem blockID="p912"> <match exp="Java(\(TM\))? Plug-in 11\.(\d|[1-3]\d|4[0-4])(\.[0-9]+)?([^\d\._]|$)" name="name"/> <match exp="libnpjp2\.so" name="filename"/> @@ -2865,10 +3154,10 @@ <match exp="npCiscoWebCommunicator\.dll" name="filename"/> <versionRange maxVersion="3.0.5.99999999999999" minVersion="0" severity="0" vulnerabilitystatus="1"/> </pluginItem> - <pluginItem blockID="f24ffd6f-e02b-4cf4-91d9-d54cd793e4bf"> - <match exp="JavaAppletPlugin\.plugin" name="filename"/> - <infoURL>https://java.com/</infoURL> - <versionRange maxVersion="Java 8 Update 140" minVersion="Java 8 Update" severity="0" vulnerabilitystatus="1"/> + <pluginItem blockID="p932" os="Linux"> + <match exp="libflashplayer\.so" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="11.2.202.467" minVersion="11.2.202.442" severity="0" vulnerabilitystatus="1"/> </pluginItem> <pluginItem blockID="p906"> <match exp="Java\(TM\) Platform SE 7 U(4[5-9]|(5|6)\d|7[0-8])(\s[^\d\._U]|$)" name="name"/> @@ -2882,11 +3171,35 @@ <infoURL>https://java.com/</infoURL> <versionRange severity="0" vulnerabilitystatus="1"/> </pluginItem> - <pluginItem blockID="fdc40de3-95ab-41a5-94cf-9b400221a713"> - <match exp="Java(\(TM\))? Plug-in 10\.(97|98|99|1([0-4]\d|50))(\.\d+)?([^\d\._]|$)" name="name"/> - <match exp="libnpjp2\.so" name="filename"/> - <infoURL>https://java.com/</infoURL> - <versionRange severity="0" vulnerabilitystatus="1"/> + <pluginItem blockID="p930"> + <match exp="(NPSWF32.*\.dll)|(NPSWF64.*\.dll)|(Flash\ Player\.plugin)" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="18.0.0.193" minVersion="16.0.0.305" severity="0" vulnerabilitystatus="1"/> + </pluginItem> + <pluginItem blockID="p1074"> + <match exp="(NPSWF32.*\.dll)|(NPSWF64.*\.dll)|(Flash\ Player\.plugin)" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="20.0.0.235" minVersion="19.0.0.246" severity="0" vulnerabilitystatus="1"/> + </pluginItem> + <pluginItem blockID="p1150" os="Linux"> + <match exp="libflashplayer\.so" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="11.2.202.577" minVersion="11.2.202.569" severity="0" vulnerabilitystatus="1"/> + </pluginItem> + <pluginItem blockID="f77960ca-28f3-4664-994d-2b713d2a1434"> + <match exp="(NPSWF32.*\.dll)|(NPSWF64.*\.dll)|(Flash\ Player\.plugin)" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="24.0.0.194" minVersion="24.0.0.186" severity="0" vulnerabilitystatus="1"/> + </pluginItem> + <pluginItem blockID="p1138" os="Linux"> + <match exp="libflashplayer\.so" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="11.2.202.569" minVersion="11.2.202.559" severity="0" vulnerabilitystatus="1"/> + </pluginItem> + <pluginItem blockID="p1224" os="Linux"> + <match exp="libflashplayer\.so" name="filename"/> + <infoURL>https://get.adobe.com/flashplayer/</infoURL> + <versionRange maxVersion="11.2.202.616" minVersion="11.2.202.577" severity="0" vulnerabilitystatus="1"/> </pluginItem> </pluginItems> <gfxItems> @@ -3292,1794 +3605,4 @@ <driverVersionComparator>GREATER_THAN_OR_EQUAL</driverVersionComparator> </gfxBlacklistEntry> </gfxItems> - <certItems> - <certItem issuerName="MGYxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMR0wGwYDVQQLExREb21haW4gVmFsaWRhdGVkIFNTTDEgMB4GA1UEAxMXR2VvVHJ1c3QgRFYgU1NMIENBIC0gRzM="> - <serialNumber>L79XLVO2ZmtAu7FAG8Wmzw==</serialNumber> - </certItem> - <certItem issuerName="MEAxCzAJBgNVBAYTAkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9wZW5UcnVzdCBSb290IENBIEcx"> - <serialNumber>ESDDtMgFFiaUfKo7HD9qImM7</serialNumber> - </certItem> - <certItem issuerName="MH4xCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEvMC0GA1UEAxMmU3ltYW50ZWMgQ2xhc3MgMyBTZWN1cmUgU2VydmVyIENBIC0gRzQ="> - <serialNumber>TurPPI6eivtNeGYdM0ZWXQ==</serialNumber> - </certItem> - <certItem issuerName="MFAxJDAiBgNVBAsTG0dsb2JhbFNpZ24gRUNDIFJvb3QgQ0EgLSBSNDETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbg=="> - <serialNumber>Hwexgn/ZCJicZPcsIyI8zxQ=</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAklFMRIwEAYDVQQKEwlCYWx0aW1vcmUxEzARBgNVBAsTCkN5YmVyVHJ1c3QxIjAgBgNVBAMTGUJhbHRpbW9yZSBDeWJlclRydXN0IFJvb3Q="> - <serialNumber>Bydrxg==</serialNumber> - </certItem> - <certItem issuerName="MH4xCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEvMC0GA1UEAxMmU3ltYW50ZWMgQ2xhc3MgMyBTZWN1cmUgU2VydmVyIENBIC0gRzQ="> - <serialNumber>a9/VeyVWrzFD7rM2PEHwQA==</serialNumber> - </certItem> - <certItem issuerName="MEwxIDAeBgNVBAsTF0dsb2JhbFNpZ24gUm9vdCBDQSAtIFIyMRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu"> - <serialNumber>BAAAAAABJ/v3ZwA=</serialNumber> - </certItem> - <certItem issuerName="MDIxCzAJBgNVBAYTAkNOMQ4wDAYDVQQKEwVDTk5JQzETMBEGA1UEAxMKQ05OSUMgUk9PVA=="> - <serialNumber>STMAjg==</serialNumber> - </certItem> - <certItem issuerName="MIGFMQswCQYDVQQGEwJVUzEgMB4GA1UECgwXV2VsbHMgRmFyZ28gV2VsbHNTZWN1cmUxHDAaBgNVBAsME1dlbGxzIEZhcmdvIEJhbmsgTkExNjA0BgNVBAMMLVdlbGxzU2VjdXJlIFB1YmxpYyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eQ=="> - <serialNumber>AMs=</serialNumber> - </certItem> - <certItem issuerName="MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQDExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMw=="> - <serialNumber>AzL4tLuklekJ8lSh6VnRMSrk</serialNumber> - </certItem> - <certItem issuerName="MHExKDAmBgNVBAMTH0dsb2JhbFNpZ24gUm9vdFNpZ24gUGFydG5lcnMgQ0ExHTAbBgNVBAsTFFJvb3RTaWduIFBhcnRuZXJzIENBMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMQswCQYDVQQGEwJCRQ=="> - <serialNumber>BAAAAAABFqoAZoI=</serialNumber> - </certItem> - <certItem issuerName="MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQDExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMw=="> - <serialNumber>A+ly3y1rVP59k/MKfcE3DoEq</serialNumber> - </certItem> - <certItem issuerName="MIGVMQswCQYDVQQGEwJHUjFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIwMTE="> - <serialNumber>GN2Hrh9LtnM=</serialNumber> - </certItem> - <certItem issuerName="MH4xCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEvMC0GA1UEAxMmU3ltYW50ZWMgQ2xhc3MgMyBTZWN1cmUgU2VydmVyIENBIC0gRzQ="> - <serialNumber>45KI4WIxyXfNrdtdj7C6</serialNumber> - </certItem> - <certItem issuerName="MIGBMQswCQYDVQQGEwJCRTEZMBcGA1UEChMQR2xvYmFsU2lnbiBudi1zYTElMCMGA1UECxMcUHJpbWFyeSBPYmplY3QgUHVibGlzaGluZyBDQTEwMC4GA1UEAxMnR2xvYmFsU2lnbiBQcmltYXJ5IE9iamVjdCBQdWJsaXNoaW5nIENB"> - <serialNumber>BAAAAAABI54PryQ=</serialNumber> - </certItem> - <certItem issuerName="MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQDExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMw=="> - <serialNumber>BJDHnthjoDRutxFRJPFnixbU</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAkRFMRMwEQYDVQQKEwpERk4tVmVyZWluMRAwDgYDVQQLEwdERk4tUEtJMSQwIgYDVQQDExtERk4tVmVyZWluIFBDQSBHbG9iYWwgLSBHMDE="> - <serialNumber>CeFU2w==</serialNumber> - </certItem> - <certItem issuerName="MIGcMQswCQYDVQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5UcnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxFzAVBgNVBAMMDlRydXN0Q29yIEVDQS0x"> - <serialNumber>APB/jQRgyP8Q</serialNumber> - </certItem> - <certItem issuerName="MGYxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMR0wGwYDVQQLExREb21haW4gVmFsaWRhdGVkIFNTTDEgMB4GA1UEAxMXR2VvVHJ1c3QgRFYgU1NMIENBIC0gRzM="> - <serialNumber>KjoVfZ3by6+pL8fssyfM6A==</serialNumber> - </certItem> - <certItem issuerName="MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQDExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMw=="> - <serialNumber>A5oET6WBWx72ColKf0txoWyR</serialNumber> - </certItem> - <certItem issuerName="MHsxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazEyMDAGA1UEAxMpVmVyaVNpZ24gQ2xhc3MgMyBTU1AgSW50ZXJtZWRpYXRlIENBIC0gRzI="> - <serialNumber>NpsJHyt3o1U47AAgw3UNXA==</serialNumber> - </certItem> - <certItem issuerName="MEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDM="> - <serialNumber>CLc=</serialNumber> - </certItem> - <certItem issuerName="MCgxCzAJBgNVBAYTAkJFMRkwFwYDVQQDExBCZWxnaXVtIFJvb3QgQ0Ey"> - <serialNumber>eLumDUO40KwnecZLJxFM2A==</serialNumber> - </certItem> - <certItem issuerName="MH0xCzAJBgNVBAYTAklMMRYwFAYDVQQKEw1TdGFydENvbSBMdGQuMSswKQYDVQQLEyJTZWN1cmUgRGlnaXRhbCBDZXJ0aWZpY2F0ZSBTaWduaW5nMSkwJwYDVQQDEyBTdGFydENvbSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eQ=="> - <serialNumber>eohOGeS5ZHJeptyBvCu/mQ==</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEnMCUGA1UEAxMeU3ltYW50ZWMgV2ViIFBLSSBSU0EgUm9vdCAtIEcx"> - <serialNumber>C2tQZWb2eoQD2XC3F5JSzg==</serialNumber> - </certItem> - <certItem issuerName="MDwxGzAZBgNVBAMTEkNvbVNpZ24gU2VjdXJlZCBDQTEQMA4GA1UEChMHQ29tU2lnbjELMAkGA1UEBhMCSUw="> - <serialNumber>fbsHfUkagQtznc3rtY1uDg==</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAkRFMRMwEQYDVQQKEwpERk4tVmVyZWluMRAwDgYDVQQLEwdERk4tUEtJMSQwIgYDVQQDExtERk4tVmVyZWluIFBDQSBHbG9iYWwgLSBHMDE="> - <serialNumber>CqnbFQ==</serialNumber> - </certItem> - <certItem issuerName="MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQDExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMw=="> - <serialNumber>A/99bZCzSpexYL5y6dSryDn3</serialNumber> - </certItem> - <certItem issuerName="MIGKMQswCQYDVQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEmMCQGA1UECxMdQ29weXJpZ2h0IChjKSAyMDA1IFdJU2VLZXkgU0ExFjAUBgNVBAsTDUludGVybmF0aW9uYWwxKTAnBgNVBAMTIFdJU2VLZXkgQ2VydGlmeUlEIEFkdmFuY2VkIEcxIENB"> - <serialNumber>WD1AyQAAAAAAJQ==</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAklFMRIwEAYDVQQKEwlCYWx0aW1vcmUxEzARBgNVBAsTCkN5YmVyVHJ1c3QxIjAgBgNVBAMTGUJhbHRpbW9yZSBDeWJlclRydXN0IFJvb3Q="> - <serialNumber>ByfJhw==</serialNumber> - </certItem> - <certItem issuerName="MD8xJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjEXMBUGA1UEAxMORFNUIFJvb3QgQ0EgWDM="> - <serialNumber>AJBQSPqrEvDE2Hz8xH39Low=</serialNumber> - </certItem> - <certItem issuerName="MFgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5"> - <serialNumber>IyIVazG4RE9AERkb+ekH8w==</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAklFMRIwEAYDVQQKEwlCYWx0aW1vcmUxEzARBgNVBAsTCkN5YmVyVHJ1c3QxIjAgBgNVBAMTGUJhbHRpbW9yZSBDeWJlclRydXN0IFJvb3Q="> - <serialNumber>BydeGg==</serialNumber> - </certItem> - <certItem issuerName="MDsxCzAJBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTQ=="> - <serialNumber>Bg==</serialNumber> - </certItem> - <certItem issuerName="MGMxCzAJBgNVBAYTAkZSMRMwEQYDVQQKEwpDZXJ0aW5vbWlzMRcwFQYDVQQLEw4wMDAyIDQzMzk5ODkwMzEmMCQGA1UEAwwdQ2VydGlub21pcyAtIEF1dG9yaXTDqSBSYWNpbmU="> - <serialNumber>GA==</serialNumber> - </certItem> - <certItem issuerName="MHExKDAmBgNVBAMTH0dsb2JhbFNpZ24gUm9vdFNpZ24gUGFydG5lcnMgQ0ExHTAbBgNVBAsTFFJvb3RTaWduIFBhcnRuZXJzIENBMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMQswCQYDVQQGEwJCRQ=="> - <serialNumber>BAAAAAABHJRKMpA=</serialNumber> - </certItem> - <certItem issuerName="MHExKDAmBgNVBAMTH0dsb2JhbFNpZ24gUm9vdFNpZ24gUGFydG5lcnMgQ0ExHTAbBgNVBAsTFFJvb3RTaWduIFBhcnRuZXJzIENBMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMQswCQYDVQQGEwJCRQ=="> - <serialNumber>BAAAAAABAJmPjfQ=</serialNumber> - </certItem> - <certItem issuerName="MIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMw=="> - <serialNumber>Er0moq4zwH8ke2pYafIKdg==</serialNumber> - </certItem> - <certItem issuerName="MGMxCzAJBgNVBAYTAkZSMRMwEQYDVQQKEwpDZXJ0aW5vbWlzMRcwFQYDVQQLEw4wMDAyIDQzMzk5ODkwMzEmMCQGA1UEAwwdQ2VydGlub21pcyAtIEF1dG9yaXTDqSBSYWNpbmU="> - <serialNumber>HQ==</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAklFMRIwEAYDVQQKEwlCYWx0aW1vcmUxEzARBgNVBAsTCkN5YmVyVHJ1c3QxIjAgBgNVBAMTGUJhbHRpbW9yZSBDeWJlclRydXN0IFJvb3Q="> - <serialNumber>ByeLBg==</serialNumber> - </certItem> - <certItem issuerName="MDsxCzAJBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTQ=="> - <serialNumber>Eg==</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAklFMRIwEAYDVQQKEwlCYWx0aW1vcmUxEzARBgNVBAsTCkN5YmVyVHJ1c3QxIjAgBgNVBAMTGUJhbHRpbW9yZSBDeWJlclRydXN0IFJvb3Q="> - <serialNumber>Bydxog==</serialNumber> - </certItem> - <certItem issuerName="MIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMw=="> - <serialNumber>Pgyeh2mqlVzqI9hFntRbUQ==</serialNumber> - </certItem> - <certItem issuerName="MIG8MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOzA5BgNVBAsTMlRlcm1zIG9mIHVzZSBhdCBodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhIChjKTEwMTYwNAYDVQQDEy1WZXJpU2lnbiBDbGFzcyAzIEludGVybmF0aW9uYWwgU2VydmVyIENBIC0gRzM="> - <serialNumber>Gd/pPu+qLnXUdvP9sW73CQ==</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAkRFMRMwEQYDVQQKEwpERk4tVmVyZWluMRAwDgYDVQQLEwdERk4tUEtJMSQwIgYDVQQDExtERk4tVmVyZWluIFBDQSBHbG9iYWwgLSBHMDE="> - <serialNumber>F5Bg6C237Q==</serialNumber> - </certItem> - <certItem issuerName="MIG9MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5"> - <serialNumber>Ai7cBJYqBE0I9NdyoZfRrw==</serialNumber> - </certItem> - <certItem issuerName="MIGLMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMRUwEwYDVQQLEwxNaWNyb3NvZnQgSVQxHjAcBgNVBAMTFU1pY3Jvc29mdCBJVCBTU0wgU0hBMg=="> - <serialNumber>WgAFElcDxFjoswSzjAABAAUSVw==</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEnMCUGA1UEAxMeU3ltYW50ZWMgV2ViIFBLSSBFQ0MgUm9vdCAtIEcx"> - <serialNumber>UKM/CNF2OvC4giYnAUG/Ag==</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEnMCUGA1UEAxMeU3ltYW50ZWMgV2ViIFBLSSBSU0EgUm9vdCAtIEcx"> - <serialNumber>LzVYePklc3vH3jkk0BZr9g==</serialNumber> - </certItem> - <certItem issuerName="MIG9MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5"> - <serialNumber>BYOGvG32ukb1Yxj2oKoFyw==</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEnMCUGA1UEAxMeU3ltYW50ZWMgV2ViIFBLSSBSU0EgUm9vdCAtIEcx"> - <serialNumber>P4sUnc++hlU/bXj0zSTlcQ==</serialNumber> - </certItem> - <certItem issuerName="MIGFMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01PRE8gQ0EgTGltaXRlZDErMCkGA1UEAxMiQ09NT0RPIFJTQSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eQ=="> - <serialNumber>AKrMYlJmUUin8FOM/0TJrmk=</serialNumber> - </certItem> - <certItem issuerName="MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQDExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMw=="> - <serialNumber>A7uy+rmTav6tDH4dRrsnvXGH</serialNumber> - </certItem> - <certItem issuerName="MFQxCzAJBgNVBAYTAkJNMRkwFwYDVQQKDBBRdW9WYWRpcyBMaW1pdGVkMSowKAYDVQQDDCFRdW9WYWRpcyBFbnRlcnByaXNlIFRydXN0IENBIDIgRzM="> - <serialNumber>bqapwACCtKhVagTl7cEP7KFbM0E=</serialNumber> - </certItem> - <certItem issuerName="MEQxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMR0wGwYDVQQDExRHZW9UcnVzdCBTU0wgQ0EgLSBHMw=="> - <serialNumber>RUT1Gehd1KKYPfqOlgspoQ==</serialNumber> - </certItem> - <certItem issuerName="MHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlBUyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRyZSBSb290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWU="> - <serialNumber>KuzHPJLdK5hNgJRo3R47Ag==</serialNumber> - </certItem> - <certItem issuerName="MGsxCzAJBgNVBAYTAklUMQ4wDAYDVQQHDAVNaWxhbjEjMCEGA1UECgwaQWN0YWxpcyBTLnAuQS4vMDMzNTg1MjA5NjcxJzAlBgNVBAMMHkFjdGFsaXMgQXV0aGVudGljYXRpb24gUm9vdCBDQQ=="> - <serialNumber>WJ2qHzWUqTk=</serialNumber> - </certItem> - <certItem issuerName="MGoxCzAJBgNVBAYTAk5MMR4wHAYDVQQKDBVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xOzA5BgNVBAMMMlN0YWF0IGRlciBOZWRlcmxhbmRlbiBPcmdhbmlzYXRpZSBTZXJ2aWNlcyBDQSAtIEcz"> - <serialNumber>ATE6Xw==</serialNumber> - </certItem> - <certItem issuerName="MIGVMQswCQYDVQQGEwJHUjFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIwMTE="> - <serialNumber>AQAAAAQ=</serialNumber> - </certItem> - <certItem issuerName="MGgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMR0wGwYDVQQLExREb21haW4gVmFsaWRhdGVkIFNTTDEiMCAGA1UEAxMZR2VvVHJ1c3QgRFYgU1NMIFNIQTI1NiBDQQ=="> - <serialNumber>OE4/d+p3YRzzcSl+kmZ8Mw==</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazEtMCsGA1UEAxMkVmVyaVNpZ24gQ2xhc3MgMyBTU1AgSW50ZXJtZWRpYXRlIENB"> - <serialNumber>OOkLFZaa4CXGyJlLTIEjUQ==</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAklFMRIwEAYDVQQKEwlCYWx0aW1vcmUxEzARBgNVBAsTCkN5YmVyVHJ1c3QxIjAgBgNVBAMTGUJhbHRpbW9yZSBDeWJlclRydXN0IFJvb3Q="> - <serialNumber>Byc85g==</serialNumber> - </certItem> - <certItem issuerName="MEwxIDAeBgNVBAsTF0dsb2JhbFNpZ24gUm9vdCBDQSAtIFIyMRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu"> - <serialNumber>BAAAAAABRE7wRk4=</serialNumber> - </certItem> - <certItem issuerName="MFwxCzAJBgNVBAYTAlVTMRkwFwYDVQQKDBBWZXJpem9uIEJ1c2luZXNzMREwDwYDVQQLDAhPbW5pUm9vdDEfMB0GA1UEAwwWVmVyaXpvbiBHbG9iYWwgUm9vdCBDQQ=="> - <serialNumber>BFA=</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAklFMRIwEAYDVQQKEwlCYWx0aW1vcmUxEzARBgNVBAsTCkN5YmVyVHJ1c3QxIjAgBgNVBAMTGUJhbHRpbW9yZSBDeWJlclRydXN0IFJvb3Q="> - <serialNumber>ByeQ9g==</serialNumber> - </certItem> - <certItem issuerName="MFwxCzAJBgNVBAYTAkJFMRUwEwYDVQQLEwxUcnVzdGVkIFJvb3QxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExGzAZBgNVBAMTElRydXN0ZWQgUm9vdCBDQSBHMg=="> - <serialNumber>OYBKgxEHpW/8XGAGAlvJyMA=</serialNumber> - </certItem> - <certItem issuerName="MIG8MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOzA5BgNVBAsTMlRlcm1zIG9mIHVzZSBhdCBodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhIChjKTEwMTYwNAYDVQQDEy1WZXJpU2lnbiBDbGFzcyAzIEludGVybmF0aW9uYWwgU2VydmVyIENBIC0gRzM="> - <serialNumber>bzTw0uq05TUYEGS98bh0Ww==</serialNumber> - </certItem> - <certItem issuerName="MGoxCzAJBgNVBAYTAk5MMR4wHAYDVQQKDBVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xOzA5BgNVBAMMMlN0YWF0IGRlciBOZWRlcmxhbmRlbiBPcmdhbmlzYXRpZSBTZXJ2aWNlcyBDQSAtIEcz"> - <serialNumber>azAcTWL+ijs=</serialNumber> - </certItem> - <certItem issuerName="MGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGlnaXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAx"> - <serialNumber>OUOBG6TE0Lr+uYYGxeVbHg==</serialNumber> - </certItem> - <certItem issuerName="MIGXMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTEfMB0GA1UEAxMWVVROLVVTRVJGaXJzdC1IYXJkd2FyZQ=="> - <serialNumber>EEpERSryZFMagbsNw/WoWQ==</serialNumber> - </certItem> - <certItem issuerName="MFwxCzAJBgNVBAYTAlVTMRkwFwYDVQQKDBBWZXJpem9uIEJ1c2luZXNzMREwDwYDVQQLDAhPbW5pUm9vdDEfMB0GA1UEAwwWVmVyaXpvbiBHbG9iYWwgUm9vdCBDQQ=="> - <serialNumber>A4w=</serialNumber> - </certItem> - <certItem issuerName="MFgxCzAJBgNVBAYTAkpQMSswKQYDVQQKEyJKYXBhbiBDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1cmVTaWduIFJvb3RDQTEx"> - <serialNumber>Aw==</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEnMCUGA1UEAxMeU3ltYW50ZWMgV2ViIFBLSSBSU0EgUm9vdCAtIEcx"> - <serialNumber>TsaDDThhoyhX10SURO3NMg==</serialNumber> - </certItem> - <certItem issuerName="MEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDM="> - <serialNumber>CSU=</serialNumber> - </certItem> - <certItem issuerName="MHExKDAmBgNVBAMTH0dsb2JhbFNpZ24gUm9vdFNpZ24gUGFydG5lcnMgQ0ExHTAbBgNVBAsTFFJvb3RTaWduIFBhcnRuZXJzIENBMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMQswCQYDVQQGEwJCRQ=="> - <serialNumber>BAAAAAABHkSHlSo=</serialNumber> - </certItem> - <certItem issuerName="MIGCMQswCQYDVQQGEwJVUzEeMBwGA1UECxMVd3d3LnhyYW1wc2VjdXJpdHkuY29tMSQwIgYDVQQKExtYUmFtcCBTZWN1cml0eSBTZXJ2aWNlcyBJbmMxLTArBgNVBAMTJFhSYW1wIEdsb2JhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eQ=="> - <serialNumber>QDi5sA==</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEnMCUGA1UEAxMeU3ltYW50ZWMgV2ViIFBLSSBFQ0MgUm9vdCAtIEcx"> - <serialNumber>X3iUdzxCEtOAKpiTLsqjBA==</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAklFMRIwEAYDVQQKEwlCYWx0aW1vcmUxEzARBgNVBAsTCkN5YmVyVHJ1c3QxIjAgBgNVBAMTGUJhbHRpbW9yZSBDeWJlclRydXN0IFJvb3Q="> - <serialNumber>Bydp0g==</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEnMCUGA1UEAxMeU3ltYW50ZWMgV2ViIFBLSSBSU0EgUm9vdCAtIEcx"> - <serialNumber>SrQ125q7UcLfxVKepx+lRg==</serialNumber> - </certItem> - <certItem issuerName="MHExKDAmBgNVBAMTH0dsb2JhbFNpZ24gUm9vdFNpZ24gUGFydG5lcnMgQ0ExHTAbBgNVBAsTFFJvb3RTaWduIFBhcnRuZXJzIENBMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMQswCQYDVQQGEwJCRQ=="> - <serialNumber>BAAAAAABM6d3Z0s=</serialNumber> - </certItem> - <certItem issuerName="MEcxCzAJBgNVBAYTAkNIMRUwEwYDVQQKEwxTd2lzc1NpZ24gQUcxITAfBgNVBAMTGFN3aXNzU2lnbiBTaWx2ZXIgQ0EgLSBHMg=="> - <serialNumber>aBXsv0oU3xqh2xkUPOi8</serialNumber> - </certItem> - <certItem issuerName="MD8xJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjEXMBUGA1UEAxMORFNUIFJvb3QgQ0EgWDM="> - <serialNumber>APt5i5rs4dIIQPwZdk9/ISc=</serialNumber> - </certItem> - <certItem issuerName="MEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDM="> - <serialNumber>CjM=</serialNumber> - </certItem> - <certItem issuerName="MHExKDAmBgNVBAMTH0dsb2JhbFNpZ24gUm9vdFNpZ24gUGFydG5lcnMgQ0ExHTAbBgNVBAsTFFJvb3RTaWduIFBhcnRuZXJzIENBMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMQswCQYDVQQGEwJCRQ=="> - <serialNumber>BAAAAAABGMG0Gmw=</serialNumber> - </certItem> - <certItem issuerName="MIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA2IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHNQ=="> - <serialNumber>Xmo3AIW2VHeeJoR0o09RGQ==</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEnMCUGA1UEAxMeU3ltYW50ZWMgV2ViIFBLSSBFQ0MgUm9vdCAtIEcx"> - <serialNumber>bf8hEJywo1lAp4UNcLl5Ew==</serialNumber> - </certItem> - <certItem issuerName="MG0xCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRswGQYDVQQLExJQcmltYXJ5IENsYXNzIDIgQ0ExJjAkBgNVBAMTHUdsb2JhbFNpZ24gUHJpbWFyeSBDbGFzcyAyIENB"> - <serialNumber>BAAAAAABHkSl6Co=</serialNumber> - </certItem> - <certItem issuerName="MGExCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMR0wGwYDVQQLExREb21haW4gVmFsaWRhdGVkIFNTTDEbMBkGA1UEAxMSR2VvVHJ1c3QgRFYgU1NMIENB"> - <serialNumber>CWhp</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEnMCUGA1UEAxMeU3ltYW50ZWMgV2ViIFBLSSBSU0EgUm9vdCAtIEcx"> - <serialNumber>YwslVqGwc9CHkaZkXNZ4xw==</serialNumber> - </certItem> - <certItem issuerName="MEExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxUaGF3dGUsIEluYy4xGzAZBgNVBAMTElRoYXd0ZSBTR0MgQ0EgLSBHMg=="> - <serialNumber>cDggUYfwJ3A1YcdoeT6s4A==</serialNumber> - </certItem> - <certItem issuerName="MEQxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwx0aGF3dGUsIEluYy4xHjAcBgNVBAMTFXRoYXd0ZSBFViBTU0wgQ0EgLSBHMw=="> - <serialNumber>CrTHPEE6AZSfI3jysin2bA==</serialNumber> - </certItem> - <certItem issuerName="MHsxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazEyMDAGA1UEAxMpVmVyaVNpZ24gQ2xhc3MgMyBTU1AgSW50ZXJtZWRpYXRlIENBIC0gRzI="> - <serialNumber>U3KGm6UTqJ/nsMyteiUa2g==</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEnMCUGA1UEAxMeU3ltYW50ZWMgV2ViIFBLSSBFQ0MgUm9vdCAtIEcx"> - <serialNumber>OIJdAvYxHmLb6YaaMmwmjg==</serialNumber> - </certItem> - <certItem issuerName="MFwxCzAJBgNVBAYTAk5MMR4wHAYDVQQKDBVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xLTArBgNVBAMMJFN0YWF0IGRlciBOZWRlcmxhbmRlbiBCdXJnZXIgQ0EgLSBHMg=="> - <serialNumber>ATE3ew==</serialNumber> - </certItem> - <certItem issuerName="MFYxCzAJBgNVBAYTAkpQMQ8wDQYDVQQKEwZKSVBERUMxGjAYBgNVBAsTEUpDQU4gU3ViIFJvb3QgQ0EwMRowGAYDVQQDExFKQ0FOIFN1YiBSb290IENBMA=="> - <serialNumber>BAAAAAABL07hTcY=</serialNumber> - </certItem> - <certItem issuerName="MGMxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwx0aGF3dGUsIEluYy4xHTAbBgNVBAsTFERvbWFpbiBWYWxpZGF0ZWQgU1NMMR4wHAYDVQQDExV0aGF3dGUgRFYgU1NMIENBIC0gRzI="> - <serialNumber>E5I2y6sIonl4a+TmlXc7fw==</serialNumber> - </certItem> - <certItem issuerName="MCgxCzAJBgNVBAYTAkJFMRkwFwYDVQQDExBCZWxnaXVtIFJvb3QgQ0Ey"> - <serialNumber>VBSf+IncsTB3RZS4KFCJPQ==</serialNumber> - </certItem> - <certItem issuerName="ME0xCzAJBgNVBAYTAk5MMRkwFwYDVQQKDBBEaWdpZGVudGl0eSBCLlYuMSMwIQYDVQQDDBpEaWdpZGVudGl0eSBCdXJnZXIgQ0EgLSBHMg=="> - <serialNumber>DA==</serialNumber> - </certItem> - <certItem issuerName="MGcxCzAJBgNVBAYTAkRFMRMwEQYDVQQKEwpGcmF1bmhvZmVyMSEwHwYDVQQLExhGcmF1bmhvZmVyIENvcnBvcmF0ZSBQS0kxIDAeBgNVBAMTF0ZyYXVuaG9mZXIgUm9vdCBDQSAyMDA3"> - <serialNumber>YR0zGQAAAAAAAw==</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEnMCUGA1UEAxMeU3ltYW50ZWMgV2ViIFBLSSBSU0EgUm9vdCAtIEcx"> - <serialNumber>dSBsq/te0hzZauKHgJ3EWg==</serialNumber> - </certItem> - <certItem issuerName="MHcxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEoMCYGA1UEAxMfU3ltYW50ZWMgQ2xhc3MgMyBFViBTU0wgQ0EgLSBHMg=="> - <serialNumber>UVKsEezpGWOVQ4W9esstng==</serialNumber> - </certItem> - <certItem issuerName="MIGpMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhhd3RlLCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMTgwNgYDVQQLEy8oYykgMjAwNiB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UEAxMWdGhhd3RlIFByaW1hcnkgUm9vdCBDQQ=="> - <serialNumber>Ikdj3zYXXGsC/Afm9Tvx+g==</serialNumber> - </certItem> - <certItem issuerName="MG0xCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRswGQYDVQQLExJQcmltYXJ5IENsYXNzIDMgQ0ExJjAkBgNVBAMTHUdsb2JhbFNpZ24gUHJpbWFyeSBDbGFzcyAzIENB"> - <serialNumber>BAAAAAABHkSl6mw=</serialNumber> - </certItem> - <certItem issuerName="MIGCMQswCQYDVQQGEwJVUzEeMBwGA1UECxMVd3d3LnhyYW1wc2VjdXJpdHkuY29tMSQwIgYDVQQKExtYUmFtcCBTZWN1cml0eSBTZXJ2aWNlcyBJbmMxLTArBgNVBAMTJFhSYW1wIEdsb2JhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eQ=="> - <serialNumber>QDi5sQ==</serialNumber> - </certItem> - <certItem issuerName="MHExKDAmBgNVBAMTH0dsb2JhbFNpZ24gUm9vdFNpZ24gUGFydG5lcnMgQ0ExHTAbBgNVBAsTFFJvb3RTaWduIFBhcnRuZXJzIENBMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMQswCQYDVQQGEwJCRQ=="> - <serialNumber>BAAAAAABCUVQ9No=</serialNumber> - </certItem> - <certItem issuerName="MIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMw=="> - <serialNumber>U4P1tUoxl/XkztlVHdtdgw==</serialNumber> - </certItem> - <certItem issuerName="MEUxCzAJBgNVBAYTAkNIMRUwEwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2lnbiBHb2xkIENBIC0gRzI="> - <serialNumber>AIQ8dLGqNIaxxMeg31W16Q==</serialNumber> - </certItem> - <certItem issuerName="MGMxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwx0aGF3dGUsIEluYy4xHTAbBgNVBAsTFERvbWFpbiBWYWxpZGF0ZWQgU1NMMR4wHAYDVQQDExV0aGF3dGUgRFYgU1NMIENBIC0gRzI="> - <serialNumber>TqfXw+FkhxfVgE9GVMgjWQ==</serialNumber> - </certItem> - <certItem issuerName="MFwxCzAJBgNVBAYTAkJFMRUwEwYDVQQLEwxUcnVzdGVkIFJvb3QxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExGzAZBgNVBAMTElRydXN0ZWQgUm9vdCBDQSBHMg=="> - <serialNumber>YRJNfMoc12IpmW+Enpv3Pdo=</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAklFMRIwEAYDVQQKEwlCYWx0aW1vcmUxEzARBgNVBAsTCkN5YmVyVHJ1c3QxIjAgBgNVBAMTGUJhbHRpbW9yZSBDeWJlclRydXN0IFJvb3Q="> - <serialNumber>Byd/Tg==</serialNumber> - </certItem> - <certItem issuerName="MEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9iYWwgQ0E="> - <serialNumber>AjpW</serialNumber> - </certItem> - <certItem issuerName="MF8xCzAJBgNVBAYTAlRXMRIwEAYDVQQKDAlUQUlXQU4tQ0ExEDAOBgNVBAsMB1Jvb3QgQ0ExKjAoBgNVBAMMIVRXQ0EgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eQ=="> - <serialNumber>DL8=</serialNumber> - </certItem> - <certItem issuerName="MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQDExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMw=="> - <serialNumber>A8wZnhfuY6VIV1SwGsTGNR7L</serialNumber> - </certItem> - <certItem issuerName="MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQDExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMw=="> - <serialNumber>A+RCQYwhofmXM+/hxdyoUzkI</serialNumber> - </certItem> - <certItem issuerName="MEYxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMR8wHQYDVQQDExZHZW9UcnVzdCBTSEEyNTYgU1NMIENB"> - <serialNumber>OUvvVscW0/NltofkmV9qmg==</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazEtMCsGA1UEAxMkVmVyaVNpZ24gQ2xhc3MgMyBTU1AgSW50ZXJtZWRpYXRlIENB"> - <serialNumber>Cf0103tCm9oulH1QK0weTA==</serialNumber> - </certItem> - <certItem issuerName="MGYxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMR0wGwYDVQQLExREb21haW4gVmFsaWRhdGVkIFNTTDEgMB4GA1UEAxMXR2VvVHJ1c3QgRFYgU1NMIENBIC0gRzI="> - <serialNumber>EDQMI0tR4kSntv1O37N10g==</serialNumber> - </certItem> - <certItem issuerName="MEQxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMR0wGwYDVQQDExRHZW9UcnVzdCBTU0wgQ0EgLSBHMg=="> - <serialNumber>WX89jn8yGZVvoKTD9jDfRQ==</serialNumber> - </certItem> - <certItem issuerName="MGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGlnaXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAx"> - <serialNumber>U+1Y1QpJc0FOR5JdCJ01gQ==</serialNumber> - </certItem> - <certItem issuerName="MIGFMQswCQYDVQQGEwJVUzEgMB4GA1UECgwXV2VsbHMgRmFyZ28gV2VsbHNTZWN1cmUxHDAaBgNVBAsME1dlbGxzIEZhcmdvIEJhbmsgTkExNjA0BgNVBAMMLVdlbGxzU2VjdXJlIFB1YmxpYyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eQ=="> - <serialNumber>ATk=</serialNumber> - </certItem> - <certItem issuerName="MD0xCzAJBgNVBAYTAkZSMREwDwYDVQQKEwhDZXJ0cGx1czEbMBkGA1UEAxMSQ2xhc3MgMiBQcmltYXJ5IENB"> - <serialNumber>ESISuBo/wdW2tBztKmHdFCFz</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAklFMRIwEAYDVQQKEwlCYWx0aW1vcmUxEzARBgNVBAsTCkN5YmVyVHJ1c3QxIjAgBgNVBAMTGUJhbHRpbW9yZSBDeWJlclRydXN0IFJvb3Q="> - <serialNumber>Byd/UA==</serialNumber> - </certItem> - <certItem issuerName="MIG8MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOzA5BgNVBAsTMlRlcm1zIG9mIHVzZSBhdCBodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhIChjKTEwMTYwNAYDVQQDEy1WZXJpU2lnbiBDbGFzcyAzIEludGVybmF0aW9uYWwgU2VydmVyIENBIC0gRzM="> - <serialNumber>NMpMcEnex3eXx4ohk9glcQ==</serialNumber> - </certItem> - <certItem issuerName="MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQDExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMw=="> - <serialNumber>A7T0V6o47rgCKl3oUb7jF2Ph</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAkRFMRMwEQYDVQQKEwpERk4tVmVyZWluMRAwDgYDVQQLEwdERk4tUEtJMSQwIgYDVQQDExtERk4tVmVyZWluIFBDQSBHbG9iYWwgLSBHMDE="> - <serialNumber>F6QlB/yX+A==</serialNumber> - </certItem> - <certItem issuerName="MD8xJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjEXMBUGA1UEAxMORFNUIFJvb3QgQ0EgWDM="> - <serialNumber>CgFBQgAAAUFcf/EVAAAAAg==</serialNumber> - </certItem> - <certItem issuerName="MCgxCzAJBgNVBAYTAkJFMRkwFwYDVQQDExBCZWxnaXVtIFJvb3QgQ0Ey"> - <serialNumber>LizeWXFWP5pZPI/dLc+PVQ==</serialNumber> - </certItem> - <certItem issuerName="MIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMw=="> - <serialNumber>TrKEMhb2PKktH8lHg0AV5A==</serialNumber> - </certItem> - <certItem issuerName="MHMxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEkMCIGA1UEAxMbU3ltYW50ZWMgQ2xhc3MgMyBEU0EgU1NMIENB"> - <serialNumber>AuhvPsYZfVP6UDsuyjeZ4Q==</serialNumber> - </certItem> - <certItem issuerName="MHExKDAmBgNVBAMTH0dsb2JhbFNpZ24gUm9vdFNpZ24gUGFydG5lcnMgQ0ExHTAbBgNVBAsTFFJvb3RTaWduIFBhcnRuZXJzIENBMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMQswCQYDVQQGEwJCRQ=="> - <serialNumber>BAAAAAABJ/ufRdg=</serialNumber> - </certItem> - <certItem issuerName="MIGVMQswCQYDVQQGEwJHUjFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIwMTE="> - <serialNumber>FJl6tXgNpSg=</serialNumber> - </certItem> - <certItem issuerName="MFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxTaWduIFJvb3QgQ0E="> - <serialNumber>BAAAAAABIBnBjWg=</serialNumber> - </certItem> - <certItem issuerName="MGcxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGlnaXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEeMBwGA1UEAxMVU3dpc3Njb20gUm9vdCBFViBDQSAy"> - <serialNumber>AL691kTvkemG9UQNa6McQg8=</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEnMCUGA1UEAxMeU3ltYW50ZWMgV2ViIFBLSSBSU0EgUm9vdCAtIEcx"> - <serialNumber>OeKv0wi+ATDxfQ6CWir1vA==</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAkRFMRMwEQYDVQQKEwpERk4tVmVyZWluMRAwDgYDVQQLEwdERk4tUEtJMSQwIgYDVQQDExtERk4tVmVyZWluIFBDQSBHbG9iYWwgLSBHMDE="> - <serialNumber>F5BhE0zbgQ==</serialNumber> - </certItem> - <certItem issuerName="MIG9MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5"> - <serialNumber>VLm3Xe60+1YgPpXCGtXLng==</serialNumber> - </certItem> - <certItem issuerName="MH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5"> - <serialNumber>Qh/O5w==</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAklFMRIwEAYDVQQKEwlCYWx0aW1vcmUxEzARBgNVBAsTCkN5YmVyVHJ1c3QxIjAgBgNVBAMTGUJhbHRpbW9yZSBDeWJlclRydXN0IFJvb3Q="> - <serialNumber>Bycfmw==</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazEtMCsGA1UEAxMkVmVyaVNpZ24gQ2xhc3MgMyBTU1AgSW50ZXJtZWRpYXRlIENB"> - <serialNumber>VP3bQF/UdNfxq/UOypU1zQ==</serialNumber> - </certItem> - <certItem issuerName="MDsxGDAWBgNVBAoTD0N5YmVydHJ1c3QsIEluYzEfMB0GA1UEAxMWQ3liZXJ0cnVzdCBHbG9iYWwgUm9vdA=="> - <serialNumber>BAAAAAABQaHhPSY=</serialNumber> - </certItem> - <certItem issuerName="MEoxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdTZWN1cmVUcnVzdCBDb3Jwb3JhdGlvbjEZMBcGA1UEAxMQU2VjdXJlIEdsb2JhbCBDQQ=="> - <serialNumber>QAAnEQ==</serialNumber> - </certItem> - <certItem issuerName="MFwxCzAJBgNVBAYTAlVTMRkwFwYDVQQKDBBWZXJpem9uIEJ1c2luZXNzMREwDwYDVQQLDAhPbW5pUm9vdDEfMB0GA1UEAwwWVmVyaXpvbiBHbG9iYWwgUm9vdCBDQQ=="> - <serialNumber>A4g=</serialNumber> - </certItem> - <certItem issuerName="MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQDExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMw=="> - <serialNumber>A3ZQibPGSZ8nPVbuccaCvUfa</serialNumber> - </certItem> - <certItem issuerName="MHExKDAmBgNVBAMTH0dsb2JhbFNpZ24gUm9vdFNpZ24gUGFydG5lcnMgQ0ExHTAbBgNVBAsTFFJvb3RTaWduIFBhcnRuZXJzIENBMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMQswCQYDVQQGEwJCRQ=="> - <serialNumber>BAAAAAABJZbEU4I=</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAklFMRIwEAYDVQQKEwlCYWx0aW1vcmUxEzARBgNVBAsTCkN5YmVyVHJ1c3QxIjAgBgNVBAMTGUJhbHRpbW9yZSBDeWJlclRydXN0IFJvb3Q="> - <serialNumber>BycfpA==</serialNumber> - </certItem> - <certItem issuerName="MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQDExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMw=="> - <serialNumber>BHT6CK6B569m/dd5dEluBOEd</serialNumber> - </certItem> - <certItem issuerName="MIGTMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dD"> - <serialNumber>Ew1ee9Jq7Q/Dig3ACF4V6Q==</serialNumber> - </certItem> - <certItem issuerName="MGYxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMR0wGwYDVQQLExREb21haW4gVmFsaWRhdGVkIFNTTDEgMB4GA1UEAxMXR2VvVHJ1c3QgRFYgU1NMIENBIC0gRzM="> - <serialNumber>ORFgmCj072NjcJnrxOMfQA==</serialNumber> - </certItem> - <certItem issuerName="MF8xCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eQ=="> - <serialNumber>Aj/CJN2QWZAF25GXPXADOA==</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEnMCUGA1UEAxMeU3ltYW50ZWMgV2ViIFBLSSBFQ0MgUm9vdCAtIEcx"> - <serialNumber>WU+jmMhGAumhewqVKrZBmg==</serialNumber> - </certItem> - <certItem issuerName="MGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGlnaXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAx"> - <serialNumber>HxT1XSjIpzjMprp9Qu1gYQ==</serialNumber> - </certItem> - <certItem issuerName="MFYxCzAJBgNVBAYTAkpQMQ8wDQYDVQQKEwZKSVBERUMxGjAYBgNVBAsTEUpDQU4gU3ViIFJvb3QgQ0EwMRowGAYDVQQDExFKQ0FOIFN1YiBSb290IENBMA=="> - <serialNumber>BAAAAAABL07hUBg=</serialNumber> - </certItem> - <certItem issuerName="MFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxTaWduIFJvb3QgQ0E="> - <serialNumber>BAAAAAABL07hRxA=</serialNumber> - </certItem> - <certItem issuerName="MD0xCzAJBgNVBAYTAkZSMREwDwYDVQQKEwhDZXJ0cGx1czEbMBkGA1UEAxMSQ2xhc3MgMiBQcmltYXJ5IENB"> - <serialNumber>ESDYXNBhF+dePFjojs7u2vj1</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAkRFMRMwEQYDVQQKEwpERk4tVmVyZWluMRAwDgYDVQQLEwdERk4tUEtJMSQwIgYDVQQDExtERk4tVmVyZWluIFBDQSBHbG9iYWwgLSBHMDE="> - <serialNumber>Cfk9qg==</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAklFMRIwEAYDVQQKEwlCYWx0aW1vcmUxEzARBgNVBAsTCkN5YmVyVHJ1c3QxIjAgBgNVBAMTGUJhbHRpbW9yZSBDeWJlclRydXN0IFJvb3Q="> - <serialNumber>BydInw==</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEnMCUGA1UEAxMeU3ltYW50ZWMgV2ViIFBLSSBSU0EgUm9vdCAtIEcx"> - <serialNumber>d8ToN4Dfs5RqD2yfAp12yQ==</serialNumber> - </certItem> - <certItem issuerName="MFwxCzAJBgNVBAYTAkJFMRUwEwYDVQQLEwxUcnVzdGVkIFJvb3QxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExGzAZBgNVBAMTElRydXN0ZWQgUm9vdCBDQSBHMg=="> - <serialNumber>F7PAjw2k0dTX5escPnyVOBo=</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEnMCUGA1UEAxMeU3ltYW50ZWMgV2ViIFBLSSBSU0EgUm9vdCAtIEcx"> - <serialNumber>DoP7aSdEs/3y+o2Gj9zgWA==</serialNumber> - </certItem> - <certItem issuerName="ME0xCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxJzAlBgNVBAMTHkRpZ2lDZXJ0IFNIQTIgU2VjdXJlIFNlcnZlciBDQQ=="> - <serialNumber>Aa8e+91erglSMgsk/mtVaA==</serialNumber> - </certItem> - <certItem issuerName="MH0xCzAJBgNVBAYTAklMMRYwFAYDVQQKEw1TdGFydENvbSBMdGQuMSswKQYDVQQLEyJTZWN1cmUgRGlnaXRhbCBDZXJ0aWZpY2F0ZSBTaWduaW5nMSkwJwYDVQQDEyBTdGFydENvbSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eQ=="> - <serialNumber>fqRDfSf8haCEh2nWE6O+bA==</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAklFMRIwEAYDVQQKEwlCYWx0aW1vcmUxEzARBgNVBAsTCkN5YmVyVHJ1c3QxIjAgBgNVBAMTGUJhbHRpbW9yZSBDeWJlclRydXN0IFJvb3Q="> - <serialNumber>ByeBQg==</serialNumber> - </certItem> - <certItem issuerName="MHExKDAmBgNVBAMTH0dsb2JhbFNpZ24gUm9vdFNpZ24gUGFydG5lcnMgQ0ExHTAbBgNVBAsTFFJvb3RTaWduIFBhcnRuZXJzIENBMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMQswCQYDVQQGEwJCRQ=="> - <serialNumber>BAAAAAABAPpuVh0=</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazEtMCsGA1UEAxMkVmVyaVNpZ24gQ2xhc3MgMyBTU1AgSW50ZXJtZWRpYXRlIENB"> - <serialNumber>A/kVDQpE7c9h+WxlWQFzSQ==</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAklFMRIwEAYDVQQKEwlCYWx0aW1vcmUxEzARBgNVBAsTCkN5YmVyVHJ1c3QxIjAgBgNVBAMTGUJhbHRpbW9yZSBDeWJlclRydXN0IFJvb3Q="> - <serialNumber>Byc68g==</serialNumber> - </certItem> - <certItem issuerName="MIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA3IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHNA=="> - <serialNumber>RmI44ARDVCUOgXNK9ACAbg==</serialNumber> - </certItem> - <certItem issuerName="MIGVMQswCQYDVQQGEwJHUjFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIwMTE="> - <serialNumber>GN2Hrh9LtnY=</serialNumber> - </certItem> - <certItem issuerName="MD8xCzAJBgNVBAYTAlRXMTAwLgYDVQQKDCdHb3Zlcm5tZW50IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHk="> - <serialNumber>APdCebq8ZyZr/T0luxlicNw=</serialNumber> - </certItem> - <certItem issuerName="MGsxCzAJBgNVBAYTAlVTMQ0wCwYDVQQKEwRWSVNBMS8wLQYDVQQLEyZWaXNhIEludGVybmF0aW9uYWwgU2VydmljZSBBc3NvY2lhdGlvbjEcMBoGA1UEAxMTVmlzYSBlQ29tbWVyY2UgUm9vdA=="> - <serialNumber>B2VhZAPxCDH3s9Mkbu3HfQ==</serialNumber> - </certItem> - <certItem issuerName="MGsxCzAJBgNVBAYTAklUMQ4wDAYDVQQHDAVNaWxhbjEjMCEGA1UECgwaQWN0YWxpcyBTLnAuQS4vMDMzNTg1MjA5NjcxJzAlBgNVBAMMHkFjdGFsaXMgQXV0aGVudGljYXRpb24gUm9vdCBDQQ=="> - <serialNumber>OfJBIhFwAdQ=</serialNumber> - </certItem> - <certItem issuerName="MFwxCzAJBgNVBAYTAkJFMRUwEwYDVQQLEwxUcnVzdGVkIFJvb3QxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExGzAZBgNVBAMTElRydXN0ZWQgUm9vdCBDQSBHMg=="> - <serialNumber>YUlF+VXF2FWFqCo472HfZlw=</serialNumber> - </certItem> - <certItem issuerName="MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQDExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMw=="> - <serialNumber>A7GX+szdK8/7Kf0xUuarfyIN</serialNumber> - </certItem> - <certItem issuerName="MF8xCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRQwEgYDVQQLEwtQYXJ0bmVycyBDQTEfMB0GA1UEAxMWR2xvYmFsU2lnbiBQYXJ0bmVycyBDQQ=="> - <serialNumber>BAAAAAABF2Tb8Bc=</serialNumber> - </certItem> - <certItem issuerName="MDQxCzAJBgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25h"> - <serialNumber>IA==</serialNumber> - </certItem> - <certItem issuerName="MIGVMQswCQYDVQQGEwJHUjFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIwMTE="> - <serialNumber>GN2Hrh9LtnE=</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEnMCUGA1UEAxMeU3ltYW50ZWMgV2ViIFBLSSBFQ0MgUm9vdCAtIEcx"> - <serialNumber>UT6GtTGbEC6SXJteWAKy2g==</serialNumber> - </certItem> - <certItem issuerName="MGYxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMR0wGwYDVQQLExREb21haW4gVmFsaWRhdGVkIFNTTDEgMB4GA1UEAxMXR2VvVHJ1c3QgRFYgU1NMIENBIC0gRzI="> - <serialNumber>P6G7IYSL2RZxtzTh8I6qPA==</serialNumber> - </certItem> - <certItem issuerName="MIGSMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01PRE8gQ0EgTGltaXRlZDE4MDYGA1UEAxMvQ09NT0RPIFJTQSBFeHRlbmRlZCBWYWxpZGF0aW9uIFNlY3VyZSBTZXJ2ZXIgQ0E="> - <serialNumber>TasC8Zd8BT8kXEE67cFQmA==</serialNumber> - </certItem> - <certItem issuerName="MGcxCzAJBgNVBAYTAkRFMRMwEQYDVQQKEwpGcmF1bmhvZmVyMSEwHwYDVQQLExhGcmF1bmhvZmVyIENvcnBvcmF0ZSBQS0kxIDAeBgNVBAMTF0ZyYXVuaG9mZXIgUm9vdCBDQSAyMDA3"> - <serialNumber>YR3YYQAAAAAABA==</serialNumber> - </certItem> - <certItem issuerName="MIGVMQswCQYDVQQGEwJHUjFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIwMTE="> - <serialNumber>GN2Hrh9LtnQ=</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAklFMRIwEAYDVQQKEwlCYWx0aW1vcmUxEzARBgNVBAsTCkN5YmVyVHJ1c3QxIjAgBgNVBAMTGUJhbHRpbW9yZSBDeWJlclRydXN0IFJvb3Q="> - <serialNumber>ByfNeA==</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEnMCUGA1UEAxMeU3ltYW50ZWMgV2ViIFBLSSBSU0EgUm9vdCAtIEcx"> - <serialNumber>VIFPnH3Io2OmF0J5KK8gzA==</serialNumber> - </certItem> - <certItem issuerName="MIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMw=="> - <serialNumber>D/VlGqmz9Nai1ywCydT/RQ==</serialNumber> - </certItem> - <certItem issuerName="MIG9MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5"> - <serialNumber>GTPOETOFf5mIsbuzrojGfw==</serialNumber> - </certItem> - <certItem issuerName="MHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlBUyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRyZSBSb290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWU="> - <serialNumber>M64Z5ufZzDRVTHkJR1uXzw==</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAklFMRIwEAYDVQQKEwlCYWx0aW1vcmUxEzARBgNVBAsTCkN5YmVyVHJ1c3QxIjAgBgNVBAMTGUJhbHRpbW9yZSBDeWJlclRydXN0IFJvb3Q="> - <serialNumber>Byd/Tw==</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEnMCUGA1UEAxMeU3ltYW50ZWMgV2ViIFBLSSBSU0EgUm9vdCAtIEcx"> - <serialNumber>WfPUsnnSF04ShWVYEa/KRA==</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEnMCUGA1UEAxMeU3ltYW50ZWMgV2ViIFBLSSBSU0EgUm9vdCAtIEcx"> - <serialNumber>XbPH0u4MjoIrWzN8QCilfg==</serialNumber> - </certItem> - <certItem issuerName="MIG8MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOzA5BgNVBAsTMlRlcm1zIG9mIHVzZSBhdCBodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhIChjKTEwMTYwNAYDVQQDEy1WZXJpU2lnbiBDbGFzcyAzIEludGVybmF0aW9uYWwgU2VydmVyIENBIC0gRzM="> - <serialNumber>LdbnCbsA9sOgI4mkUpWXPw==</serialNumber> - </certItem> - <certItem issuerName="MEcxCzAJBgNVBAYTAkNIMRUwEwYDVQQKEwxTd2lzc1NpZ24gQUcxITAfBgNVBAMTGFN3aXNzU2lnbiBTaWx2ZXIgQ0EgLSBHMg=="> - <serialNumber>AINVG9I4T2jgQgW4N9SNhw==</serialNumber> - </certItem> - <certItem issuerName="MD4xCzAJBgNVBAYTAlBMMRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBDQQ=="> - <serialNumber>e7wSpVxmgAS5/ioLi2iBIA==</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAklFMRIwEAYDVQQKEwlCYWx0aW1vcmUxEzARBgNVBAsTCkN5YmVyVHJ1c3QxIjAgBgNVBAMTGUJhbHRpbW9yZSBDeWJlclRydXN0IFJvb3Q="> - <serialNumber>Byemag==</serialNumber> - </certItem> - <certItem issuerName="MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQDExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMw=="> - <serialNumber>AxPlMqxkByCn3XNuYMhYNMcp</serialNumber> - </certItem> - <certItem issuerName="MIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA3IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHNA=="> - <serialNumber>cXXMzbWDHMIdCotb3h64yw==</serialNumber> - </certItem> - <certItem issuerName="MF8xCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eQ=="> - <serialNumber>E/YGRk12iZqZuMfsIiVaeg==</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAklFMRIwEAYDVQQKEwlCYWx0aW1vcmUxEzARBgNVBAsTCkN5YmVyVHJ1c3QxIjAgBgNVBAMTGUJhbHRpbW9yZSBDeWJlclRydXN0IFJvb3Q="> - <serialNumber>Bye2Cg==</serialNumber> - </certItem> - <certItem issuerName="MFgxCzAJBgNVBAYTAk5MMR4wHAYDVQQKDBVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xKTAnBgNVBAMMIFN0YWF0IGRlciBOZWRlcmxhbmRlbiBFViBSb290IENB"> - <serialNumber>AJiWmg==</serialNumber> - </certItem> - <certItem issuerName="MDsxGDAWBgNVBAoTD0N5YmVydHJ1c3QsIEluYzEfMB0GA1UEAxMWQ3liZXJ0cnVzdCBHbG9iYWwgUm9vdA=="> - <serialNumber>BAAAAAABJpQ0AbA=</serialNumber> - </certItem> - <certItem issuerName="MHcxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEoMCYGA1UEAxMfU3ltYW50ZWMgQ2xhc3MgMyBFViBTU0wgQ0EgLSBHMw=="> - <serialNumber>acI1CFIgmwSFBoU5+ahDgg==</serialNumber> - </certItem> - <certItem issuerName="MEwxIDAeBgNVBAsTF0dsb2JhbFNpZ24gUm9vdCBDQSAtIFIyMRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu"> - <serialNumber>BAAAAAABL07hXdQ=</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEnMCUGA1UEAxMeU3ltYW50ZWMgV2ViIFBLSSBSU0EgUm9vdCAtIEcx"> - <serialNumber>CuUEKEJM4xhxlFXraPcSpQ==</serialNumber> - </certItem> - <certItem issuerName="MD8xJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjEXMBUGA1UEAxMORFNUIFJvb3QgQ0EgWDM="> - <serialNumber>CgFBQQAAATjkOB1sAAAAAg==</serialNumber> - </certItem> - <certItem issuerName="MIG9MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5"> - <serialNumber>QOu0a5Z9rCkw6Nk7Rg1/AQ==</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAklFMRIwEAYDVQQKEwlCYWx0aW1vcmUxEzARBgNVBAsTCkN5YmVyVHJ1c3QxIjAgBgNVBAMTGUJhbHRpbW9yZSBDeWJlclRydXN0IFJvb3Q="> - <serialNumber>ByfNbw==</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEnMCUGA1UEAxMeU3ltYW50ZWMgV2ViIFBLSSBSU0EgUm9vdCAtIEcx"> - <serialNumber>ElBUYv/f+6+gnbAJ23qnAA==</serialNumber> - </certItem> - <certItem issuerName="MIGVMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTEdMBsGA1UEAxMUVVROLVVTRVJGaXJzdC1PYmplY3Q="> - <serialNumber>a9rf7/BmG9JkKvRuy7J5QA==</serialNumber> - </certItem> - <certItem issuerName="MFwxCzAJBgNVBAYTAkJFMRUwEwYDVQQLEwxUcnVzdGVkIFJvb3QxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExGzAZBgNVBAMTElRydXN0ZWQgUm9vdCBDQSBHMg=="> - <serialNumber>QM1zZ4GZ4gfwpQtUYye3Ne0=</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEnMCUGA1UEAxMeU3ltYW50ZWMgV2ViIFBLSSBSU0EgUm9vdCAtIEcx"> - <serialNumber>XOZMbPKQuJEw8Ib5neDVpQ==</serialNumber> - </certItem> - <certItem issuerName="MDwxHjAcBgNVBAMMFUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsGA1UECgwEQXRvczELMAkGA1UEBhMCREU="> - <serialNumber>M0VSOewW3WI=</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAkRFMRMwEQYDVQQKEwpERk4tVmVyZWluMRAwDgYDVQQLEwdERk4tUEtJMSQwIgYDVQQDExtERk4tVmVyZWluIFBDQSBHbG9iYWwgLSBHMDE="> - <serialNumber>CcHC/g==</serialNumber> - </certItem> - <certItem issuerName="MIG9MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5"> - <serialNumber>Xbevr3ut3Z9m1GuXC9SonA==</serialNumber> - </certItem> - <certItem issuerName="MHExKDAmBgNVBAMTH0dsb2JhbFNpZ24gUm9vdFNpZ24gUGFydG5lcnMgQ0ExHTAbBgNVBAsTFFJvb3RTaWduIFBhcnRuZXJzIENBMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMQswCQYDVQQGEwJCRQ=="> - <serialNumber>BAAAAAABKUXDqxw=</serialNumber> - </certItem> - <certItem issuerName="MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQDExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMw=="> - <serialNumber>A3TWA5Aylxw0x8bVvrmUSNJd</serialNumber> - </certItem> - <certItem issuerName="MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQDExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMw=="> - <serialNumber>A3UNTBOHUkbq+k999nJeSJdF</serialNumber> - </certItem> - <certItem issuerName="MIG1MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOzA5BgNVBAsTMlRlcm1zIG9mIHVzZSBhdCBodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhIChjKTEwMS8wLQYDVQQDEyZWZXJpU2lnbiBDbGFzcyAzIFNlY3VyZSBTZXJ2ZXIgQ0EgLSBHMw=="> - <serialNumber>QZBvapTZFvmYktEPsBYLQQ==</serialNumber> - </certItem> - <certItem issuerName="MIG9MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5"> - <serialNumber>fMTRbGCp280pnyE/u53zbA==</serialNumber> - </certItem> - <certItem issuerName="MGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGlnaXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAy"> - <serialNumber>ANX8SnNRxCmsE/GCl5hw+8A=</serialNumber> - </certItem> - <certItem issuerName="MCgxCzAJBgNVBAYTAkJFMRkwFwYDVQQDExBCZWxnaXVtIFJvb3QgQ0Ey"> - <serialNumber>RFlmmjulj6Ve7PfBi44nnw==</serialNumber> - </certItem> - <certItem issuerName="MDwxGzAZBgNVBAMTEkNvbVNpZ24gU2VjdXJlZCBDQTEQMA4GA1UEChMHQ29tU2lnbjELMAkGA1UEBhMCSUw="> - <serialNumber>XJ8pGvGNM9RIcLUG9YQjLQ==</serialNumber> - </certItem> - <certItem issuerName="MGMxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwx0aGF3dGUsIEluYy4xHTAbBgNVBAsTFERvbWFpbiBWYWxpZGF0ZWQgU1NMMR4wHAYDVQQDExV0aGF3dGUgRFYgU1NMIENBIC0gRzI="> - <serialNumber>DYifRdP6aQQ8MLbXZY2f5g==</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAkRFMRMwEQYDVQQKEwpERk4tVmVyZWluMRAwDgYDVQQLEwdERk4tUEtJMSQwIgYDVQQDExtERk4tVmVyZWluIFBDQSBHbG9iYWwgLSBHMDE="> - <serialNumber>CqL7CA==</serialNumber> - </certItem> - <certItem issuerName="MEMxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwx0aGF3dGUsIEluYy4xHTAbBgNVBAMTFHRoYXd0ZSBTSEEyNTYgU1NMIENB"> - <serialNumber>UKKK5ol/rKBZchAAOnZjaA==</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEnMCUGA1UEAxMeU3ltYW50ZWMgV2ViIFBLSSBSU0EgUm9vdCAtIEcx"> - <serialNumber>KUZMXOUj2sdY2i2Rfgp/5Q==</serialNumber> - </certItem> - <certItem issuerName="MHExKDAmBgNVBAMTH0dsb2JhbFNpZ24gUm9vdFNpZ24gUGFydG5lcnMgQ0ExHTAbBgNVBAsTFFJvb3RTaWduIFBhcnRuZXJzIENBMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMQswCQYDVQQGEwJCRQ=="> - <serialNumber>BAAAAAABLM/7qjk=</serialNumber> - </certItem> - <certItem issuerName="MGYxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMR0wGwYDVQQLExREb21haW4gVmFsaWRhdGVkIFNTTDEgMB4GA1UEAxMXR2VvVHJ1c3QgRFYgU1NMIENBIC0gRzM="> - <serialNumber>HNo1DR4XCe4mS1iUMsY6Wg==</serialNumber> - </certItem> - <certItem issuerName="MGQxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMTowOAYDVQQDEzFHbG9iYWxTaWduIFBlcnNvbmFsU2lnbiBQYXJ0bmVycyBDQSAtIFNIQTI1NiAtIEcy"> - <serialNumber>AeNmeF8oVpDp/4GPvA==</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEnMCUGA1UEAxMeU3ltYW50ZWMgV2ViIFBLSSBSU0EgUm9vdCAtIEcx"> - <serialNumber>UN78HLEKf7W9vQYkzYpJnw==</serialNumber> - </certItem> - <certItem issuerName="MIG+MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNRW50cnVzdCwgSW5jLjEoMCYGA1UECxMfU2VlIHd3dy5lbnRydXN0Lm5ldC9sZWdhbC10ZXJtczE5MDcGA1UECxMwKGMpIDIwMDkgRW50cnVzdCwgSW5jLiAtIGZvciBhdXRob3JpemVkIHVzZSBvbmx5MTIwMAYDVQQDEylFbnRydXN0IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMg=="> - <serialNumber>UdNjvA==</serialNumber> - </certItem> - <certItem issuerName="MG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3Q="> - <serialNumber>Os2rnHWYhryvdOXfgan06A==</serialNumber> - </certItem> - <certItem issuerName="MH8xCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEwMC4GA1UEAxMnU3ltYW50ZWMgQ2xhc3MgMyBFQ0MgMjU2IGJpdCBFViBDQSAtIEcy"> - <serialNumber>OhrtngFwotLcm4i+z00SjA==</serialNumber> - </certItem> - <certItem issuerName="MIGFMQswCQYDVQQGEwJVUzEgMB4GA1UECgwXV2VsbHMgRmFyZ28gV2VsbHNTZWN1cmUxHDAaBgNVBAsME1dlbGxzIEZhcmdvIEJhbmsgTkExNjA0BgNVBAMMLVdlbGxzU2VjdXJlIFB1YmxpYyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eQ=="> - <serialNumber>ANU=</serialNumber> - </certItem> - <certItem issuerName="MEcxCzAJBgNVBAYTAkhLMRYwFAYDVQQKEw1Ib25na29uZyBQb3N0MSAwHgYDVQQDExdIb25na29uZyBQb3N0IFJvb3QgQ0EgMQ=="> - <serialNumber>BGU=</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEnMCUGA1UEAxMeU3ltYW50ZWMgV2ViIFBLSSBSU0EgUm9vdCAtIEcx"> - <serialNumber>fZ10MyCe51jAjZCsDgqaxA==</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAkRFMRMwEQYDVQQKEwpERk4tVmVyZWluMRAwDgYDVQQLEwdERk4tUEtJMSQwIgYDVQQDExtERk4tVmVyZWluIFBDQSBHbG9iYWwgLSBHMDE="> - <serialNumber>CcL+EA==</serialNumber> - </certItem> - <certItem issuerName="MEwxIDAeBgNVBAsTF0dsb2JhbFNpZ24gUm9vdCBDQSAtIFIzMRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu"> - <serialNumber>BAAAAAABJQcQRNU=</serialNumber> - </certItem> - <certItem issuerName="MF8xCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eQ=="> - <serialNumber>HVRikKXRQ1ouhOpYcOna/A==</serialNumber> - </certItem> - <certItem issuerName="MIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp"> - <serialNumber>TA5iEg==</serialNumber> - </certItem> - <certItem issuerName="MEExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxUaGF3dGUsIEluYy4xGzAZBgNVBAMTElRoYXd0ZSBTR0MgQ0EgLSBHMg=="> - <serialNumber>e0bEFhI16xx9U1yvlI56rA==</serialNumber> - </certItem> - <certItem issuerName="MFExCzAJBgNVBAYTAkVTMUIwQAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBBNjI2MzQwNjg="> - <serialNumber>JGKKnm00uOQ=</serialNumber> - </certItem> - <certItem issuerName="MCgxCzAJBgNVBAYTAkJFMRkwFwYDVQQDExBCZWxnaXVtIFJvb3QgQ0Ey"> - <serialNumber>L1fHogsVxmfMBka5q4uzaQ==</serialNumber> - </certItem> - <certItem issuerName="MDQxCzAJBgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25h"> - <serialNumber>HA==</serialNumber> - </certItem> - <certItem issuerName="MD8xJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjEXMBUGA1UEAxMORFNUIFJvb3QgQ0EgWDM="> - <serialNumber>AJiU+bpWh2Uc4xFRf8GM9yA=</serialNumber> - </certItem> - <certItem issuerName="MFwxCzAJBgNVBAYTAkJFMRUwEwYDVQQLEwxUcnVzdGVkIFJvb3QxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExGzAZBgNVBAMTElRydXN0ZWQgUm9vdCBDQSBHMg=="> - <serialNumber>UV9aaDeNRNtQuXjRYk4Skhg=</serialNumber> - </certItem> - <certItem issuerName="MGMxCzAJBgNVBAYTAkJFMRUwEwYDVQQLEwxUcnVzdGVkIFJvb3QxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExIjAgBgNVBAMTGVRydXN0ZWQgUm9vdCBDQSBTSEEyNTYgRzI="> - <serialNumber>RdHgEmEIjdyRFWDRRlk=</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEnMCUGA1UEAxMeU3ltYW50ZWMgV2ViIFBLSSBSU0EgUm9vdCAtIEcx"> - <serialNumber>JjjcXrfGjTCi1ug/AEeYlg==</serialNumber> - </certItem> - <certItem issuerName="MHExCzAJBgNVBAYTAkRFMRwwGgYDVQQKExNEZXV0c2NoZSBUZWxla29tIEFHMR8wHQYDVQQLExZULVRlbGVTZWMgVHJ1c3QgQ2VudGVyMSMwIQYDVQQDExpEZXV0c2NoZSBUZWxla29tIFJvb3QgQ0EgMg=="> - <serialNumber>AQw=</serialNumber> - </certItem> - <certItem issuerName="MIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA2IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHNQ=="> - <serialNumber>JLLEdDl2iHqqyenVWwQ/XA==</serialNumber> - </certItem> - <certItem issuerName="MIGVMQswCQYDVQQGEwJHUjFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIwMTE="> - <serialNumber>FJl6tXgNpSk=</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEnMCUGA1UEAxMeU3ltYW50ZWMgV2ViIFBLSSBFQ0MgUm9vdCAtIEcx"> - <serialNumber>TbPyD9NnsEcxyK6LIsr78g==</serialNumber> - </certItem> - <certItem issuerName="MHExKDAmBgNVBAMTH0dsb2JhbFNpZ24gUm9vdFNpZ24gUGFydG5lcnMgQ0ExHTAbBgNVBAsTFFJvb3RTaWduIFBhcnRuZXJzIENBMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMQswCQYDVQQGEwJCRQ=="> - <serialNumber>BAAAAAAA+X/GIyk=</serialNumber> - </certItem> - <certItem issuerName="MD0xCzAJBgNVBAYTAkZSMREwDwYDVQQKEwhDZXJ0cGx1czEbMBkGA1UEAxMSQ2xhc3MgMiBQcmltYXJ5IENB"> - <serialNumber>ESDItX4ruWiLnrlz0rk4/bmz</serialNumber> - </certItem> - <certItem issuerName="MIGVMQswCQYDVQQGEwJHUjFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIwMTE="> - <serialNumber>GN2Hrh9LtnI=</serialNumber> - </certItem> - <certItem issuerName="MHExKDAmBgNVBAMTH0dsb2JhbFNpZ24gUm9vdFNpZ24gUGFydG5lcnMgQ0ExHTAbBgNVBAsTFFJvb3RTaWduIFBhcnRuZXJzIENBMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMQswCQYDVQQGEwJCRQ=="> - <serialNumber>BAAAAAABJ/ufQg8=</serialNumber> - </certItem> - <certItem issuerName="MIGCMQswCQYDVQQGEwJVUzEeMBwGA1UECxMVd3d3LnhyYW1wc2VjdXJpdHkuY29tMSQwIgYDVQQKExtYUmFtcCBTZWN1cml0eSBTZXJ2aWNlcyBJbmMxLTArBgNVBAMTJFhSYW1wIEdsb2JhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eQ=="> - <serialNumber>QZCrvQ==</serialNumber> - </certItem> - <certItem issuerName="MHExKDAmBgNVBAMTH0dsb2JhbFNpZ24gUm9vdFNpZ24gUGFydG5lcnMgQ0ExHTAbBgNVBAsTFFJvb3RTaWduIFBhcnRuZXJzIENBMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMQswCQYDVQQGEwJCRQ=="> - <serialNumber>BAAAAAABMrS7t2g=</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEnMCUGA1UEAxMeU3ltYW50ZWMgV2ViIFBLSSBSU0EgUm9vdCAtIEcx"> - <serialNumber>QjiuX0y1agXQQqmDB2yh3w==</serialNumber> - </certItem> - <certItem issuerName="MGExCzAJBgNVBAYTAk5MMR4wHAYDVQQKDBVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xMjAwBgNVBAMMKVN0YWF0IGRlciBOZWRlcmxhbmRlbiBPcmdhbmlzYXRpZSBDQSAtIEcy"> - <serialNumber>LTRcDHabRHU=</serialNumber> - </certItem> - <certItem issuerName="MFExCzAJBgNVBAYTAkpQMRMwEQYDVQQKEwpGdWppIFhlcm94MS0wKwYDVQQDEyRGdWppIFhlcm94IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IDI="> - <serialNumber>AUa47POQ1dN5</serialNumber> - </certItem> - <certItem issuerName="MHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlBUyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRyZSBSb290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWU="> - <serialNumber>JLiDzgpL7oFNgJN+jIjt7w==</serialNumber> - </certItem> - <certItem issuerName="MFwxCzAJBgNVBAYTAkJFMRUwEwYDVQQLEwxUcnVzdGVkIFJvb3QxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExGzAZBgNVBAMTElRydXN0ZWQgUm9vdCBDQSBHMg=="> - <serialNumber>Mq0P6o03FDk0B2bnJ+mYPGo=</serialNumber> - </certItem> - <certItem issuerName="MD0xCzAJBgNVBAYTAkZSMREwDwYDVQQKEwhDZXJ0cGx1czEbMBkGA1UEAxMSQ2xhc3MgMiBQcmltYXJ5IENB"> - <serialNumber>ESAyW/JX3+hZIp44EAMlXU2b</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAklFMRIwEAYDVQQKEwlCYWx0aW1vcmUxEzARBgNVBAsTCkN5YmVyVHJ1c3QxIjAgBgNVBAMTGUJhbHRpbW9yZSBDeWJlclRydXN0IFJvb3Q="> - <serialNumber>Bydvrw==</serialNumber> - </certItem> - <certItem issuerName="MIGFMQswCQYDVQQGEwJVUzEgMB4GA1UECgwXV2VsbHMgRmFyZ28gV2VsbHNTZWN1cmUxHDAaBgNVBAsME1dlbGxzIEZhcmdvIEJhbmsgTkExNjA0BgNVBAMMLVdlbGxzU2VjdXJlIFB1YmxpYyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eQ=="> - <serialNumber>Aw==</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEnMCUGA1UEAxMeU3ltYW50ZWMgV2ViIFBLSSBSU0EgUm9vdCAtIEcx"> - <serialNumber>UfM8pWkcmmLGRiGIVydmoA==</serialNumber> - </certItem> - <certItem issuerName="MIGVMQswCQYDVQQGEwJHUjFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIwMTE="> - <serialNumber>GN2Hrh9Ltms=</serialNumber> - </certItem> - <certItem issuerName="MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQDExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMw=="> - <serialNumber>AyYMguSo1my449OZq51C3s3Z</serialNumber> - </certItem> - <certItem issuerName="MH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5"> - <serialNumber>Qh/QbQ==</serialNumber> - </certItem> - <certItem issuerName="MIHBMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yaw=="> - <serialNumber>B8f7CHJUqV3VareLPE+2kA==</serialNumber> - </certItem> - <certItem issuerName="MFIxCzAJBgNVBAYTAk5MMRkwFwYDVQQKDBBEaWdpZGVudGl0eSBCLlYuMSgwJgYDVQQDDB9EaWdpZGVudGl0eSBPcmdhbmlzYXRpZSBDQSAtIEcy"> - <serialNumber>DA==</serialNumber> - </certItem> - <certItem issuerName="MGExCzAJBgNVBAYTAk5MMR4wHAYDVQQKDBVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xMjAwBgNVBAMMKVN0YWF0IGRlciBOZWRlcmxhbmRlbiBPcmdhbmlzYXRpZSBDQSAtIEcy"> - <serialNumber>ZECgRdZEsns=</serialNumber> - </certItem> - <certItem issuerName="MIGVMQswCQYDVQQGEwJHUjFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIwMTE="> - <serialNumber>AQAAAAM=</serialNumber> - </certItem> - <certItem issuerName="MIG8MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOzA5BgNVBAsTMlRlcm1zIG9mIHVzZSBhdCBodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhIChjKTEwMTYwNAYDVQQDEy1WZXJpU2lnbiBDbGFzcyAzIEludGVybmF0aW9uYWwgU2VydmVyIENBIC0gRzM="> - <serialNumber>UUFV3S2cUidOOv7ESN65Ng==</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAklFMRIwEAYDVQQKEwlCYWx0aW1vcmUxEzARBgNVBAsTCkN5YmVyVHJ1c3QxIjAgBgNVBAMTGUJhbHRpbW9yZSBDeWJlclRydXN0IFJvb3Q="> - <serialNumber>Bydr0Q==</serialNumber> - </certItem> - <certItem issuerName="MGMxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwx0aGF3dGUsIEluYy4xHTAbBgNVBAsTFERvbWFpbiBWYWxpZGF0ZWQgU1NMMR4wHAYDVQQDExV0aGF3dGUgRFYgU1NMIENBIC0gRzI="> - <serialNumber>GdXz4L1b6FKNCMG9Jz2tjA==</serialNumber> - </certItem> - <certItem issuerName="MHExKDAmBgNVBAMTH0dsb2JhbFNpZ24gUm9vdFNpZ24gUGFydG5lcnMgQ0ExHTAbBgNVBAsTFFJvb3RTaWduIFBhcnRuZXJzIENBMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMQswCQYDVQQGEwJCRQ=="> - <serialNumber>BAAAAAABMxvC9bk=</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEnMCUGA1UEAxMeU3ltYW50ZWMgV2ViIFBLSSBFQ0MgUm9vdCAtIEcx"> - <serialNumber>EkoaKijVTGVYI5c604iweg==</serialNumber> - </certItem> - <certItem issuerName="MIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMw=="> - <serialNumber>TAA2G+UIK6mqznQKBT77NA==</serialNumber> - </certItem> - <certItem issuerName="MGMxCzAJBgNVBAYTAkJFMRUwEwYDVQQLEwxUcnVzdGVkIFJvb3QxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExIjAgBgNVBAMTGVRydXN0ZWQgUm9vdCBDQSBTSEEyNTYgRzI="> - <serialNumber>RvCM2iRdkCE82ZOO2dU=</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEnMCUGA1UEAxMeU3ltYW50ZWMgV2ViIFBLSSBSU0EgUm9vdCAtIEcx"> - <serialNumber>GskXrIFkzLS+4yohQM9EUA==</serialNumber> - </certItem> - <certItem issuerName="MD0xCzAJBgNVBAYTAkZSMREwDwYDVQQKEwhDZXJ0cGx1czEbMBkGA1UEAxMSQ2xhc3MgMiBQcmltYXJ5IENB"> - <serialNumber>ESCyHU+xOECnh9Rf2IvgR8zS</serialNumber> - </certItem> - <certItem issuerName="MD0xCzAJBgNVBAYTAkZSMREwDwYDVQQKEwhDZXJ0cGx1czEbMBkGA1UEAxMSQ2xhc3MgMiBQcmltYXJ5IENB"> - <serialNumber>ESByNJZ5TPjg9iZyL6a/h5Zx</serialNumber> - </certItem> - <certItem issuerName="MIGRMQswCQYDVQQGEwJERTEQMA4GA1UECgwHU2llbWVuczERMA8GA1UEBRMIWlpaWlpaVjAxOjA4BgNVBAsMMUNvcHlyaWdodCAoQykgU2llbWVucyBBRyAyMDExIEFsbCBSaWdodHMgUmVzZXJ2ZWQxITAfBgNVBAMMGFNpZW1lbnMgSW50ZXJuZXQgQ0EgVjEuMA=="> - <serialNumber>AaoZYg==</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAklFMRIwEAYDVQQKEwlCYWx0aW1vcmUxEzARBgNVBAsTCkN5YmVyVHJ1c3QxIjAgBgNVBAMTGUJhbHRpbW9yZSBDeWJlclRydXN0IFJvb3Q="> - <serialNumber>DNHqTQd9QC+JnMy6AWyhkg==</serialNumber> - </certItem> - <certItem issuerName="MGExCzAJBgNVBAYTAlVTMRIwEAYDVQQKEwlJZGVuVHJ1c3QxIDAeBgNVBAsTF0lkZW5UcnVzdCBQdWJsaWMgU2VjdG9yMRwwGgYDVQQDExNJZGVuVHJ1c3QgQUNFUyBDQSAx"> - <serialNumber>fwAAAQAAAUrz/HmrAAAAAg==</serialNumber> - </certItem> - <certItem issuerName="MFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxTaWduIFJvb3QgQ0E="> - <serialNumber>BAAAAAABHkSl5AQ=</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAklFMRIwEAYDVQQKEwlCYWx0aW1vcmUxEzARBgNVBAsTCkN5YmVyVHJ1c3QxIjAgBgNVBAMTGUJhbHRpbW9yZSBDeWJlclRydXN0IFJvb3Q="> - <serialNumber>ByemaQ==</serialNumber> - </certItem> - <certItem issuerName="MD8xCzAJBgNVBAYTAlRXMTAwLgYDVQQKDCdHb3Zlcm5tZW50IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHk="> - <serialNumber>K1ftto7Xcb0YKwQ6uMvOIA==</serialNumber> - </certItem> - <certItem issuerName="MEUxCzAJBgNVBAYTAkNIMRUwEwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2lnbiBHb2xkIENBIC0gRzI="> - <serialNumber>AIZ6Wq/4deFQzwC6NnFpUA==</serialNumber> - </certItem> - <certItem issuerName="MIG0MQswCQYDVQQGEwJVUzEQMA4GA1UECBMHQXJpem9uYTETMBEGA1UEBxMKU2NvdHRzZGFsZTEaMBgGA1UEChMRR29EYWRkeS5jb20sIEluYy4xLTArBgNVBAsTJGh0dHA6Ly9jZXJ0cy5nb2RhZGR5LmNvbS9yZXBvc2l0b3J5LzEzMDEGA1UEAxMqR28gRGFkZHkgU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcy"> - <serialNumber>AOfHzdPzlvw5</serialNumber> - </certItem> - <certItem issuerName="MDsxCzAJBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTQ=="> - <serialNumber>BA==</serialNumber> - </certItem> - <certItem issuerName="MF4xCzAJBgNVBAYTAlRXMSMwIQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEqMCgGA1UECwwhZVBLSSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5"> - <serialNumber>L7tgs/W85vnhV7I7qJ6N/g==</serialNumber> - </certItem> - <certItem issuerName="MH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5"> - <serialNumber>Qh/SqA==</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAklFMRIwEAYDVQQKEwlCYWx0aW1vcmUxEzARBgNVBAsTCkN5YmVyVHJ1c3QxIjAgBgNVBAMTGUJhbHRpbW9yZSBDeWJlclRydXN0IFJvb3Q="> - <serialNumber>Byd/UQ==</serialNumber> - </certItem> - <certItem issuerName="MIG8MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOzA5BgNVBAsTMlRlcm1zIG9mIHVzZSBhdCBodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhIChjKTEwMTYwNAYDVQQDEy1WZXJpU2lnbiBDbGFzcyAzIEludGVybmF0aW9uYWwgU2VydmVyIENBIC0gRzM="> - <serialNumber>A9GPKQ8jv9oIxfwiOy7qxQ==</serialNumber> - </certItem> - <certItem issuerName="MIG8MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOzA5BgNVBAsTMlRlcm1zIG9mIHVzZSBhdCBodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhIChjKTEwMTYwNAYDVQQDEy1WZXJpU2lnbiBDbGFzcyAzIEludGVybmF0aW9uYWwgU2VydmVyIENBIC0gRzM="> - <serialNumber>GtXUVojhwOTkaQ4bTKblEQ==</serialNumber> - </certItem> - <certItem issuerName="MEwxIDAeBgNVBAsTF0dsb2JhbFNpZ24gUm9vdCBDQSAtIFIyMRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu"> - <serialNumber>BAAAAAABIg08FMU=</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAklFMRIwEAYDVQQKEwlCYWx0aW1vcmUxEzARBgNVBAsTCkN5YmVyVHJ1c3QxIjAgBgNVBAMTGUJhbHRpbW9yZSBDeWJlclRydXN0IFJvb3Q="> - <serialNumber>Byd/Ug==</serialNumber> - </certItem> - <certItem issuerName="MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQDExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMw=="> - <serialNumber>BOPwjyn5eqfeoxs7Z0y3vqNN</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEnMCUGA1UEAxMeU3ltYW50ZWMgV2ViIFBLSSBFQ0MgUm9vdCAtIEcx"> - <serialNumber>VNb2Hjai/t7dmCtOzRXXew==</serialNumber> - </certItem> - <certItem issuerName="MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQDExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMw=="> - <serialNumber>BKobzjrOxa/6kCR0ImKoqaQW</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEnMCUGA1UEAxMeU3ltYW50ZWMgV2ViIFBLSSBSU0EgUm9vdCAtIEcx"> - <serialNumber>HGD2RtvXMaPDqHIPLdXocw==</serialNumber> - </certItem> - <certItem issuerName="MHExCzAJBgNVBAYTAkRFMRwwGgYDVQQKExNEZXV0c2NoZSBUZWxla29tIEFHMR8wHQYDVQQLExZULVRlbGVTZWMgVHJ1c3QgQ2VudGVyMSMwIQYDVQQDExpEZXV0c2NoZSBUZWxla29tIFJvb3QgQ0EgMg=="> - <serialNumber>ARQ=</serialNumber> - </certItem> - <certItem issuerName="MIGVMQswCQYDVQQGEwJHUjFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIwMTE="> - <serialNumber>AQAAAAA=</serialNumber> - </certItem> - <certItem issuerName="MDQxCzAJBgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25h"> - <serialNumber>BA==</serialNumber> - </certItem> - <certItem issuerName="MIG8MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOzA5BgNVBAsTMlRlcm1zIG9mIHVzZSBhdCBodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhIChjKTEwMTYwNAYDVQQDEy1WZXJpU2lnbiBDbGFzcyAzIEludGVybmF0aW9uYWwgU2VydmVyIENBIC0gRzM="> - <serialNumber>COwoDFvz7GD8R2K7Lo0rYQ==</serialNumber> - </certItem> - <certItem issuerName="MIG8MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOzA5BgNVBAsTMlRlcm1zIG9mIHVzZSBhdCBodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhIChjKTEwMTYwNAYDVQQDEy1WZXJpU2lnbiBDbGFzcyAzIEludGVybmF0aW9uYWwgU2VydmVyIENBIC0gRzM="> - <serialNumber>VN2yeFexyXjPf34fHGmbhg==</serialNumber> - </certItem> - <certItem issuerName="MEgxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdTZWN1cmVUcnVzdCBDb3Jwb3JhdGlvbjEXMBUGA1UEAxMOU2VjdXJlVHJ1c3QgQ0E="> - <serialNumber>R4af5A==</serialNumber> - </certItem> - <certItem issuerName="MHExKDAmBgNVBAMTH0dsb2JhbFNpZ24gUm9vdFNpZ24gUGFydG5lcnMgQ0ExHTAbBgNVBAsTFFJvb3RTaWduIFBhcnRuZXJzIENBMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMQswCQYDVQQGEwJCRQ=="> - <serialNumber>BAAAAAABLF5/HXY=</serialNumber> - </certItem> - <certItem issuerName="MDwxGzAZBgNVBAMTEkNvbVNpZ24gU2VjdXJlZCBDQTEQMA4GA1UEChMHQ29tU2lnbjELMAkGA1UEBhMCSUw="> - <serialNumber>Hnms0W0OxHSYE2F0XE97sw==</serialNumber> - </certItem> - <certItem issuerName="MHExKDAmBgNVBAMTH0dsb2JhbFNpZ24gUm9vdFNpZ24gUGFydG5lcnMgQ0ExHTAbBgNVBAsTFFJvb3RTaWduIFBhcnRuZXJzIENBMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMQswCQYDVQQGEwJCRQ=="> - <serialNumber>BAAAAAABBHYoIFs=</serialNumber> - </certItem> - <certItem issuerName="MEcxCzAJBgNVBAYTAkhLMRYwFAYDVQQKEw1Ib25na29uZyBQb3N0MSAwHgYDVQQDExdIb25na29uZyBQb3N0IFJvb3QgQ0EgMQ=="> - <serialNumber>BUE=</serialNumber> - </certItem> - <certItem issuerName="MIGuMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTE2MDQGA1UEAxMtVVROLVVTRVJGaXJzdC1DbGllbnQgQXV0aGVudGljYXRpb24gYW5kIEVtYWls"> - <serialNumber>D/wZ7+m1Mv8SONSEFcs73w==</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAklFMRIwEAYDVQQKEwlCYWx0aW1vcmUxEzARBgNVBAsTCkN5YmVyVHJ1c3QxIjAgBgNVBAMTGUJhbHRpbW9yZSBDeWJlclRydXN0IFJvb3Q="> - <serialNumber>Byeaqw==</serialNumber> - </certItem> - <certItem issuerName="MFAxCzAJBgNVBAYTAkpQMRgwFgYDVQQKEw9TRUNPTSBUcnVzdC5uZXQxJzAlBgNVBAsTHlNlY3VyaXR5IENvbW11bmljYXRpb24gUm9vdENBMQ=="> - <serialNumber>Ermwxw==</serialNumber> - </certItem> - <certItem issuerName="MIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA2IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHNQ=="> - <serialNumber>em/HTY01Cvv6ITgkH+ftlg==</serialNumber> - </certItem> - <certItem issuerName="MEAxCzAJBgNVBAYTAkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9wZW5UcnVzdCBSb290IENBIEcx"> - <serialNumber>ESBrHE7sFC7CQ8EM681xA3CY</serialNumber> - </certItem> - <certItem issuerName="MGMxCzAJBgNVBAYTAkJFMRUwEwYDVQQLEwxUcnVzdGVkIFJvb3QxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExIjAgBgNVBAMTGVRydXN0ZWQgUm9vdCBDQSBTSEEyNTYgRzI="> - <serialNumber>Rea7UUYH3jl33BryPIo=</serialNumber> - </certItem> - <certItem issuerName="MIG9MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5"> - <serialNumber>eR1nUEz8k+nDSBD+bb5uIQ==</serialNumber> - </certItem> - <certItem issuerName="MFAxCzAJBgNVBAYTAkpQMRgwFgYDVQQKEw9TRUNPTSBUcnVzdC5uZXQxJzAlBgNVBAsTHlNlY3VyaXR5IENvbW11bmljYXRpb24gUm9vdENBMQ=="> - <serialNumber>Ermwtg==</serialNumber> - </certItem> - <certItem issuerName="MFwxCzAJBgNVBAYTAkJFMRUwEwYDVQQLEwxUcnVzdGVkIFJvb3QxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExGzAZBgNVBAMTElRydXN0ZWQgUm9vdCBDQSBHMg=="> - <serialNumber>LAVIFm0MWZYH+Sv8Vf+IqkM=</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEnMCUGA1UEAxMeU3ltYW50ZWMgV2ViIFBLSSBSU0EgUm9vdCAtIEcx"> - <serialNumber>RkNUwM80Jt7beb4ek+iI8w==</serialNumber> - </certItem> - <certItem issuerName="MDIxCzAJBgNVBAYTAkNOMQ4wDAYDVQQKEwVDTk5JQzETMBEGA1UEAxMKQ05OSUMgUk9PVA=="> - <serialNumber>STMAeg==</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAklFMRIwEAYDVQQKEwlCYWx0aW1vcmUxEzARBgNVBAsTCkN5YmVyVHJ1c3QxIjAgBgNVBAMTGUJhbHRpbW9yZSBDeWJlclRydXN0IFJvb3Q="> - <serialNumber>Byd5cg==</serialNumber> - </certItem> - <certItem issuerName="MIG1MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOzA5BgNVBAsTMlRlcm1zIG9mIHVzZSBhdCBodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhIChjKTEwMS8wLQYDVQQDEyZWZXJpU2lnbiBDbGFzcyAzIFNlY3VyZSBTZXJ2ZXIgQ0EgLSBHMw=="> - <serialNumber>NvEJoRYL2yvAZrAjbDIipQ==</serialNumber> - </certItem> - <certItem issuerName="MIGCMQswCQYDVQQGEwJVUzEeMBwGA1UECxMVd3d3LnhyYW1wc2VjdXJpdHkuY29tMSQwIgYDVQQKExtYUmFtcCBTZWN1cml0eSBTZXJ2aWNlcyBJbmMxLTArBgNVBAMTJFhSYW1wIEdsb2JhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eQ=="> - <serialNumber>QDi5rw==</serialNumber> - </certItem> - <certItem issuerName="MFwxCzAJBgNVBAYTAkJFMRUwEwYDVQQLEwxUcnVzdGVkIFJvb3QxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExGzAZBgNVBAMTElRydXN0ZWQgUm9vdCBDQSBHMg=="> - <serialNumber>bAOrKSMsmA0MLJyAJ5BRsUM=</serialNumber> - </certItem> - <certItem issuerName="MEgxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdTZWN1cmVUcnVzdCBDb3Jwb3JhdGlvbjEXMBUGA1UEAxMOU2VjdXJlVHJ1c3QgQ0E="> - <serialNumber>MABJTA==</serialNumber> - </certItem> - <certItem issuerName="MIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwOA=="> - <serialNumber>AklaZYwhC9k=</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAklFMRIwEAYDVQQKEwlCYWx0aW1vcmUxEzARBgNVBAsTCkN5YmVyVHJ1c3QxIjAgBgNVBAMTGUJhbHRpbW9yZSBDeWJlclRydXN0IFJvb3Q="> - <serialNumber>BydCwg==</serialNumber> - </certItem> - <certItem issuerName="MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQDExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMw=="> - <serialNumber>BOc11keA9WJ9R20XQY8hO7yi</serialNumber> - </certItem> - <certItem issuerName="MIGLMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMRUwEwYDVQQLEwxNaWNyb3NvZnQgSVQxHjAcBgNVBAMTFU1pY3Jvc29mdCBJVCBTU0wgU0hBMg=="> - <serialNumber>WgAFElbyxxPA8BdM4gABAAUSVg==</serialNumber> - </certItem> - <certItem issuerName="MFIxCzAJBgNVBAYTAk5MMRkwFwYDVQQKDBBEaWdpZGVudGl0eSBCLlYuMSgwJgYDVQQDDB9EaWdpZGVudGl0eSBPcmdhbmlzYXRpZSBDQSAtIEcy"> - <serialNumber>Cw==</serialNumber> - </certItem> - <certItem issuerName="MD8xJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjEXMBUGA1UEAxMORFNUIFJvb3QgQ0EgWDM="> - <serialNumber>ANUANvVYN7xqAISA9rvJPzQ=</serialNumber> - </certItem> - <certItem issuerName="MGcxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGlnaXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEeMBwGA1UEAxMVU3dpc3Njb20gUm9vdCBFViBDQSAy"> - <serialNumber>QFLH3Zrq+I5WQ6TlWzfUxA==</serialNumber> - </certItem> - <certItem issuerName="MGYxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMR0wGwYDVQQLExREb21haW4gVmFsaWRhdGVkIFNTTDEgMB4GA1UEAxMXR2VvVHJ1c3QgRFYgU1NMIENBIC0gRzM="> - <serialNumber>XLhHIg7vP+tWfRqvuKeAxw==</serialNumber> - </certItem> - <certItem issuerName="MIGkMQswCQYDVQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5UcnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxHzAdBgNVBAMMFlRydXN0Q29yIFJvb3RDZXJ0IENBLTE="> - <serialNumber>AOVojQRgyPca</serialNumber> - </certItem> - <certItem issuerName="MHExKDAmBgNVBAMTH0dsb2JhbFNpZ24gUm9vdFNpZ24gUGFydG5lcnMgQ0ExHTAbBgNVBAsTFFJvb3RTaWduIFBhcnRuZXJzIENBMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMQswCQYDVQQGEwJCRQ=="> - <serialNumber>BAAAAAABJQdAjik=</serialNumber> - </certItem> - <certItem issuerName="MEExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwx0aGF3dGUsIEluYy4xGzAZBgNVBAMTEnRoYXd0ZSBTU0wgQ0EgLSBHMg=="> - <serialNumber>JpUvYJyWjdGmeoH7YcYunw==</serialNumber> - </certItem> - <certItem issuerName="MIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp"> - <serialNumber>TA6EVg==</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAklFMRIwEAYDVQQKEwlCYWx0aW1vcmUxEzARBgNVBAsTCkN5YmVyVHJ1c3QxIjAgBgNVBAMTGUJhbHRpbW9yZSBDeWJlclRydXN0IFJvb3Q="> - <serialNumber>ByeekA==</serialNumber> - </certItem> - <certItem issuerName="MHExKDAmBgNVBAMTH0dsb2JhbFNpZ24gUm9vdFNpZ24gUGFydG5lcnMgQ0ExHTAbBgNVBAsTFFJvb3RTaWduIFBhcnRuZXJzIENBMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMQswCQYDVQQGEwJCRQ=="> - <serialNumber>BAAAAAABHJRKNmk=</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAkRFMRMwEQYDVQQKEwpERk4tVmVyZWluMRAwDgYDVQQLEwdERk4tUEtJMSQwIgYDVQQDExtERk4tVmVyZWluIFBDQSBHbG9iYWwgLSBHMDE="> - <serialNumber>CeagHQ==</serialNumber> - </certItem> - <certItem issuerName="MCgxCzAJBgNVBAYTAkJFMRkwFwYDVQQDExBCZWxnaXVtIFJvb3QgQ0Ey"> - <serialNumber>RH7WhshwXRK6f0VfOfjXgQ==</serialNumber> - </certItem> - <certItem issuerName="MEwxIDAeBgNVBAsTF0dsb2JhbFNpZ24gUm9vdCBDQSAtIFIzMRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu"> - <serialNumber>BAAAAAABJQcQQN0=</serialNumber> - </certItem> - <certItem issuerName="MIG8MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOzA5BgNVBAsTMlRlcm1zIG9mIHVzZSBhdCBodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhIChjKTEwMTYwNAYDVQQDEy1WZXJpU2lnbiBDbGFzcyAzIEludGVybmF0aW9uYWwgU2VydmVyIENBIC0gRzM="> - <serialNumber>OnvXX72mvUI2Id/NMzegmg==</serialNumber> - </certItem> - <certItem issuerName="MEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9iYWwgQ0E="> - <serialNumber>AjqK</serialNumber> - </certItem> - <certItem issuerName="MFwxCzAJBgNVBAYTAkJFMRUwEwYDVQQLEwxUcnVzdGVkIFJvb3QxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExGzAZBgNVBAMTElRydXN0ZWQgUm9vdCBDQSBHMg=="> - <serialNumber>DAk9hy8DhHSo+aQetvPB/fY=</serialNumber> - </certItem> - <certItem issuerName="MD0xCzAJBgNVBAYTAkZSMREwDwYDVQQKEwhDZXJ0cGx1czEbMBkGA1UEAxMSQ2xhc3MgMiBQcmltYXJ5IENB"> - <serialNumber>ESD9YhzIEOwiOT7Nwip+E1KI</serialNumber> - </certItem> - <certItem issuerName="MEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDI="> - <serialNumber>BXA=</serialNumber> - </certItem> - <certItem issuerName="MIG8MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOzA5BgNVBAsTMlRlcm1zIG9mIHVzZSBhdCBodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhIChjKTEwMTYwNAYDVQQDEy1WZXJpU2lnbiBDbGFzcyAzIEludGVybmF0aW9uYWwgU2VydmVyIENBIC0gRzM="> - <serialNumber>By7fBTreouRwX/qrpgSUsg==</serialNumber> - </certItem> - <certItem issuerName="MEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDM="> - <serialNumber>CSY=</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEnMCUGA1UEAxMeU3ltYW50ZWMgV2ViIFBLSSBFQ0MgUm9vdCAtIEcx"> - <serialNumber>LJ8wKbrQXgT8VExZ6vEfWA==</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAkRFMRMwEQYDVQQKEwpERk4tVmVyZWluMRAwDgYDVQQLEwdERk4tUEtJMSQwIgYDVQQDExtERk4tVmVyZWluIFBDQSBHbG9iYWwgLSBHMDE="> - <serialNumber>F5Bg/C8eXg==</serialNumber> - </certItem> - <certItem issuerName="MIG8MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOzA5BgNVBAsTMlRlcm1zIG9mIHVzZSBhdCBodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhIChjKTEwMTYwNAYDVQQDEy1WZXJpU2lnbiBDbGFzcyAzIEludGVybmF0aW9uYWwgU2VydmVyIENBIC0gRzM="> - <serialNumber>J2La+q+JOURNWkX60OP2lQ==</serialNumber> - </certItem> - <certItem issuerName="MEgxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdTZWN1cmVUcnVzdCBDb3Jwb3JhdGlvbjEXMBUGA1UEAxMOU2VjdXJlVHJ1c3QgQ0E="> - <serialNumber>R/j2qA==</serialNumber> - </certItem> - <certItem issuerName="MEUxCzAJBgNVBAYTAkNIMRUwEwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2lnbiBHb2xkIENBIC0gRzI="> - <serialNumber>AIQ8dLGqNIaxxMeg31W16Q==</serialNumber> - </certItem> - <certItem issuerName="MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQDExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMw=="> - <serialNumber>A/7DHCczBnP5qUVh0jF2pvwB</serialNumber> - </certItem> - <certItem issuerName="MIGVMQswCQYDVQQGEwJHUjFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIwMTE="> - <serialNumber>GN2Hrh9Ltmw=</serialNumber> - </certItem> - <certItem issuerName="MH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZpcm1hIFNBIENJRiBBODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3JnMSIwIAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290"> - <serialNumber>DA==</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAkRFMRMwEQYDVQQKEwpERk4tVmVyZWluMRAwDgYDVQQLEwdERk4tUEtJMSQwIgYDVQQDExtERk4tVmVyZWluIFBDQSBHbG9iYWwgLSBHMDE="> - <serialNumber>CdWFNw==</serialNumber> - </certItem> - <certItem issuerName="MEwxIDAeBgNVBAsTF0dsb2JhbFNpZ24gUm9vdCBDQSAtIFIyMRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu"> - <serialNumber>BAAAAAABElatX7I=</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEnMCUGA1UEAxMeU3ltYW50ZWMgV2ViIFBLSSBSU0EgUm9vdCAtIEcx"> - <serialNumber>X4C5SJIG0BDeJvpQq4ngCw==</serialNumber> - </certItem> - <certItem issuerName="MD0xCzAJBgNVBAYTAkZSMREwDwYDVQQKEwhDZXJ0cGx1czEbMBkGA1UEAxMSQ2xhc3MgMiBQcmltYXJ5IENB"> - <serialNumber>ESC8DawWRiAyEMd38UXbfgPR</serialNumber> - </certItem> - <certItem issuerName="MIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwOA=="> - <serialNumber>Ah69dEvrzT4=</serialNumber> - </certItem> - <certItem issuerName="MFYxCzAJBgNVBAYTAkpQMQ8wDQYDVQQKEwZKSVBERUMxGjAYBgNVBAsTEUpDQU4gU3ViIFJvb3QgQ0EwMRowGAYDVQQDExFKQ0FOIFN1YiBSb290IENBMA=="> - <serialNumber>BAAAAAABK84ykc0=</serialNumber> - </certItem> - <certItem issuerName="MHExKDAmBgNVBAMTH0dsb2JhbFNpZ24gUm9vdFNpZ24gUGFydG5lcnMgQ0ExHTAbBgNVBAsTFFJvb3RTaWduIFBhcnRuZXJzIENBMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMQswCQYDVQQGEwJCRQ=="> - <serialNumber>BAAAAAABHkSHki0=</serialNumber> - </certItem> - <certItem issuerName="MGoxCzAJBgNVBAYTAk5MMR4wHAYDVQQKDBVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xOzA5BgNVBAMMMlN0YWF0IGRlciBOZWRlcmxhbmRlbiBPcmdhbmlzYXRpZSBTZXJ2aWNlcyBDQSAtIEcz"> - <serialNumber>e9JTGBe45yw=</serialNumber> - </certItem> - <certItem issuerName="MIGVMQswCQYDVQQGEwJHUjFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIwMTE="> - <serialNumber>AQAAAAI=</serialNumber> - </certItem> - <certItem issuerName="MFwxCzAJBgNVBAYTAkJFMRUwEwYDVQQLEwxUcnVzdGVkIFJvb3QxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExGzAZBgNVBAMTElRydXN0ZWQgUm9vdCBDQSBHMg=="> - <serialNumber>O2S99lVUxErLSk56GvWRv+E=</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEnMCUGA1UEAxMeU3ltYW50ZWMgV2ViIFBLSSBSU0EgUm9vdCAtIEcx"> - <serialNumber>ODTGURr0vY14WkIt15hHrg==</serialNumber> - </certItem> - <certItem issuerName="MIG1MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOzA5BgNVBAsTMlRlcm1zIG9mIHVzZSBhdCBodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhIChjKTEwMS8wLQYDVQQDEyZWZXJpU2lnbiBDbGFzcyAzIFNlY3VyZSBTZXJ2ZXIgQ0EgLSBHMw=="> - <serialNumber>OqQ2rV0ISTc308Z/oQgzFw==</serialNumber> - </certItem> - <certItem issuerName="MIGuMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xKTAnBgNVBAMTIENoYW1iZXJzIG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4"> - <serialNumber>RXJFI0h6EJY=</serialNumber> - </certItem> - <certItem issuerName="MIG9MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5"> - <serialNumber>Aw1SPC56593ZCZ9vCNHKwQ==</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAklFMRIwEAYDVQQKEwlCYWx0aW1vcmUxEzARBgNVBAsTCkN5YmVyVHJ1c3QxIjAgBgNVBAMTGUJhbHRpbW9yZSBDeWJlclRydXN0IFJvb3Q="> - <serialNumber>BycpYA==</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEnMCUGA1UEAxMeU3ltYW50ZWMgV2ViIFBLSSBSU0EgUm9vdCAtIEcx"> - <serialNumber>FK+rVRFA0o0PnW+X6V60gQ==</serialNumber> - </certItem> - <certItem issuerName="MF8xCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eQ=="> - <serialNumber>RMgdRGEBv0KzFCjgGFp0Hg==</serialNumber> - </certItem> - <certItem issuerName="MGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGlnaXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAx"> - <serialNumber>JD1wxDd8IgmiqX7MyPPg1g==</serialNumber> - </certItem> - <certItem issuerName="MDsxGDAWBgNVBAoTD0N5YmVydHJ1c3QsIEluYzEfMB0GA1UEAxMWQ3liZXJ0cnVzdCBHbG9iYWwgUm9vdA=="> - <serialNumber>BAAAAAABQaHhNLo=</serialNumber> - </certItem> - <certItem issuerName="MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQDExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMw=="> - <serialNumber>AwBGo0Zmp6KRryAguuMvXATI</serialNumber> - </certItem> - <certItem issuerName="MHIxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJUWDEQMA4GA1UEBxMHSG91c3RvbjEVMBMGA1UEChMMY1BhbmVsLCBJbmMuMS0wKwYDVQQDEyRjUGFuZWwsIEluYy4gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHk="> - <serialNumber>AJk3QFH13eHUHHVnsvwS0Vo=</serialNumber> - </certItem> - <certItem issuerName="MG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3Q="> - <serialNumber>U3t2Vk8pfxTcaUPpIq0seQ==</serialNumber> - </certItem> - <certItem issuerName="MEQxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMR0wGwYDVQQDExRHZW9UcnVzdCBTU0wgQ0EgLSBHMw=="> - <serialNumber>bx/XHJqcwxDOptxJ2lh5vw==</serialNumber> - </certItem> - <certItem issuerName="MHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlBUyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRyZSBSb290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWU="> - <serialNumber>LU4d0t7PAsZNgJGZcb+o/w==</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEnMCUGA1UEAxMeU3ltYW50ZWMgV2ViIFBLSSBFQ0MgUm9vdCAtIEcx"> - <serialNumber>c0ENPRDbRozjU83garZrdA==</serialNumber> - </certItem> - <certItem issuerName="MH4xCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEvMC0GA1UEAxMmU3ltYW50ZWMgQ2xhc3MgMyBTZWN1cmUgU2VydmVyIENBIC0gRzQ="> - <serialNumber>LnfcUaXG/pxV2CpXM5+YSg==</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEnMCUGA1UEAxMeU3ltYW50ZWMgV2ViIFBLSSBFQ0MgUm9vdCAtIEcx"> - <serialNumber>EgtJ1f+/tZwlGfg0Uu7XCQ==</serialNumber> - </certItem> - <certItem issuerName="MFwxCzAJBgNVBAYTAkJFMRUwEwYDVQQLEwxUcnVzdGVkIFJvb3QxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExGzAZBgNVBAMTElRydXN0ZWQgUm9vdCBDQSBHMg=="> - <serialNumber>sPNcCSE9Nkg3jy5IN1xe2Q==</serialNumber> - </certItem> - <certItem issuerName="MF8xCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRQwEgYDVQQLEwtQYXJ0bmVycyBDQTEfMB0GA1UEAxMWR2xvYmFsU2lnbiBQYXJ0bmVycyBDQQ=="> - <serialNumber>BAAAAAABCfhiO+s=</serialNumber> - </certItem> - <certItem issuerName="MEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9iYWwgQ0E="> - <serialNumber>Ajp+</serialNumber> - </certItem> - <certItem issuerName="MIG9MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5"> - <serialNumber>RbG+tfPUe/vBRfTZF54i8g==</serialNumber> - </certItem> - <certItem issuerName="MIGwMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNRW50cnVzdCwgSW5jLjE5MDcGA1UECxMwd3d3LmVudHJ1c3QubmV0L0NQUyBpcyBpbmNvcnBvcmF0ZWQgYnkgcmVmZXJlbmNlMR8wHQYDVQQLExYoYykgMjAwNiBFbnRydXN0LCBJbmMuMS0wKwYDVQQDEyRFbnRydXN0IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHk="> - <serialNumber>cFbYT3bxd1sAAAAAUdNX8A==</serialNumber> - </certItem> - <certItem issuerName="MGgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMR0wGwYDVQQLExREb21haW4gVmFsaWRhdGVkIFNTTDEiMCAGA1UEAxMZR2VvVHJ1c3QgRFYgU1NMIFNIQTI1NiBDQQ=="> - <serialNumber>ZgwfEqZnBsUNvNuZ77FbQA==</serialNumber> - </certItem> - <certItem issuerName="MFwxCzAJBgNVBAYTAkJFMRUwEwYDVQQLEwxUcnVzdGVkIFJvb3QxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExGzAZBgNVBAMTElRydXN0ZWQgUm9vdCBDQSBHMg=="> - <serialNumber>Iqpyf/YoGgvHc8HiDAxAI8o=</serialNumber> - </certItem> - <certItem issuerName="MGkxCzAJBgNVBAYTAk5MMR4wHAYDVQQKDBVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xOjA4BgNVBAMMMVN0YWF0IGRlciBOZWRlcmxhbmRlbiBPcmdhbmlzYXRpZSBQZXJzb29uIENBIC0gRzM="> - <serialNumber>f43O9TualR8=</serialNumber> - </certItem> - <certItem issuerName="MIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMw=="> - <serialNumber>OgxXyntHYBXnPAHDxY0OXg==</serialNumber> - </certItem> - <certItem issuerName="MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQDExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMw=="> - <serialNumber>BOIIipysxAz5xHIMmFRvYchY</serialNumber> - </certItem> - <certItem issuerName="MIGVMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTEdMBsGA1UEAxMUVVROLVVTRVJGaXJzdC1PYmplY3Q="> - <serialNumber>Jq6jgeApiT9O4W2Tx/NTRQ==</serialNumber> - </certItem> - <certItem issuerName="MEUxCzAJBgNVBAYTAkNIMRUwEwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2lnbiBHb2xkIENBIC0gRzI="> - <serialNumber>SeEzbpTltqUtqW7UiuJ2</serialNumber> - </certItem> - <certItem issuerName="MDQxCzAJBgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25h"> - <serialNumber>Iw==</serialNumber> - </certItem> - <certItem issuerName="MEgxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdTZWN1cmVUcnVzdCBDb3Jwb3JhdGlvbjEXMBUGA1UEAxMOU2VjdXJlVHJ1c3QgQ0E="> - <serialNumber>ANygrItIJ2rcKlyS3Lue07U=</serialNumber> - </certItem> - <certItem issuerName="MHExCzAJBgNVBAYTAkRFMRwwGgYDVQQKExNEZXV0c2NoZSBUZWxla29tIEFHMR8wHQYDVQQLExZULVRlbGVTZWMgVHJ1c3QgQ2VudGVyMSMwIQYDVQQDExpEZXV0c2NoZSBUZWxla29tIFJvb3QgQ0EgMg=="> - <serialNumber>ARU=</serialNumber> - </certItem> - <certItem issuerName="MFkxCzAJBgNVBAYTAk5MMR4wHAYDVQQKExVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xKjAoBgNVBAMTIVN0YWF0IGRlciBOZWRlcmxhbmRlbiBPdmVyaGVpZCBDQQ=="> - <serialNumber>ATFpsA==</serialNumber> - </certItem> - <certItem issuerName="MFwxCzAJBgNVBAYTAkJFMRUwEwYDVQQLEwxUcnVzdGVkIFJvb3QxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExGzAZBgNVBAMTElRydXN0ZWQgUm9vdCBDQSBHMg=="> - <serialNumber>IHj3eiEK3K1Xrpu1uvtBuvE=</serialNumber> - </certItem> - <certItem issuerName="MEQxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMR0wGwYDVQQDExRHZW9UcnVzdCBTU0wgQ0EgLSBHMw=="> - <serialNumber>cpqpXVWPk5AXzGw+zNIcBw==</serialNumber> - </certItem> - <certItem issuerName="MD0xCzAJBgNVBAYTAkZSMREwDwYDVQQKEwhDZXJ0cGx1czEbMBkGA1UEAxMSQ2xhc3MgMiBQcmltYXJ5IENB"> - <serialNumber>ESCEUbthDurBjJw0/h/FfuNY</serialNumber> - </certItem> - <certItem issuerName="MGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGlnaXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAx"> - <serialNumber>AI7cApIcPA3cfSpQMf40onQ=</serialNumber> - </certItem> - <certItem issuerName="MDsxGDAWBgNVBAoTD0N5YmVydHJ1c3QsIEluYzEfMB0GA1UEAxMWQ3liZXJ0cnVzdCBHbG9iYWwgUm9vdA=="> - <serialNumber>BAAAAAABQaHhOT4=</serialNumber> - </certItem> - <certItem issuerName="MCgxCzAJBgNVBAYTAkJFMRkwFwYDVQQDExBCZWxnaXVtIFJvb3QgQ0Ey"> - <serialNumber>VUtahOwvvmJFwlvmGDZP5w==</serialNumber> - </certItem> - <certItem issuerName="MIGVMQswCQYDVQQGEwJHUjFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIwMTE="> - <serialNumber>GN2Hrh9Ltm0=</serialNumber> - </certItem> - <certItem issuerName="MFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxTaWduIFJvb3QgQ0E="> - <serialNumber>BAAAAAABFUtaxac=</serialNumber> - </certItem> - <certItem issuerName="MIG9MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5"> - <serialNumber>MWzraR3LLhU9m/qKEhvVLQ==</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEnMCUGA1UEAxMeU3ltYW50ZWMgV2ViIFBLSSBSU0EgUm9vdCAtIEcx"> - <serialNumber>KvQ5AzK6tQy8eBy7NAD/lQ==</serialNumber> - </certItem> - <certItem issuerName="MEcxCzAJBgNVBAYTAkNIMRUwEwYDVQQKEwxTd2lzc1NpZ24gQUcxITAfBgNVBAMTGFN3aXNzU2lnbiBTaWx2ZXIgQ0EgLSBHMg=="> - <serialNumber>APiyCXmwAUq+95DYa3DmGw==</serialNumber> - </certItem> - <certItem issuerName="MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQDExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMw=="> - <serialNumber>Ax6Jm7ajV49tqHgf9nYnzRCI</serialNumber> - </certItem> - <certItem issuerName="MH4xCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEvMC0GA1UEAxMmU3ltYW50ZWMgQ2xhc3MgMyBTZWN1cmUgU2VydmVyIENBIC0gRzQ="> - <serialNumber>AygWP2Fgd2T+iLbmAlKT6g==</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEnMCUGA1UEAxMeU3ltYW50ZWMgV2ViIFBLSSBFQ0MgUm9vdCAtIEcx"> - <serialNumber>dUIqmrcgq/261bRbo7fM1g==</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEnMCUGA1UEAxMeU3ltYW50ZWMgV2ViIFBLSSBSU0EgUm9vdCAtIEcx"> - <serialNumber>BWuckD4dPHZYW5ThBsl+aQ==</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAklFMRIwEAYDVQQKEwlCYWx0aW1vcmUxEzARBgNVBAsTCkN5YmVyVHJ1c3QxIjAgBgNVBAMTGUJhbHRpbW9yZSBDeWJlclRydXN0IFJvb3Q="> - <serialNumber>BydSYg==</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAklFMRIwEAYDVQQKEwlCYWx0aW1vcmUxEzARBgNVBAsTCkN5YmVyVHJ1c3QxIjAgBgNVBAMTGUJhbHRpbW9yZSBDeWJlclRydXN0IFJvb3Q="> - <serialNumber>ByfHkw==</serialNumber> - </certItem> - <certItem issuerName="MIGVMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTEdMBsGA1UEAxMUVVROLVVTRVJGaXJzdC1PYmplY3Q="> - <serialNumber>CMNfzETd7XxesS9FOUj9Mg==</serialNumber> - </certItem> - <certItem issuerName="MEQxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMR0wGwYDVQQDExRHZW9UcnVzdCBTU0wgQ0EgLSBHMg=="> - <serialNumber>VfTSum25nb65YPlpuhJAvg==</serialNumber> - </certItem> - <certItem issuerName="MHExCzAJBgNVBAYTAkRFMRwwGgYDVQQKExNEZXV0c2NoZSBUZWxla29tIEFHMR8wHQYDVQQLExZULVRlbGVTZWMgVHJ1c3QgQ2VudGVyMSMwIQYDVQQDExpEZXV0c2NoZSBUZWxla29tIFJvb3QgQ0EgMg=="> - <serialNumber>RqFXxGPuA18=</serialNumber> - </certItem> - <certItem issuerName="MGYxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMR0wGwYDVQQLExREb21haW4gVmFsaWRhdGVkIFNTTDEgMB4GA1UEAxMXR2VvVHJ1c3QgRFYgU1NMIENBIC0gRzM="> - <serialNumber>UW3oKZKTDsrPy/rfwmGNaQ==</serialNumber> - </certItem> - <certItem issuerName="MF8xCzAJBgNVBAYTAlRXMRIwEAYDVQQKDAlUQUlXQU4tQ0ExEDAOBgNVBAsMB1Jvb3QgQ0ExKjAoBgNVBAMMIVRXQ0EgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eQ=="> - <serialNumber>QAEy3RIAAAAAAAAMweH5dw==</serialNumber> - </certItem> - <certItem issuerName="MH4xCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEvMC0GA1UEAxMmU3ltYW50ZWMgQ2xhc3MgMyBTZWN1cmUgU2VydmVyIENBIC0gRzQ="> - <serialNumber>E77H6yvyFQjO0PcN3x0H+Q==</serialNumber> - </certItem> - <certItem issuerName="MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQDExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMw=="> - <serialNumber>A3WVy2V+2VFkWtMvA6HFwnhq</serialNumber> - </certItem> - <certItem issuerName="MEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDM="> - <serialNumber>B+U=</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEnMCUGA1UEAxMeU3ltYW50ZWMgV2ViIFBLSSBSU0EgUm9vdCAtIEcx"> - <serialNumber>KRfQOuBdOSpEmAxSpDZGZg==</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAkRFMRMwEQYDVQQKEwpERk4tVmVyZWluMRAwDgYDVQQLEwdERk4tUEtJMSQwIgYDVQQDExtERk4tVmVyZWluIFBDQSBHbG9iYWwgLSBHMDE="> - <serialNumber>Cbssdw==</serialNumber> - </certItem> - <certItem issuerName="MIG8MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOzA5BgNVBAsTMlRlcm1zIG9mIHVzZSBhdCBodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhIChjKTEwMTYwNAYDVQQDEy1WZXJpU2lnbiBDbGFzcyAzIEludGVybmF0aW9uYWwgU2VydmVyIENBIC0gRzM="> - <serialNumber>JV/LVzSKI/wsDgg3UuZHlA==</serialNumber> - </certItem> - <certItem issuerName="MIGVMQswCQYDVQQGEwJHUjFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIwMTE="> - <serialNumber>GN2Hrh9LtnA=</serialNumber> - </certItem> - <certItem issuerName="MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQDExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMw=="> - <serialNumber>BOncXh7IZp1SNydhtUdyh2O2</serialNumber> - </certItem> - <certItem issuerName="MDMxCzAJBgNVBAYTAlBUMQ0wCwYDVQQKDARTQ0VFMRUwEwYDVQQDDAxFQ1JhaXpFc3RhZG8="> - <serialNumber>cx0HrIEQg8JHWTP7DzOxSQ==</serialNumber> - </certItem> - <certItem issuerName="MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQDExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMw=="> - <serialNumber>A8aDg1/IA4O8gjMPZHVqPI+w</serialNumber> - </certItem> - <certItem issuerName="MDQxCzAJBgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25h"> - <serialNumber>Fw==</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEnMCUGA1UEAxMeU3ltYW50ZWMgV2ViIFBLSSBFQ0MgUm9vdCAtIEcx"> - <serialNumber>Gz4uHrL2usrTZrPCHeuF5g==</serialNumber> - </certItem> - <certItem issuerName="MIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA2IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHNQ=="> - <serialNumber>UWMOvf4tj/x5cQN2PXVSww==</serialNumber> - </certItem> - <certItem issuerName="MHIxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJUWDEQMA4GA1UEBxMHSG91c3RvbjEVMBMGA1UEChMMY1BhbmVsLCBJbmMuMS0wKwYDVQQDEyRjUGFuZWwsIEluYy4gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHk="> - <serialNumber>NlLRZJFLco/An3cLAGjGgQ==</serialNumber> - </certItem> - <certItem issuerName="MFwxCzAJBgNVBAYTAkJFMRUwEwYDVQQLEwxUcnVzdGVkIFJvb3QxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExGzAZBgNVBAMTElRydXN0ZWQgUm9vdCBDQSBHMg=="> - <serialNumber>e/fIfg2Dj2tkYIWVu2r82Cc=</serialNumber> - </certItem> - <certItem issuerName="MH4xCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEvMC0GA1UEAxMmU3ltYW50ZWMgQ2xhc3MgMyBTZWN1cmUgU2VydmVyIENBIC0gRzQ="> - <serialNumber>UMUwXwT1Z4juyQ/CNTf4mw==</serialNumber> - </certItem> - <certItem issuerName="MH4xCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEvMC0GA1UEAxMmU3ltYW50ZWMgQ2xhc3MgMyBTZWN1cmUgU2VydmVyIENBIC0gRzQ="> - <serialNumber>d8AtKymQwkOPDBj+hjPzFg==</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEnMCUGA1UEAxMeU3ltYW50ZWMgV2ViIFBLSSBSU0EgUm9vdCAtIEcx"> - <serialNumber>fa9agGguMHfBorMTXXMd9g==</serialNumber> - </certItem> - <certItem issuerName="MGMxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwx0aGF3dGUsIEluYy4xHTAbBgNVBAsTFERvbWFpbiBWYWxpZGF0ZWQgU1NMMR4wHAYDVQQDExV0aGF3dGUgRFYgU1NMIENBIC0gRzI="> - <serialNumber>IIxFSyNM6mWtCgTG0IL3Og==</serialNumber> - </certItem> - <certItem issuerName="MEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9iYWwgQ0E="> - <serialNumber>Ajp/</serialNumber> - </certItem> - <certItem issuerName="MFwxCzAJBgNVBAYTAkJFMRUwEwYDVQQLEwxUcnVzdGVkIFJvb3QxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExGzAZBgNVBAMTElRydXN0ZWQgUm9vdCBDQSBHMg=="> - <serialNumber>RVWTeb5EKqE7cy7MUD2oJ3M=</serialNumber> - </certItem> - <certItem issuerName="MIGQMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01PRE8gQ0EgTGltaXRlZDE2MDQGA1UEAxMtQ09NT0RPIFJTQSBEb21haW4gVmFsaWRhdGlvbiBTZWN1cmUgU2VydmVyIENB"> - <serialNumber>UoRGnb96CUDTxIqVry6LBg==</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAkRFMRMwEQYDVQQKEwpERk4tVmVyZWluMRAwDgYDVQQLEwdERk4tUEtJMSQwIgYDVQQDExtERk4tVmVyZWluIFBDQSBHbG9iYWwgLSBHMDE="> - <serialNumber>F5Bg+EziQQ==</serialNumber> - </certItem> - <certItem issuerName="MGExCzAJBgNVBAYTAk5MMR4wHAYDVQQKDBVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xMjAwBgNVBAMMKVN0YWF0IGRlciBOZWRlcmxhbmRlbiBPcmdhbmlzYXRpZSBDQSAtIEcy"> - <serialNumber>ATE0vw==</serialNumber> - </certItem> - <certItem issuerName="MIGkMQswCQYDVQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5UcnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxHzAdBgNVBAMMFlRydXN0Q29yIFJvb3RDZXJ0IENBLTI="> - <serialNumber>APB/jQRgyPca</serialNumber> - </certItem> - <certItem issuerName="MEoxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdTZWN1cmVUcnVzdCBDb3Jwb3JhdGlvbjEZMBcGA1UEAxMQU2VjdXJlIEdsb2JhbCBDQQ=="> - <serialNumber>TXxtAQ==</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAkRFMRMwEQYDVQQKEwpERk4tVmVyZWluMRAwDgYDVQQLEwdERk4tUEtJMSQwIgYDVQQDExtERk4tVmVyZWluIFBDQSBHbG9iYWwgLSBHMDE="> - <serialNumber>CskruA==</serialNumber> - </certItem> - <certItem issuerName="MDQxCzAJBgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25h"> - <serialNumber>Ig==</serialNumber> - </certItem> - <certItem issuerName="MHsxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEsMCoGA1UEAxMjU3ltYW50ZWMgQ2xhc3MgMyBFQ0MgMjU2IGJpdCBTU0wgQ0E="> - <serialNumber>U3SgRR3J+D6575WuCxuXeQ==</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAkRFMRMwEQYDVQQKEwpERk4tVmVyZWluMRAwDgYDVQQLEwdERk4tUEtJMSQwIgYDVQQDExtERk4tVmVyZWluIFBDQSBHbG9iYWwgLSBHMDE="> - <serialNumber>Cd/dug==</serialNumber> - </certItem> - <certItem issuerName="MIGRMQswCQYDVQQGEwJERTEQMA4GA1UECgwHU2llbWVuczERMA8GA1UEBRMIWlpaWlpaVjAxOjA4BgNVBAsMMUNvcHlyaWdodCAoQykgU2llbWVucyBBRyAyMDExIEFsbCBSaWdodHMgUmVzZXJ2ZWQxITAfBgNVBAMMGFNpZW1lbnMgSW50ZXJuZXQgQ0EgVjEuMA=="> - <serialNumber>WW8OCQ==</serialNumber> - </certItem> - <certItem issuerName="MEQxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMR0wGwYDVQQDExRHZW9UcnVzdCBTU0wgQ0EgLSBHMg=="> - <serialNumber>SdegFrLaFTCsoMAW5ED+zA==</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAkRFMRMwEQYDVQQKEwpERk4tVmVyZWluMRAwDgYDVQQLEwdERk4tUEtJMSQwIgYDVQQDExtERk4tVmVyZWluIFBDQSBHbG9iYWwgLSBHMDE="> - <serialNumber>EAdmaA==</serialNumber> - </certItem> - <certItem issuerName="MD8xJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjEXMBUGA1UEAxMORFNUIFJvb3QgQ0EgWDM="> - <serialNumber>CgFBQQAAATjtdPY5AAAAAg==</serialNumber> - </certItem> - <certItem issuerName="MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQDExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMw=="> - <serialNumber>BLlQHJ611eOZuedFrFgVAfAs</serialNumber> - </certItem> - <certItem issuerName="MDsxCzAJBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTQ=="> - <serialNumber>EQ==</serialNumber> - </certItem> - <certItem issuerName="MHExKDAmBgNVBAMTH0dsb2JhbFNpZ24gUm9vdFNpZ24gUGFydG5lcnMgQ0ExHTAbBgNVBAsTFFJvb3RTaWduIFBhcnRuZXJzIENBMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMQswCQYDVQQGEwJCRQ=="> - <serialNumber>BAAAAAABGMGjftY=</serialNumber> - </certItem> - <certItem issuerName="MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQDExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMw=="> - <serialNumber>A1V4dX0tTb1rdTZxdWcuZ7YR</serialNumber> - </certItem> - <certItem issuerName="MIGkMQswCQYDVQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5UcnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxHzAdBgNVBAMMFlRydXN0Q29yIFJvb3RDZXJ0IENBLTE="> - <serialNumber>AOVojQRgyPcY</serialNumber> - </certItem> - <certItem issuerName="MHExKDAmBgNVBAMTH0dsb2JhbFNpZ24gUm9vdFNpZ24gUGFydG5lcnMgQ0ExHTAbBgNVBAsTFFJvb3RTaWduIFBhcnRuZXJzIENBMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMQswCQYDVQQGEwJCRQ=="> - <serialNumber>BAAAAAABHkSHjz8=</serialNumber> - </certItem> - <certItem issuerName="MGMxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwx0aGF3dGUsIEluYy4xHTAbBgNVBAsTFERvbWFpbiBWYWxpZGF0ZWQgU1NMMR4wHAYDVQQDExV0aGF3dGUgRFYgU1NMIENBIC0gRzI="> - <serialNumber>BUrYjru5px1ym4QUN33TOQ==</serialNumber> - </certItem> - <certItem issuerName="MG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3Q="> - <serialNumber>RurwlgVMxeP6Zepun0LGZA==</serialNumber> - </certItem> - <certItem issuerName="MEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDM="> - <serialNumber>SurdtfsuPcXXDpY2LkBpYO6BT7o=</serialNumber> - </certItem> - <certItem issuerName="MD4xCzAJBgNVBAYTAlBMMRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBDQQ=="> - <serialNumber>ALxyZmb/WL/wAuUiPK5oK/g=</serialNumber> - </certItem> - <certItem issuerName="MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQDExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMw=="> - <serialNumber>AxW0+uDsfyCSfhECdsGGpVD8</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAklFMRIwEAYDVQQKEwlCYWx0aW1vcmUxEzARBgNVBAsTCkN5YmVyVHJ1c3QxIjAgBgNVBAMTGUJhbHRpbW9yZSBDeWJlclRydXN0IFJvb3Q="> - <serialNumber>BydIoA==</serialNumber> - </certItem> - <certItem issuerName="MHsxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazEyMDAGA1UEAxMpVmVyaVNpZ24gQ2xhc3MgMyBTU1AgSW50ZXJtZWRpYXRlIENBIC0gRzI="> - <serialNumber>dhjnNtYx6cojdAE55TgIBA==</serialNumber> - </certItem> - <certItem issuerName="MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQDExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMw=="> - <serialNumber>A9BRwOwbXRRhCe+kcmglgW3z</serialNumber> - </certItem> - <certItem issuerName="MEcxCzAJBgNVBAYTAkhLMRYwFAYDVQQKEw1Ib25na29uZyBQb3N0MSAwHgYDVQQDExdIb25na29uZyBQb3N0IFJvb3QgQ0EgMQ=="> - <serialNumber>BHk=</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEnMCUGA1UEAxMeU3ltYW50ZWMgV2ViIFBLSSBFQ0MgUm9vdCAtIEcx"> - <serialNumber>EYfoVrySx7V3OUqs4xKvgA==</serialNumber> - </certItem> - <certItem issuerName="MIGQMQswCQYDVQQGEwJHUjFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxOzA5BgNVBAMTMkFyaXN0b3RsZSBVbml2ZXJzaXR5IG9mIFRoZXNzYWxvbmlraSBDZW50cmFsIENBIFI0"> - <serialNumber>EqthLKdUgwI=</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAkZSMRMwEQYDVQQKEwpDZXJ0aW5vbWlzMRcwFQYDVQQLEw4wMDAyIDQzMzk5ODkwMzEdMBsGA1UEAxMUQ2VydGlub21pcyAtIFJvb3QgQ0E="> - <serialNumber>J8mznxvTvOR5p4Br3a3sm5j5iM0=</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEnMCUGA1UEAxMeU3ltYW50ZWMgV2ViIFBLSSBSU0EgUm9vdCAtIEcx"> - <serialNumber>a9HDb1beqQYmkvFH0qExcg==</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAklFMRIwEAYDVQQKEwlCYWx0aW1vcmUxEzARBgNVBAsTCkN5YmVyVHJ1c3QxIjAgBgNVBAMTGUJhbHRpbW9yZSBDeWJlclRydXN0IFJvb3Q="> - <serialNumber>BydKkg==</serialNumber> - </certItem> - <certItem issuerName="MIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp"> - <serialNumber>OGPFrg==</serialNumber> - </certItem> - <certItem issuerName="MEExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwx0aGF3dGUsIEluYy4xGzAZBgNVBAMTEnRoYXd0ZSBTU0wgQ0EgLSBHMg=="> - <serialNumber>FNISyWWTGi5Yco6fGh58/A==</serialNumber> - </certItem> - <certItem issuerName="MHExKDAmBgNVBAMTH0dsb2JhbFNpZ24gUm9vdFNpZ24gUGFydG5lcnMgQ0ExHTAbBgNVBAsTFFJvb3RTaWduIFBhcnRuZXJzIENBMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMQswCQYDVQQGEwJCRQ=="> - <serialNumber>BAAAAAABA/A35EU=</serialNumber> - </certItem> - <certItem issuerName="MIGCMQswCQYDVQQGEwJVUzEeMBwGA1UECxMVd3d3LnhyYW1wc2VjdXJpdHkuY29tMSQwIgYDVQQKExtYUmFtcCBTZWN1cml0eSBTZXJ2aWNlcyBJbmMxLTArBgNVBAMTJFhSYW1wIEdsb2JhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eQ=="> - <serialNumber>QZCrvA==</serialNumber> - </certItem> - <certItem issuerName="MEwxIDAeBgNVBAsTF0dsb2JhbFNpZ24gUm9vdCBDQSAtIFIyMRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu"> - <serialNumber>BAAAAAABEAuMoRs=</serialNumber> - </certItem> - <certItem issuerName="MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQDExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMw=="> - <serialNumber>A0BOaf9UbJxzqBudSyes/cEM</serialNumber> - </certItem> - <certItem issuerName="MDsxCzAJBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTQ=="> - <serialNumber>BQ==</serialNumber> - </certItem> - <certItem issuerName="MEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDM="> - <serialNumber>NTgf4iwIfeyJPIomw2dwSXEwtxQ=</serialNumber> - </certItem> - <certItem issuerName="MEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9iYWwgQ0E="> - <serialNumber>AjqL</serialNumber> - </certItem> - <certItem issuerName="MD0xCzAJBgNVBAYTAkZSMREwDwYDVQQKEwhDZXJ0cGx1czEbMBkGA1UEAxMSQ2xhc3MgMiBQcmltYXJ5IENB"> - <serialNumber>ESDu2nhlLPzfx+LYgjlYFP/k</serialNumber> - </certItem> - <certItem issuerName="MIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA2IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHNQ=="> - <serialNumber>buROL/l2GuXISv+/JVLkdA==</serialNumber> - </certItem> - <certItem issuerName="MGMxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwx0aGF3dGUsIEluYy4xHTAbBgNVBAsTFERvbWFpbiBWYWxpZGF0ZWQgU1NMMR4wHAYDVQQDExV0aGF3dGUgRFYgU1NMIENBIC0gRzI="> - <serialNumber>CqZgEvHAsnzkT//QV9KjXw==</serialNumber> - </certItem> - <certItem issuerName="MHMxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEUMBIGA1UEBxMLU2FudGEgQ2xhcmExGjAYBgNVBAoTEUludGVsIENvcnBvcmF0aW9uMSUwIwYDVQQDExxJbnRlbCBFeHRlcm5hbCBJc3N1aW5nIENBIDZC"> - <serialNumber>HwAABsvzDP+DIzUG6QAAAAAGyw==</serialNumber> - </certItem> - <certItem issuerName="MH4xCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEvMC0GA1UEAxMmU3ltYW50ZWMgQ2xhc3MgMyBTZWN1cmUgU2VydmVyIENBIC0gRzQ="> - <serialNumber>HZyLf+K70FKc+jomm8DiDw==</serialNumber> - </certItem> - <certItem issuerName="MDQxCzAJBgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25h"> - <serialNumber>Ew==</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEnMCUGA1UEAxMeU3ltYW50ZWMgV2ViIFBLSSBFQ0MgUm9vdCAtIEcx"> - <serialNumber>IARKrBjlKQLyVGA4X52L7w==</serialNumber> - </certItem> - <certItem issuerName="MFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxTaWduIFJvb3QgQ0E="> - <serialNumber>BAAAAAABKUXDqA8=</serialNumber> - </certItem> - <certItem issuerName="MH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5"> - <serialNumber>Qh/SnQ==</serialNumber> - </certItem> - <certItem issuerName="MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQDExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMw=="> - <serialNumber>BDV89QWZE9MJYlCpFQUv5Y2W</serialNumber> - </certItem> - <certItem issuerName="MIGXMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTEfMB0GA1UEAxMWVVROLVVTRVJGaXJzdC1IYXJkd2FyZQ=="> - <serialNumber>Xrr31RF0DoIzMKXS6XtD+g==</serialNumber> - </certItem> - <certItem issuerName="MIG9MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5"> - <serialNumber>D4dSwi4udjGtMftKLTSFyg==</serialNumber> - </certItem> - <certItem issuerName="MF8xCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRQwEgYDVQQLEwtQYXJ0bmVycyBDQTEfMB0GA1UEAxMWR2xvYmFsU2lnbiBQYXJ0bmVycyBDQQ=="> - <serialNumber>BAAAAAABCFiEp9s=</serialNumber> - </certItem> - <certItem issuerName="MH4xCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEvMC0GA1UEAxMmU3ltYW50ZWMgQ2xhc3MgMyBTZWN1cmUgU2VydmVyIENBIC0gRzQ="> - <serialNumber>PAdKZPiaac2CvPxbOrsHOw==</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazEtMCsGA1UEAxMkVmVyaVNpZ24gQ2xhc3MgMyBTU1AgSW50ZXJtZWRpYXRlIENB"> - <serialNumber>GuJ0aGBYhChXAOljooJZ3A==</serialNumber> - </certItem> - <certItem issuerName="MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQDExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMw=="> - <serialNumber>BPVqx4UbKVAbJSFTKwrcFryU</serialNumber> - </certItem> - <certItem issuerName="MFcxCzAJBgNVBAYTAlRXMQ4wDAYDVQQKEwVUYWlDQTESMBAGA1UECxMJUG9saWN5IENBMSQwIgYDVQQDExtUYWlDQSBJbmZvcm1hdGlvbiBQb2xpY3kgQ0E="> - <serialNumber>UbQGvw==</serialNumber> - </certItem> - <certItem issuerName="MIGVMQswCQYDVQQGEwJHUjFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIwMTE="> - <serialNumber>AQAAAAU=</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAkRFMRMwEQYDVQQKEwpERk4tVmVyZWluMRAwDgYDVQQLEwdERk4tUEtJMSQwIgYDVQQDExtERk4tVmVyZWluIFBDQSBHbG9iYWwgLSBHMDE="> - <serialNumber>Cfk9lw==</serialNumber> - </certItem> - <certItem issuerName="MGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGlnaXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAy"> - <serialNumber>AIChpbGNqu4XKp9J70syKEs=</serialNumber> - </certItem> - <certItem issuerName="MHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlBUyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRyZSBSb290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWU="> - <serialNumber>cJ+vg4742XhNgJW2ot9eIg==</serialNumber> - </certItem> - <certItem issuerName="MIGuMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xKTAnBgNVBAMTIENoYW1iZXJzIG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4"> - <serialNumber>N4XreFRrqFQ=</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAkRFMRMwEQYDVQQKEwpERk4tVmVyZWluMRAwDgYDVQQLEwdERk4tUEtJMSQwIgYDVQQDExtERk4tVmVyZWluIFBDQSBHbG9iYWwgLSBHMDE="> - <serialNumber>Cyr1PA==</serialNumber> - </certItem> - <certItem issuerName="MDQxCzAJBgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25h"> - <serialNumber>Gg==</serialNumber> - </certItem> - <certItem issuerName="MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQDExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMw=="> - <serialNumber>BKrxi2/1iFxHEFzyZvegxq5C</serialNumber> - </certItem> - <certItem issuerName="MGYxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMR0wGwYDVQQLExREb21haW4gVmFsaWRhdGVkIFNTTDEgMB4GA1UEAxMXR2VvVHJ1c3QgRFYgU1NMIENBIC0gRzQ="> - <serialNumber>H08=</serialNumber> - </certItem> - <certItem issuerName="MHExKDAmBgNVBAMTH0dsb2JhbFNpZ24gUm9vdFNpZ24gUGFydG5lcnMgQ0ExHTAbBgNVBAsTFFJvb3RTaWduIFBhcnRuZXJzIENBMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMQswCQYDVQQGEwJCRQ=="> - <serialNumber>BAAAAAABKB/OGqI=</serialNumber> - </certItem> - <certItem issuerName="MGMxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwx0aGF3dGUsIEluYy4xHTAbBgNVBAsTFERvbWFpbiBWYWxpZGF0ZWQgU1NMMR4wHAYDVQQDExV0aGF3dGUgRFYgU1NMIENBIC0gRzI="> - <serialNumber>Rvm2CEw2IC2Mu/ax0A46QQ==</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAklFMRIwEAYDVQQKEwlCYWx0aW1vcmUxEzARBgNVBAsTCkN5YmVyVHJ1c3QxIjAgBgNVBAMTGUJhbHRpbW9yZSBDeWJlclRydXN0IFJvb3Q="> - <serialNumber>ByfFnw==</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAkRFMRMwEQYDVQQKEwpERk4tVmVyZWluMRAwDgYDVQQLEwdERk4tUEtJMSQwIgYDVQQDExtERk4tVmVyZWluIFBDQSBHbG9iYWwgLSBHMDE="> - <serialNumber>F5BhENPfVw==</serialNumber> - </certItem> - <certItem issuerName="MIGVMQswCQYDVQQGEwJHUjFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIwMTE="> - <serialNumber>GN2Hrh9Ltm4=</serialNumber> - </certItem> - <certItem issuerName="MD0xCzAJBgNVBAYTAkZSMREwDwYDVQQKEwhDZXJ0cGx1czEbMBkGA1UEAxMSQ2xhc3MgMiBQcmltYXJ5IENB"> - <serialNumber>ESJJweWBPhoXAaB9c8SHwI4O</serialNumber> - </certItem> - <certItem issuerName="MIG8MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOzA5BgNVBAsTMlRlcm1zIG9mIHVzZSBhdCBodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhIChjKTEwMTYwNAYDVQQDEy1WZXJpU2lnbiBDbGFzcyAzIEludGVybmF0aW9uYWwgU2VydmVyIENBIC0gRzM="> - <serialNumber>VOcIuNbTqkpOMUyI108FOg==</serialNumber> - </certItem> - <certItem issuerName="MFAxJDAiBgNVBAsTG0dsb2JhbFNpZ24gRUNDIFJvb3QgQ0EgLSBSNDETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbg=="> - <serialNumber>RnQ3dYovwvB0D5q2YGY=</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEnMCUGA1UEAxMeU3ltYW50ZWMgV2ViIFBLSSBFQ0MgUm9vdCAtIEcx"> - <serialNumber>CGo/+42e75JBJ2JcOEaMFw==</serialNumber> - </certItem> - <certItem issuerName="MGMxCzAJBgNVBAYTAkZSMRMwEQYDVQQKEwpDZXJ0aW5vbWlzMRcwFQYDVQQLEw4wMDAyIDQzMzk5ODkwMzEmMCQGA1UEAwwdQ2VydGlub21pcyAtIEF1dG9yaXTDqSBSYWNpbmU="> - <serialNumber>Eg==</serialNumber> - </certItem> - <certItem issuerName="MH4xCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEvMC0GA1UEAxMmU3ltYW50ZWMgQ2xhc3MgMyBTZWN1cmUgU2VydmVyIENBIC0gRzQ="> - <serialNumber>UDE/uwr4z5V8eZI4+1gkAw==</serialNumber> - </certItem> - <certItem issuerName="MH4xCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEvMC0GA1UEAxMmU3ltYW50ZWMgQ2xhc3MgMyBTZWN1cmUgU2VydmVyIENBIC0gRzQ="> - <serialNumber>ezdAeCxKH7BFs7vn3byYaw==</serialNumber> - </certItem> - <certItem issuerName="MIGFMQswCQYDVQQGEwJVUzEgMB4GA1UECgwXV2VsbHMgRmFyZ28gV2VsbHNTZWN1cmUxHDAaBgNVBAsME1dlbGxzIEZhcmdvIEJhbmsgTkExNjA0BgNVBAMMLVdlbGxzU2VjdXJlIFB1YmxpYyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eQ=="> - <serialNumber>AZ0=</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAkRFMRMwEQYDVQQKEwpERk4tVmVyZWluMRAwDgYDVQQLEwdERk4tUEtJMSQwIgYDVQQDExtERk4tVmVyZWluIFBDQSBHbG9iYWwgLSBHMDE="> - <serialNumber>CcHC1w==</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAklFMRIwEAYDVQQKEwlCYWx0aW1vcmUxEzARBgNVBAsTCkN5YmVyVHJ1c3QxIjAgBgNVBAMTGUJhbHRpbW9yZSBDeWJlclRydXN0IFJvb3Q="> - <serialNumber>BEeJFwO0nu759EPo9tKluw==</serialNumber> - </certItem> - <certItem issuerName="MFYxCzAJBgNVBAYTAkpQMQ8wDQYDVQQKEwZKSVBERUMxGjAYBgNVBAsTEUpDQU4gU3ViIFJvb3QgQ0EwMRowGAYDVQQDExFKQ0FOIFN1YiBSb290IENBMA=="> - <serialNumber>BAAAAAABK84yjs8=</serialNumber> - </certItem> - <certItem issuerName="MD0xCzAJBgNVBAYTAkZSMREwDwYDVQQKEwhDZXJ0cGx1czEbMBkGA1UEAxMSQ2xhc3MgMiBQcmltYXJ5IENB"> - <serialNumber>DjIvBkX+ECVbB/C3i6w2Gg==</serialNumber> - </certItem> - <certItem issuerName="MD0xCzAJBgNVBAYTAkZSMREwDwYDVQQKEwhDZXJ0cGx1czEbMBkGA1UEAxMSQ2xhc3MgMiBQcmltYXJ5IENB"> - <serialNumber>ESCC9oPNcRdPOox+SjWm9dTX</serialNumber> - </certItem> - <certItem issuerName="MIHBMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yaw=="> - <serialNumber>O2Qh+qhbBRuZA11yDhcLGQ==</serialNumber> - </certItem> - <certItem issuerName="MFwxCzAJBgNVBAYTAkJFMRUwEwYDVQQLEwxUcnVzdGVkIFJvb3QxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExGzAZBgNVBAMTElRydXN0ZWQgUm9vdCBDQSBHMg=="> - <serialNumber>UU3AP1SMxmyhBFq7MRFZmf0=</serialNumber> - </certItem> - <certItem issuerName="MF8xCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRQwEgYDVQQLEwtQYXJ0bmVycyBDQTEfMB0GA1UEAxMWR2xvYmFsU2lnbiBQYXJ0bmVycyBDQQ=="> - <serialNumber>BAAAAAABHhw1vwc=</serialNumber> - </certItem> - <certItem issuerName="MEwxIDAeBgNVBAsTF0dsb2JhbFNpZ24gUm9vdCBDQSAtIFIyMRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu"> - <serialNumber>BAAAAAABIg08D3U=</serialNumber> - </certItem> - <certItem issuerName="MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQDExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMw=="> - <serialNumber>A8LV4zckxcwdttbQSk0EPnoA</serialNumber> - </certItem> - <certItem issuerName="MIGQMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01PRE8gQ0EgTGltaXRlZDE2MDQGA1UEAxMtQ09NT0RPIFJTQSBEb21haW4gVmFsaWRhdGlvbiBTZWN1cmUgU2VydmVyIENB"> - <serialNumber>D9UltDPl4XVfSSqQOvdiwQ==</serialNumber> - </certItem> - <certItem issuerName="MFAxCzAJBgNVBAYTAkpQMRgwFgYDVQQKEw9TRUNPTSBUcnVzdC5uZXQxJzAlBgNVBAsTHlNlY3VyaXR5IENvbW11bmljYXRpb24gUm9vdENBMQ=="> - <serialNumber>Ermw0Q==</serialNumber> - </certItem> - <certItem issuerName="MIG8MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOzA5BgNVBAsTMlRlcm1zIG9mIHVzZSBhdCBodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhIChjKTEwMTYwNAYDVQQDEy1WZXJpU2lnbiBDbGFzcyAzIEludGVybmF0aW9uYWwgU2VydmVyIENBIC0gRzM="> - <serialNumber>fWK0j/Vi8vNWg3VAGjc02w==</serialNumber> - </certItem> - <certItem issuerName="MD0xCzAJBgNVBAYTAkZSMREwDwYDVQQKEwhDZXJ0cGx1czEbMBkGA1UEAxMSQ2xhc3MgMiBQcmltYXJ5IENB"> - <serialNumber>ESCLRVuhcUZaluIgIVlRJx+O</serialNumber> - </certItem> - <certItem issuerName="MGoxCzAJBgNVBAYTAk5MMR4wHAYDVQQKDBVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xOzA5BgNVBAMMMlN0YWF0IGRlciBOZWRlcmxhbmRlbiBPcmdhbmlzYXRpZSBTZXJ2aWNlcyBDQSAtIEcz"> - <serialNumber>ATE5Ig==</serialNumber> - </certItem> - <certItem issuerName="MDQxCzAJBgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25h"> - <serialNumber>Aw==</serialNumber> - </certItem> - <certItem issuerName="MFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxTaWduIFJvb3QgQ0E="> - <serialNumber>BAAAAAABL07hSVI=</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEnMCUGA1UEAxMeU3ltYW50ZWMgV2ViIFBLSSBFQ0MgUm9vdCAtIEcx"> - <serialNumber>Q1r0dRkkG9miuHj/Y52izw==</serialNumber> - </certItem> - <certItem issuerName="MGYxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMR0wGwYDVQQLExREb21haW4gVmFsaWRhdGVkIFNTTDEgMB4GA1UEAxMXR2VvVHJ1c3QgRFYgU1NMIENBIC0gRzM="> - <serialNumber>YNOos6YJoPC77qwSGCpb7w==</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAkRFMRMwEQYDVQQKEwpERk4tVmVyZWluMRAwDgYDVQQLEwdERk4tUEtJMSQwIgYDVQQDExtERk4tVmVyZWluIFBDQSBHbG9iYWwgLSBHMDE="> - <serialNumber>DHmmaw==</serialNumber> - </certItem> - <certItem issuerName="MDIxCzAJBgNVBAYTAkNOMQ4wDAYDVQQKEwVDTk5JQzETMBEGA1UEAxMKQ05OSUMgUk9PVA=="> - <serialNumber>STMAFQ==</serialNumber> - </certItem> - <certItem issuerName="MCgxCzAJBgNVBAYTAkJFMRkwFwYDVQQDExBCZWxnaXVtIFJvb3QgQ0Ey"> - <serialNumber>Nbc68Q8EHza72P/hSWcddw==</serialNumber> - </certItem> - <certItem issuerName="MDQxCzAJBgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25h"> - <serialNumber>Bw==</serialNumber> - </certItem> - <certItem issuerName="MGYxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMR0wGwYDVQQLExREb21haW4gVmFsaWRhdGVkIFNTTDEgMB4GA1UEAxMXR2VvVHJ1c3QgRFYgU1NMIENBIC0gRzM="> - <serialNumber>dItWlz2V62Philqj9m6Pbg==</serialNumber> - </certItem> - <certItem issuerName="MDcxJDAiBgNVBAMTG1JDUyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEPMA0GA1UEChMGSFQgc3Js"> - <serialNumber>AN9bfYOvlR1t</serialNumber> - </certItem> - <certItem issuerName="MDsxCzAJBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTQ=="> - <serialNumber>EA==</serialNumber> - </certItem> - <certItem issuerName="MCgxCzAJBgNVBAYTAkJFMRkwFwYDVQQDExBCZWxnaXVtIFJvb3QgQ0Ey"> - <serialNumber>frj5jTuqBnQ4fljPvVU3KA==</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEnMCUGA1UEAxMeU3ltYW50ZWMgV2ViIFBLSSBFQ0MgUm9vdCAtIEcx"> - <serialNumber>PbXdgANzAyCOCZ5qa/7E6A==</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAklFMRIwEAYDVQQKEwlCYWx0aW1vcmUxEzARBgNVBAsTCkN5YmVyVHJ1c3QxIjAgBgNVBAMTGUJhbHRpbW9yZSBDeWJlclRydXN0IFJvb3Q="> - <serialNumber>ByembA==</serialNumber> - </certItem> - <certItem issuerName="MGoxCzAJBgNVBAYTAk5MMR4wHAYDVQQKDBVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xOzA5BgNVBAMMMlN0YWF0IGRlciBOZWRlcmxhbmRlbiBPcmdhbmlzYXRpZSBTZXJ2aWNlcyBDQSAtIEcz"> - <serialNumber>LYTXWk7gMu8=</serialNumber> - </certItem> - <certItem issuerName="MFkxCzAJBgNVBAYTAk5MMR4wHAYDVQQKExVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xKjAoBgNVBAMTIVN0YWF0IGRlciBOZWRlcmxhbmRlbiBPdmVyaGVpZCBDQQ=="> - <serialNumber>ATFEdg==</serialNumber> - </certItem> - <certItem issuerName="MFAxJDAiBgNVBAsTG0dsb2JhbFNpZ24gRUNDIFJvb3QgQ0EgLSBSNDETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbg=="> - <serialNumber>RnQ3dg5KdDZs0nyFZk4=</serialNumber> - </certItem> - <certItem issuerName="MEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDM="> - <serialNumber>BwImeaRkSZQLYwFREwKo3R1Jn+8=</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazEtMCsGA1UEAxMkVmVyaVNpZ24gQ2xhc3MgMyBTU1AgSW50ZXJtZWRpYXRlIENB"> - <serialNumber>PmDn14AwWY28IlJeBXkDvA==</serialNumber> - </certItem> - <certItem issuerName="MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQDExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMw=="> - <serialNumber>BONHqLIx/ibQE08IQIyoGaXg</serialNumber> - </certItem> - <certItem issuerName="MD0xCzAJBgNVBAYTAkZSMREwDwYDVQQKEwhDZXJ0cGx1czEbMBkGA1UEAxMSQ2xhc3MgMiBQcmltYXJ5IENB"> - <serialNumber>ESCis569omrbb20yySF39+aE</serialNumber> - </certItem> - <certItem issuerName="MGoxCzAJBgNVBAYTAk5MMR4wHAYDVQQKDBVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xOzA5BgNVBAMMMlN0YWF0IGRlciBOZWRlcmxhbmRlbiBPcmdhbmlzYXRpZSBTZXJ2aWNlcyBDQSAtIEcz"> - <serialNumber>ATE6YA==</serialNumber> - </certItem> - <certItem issuerName="MGYxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMR0wGwYDVQQLExREb21haW4gVmFsaWRhdGVkIFNTTDEgMB4GA1UEAxMXR2VvVHJ1c3QgRFYgU1NMIENBIC0gRzI="> - <serialNumber>XhcFm2g619rt8Sro+a4rHA==</serialNumber> - </certItem> - <certItem issuerName="MEwxIDAeBgNVBAsTF0dsb2JhbFNpZ24gUm9vdCBDQSAtIFIyMRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu"> - <serialNumber>BAAAAAABL07hW2M=</serialNumber> - </certItem> - <certItem issuerName="MD0xCzAJBgNVBAYTAkZSMREwDwYDVQQKEwhDZXJ0cGx1czEbMBkGA1UEAxMSQ2xhc3MgMiBQcmltYXJ5IENB"> - <serialNumber>ESBqoILo90ntDW7OTK43MS2F</serialNumber> - </certItem> - <certItem issuerName="MIG8MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOzA5BgNVBAsTMlRlcm1zIG9mIHVzZSBhdCBodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhIChjKTEwMTYwNAYDVQQDEy1WZXJpU2lnbiBDbGFzcyAzIEludGVybmF0aW9uYWwgU2VydmVyIENBIC0gRzM="> - <serialNumber>BYyEX2b5+K+myAIR7eXaRQ==</serialNumber> - </certItem> - <certItem issuerName="MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQDExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMw=="> - <serialNumber>A7RCxMe1S9Hb7ENzRxl0mxGP</serialNumber> - </certItem> - <certItem issuerName="MFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxTaWduIFJvb3QgQ0E="> - <serialNumber>BAAAAAABLF5/Gog=</serialNumber> - </certItem> - <certItem issuerName="MIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp"> - <serialNumber>TA6BjA==</serialNumber> - </certItem> - <certItem issuerName="MEwxIDAeBgNVBAsTF0dsb2JhbFNpZ24gUm9vdCBDQSAtIFIzMRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu"> - <serialNumber>BAAAAAABMYnGRuw=</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEnMCUGA1UEAxMeU3ltYW50ZWMgV2ViIFBLSSBFQ0MgUm9vdCAtIEcx"> - <serialNumber>a2GKnRbYMZ0oZkRzJE8NIw==</serialNumber> - </certItem> - <certItem issuerName="MH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZpcm1hIFNBIENJRiBBODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3JnMSIwIAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290"> - <serialNumber>Eg==</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazEtMCsGA1UEAxMkVmVyaVNpZ24gQ2xhc3MgMyBTU1AgSW50ZXJtZWRpYXRlIENB"> - <serialNumber>G8sz+bm+vQjTpQNBh5CfMg==</serialNumber> - </certItem> - <certItem issuerName="MEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDI="> - <serialNumber>EM8bDLBnnoYe4LnWpLIhS4esr3I=</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAkRFMRMwEQYDVQQKEwpERk4tVmVyZWluMRAwDgYDVQQLEwdERk4tUEtJMSQwIgYDVQQDExtERk4tVmVyZWluIFBDQSBHbG9iYWwgLSBHMDE="> - <serialNumber>Cfk9oA==</serialNumber> - </certItem> - <certItem issuerName="MH4xCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEvMC0GA1UEAxMmU3ltYW50ZWMgQ2xhc3MgMyBTZWN1cmUgU2VydmVyIENBIC0gRzQ="> - <serialNumber>Sx51x7V8pYe8rp7PMP/3qg==</serialNumber> - </certItem> - <certItem issuerName="MDQxCzAJBgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25h"> - <serialNumber>FQ==</serialNumber> - </certItem> - <certItem issuerName="MIGBMQswCQYDVQQGEwJCRTEZMBcGA1UEChMQR2xvYmFsU2lnbiBudi1zYTElMCMGA1UECxMcUHJpbWFyeSBPYmplY3QgUHVibGlzaGluZyBDQTEwMC4GA1UEAxMnR2xvYmFsU2lnbiBQcmltYXJ5IE9iamVjdCBQdWJsaXNoaW5nIENB"> - <serialNumber>BAAAAAABHkSl7L4=</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAklFMRIwEAYDVQQKEwlCYWx0aW1vcmUxEzARBgNVBAsTCkN5YmVyVHJ1c3QxIjAgBgNVBAMTGUJhbHRpbW9yZSBDeWJlclRydXN0IFJvb3Q="> - <serialNumber>BydiAg==</serialNumber> - </certItem> - <certItem issuerName="MEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDM="> - <serialNumber>Cj0=</serialNumber> - </certItem> - <certItem issuerName="MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQDExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMw=="> - <serialNumber>AyjNQ4dnGD3FD6WL5gYrYru7</serialNumber> - </certItem> - <certItem issuerName="MG0xCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRswGQYDVQQLExJQcmltYXJ5IENsYXNzIDEgQ0ExJjAkBgNVBAMTHUdsb2JhbFNpZ24gUHJpbWFyeSBDbGFzcyAxIENB"> - <serialNumber>BAAAAAABHkSl5ao=</serialNumber> - </certItem> - <certItem issuerName="MEgxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdTZWN1cmVUcnVzdCBDb3Jwb3JhdGlvbjEXMBUGA1UEAxMOU2VjdXJlVHJ1c3QgQ0E="> - <serialNumber>MABJSw==</serialNumber> - </certItem> - <certItem issuerName="MD0xCzAJBgNVBAYTAkZSMREwDwYDVQQKEwhDZXJ0cGx1czEbMBkGA1UEAxMSQ2xhc3MgMiBQcmltYXJ5IENB"> - <serialNumber>ESCVop+Q4/OBgtf4WJkr01Gh</serialNumber> - </certItem> - <certItem issuerName="MHsxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazEyMDAGA1UEAxMpVmVyaVNpZ24gQ2xhc3MgMyBTU1AgSW50ZXJtZWRpYXRlIENBIC0gRzI="> - <serialNumber>eViJ2GX26lp5HbF+XNp1kQ==</serialNumber> - </certItem> - <certItem issuerName="MFoxCzAJBgNVBAYTAklFMRIwEAYDVQQKEwlCYWx0aW1vcmUxEzARBgNVBAsTCkN5YmVyVHJ1c3QxIjAgBgNVBAMTGUJhbHRpbW9yZSBDeWJlclRydXN0IFJvb3Q="> - <serialNumber>ByfDtA==</serialNumber> - </certItem> - <certItem issuerName="MIGVMQswCQYDVQQGEwJHUjFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIwMTE="> - <serialNumber>GN2Hrh9Ltm8=</serialNumber> - </certItem> - <certItem issuerName="MEcxCzAJBgNVBAYTAkNIMRUwEwYDVQQKEwxTd2lzc1NpZ24gQUcxITAfBgNVBAMTGFN3aXNzU2lnbiBTaWx2ZXIgQ0EgLSBHMg=="> - <serialNumber>ANsAyDuSSs7Z83LfMZ+TDw==</serialNumber> - </certItem> - <certItem issuerName="MD0xCzAJBgNVBAYTAkZSMREwDwYDVQQKEwhDZXJ0cGx1czEbMBkGA1UEAxMSQ2xhc3MgMiBQcmltYXJ5IENB"> - <serialNumber>ESByYNtAIfizf2L3NMzCH8zZ</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEnMCUGA1UEAxMeU3ltYW50ZWMgV2ViIFBLSSBFQ0MgUm9vdCAtIEcx"> - <serialNumber>QspbHxzWb41SX9TUhF1N1A==</serialNumber> - </certItem> - <certItem issuerName="MHYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEnMCUGA1UEAxMeU3ltYW50ZWMgV2ViIFBLSSBFQ0MgUm9vdCAtIEcx"> - <serialNumber>KNhgX8XuJduYciIyatpOQg==</serialNumber> - </certItem> - <certItem issuerName="MHExCzAJBgNVBAYTAkRFMRwwGgYDVQQKExNEZXV0c2NoZSBUZWxla29tIEFHMR8wHQYDVQQLExZULVRlbGVTZWMgVHJ1c3QgQ2VudGVyMSMwIQYDVQQDExpEZXV0c2NoZSBUZWxla29tIFJvb3QgQ0EgMg=="> - <serialNumber>AImQERVYPoeb</serialNumber> - </certItem> - <certItem issuerName="MGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGlnaXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAy"> - <serialNumber>GpO48aJ8GngtwECqZhm/xA==</serialNumber> - </certItem> - <certItem issuerName="MDwxGzAZBgNVBAMTEkNvbVNpZ24gU2VjdXJlZCBDQTEQMA4GA1UEChMHQ29tU2lnbjELMAkGA1UEBhMCSUw="> - <serialNumber>CdYL9vSQCEKzBwjO10ud2w==</serialNumber> - </certItem> - <certItem issuerName="MDwxHjAcBgNVBAMMFUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsGA1UECgwEQXRvczELMAkGA1UEBhMCREU="> - <serialNumber>a12RvBNhznU=</serialNumber> - </certItem> - </certItems> </blocklist> diff --git a/browser/app/macbuild/Contents/Info.plist.in b/browser/app/macbuild/Contents/Info.plist.in index 6212e886d..d6902fffd 100644 --- a/browser/app/macbuild/Contents/Info.plist.in +++ b/browser/app/macbuild/Contents/Info.plist.in @@ -205,6 +205,11 @@ <true/> <key>LSApplicationCategoryType</key> <string>public.app-category.productivity</string> + <key>LSEnvironment</key> + <dict> + <key>MallocNanoZone</key> + <string>0</string> + </dict> <key>LSFileQuarantineEnabled</key> <true/> <key>LSMinimumSystemVersion</key> diff --git a/browser/app/module.ver b/browser/app/module.ver index 5ef8d2a02..0373ff96d 100644 --- a/browser/app/module.ver +++ b/browser/app/module.ver @@ -1,8 +1,8 @@ -WIN32_MODULE_COMPANYNAME=Mozilla Corporation -WIN32_MODULE_COPYRIGHT=©Firefox and Mozilla Developers; available under the MPL 2 license. +WIN32_MODULE_COMPANYNAME=Moonchild Productions +WIN32_MODULE_COPYRIGHT=©Basilisk and Mozilla Developers; available under the MPL 2 license. WIN32_MODULE_PRODUCTVERSION=@MOZ_APP_WINVERSION@ WIN32_MODULE_PRODUCTVERSION_STRING=@MOZ_APP_VERSION@ -WIN32_MODULE_TRADEMARKS=Firefox is a Trademark of The Mozilla Foundation. +WIN32_MODULE_TRADEMARKS=Basilisk is a Trademark of Moonchild Productions. WIN32_MODULE_DESCRIPTION=@MOZ_APP_DISPLAYNAME@ WIN32_MODULE_PRODUCTNAME=@MOZ_APP_DISPLAYNAME@ WIN32_MODULE_NAME=@MOZ_APP_DISPLAYNAME@ diff --git a/browser/app/nsBrowserApp.cpp b/browser/app/nsBrowserApp.cpp index 981e2f14c..184b1fc2e 100644 --- a/browser/app/nsBrowserApp.cpp +++ b/browser/app/nsBrowserApp.cpp @@ -24,11 +24,6 @@ #include "nsStringGlue.h" #ifdef XP_WIN -#ifdef MOZ_ASAN -// ASAN requires firefox.exe to be built with -MD, and it's OK if we don't -// support Windows XP SP2 in ASAN builds. -#define XRE_DONT_SUPPORT_XPSP2 -#endif #define XRE_WANT_ENVIRON #define strcasecmp _stricmp #ifdef MOZ_SANDBOX @@ -84,7 +79,7 @@ static void Output(const char *fmt, ... ) decltype(MessageBoxW)* messageBoxW = (decltype(MessageBoxW)*) GetProcAddress(user32, "MessageBoxW"); if (messageBoxW) { - messageBoxW(nullptr, wide_msg, L"Firefox", MB_OK + messageBoxW(nullptr, wide_msg, L"Basilisk", MB_OK | MB_ICONERROR | MB_SETFOREGROUND); } @@ -170,7 +165,7 @@ static int do_main(int argc, char* argv[], char* envp[], nsIFile *xreDirectory) nsresult rv; uint32_t mainFlags = 0; - // Allow firefox.exe to launch XULRunner apps via -app <application.ini> + // Allow basilisk.exe to launch XULRunner apps via -app <application.ini> // Note that -app must be the *first* argument. const char *appDataFile = getenv("XUL_APP_FILE"); if (appDataFile && *appDataFile) { diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js index 465b5349f..5637d1797 100644 --- a/browser/app/profile/firefox.js +++ b/browser/app/profile/firefox.js @@ -156,8 +156,8 @@ pref("app.update.service.enabled", true); // .. etc .. // pref("extensions.update.enabled", true); -pref("extensions.update.url", "https://versioncheck.addons.mozilla.org/update/VersionCheck.php?reqVersion=%REQ_VERSION%&id=%ITEM_ID%&version=%ITEM_VERSION%&maxAppVersion=%ITEM_MAXAPPVERSION%&status=%ITEM_STATUS%&appID=%APP_ID%&appVersion=%APP_VERSION%&appOS=%APP_OS%&appABI=%APP_ABI%&locale=%APP_LOCALE%¤tAppVersion=%CURRENT_APP_VERSION%&updateType=%UPDATE_TYPE%&compatMode=%COMPATIBILITY_MODE%"); -pref("extensions.update.background.url", "https://versioncheck-bg.addons.mozilla.org/update/VersionCheck.php?reqVersion=%REQ_VERSION%&id=%ITEM_ID%&version=%ITEM_VERSION%&maxAppVersion=%ITEM_MAXAPPVERSION%&status=%ITEM_STATUS%&appID=%APP_ID%&appVersion=%APP_VERSION%&appOS=%APP_OS%&appABI=%APP_ABI%&locale=%APP_LOCALE%¤tAppVersion=%CURRENT_APP_VERSION%&updateType=%UPDATE_TYPE%&compatMode=%COMPATIBILITY_MODE%"); +pref("extensions.update.url", "https://versioncheck.addons.mozilla.org/update/VersionCheck.php?reqVersion=%REQ_VERSION%&id=%ITEM_ID%&version=%ITEM_VERSION%&maxAppVersion=%ITEM_MAXAPPVERSION%&status=%ITEM_STATUS%&appID=%APP_ID%&appVersion=52.9&appOS=%APP_OS%&appABI=%APP_ABI%&locale=%APP_LOCALE%¤tAppVersion=%CURRENT_APP_VERSION%&updateType=%UPDATE_TYPE%&compatMode=%COMPATIBILITY_MODE%"); +pref("extensions.update.background.url", "https://versioncheck-bg.addons.mozilla.org/update/VersionCheck.php?reqVersion=%REQ_VERSION%&id=%ITEM_ID%&version=%ITEM_VERSION%&maxAppVersion=%ITEM_MAXAPPVERSION%&status=%ITEM_STATUS%&appID=%APP_ID%&appVersion=52.9&appOS=%APP_OS%&appABI=%APP_ABI%&locale=%APP_LOCALE%¤tAppVersion=%CURRENT_APP_VERSION%&updateType=%UPDATE_TYPE%&compatMode=%COMPATIBILITY_MODE%"); pref("extensions.update.interval", 86400); // Check for updates to Extensions and // Themes every day // Non-symmetric (not shared by extensions) extension-specific [update] preferences @@ -229,11 +229,6 @@ pref("browser.slowStartup.notificationDisabled", false); pref("browser.slowStartup.timeThreshold", 40000); pref("browser.slowStartup.maxSamples", 5); -// This url, if changed, MUST continue to point to an https url. Pulling arbitrary content to inject into -// this page over http opens us up to a man-in-the-middle attack that we'd rather not face. If you are a downstream -// repackager of this code using an alternate snippet url, please keep your users safe -pref("browser.aboutHomeSnippets.updateUrl", "https://snippets.cdn.mozilla.net/%STARTPAGE_VERSION%/%NAME%/%VERSION%/%APPBUILDID%/%BUILD_TARGET%/%LOCALE%/%CHANNEL%/%OS_VERSION%/%DISTRIBUTION%/%DISTRIBUTION_VERSION%/"); - pref("browser.enable_automatic_image_resizing", true); pref("browser.casting.enabled", false); pref("browser.chrome.site_icons", true); @@ -900,12 +895,7 @@ pref("app.support.baseURL", "https://support.mozilla.org/1/firefox/%VERSION%/%OS pref("app.support.e10sAccessibilityUrl", "https://support.mozilla.org/1/firefox/%VERSION%/%OS%/%LOCALE%/accessibility-ppt"); // base url for web-based feedback pages -#ifdef MOZ_DEV_EDITION -pref("app.feedback.baseURL", "https://input.mozilla.org/%LOCALE%/feedback/firefoxdev/%VERSION%/"); -#else -pref("app.feedback.baseURL", "https://input.mozilla.org/%LOCALE%/feedback/%APP%/%VERSION%/"); -#endif - +pref("app.feedback.baseURL", "https://forum.palemoon.org/viewforum.php?f=61"); // Name of alternate about: page for certificate errors (when undefined, defaults to about:neterror) pref("security.alternate_certificate_error_page", "certerror"); @@ -1066,7 +1056,6 @@ pref("services.sync.prefs.sync.browser.download.useDownloadDir", true); pref("services.sync.prefs.sync.browser.formfill.enable", true); pref("services.sync.prefs.sync.browser.link.open_newwindow", true); pref("services.sync.prefs.sync.browser.newtabpage.enabled", true); -pref("services.sync.prefs.sync.browser.newtabpage.enhanced", true); pref("services.sync.prefs.sync.browser.newtabpage.pinned", true); pref("services.sync.prefs.sync.browser.offline-apps.notify", true); pref("services.sync.prefs.sync.browser.safebrowsing.phishing.enabled", true); @@ -1161,7 +1150,7 @@ pref("browser.newtabpage.introShown", false); pref("browser.newtabpage.enabled", true); // Toggles the enhanced content of 'about:newtab'. Shows sponsored tiles. -sticky_pref("browser.newtabpage.enhanced", true); +sticky_pref("browser.newtabpage.enhanced", false); // enables Activity Stream inspired layout pref("browser.newtabpage.compact", false); @@ -1335,20 +1324,21 @@ pref("identity.fxaccounts.migrateToDevEdition", false); pref("ui.key.menuAccessKeyFocuses", true); #endif +#ifdef MOZ_EME // Encrypted media extensions. -#ifdef XP_LINUX -// On Linux EME is visible but disabled by default. This is so that the -// "Play DRM content" checkbox in the Firefox UI is unchecked by default. +// EME is visible but disabled by default. This is so that the +// "Play DRM content" checkbox in the browser UI is unchecked by default. // DRM requires downloading and installing proprietary binaries, which -// users on an open source operating systems didn't opt into. The first -// time a site using EME is encountered, the user will be prompted to -// enable DRM, whereupon the EME plugin binaries will be downloaded if -// permission is granted. +// users didn't necessarily opt-in to by installing the browser. +// The first time a site using EME is encountered, the user will be +// prompted to enable DRM, whereupon the EME plugin binaries will be +// downloaded if permission is granted. pref("media.eme.enabled", false); +pref("media.eme.apiVisible", true); #else -pref("media.eme.enabled", true); +// Disable redundant interfaces +pref("media.eme.apiVisible", false); #endif -pref("media.eme.apiVisible", true); // Decode using Gecko Media Plugins in <video>, if a system decoder is not // availble and the preferred GMP is available. @@ -1402,13 +1392,6 @@ pref("browser.translation.engine", "bing"); // Determines if Telemetry pings can be archived locally. pref("toolkit.telemetry.archive.enabled", true); -// Telemetry experiments settings. -pref("experiments.enabled", true); -pref("experiments.manifest.fetchIntervalSeconds", 86400); -pref("experiments.manifest.uri", "https://telemetry-experiment.cdn.mozilla.net/manifest/v1/firefox/%VERSION%/%CHANNEL%"); -// Whether experiments are supported by the current application profile. -pref("experiments.supported", true); - // Enable GMP support in the addon manager. pref("media.gmp-provider.enabled", true); diff --git a/browser/app/splash.rc b/browser/app/splash.rc index c406b7985..beccf8706 100644 --- a/browser/app/splash.rc +++ b/browser/app/splash.rc @@ -6,7 +6,7 @@ #include <windows.h> #include "nsNativeAppSupportWin.h" -1 24 "firefox.exe.manifest" +1 24 "basilisk.exe.manifest" IDI_APPICON ICON FIREFOX_ICO IDI_DOCUMENT ICON DOCUMENT_ICO diff --git a/browser/base/content/aboutDialog.js b/browser/base/content/aboutDialog.js index 569a65adb..f9571621f 100644 --- a/browser/base/content/aboutDialog.js +++ b/browser/base/content/aboutDialog.js @@ -40,16 +40,23 @@ function init(aEvent) // Pref is unset } - // Include the build ID and display warning if this is an "a#" (nightly or aurora) build + // Include the build ID let versionField = document.getElementById("version"); let version = Services.appinfo.version; + let buildID = Services.appinfo.appBuildID; + let year = buildID.slice(0, 4); + let month = buildID.slice(4, 6); + let day = buildID.slice(6, 8); + let hour = buildID.slice(8, 10); + let minute = buildID.slice(10, 12); + if (Services.prefs.getBoolPref("general.useragent.appVersionIsBuildID")) { + versionField.textContent = `${year}.${month}.${day}`; + } else { + versionField.textContent = `v` + version + ` (${year}-${month}-${day})`; + } + + // Display warning if this is an "a#" (nightly or aurora) build if (/a\d+$/.test(version)) { - let buildID = Services.appinfo.appBuildID; - let year = buildID.slice(0, 4); - let month = buildID.slice(4, 6); - let day = buildID.slice(6, 8); - versionField.textContent += ` (${year}-${month}-${day})`; - document.getElementById("experimental").hidden = false; document.getElementById("communityDesc").hidden = true; } @@ -62,6 +69,10 @@ function init(aEvent) let arch = bundle.GetStringFromName(archResource); versionField.textContent += ` (${arch})`; + // Get Release Notes URL from Preferences + let releaseNotesURL = Services.prefs.getCharPref("app.releaseNotesURL"); + document.getElementById("releasenotes").setAttribute("href", releaseNotesURL); + if (AppConstants.MOZ_UPDATER) { gAppUpdater = new appUpdater(); diff --git a/browser/base/content/aboutDialog.xul b/browser/base/content/aboutDialog.xul index cbb07a5e1..5780e5ec1 100644 --- a/browser/base/content/aboutDialog.xul +++ b/browser/base/content/aboutDialog.xul @@ -45,9 +45,9 @@ <vbox id="leftBox" flex="1"/> <vbox id="rightBox" flex="1"> <hbox align="baseline"> -#expand <label id="version">__MOZ_APP_VERSION_DISPLAY__</label> +#expand <label id="version"></label> #ifndef NIGHTLY_BUILD -#expand <label id="releasenotes" class="text-link" href="https://www.mozilla.org/firefox/__MOZ_APP_VERSION__/releasenotes/">&releaseNotes.link;</label> + <label id="releasenotes" class="text-link">&releaseNotes.link;</label> #endif </hbox> @@ -120,20 +120,20 @@ <vbox id="experimental" hidden="true"> <description class="text-blurb" id="warningDesc"> &warningDesc.version; -#ifdef MOZ_TELEMETRY_ON_BY_DEFAULT - &warningDesc.telemetryDesc; -#endif - </description> - <description class="text-blurb" id="communityExperimentalDesc"> - &community.exp.start;<label class="text-link" href="http://www.mozilla.org/">&community.exp.mozillaLink;</label>&community.exp.middle;<label class="text-link" useoriginprincipal="true" href="about:credits">&community.exp.creditsLink;</label>&community.exp.end; </description> </vbox> +#ifdef MC_PRIVATE_BUILD +<description class="text-blurb" id="communityDesc"> + This is a private build of Basilisk. If you did not manually build this copy from source yourself, then please download an official version from the <label class="text-link" href="http://www.basilisk-browser.org/">Basilisk website</label>. + </description> +#else <description class="text-blurb" id="communityDesc"> - &community.start2;<label class="text-link" href="http://www.mozilla.org/">&community.mozillaLink;</label>&community.middle2;<label class="text-link" useoriginprincipal="true" href="about:credits">&community.creditsLink;</label>&community.end3; + Basilisk is community software released by <label class="text-link" href="http://www.palemoon.org/">the Pale Moon team</label> and Mozilla developers. Learn <label class="text-link" useoriginprincipal="true" href="about:credits">who contributed</label> to this software. </description> <description class="text-blurb" id="contributeDesc"> - &helpus.start;<label class="text-link" href="https://sendto.mozilla.org/page/contribute/Give-Now?source=mozillaorg_default_footer&ref=firefox_about&utm_campaign=firefox_about&tm_source=firefox&tm_medium=referral&utm_content=20140929_FireFoxAbout">&helpus.donateLink;</label>&helpus.middle;<label class="text-link" href="http://www.mozilla.org/contribute/">&helpus.getInvolvedLink;</label>&helpus.end; + Want to help? Please consider <label class="text-link" href="https://www.palemoon.org/donations.shtml">donating</label> or get involved with our <label class="text-link" href="https://github.com/MoonchildProductions/UXP">development</label> of the Unified XUL Platform. </description> +#endif </vbox> </vbox> </hbox> @@ -141,7 +141,7 @@ <hbox pack="center"> <label class="text-link bottom-link" useoriginprincipal="true" href="about:license">&bottomLinks.license;</label> <label class="text-link bottom-link" useoriginprincipal="true" href="about:rights">&bottomLinks.rights;</label> - <label class="text-link bottom-link" href="https://www.mozilla.org/privacy/">&bottomLinks.privacy;</label> + <label class="text-link bottom-link" href="https://www.palemoon.org/privacy.shtml">&bottomLinks.privacy;</label> </hbox> <description id="trademark">&trademarkInfo.part1;</description> </vbox> diff --git a/browser/base/content/abouthome/aboutHome.css b/browser/base/content/abouthome/aboutHome.css index c0b02e257..bc3f9882c 100644 --- a/browser/base/content/abouthome/aboutHome.css +++ b/browser/base/content/abouthome/aboutHome.css @@ -49,8 +49,7 @@ a { background-repeat: no-repeat; } -#searchIconAndTextContainer, -#snippets { +#searchIconAndTextContainer { width: 470px; } @@ -168,48 +167,6 @@ a { transition-duration: 0ms; } -#defaultSnippet1, -#defaultSnippet2, -#rightsSnippet { - display: block; - min-height: 38px; - background: 0 center no-repeat; - padding: 6px 0; - padding-inline-start: 49px; -} - -#rightsSnippet[hidden] { - display: none; -} - -#defaultSnippet1:dir(rtl), -#defaultSnippet2:dir(rtl), -#rightsSnippet:dir(rtl) { - background-position: right 0 center; -} - -#defaultSnippet1 { - background-image: url("chrome://browser/content/abouthome/snippet1.png"); -} - -#defaultSnippet2 { - background-image: url("chrome://browser/content/abouthome/snippet2.png"); -} - -#snippets { - display: inline-block; - text-align: start; - margin: 12px 0; - color: #3c3c3c; - font-size: 75%; - /* 12px is the computed font size, 15px the computed line height of the snippets - with Segoe UI on a default Windows 7 setup. The 15/12 multiplier approximately - converts em from units of font-size to units of line-height. The goal is to - preset the height of a three-line snippet to avoid visual moving/flickering as - the snippets load. */ - min-height: calc(15/12 * 3em); -} - #launcher { display: -moz-box; -moz-box-align: center; @@ -385,20 +342,6 @@ body[narrow] #restorePreviousSession::before { background-image: url("chrome://branding/content/about-logo@2x.png"); } - #defaultSnippet1, - #defaultSnippet2, - #rightsSnippet { - background-size: 40px; - } - - #defaultSnippet1 { - background-image: url("chrome://browser/content/abouthome/snippet1@2x.png"); - } - - #defaultSnippet2 { - background-image: url("chrome://browser/content/abouthome/snippet2@2x.png"); - } - .launchButton::before, #aboutMozilla::before { transform: scale(.5); diff --git a/browser/base/content/abouthome/aboutHome.js b/browser/base/content/abouthome/aboutHome.js index 50f3e01cd..0cbcc835a 100644 --- a/browser/base/content/abouthome/aboutHome.js +++ b/browser/base/content/abouthome/aboutHome.js @@ -6,23 +6,10 @@ /* import-globals-from ../contentSearchUI.js */ -// The process of adding a new default snippet involves: -// * add a new entity to aboutHome.dtd -// * add a <span/> for it in aboutHome.xhtml -// * add an entry here in the proper ordering (based on spans) -// The <a/> part of the snippet will be linked to the corresponding url. -const DEFAULT_SNIPPETS_URLS = [ - "https://www.mozilla.org/firefox/features/?utm_source=snippet&utm_medium=snippet&utm_campaign=default+feature+snippet" -, "https://addons.mozilla.org/firefox/?utm_source=snippet&utm_medium=snippet&utm_campaign=addons" -]; - -const SNIPPETS_UPDATE_INTERVAL_MS = 14400000; // 4 hours. - // IndexedDB storage constants. const DATABASE_NAME = "abouthome"; const DATABASE_VERSION = 1; const DATABASE_STORAGE = "persistent"; -const SNIPPETS_OBJECTSTORE_NAME = "snippets"; var searchText; // This global tracks if the page has been set up before, to prevent double inits @@ -33,13 +20,6 @@ var gObserver = new MutationObserver(function (mutations) { if (mutation.attributeName == "session") { fitToWidth(); } - if (mutation.attributeName == "snippetsVersion") { - if (!gInitialized) { - ensureSnippetsMapThen(loadSnippets); - gInitialized = true; - } - return; - } } }); @@ -90,126 +70,6 @@ window.addEventListener("keypress", ev => { searchText.value += ev.key; }); -// This object has the same interface as Map and is used to store and retrieve -// the snippets data. It is lazily initialized by ensureSnippetsMapThen(), so -// be sure its callback returned before trying to use it. -var gSnippetsMap; -var gSnippetsMapCallbacks = []; - -/** - * Ensure the snippets map is properly initialized. - * - * @param aCallback - * Invoked once the map has been initialized, gets the map as argument. - * @note Snippets should never directly manage the underlying storage, since - * it may change inadvertently. - */ -function ensureSnippetsMapThen(aCallback) -{ - if (gSnippetsMap) { - aCallback(gSnippetsMap); - return; - } - - // Handle multiple requests during the async initialization. - gSnippetsMapCallbacks.push(aCallback); - if (gSnippetsMapCallbacks.length > 1) { - // We are already updating, the callbacks will be invoked when done. - return; - } - - let invokeCallbacks = function () { - if (!gSnippetsMap) { - gSnippetsMap = Object.freeze(new Map()); - } - - for (let callback of gSnippetsMapCallbacks) { - callback(gSnippetsMap); - } - gSnippetsMapCallbacks.length = 0; - } - - let openRequest = indexedDB.open(DATABASE_NAME, {version: DATABASE_VERSION, - storage: DATABASE_STORAGE}); - - openRequest.onerror = function (event) { - // Try to delete the old database so that we can start this process over - // next time. - indexedDB.deleteDatabase(DATABASE_NAME); - invokeCallbacks(); - }; - - openRequest.onupgradeneeded = function (event) { - let db = event.target.result; - if (!db.objectStoreNames.contains(SNIPPETS_OBJECTSTORE_NAME)) { - db.createObjectStore(SNIPPETS_OBJECTSTORE_NAME); - } - } - - openRequest.onsuccess = function (event) { - let db = event.target.result; - - db.onerror = function (event) { - invokeCallbacks(); - } - - db.onversionchange = function (event) { - event.target.close(); - invokeCallbacks(); - } - - let cache = new Map(); - let cursorRequest; - try { - cursorRequest = db.transaction(SNIPPETS_OBJECTSTORE_NAME) - .objectStore(SNIPPETS_OBJECTSTORE_NAME).openCursor(); - } catch (ex) { - console.error(ex); - invokeCallbacks(); - return; - } - - cursorRequest.onerror = function (event) { - invokeCallbacks(); - } - - cursorRequest.onsuccess = function(event) { - let cursor = event.target.result; - - // Populate the cache from the persistent storage. - if (cursor) { - cache.set(cursor.key, cursor.value); - cursor.continue(); - return; - } - - // The cache has been filled up, create the snippets map. - gSnippetsMap = Object.freeze({ - get: (aKey) => cache.get(aKey), - set: function (aKey, aValue) { - db.transaction(SNIPPETS_OBJECTSTORE_NAME, "readwrite") - .objectStore(SNIPPETS_OBJECTSTORE_NAME).put(aValue, aKey); - return cache.set(aKey, aValue); - }, - has: (aKey) => cache.has(aKey), - delete: function (aKey) { - db.transaction(SNIPPETS_OBJECTSTORE_NAME, "readwrite") - .objectStore(SNIPPETS_OBJECTSTORE_NAME).delete(aKey); - return cache.delete(aKey); - }, - clear: function () { - db.transaction(SNIPPETS_OBJECTSTORE_NAME, "readwrite") - .objectStore(SNIPPETS_OBJECTSTORE_NAME).clear(); - return cache.clear(); - }, - get size() { return cache.size; }, - }); - - setTimeout(invokeCallbacks, 0); - } - } -} - function onSearchSubmit(aEvent) { gContentSearchController.search(aEvent); @@ -246,146 +106,6 @@ function setupSearch() */ function loadCompleted() { - var event = new CustomEvent("AboutHomeLoadSnippetsCompleted", {bubbles:true}); - document.dispatchEvent(event); -} - -/** - * Update the local snippets from the remote storage, then show them through - * showSnippets. - */ -function loadSnippets() -{ - if (!gSnippetsMap) - throw new Error("Snippets map has not properly been initialized"); - - // Allow tests to modify the snippets map before using it. - var event = new CustomEvent("AboutHomeLoadSnippets", {bubbles:true}); - document.dispatchEvent(event); - - // Check cached snippets version. - let cachedVersion = gSnippetsMap.get("snippets-cached-version") || 0; - let currentVersion = document.documentElement.getAttribute("snippetsVersion"); - if (cachedVersion < currentVersion) { - // The cached snippets are old and unsupported, restart from scratch. - gSnippetsMap.clear(); - } - - // Check last snippets update. - let lastUpdate = gSnippetsMap.get("snippets-last-update"); - let updateURL = document.documentElement.getAttribute("snippetsURL"); - let shouldUpdate = !lastUpdate || - Date.now() - lastUpdate > SNIPPETS_UPDATE_INTERVAL_MS; - if (updateURL && shouldUpdate) { - // Try to update from network. - let xhr = new XMLHttpRequest(); - xhr.timeout = 5000; - // Even if fetching should fail we don't want to spam the server, thus - // set the last update time regardless its results. Will retry tomorrow. - gSnippetsMap.set("snippets-last-update", Date.now()); - xhr.onloadend = function (event) { - if (xhr.status == 200) { - gSnippetsMap.set("snippets", xhr.responseText); - gSnippetsMap.set("snippets-cached-version", currentVersion); - } - showSnippets(); - loadCompleted(); - }; - try { - xhr.open("GET", updateURL, true); - xhr.send(null); - } catch (ex) { - showSnippets(); - loadCompleted(); - return; - } - } else { - showSnippets(); - loadCompleted(); - } -} - -/** - * Shows locally cached remote snippets, or default ones when not available. - * - * @note: snippets should never invoke showSnippets(), or they may cause - * a "too much recursion" exception. - */ -var _snippetsShown = false; -function showSnippets() -{ - let snippetsElt = document.getElementById("snippets"); - - // Show about:rights notification, if needed. - let showRights = document.documentElement.getAttribute("showKnowYourRights"); - if (showRights) { - let rightsElt = document.getElementById("rightsSnippet"); - let anchor = rightsElt.getElementsByTagName("a")[0]; - anchor.href = "about:rights"; - snippetsElt.appendChild(rightsElt); - rightsElt.removeAttribute("hidden"); - return; - } - - if (!gSnippetsMap) - throw new Error("Snippets map has not properly been initialized"); - if (_snippetsShown) { - // There's something wrong with the remote snippets, just in case fall back - // to the default snippets. - showDefaultSnippets(); - throw new Error("showSnippets should never be invoked multiple times"); - } - _snippetsShown = true; - - let snippets = gSnippetsMap.get("snippets"); - // If there are remotely fetched snippets, try to to show them. - if (snippets) { - // Injecting snippets can throw if they're invalid XML. - try { - snippetsElt.innerHTML = snippets; - // Scripts injected by innerHTML are inactive, so we have to relocate them - // through DOM manipulation to activate their contents. - Array.forEach(snippetsElt.getElementsByTagName("script"), function(elt) { - let relocatedScript = document.createElement("script"); - relocatedScript.type = "text/javascript;version=1.8"; - relocatedScript.text = elt.text; - elt.parentNode.replaceChild(relocatedScript, elt); - }); - return; - } catch (ex) { - // Bad content, continue to show default snippets. - } - } - - showDefaultSnippets(); -} - -/** - * Clear snippets element contents and show default snippets. - */ -function showDefaultSnippets() -{ - // Clear eventual contents... - let snippetsElt = document.getElementById("snippets"); - snippetsElt.innerHTML = ""; - - // ...then show default snippets. - let defaultSnippetsElt = document.getElementById("defaultSnippets"); - let entries = defaultSnippetsElt.querySelectorAll("span"); - // Choose a random snippet. Assume there is always at least one. - let randIndex = Math.floor(Math.random() * entries.length); - let entry = entries[randIndex]; - // Inject url in the eventual link. - if (DEFAULT_SNIPPETS_URLS[randIndex]) { - let links = entry.getElementsByTagName("a"); - // Default snippets can have only one link, otherwise something is messed - // up in the translation. - if (links.length == 1) { - links[0].href = DEFAULT_SNIPPETS_URLS[randIndex]; - } - } - // Move the default snippet to the snippets element. - snippetsElt.appendChild(entry); } function fitToWidth() { diff --git a/browser/base/content/abouthome/aboutHome.xhtml b/browser/base/content/abouthome/aboutHome.xhtml index c288e732e..22bf2e7e8 100644 --- a/browser/base/content/abouthome/aboutHome.xhtml +++ b/browser/base/content/abouthome/aboutHome.xhtml @@ -46,15 +46,6 @@ <input id="searchSubmit" type="button" onclick="onSearchSubmit(event)" title="&contentSearchSubmit.tooltip;"/> </div> - - <div id="snippetContainer"> - <div id="defaultSnippets" hidden="true"> - <span id="defaultSnippet1">&abouthome.defaultSnippet1.v1;</span> - <span id="defaultSnippet2">&abouthome.defaultSnippet2.v1;</span> - </div> - <span id="rightsSnippet" hidden="true">&abouthome.rightsSnippet;</span> - <div id="snippets"/> - </div> </div> <div class="spacer"/> @@ -73,7 +64,5 @@ <button class="launchButton" id="restorePreviousSession">&historyRestoreLastSession.label;</button> </div> - <a id="aboutMozilla" href="https://www.mozilla.org/about/?utm_source=about-home&utm_medium=Referral" - aria-label="&abouthome.aboutMozilla.label;"/> </body> </html> diff --git a/browser/base/content/browser-context.inc b/browser/base/content/browser-context.inc index 51b14d152..3061cccdd 100644 --- a/browser/base/content/browser-context.inc +++ b/browser/base/content/browser-context.inc @@ -456,12 +456,14 @@ oncommand="gContextMenu.openPasswordManager();"/> </menupopup> </menu> +#ifdef MOZ_DEVTOOLS <menuseparator id="inspect-separator" hidden="true"/> <menuitem id="context-inspect" hidden="true" label="&inspectContextMenu.label;" accesskey="&inspectContextMenu.accesskey;" oncommand="gContextMenu.inspectNode();"/> +#endif <menuseparator id="context-media-eme-separator" hidden="true"/> <menuitem id="context-media-eme-learnmore" class="menuitem-iconic" diff --git a/browser/base/content/browser-media.js b/browser/base/content/browser-media.js index 81e7faf17..bd5c5b227 100644 --- a/browser/base/content/browser-media.js +++ b/browser/base/content/browser-media.js @@ -5,12 +5,16 @@ var gEMEHandler = { get uiEnabled() { +#ifdef MOZ_EME let emeUIEnabled = Services.prefs.getBoolPref("browser.eme.ui.enabled"); // Force-disable on WinXP: if (navigator.platform.toLowerCase().startsWith("win")) { emeUIEnabled = emeUIEnabled && parseFloat(Services.sysinfo.get("version")) >= 6; } return emeUIEnabled; +#else + return false; +#endif }, ensureEMEEnabled: function(browser, keySystem) { Services.prefs.setBoolPref("media.eme.enabled", true); @@ -41,11 +45,23 @@ var gEMEHandler = { } return true; }, - getLearnMoreLink: function(msgId) { - let text = gNavigatorBundle.getString("emeNotifications." + msgId + ".learnMoreLabel"); + getEMEDisabledFragment: function(msgId) { + let mainMessage = gNavigatorBundle.getString("emeNotifications.drmContentDisabled.message"); + let [prefix, suffix] = mainMessage.split(/%(?:\$\d)?S/).map(s => document.createTextNode(s)); + let text = gNavigatorBundle.getString("emeNotifications.drmContentDisabled.learnMoreLabel"); let baseURL = Services.urlFormatter.formatURLPref("app.support.baseURL"); - return "<label class='text-link' href='" + baseURL + "drm-content'>" + - text + "</label>"; + let link = document.createElement("label"); + link.className = "text-link"; + link.setAttribute("href", baseURL + "drm-content"); + link.textContent = text; + + let fragment = document.createDocumentFragment(); + [prefix, link, suffix].forEach(n => fragment.appendChild(n)); + return fragment; + }, + getMessageWithBrandName: function(notificationId) { + let msgId = "emeNotifications." + notificationId + ".message"; + return gNavigatorBundle.getFormattedString(msgId, [this._brandShortName]); }, receiveMessage: function({target: browser, data: data}) { let parsedData; @@ -63,7 +79,8 @@ var gEMEHandler = { let notificationId; let buttonCallback; - let params = []; + // Notification message can be either a string or a DOM fragment. + let notificationMessage; switch (status) { case "available": case "cdm-created": @@ -78,17 +95,17 @@ var gEMEHandler = { case "cdm-disabled": notificationId = "drmContentDisabled"; buttonCallback = gEMEHandler.ensureEMEEnabled.bind(gEMEHandler, browser, keySystem) - params = [this.getLearnMoreLink(notificationId)]; + notificationMessage = this.getEMEDisabledFragment(); break; case "cdm-insufficient-version": notificationId = "drmContentCDMInsufficientVersion"; - params = [this._brandShortName]; + notificationMessage = this.getMessageWithBrandName(notificationId); break; case "cdm-not-installed": notificationId = "drmContentCDMInstalling"; - params = [this._brandShortName]; + notificationMessage = this.getMessageWithBrandName(notificationId); break; case "cdm-not-supported": @@ -100,44 +117,29 @@ var gEMEHandler = { return; } - this.showNotificationBar(browser, notificationId, keySystem, params, buttonCallback); - }, - showNotificationBar: function(browser, notificationId, keySystem, labelParams, callback) { + // Now actually create the notification + let box = gBrowser.getNotificationBox(browser); if (box.getNotificationWithValue(notificationId)) { return; } - let msgPrefix = "emeNotifications." + notificationId + "."; - let msgId = msgPrefix + "message"; - - let message = labelParams.length ? - gNavigatorBundle.getFormattedString(msgId, labelParams) : - gNavigatorBundle.getString(msgId); - let buttons = []; - if (callback) { + if (buttonCallback) { + let msgPrefix = "emeNotifications." + notificationId + "."; let btnLabelId = msgPrefix + "button.label"; let btnAccessKeyId = msgPrefix + "button.accesskey"; buttons.push({ label: gNavigatorBundle.getString(btnLabelId), accessKey: gNavigatorBundle.getString(btnAccessKeyId), - callback: callback + callback: buttonCallback }); } let iconURL = "chrome://browser/skin/drm-icon.svg#chains-black"; - // Do a little dance to get rich content into the notification: - let fragment = document.createDocumentFragment(); - let descriptionContainer = document.createElement("description"); - descriptionContainer.innerHTML = message; - while (descriptionContainer.childNodes.length) { - fragment.appendChild(descriptionContainer.childNodes[0]); - } - - box.appendNotification(fragment, notificationId, iconURL, box.PRIORITY_WARNING_MEDIUM, - buttons); + box.appendNotification(notificationMessage, notificationId, iconURL, + box.PRIORITY_WARNING_MEDIUM, buttons); }, showPopupNotificationForSuccess: function(browser, keySystem) { // We're playing EME content! Remove any "we can't play because..." messages. @@ -201,29 +203,16 @@ let gDecoderDoctorHandler = { getLabelForNotificationBox(type) { if (type == "adobe-cdm-not-found" && AppConstants.platform == "win") { - if (AppConstants.isPlatformAndVersionAtMost("win", "5.9")) { - // We supply our own Learn More button so we don't need to populate the message here. - return gNavigatorBundle.getFormattedString("emeNotifications.drmContentDisabled.message", [""]); - } return gNavigatorBundle.getString("decoder.noCodecs.message"); } if (type == "adobe-cdm-not-activated" && AppConstants.platform == "win") { - if (AppConstants.isPlatformAndVersionAtMost("win", "5.9")) { - return gNavigatorBundle.getString("decoder.noCodecsXP.message"); - } - if (!AppConstants.isPlatformAndVersionAtLeast("win", "6.1")) { - return gNavigatorBundle.getString("decoder.noCodecsVista.message"); - } return gNavigatorBundle.getString("decoder.noCodecs.message"); } if (type == "platform-decoder-not-found") { - if (AppConstants.isPlatformAndVersionAtLeast("win", "6.1")) { + if (AppConstants.platform == "win") { return gNavigatorBundle.getString("decoder.noHWAcceleration.message"); } - if (AppConstants.isPlatformAndVersionAtLeast("win", "6")) { - return gNavigatorBundle.getString("decoder.noHWAccelerationVista.message"); - } if (AppConstants.platform == "linux") { return gNavigatorBundle.getString("decoder.noCodecsLinux.message"); } diff --git a/browser/base/content/browser-menubar.inc b/browser/base/content/browser-menubar.inc index e952bc3ca..41734711c 100644 --- a/browser/base/content/browser-menubar.inc +++ b/browser/base/content/browser-menubar.inc @@ -34,12 +34,6 @@ accesskey="&newPrivateWindow.accesskey;" command="Tools:PrivateBrowsing" key="key_privatebrowsing"/> -#ifdef E10S_TESTING_ONLY - <menuitem id="menu_newNonRemoteWindow" - label="&newNonRemoteWindow.label;" - hidden="true" - command="Tools:NonRemoteWindow"/> -#endif #ifdef MAC_NON_BROWSER_WINDOW <menuitem id="menu_openLocation" label="&openLocationCmd.label;" @@ -179,15 +173,6 @@ label="&bidiSwitchTextDirectionItem.label;" accesskey="&bidiSwitchTextDirectionItem.accesskey;" hidden="true"/> -#ifdef XP_UNIX -#ifndef XP_MACOSX - <menuseparator/> - <menuitem id="menu_preferences" - label="&preferencesCmdUnix.label;" - accesskey="&preferencesCmdUnix.accesskey;" - oncommand="openPreferences();"/> -#endif -#endif </menupopup> </menu> @@ -521,13 +506,11 @@ <menupopup id="menu_mirrorTab-popup" onpopupshowing="populateMirrorTabMenu(this)"/> </menu> -#ifndef XP_UNIX <menuseparator id="prefSep"/> <menuitem id="menu_preferences" label="&preferencesCmd2.label;" accesskey="&preferencesCmd2.accesskey;" oncommand="openPreferences();"/> -#endif </menupopup> </menu> diff --git a/browser/base/content/browser-places.js b/browser/base/content/browser-places.js index 14e90cde2..83c737977 100644 --- a/browser/base/content/browser-places.js +++ b/browser/base/content/browser-places.js @@ -299,24 +299,23 @@ var StarUI = { parent.setAttribute("open", "true"); } } - let panel = this.panel; - let target = panel; - if (target.parentNode) { - // By targeting the panel's parent and using a capturing listener, we - // can have our listener called before others waiting for the panel to - // be shown (which probably expect the panel to be fully initialized) - target = target.parentNode; - } - target.addEventListener("popupshown", function shownListener(event) { - if (event.target == panel) { - target.removeEventListener("popupshown", shownListener, true); - - gEditItemOverlay.initPanel({ node: aNode - , hiddenRows: ["description", "location", - "loadInSidebar", "keyword"] - , focusedElement: "preferred"}); + let onPanelReady = fn => { + let target = this.panel; + if (target.parentNode) { + // By targeting the panel's parent and using a capturing listener, we + // can have our listener called before others waiting for the panel to + // be shown (which probably expect the panel to be fully initialized) + target = target.parentNode; } - }, true); + target.addEventListener("popupshown", function(event) { + fn(); + }, {"capture": true, "once": true}); + }; + gEditItemOverlay.initPanel({ node: aNode + , onPanelReady + , hiddenRows: ["description", "location", + "loadInSidebar", "keyword"] + , focusedElement: "preferred"}); this.panel.openPopup(aAnchorElement, aPosition); }), @@ -1555,6 +1554,10 @@ var BookmarkingUI = { // so kill current view and let popupshowing generate a new one. if (this.button._placesView) this.button._placesView.uninit(); + // ...and do the same for the menu bar. + let menubar = document.getElementById("bookmarksMenu"); + if (menubar && menubar._placesView) + menubar._placesView.uninit(); // We have to do the same thing for the "special" views underneath the // the bookmarks menu. diff --git a/browser/base/content/browser-plugins.js b/browser/base/content/browser-plugins.js index ad070df12..c1bc65860 100644 --- a/browser/base/content/browser-plugins.js +++ b/browser/base/content/browser-plugins.js @@ -63,9 +63,7 @@ var gPluginHandler = { msg.data.pluginID); break; case "PluginContent:SubmitReport": - if (AppConstants.MOZ_CRASHREPORTER) { - this.submitReport(msg.data.runID, msg.data.keyVals, msg.data.submitURLOptIn); - } + // Nothing to do here break; case "PluginContent:LinkClickCallback": switch (msg.data.name) { @@ -98,11 +96,8 @@ var gPluginHandler = { }, submitReport: function submitReport(runID, keyVals, submitURLOptIn) { - if (!AppConstants.MOZ_CRASHREPORTER) { - return; - } - Services.prefs.setBoolPref("dom.ipc.plugins.reportCrashURL", submitURLOptIn); - PluginCrashReporter.submitCrashReport(runID, keyVals); + /*** STUB ***/ + return; }, // Callback for user clicking a "reload page" link @@ -461,18 +456,7 @@ var gPluginHandler = { // If we don't have a minidumpID, we can't (or didn't) submit anything. // This can happen if the plugin is killed from the task manager. - let state; - if (!AppConstants.MOZ_CRASHREPORTER || !gCrashReporter.enabled) { - // This state tells the user that crash reporting is disabled, so we - // cannot send a report. - state = "noSubmit"; - } else if (!pluginDumpID) { - // This state tells the user that there is no crash report available. - state = "noReport"; - } else { - // This state asks the user to submit a crash report. - state = "please"; - } + let state = "noSubmit"; let mm = window.getGroupMessageManager("browsers"); mm.broadcastAsyncMessage("BrowserPlugins:NPAPIPluginProcessCrashed", @@ -513,22 +497,6 @@ var gPluginHandler = { callback: function() { browser.reload(); }, }]; - if (AppConstants.MOZ_CRASHREPORTER && - PluginCrashReporter.hasCrashReport(pluginID)) { - let submitLabel = gNavigatorBundle.getString("crashedpluginsMessage.submitButton.label"); - let submitKey = gNavigatorBundle.getString("crashedpluginsMessage.submitButton.accesskey"); - let submitButton = { - label: submitLabel, - accessKey: submitKey, - popup: null, - callback: () => { - PluginCrashReporter.submitCrashReport(pluginID); - }, - }; - - buttons.push(submitButton); - } - notification = notificationBox.appendNotification(messageString, "plugin-crashed", iconURL, priority, buttons); diff --git a/browser/base/content/browser-sets.inc b/browser/base/content/browser-sets.inc index a5a4ae8aa..0c753520f 100644 --- a/browser/base/content/browser-sets.inc +++ b/browser/base/content/browser-sets.inc @@ -103,10 +103,6 @@ oncommand="Cc['@mozilla.org/browser/browserglue;1'].getService(Ci.nsIBrowserGlue).sanitize(window);"/> <command id="Tools:PrivateBrowsing" oncommand="OpenBrowserWindow({private: true});" reserved="true"/> -#ifdef E10S_TESTING_ONLY - <command id="Tools:NonRemoteWindow" - oncommand="OpenBrowserWindow({remote: false});"/> -#endif <command id="History:UndoCloseTab" oncommand="undoCloseTab();"/> <command id="History:UndoCloseWindow" oncommand="undoCloseWindow();"/> <command id="Social:SharePage" oncommand="SocialShare.sharePage();"/> diff --git a/browser/base/content/browser-syncui.js b/browser/base/content/browser-syncui.js index c5c2995c8..51bcb15d5 100644 --- a/browser/base/content/browser-syncui.js +++ b/browser/base/content/browser-syncui.js @@ -4,10 +4,10 @@ Cu.import("resource://gre/modules/XPCOMUtils.jsm"); -if (AppConstants.MOZ_SERVICES_CLOUDSYNC) { - XPCOMUtils.defineLazyModuleGetter(this, "CloudSync", - "resource://gre/modules/CloudSync.jsm"); -} +#ifdef MOZ_SERVICES_CLOUDSYNC +XPCOMUtils.defineLazyModuleGetter(this, "CloudSync", + "resource://gre/modules/CloudSync.jsm"); +#endif XPCOMUtils.defineLazyModuleGetter(this, "fxAccounts", "resource://gre/modules/FxAccounts.jsm"); @@ -170,9 +170,13 @@ var gSyncUI = { document.getElementById("sync-setup-state").hidden = true; document.getElementById("sync-syncnow-state").hidden = true; +#ifdef MOZ_SERVICES_CLOUDSYNC if (CloudSync && CloudSync.ready && CloudSync().adapters.count) { document.getElementById("sync-syncnow-state").hidden = false; } else if (loginFailed) { +#else + if (loginFailed) { +#endif // unhiding this element makes the menubar show the login failure state. document.getElementById("sync-reauth-state").hidden = false; } else if (needsSetup) { diff --git a/browser/base/content/browser.css b/browser/base/content/browser.css index a05b031b2..f03f21c3f 100644 --- a/browser/base/content/browser.css +++ b/browser/base/content/browser.css @@ -557,7 +557,7 @@ toolbar:not(#TabsToolbar) > #personal-bookmarks { transition: none; } -#DateTimePickerPanel { +#DateTimePickerPanel[active="true"] { -moz-binding: url("chrome://global/content/bindings/datetimepopup.xml#datetime-popup"); } @@ -815,7 +815,6 @@ html|*#fullscreen-exit-button { .popup-anchor { /* should occupy space but not be visible */ opacity: 0; - visibility: hidden; pointer-events: none; -moz-stack-sizing: ignore; } diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js index 7b05e1da7..696a2871a 100755 --- a/browser/base/content/browser.js +++ b/browser/base/content/browser.js @@ -53,19 +53,16 @@ Cu.import("resource://gre/modules/NotificationDB.jsm"); ["UpdateUtils", "resource://gre/modules/UpdateUtils.jsm"], ["Weave", "resource://services-sync/main.js"], ["fxAccounts", "resource://gre/modules/FxAccounts.jsm"], +#ifdef MOZ_DEVTOOLS + // Note: Do not delete! It is used for: base/content/nsContextMenu.js ["gDevTools", "resource://devtools/client/framework/gDevTools.jsm"], - ["gDevToolsBrowser", "resource://devtools/client/framework/gDevTools.jsm"], +#endif ["webrtcUI", "resource:///modules/webrtcUI.jsm", ] ].forEach(([name, resource]) => XPCOMUtils.defineLazyModuleGetter(this, name, resource)); XPCOMUtils.defineLazyModuleGetter(this, "SafeBrowsing", "resource://gre/modules/SafeBrowsing.jsm"); -if (AppConstants.MOZ_CRASHREPORTER) { - XPCOMUtils.defineLazyModuleGetter(this, "PluginCrashReporter", - "resource:///modules/ContentCrashHandlers.jsm"); -} - // lazy service getters [ ["Favicons", "@mozilla.org/browser/favicon-service;1", "mozIAsyncFavicons"], @@ -74,13 +71,6 @@ if (AppConstants.MOZ_CRASHREPORTER) { ["gDNSService", "@mozilla.org/network/dns-service;1", "nsIDNSService"], ].forEach(([name, cc, ci]) => XPCOMUtils.defineLazyServiceGetter(this, name, cc, ci)); -if (AppConstants.MOZ_CRASHREPORTER) { - XPCOMUtils.defineLazyServiceGetter(this, "gCrashReporter", - "@mozilla.org/xre/app-info;1", - "nsICrashReporter"); -} - - XPCOMUtils.defineLazyGetter(this, "BrowserToolboxProcess", function() { let tmp = {}; Cu.import("resource://devtools/client/framework/ToolboxProcess.jsm", tmp); @@ -97,11 +87,6 @@ XPCOMUtils.defineLazyGetter(this, "gCustomizeMode", function() { return new scope.CustomizeMode(window); }); -XPCOMUtils.defineLazyGetter(window, "gShowPageResizers", function () { - // Only show resizers on Windows 2000 and XP - return AppConstants.isPlatformAndVersionAtMost("win", "5.9"); -}); - XPCOMUtils.defineLazyGetter(this, "gPrefService", function() { return Services.prefs; }); @@ -219,7 +204,8 @@ var gInitialPages = [ "about:home", "about:privatebrowsing", "about:welcomeback", - "about:sessionrestore" + "about:sessionrestore", + "about:logopage" ]; function* browserWindows() { @@ -473,9 +459,7 @@ var gPopupBlockerObserver = { var brandShortName = brandBundle.getString("brandShortName"); var popupCount = gBrowser.selectedBrowser.blockedPopups.length; - var stringKey = AppConstants.platform == "win" - ? "popupWarningButton" - : "popupWarningButtonUnix"; + var stringKey = "popupWarningButton"; var popupButtonText = gNavigatorBundle.getString(stringKey); var popupButtonAccesskey = gNavigatorBundle.getString(stringKey + ".accesskey"); @@ -1055,8 +1039,10 @@ var gBrowserInit = { window.matchMedia("(-moz-windows-default-theme)").matches) { let windowFrameColor = new Color(...Cu.import("resource:///modules/Windows8WindowFrameColor.jsm", {}) .Windows8WindowFrameColor.get()); - // Default to black for foreground text. - if (!windowFrameColor.isContrastRatioAcceptable(new Color(0, 0, 0))) { + // Check if window frame color is dark. + if ((windowFrameColor.r * 2 + + windowFrameColor.g * 5 + + windowFrameColor.b) <= 128 * 8) { document.documentElement.setAttribute("darkwindowframe", "true"); } } @@ -1222,9 +1208,6 @@ var gBrowserInit = { BrowserOffline.init(); IndexedDBPromptHelper.init(); - if (AppConstants.E10S_TESTING_ONLY) - gRemoteTabsUI.init(); - // Initialize the full zoom setting. // We do this before the session restore service gets initialized so we can // apply full zoom settings to tabs restored by the session restore service. @@ -1656,10 +1639,6 @@ if (AppConstants.platform == "macosx") { // initialize the sync UI gSyncUI.init(); - - if (AppConstants.E10S_TESTING_ONLY) { - gRemoteTabsUI.init(); - } }; gBrowserInit.nonBrowserWindowShutdown = function() { @@ -3372,8 +3351,6 @@ var PrintPreviewListener = { this._chromeState.notificationsOpen = !notificationBox.notificationsHidden; notificationBox.notificationsHidden = true; - gBrowser.updateWindowResizers(); - this._chromeState.findOpen = gFindBarInitialized && !gFindBar.hidden; if (gFindBarInitialized) gFindBar.close(); @@ -4596,23 +4573,6 @@ var XULBrowserWindow = { setTimeout(function () { XULBrowserWindow.asyncUpdateUI(); }, 0); else this.asyncUpdateUI(); - - if (AppConstants.MOZ_CRASHREPORTER && aLocationURI) { - let uri = aLocationURI.clone(); - try { - // If the current URI contains a username/password, remove it. - uri.userPass = ""; - } catch (ex) { /* Ignore failures on about: URIs. */ } - - try { - gCrashReporter.annotateCrashReport("URL", uri.spec); - } catch (ex) { - // Don't make noise when the crash reporter is built but not enabled. - if (ex.result != Components.results.NS_ERROR_NOT_INITIALIZED) { - throw ex; - } - } - } }, asyncUpdateUI: function () { @@ -5222,7 +5182,6 @@ function setToolbarVisibility(toolbar, isVisible, persist=true) { PlacesToolbarHelper.init(); BookmarkingUI.onToolbarVisibilityChange(); - gBrowser.updateWindowResizers(); if (isVisible) ToolbarIconColor.inferFromText(); } @@ -5686,7 +5645,7 @@ function middleMousePaste(event) { function stripUnsafeProtocolOnPaste(pasteData) { // Don't allow pasting javascript URIs since we don't support // LOAD_FLAGS_DISALLOW_INHERIT_PRINCIPAL for those. - return pasteData.replace(/^(?:\s*javascript:)+/i, ""); + return pasteData.replace(/\r?\n/g, "").replace(/^(?:\W*javascript:)+/i, ""); } // handleDroppedLink has the following 2 overloads: @@ -7843,16 +7802,6 @@ var TabContextMenu = { for (let menuItem of menuItems) menuItem.disabled = disabled; - if (AppConstants.E10S_TESTING_ONLY) { - menuItems = aPopupMenu.getElementsByAttribute("tbattr", "tabbrowser-remote"); - for (let menuItem of menuItems) { - menuItem.hidden = !gMultiProcessBrowser; - if (menuItem.id == "context_openNonRemoteWindow") { - menuItem.disabled = !!parseInt(this.contextTab.getAttribute("usercontextid")); - } - } - } - disabled = gBrowser.visibleTabs.length == 1; menuItems = aPopupMenu.getElementsByAttribute("tbattr", "tabbrowser-multiple-visible"); for (let menuItem of menuItems) @@ -7918,15 +7867,6 @@ var TabContextMenu = { } }; -Object.defineProperty(this, "HUDService", { - get: function HUDService_getter() { - let devtools = Cu.import("resource://devtools/shared/Loader.jsm", {}).devtools; - return devtools.require("devtools/client/webconsole/hudservice"); - }, - configurable: true, - enumerable: true -}); - // Prompt user to restart the browser in safe mode function safeModeRestart() { if (Services.appinfo.inSafeMode) { @@ -7984,30 +7924,6 @@ function duplicateTabIn(aTab, where, delta) { } } -var Scratchpad = { - openScratchpad: function SP_openScratchpad() { - return this.ScratchpadManager.openScratchpad(); - } -}; - -XPCOMUtils.defineLazyGetter(Scratchpad, "ScratchpadManager", function() { - let tmp = {}; - Cu.import("resource://devtools/client/scratchpad/scratchpad-manager.jsm", tmp); - return tmp.ScratchpadManager; -}); - -var ResponsiveUI = { - toggle: function RUI_toggle() { - this.ResponsiveUIManager.toggle(window, gBrowser.selectedTab); - } -}; - -XPCOMUtils.defineLazyGetter(ResponsiveUI, "ResponsiveUIManager", function() { - let tmp = {}; - Cu.import("resource://devtools/client/responsivedesign/responsivedesign.jsm", tmp); - return tmp.ResponsiveUIManager; -}); - var MousePosTracker = { _listeners: new Set(), _x: 0, @@ -8073,6 +7989,7 @@ var ToolbarIconColor = { window.addEventListener("activate", this); window.addEventListener("deactivate", this); Services.obs.addObserver(this, "lightweight-theme-styling-update", false); + gPrefService.addObserver("ui.colorChanged", this, false); // If the window isn't active now, we assume that it has never been active // before and will soon become active such that inferFromText will be @@ -8087,6 +8004,7 @@ var ToolbarIconColor = { window.removeEventListener("activate", this); window.removeEventListener("deactivate", this); Services.obs.removeObserver(this, "lightweight-theme-styling-update"); + gPrefService.removeObserver("ui.colorChanged", this); }, handleEvent: function (event) { @@ -8105,6 +8023,18 @@ var ToolbarIconColor = { // lightweight-theme-styling-update observer. setTimeout(() => { this.inferFromText(); }, 0); break; + case "nsPref:changed": + // system color change + var colorChangedPref = false; + try { + colorChangedPref = gPrefService.getBoolPref("ui.colorChanged"); + } catch(e) { } + // if pref indicates change, call inferFromText() on a small delay + if (colorChangedPref == true) + setTimeout(() => { this.inferFromText(); }, 300); + break; + default: + console.error("ToolbarIconColor: Uncaught topic " + aTopic); } }, @@ -8128,16 +8058,19 @@ var ToolbarIconColor = { let luminances = new Map; for (let toolbar of document.querySelectorAll(toolbarSelector)) { let [r, g, b] = parseRGB(getComputedStyle(toolbar).color); - let luminance = 0.2125 * r + 0.7154 * g + 0.0721 * b; + let luminance = (2 * r + 5 * g + b) / 8; luminances.set(toolbar, luminance); } for (let [toolbar, luminance] of luminances) { - if (luminance <= 110) + if (luminance <= 128) toolbar.removeAttribute("brighttext"); else toolbar.setAttribute("brighttext", "true"); } + + // Clear pref if set, since we're done applying the color changes. + gPrefService.clearUserPref("ui.colorChanged"); } } diff --git a/browser/base/content/browser.xul b/browser/base/content/browser.xul index 2c74aecdf..485471ee3 100644 --- a/browser/base/content/browser.xul +++ b/browser/base/content/browser.xul @@ -9,7 +9,9 @@ <?xml-stylesheet href="chrome://browser/content/browser.css" type="text/css"?> <?xml-stylesheet href="chrome://browser/content/places/places.css" type="text/css"?> <?xml-stylesheet href="chrome://browser/content/usercontext/usercontext.css" type="text/css"?> +#ifdef MOZ_DEVTOOLS <?xml-stylesheet href="chrome://devtools/skin/devtools-browser.css" type="text/css"?> +#endif <?xml-stylesheet href="chrome://browser/skin/controlcenter/panel.css" type="text/css"?> <?xml-stylesheet href="chrome://browser/skin/customizableui/panelUI.css" type="text/css"?> <?xml-stylesheet href="chrome://browser/skin/" type="text/css"?> @@ -98,12 +100,6 @@ accesskey="&moveToNewWindow.accesskey;" tbattr="tabbrowser-multiple" oncommand="gBrowser.replaceTabWithWindow(TabContextMenu.contextTab);"/> -#ifdef E10S_TESTING_ONLY - <menuitem id="context_openNonRemoteWindow" label="Open in new non-e10s window" - tbattr="tabbrowser-remote" - hidden="true" - oncommand="gBrowser.openNonRemoteWindow(TabContextMenu.contextTab);"/> -#endif <menuseparator id="context_sendTabToDevice_separator" hidden="true"/> <menu id="context_sendTabToDevice" label="&sendTabToDevice.label;" accesskey="&sendTabToDevice.accesskey;" hidden="true"> @@ -161,13 +157,17 @@ level="parent" overflowpadding="30" /> + <!-- for date/time picker. consumeoutsideclicks is set to never, so that + clicks on the anchored input box are never consumed. --> <panel id="DateTimePickerPanel" type="arrow" hidden="true" orient="vertical" noautofocus="true" - consumeoutsideclicks="false" - level="parent"> + norolluponanchor="true" + consumeoutsideclicks="never" + level="parent" + tabspecific="true"> <iframe id="dateTimePopupFrame"/> </panel> @@ -546,10 +546,8 @@ #ifdef MENUBAR_CAN_AUTOHIDE toolbarname="&menubarCmd.label;" accesskey="&menubarCmd.accesskey;" -#if defined(MOZ_WIDGET_GTK) autohide="true" #endif -#endif context="toolbar-context-menu"> <toolbaritem id="menubar-items" align="center"> # The entire main menubar is placed into browser-menubar.inc, so that it can be shared by diff --git a/browser/base/content/newtab/customize.js b/browser/base/content/newtab/customize.js index 28a52373c..39724fa91 100644 --- a/browser/base/content/newtab/customize.js +++ b/browser/base/content/newtab/customize.js @@ -25,7 +25,6 @@ var gCustomize = { this._nodes.button.addEventListener("click", e => this.showPanel(e)); this._nodes.blank.addEventListener("click", this); this._nodes.classic.addEventListener("click", this); - this._nodes.enhanced.addEventListener("click", this); this._nodes.learn.addEventListener("click", this); this.updateSelected(); @@ -87,11 +86,7 @@ var gCustomize = { sendAsyncMessage("NewTab:Customize", {enabled: false, enhanced: false}); break; case "newtab-customize-classic": - if (this._nodes.enhanced.getAttribute("selected")){ - sendAsyncMessage("NewTab:Customize", {enabled: true, enhanced: true}); - } else { - sendAsyncMessage("NewTab:Customize", {enabled: true, enhanced: false}); - } + sendAsyncMessage("NewTab:Customize", {enabled: true, enhanced: false}); break; case "newtab-customize-enhanced": sendAsyncMessage("NewTab:Customize", {enabled: true, enhanced: !gAllPages.enhanced}); @@ -114,9 +109,9 @@ var gCustomize = { }, updateSelected: function() { - let {enabled, enhanced} = gAllPages; - let selected = enabled ? enhanced ? "enhanced" : "classic" : "blank"; - ["enhanced", "classic", "blank"].forEach(id => { + let {enabled} = gAllPages; + let selected = enabled ? "classic" : "blank"; + ["classic", "blank"].forEach(id => { let node = this._nodes[id]; if (id == selected) { node.setAttribute("selected", true); @@ -125,9 +120,5 @@ var gCustomize = { node.removeAttribute("selected"); } }); - if (selected == "enhanced") { - // If enhanced is selected, so is classic (since enhanced is a subitem of classic) - this._nodes.classic.setAttribute("selected", true); - } }, }; diff --git a/browser/base/content/newtab/newTab.xhtml b/browser/base/content/newtab/newTab.xhtml index 07fb0093e..eef51b4b2 100644 --- a/browser/base/content/newtab/newTab.xhtml +++ b/browser/base/content/newtab/newTab.xhtml @@ -33,15 +33,8 @@ <div id="newtab-customize-title" class="newtab-customize-panel-item"> <label>&newtab.customize.cog.title2;</label> </div> - - <div class="newtab-customize-complex-option"> - <div id="newtab-customize-classic" class="newtab-customize-panel-superitem newtab-customize-panel-item selectable"> - <label>&newtab.customize.classic;</label> - </div> - <div id="newtab-customize-enhanced" class="newtab-customize-panel-subitem"> - <label class="checkbox"></label> - <label>&newtab.customize.cog.enhanced;</label> - </div> + <div id="newtab-customize-classic" class="newtab-customize-panel-item selectable"> + <label>&newtab.customize.classic;</label> </div> <div id="newtab-customize-blank" class="newtab-customize-panel-item selectable"> <label>&newtab.customize.blank2;</label> diff --git a/browser/base/content/nsContextMenu.js b/browser/base/content/nsContextMenu.js index 8eb9b034f..ddf695202 100644 --- a/browser/base/content/nsContextMenu.js +++ b/browser/base/content/nsContextMenu.js @@ -1158,7 +1158,8 @@ nsContextMenu.prototype = { this.browser.contentPrincipal, Ci.nsIScriptSecurityManager.DISALLOW_SCRIPT); openUILink(this.mediaURL, e, { disallowInheritPrincipal: true, - referrerURI: referrerURI }); + referrerURI: referrerURI, + forceAllowDataURI: true }); } }, diff --git a/browser/base/content/overrides/app-license.html b/browser/base/content/overrides/app-license.html index e7a158c79..0a1f0d8f5 100644 --- a/browser/base/content/overrides/app-license.html +++ b/browser/base/content/overrides/app-license.html @@ -2,5 +2,6 @@ - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> <p><b>Binaries</b> of this product have been made available to you by the - <a href="http://www.mozilla.org/">Mozilla Project</a> under the Mozilla + <a href="http://www.palemoon.org/">Pale Moon project team</a> and + <a href="http://www.moonchildproductions.info/">Moonchild Productions</a> under the Mozilla Public License 2.0 (MPL). <a href="about:rights">Know your rights</a>.</p> diff --git a/browser/base/content/sync/aboutSyncTabs.js b/browser/base/content/sync/aboutSyncTabs.js index 0c5dbb2d8..f4bb607ea 100644 --- a/browser/base/content/sync/aboutSyncTabs.js +++ b/browser/base/content/sync/aboutSyncTabs.js @@ -7,7 +7,6 @@ var Cu = Components.utils; Cu.import("resource://services-common/utils.js"); Cu.import("resource://services-sync/main.js"); Cu.import("resource:///modules/PlacesUIUtils.jsm"); -Cu.import("resource://gre/modules/AppConstants.jsm"); Cu.import("resource://gre/modules/PlacesUtils.jsm", this); Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://gre/modules/XPCOMUtils.jsm"); @@ -15,10 +14,10 @@ Cu.import("resource://gre/modules/XPCOMUtils.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "Promise", "resource://gre/modules/Promise.jsm"); -if (AppConstants.MOZ_SERVICES_CLOUDSYNC) { - XPCOMUtils.defineLazyModuleGetter(this, "CloudSync", - "resource://gre/modules/CloudSync.jsm"); -} +#ifdef MOZ_SERVICES_CLOUDSYNC +XPCOMUtils.defineLazyModuleGetter(this, "CloudSync", + "resource://gre/modules/CloudSync.jsm"); +#endif var RemoteTabViewer = { _tabsList: null, @@ -184,12 +183,16 @@ var RemoteTabViewer = { } } +#ifdef MOZ_SERVICES_CLOUDSYNC if (CloudSync && CloudSync.ready && CloudSync().tabsReady && CloudSync().tabs.hasRemoteTabs()) { this._generateCloudSyncTabList() .then(complete, complete); } else { complete(); } +#else + complete(); +#endif }, _clearTabList: function () { diff --git a/browser/base/content/sync/customize.xul b/browser/base/content/sync/customize.xul index d95536d9a..827edf565 100644 --- a/browser/base/content/sync/customize.xul +++ b/browser/base/content/sync/customize.xul @@ -31,12 +31,7 @@ <label id="sync-customize-title" value="&syncCustomize.title;"/> <description id="sync-customize-subtitle" -#ifdef XP_UNIX - value="&syncCustomizeUnix.description;" -#else - value="&syncCustomize.description;" -#endif - /> + value="&syncCustomize.description;"/> <vbox align="start"> <checkbox label="&engine.tabs.label;" diff --git a/browser/base/content/tab-content.js b/browser/base/content/tab-content.js index 06fa3d9cc..7e803796a 100644 --- a/browser/base/content/tab-content.js +++ b/browser/base/content/tab-content.js @@ -9,7 +9,9 @@ var {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components; Cu.import("resource://gre/modules/XPCOMUtils.jsm"); Cu.import("resource://gre/modules/Services.jsm"); +#ifdef MOZ_WEBEXTENSIONS Cu.import("resource://gre/modules/ExtensionContent.jsm"); +#endif XPCOMUtils.defineLazyModuleGetter(this, "E10SUtils", "resource:///modules/E10SUtils.jsm"); @@ -145,13 +147,10 @@ var AboutHomeListener = { if (aData.showRestoreLastSession && !PrivateBrowsingUtils.isContentWindowPrivate(content)) doc.getElementById("launcher").setAttribute("session", "true"); - // Inject search engine and snippets URL. + // Inject search engine URL. let docElt = doc.documentElement; - // Set snippetsVersion last, which triggers to show the snippets when it's set. - docElt.setAttribute("snippetsURL", aData.snippetsURL); if (aData.showKnowYourRights) docElt.setAttribute("showKnowYourRights", "true"); - docElt.setAttribute("snippetsVersion", aData.snippetsVersion); }, onPageLoad: function() { @@ -929,11 +928,13 @@ var UserContextIdNotifier = { UserContextIdNotifier.init(); +#ifdef MOZ_WEBEXTENSIONS ExtensionContent.init(this); addEventListener("unload", () => { ExtensionContent.uninit(this); RefreshBlocker.uninit(); }); +#endif addMessageListener("AllowScriptsToClose", () => { content.QueryInterface(Ci.nsIInterfaceRequestor) diff --git a/browser/base/content/tabbrowser.xml b/browser/base/content/tabbrowser.xml index 3f4c3518e..b27846835 100644 --- a/browser/base/content/tabbrowser.xml +++ b/browser/base/content/tabbrowser.xml @@ -214,18 +214,6 @@ ]]></body> </method> - <method name="updateWindowResizers"> - <body><![CDATA[ - if (!window.gShowPageResizers) - return; - - var show = window.windowState == window.STATE_NORMAL; - for (let i = 0; i < this.browsers.length; i++) { - this.browsers[i].showWindowResizer = show; - } - ]]></body> - </method> - <method name="_setCloseKeyState"> <parameter name="aEnabled"/> <body><![CDATA[ @@ -1970,10 +1958,6 @@ b.QueryInterface(Ci.nsIFrameLoaderOwner).presetOpenerWindow(aParams.opener); } - if (window.gShowPageResizers && window.windowState == window.STATE_NORMAL) { - b.setAttribute("showresizer", "true"); - } - if (!aParams.isPreloadBrowser && this.hasAttribute("autocompletepopup")) { b.setAttribute("autocompletepopup", this.getAttribute("autocompletepopup")); } @@ -3238,20 +3222,6 @@ </body> </method> - <!-- Opens a given tab to a non-remote window. --> - <method name="openNonRemoteWindow"> - <parameter name="aTab"/> - <body> - <![CDATA[ - if (!this.AppConstants.E10S_TESTING_ONLY) { - throw "This method is intended only for e10s testing!"; - } - let url = aTab.linkedBrowser.currentURI.spec; - return window.openDialog("chrome://browser/content/", "_blank", "chrome,all,dialog=no,non-remote", url); - ]]> - </body> - </method> - <method name="moveTabTo"> <parameter name="aTab"/> <parameter name="aIndex"/> @@ -4597,8 +4567,7 @@ label = this.mStringBundle.getString(stringID); } } else { - label = tab.getAttribute("label") + - (this.AppConstants.E10S_TESTING_ONLY && tab.linkedBrowser && tab.linkedBrowser.isRemoteBrowser ? " - e10s" : ""); + label = tab.getAttribute("label"); } event.target.setAttribute("label", label); ]]></body> @@ -4835,7 +4804,6 @@ this.appendChild(this._autoScrollPopup); this.mCurrentBrowser.setAttribute("autoscrollpopup", this._autoScrollPopup.id); this.mCurrentBrowser.droppedLinkHandler = handleDroppedLink; - this.updateWindowResizers(); // Hook up the event listeners to the first browser var tabListener = this.mTabProgressListener(this.mCurrentTab, this.mCurrentBrowser, true, false); @@ -5854,8 +5822,6 @@ this._handleTabSelect(); this.mTabstripWidth = width; } - - this.tabbrowser.updateWindowResizers(); break; case "mouseout": // If the "related target" (the node to which the pointer went) is not diff --git a/browser/base/content/urlbarBindings.xml b/browser/base/content/urlbarBindings.xml index 84ed693ff..eb3150581 100644 --- a/browser/base/content/urlbarBindings.xml +++ b/browser/base/content/urlbarBindings.xml @@ -56,10 +56,11 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. <field name="AppConstants" readonly="true"> (Components.utils.import("resource://gre/modules/AppConstants.jsm", {})).AppConstants; </field> - +#ifdef MOZ_WEBEXTENSIONS <field name="ExtensionSearchHandler" readonly="true"> (Components.utils.import("resource://gre/modules/ExtensionSearchHandler.jsm", {})).ExtensionSearchHandler; </field> +#endif <constructor><![CDATA[ this._prefs = Components.classes["@mozilla.org/preferences-service;1"] @@ -487,6 +488,7 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. actionDetails ); break; +#ifdef MOZ_WEBEXTENSIONS case "extension": this.handleRevert(); // Give the extension control of handling the command. @@ -494,6 +496,7 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. let keyword = action.params.keyword; this.ExtensionSearchHandler.handleInputEntered(keyword, searchString, where); return; +#endif } } else { // This is a fallback for add-ons and old testing code that directly @@ -701,38 +704,51 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. ]]></body> </method> - <method name="onDragOver"> - <parameter name="aEvent"/> - <body> - var types = aEvent.dataTransfer.types; - if (types.includes("application/x-moz-file") || - types.includes("text/x-moz-url") || - types.includes("text/uri-list") || - types.includes("text/unicode")) - aEvent.preventDefault(); - </body> - </method> - - <method name="onDrop"> + <method name="_getDroppableLink"> <parameter name="aEvent"/> <body><![CDATA[ let links = browserDragAndDrop.dropLinks(aEvent); - // The URL bar automatically handles inputs with newline characters, // so we can get away with treating text/x-moz-url flavours as text/plain. if (links.length > 0 && links[0].url) { - let url = links[0].url; aEvent.preventDefault(); - this.value = url; - SetPageProxyState("invalid"); - this.focus(); + let url = links[0].url; + let strippedURL = stripUnsafeProtocolOnPaste(url); + if (strippedURL != url) { + aEvent.stopImmediatePropagation(); + return null; + } try { urlSecurityCheck(url, gBrowser.contentPrincipal, Ci.nsIScriptSecurityManager.DISALLOW_INHERIT_PRINCIPAL); } catch (ex) { - return; + return null; } + return url; + } + return null; + ]]></body> + </method> + + <method name="onDragOver"> + <parameter name="aEvent"/> + <body><![CDATA[ + // We don't need the link here, so we ignore the return value. + if (!this._getDroppableLink(aEvent)) { + aEvent.dataTransfer.dropEffect = "none"; + } + ]]></body> + </method> + + <method name="onDrop"> + <parameter name="aEvent"/> + <body><![CDATA[ + let url = this._getDroppableLink(aEvent); + if (url) { + this.value = url; + SetPageProxyState("invalid"); + this.focus(); this.handleCommand(); // Force not showing the dropped URI immediately. gBrowser.userTypedValue = null; @@ -932,7 +948,7 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. // Unfortunately we're not allowed to set the bits being pasted // so cancel this event: aEvent.preventDefault(); - aEvent.stopPropagation(); + aEvent.stopImmediatePropagation(); this.inputField.value = oldStart + pasteData + oldEnd; // Fix up cursor/selection: @@ -1198,9 +1214,11 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. this._clearNoActions(); this.formatValue(); } +#ifdef MOZ_WEBEXTENSIONS if (ExtensionSearchHandler.hasActiveInputSession()) { ExtensionSearchHandler.handleInputCancelled(); } +#endif ]]></handler> <handler event="dragstart" phase="capturing"><![CDATA[ diff --git a/browser/base/content/utilityOverlay.js b/browser/base/content/utilityOverlay.js index 7da54e064..6ceaf773e 100644 --- a/browser/base/content/utilityOverlay.js +++ b/browser/base/content/utilityOverlay.js @@ -35,7 +35,7 @@ var gBidiUI = false; * Determines whether the given url is considered a special URL for new tabs. */ function isBlankPageURL(aURL) { - return aURL == "about:blank" || aURL == BROWSER_NEW_TAB_URL; + return aURL == "about:blank" || aURL == "about:newtab" || aURL == "about:logopage"; } function getBrowserURL() @@ -197,6 +197,7 @@ function openUILinkIn(url, where, aAllowThirdPartyFixup, aPostData, aReferrerURI openLinkIn(url, where, params); } +/* eslint-disable complexity */ function openLinkIn(url, where, params) { if (!where || !url) return; @@ -212,6 +213,7 @@ function openLinkIn(url, where, params) { params.referrerPolicy : Ci.nsIHttpChannel.REFERRER_POLICY_DEFAULT); var aRelatedToCurrent = params.relatedToCurrent; var aAllowMixedContent = params.allowMixedContent; + var aForceAllowDataURI = params.forceAllowDataURI; var aInBackground = params.inBackground; var aDisallowInheritPrincipal = params.disallowInheritPrincipal; var aInitiatingDoc = params.initiatingDoc; @@ -258,6 +260,12 @@ function openLinkIn(url, where, params) { } if (!w || where == "window") { + // Strip referrer data when opening a new private window, to prevent + // regular browsing data from leaking into it. + if (aIsPrivate) { + aNoReferrer = true; + } + // This propagates to window.arguments. var sa = Cc["@mozilla.org/array;1"]. createInstance(Ci.nsIMutableArray); @@ -372,6 +380,9 @@ function openLinkIn(url, where, params) { if (aIndicateErrorPageLoad) { flags |= Ci.nsIWebNavigation.LOAD_FLAGS_ERROR_LOAD_CHANGES_RV; } + if (aForceAllowDataURI) { + flags |= Ci.nsIWebNavigation.LOAD_FLAGS_FORCE_ALLOW_DATA_URI; + } let {URI_INHERITS_SECURITY_CONTEXT} = Ci.nsIProtocolHandler; if (aForceAboutBlankViewerInCurrent && diff --git a/browser/base/content/win6BrowserOverlay.xul b/browser/base/content/win6BrowserOverlay.xul deleted file mode 100644 index a69e3f6bd..000000000 --- a/browser/base/content/win6BrowserOverlay.xul +++ /dev/null @@ -1,12 +0,0 @@ -<?xml version="1.0"?> - -<!-- -*- Mode: HTML -*- --> -<!-- This Source Code Form is subject to the terms of the Mozilla Public - - License, v. 2.0. If a copy of the MPL was not distributed with this - - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - -<overlay id="win6-browser-overlay" - xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> - <toolbar id="toolbar-menubar" - autohide="true"/> -</overlay> diff --git a/browser/base/jar.mn b/browser/base/jar.mn index 38b103c43..c58265351 100644 --- a/browser/base/jar.mn +++ b/browser/base/jar.mn @@ -8,9 +8,6 @@ browser.jar: % overlay chrome://mozapps/content/update/updates.xul chrome://browser/content/softwareUpdateOverlay.xul % overlay chrome://global/content/console.xul chrome://browser/content/jsConsoleOverlay.xul #endif -#ifdef XP_WIN -% overlay chrome://browser/content/browser.xul chrome://browser/content/win6BrowserOverlay.xul os=WINNT osversion>=6 -#endif % overlay chrome://global/content/viewSource.xul chrome://browser/content/viewSourceOverlay.xul % overlay chrome://global/content/viewPartialSource.xul chrome://browser/content/viewSourceOverlay.xul @@ -70,7 +67,7 @@ browser.jar: content/browser/aboutTabCrashed.js (content/aboutTabCrashed.js) content/browser/aboutTabCrashed.xhtml (content/aboutTabCrashed.xhtml) * content/browser/browser.css (content/browser.css) - content/browser/browser.js (content/browser.js) +* content/browser/browser.js (content/browser.js) * content/browser/browser.xul (content/browser.xul) content/browser/browser-addons.js (content/browser-addons.js) content/browser/browser-captivePortal.js (content/browser-captivePortal.js) @@ -83,14 +80,14 @@ browser.jar: content/browser/browser-fullZoom.js (content/browser-fullZoom.js) content/browser/browser-fxaccounts.js (content/browser-fxaccounts.js) content/browser/browser-gestureSupport.js (content/browser-gestureSupport.js) - content/browser/browser-media.js (content/browser-media.js) +* content/browser/browser-media.js (content/browser-media.js) content/browser/browser-places.js (content/browser-places.js) content/browser/browser-plugins.js (content/browser-plugins.js) content/browser/browser-refreshblocker.js (content/browser-refreshblocker.js) content/browser/browser-safebrowsing.js (content/browser-safebrowsing.js) content/browser/browser-sidebar.js (content/browser-sidebar.js) content/browser/browser-social.js (content/browser-social.js) - content/browser/browser-syncui.js (content/browser-syncui.js) +* content/browser/browser-syncui.js (content/browser-syncui.js) * content/browser/browser-tabPreviews.xml (content/browser-tabPreviews.xml) #ifdef CAN_DRAW_IN_TITLEBAR content/browser/browser-tabsintitlebar.js (content/browser-tabsintitlebar.js) @@ -99,7 +96,7 @@ browser.jar: #endif content/browser/browser-thumbnails.js (content/browser-thumbnails.js) content/browser/browser-trackingprotection.js (content/browser-trackingprotection.js) - content/browser/tab-content.js (content/tab-content.js) +* content/browser/tab-content.js (content/tab-content.js) content/browser/content.js (content/content.js) content/browser/social-content.js (content/social-content.js) content/browser/defaultthemes/1.footer.jpg (content/defaultthemes/1.footer.jpg) @@ -141,7 +138,7 @@ browser.jar: content/browser/pageinfo/permissions.js (content/pageinfo/permissions.js) content/browser/pageinfo/security.js (content/pageinfo/security.js) content/browser/sync/aboutSyncTabs.xul (content/sync/aboutSyncTabs.xul) - content/browser/sync/aboutSyncTabs.js (content/sync/aboutSyncTabs.js) +* content/browser/sync/aboutSyncTabs.js (content/sync/aboutSyncTabs.js) content/browser/sync/aboutSyncTabs.css (content/sync/aboutSyncTabs.css) content/browser/sync/aboutSyncTabs-bindings.xml (content/sync/aboutSyncTabs-bindings.xml) content/browser/sync/setup.xul (content/sync/setup.xul) @@ -152,7 +149,7 @@ browser.jar: content/browser/sync/genericChange.js (content/sync/genericChange.js) content/browser/sync/key.xhtml (content/sync/key.xhtml) content/browser/sync/utils.js (content/sync/utils.js) -* content/browser/sync/customize.xul (content/sync/customize.xul) + content/browser/sync/customize.xul (content/sync/customize.xul) content/browser/sync/customize.js (content/sync/customize.js) content/browser/sync/customize.css (content/sync/customize.css) content/browser/safeMode.css (content/safeMode.css) @@ -166,7 +163,7 @@ browser.jar: content/browser/contentSearchUI.css (content/contentSearchUI.css) content/browser/tabbrowser.css (content/tabbrowser.css) content/browser/tabbrowser.xml (content/tabbrowser.xml) - content/browser/urlbarBindings.xml (content/urlbarBindings.xml) +* content/browser/urlbarBindings.xml (content/urlbarBindings.xml) content/browser/utilityOverlay.js (content/utilityOverlay.js) content/browser/usercontext.svg (content/usercontext.svg) content/browser/web-panels.js (content/web-panels.js) @@ -186,9 +183,6 @@ browser.jar: * content/browser/webrtcIndicator.xul (content/webrtcIndicator.xul) content/browser/webrtcIndicator.js (content/webrtcIndicator.js) #endif -#ifdef XP_WIN - content/browser/win6BrowserOverlay.xul (content/win6BrowserOverlay.xul) -#endif # the following files are browser-specific overrides * content/browser/license.html (/toolkit/content/license.html) % override chrome://global/content/license.html chrome://browser/content/license.html diff --git a/browser/branding/aurora/VisualElements_150.png b/browser/branding/aurora/VisualElements_150.png Binary files differdeleted file mode 100644 index 92370ee7a..000000000 --- a/browser/branding/aurora/VisualElements_150.png +++ /dev/null diff --git a/browser/branding/aurora/VisualElements_70.png b/browser/branding/aurora/VisualElements_70.png Binary files differdeleted file mode 100644 index aa206c51e..000000000 --- a/browser/branding/aurora/VisualElements_70.png +++ /dev/null diff --git a/browser/branding/aurora/appname.bmp b/browser/branding/aurora/appname.bmp Binary files differdeleted file mode 100644 index 904794ddb..000000000 --- a/browser/branding/aurora/appname.bmp +++ /dev/null diff --git a/browser/branding/aurora/background.png b/browser/branding/aurora/background.png Binary files differdeleted file mode 100644 index 704d1c2eb..000000000 --- a/browser/branding/aurora/background.png +++ /dev/null diff --git a/browser/branding/aurora/bgintro.bmp b/browser/branding/aurora/bgintro.bmp Binary files differdeleted file mode 100644 index 02ef9b336..000000000 --- a/browser/branding/aurora/bgintro.bmp +++ /dev/null diff --git a/browser/branding/aurora/branding.nsi b/browser/branding/aurora/branding.nsi deleted file mode 100644 index bb42794d1..000000000 --- a/browser/branding/aurora/branding.nsi +++ /dev/null @@ -1,49 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -# NSIS branding defines for Aurora builds. -# The official release build branding.nsi is located in other-license/branding/firefox/ -# The unofficial build branding.nsi is located in browser/branding/unofficial/ - -# BrandFullNameInternal is used for some registry and file system values -# instead of BrandFullName and typically should not be modified. -!define BrandFullNameInternal "Firefox Developer Edition" -!define BrandShortName "Firefox Developer Edition" -!define CompanyName "mozilla.org" -!define URLInfoAbout "https://www.mozilla.org" -!define HelpLink "https://support.mozilla.org" - -!define URLStubDownload "http://download.mozilla.org/?os=win&lang=${AB_CD}&product=firefox-aurora-latest" -!define URLManualDownload "https://www.mozilla.org/${AB_CD}/firefox/installer-help/?channel=aurora&installer_lang=${AB_CD}" -!define URLSystemRequirements "https://www.mozilla.org/firefox/system-requirements/" -!define Channel "aurora" - -# The installer's certificate name and issuer expected by the stub installer -!define CertNameDownload "Mozilla Corporation" -!define CertIssuerDownload "DigiCert SHA2 Assured ID Code Signing CA" - -# Dialog units are used so the UI displays correctly with the system's DPI -# settings. -# The dialog units for the bitmap's dimensions should match exactly with the -# bitmap's width and height in pixels. -!define APPNAME_BMP_WIDTH_DU 108u -!define APPNAME_BMP_HEIGHT_DU 48u -!define INTRO_BLURB_WIDTH_DU "232u" -!define INTRO_BLURB_EDGE_DU "196u" -!define INTRO_BLURB_LTR_TOP_DU "16u" -!define INTRO_BLURB_RTL_TOP_DU "11u" - -# UI Colors that can be customized for each channel -!define FOOTER_CONTROL_TEXT_COLOR_NORMAL 0x000000 -!define FOOTER_CONTROL_TEXT_COLOR_FADED 0x999999 -!define FOOTER_BKGRD_COLOR 0xFFFFFF -!define INTRO_BLURB_TEXT_COLOR 0xFFFFFF -!define INSTALL_BLURB_TEXT_COLOR 0xFFFFFF -!define INSTALL_PROGRESS_TEXT_COLOR_NORMAL 0xFFFFFF -!define COMMON_TEXT_COLOR_NORMAL 0xFFFFFF -!define COMMON_TEXT_COLOR_FADED 0xA1AAB3 -!define COMMON_BKGRD_COLOR 0x0F1B26 - -# Enable DeveloperEdition-specific behavior -!define DEV_EDITION diff --git a/browser/branding/aurora/clock.bmp b/browser/branding/aurora/clock.bmp Binary files differdeleted file mode 100644 index c74398edb..000000000 --- a/browser/branding/aurora/clock.bmp +++ /dev/null diff --git a/browser/branding/aurora/configure.sh b/browser/branding/aurora/configure.sh deleted file mode 100644 index 36feb0828..000000000 --- a/browser/branding/aurora/configure.sh +++ /dev/null @@ -1,7 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -MOZ_APP_DISPLAYNAME=FirefoxDeveloperEdition -MOZ_APP_REMOTINGNAME=firefox-dev -MOZ_DEV_EDITION=1 diff --git a/browser/branding/aurora/content/about-background.png b/browser/branding/aurora/content/about-background.png Binary files differdeleted file mode 100644 index 1fd5c9c88..000000000 --- a/browser/branding/aurora/content/about-background.png +++ /dev/null diff --git a/browser/branding/aurora/content/about-logo.png b/browser/branding/aurora/content/about-logo.png Binary files differdeleted file mode 100644 index e3b7e1c8b..000000000 --- a/browser/branding/aurora/content/about-logo.png +++ /dev/null diff --git a/browser/branding/aurora/content/about-logo@2x.png b/browser/branding/aurora/content/about-logo@2x.png Binary files differdeleted file mode 100644 index 08dd73dd6..000000000 --- a/browser/branding/aurora/content/about-logo@2x.png +++ /dev/null diff --git a/browser/branding/aurora/content/about-wordmark.svg b/browser/branding/aurora/content/about-wordmark.svg deleted file mode 100644 index b1b435b7a..000000000 --- a/browser/branding/aurora/content/about-wordmark.svg +++ /dev/null @@ -1,61 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?>
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 132 62" width="132" height="62">
- <path fill="#fff" d="M5.3,45.2H2.7L0.1,57.3h3.2c1.8,0,3-0.4,4.2-1.5c1.4-1.2,2.6-4.1,2.6-6.2c0-1.7-0.4-2.8-1.2-3.5C8,45.4,7.1,45.2,5.3,45.2z
- M6.6,54.9c-0.7,0.9-1.9,1.3-3.5,1.3H1.8l2.1-9.8h1.5c1.3,0,2,0.2,2.6,1.1c0.4,0.5,0.5,1.3,0.5,2.4C8.5,51.2,7.9,53.4,6.6,54.9z
- M15.3,48.3c-1.1,0-2,0.4-2.9,1.2c-1.3,1.2-2,3.1-2,4.8c0,2,1.3,3.2,2.9,3.2c1.8,0,2.7-0.4,3.6-1.3l-0.6-0.8c-0.8,0.7-1.5,1-2.6,1
- c-0.9,0-1.8-0.7-1.8-1.9c0-0.3,0-0.7,0.1-1.1c0.4,0,0.8,0,1.1,0c1.9,0,3.1-0.3,3.8-1c0.5-0.5,0.8-1.1,0.8-1.8
- C17.8,49.2,17,48.3,15.3,48.3z M16,51.7c-0.5,0.4-1.2,0.7-2.8,0.7c-0.3,0-0.7,0-0.9,0c0.5-1.8,1.6-3,2.8-3c1,0,1.4,0.5,1.4,1.2
- C16.4,51,16.2,51.4,16,51.7z M25,48.5l-3.3,5.9c-0.4,0.6-0.5,1-0.7,1.5h0c0-0.4-0.1-0.9-0.1-1.5l-0.8-6.1l-1.4,0.3l1.3,8.8h1.4
- l5.2-8.9L25,48.5z M30.7,48.3c-1.1,0-2,0.4-2.9,1.2c-1.3,1.2-2,3.1-2,4.8c0,2,1.3,3.2,2.9,3.2c1.8,0,2.7-0.4,3.6-1.3l-0.6-0.8
- c-0.8,0.7-1.5,1-2.6,1c-0.9,0-1.8-0.7-1.8-1.9c0-0.3,0-0.7,0.1-1.1c0.4,0,0.8,0,1.1,0c1.9,0,3.1-0.3,3.8-1c0.5-0.5,0.8-1.1,0.8-1.8
- C33.3,49.2,32.4,48.3,30.7,48.3z M31.4,51.7c-0.5,0.4-1.2,0.7-2.8,0.7c-0.3,0-0.7,0-0.9,0c0.5-1.8,1.6-3,2.8-3c1,0,1.4,0.5,1.4,1.2
- C31.9,51,31.7,51.4,31.4,51.7z M37.2,47.5c0.2-1.1,0.4-2.5,0.1-3.2l-1.5,0.6c0.2,0.6,0.2,1.5-0.1,2.7L34,55.7
- c-0.1,0.3-0.1,0.5-0.1,0.8c0,0.7,0.4,1,1.2,1c0.4,0,0.7,0,1.1-0.2l-0.1-0.9c-0.1,0-0.2,0-0.3,0c-0.2,0-0.4-0.1-0.4-0.4
- c0-0.2,0-0.4,0.1-0.6L37.2,47.5z M42.3,48.2c-2.8,0-4.9,2.6-4.9,6.1c0,2,1.1,3.2,3,3.2c2.9,0,4.9-2.7,4.9-6.1
- C45.3,49.5,44.4,48.2,42.3,48.2z M40.7,56.4c-1.1,0-1.7-0.6-1.7-1.9c0-2.9,1.2-5.1,3.2-5.1c0.9,0,1.7,0.5,1.7,1.9
- C43.8,54,42.7,56.4,40.7,56.4z M52.1,48.3c-1,0-2.3,0.5-3.2,1.8c0.2-0.9,0.1-1.4-0.1-1.9l-1.3,0.6c0.2,0.6,0.2,1-0.1,2.2l-2.2,10
- l1.4-0.3l0.8-3.6c0.6,0.3,1.2,0.4,2.1,0.4c1.2,0,2.4-0.6,3.3-1.6c0.9-1.1,1.5-3.2,1.5-4.8C54.4,49.4,53.7,48.3,52.1,48.3z
- M51.8,55.2c-0.4,0.7-1.4,1.2-2.2,1.2c-0.7,0-1.4-0.2-1.8-0.5l0.9-4.3c0.9-1.3,2-1.9,2.9-1.9c0.9,0,1.3,0.5,1.3,1.7
- C52.9,52.5,52.4,54.3,51.8,55.2z M60.1,48.3c-1.1,0-2,0.4-2.9,1.2c-1.3,1.2-2,3.1-2,4.8c0,2,1.3,3.2,2.9,3.2c1.8,0,2.7-0.4,3.6-1.3
- l-0.6-0.8c-0.8,0.7-1.5,1-2.6,1c-0.9,0-1.8-0.7-1.8-1.9c0-0.3,0-0.7,0.1-1.1c0.4,0,0.8,0,1.1,0c1.9,0,3.1-0.3,3.8-1
- c0.5-0.5,0.8-1.1,0.8-1.8C62.6,49.2,61.8,48.3,60.1,48.3z M60.8,51.7c-0.5,0.4-1.2,0.7-2.8,0.7c-0.3,0-0.7,0-0.9,0
- c0.5-1.8,1.6-3,2.8-3c1,0,1.4,0.5,1.4,1.2C61.2,51,61,51.4,60.8,51.7z M65.8,50.3c0.2-1,0.2-1.5-0.1-2.1l-1.3,0.6
- c0.2,0.6,0.2,1.2-0.1,2.5l-1.3,6h1.4l1.2-5.5c0.9-1.3,1.8-2,2.6-2c0.3,0,0.4,0,0.6,0.1l0.6-1.5c-0.2-0.1-0.3-0.1-0.7-0.1
- C67.8,48.3,66.6,49.1,65.8,50.3z M78.1,51.6l0.3-1.3h-4.2l0.8-4h5l0.5-1.2h-6.7l-2.6,12.1H78l0.3-1.3h-5.4l0.9-4.4H78.1z M86.6,54.5
- l2.1-9.8l-1.4-0.2l-0.9,4.3c-0.4-0.2-1-0.3-2-0.3c-1,0-2.2,0.4-3.1,1.3c-1.3,1.3-2,3.1-2,4.9c0,1.9,0.8,3,2.5,3
- c1.3,0,2.3-0.5,3.1-1.6c-0.1,1,0.2,1.4,0.7,1.9l1.2-0.9C86.4,56.3,86.2,55.9,86.6,54.5z M85.2,54.2c-0.9,1.5-2,2.1-3,2.1
- c-0.9,0-1.3-0.6-1.3-1.7c0-1.3,0.6-3.2,1.4-4.1c0.6-0.6,1.4-1,2.1-1c0.8,0,1.2,0.1,1.7,0.4L85.2,54.2z M88.2,57.3h1.5l1.9-9
- l-1.5,0.2L88.2,57.3z M91.4,44.7c-0.6,0-1.1,0.5-1.1,1.1c0,0.6,0.5,1.1,1.1,1.1s1.1-0.5,1.1-1.1S92,44.7,91.4,44.7z M93.7,55.7
- c0-0.2,0-0.6,0.1-1l1.1-5.2h1.9l0.6-1h-2.2c0.2-0.8,0.5-1.9,0.7-2.5l-1.5,0.3c-0.2,0.7-0.4,1.5-0.6,2.2h-1.2l-0.2,1h1.2l-1.1,5.3
- c-0.1,0.5-0.1,1-0.1,1.3c0,0.9,0.5,1.4,1.6,1.4c0.6,0,1.1-0.1,1.6-0.4v-0.9c-0.3,0.1-0.5,0.2-0.9,0.2C94,56.5,93.7,56.3,93.7,55.7z
- M99.8,44.7c-0.6,0-1.1,0.5-1.1,1.1c0,0.6,0.5,1.1,1.1,1.1s1.1-0.5,1.1-1.1S100.4,44.7,99.8,44.7z M96.6,57.3h1.5l1.9-9l-1.5,0.2
- L96.6,57.3z M105.3,48.2c-2.8,0-4.9,2.6-4.9,6.1c0,2,1.1,3.2,3,3.2c2.9,0,4.9-2.7,4.9-6.1C108.3,49.5,107.3,48.2,105.3,48.2z
- M103.6,56.4c-1.1,0-1.7-0.6-1.7-1.9c0-2.9,1.2-5.1,3.1-5.1c0.9,0,1.7,0.5,1.7,1.9C106.8,54,105.7,56.4,103.6,56.4z M115.3,48.3
- c-1.1,0-2.5,0.6-3.4,1.9c0.2-0.9,0.1-1.4-0.1-1.9l-1.3,0.6c0.2,0.7,0.2,1-0.1,2.2l-1.4,6.3h1.4l1.2-5.8c1.2-1.5,2.4-2.1,3.1-2.1
- c0.6,0,0.9,0.3,0.9,0.9c0,0.2,0,0.5-0.1,1l-1.3,6h1.4l1.4-6.7c0-0.2,0.1-0.4,0.1-0.6C117.1,49,116.4,48.3,115.3,48.3z M130.9,12.5
- c-0.1-0.2-0.2-0.4-0.4-0.6c-0.2-0.2-0.4-0.3-0.6-0.4c-0.2-0.1-0.5-0.1-0.7-0.1c-0.2,0-0.5,0-0.7,0.1c-0.2,0.1-0.4,0.2-0.6,0.4
- c-0.2,0.2-0.3,0.4-0.4,0.6c-0.1,0.2-0.1,0.5-0.1,0.7c0,0.3,0,0.5,0.1,0.7c0.1,0.2,0.2,0.4,0.4,0.6c0.2,0.2,0.4,0.3,0.6,0.4
- c0.2,0.1,0.5,0.1,0.7,0.1c0.2,0,0.5,0,0.7-0.1c0.2-0.1,0.4-0.2,0.6-0.4c0.2-0.2,0.3-0.4,0.4-0.6c0.1-0.2,0.1-0.5,0.1-0.7
- C131,13,131,12.7,130.9,12.5z M130.5,13.8c-0.1,0.2-0.2,0.3-0.3,0.5c-0.1,0.1-0.3,0.2-0.5,0.3c-0.2,0.1-0.4,0.1-0.6,0.1
- c-0.2,0-0.4,0-0.6-0.1c-0.2-0.1-0.3-0.2-0.5-0.3c-0.1-0.1-0.2-0.3-0.3-0.5c-0.1-0.2-0.1-0.4-0.1-0.6c0-0.2,0-0.4,0.1-0.6
- c0.1-0.2,0.2-0.3,0.3-0.5c0.1-0.1,0.3-0.2,0.5-0.3c0.2-0.1,0.4-0.1,0.6-0.1c0.2,0,0.4,0,0.6,0.1c0.2,0.1,0.3,0.2,0.5,0.3
- c0.1,0.1,0.2,0.3,0.3,0.5c0.1,0.2,0.1,0.4,0.1,0.6C130.6,13.5,130.6,13.6,130.5,13.8z M129.6,13.6c0,0-0.1-0.1-0.1-0.1
- c0,0-0.1-0.1-0.1-0.1c0,0,0,0-0.1-0.1c0.2,0,0.3-0.1,0.4-0.2c0.1-0.1,0.1-0.2,0.1-0.4c0-0.1,0-0.2,0-0.2c0-0.1-0.1-0.1-0.1-0.2
- c-0.1-0.1-0.1-0.1-0.2-0.1c-0.1,0-0.2,0-0.3,0h-0.6v2h0.3v-0.9c0,0,0.1,0,0.1,0c0,0,0,0,0.1,0c0.1,0.1,0.1,0.1,0.2,0.2
- c0.1,0.1,0.1,0.2,0.2,0.3l0.2,0.3h0.4l-0.3-0.5C129.7,13.7,129.6,13.7,129.6,13.6z M129.1,13.1h-0.2v-0.6h0.2c0.2,0,0.3,0,0.3,0.1
- c0.1,0.1,0.1,0.1,0.1,0.2c0,0.1,0,0.2-0.1,0.2c0,0-0.1,0.1-0.1,0.1C129.3,13.1,129.2,13.1,129.1,13.1z M0,36.8h5.8V20.9h9.7v-4.7
- H5.8V6.9h11.9l0.7-4.7H0V36.8z M24.3,7.7C26.4,7.7,28,6,28,4c0-2.1-1.7-3.7-3.6-3.7c-2.1,0-3.7,1.7-3.7,3.7
- C20.7,6,22.3,7.7,24.3,7.7z M21.5,36.8h5.6V10.9l-5.6,1V36.8z M32.4,36.8H38V19.7c0.5-2.1,2.5-3.7,4.8-3.7c0.6,0,1,0.2,1.6,0.4
- l1.7-5.1c-0.7-0.3-1.2-0.4-2-0.4c-2.5,0-4.5,1.3-6.5,4.1c0-1.4-0.4-2.9-1-4l-5.1,1.3c0.6,1.6,0.9,3.6,0.9,6.8V36.8z M56.9,37.4
- c3.4,0,6.5-1.1,9.2-3.4l-2.2-3.4c-1.9,1.7-4,2.5-6.3,2.5c-5,0-6.3-3.7-6.3-7.2v-0.4h15.2v-1.2c0-5.9-1.1-9-3.3-11
- c-2.2-2-4.5-2.6-7-2.6c-3.2,0-5.7,1.1-7.8,3.4c-2.2,2.5-3.2,5.4-3.2,9.9C45.2,32.3,49.8,37.4,56.9,37.4z M56.2,15
- c2.8,0,4.6,2.4,4.6,6.6h-9.4C51.4,17.5,53.1,15,56.2,15z M76.1,36.8V15.3h5.2l1.4-3.8h-6.6V7.6c0-2.3,1.2-3.6,3.1-3.6
- C80.2,4,81,4.4,82.2,5l1.8-3.5c-1.8-1-3.6-1.5-5.7-1.5c-4.5,0-7.7,2.5-7.7,7.7c0,2.4,0.2,3.8,0.2,3.8h-2.5v3.8h2.4v21.5H76.1z
- M93.1,37.4c6.9,0,11.3-5.1,11.3-13.2c0-8-4.1-13.4-11.4-13.4c-6.7,0-11.1,5.2-11.1,13.3C81.9,32.3,86.2,37.4,93.1,37.4z M93.1,15
- c3.2,0,5.2,2.1,5.2,9.3c0,6.4-1.8,9-5.1,9c-3.3,0-5.2-2.2-5.2-9.5C88.1,17.7,89.6,15,93.1,15z M126.1,11.5h-6.4
- c-0.8,1.1-3.3,6.1-4,7.8c-1.2-2.3-3.5-6.3-4.6-8.2l-6,1.2l7.3,10.9L103,36.8h7c1-1.4,4.6-7.6,5.5-9.5c0.5,0.9,4.6,8,5.5,9.5h6.9
- L118.6,23L126.1,11.5z"/>
-</svg>
diff --git a/browser/branding/aurora/content/about.png b/browser/branding/aurora/content/about.png Binary files differdeleted file mode 100644 index c7d54ef1c..000000000 --- a/browser/branding/aurora/content/about.png +++ /dev/null diff --git a/browser/branding/aurora/content/aboutDialog.css b/browser/branding/aurora/content/aboutDialog.css deleted file mode 100644 index 209c53244..000000000 --- a/browser/branding/aurora/content/aboutDialog.css +++ /dev/null @@ -1,34 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#aboutDialogContainer { - background-image: url("chrome://branding/content/about-background.png"); - background-repeat: no-repeat; - background-color: rgb(26,58,99); - color: #fff; -} - -.text-link { - color: #fff !important; - text-decoration: underline; -} - -.text-link:-moz-focusring { - border-color: #fff; -} - -#rightBox { - /* this margin prevents text from overlapping the planet image */ - margin-left: 280px; - margin-right: 20px; -} - -#bottomBox { - padding: 15px 10px 15px; - background-color: rgba(0,0,0,.7); -} - -#version { - margin-top: 30px; -} diff --git a/browser/branding/aurora/content/icon48.png b/browser/branding/aurora/content/icon48.png Binary files differdeleted file mode 100644 index 85e3c0d4b..000000000 --- a/browser/branding/aurora/content/icon48.png +++ /dev/null diff --git a/browser/branding/aurora/content/icon64.png b/browser/branding/aurora/content/icon64.png Binary files differdeleted file mode 100644 index 4b90768d2..000000000 --- a/browser/branding/aurora/content/icon64.png +++ /dev/null diff --git a/browser/branding/aurora/content/identity-icons-brand.svg b/browser/branding/aurora/content/identity-icons-brand.svg deleted file mode 100644 index b284275bf..000000000 --- a/browser/branding/aurora/content/identity-icons-brand.svg +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- This Source Code Form is subject to the terms of the Mozilla Public - - License, v. 2.0. If a copy of the MPL was not distributed with this - - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> -<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32"> - <path fill="#0c99d5" d="M26.797,6.125 C26.719,6.050 26.674,6.013 26.674,6.013 C26.715,6.045 26.756,6.082 26.797,6.125 M28.924,21.127 C28.947,20.948 28.949,20.780 28.929,20.626 C28.501,21.359 27.844,22.025 27.228,22.905 C27.980,22.421 28.624,21.866 28.924,21.127 ZM30.097,13.924 C30.082,13.747 30.062,13.570 30.036,13.394 C29.974,12.946 29.875,12.504 29.728,12.076 C29.735,12.102 29.741,12.129 29.747,12.155 C29.737,12.124 29.731,12.107 29.731,12.107 C29.731,12.107 29.614,12.472 29.435,13.070 C29.423,14.290 29.290,15.417 29.094,16.268 C29.419,15.962 29.657,15.599 29.820,15.196 C29.748,15.461 29.649,15.713 29.520,15.947 C29.361,16.217 29.182,16.436 29.009,16.610 C28.821,16.797 28.641,16.932 28.500,17.024 C28.543,16.905 28.585,16.773 28.625,16.631 C28.626,16.629 28.626,16.628 28.627,16.626 C28.637,16.590 28.647,16.552 28.657,16.513 C28.761,16.176 28.854,15.828 28.934,15.474 C29.049,14.961 29.137,14.433 29.192,13.898 C29.300,12.857 29.284,11.787 29.104,10.744 C29.015,10.227 28.886,9.717 28.712,9.220 C28.480,8.559 28.197,8.001 27.916,7.544 C27.895,7.508 27.874,7.472 27.853,7.436 C27.760,7.280 27.665,7.132 27.570,6.994 C27.258,6.543 26.939,6.200 26.674,6.013 C26.715,6.045 26.756,6.082 26.797,6.125 C26.719,6.050 26.674,6.013 26.674,6.013 C26.694,6.035 26.712,6.058 26.732,6.081 C26.682,6.033 26.653,6.008 26.653,6.008 C26.653,6.008 26.682,6.170 26.733,6.456 C25.969,5.218 24.807,4.635 24.807,4.635 C24.807,4.635 24.902,4.945 25.050,5.391 C25.741,5.949 26.345,6.571 26.869,7.227 C26.871,7.238 26.873,7.250 26.875,7.261 C26.905,7.435 26.938,7.624 26.973,7.826 C26.880,7.700 26.782,7.575 26.683,7.451 C25.589,5.958 24.211,4.706 22.611,3.779 C22.625,3.783 22.600,3.776 22.613,3.780 C20.672,2.647 18.429,2.000 16.039,2.000 C12.495,2.000 9.273,3.423 6.880,5.744 C6.814,5.809 7.271,6.270 7.404,6.311 C8.081,6.106 8.838,6.051 9.423,6.120 C9.705,5.897 9.663,5.963 9.961,5.769 L9.964,5.772 C11.767,4.606 13.854,3.982 16.035,3.982 C18.042,3.982 19.969,4.510 21.669,5.503 C22.118,5.635 22.683,5.830 23.182,6.091 C22.663,5.187 22.132,4.560 21.761,4.182 C23.311,5.364 24.150,6.425 24.701,7.396 C24.746,7.475 24.789,7.553 24.830,7.631 C24.928,7.816 25.017,7.998 25.099,8.177 C24.570,7.618 23.753,7.042 23.039,6.772 C22.981,6.750 22.924,6.730 22.868,6.712 C22.708,6.662 22.555,6.628 22.414,6.617 C23.550,7.488 25.407,9.978 25.432,13.744 C25.432,13.765 25.432,13.786 25.432,13.807 C25.432,14.010 25.428,14.216 25.417,14.427 C25.207,13.971 24.877,13.340 24.562,12.869 C24.483,12.751 24.405,12.644 24.330,12.551 C24.265,12.471 24.202,12.400 24.143,12.346 C24.479,15.517 24.324,16.750 24.116,17.651 C24.096,17.734 24.077,17.815 24.057,17.894 C24.015,18.058 23.973,18.216 23.934,18.378 C23.920,18.257 23.899,18.145 23.874,18.040 C23.816,17.791 23.735,17.585 23.666,17.424 C23.643,17.372 23.621,17.322 23.603,17.280 C23.603,17.280 23.581,17.854 23.325,18.780 C23.199,19.234 23.018,19.771 22.754,20.367 C22.294,21.408 21.823,21.903 21.501,22.062 C21.397,22.113 21.309,22.129 21.242,22.117 C21.167,22.112 21.126,22.079 21.127,22.076 C21.135,22.001 21.143,21.926 21.146,21.854 C21.150,21.754 21.145,21.662 21.119,21.593 C21.119,21.593 20.862,21.684 20.697,21.924 C20.630,22.020 20.544,22.115 20.431,22.203 C20.411,22.219 20.614,21.936 20.599,21.949 C20.499,22.033 20.392,22.130 20.285,22.245 C20.170,22.368 20.059,22.494 19.954,22.609 C19.699,22.887 19.483,23.095 19.352,23.001 C19.437,22.975 19.513,22.906 19.572,22.818 C19.635,22.726 19.680,22.613 19.699,22.500 C19.544,22.612 19.152,22.914 18.272,23.049 C18.109,23.074 17.707,23.146 17.127,23.121 C16.424,23.090 15.460,22.916 14.345,22.341 C14.578,22.313 14.903,22.241 15.196,22.312 C15.275,22.331 15.352,22.360 15.424,22.405 C15.392,22.369 15.355,22.338 15.315,22.310 C14.933,22.037 14.212,22.084 13.681,21.911 C13.170,21.744 12.503,21.005 12.119,20.631 C12.263,20.667 12.407,20.696 12.551,20.721 C12.652,20.738 12.752,20.753 12.852,20.765 C13.008,20.784 13.164,20.798 13.319,20.805 C14.486,20.856 15.595,20.569 16.313,20.063 C17.285,19.377 17.861,18.876 18.378,18.994 C18.428,19.006 18.476,19.010 18.522,19.010 C18.543,19.010 18.563,19.009 18.583,19.007 C18.867,18.975 19.053,18.730 19.002,18.441 C18.983,18.332 18.931,18.217 18.836,18.104 C18.561,17.778 18.016,17.375 17.274,17.265 C16.935,17.215 16.556,17.226 16.142,17.333 C15.385,17.528 14.711,18.047 13.824,18.051 C13.526,18.053 13.204,17.996 12.846,17.850 C12.759,17.815 12.671,17.774 12.580,17.728 C12.489,17.681 12.877,17.783 12.781,17.725 C12.508,17.621 12.011,17.386 11.888,17.297 C11.868,17.282 12.094,17.339 12.070,17.324 C10.721,16.501 10.809,15.842 10.809,15.435 C10.809,15.270 10.858,15.077 10.953,14.899 C11.046,14.723 11.183,14.563 11.362,14.461 C11.475,14.502 11.562,14.541 11.616,14.567 C11.655,14.586 11.677,14.598 11.677,14.598 C11.677,14.598 11.664,14.576 11.644,14.546 C11.613,14.499 11.565,14.428 11.530,14.386 C11.544,14.381 11.557,14.377 11.571,14.373 C11.665,14.406 11.829,14.468 11.985,14.532 C12.092,14.576 12.195,14.621 12.268,14.659 C12.514,14.786 12.596,14.916 12.596,14.916 C12.596,14.916 12.654,14.879 12.594,14.749 C12.583,14.726 12.560,14.683 12.519,14.630 C12.465,14.561 12.378,14.473 12.239,14.386 C12.244,14.386 12.248,14.385 12.251,14.385 C12.379,14.437 12.514,14.503 12.663,14.590 C12.670,14.555 12.679,14.520 12.687,14.484 C12.688,14.479 12.690,14.475 12.691,14.470 C12.693,14.462 12.695,14.454 12.697,14.446 C12.704,14.416 12.711,14.385 12.718,14.354 C12.730,14.301 12.740,14.245 12.748,14.185 C12.764,14.058 12.768,13.913 12.740,13.731 C12.695,13.446 12.701,13.373 12.632,13.269 C12.573,13.181 12.648,13.142 12.740,13.221 C12.718,13.151 12.687,13.081 12.650,13.010 C12.650,13.009 12.651,13.009 12.651,13.007 C12.659,12.968 12.693,12.919 12.745,12.864 C12.758,12.849 12.774,12.834 12.790,12.818 C12.805,12.803 12.821,12.789 12.839,12.773 C13.359,12.313 14.782,11.539 14.908,11.443 C15.118,11.283 15.332,11.035 15.466,10.750 C15.508,10.672 15.544,10.578 15.571,10.468 C15.606,10.323 15.625,10.149 15.614,9.937 C15.606,9.764 15.537,9.634 14.917,9.568 C14.584,9.533 14.091,9.516 13.362,9.521 C13.335,9.521 13.309,9.521 13.282,9.521 C12.690,9.526 12.305,9.171 12.073,8.833 C12.025,8.759 11.984,8.689 11.946,8.626 C11.895,8.532 11.861,8.448 11.834,8.381 C11.917,8.070 12.028,7.772 12.165,7.489 C12.456,6.890 12.871,6.355 13.419,5.893 C13.468,5.850 13.226,5.921 13.272,5.877 C13.327,5.824 13.669,5.655 13.733,5.618 C13.772,5.595 13.692,5.556 13.557,5.528 C13.549,5.527 13.541,5.525 13.532,5.524 C13.380,5.496 13.167,5.485 12.972,5.527 C12.581,5.610 12.505,5.658 12.303,5.765 C12.385,5.678 12.650,5.540 12.585,5.554 C12.161,5.652 11.661,5.940 11.235,6.251 C11.231,6.211 11.235,6.179 11.243,6.116 C11.042,6.223 10.557,6.609 10.433,6.903 C10.433,6.839 10.433,6.807 10.425,6.736 C10.299,6.856 10.177,6.996 10.065,7.151 C10.055,7.165 10.044,7.178 10.034,7.192 C10.033,7.195 10.031,7.197 10.029,7.199 C9.691,7.112 9.367,7.055 9.056,7.023 C8.305,6.944 7.631,7.012 7.032,7.178 C6.951,7.201 6.871,7.224 6.793,7.250 C6.579,7.089 6.235,6.843 5.692,5.978 C5.659,5.926 5.656,6.097 5.626,6.042 C5.468,5.748 5.327,5.300 5.258,4.892 C5.234,4.750 5.218,4.613 5.214,4.489 C5.214,4.489 5.050,4.588 4.873,4.889 C4.806,5.003 4.737,5.146 4.675,5.324 C4.662,5.361 4.649,5.399 4.637,5.439 C4.596,5.570 4.568,5.648 4.539,5.720 C4.530,5.742 4.556,5.482 4.546,5.502 C4.530,5.537 4.502,5.579 4.472,5.627 C4.431,5.692 4.385,5.769 4.356,5.851 C4.349,5.870 4.343,5.889 4.338,5.909 C4.308,6.034 4.259,6.110 4.239,6.266 C4.238,6.270 4.237,6.273 4.235,6.276 C4.234,6.261 4.233,6.230 4.231,6.200 C4.229,6.152 4.225,6.105 4.218,6.123 C4.118,6.397 4.024,6.712 3.948,7.067 C3.838,7.628 3.726,8.395 3.793,9.368 C3.792,9.403 3.795,9.438 3.797,9.472 C3.800,9.514 3.803,9.555 3.802,9.594 C3.461,10.078 3.239,10.494 3.153,10.699 C3.066,10.873 2.979,11.068 2.893,11.284 C2.564,12.102 2.241,13.234 1.969,14.813 C1.969,14.813 2.200,14.061 2.661,13.210 C2.321,14.282 2.055,15.950 2.211,18.452 C2.215,18.397 2.248,18.101 2.322,17.660 C2.360,17.435 2.408,17.173 2.470,16.885 C2.473,16.950 2.477,17.015 2.482,17.081 C2.497,17.315 2.519,17.556 2.548,17.803 C2.565,17.949 2.585,18.097 2.607,18.248 C2.814,19.617 3.265,21.166 4.197,22.811 C5.154,24.502 7.676,28.430 14.005,29.900 C13.826,29.847 13.665,29.780 13.524,29.710 C13.117,29.508 12.879,29.280 12.879,29.280 C12.879,29.280 13.080,29.346 13.407,29.439 C14.081,29.630 15.290,29.931 16.388,29.990 C16.586,30.000 16.781,30.004 16.968,29.996 C16.428,29.900 16.320,29.631 16.320,29.631 C16.320,29.631 21.233,29.917 23.785,27.837 C23.835,27.796 23.885,27.754 23.934,27.711 C23.938,27.709 23.941,27.708 23.945,27.706 C24.327,27.379 24.606,27.021 24.755,26.675 C24.636,26.734 24.518,26.789 24.403,26.841 C24.025,27.251 23.564,27.586 23.055,27.860 C22.590,27.996 22.118,28.072 21.749,28.108 C21.581,28.124 21.434,28.132 21.319,28.133 C21.594,27.872 21.957,27.681 22.387,27.495 C23.024,27.219 23.811,26.955 24.683,26.496 C24.685,26.495 24.687,26.494 24.689,26.493 C24.741,26.466 24.793,26.437 24.845,26.409 C25.598,25.996 26.410,25.432 27.244,24.585 C28.038,23.779 28.427,23.083 28.643,22.448 C28.703,22.270 28.750,22.097 28.788,21.928 C28.852,21.645 28.893,21.372 28.934,21.104 C28.934,21.103 28.934,21.101 28.934,21.100 C28.934,21.102 28.933,21.103 28.933,21.105 C28.926,21.144 28.918,21.183 28.910,21.221 C28.671,22.267 27.797,22.972 26.794,23.585 C26.608,23.698 26.417,23.808 26.226,23.917 C26.339,23.696 26.459,23.491 26.582,23.294 C26.586,23.289 26.589,23.284 26.592,23.279 C26.590,23.284 26.588,23.288 26.586,23.293 C26.573,23.319 26.561,23.344 26.550,23.367 C26.567,23.339 26.585,23.311 26.603,23.283 C26.798,22.973 27.012,22.669 27.232,22.372 C27.760,21.689 28.278,21.118 28.621,20.490 C28.672,20.397 28.726,20.292 28.782,20.177 C28.803,20.134 28.825,20.090 28.846,20.043 C29.220,19.292 29.607,18.267 29.857,17.120 C29.969,16.606 30.053,16.067 30.097,15.517 C30.138,14.992 30.142,14.457 30.097,13.924 Z"/> -</svg> diff --git a/browser/branding/aurora/content/jar.mn b/browser/branding/aurora/content/jar.mn deleted file mode 100644 index 140359a19..000000000 --- a/browser/branding/aurora/content/jar.mn +++ /dev/null @@ -1,19 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -browser.jar: -% content branding %content/branding/ contentaccessible=yes - content/branding/about.png - content/branding/about-background.png - content/branding/about-logo.png - content/branding/about-logo@2x.png - content/branding/about-wordmark.svg - content/branding/icon48.png - content/branding/icon64.png - content/branding/icon16.png (../default16.png) - content/branding/icon32.png (../default32.png) - content/branding/icon128.png (../mozicon128.png) - content/branding/identity-icons-brand.svg - content/branding/silhouette-40.svg - content/branding/aboutDialog.css diff --git a/browser/branding/aurora/content/moz.build b/browser/branding/aurora/content/moz.build deleted file mode 100644 index eb4454d28..000000000 --- a/browser/branding/aurora/content/moz.build +++ /dev/null @@ -1,7 +0,0 @@ -# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*- -# vim: set filetype=python: -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -JAR_MANIFESTS += ['jar.mn']
\ No newline at end of file diff --git a/browser/branding/aurora/content/silhouette-40.svg b/browser/branding/aurora/content/silhouette-40.svg deleted file mode 100644 index 5a41a1c3f..000000000 --- a/browser/branding/aurora/content/silhouette-40.svg +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?>
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-45 31 40 40">
- <path fill="#ccc" d="M-14.1,54.7c0.7-1.4,1.7-4.4,0.8-6.9c0,0,0,0,0,0.1l0,0c0,0-0.2,0.5-0.4,1.3c0-0.1,0-0.2,0-0.3
- c0.1-0.9,0-1.9-0.1-2.9c-0.3-1.5-1.4-2.8-2-3.2c0,0,0.1,0,0.1,0.1c-0.1-0.1-0.1-0.1-0.1-0.1s0,0.1,0.1,0.4c-0.7-1.1-1.6-1.5-1.6-1.5
- s0,0.2,0.1,0.5c-2-1.9-4.7-3-7.6-3c-3,0-5.7,1.2-7.8,3.1c0.1,0.1,0.2,0.3,0.4,0.5c0,0,0.8-0.1,1.7-0.1c1.7-1.2,3.6-1.8,5.7-1.8
- c2.6,0,5.1,1.1,7,3c-0.2-0.1-0.1,0,0,0.1c-0.6-0.4-1.2-0.8-1.7-0.8c1,0.8,2.6,2.7,2.4,6.2c-0.3-0.6-0.6-1-0.9-1.3
- c0.4,3.5,0,4.2-0.2,5.1c0-0.4-0.2-0.7-0.3-0.9c0,0,0,1.1-0.7,2.6c-0.5,1.2-1.1,1.5-1.3,1.5c-0.2,0-0.1-0.2-0.1-0.4
- c0,0-0.4,0.2-0.7,0.6c-0.3,0.4-0.6,0.8-0.8,0.6c0.1-0.1,0.2-0.3,0.3-0.4c-0.1,0.1-0.5,0.4-1.2,0.5c-0.3,0-1.6,0.3-3.3-0.6
- c0.3,0,0.6-0.1,0.9,0.1c-0.3-0.3-1-0.3-1.5-0.4c-0.5-0.4-1.1-1-1.4-1.4c1.3,0.3,2.8,0.1,3.6-0.5s1.3-1,1.8-0.9
- c0.4,0.1,0.7-0.4,0.4-0.8c-0.3-0.4-1.2-1-2.3-0.7c-0.8,0.2-1.8,1.1-3.3,0.2c-1.3-0.8-1.3-1.4-1.3-1.8c0-0.3,0.2-0.7,0.5-0.8
- c0.2,0.1,0.3,0.1,0.3,0.1s-0.1-0.1-0.1-0.2l0,0c0.1,0,0.4,0.2,0.6,0.2c0.2,0.1,0.3,0.2,0.3,0.2s0,0,0-0.1c0,0-0.1-0.2-0.3-0.3l0,0
- c0.1,0,0.2,0.1,0.4,0.2c0-0.2,0.1-0.4,0.1-0.7c0-0.2,0-0.3-0.1-0.4c-0.1-0.1,0-0.1,0.1,0c0-0.1,0-0.1-0.1-0.2l0,0c0,0,0,0,0-0.1
- c0.2-0.3,1.8-1.2,1.9-1.3c0.2-0.1,0.3-0.3,0.4-0.5c0.2-0.1,0.3-0.5,0.3-0.8c0-0.1-0.2-0.3-0.4-0.3c-0.1,0-0.4-0.1-0.6,0l0,0
- c-0.3,0-0.7,0-1.2,0s-0.8-0.3-1-0.6c0-0.1-0.1-0.1-0.1-0.2c0-0.1-0.1-0.2-0.1-0.2c0.2-0.8,0.7-1.5,1.4-2.1c0,0-0.2,0-0.1,0
- c0,0,0.3-0.2,0.4-0.2c0.1,0-0.3-0.1-0.6-0.1c-0.5,0.2-0.6,0.2-0.8,0.3c0.1-0.1,0.3-0.2,0.2-0.2c-0.3,0.1-0.7,0.4-1.1,0.6v-0.1
- c-0.2,0.1-0.6,0.4-0.7,0.7c0-0.1,0-0.1,0-0.1c-0.1,0-0.2,0.2-0.3,0.3l0,0c-1.1-0.3-2-0.2-2.8,0c-0.2-0.1-0.6-0.5-0.9-1
- c0,0,0,0.1-0.1,0.1c-0.1-0.4-0.3-0.9-0.3-1.3v-0.1c0,0-0.1,0.1-0.3,0.3c-0.1,0.2-0.2,0.3-0.2,0.5c0,0.1-0.1,0.2-0.1,0.2v-0.2
- c0,0.1-0.1,0.2-0.2,0.3c0,0.2,0,0.3-0.1,0.4l0,0c0,0,0-0.2,0-0.1c-0.1,0.2-0.2,0.5-0.2,0.8c-0.1,0.3-0.1,0.5-0.1,0.8s0,0.7,0,1.2
- c0,0.1,0,0.1,0,0.2c-0.3,0.4-0.5,0.7-0.6,0.9c-0.4,0.7-0.7,1.8-1,3.5c0,0,0.2-0.6,0.6-1.3l0,0c-0.3,0.9-0.5,2.3-0.4,4.4
- c0-0.1,0.1-0.6,0.2-1.3c0.1,1.4,0.5,3.1,1.5,5c0.8,1.4,1.7,2.4,2.7,3.2c0.2,0.2,0.4,0.3,0.6,0.5c1.3,1,3.3,2.1,5,2.4
- c-0.6-0.2-1-0.5-1-0.5s2,0.7,3.5,0.6c-0.5-0.1-0.6-0.3-0.6-0.3s4.2,0.2,6.4-1.5c0.5-0.4,0.8-0.8,0.9-1.2c0.6-0.4,1.3-0.8,2-1.6
- c1.2-1.2,1.3-2.1,1.4-3v0.1C-14,55.2-14,54.9-14.1,54.7z"/>
-</svg>
diff --git a/browser/branding/aurora/default16.png b/browser/branding/aurora/default16.png Binary files differdeleted file mode 100644 index 3b2baaa8d..000000000 --- a/browser/branding/aurora/default16.png +++ /dev/null diff --git a/browser/branding/aurora/default32.png b/browser/branding/aurora/default32.png Binary files differdeleted file mode 100644 index 04cfba796..000000000 --- a/browser/branding/aurora/default32.png +++ /dev/null diff --git a/browser/branding/aurora/default48.png b/browser/branding/aurora/default48.png Binary files differdeleted file mode 100644 index 85e3c0d4b..000000000 --- a/browser/branding/aurora/default48.png +++ /dev/null diff --git a/browser/branding/aurora/disk.icns b/browser/branding/aurora/disk.icns Binary files differdeleted file mode 100644 index d9e0e6b61..000000000 --- a/browser/branding/aurora/disk.icns +++ /dev/null diff --git a/browser/branding/aurora/document.icns b/browser/branding/aurora/document.icns Binary files differdeleted file mode 100644 index 7eedd34ee..000000000 --- a/browser/branding/aurora/document.icns +++ /dev/null diff --git a/browser/branding/aurora/document.ico b/browser/branding/aurora/document.ico Binary files differdeleted file mode 100644 index 2402ac57f..000000000 --- a/browser/branding/aurora/document.ico +++ /dev/null diff --git a/browser/branding/aurora/dsstore b/browser/branding/aurora/dsstore Binary files differdeleted file mode 100644 index 4a5fa3f54..000000000 --- a/browser/branding/aurora/dsstore +++ /dev/null diff --git a/browser/branding/aurora/firefox.icns b/browser/branding/aurora/firefox.icns Binary files differdeleted file mode 100644 index 662165bb3..000000000 --- a/browser/branding/aurora/firefox.icns +++ /dev/null diff --git a/browser/branding/aurora/firefox.ico b/browser/branding/aurora/firefox.ico Binary files differdeleted file mode 100644 index 4f1856b99..000000000 --- a/browser/branding/aurora/firefox.ico +++ /dev/null diff --git a/browser/branding/aurora/locales/browserconfig.properties b/browser/branding/aurora/locales/browserconfig.properties deleted file mode 100644 index 06cefece3..000000000 --- a/browser/branding/aurora/locales/browserconfig.properties +++ /dev/null @@ -1,6 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -# Do NOT localize or otherwise change these values -browser.startup.homepage=about:home diff --git a/browser/branding/aurora/locales/en-US/brand.dtd b/browser/branding/aurora/locales/en-US/brand.dtd deleted file mode 100644 index 9598f79b0..000000000 --- a/browser/branding/aurora/locales/en-US/brand.dtd +++ /dev/null @@ -1,9 +0,0 @@ -<!-- This Source Code Form is subject to the terms of the Mozilla Public - - License, v. 2.0. If a copy of the MPL was not distributed with this - - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - -<!ENTITY brandShorterName "Firefox"> -<!ENTITY brandShortName "Firefox Developer Edition"> -<!ENTITY brandFullName "Firefox Developer Edition"> -<!ENTITY vendorShortName "Mozilla"> -<!ENTITY trademarkInfo.part1 " "> diff --git a/browser/branding/aurora/locales/en-US/brand.properties b/browser/branding/aurora/locales/en-US/brand.properties deleted file mode 100644 index e49d0ae86..000000000 --- a/browser/branding/aurora/locales/en-US/brand.properties +++ /dev/null @@ -1,10 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -brandShorterName=Firefox -brandShortName=Firefox Developer Edition -brandFullName=Firefox Developer Edition -vendorShortName=Mozilla - -syncBrandShortName=Sync diff --git a/browser/branding/aurora/locales/jar.mn b/browser/branding/aurora/locales/jar.mn deleted file mode 100644 index 24880ad7d..000000000 --- a/browser/branding/aurora/locales/jar.mn +++ /dev/null @@ -1,12 +0,0 @@ -#filter substitution -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - - -@AB_CD@.jar: -% locale branding @AB_CD@ %locale/branding/ -# Aurora branding only exists in en-US - locale/branding/brand.dtd (en-US/brand.dtd) - locale/branding/brand.properties (en-US/brand.properties) - locale/branding/browserconfig.properties diff --git a/browser/branding/aurora/locales/moz.build b/browser/branding/aurora/locales/moz.build deleted file mode 100644 index 8bad13124..000000000 --- a/browser/branding/aurora/locales/moz.build +++ /dev/null @@ -1,9 +0,0 @@ -# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*- -# vim: set filetype=python: -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -DEFINES['MOZ_DISTRIBUTION_ID_UNQUOTED'] = CONFIG['MOZ_DISTRIBUTION_ID'] - -JAR_MANIFESTS += ['jar.mn']
\ No newline at end of file diff --git a/browser/branding/aurora/moz.build b/browser/branding/aurora/moz.build deleted file mode 100644 index 9045cee11..000000000 --- a/browser/branding/aurora/moz.build +++ /dev/null @@ -1,13 +0,0 @@ -# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*- -# vim: set filetype=python: -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -DIRS += ['content', 'locales'] - -DIST_SUBDIR = 'browser' -export('DIST_SUBDIR') - -include('../branding-common.mozbuild') -FirefoxBranding() diff --git a/browser/branding/aurora/mozicon128.png b/browser/branding/aurora/mozicon128.png Binary files differdeleted file mode 100644 index 2822bf449..000000000 --- a/browser/branding/aurora/mozicon128.png +++ /dev/null diff --git a/browser/branding/aurora/particles.bmp b/browser/branding/aurora/particles.bmp Binary files differdeleted file mode 100644 index ab74ce047..000000000 --- a/browser/branding/aurora/particles.bmp +++ /dev/null diff --git a/browser/branding/aurora/pencil-rtl.bmp b/browser/branding/aurora/pencil-rtl.bmp Binary files differdeleted file mode 100644 index e50d92db7..000000000 --- a/browser/branding/aurora/pencil-rtl.bmp +++ /dev/null diff --git a/browser/branding/aurora/pencil.bmp b/browser/branding/aurora/pencil.bmp Binary files differdeleted file mode 100644 index 252c10f41..000000000 --- a/browser/branding/aurora/pencil.bmp +++ /dev/null diff --git a/browser/branding/aurora/pref/firefox-branding.js b/browser/branding/aurora/pref/firefox-branding.js deleted file mode 100644 index 9f005b857..000000000 --- a/browser/branding/aurora/pref/firefox-branding.js +++ /dev/null @@ -1,36 +0,0 @@ - - -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -pref("startup.homepage_override_url", ""); -pref("startup.homepage_welcome_url", "https://www.mozilla.org/%LOCALE%/firefox/%VERSION%/firstrun/"); -pref("startup.homepage_welcome_url.additional", ""); -// The time interval between checks for a new version (in seconds) -pref("app.update.interval", 28800); // 8 hours -// The time interval between the downloading of mar file chunks in the -// background (in seconds) -// 0 means "download everything at once" -pref("app.update.download.backgroundInterval", 0); -// Give the user x seconds to react before showing the big UI. default=192 hours -pref("app.update.promptWaitTime", 691200); -// URL user can browse to manually if for some reason all update installation -// attempts fail. -pref("app.update.url.manual", "https://www.mozilla.org/firefox/aurora/"); -// A default value for the "More information about this update" link -// supplied in the "An update is available" page of the update wizard. -pref("app.update.url.details", "https://www.mozilla.org/firefox/aurora/"); - -// The number of days a binary is permitted to be old -// without checking for an update. This assumes that -// app.update.checkInstallTime is true. -pref("app.update.checkInstallTime.days", 2); - -// Give the user x seconds to reboot before showing a badge on the hamburger -// button. default=4 days -pref("app.update.badgeWaitTime", 345600); - -// Number of usages of the web console or scratchpad. -// If this is less than 5, then pasting code into the web console or scratchpad is disabled -pref("devtools.selfxss.count", 5); diff --git a/browser/branding/aurora/wizHeader.bmp b/browser/branding/aurora/wizHeader.bmp Binary files differdeleted file mode 100644 index 32aefb96e..000000000 --- a/browser/branding/aurora/wizHeader.bmp +++ /dev/null diff --git a/browser/branding/aurora/wizHeaderRTL.bmp b/browser/branding/aurora/wizHeaderRTL.bmp Binary files differdeleted file mode 100644 index 5f0ccb1c4..000000000 --- a/browser/branding/aurora/wizHeaderRTL.bmp +++ /dev/null diff --git a/browser/branding/aurora/wizWatermark.bmp b/browser/branding/aurora/wizWatermark.bmp Binary files differdeleted file mode 100644 index 56c6c3103..000000000 --- a/browser/branding/aurora/wizWatermark.bmp +++ /dev/null diff --git a/browser/branding/nightly/VisualElements_150.png b/browser/branding/nightly/VisualElements_150.png Binary files differdeleted file mode 100644 index 461961e8d..000000000 --- a/browser/branding/nightly/VisualElements_150.png +++ /dev/null diff --git a/browser/branding/nightly/VisualElements_70.png b/browser/branding/nightly/VisualElements_70.png Binary files differdeleted file mode 100644 index aad81f40d..000000000 --- a/browser/branding/nightly/VisualElements_70.png +++ /dev/null diff --git a/browser/branding/nightly/appname.bmp b/browser/branding/nightly/appname.bmp Binary files differdeleted file mode 100644 index fc1b6343c..000000000 --- a/browser/branding/nightly/appname.bmp +++ /dev/null diff --git a/browser/branding/nightly/background.png b/browser/branding/nightly/background.png Binary files differdeleted file mode 100644 index db5576a33..000000000 --- a/browser/branding/nightly/background.png +++ /dev/null diff --git a/browser/branding/nightly/bgintro.bmp b/browser/branding/nightly/bgintro.bmp Binary files differdeleted file mode 100644 index 777ab2e84..000000000 --- a/browser/branding/nightly/bgintro.bmp +++ /dev/null diff --git a/browser/branding/nightly/branding.nsi b/browser/branding/nightly/branding.nsi deleted file mode 100644 index fa13b32c6..000000000 --- a/browser/branding/nightly/branding.nsi +++ /dev/null @@ -1,45 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -# NSIS branding defines for nightly builds. -# The official release build branding.nsi is located in other-license/branding/firefox/ -# The unofficial build branding.nsi is located in browser/branding/unofficial/ - -# BrandFullNameInternal is used for some registry and file system values -# instead of BrandFullName and typically should not be modified. -!define BrandFullNameInternal "Nightly" -!define CompanyName "mozilla.org" -!define URLInfoAbout "https://www.mozilla.org" -!define HelpLink "https://support.mozilla.org" - -!define URLStubDownload "http://download.mozilla.org/?os=win&lang=${AB_CD}&product=firefox-nightly-latest" -!define URLManualDownload "https://www.mozilla.org/${AB_CD}/firefox/installer-help/?channel=nightly&installer_lang=${AB_CD}" -!define URLSystemRequirements "https://www.mozilla.org/firefox/system-requirements/" -!define Channel "nightly" - -# The installer's certificate name and issuer expected by the stub installer -!define CertNameDownload "Mozilla Corporation" -!define CertIssuerDownload "DigiCert SHA2 Assured ID Code Signing CA" - -# Dialog units are used so the UI displays correctly with the system's DPI -# settings. -# The dialog units for the bitmap's dimensions should match exactly with the -# bitmap's width and height in pixels. -!define APPNAME_BMP_WIDTH_DU 159u -!define APPNAME_BMP_HEIGHT_DU 28u -!define INTRO_BLURB_WIDTH_DU "230u" -!define INTRO_BLURB_EDGE_DU "198u" -!define INTRO_BLURB_LTR_TOP_DU "16u" -!define INTRO_BLURB_RTL_TOP_DU "11u" - -# UI Colors that can be customized for each channel -!define FOOTER_CONTROL_TEXT_COLOR_NORMAL 0x000000 -!define FOOTER_CONTROL_TEXT_COLOR_FADED 0x999999 -!define FOOTER_BKGRD_COLOR 0xFFFFFF -!define INTRO_BLURB_TEXT_COLOR 0xFFFFFF -!define INSTALL_BLURB_TEXT_COLOR 0xFFFFFF -!define INSTALL_PROGRESS_TEXT_COLOR_NORMAL 0xFFFFFF -!define COMMON_TEXT_COLOR_NORMAL 0xFFFFFF -!define COMMON_TEXT_COLOR_FADED 0xA1AAB3 -!define COMMON_BKGRD_COLOR 0x0F1B26 diff --git a/browser/branding/nightly/clock.bmp b/browser/branding/nightly/clock.bmp Binary files differdeleted file mode 100644 index c74398edb..000000000 --- a/browser/branding/nightly/clock.bmp +++ /dev/null diff --git a/browser/branding/nightly/configure.sh b/browser/branding/nightly/configure.sh deleted file mode 100644 index edd3bd3e8..000000000 --- a/browser/branding/nightly/configure.sh +++ /dev/null @@ -1,5 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -MOZ_APP_DISPLAYNAME=Nightly diff --git a/browser/branding/nightly/content/about-background.png b/browser/branding/nightly/content/about-background.png Binary files differdeleted file mode 100644 index b572ab237..000000000 --- a/browser/branding/nightly/content/about-background.png +++ /dev/null diff --git a/browser/branding/nightly/content/about-logo.png b/browser/branding/nightly/content/about-logo.png Binary files differdeleted file mode 100644 index cd985a92f..000000000 --- a/browser/branding/nightly/content/about-logo.png +++ /dev/null diff --git a/browser/branding/nightly/content/about-logo@2x.png b/browser/branding/nightly/content/about-logo@2x.png Binary files differdeleted file mode 100644 index fb12dfbd7..000000000 --- a/browser/branding/nightly/content/about-logo@2x.png +++ /dev/null diff --git a/browser/branding/nightly/content/about-wordmark.svg b/browser/branding/nightly/content/about-wordmark.svg deleted file mode 100644 index 6f71130b4..000000000 --- a/browser/branding/nightly/content/about-wordmark.svg +++ /dev/null @@ -1,36 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- This Source Code Form is subject to the terms of the Mozilla Public - - License, v. 2.0. If a copy of the MPL was not distributed with this - - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> -<svg xmlns="http://www.w3.org/2000/svg" width="270px" height="48px" viewBox="0 0 270 48"> - <path fill="#fff" d="M75.5,11.8V7.9c0-2.2,1.2-3.5,3.1-3.5c1,0,1.8,0.3,3,0.9l1.8-3.5c-1.7-1-3.5-1.4-5.7-1.4 - C73.2,0.3,70,2.8,70,8c0,2.3,0.2,3.7,0.2,3.7h-2.5v3.8H70V37h5.4V15.6h5.1l1.4-3.8H75.5z M92.3,11.2c-6.7,0-11,5.2-11,13.3 - c0,8.1,4.3,13.2,11.1,13.2c6.8,0,11.2-5,11.2-13.2C103.6,16.5,99.5,11.2,92.3,11.2z M92.5,33.6c-3.3,0-5.1-2.1-5.1-9.5 - c0-6.1,1.5-8.8,5-8.8c3.2,0,5.2,2.1,5.2,9.3C97.6,30.9,95.8,33.6,92.5,33.6z M43.7,11.1c-2.5,0-4.4,1.3-6.4,4c0-1.4-0.3-2.8-0.9-4 - l-5,1.3c0.6,1.6,0.9,3.6,0.9,6.8V37h5.5V19.9c0.5-2,2.4-3.7,4.7-3.7c0.6,0,1,0.1,1.6,0.4l1.7-5.1C45,11.2,44.5,11.1,43.7,11.1z - M0,37h5.7V21.2h9.6v-4.6H5.7V7.2h11.8l0.7-4.7H0V37z M21.4,37h5.5V11.2l-5.5,1V37z M24.2,0.7c-2,0-3.6,1.6-3.6,3.7 - c0,2,1.5,3.6,3.5,3.6c2,0,3.7-1.6,3.7-3.6C27.8,2.3,26.2,0.7,24.2,0.7z M125.2,11.8h-6.4c-0.7,1.1-3.3,6.1-4,7.7 - c-1.2-2.3-3.4-6.3-4.6-8.2l-5.9,1.2l7.3,10.8L102.2,37h6.9c0.9-1.4,4.5-7.5,5.5-9.4c0.5,0.9,4.6,8,5.5,9.4h6.9l-9.2-13.8L125.2,11.8 - z M62.7,13.8c-2.1-1.9-4.4-2.6-6.9-2.6c-3.2,0-5.7,1-7.7,3.4C45.9,17.1,45,20,45,24.5c0,8.1,4.5,13.2,11.6,13.2 - c3.4,0,6.4-1.1,9.1-3.3L63.4,31c-1.9,1.6-3.9,2.5-6.3,2.5c-4.9,0-6.2-3.7-6.2-7.2v-0.4H66v-1.2C66,18.9,64.9,15.8,62.7,13.8z - M51,21.8c0-4.1,1.7-6.5,4.8-6.5c2.8,0,4.5,2.4,4.5,6.5H51z M198.5,14.3l-2.4-2.4c-1.2,0.8-2.2,1.1-3.5,1.1c-3,0-3.8-1.4-7.6-1.4 - c-5.4,0-9.2,3.4-9.2,8.4c0,3.3,2.2,6.1,5.6,7.2c-3.4,1-4.5,2.2-4.5,4.3c0,2.2,1.8,3.6,4.7,3.6h3.8c2.5,0,3.9,0.2,4.9,0.9 - c0.9,0.6,1.4,1.6,1.4,3c0,3.1-2.2,4.4-6,4.4c-2,0-3.8-0.5-5.1-1.2c-0.9-0.6-1.5-1.6-1.5-2.9c0-0.8,0.3-1.7,0.7-2.2l-4.1,0.4 - c-0.3,1-0.5,1.7-0.5,2.6c0,3.5,3,6.4,10.8,6.4c6.1,0,9.9-2.5,9.9-7.9c0-2.1-0.8-3.9-2.7-5.3c-1.5-1.1-3.1-1.4-6-1.4h-4 - c-1.3,0-2-0.5-2-1.2c0-0.8,1.1-1.7,4.5-2.9c1.8,0,3.4-0.3,4.7-1.1c2.3-1.4,3.7-4.1,3.7-6.8c0-1.6-0.5-3-1.5-4.3 - c0.4,0.2,1.1,0.3,1.7,0.3C195.8,15.8,196.9,15.4,198.5,14.3z M185,24.8c-3.1,0-4.8-1.7-4.8-4.8c0-3.5,1.6-5.1,4.7-5.1 - c3.3,0,4.6,1.5,4.6,4.9C189.5,23.1,188,24.8,185,24.8z M168.6,1.3c-1.7,0-3,1.4-3,3.1c0,1.7,1.4,3,3,3c1.7,0,3.1-1.3,3.1-3 - C171.6,2.7,170.3,1.3,168.6,1.3z M245.7,34.5c-1.1,0-1.4-0.6-1.4-2.5V6.5c0-3.8-0.6-5.9-0.6-5.9l-3.9,0.8c0,0,0.6,1.9,0.6,5.1v26.4 - c0,1.8,0.4,2.8,1.2,3.5c0.7,0.7,1.7,1,2.9,1c1,0,1.5-0.1,2.5-0.5l-0.8-2.5C246.2,34.4,245.8,34.5,245.7,34.5z M212.7,11.6 - c-3.2,0-6.1,1.8-8.3,3.9c0,0,0.2-1.8,0.2-3.4V6.3c0-3.8-0.7-5.9-0.7-5.9L200,1.1c0,0,0.7,1.9,0.7,5.1V37h3.9V19.3 - c2.1-2.7,4.9-4.2,7.2-4.2c1.3,0,2.3,0.4,2.9,1c0.7,0.7,0.9,1.8,0.9,3.7V37h3.8V19.1c0-1.8-0.1-2.6-0.4-3.6 - C218.4,13.2,215.7,11.6,212.7,11.6z M265.4,12.1l-4.9,16.4c-0.6,2-1.6,5.2-1.6,5.2s-0.7-3.9-1.5-6.2l-5.1-16.2l-3.9,1.3l5.4,15.6 - c0.8,2.5,2.2,7.4,2.5,9l1.6-0.3c-1.3,5.1-2.5,6.7-5.7,7.6l1.2,2.7c4.4-1,6.4-4.3,8-9.3l8.6-25.8H265.4z M234.9,15l1.2-2.9h-6.2 - c0-3.3,0.5-7.2,0.5-7.2l-4.1,0.9c0,0-0.4,3.9-0.4,6.3h-3.2V15h3.2v17.1c0,2.5,0.7,4.1,2.4,5c0.9,0.4,1.9,0.7,3.3,0.7 - c1.8,0,3.1-0.4,4.4-1l-0.6-2.5c-0.7,0.3-1.3,0.5-2.4,0.5c-2.4,0-3.2-0.9-3.2-3.7V15H234.9z M166.5,37h4.1V11.5l-4.1,0.6V37z - M156.8,21.3c0,5,0.4,10.5,0.4,10.5s-1.4-3.8-3.2-7.2L142.7,2.7h-4.8V37h4.2l-0.2-19.9c0-4.5-0.4-9.3-0.4-9.3s1.7,4.1,3.9,8.2l11,21 - h4.3V2.7h-4L156.8,21.3z M128.3,12.9c-0.3-0.1-0.7-0.1-1-0.1v2.3h0.3v-1c0.3,0,0.7,1,0.7,1s0.2,0,0.4,0c-0.2-0.3-0.3-0.7-0.6-1 - C128.8,14.1,128.9,13.1,128.3,12.9z M127.6,13.8v-0.7c0,0,0.7,0,0.7,0.3C128.3,13.9,127.8,13.9,127.6,13.8z M128,12 - c-1.1,0-2,0.9-2,2s0.9,2,2,2s2-0.9,2-2S129.1,12,128,12z M128,15.5c-0.8,0-1.5-0.7-1.5-1.5s0.7-1.5,1.5-1.5s1.5,0.7,1.5,1.5 - S128.8,15.5,128,15.5z"/> -</svg> diff --git a/browser/branding/nightly/content/about.png b/browser/branding/nightly/content/about.png Binary files differdeleted file mode 100644 index 5917b1e11..000000000 --- a/browser/branding/nightly/content/about.png +++ /dev/null diff --git a/browser/branding/nightly/content/aboutDialog.css b/browser/branding/nightly/content/aboutDialog.css deleted file mode 100644 index f0df8b1aa..000000000 --- a/browser/branding/nightly/content/aboutDialog.css +++ /dev/null @@ -1,29 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#aboutDialogContainer { - background-image: url("chrome://branding/content/about-background.png"); - background-repeat: no-repeat; - background-color: rgb(10,17,37); - color: #fff; -} - -.text-link { - color: #fff !important; - text-decoration: underline; -} - -.text-link:-moz-focusring { - border-color: #fff; -} - -#rightBox { - /* this margin prevents text from overlapping the planet image */ - margin-left: 280px; - margin-right: 20px; -} - -#bottomBox { - background-color: rgba(0,0,0,.7); -} diff --git a/browser/branding/nightly/content/icon48.png b/browser/branding/nightly/content/icon48.png Binary files differdeleted file mode 100644 index 88a307340..000000000 --- a/browser/branding/nightly/content/icon48.png +++ /dev/null diff --git a/browser/branding/nightly/content/icon64.png b/browser/branding/nightly/content/icon64.png Binary files differdeleted file mode 100644 index 2eab258cb..000000000 --- a/browser/branding/nightly/content/icon64.png +++ /dev/null diff --git a/browser/branding/nightly/content/identity-icons-brand.svg b/browser/branding/nightly/content/identity-icons-brand.svg deleted file mode 100644 index 6c33113e5..000000000 --- a/browser/branding/nightly/content/identity-icons-brand.svg +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- This Source Code Form is subject to the terms of the Mozilla Public - - License, v. 2.0. If a copy of the MPL was not distributed with this - - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> -<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32"> - <path fill="#144787" d="M15.953,30.000 C8.221,30.000 1.953,23.732 1.953,16.000 C1.953,8.268 8.221,2.000 15.953,2.000 C23.685,2.000 29.953,8.268 29.953,16.000 C29.953,23.732 23.685,30.000 15.953,30.000 ZM16.000,4.000 C9.373,4.000 4.000,9.373 4.000,16.000 C4.000,22.627 9.373,28.000 16.000,28.000 C22.627,28.000 28.000,22.627 28.000,16.000 C28.000,9.373 22.627,4.000 16.000,4.000 ZM27.085,16.311 C27.142,16.652 27.085,17.189 26.942,17.483 C26.885,17.958 26.784,18.470 26.561,18.931 C26.407,19.254 26.189,19.798 25.772,19.846 C25.646,19.858 25.319,20.214 25.283,20.155 C25.208,20.028 25.155,19.869 24.999,19.809 C24.873,19.751 24.990,19.698 24.895,19.643 C24.828,19.607 24.816,19.527 24.803,19.452 C24.756,19.459 24.710,19.469 24.668,19.492 C24.580,19.543 24.528,19.636 24.445,19.693 C24.391,19.671 24.300,19.631 24.307,19.561 C24.235,19.627 24.158,19.762 24.088,19.660 C24.030,19.576 24.071,19.459 24.068,19.367 C24.064,19.275 23.978,19.139 23.883,19.254 C23.816,19.334 23.769,19.345 23.665,19.365 C23.570,19.385 23.496,19.449 23.395,19.450 C23.156,19.456 23.176,19.563 23.117,19.744 C23.063,19.902 22.845,19.920 22.750,20.050 C22.700,20.117 22.549,20.431 22.421,20.318 C22.319,20.227 22.581,19.988 22.581,19.868 C22.581,19.767 22.498,19.709 22.475,19.618 C22.457,19.552 22.479,19.498 22.403,19.463 C22.448,19.376 22.500,19.239 22.455,19.142 C22.398,19.015 22.189,19.130 22.139,19.206 C22.088,19.277 21.964,19.523 21.848,19.374 C21.819,19.341 21.840,19.299 21.785,19.301 C21.747,19.301 21.720,19.325 21.702,19.354 C21.621,19.328 21.652,19.254 21.682,19.199 C21.770,19.040 21.781,18.864 21.900,18.718 C22.026,18.561 22.220,18.468 22.333,18.301 C22.372,18.242 22.441,18.131 22.385,18.064 C22.364,18.038 22.326,18.027 22.313,17.995 C22.297,17.956 22.315,17.913 22.310,17.874 C22.268,17.891 22.222,17.909 22.175,17.894 C22.169,17.851 22.175,17.805 22.164,17.761 C22.108,17.783 22.049,17.851 21.982,17.836 C21.919,17.823 21.927,17.867 21.857,17.865 C21.916,17.772 21.952,17.667 22.015,17.575 C22.051,17.521 22.101,17.473 22.130,17.413 C22.198,17.271 22.058,17.158 22.081,17.020 C22.106,16.863 22.281,16.825 22.417,16.839 C22.554,16.854 22.707,16.980 22.845,16.930 C22.975,16.887 23.014,16.706 22.977,16.590 C22.933,16.460 22.768,16.424 22.779,16.265 C22.784,16.172 22.831,16.089 22.813,15.996 C22.799,15.921 22.761,15.854 22.743,15.779 C22.700,15.598 22.867,15.549 22.923,15.405 C22.951,15.329 22.964,15.138 23.092,15.223 C23.205,15.300 23.158,15.476 23.266,15.564 C23.392,15.670 23.563,15.600 23.690,15.535 C23.796,15.480 23.958,15.425 24.012,15.314 C24.088,15.163 23.947,14.988 24.138,14.892 C24.217,14.853 24.415,14.744 24.505,14.779 C24.587,14.810 24.616,14.902 24.675,14.961 C24.699,14.882 24.731,14.810 24.781,14.748 C24.889,14.613 25.040,14.518 25.035,14.330 C25.082,14.104 25.010,14.119 24.970,13.940 C24.961,13.858 24.888,13.292 25.017,13.315 C25.310,13.366 25.065,12.676 25.022,12.563 C25.008,12.523 24.942,12.470 24.895,12.448 C24.767,12.330 24.692,12.528 24.611,12.454 C24.512,12.332 24.530,12.133 24.515,11.982 C24.490,11.818 24.397,11.698 24.393,11.534 C24.391,11.455 23.924,10.932 24.021,10.856 C24.079,10.823 24.816,10.879 24.776,10.823 C24.654,10.644 24.704,10.469 24.461,10.371 C24.307,10.307 24.204,10.138 24.055,10.065 C23.983,10.030 23.679,9.806 23.937,9.790 C24.106,9.779 23.902,9.526 23.827,9.502 C23.735,9.473 23.742,9.752 23.654,9.509 C23.635,9.469 23.273,9.012 23.264,9.056 C23.252,9.127 23.343,9.225 23.333,9.307 C23.306,9.533 22.982,9.108 22.993,9.125 C22.933,9.059 22.694,8.882 22.666,8.802 C22.671,8.819 22.774,8.629 22.775,8.629 C22.833,8.553 22.774,8.467 22.707,8.398 C22.624,8.314 22.486,8.305 22.473,8.177 C22.471,8.157 22.374,7.979 22.459,7.982 C22.529,7.988 22.754,8.172 22.836,8.210 C23.061,8.314 22.996,8.383 23.128,8.505 C23.313,8.638 23.606,8.799 23.768,8.997 C23.793,9.043 24.122,9.380 24.134,9.252 C24.138,9.209 24.019,8.872 23.971,8.855 C23.971,8.855 23.755,8.580 23.750,8.556 C23.751,8.565 23.408,8.154 23.493,8.168 C23.624,8.192 24.093,8.542 24.064,8.677 C24.044,8.766 24.221,8.830 24.248,8.912 C24.255,8.935 24.567,9.221 24.611,9.241 C24.658,9.263 24.819,9.415 24.855,9.460 C24.920,9.506 24.972,9.462 24.994,9.578 C25.003,9.631 25.087,9.819 25.114,9.855 C25.193,9.961 25.247,10.125 25.294,10.249 C25.360,10.431 25.319,10.633 25.323,10.821 C25.342,10.874 25.233,10.938 25.240,11.005 C25.253,11.111 25.254,11.235 25.269,11.329 C25.283,11.426 25.466,11.679 25.436,11.759 C25.366,11.907 25.416,11.891 25.486,12.027 C25.533,12.120 25.436,12.159 25.479,12.277 C25.296,12.295 25.477,12.379 25.360,12.421 C25.254,12.435 25.222,12.414 25.132,12.483 C25.100,12.506 25.506,13.100 25.580,12.526 C25.600,12.372 25.765,12.220 25.921,12.157 C26.006,12.120 26.087,12.281 26.110,12.120 C26.115,12.075 26.029,11.929 26.071,11.909 C26.155,11.878 26.299,12.539 26.365,12.588 C26.529,12.703 26.642,12.893 26.664,13.093 C26.687,13.325 27.108,13.685 27.021,13.898 C26.960,14.050 26.984,14.494 27.000,14.662 C27.027,14.841 27.085,14.984 27.086,15.176 C27.086,15.280 27.016,15.531 27.063,15.619 C27.169,15.815 27.050,16.103 27.085,16.311 ZM22.142,23.184 C22.112,23.125 22.171,23.051 22.238,23.053 C22.254,23.009 22.333,22.943 22.382,22.954 C22.416,22.963 22.419,23.000 22.453,22.969 C22.486,22.940 22.480,22.892 22.522,22.869 C22.633,22.801 22.687,22.918 22.624,23.003 C22.576,23.067 22.455,23.115 22.380,23.094 C22.284,23.069 22.231,23.151 22.142,23.184 ZM23.207,22.324 C23.239,22.315 23.270,22.260 23.306,22.269 C23.406,22.296 23.298,22.486 23.288,22.537 C23.275,22.612 23.284,22.763 23.169,22.745 L23.178,22.726 C23.171,22.725 23.158,22.726 23.151,22.728 C23.149,22.736 23.142,22.743 23.142,22.745 C23.147,22.701 23.158,22.644 23.137,22.603 C23.111,22.555 23.056,22.544 23.013,22.521 C22.969,22.499 22.959,22.482 22.986,22.442 C23.007,22.409 23.041,22.351 23.077,22.331 C23.117,22.311 23.164,22.338 23.207,22.324 ZM22.843,22.551 C22.923,22.537 22.969,22.582 23.023,22.635 C23.084,22.697 23.040,22.772 22.962,22.794 C22.887,22.818 22.856,22.754 22.786,22.754 C22.784,22.741 22.788,22.725 22.782,22.715 L22.784,22.717 C22.770,22.644 22.750,22.570 22.843,22.551 ZM21.519,24.762 C21.567,24.727 21.846,24.663 21.821,24.594 C21.794,24.527 21.833,24.497 21.894,24.472 C21.932,24.456 21.966,24.405 22.006,24.399 C22.036,24.472 22.031,24.559 22.135,24.559 C22.214,24.559 22.293,24.523 22.355,24.476 C22.432,24.421 22.439,24.330 22.536,24.295 C22.621,24.266 22.687,24.230 22.764,24.186 C22.833,24.148 22.894,24.066 22.975,24.056 C23.014,24.053 23.111,24.047 23.138,24.086 C23.178,24.144 23.007,24.248 22.971,24.277 C22.933,24.308 22.826,24.395 22.905,24.445 C22.964,24.479 23.050,24.417 23.102,24.395 C23.176,24.363 23.259,24.339 23.313,24.275 C23.363,24.217 23.378,24.138 23.448,24.097 C23.536,24.044 23.588,23.991 23.640,23.902 C23.674,23.845 23.670,23.783 23.719,23.732 C23.768,23.678 23.748,23.617 23.778,23.557 C23.830,23.464 23.868,23.572 23.893,23.610 C23.953,23.590 23.971,23.508 24.025,23.473 C24.059,23.452 24.122,23.435 24.138,23.393 C24.152,23.359 24.143,23.326 24.174,23.297 C24.231,23.242 24.357,23.260 24.429,23.226 C24.472,23.206 24.526,23.098 24.578,23.111 C24.487,23.399 24.310,23.603 24.102,23.820 C23.895,24.033 23.706,24.266 23.458,24.435 C23.205,24.609 22.957,24.793 22.680,24.931 C22.405,25.070 22.198,25.292 21.945,25.461 C21.384,25.837 20.791,26.207 20.145,26.425 C19.822,26.536 19.494,26.666 19.162,26.751 C19.054,26.779 18.944,26.802 18.835,26.828 C18.811,26.833 18.676,26.883 18.658,26.872 C18.648,26.848 18.444,26.892 18.414,26.908 C18.301,26.966 18.196,26.992 18.071,26.992 C17.968,26.992 17.857,26.963 17.765,27.012 C17.733,27.030 17.578,27.065 17.628,26.974 C17.655,26.924 17.821,26.954 17.862,26.954 C17.963,26.952 18.056,26.912 18.150,26.879 C18.270,26.839 18.383,26.793 18.504,26.755 C18.570,26.735 18.631,26.724 18.687,26.688 C18.784,26.624 18.892,26.637 18.993,26.598 C19.061,26.573 19.104,26.473 19.201,26.498 C19.250,26.511 19.275,26.533 19.329,26.533 C19.399,26.531 19.370,26.513 19.385,26.462 C19.403,26.392 19.458,26.381 19.487,26.438 C19.525,26.511 19.644,26.394 19.694,26.381 C19.771,26.363 19.759,26.287 19.866,26.290 C19.962,26.296 20.025,26.216 20.116,26.197 C20.163,26.186 20.285,26.190 20.310,26.145 C20.187,26.148 20.064,26.166 19.947,26.214 C19.825,26.263 19.710,26.334 19.579,26.360 C19.457,26.381 19.329,26.369 19.207,26.396 C19.090,26.422 18.986,26.482 18.874,26.520 C18.777,26.555 18.653,26.580 18.556,26.531 C18.448,26.473 18.551,26.391 18.624,26.372 C18.720,26.350 18.836,26.365 18.919,26.305 C18.986,26.258 19.005,26.172 19.025,26.099 C18.982,26.103 18.525,26.137 18.667,26.010 C18.732,25.950 18.835,25.935 18.919,25.917 C19.013,25.897 19.102,25.851 19.201,25.855 C19.324,25.860 19.401,25.950 19.520,25.868 C19.590,25.820 19.647,25.747 19.728,25.716 C19.807,25.684 19.904,25.746 19.976,25.693 C20.039,25.645 20.052,25.567 20.138,25.545 C20.224,25.523 20.384,25.545 20.399,25.418 C20.408,25.352 20.267,25.281 20.230,25.230 C20.183,25.164 20.122,25.079 20.066,25.020 C20.028,24.982 19.915,24.969 19.920,24.904 C19.929,24.802 20.086,24.807 20.156,24.791 C20.266,24.763 20.348,24.703 20.467,24.729 C20.569,24.749 20.647,24.763 20.738,24.703 C20.819,24.650 20.891,24.596 20.986,24.569 C20.943,24.654 20.934,24.754 20.879,24.835 C20.830,24.904 20.749,24.947 20.695,25.015 C20.542,25.206 20.843,25.316 20.879,25.172 C20.897,25.095 20.857,25.039 20.952,24.999 C21.010,24.975 21.102,24.977 21.110,24.907 C21.123,24.820 21.227,24.762 21.312,24.751 C21.400,24.738 21.497,24.663 21.583,24.671 C21.562,24.691 21.508,24.727 21.519,24.762 ZM19.358,6.878 C19.266,7.018 19.200,7.122 19.066,7.232 C18.993,7.294 19.013,7.534 18.871,7.436 C18.822,7.401 18.820,7.388 18.748,7.396 C18.700,7.401 18.649,7.447 18.639,7.487 C18.612,7.492 18.581,7.587 18.547,7.525 C18.527,7.534 18.419,7.572 18.400,7.563 C18.371,7.551 18.347,7.478 18.319,7.454 C18.245,7.394 18.373,7.308 18.310,7.246 C18.263,7.199 18.205,7.193 18.151,7.226 C18.065,7.283 18.029,7.228 17.946,7.244 C17.858,7.261 17.905,7.195 17.891,7.131 C17.853,7.113 17.808,7.117 17.770,7.128 C17.720,7.142 17.736,7.152 17.731,7.173 C17.713,7.157 17.630,7.152 17.618,7.150 C17.610,7.117 17.702,7.062 17.707,7.011 C17.707,6.997 17.689,6.860 17.684,6.855 C17.616,6.805 17.722,6.776 17.761,6.811 C17.806,6.849 17.844,6.778 17.902,6.802 C17.907,6.774 17.799,6.742 17.776,6.738 C17.715,6.729 17.653,6.800 17.589,6.807 C17.567,6.809 17.475,6.842 17.463,6.813 C17.452,6.791 17.468,6.758 17.475,6.738 C17.443,6.711 17.407,6.694 17.364,6.691 C17.299,6.685 17.233,6.705 17.173,6.672 C17.098,6.629 17.057,6.599 16.969,6.585 C16.906,6.574 16.852,6.537 16.843,6.474 C16.834,6.423 16.808,6.293 16.821,6.242 C16.893,6.228 16.846,6.304 16.904,6.308 C16.963,6.312 17.008,6.330 17.067,6.337 C17.118,6.343 17.191,6.377 17.242,6.361 C17.324,6.335 17.348,6.204 17.395,6.193 C17.393,6.175 17.382,6.160 17.366,6.149 C17.404,6.140 17.441,6.128 17.472,6.106 C17.445,6.091 17.382,6.133 17.391,6.075 C17.398,6.033 17.423,5.996 17.429,5.954 C17.438,5.869 17.231,5.867 17.181,5.887 C17.139,5.902 17.102,5.931 17.076,5.967 C17.037,6.025 16.994,6.000 16.925,5.991 C16.938,5.900 16.871,5.883 16.818,5.825 C16.742,5.745 16.690,5.636 16.699,5.528 C16.706,5.439 16.629,5.364 16.690,5.278 C16.785,5.145 17.116,5.151 17.272,5.206 C17.623,5.224 17.968,5.258 18.310,5.355 C18.696,5.464 19.038,5.663 19.417,5.781 C19.597,5.836 19.649,5.934 19.590,6.104 C19.539,6.250 19.669,6.293 19.784,6.333 C19.886,6.372 20.003,6.441 19.955,6.568 C19.913,6.678 19.759,6.701 19.658,6.718 C19.530,6.738 19.430,6.765 19.358,6.878 ZM16.767,16.426 C16.812,16.438 16.868,16.393 16.922,16.404 C16.956,16.411 16.963,16.433 16.990,16.444 C17.021,16.460 17.021,16.460 17.051,16.453 C17.073,16.438 17.096,16.433 17.127,16.449 C17.147,16.462 17.152,16.484 17.179,16.493 C17.218,16.510 17.247,16.493 17.289,16.491 C17.350,16.500 17.377,16.542 17.420,16.482 C17.447,16.426 17.459,16.373 17.526,16.373 C17.578,16.377 17.618,16.400 17.578,16.442 C17.553,16.473 17.535,16.502 17.538,16.551 C17.549,16.590 17.582,16.590 17.610,16.566 C17.643,16.533 17.653,16.473 17.709,16.466 C17.759,16.462 17.804,16.508 17.857,16.511 C17.882,16.513 17.905,16.508 17.932,16.517 C17.961,16.526 17.972,16.539 17.991,16.551 C18.040,16.571 18.076,16.553 18.115,16.577 C18.189,16.632 18.220,16.715 18.277,16.774 C18.311,16.807 18.364,16.817 18.391,16.852 C18.403,16.874 18.409,16.889 18.419,16.903 C18.439,16.914 18.459,16.925 18.473,16.947 C18.500,16.981 18.480,17.011 18.475,17.052 C18.468,17.087 18.484,17.116 18.502,17.153 C18.531,17.195 18.579,17.322 18.489,17.328 C18.466,17.335 18.432,17.335 18.414,17.331 C18.382,17.331 18.400,17.335 18.378,17.315 C18.346,17.291 18.313,17.266 18.283,17.242 C18.238,17.202 18.240,17.145 18.211,17.094 C18.195,17.065 18.162,17.054 18.124,17.038 C18.103,17.020 18.090,17.020 18.060,17.001 C18.033,16.992 18.008,16.998 17.975,16.998 C17.923,16.996 17.849,16.932 17.821,16.890 C17.804,16.861 17.801,16.847 17.767,16.847 C17.742,16.845 17.715,16.867 17.688,16.867 C17.621,16.867 17.571,16.830 17.499,16.848 C17.436,16.865 17.384,16.852 17.314,16.845 C17.240,16.848 17.161,16.836 17.105,16.785 C17.073,16.759 17.055,16.723 17.015,16.699 C16.979,16.692 16.938,16.694 16.911,16.684 C16.848,16.668 16.769,16.655 16.711,16.628 C16.665,16.608 16.636,16.566 16.595,16.535 C16.546,16.506 16.474,16.491 16.424,16.462 C16.379,16.449 16.264,16.422 16.318,16.375 C16.345,16.351 16.406,16.329 16.440,16.327 C16.501,16.336 16.505,16.386 16.546,16.415 C16.578,16.440 16.625,16.429 16.659,16.397 C16.679,16.375 16.674,16.358 16.704,16.377 C16.731,16.386 16.747,16.415 16.767,16.426 ZM16.489,5.335 C16.436,5.355 16.381,5.339 16.325,5.351 C16.325,5.348 16.323,5.342 16.323,5.339 C16.285,5.328 16.242,5.295 16.257,5.253 C16.303,5.233 16.589,5.189 16.598,5.257 C16.604,5.293 16.515,5.324 16.489,5.335 ZM15.832,5.765 C15.861,5.889 15.724,6.033 15.696,6.158 C15.671,6.273 15.550,6.434 15.455,6.505 C15.354,6.581 15.158,6.740 15.027,6.700 C14.950,6.678 14.871,6.658 14.791,6.638 C14.711,6.618 14.644,6.548 14.572,6.530 C14.617,6.417 14.687,6.558 14.741,6.477 C14.747,6.501 14.799,6.523 14.820,6.499 C14.844,6.477 14.822,6.415 14.822,6.388 C14.820,6.319 14.939,6.235 15.002,6.228 C15.047,6.224 15.099,6.226 15.137,6.200 C15.185,6.166 15.223,6.202 15.286,6.186 C15.331,6.177 15.503,6.078 15.480,6.018 C15.392,6.027 15.354,6.018 15.277,6.082 C15.293,6.020 15.419,5.951 15.399,5.894 C15.338,5.896 15.336,5.980 15.279,5.989 C15.223,5.998 15.214,5.892 15.182,5.865 C15.043,5.750 14.982,6.140 14.854,6.107 C14.797,6.093 14.815,6.013 14.732,6.029 C14.630,6.049 14.603,6.122 14.596,6.215 C14.592,6.268 14.500,6.330 14.459,6.379 C14.394,6.457 14.311,6.441 14.236,6.388 C14.171,6.344 14.180,6.242 14.101,6.215 C14.026,6.188 13.929,6.210 13.860,6.250 C13.778,6.297 13.736,6.394 13.657,6.437 C13.583,6.474 13.461,6.461 13.384,6.465 C13.339,6.466 13.136,6.492 13.157,6.397 C13.172,6.330 13.215,6.275 13.138,6.228 C13.098,6.202 13.019,6.153 13.062,6.097 C13.098,6.051 13.175,6.053 13.197,5.996 C13.127,5.958 13.031,5.947 13.035,5.849 C12.924,5.829 12.884,5.927 12.814,5.980 C12.717,6.051 12.773,5.914 12.792,5.882 C12.818,5.838 12.866,5.774 12.915,5.758 C12.965,5.739 12.969,5.690 13.003,5.656 L12.990,5.667 C12.951,5.628 12.933,5.550 12.951,5.499 C12.972,5.437 13.048,5.448 13.100,5.441 C13.256,5.422 13.431,5.288 13.592,5.340 C13.745,5.391 13.848,5.300 14.002,5.306 C14.080,5.308 14.169,5.293 14.247,5.286 C14.329,5.277 14.394,5.227 14.480,5.227 C14.542,5.227 14.680,5.238 14.631,5.328 C14.606,5.377 14.576,5.462 14.673,5.455 C14.800,5.446 14.887,5.264 15.005,5.237 C15.086,5.216 15.045,5.306 15.020,5.335 C15.011,5.344 14.915,5.492 14.993,5.461 C15.011,5.452 15.025,5.439 15.036,5.422 C15.063,5.380 15.111,5.377 15.160,5.364 C15.253,5.339 15.342,5.309 15.431,5.275 C15.604,5.207 15.669,5.282 15.818,5.349 C15.863,5.371 16.160,5.346 16.131,5.441 C16.111,5.504 15.976,5.534 15.920,5.552 C15.789,5.594 15.807,5.648 15.832,5.765 ZM12.967,8.084 C12.936,8.126 12.792,8.137 12.760,8.097 C12.764,8.090 12.767,8.077 12.774,8.072 L12.742,8.086 C12.694,8.134 12.623,8.154 12.557,8.145 C12.559,8.110 12.541,8.057 12.555,8.026 C12.571,7.993 12.614,7.984 12.638,7.957 C12.679,7.908 12.704,7.835 12.753,7.793 C12.807,7.747 12.907,7.731 12.927,7.815 C12.949,7.895 12.868,7.928 12.853,7.991 C12.909,7.988 13.008,8.032 12.967,8.084 ZM12.708,6.525 C12.735,6.534 12.771,6.548 12.803,6.552 C12.783,6.576 12.776,6.609 12.830,6.594 C12.803,6.652 12.746,6.714 12.683,6.731 C12.611,6.749 12.528,6.732 12.474,6.793 C12.386,6.893 12.501,7.060 12.631,7.008 C12.643,7.057 12.607,7.068 12.647,7.084 C12.530,7.226 12.440,7.387 12.298,7.166 C12.165,6.960 11.940,7.117 11.804,7.241 C11.654,7.376 11.638,7.600 11.856,7.676 C11.994,7.725 11.973,7.742 11.870,7.831 C11.917,7.886 11.775,7.937 11.759,8.004 C11.796,7.964 11.874,7.970 11.886,7.906 C11.951,7.917 11.911,7.837 11.960,7.848 C12.082,7.873 11.928,8.001 11.906,8.026 C11.949,8.055 11.998,8.032 12.045,8.032 C12.086,8.032 12.125,8.059 12.165,8.052 C12.221,8.044 12.194,7.999 12.230,7.982 C12.294,7.955 12.253,8.061 12.244,8.073 C12.205,8.130 12.176,8.248 12.109,8.261 C12.048,8.272 12.014,8.283 12.025,8.360 C12.034,8.432 12.057,8.425 12.009,8.502 C11.940,8.606 12.055,8.642 12.071,8.726 C12.088,8.815 12.061,8.791 12.140,8.830 C12.206,8.862 12.273,8.857 12.343,8.868 C12.426,8.879 12.566,8.782 12.537,8.689 C12.523,8.644 12.516,8.620 12.550,8.584 C12.573,8.558 12.640,8.502 12.674,8.544 C12.641,8.498 12.701,8.465 12.708,8.420 C12.715,8.365 12.814,8.374 12.778,8.303 C12.758,8.268 12.638,8.230 12.650,8.210 C12.728,8.201 12.810,8.190 12.884,8.221 C13.003,8.272 13.046,8.471 13.202,8.398 C13.366,8.321 13.483,8.163 13.529,7.995 C13.565,7.860 13.454,7.829 13.350,7.791 C13.287,7.767 13.278,7.727 13.249,7.669 C13.217,7.603 13.342,7.536 13.245,7.521 C13.125,7.501 13.084,7.376 13.209,7.325 C13.267,7.303 13.328,7.317 13.386,7.301 C13.438,7.286 13.458,7.144 13.506,7.228 C13.510,7.166 13.666,7.232 13.715,7.228 C13.783,7.223 13.729,7.164 13.790,7.172 C13.830,7.179 13.855,7.217 13.894,7.221 C13.948,7.226 13.947,7.181 13.984,7.162 C14.035,7.141 14.069,7.210 14.110,7.219 C14.155,7.228 14.202,7.261 14.249,7.239 C14.283,7.223 14.342,7.197 14.349,7.261 C14.362,7.348 14.405,7.403 14.414,7.478 C14.423,7.552 14.601,7.554 14.489,7.653 C14.425,7.709 14.358,7.815 14.263,7.786 C14.204,7.769 14.216,7.798 14.162,7.831 C14.114,7.860 14.107,7.913 14.063,7.917 C13.925,7.930 14.083,8.044 14.078,8.110 C14.072,8.166 14.112,8.194 14.114,8.245 C14.117,8.301 14.071,8.361 14.063,8.418 C14.051,8.503 14.216,8.647 14.263,8.718 C14.344,8.841 14.425,8.955 14.560,9.026 C14.644,9.070 14.684,9.165 14.763,9.216 C14.802,9.241 14.862,9.225 14.863,9.274 C14.863,9.320 14.858,9.371 14.874,9.416 C14.894,9.478 15.023,9.487 15.079,9.487 C15.088,9.588 15.235,9.480 15.279,9.469 C15.180,9.584 15.104,9.693 14.986,9.793 C14.930,9.839 14.865,9.899 14.790,9.910 C14.725,9.921 14.673,9.883 14.619,9.939 C14.576,9.983 14.585,10.052 14.543,10.100 C14.504,10.145 14.421,10.152 14.371,10.191 C14.347,10.207 14.112,10.371 14.128,10.251 C14.133,10.209 14.160,10.176 14.169,10.136 C14.182,10.080 14.117,10.076 14.092,10.049 C14.049,10.003 14.020,10.038 14.008,9.957 C14.000,9.912 13.986,9.861 13.945,9.832 C13.876,9.784 13.898,9.786 13.866,9.708 C13.840,9.646 13.781,9.606 13.758,9.546 C13.700,9.404 13.716,9.256 13.616,9.127 C13.612,9.178 13.652,9.220 13.635,9.260 C13.619,9.303 13.632,9.373 13.657,9.411 C13.569,9.404 13.513,9.376 13.450,9.316 C13.422,9.291 13.328,9.200 13.289,9.254 C13.337,9.249 13.441,9.394 13.504,9.425 C13.648,9.497 13.648,9.548 13.587,9.695 C13.646,9.706 13.736,9.655 13.776,9.724 C13.812,9.786 13.756,9.854 13.864,9.852 C13.848,9.996 13.706,10.089 13.698,10.234 C13.693,10.316 13.725,10.386 13.698,10.469 C13.670,10.557 13.600,10.633 13.506,10.659 C13.276,10.721 13.175,10.484 13.094,10.331 C13.060,10.267 12.974,10.209 12.898,10.245 C12.868,10.260 12.855,10.293 12.825,10.307 C12.767,10.336 12.706,10.322 12.652,10.362 C12.587,10.409 12.551,10.495 12.469,10.521 C12.418,10.537 12.350,10.521 12.307,10.553 C12.280,10.573 12.273,10.608 12.271,10.639 C12.235,10.646 12.208,10.670 12.185,10.697 C12.136,10.754 12.041,10.790 12.003,10.847 C11.951,10.923 12.066,10.992 12.057,11.069 C12.052,11.115 11.976,11.231 11.940,11.244 C11.777,11.300 11.894,11.463 11.937,11.554 C11.946,11.572 11.953,11.597 11.929,11.610 C11.890,11.634 11.904,11.650 11.929,11.698 C11.971,11.776 12.037,11.836 12.106,11.893 C12.163,11.938 12.289,11.965 12.305,12.031 C12.334,12.149 12.251,12.244 12.185,12.335 C12.133,12.406 12.091,12.488 12.055,12.568 C12.037,12.607 12.037,12.707 12.001,12.731 C11.852,12.829 11.879,12.435 11.707,12.526 C11.600,12.583 11.572,12.751 11.439,12.767 C11.370,12.776 11.343,12.705 11.334,12.652 C11.297,12.652 11.253,12.649 11.219,12.630 C11.140,12.592 11.192,12.567 11.210,12.512 C11.237,12.425 11.327,12.435 11.392,12.390 C11.475,12.332 11.396,12.281 11.397,12.211 C11.336,12.204 11.286,12.111 11.252,12.069 C11.183,11.989 11.117,11.987 11.018,11.985 C10.975,11.985 10.941,11.956 10.905,11.936 C10.892,11.985 10.712,11.934 10.651,11.965 C10.596,11.995 10.518,12.162 10.603,12.180 C10.572,12.250 10.491,12.328 10.502,12.405 C10.506,12.430 10.551,12.415 10.515,12.454 C10.486,12.483 10.480,12.526 10.473,12.565 C10.443,12.740 10.491,12.900 10.538,13.064 C10.459,13.084 10.383,13.122 10.310,13.162 C10.367,13.091 10.302,12.973 10.204,13.004 C10.204,13.039 10.191,13.071 10.177,13.100 C10.119,13.113 10.080,13.111 10.053,13.062 C10.015,12.993 10.056,13.013 10.087,12.960 C10.150,12.851 10.011,12.709 9.956,12.836 C9.952,12.725 9.761,12.548 9.729,12.762 C9.720,12.829 9.758,12.958 9.628,12.915 C9.571,12.896 9.510,12.771 9.499,12.716 C9.490,12.820 9.603,12.873 9.585,12.960 C9.576,13.009 9.481,13.090 9.441,13.126 C9.508,13.124 9.580,13.120 9.645,13.130 C9.643,13.179 9.601,13.206 9.601,13.268 C9.589,13.270 9.576,13.274 9.565,13.275 C9.610,13.332 9.574,13.414 9.558,13.476 C9.537,13.472 9.502,13.485 9.481,13.483 C9.477,13.518 9.463,13.538 9.434,13.529 C9.438,13.540 9.436,13.549 9.431,13.558 C9.420,13.567 9.407,13.567 9.396,13.560 C9.396,13.543 9.386,13.518 9.387,13.501 C9.334,13.552 9.305,13.470 9.245,13.481 C9.236,13.567 9.244,13.651 9.125,13.625 C9.078,13.616 8.979,13.507 8.934,13.520 C8.915,13.525 8.902,13.552 8.893,13.583 C8.871,13.574 8.846,13.569 8.818,13.567 C8.728,13.560 8.663,13.642 8.555,13.629 C8.435,13.614 8.418,13.629 8.320,13.698 C8.233,13.760 8.172,13.685 8.086,13.669 C8.028,13.658 7.971,13.656 7.915,13.640 C7.892,13.633 7.863,13.620 7.849,13.600 C7.822,13.560 7.726,13.569 7.676,13.563 C7.466,13.545 7.257,13.549 7.070,13.658 C6.928,13.742 6.752,13.875 6.723,14.046 C6.676,14.327 7.052,14.356 7.218,14.476 C7.431,14.629 6.987,14.759 6.881,14.797 C6.756,14.841 6.632,14.901 6.536,14.995 C6.461,15.068 6.412,15.243 6.277,15.185 C6.087,15.101 5.939,14.870 5.832,14.704 C5.745,14.664 5.666,14.383 5.655,14.294 C5.648,14.239 5.549,14.061 5.627,14.046 C5.643,14.001 5.601,13.953 5.583,13.917 C5.549,13.846 5.571,13.762 5.540,13.687 C5.508,13.611 5.630,13.479 5.614,13.385 C5.607,13.345 5.574,13.326 5.609,13.286 C5.652,13.233 5.659,13.195 5.670,13.130 C5.690,13.022 5.817,13.031 5.846,12.936 C5.855,12.909 5.857,12.856 5.893,12.847 C5.965,12.829 5.884,12.953 5.921,12.982 C5.923,12.884 5.956,12.789 5.956,12.687 C5.956,12.567 5.977,12.448 5.995,12.330 C6.008,12.239 6.024,12.146 6.065,12.064 C6.094,12.011 6.099,11.832 5.990,11.918 C5.986,11.721 5.988,11.524 6.024,11.331 C6.065,11.107 6.164,10.910 6.267,10.710 C6.466,10.324 6.626,9.908 6.869,9.546 C6.987,9.369 7.126,9.207 7.246,9.030 C7.309,8.934 7.378,8.841 7.426,8.737 C7.471,8.640 7.548,8.585 7.620,8.507 C7.750,8.369 7.854,8.237 8.009,8.119 C8.075,8.068 8.149,7.973 8.242,7.995 C8.345,8.017 8.375,7.937 8.449,7.889 C8.447,7.953 8.460,8.001 8.451,8.066 C8.508,8.004 8.546,7.917 8.598,7.849 C8.672,7.758 8.756,7.676 8.857,7.612 C8.895,7.587 8.920,7.547 8.960,7.523 C8.990,7.507 9.026,7.509 9.057,7.492 C9.093,7.470 9.316,7.357 9.283,7.319 C9.157,7.168 8.710,7.729 8.578,7.704 C8.573,7.633 8.758,7.538 8.809,7.503 C8.956,7.405 9.096,7.277 9.236,7.168 C9.384,7.053 9.533,6.931 9.691,6.829 C9.765,6.783 9.846,6.751 9.914,6.698 C9.963,6.661 10.017,6.589 10.089,6.598 C10.081,6.747 10.202,6.612 10.259,6.598 C10.400,6.563 10.547,6.463 10.678,6.404 C10.761,6.366 11.435,5.923 11.466,6.046 C11.529,6.053 11.561,5.965 11.640,5.978 C11.743,5.993 11.807,5.947 11.890,5.894 C12.027,5.805 12.172,5.716 12.312,5.632 C12.366,5.601 12.415,5.594 12.406,5.672 C12.400,5.719 12.303,5.739 12.269,5.759 C12.206,5.798 12.160,5.854 12.122,5.916 C12.064,6.007 11.985,6.080 11.920,6.168 C11.985,6.182 12.016,6.128 12.071,6.109 C12.140,6.089 12.154,6.142 12.224,6.098 C12.257,6.080 12.289,6.104 12.316,6.115 C12.356,6.131 12.365,6.106 12.397,6.093 C12.444,6.075 12.499,6.169 12.562,6.171 C12.758,6.171 12.357,6.397 12.553,6.426 C12.636,6.437 12.631,6.497 12.708,6.525 ZM12.925,6.519 C12.893,6.521 12.868,6.543 12.836,6.550 C12.827,6.552 12.814,6.552 12.803,6.552 C12.810,6.543 12.819,6.536 12.827,6.532 C12.857,6.519 12.893,6.517 12.925,6.519 ZM7.191,20.631 C7.273,20.622 7.280,20.739 7.342,20.770 C7.342,20.762 7.343,20.759 7.345,20.753 C7.390,20.788 7.412,20.824 7.421,20.882 C7.430,20.954 7.448,20.992 7.473,21.057 C7.491,21.103 7.494,21.205 7.426,21.221 C7.365,21.234 7.349,21.156 7.307,21.128 C7.200,21.057 7.047,21.183 7.002,20.999 C6.984,20.928 6.993,20.881 6.943,20.819 C6.903,20.770 6.860,20.739 6.896,20.671 C6.950,20.571 7.122,20.522 7.191,20.631 ZM7.360,20.726 C7.356,20.737 7.351,20.744 7.345,20.753 C7.340,20.748 7.334,20.744 7.329,20.740 L7.360,20.726 ZM7.298,20.467 C7.237,20.411 7.275,20.221 7.370,20.301 C7.410,20.332 7.426,20.425 7.405,20.462 C7.378,20.507 7.322,20.527 7.298,20.467 ZM7.521,14.913 C7.548,14.895 7.548,14.870 7.565,14.848 C7.588,14.815 7.606,14.817 7.636,14.830 C7.647,14.835 7.660,14.848 7.676,14.842 C7.699,14.833 7.678,14.824 7.694,14.819 C7.751,14.766 7.748,14.850 7.746,14.893 C7.748,14.943 7.768,14.928 7.795,14.952 C7.818,14.970 7.798,14.984 7.805,15.008 C7.814,15.030 7.843,15.037 7.861,15.065 C7.881,15.090 7.870,15.112 7.856,15.141 C7.805,15.218 7.705,15.178 7.640,15.141 C7.611,15.134 7.574,15.105 7.550,15.088 C7.527,15.072 7.496,15.057 7.473,15.041 C7.444,15.034 7.403,15.014 7.410,14.986 C7.412,14.968 7.458,14.935 7.475,14.930 L7.521,14.913 ZM16.778,18.530 C16.859,18.576 16.931,18.607 17.024,18.572 C17.107,18.539 17.164,18.488 17.260,18.497 C17.373,18.507 17.386,18.572 17.425,18.658 C17.486,18.789 17.698,18.758 17.670,18.940 C17.520,19.022 17.664,19.144 17.704,19.248 C17.724,19.301 17.720,19.359 17.722,19.416 C17.722,19.458 17.738,19.529 17.704,19.561 C17.673,19.591 17.603,19.591 17.564,19.600 C17.510,19.614 17.458,19.642 17.402,19.649 C17.305,19.664 17.229,19.600 17.141,19.667 C17.107,19.693 17.082,19.725 17.042,19.746 C16.997,19.767 16.942,19.775 16.893,19.786 C16.846,19.797 16.791,19.815 16.744,19.795 C16.706,19.778 16.688,19.736 16.652,19.716 C16.564,19.665 16.427,19.756 16.341,19.784 C16.273,19.806 16.147,19.875 16.075,19.840 C15.971,19.789 16.116,19.654 16.145,19.600 C16.190,19.510 16.170,19.410 16.192,19.315 C16.154,19.312 16.149,19.283 16.118,19.270 C16.107,19.264 16.080,19.266 16.068,19.263 C16.053,19.261 16.039,19.252 16.025,19.248 C16.019,19.292 15.949,19.334 15.951,19.272 C15.931,19.266 15.915,19.261 15.897,19.255 C15.899,19.219 15.965,19.099 16.010,19.100 L15.998,19.090 C16.111,18.986 16.235,18.865 16.391,18.833 C16.463,18.816 16.551,18.791 16.602,18.732 C16.659,18.667 16.589,18.596 16.607,18.523 C16.627,18.439 16.729,18.503 16.778,18.530 ZM17.698,17.537 C17.704,17.564 17.756,17.581 17.754,17.605 C17.754,17.616 17.691,17.621 17.680,17.621 C17.646,17.632 17.610,17.632 17.582,17.648 C17.560,17.659 17.542,17.676 17.519,17.687 C17.432,17.725 17.497,17.597 17.497,17.552 C17.502,17.512 17.465,17.406 17.504,17.366 L17.499,17.339 C17.499,17.315 17.488,17.293 17.506,17.266 C17.511,17.247 17.546,17.237 17.564,17.220 C17.587,17.209 17.610,17.176 17.632,17.198 C17.644,17.209 17.650,17.227 17.650,17.238 C17.666,17.255 17.684,17.273 17.695,17.295 C17.700,17.322 17.700,17.357 17.688,17.379 C17.682,17.419 17.693,17.430 17.698,17.468 C17.698,17.492 17.688,17.513 17.698,17.537 ZM18.757,18.490 C18.745,18.519 18.682,18.516 18.649,18.510 C18.631,18.510 18.613,18.510 18.595,18.494 C18.576,18.476 18.590,18.446 18.561,18.452 C18.536,18.448 18.522,18.477 18.493,18.481 C18.482,18.485 18.461,18.474 18.446,18.485 C18.376,18.497 18.414,18.514 18.407,18.563 C18.405,18.607 18.355,18.636 18.369,18.678 C18.378,18.718 18.407,18.767 18.425,18.802 C18.486,18.955 18.277,18.829 18.232,18.791 C18.186,18.760 18.141,18.740 18.133,18.683 C18.117,18.640 18.121,18.598 18.115,18.552 C18.107,18.441 18.141,18.333 18.151,18.224 C18.153,18.164 18.139,18.120 18.130,18.064 C18.115,18.022 18.076,17.982 18.119,17.949 C18.146,17.891 18.130,17.861 18.115,17.801 C18.099,17.759 18.092,17.738 18.087,17.692 C18.096,17.581 18.015,17.508 17.988,17.397 C17.977,17.348 18.000,17.298 18.060,17.326 L18.103,17.346 C18.119,17.371 18.115,17.395 18.141,17.399 C18.177,17.415 18.263,17.349 18.286,17.397 C18.293,17.417 18.272,17.424 18.279,17.446 C18.288,17.468 18.310,17.477 18.324,17.484 C18.367,17.504 18.405,17.523 18.416,17.572 C18.416,17.590 18.409,17.603 18.425,17.628 C18.443,17.646 18.461,17.645 18.479,17.645 C18.531,17.652 18.588,17.643 18.610,17.688 C18.648,17.741 18.569,17.739 18.565,17.783 C18.561,17.825 18.603,17.852 18.624,17.882 C18.648,17.909 18.680,17.951 18.689,17.989 C18.700,18.040 18.664,18.058 18.666,18.111 C18.658,18.160 18.736,18.188 18.714,18.250 C18.700,18.295 18.658,18.346 18.676,18.399 C18.696,18.435 18.772,18.445 18.757,18.490 ZM7.507,20.618 C7.588,20.596 7.665,20.660 7.744,20.642 C7.827,20.624 7.852,20.527 7.859,20.458 C7.892,20.498 7.935,20.489 7.964,20.527 C7.994,20.573 8.061,20.580 8.106,20.602 C8.125,20.545 8.077,20.452 8.079,20.391 C8.079,20.356 8.045,20.288 8.055,20.263 C8.079,20.205 8.188,20.155 8.244,20.137 C8.311,20.115 8.390,20.165 8.449,20.190 C8.508,20.216 8.573,20.201 8.634,20.188 C8.665,20.181 8.697,20.177 8.729,20.176 C8.737,20.148 8.751,20.123 8.773,20.103 C8.819,20.055 8.873,20.075 8.924,20.101 C9.021,20.146 9.100,19.953 9.118,19.873 C9.141,19.771 9.152,19.580 9.123,19.478 C9.091,19.359 9.062,19.325 9.172,19.266 C9.195,19.255 9.202,19.228 9.213,19.203 C9.121,19.037 9.073,18.856 9.166,18.701 C9.242,18.574 9.409,18.461 9.359,18.322 C9.443,18.330 9.529,18.337 9.616,18.344 C9.751,18.169 9.950,18.047 10.166,18.011 C10.292,17.871 10.493,17.721 10.644,17.834 C10.693,17.871 10.723,17.929 10.779,17.956 C10.833,17.982 10.896,17.971 10.955,17.969 C11.164,17.964 11.370,18.100 11.448,18.297 C11.397,18.359 11.349,18.421 11.298,18.483 C11.360,18.711 11.712,18.793 11.849,18.601 C11.940,18.476 11.946,18.270 12.089,18.219 C12.161,18.193 12.244,18.219 12.323,18.246 C12.325,18.244 12.325,18.244 12.327,18.242 C12.329,18.242 12.329,18.248 12.329,18.248 C12.395,18.270 12.462,18.292 12.516,18.290 C12.530,18.266 12.532,18.257 12.548,18.230 C12.546,18.231 12.564,18.255 12.568,18.264 C12.586,18.255 12.605,18.257 12.618,18.237 C12.672,18.162 12.627,18.051 12.661,17.965 C12.694,17.885 12.782,17.887 12.857,17.920 C12.909,17.814 12.960,17.712 13.028,17.566 C13.062,17.492 13.033,17.869 12.981,18.242 C12.987,18.246 12.983,18.255 12.990,18.259 C13.031,18.271 13.073,18.237 13.102,18.202 C13.170,18.118 13.220,18.016 13.307,17.949 C13.364,17.903 13.440,17.896 13.508,17.913 C13.538,17.865 13.571,17.809 13.587,17.805 C13.682,17.783 13.756,17.745 13.853,17.781 C13.936,17.814 14.004,17.880 14.090,17.902 C14.148,17.916 14.256,17.914 14.286,17.976 C14.310,18.027 14.351,18.027 14.412,18.044 C14.437,18.051 14.489,18.053 14.491,18.089 C14.488,18.109 14.477,18.113 14.457,18.100 C14.464,18.155 14.534,18.153 14.574,18.169 C14.648,18.200 14.709,18.250 14.772,18.295 C14.894,18.384 14.978,18.514 15.070,18.632 C15.093,18.663 15.196,18.783 15.153,18.825 C15.126,18.853 15.068,18.847 15.034,18.864 C14.978,18.889 14.898,18.920 14.849,18.955 C14.804,18.986 14.784,19.039 14.739,19.066 C14.617,19.139 14.518,18.955 14.452,18.900 C14.362,18.825 14.400,18.691 14.328,18.630 C14.213,18.530 14.056,18.485 13.921,18.419 C13.848,18.383 13.767,18.355 13.704,18.301 C13.661,18.262 13.619,18.219 13.560,18.206 C13.560,18.206 13.558,18.208 13.558,18.210 C13.528,18.322 13.670,18.374 13.742,18.426 C13.830,18.490 13.851,18.587 13.894,18.678 C13.945,18.783 14.027,18.871 14.103,18.958 C14.137,18.995 14.182,19.022 14.205,19.068 C14.227,19.111 14.207,19.161 14.238,19.201 C14.090,19.259 13.963,18.947 13.878,18.876 C13.844,18.845 13.774,18.809 13.727,18.827 C13.700,18.880 13.653,18.949 13.691,18.991 C13.722,19.024 13.718,19.075 13.734,19.115 C13.752,19.161 13.790,19.210 13.815,19.252 C13.846,19.299 13.900,19.319 13.930,19.367 C13.950,19.399 13.959,19.436 13.975,19.469 C14.002,19.525 14.080,19.622 14.153,19.580 C14.234,19.534 14.204,19.168 14.322,19.332 C14.383,19.418 14.403,19.857 14.581,19.762 C14.685,19.707 14.662,19.643 14.791,19.694 C14.853,19.716 14.926,19.605 14.953,19.713 C14.977,19.797 14.995,19.778 15.068,19.818 C15.126,19.849 15.122,19.926 15.122,19.981 C15.122,20.048 15.126,20.128 15.209,20.143 C15.282,20.154 15.264,20.239 15.275,20.290 C15.324,20.513 15.636,20.316 15.680,20.474 C15.690,20.516 15.696,20.558 15.742,20.576 C15.769,20.587 15.805,20.589 15.822,20.615 C15.872,20.684 15.867,20.724 15.971,20.748 C16.100,20.779 16.305,20.742 16.402,20.647 C16.445,20.607 16.462,20.511 16.517,20.489 C16.582,20.462 16.658,20.569 16.672,20.615 C16.701,20.697 16.704,20.766 16.782,20.821 C16.859,20.873 16.929,20.924 16.970,21.010 C17.069,21.214 16.835,21.365 16.915,21.558 C16.933,21.602 16.965,21.640 16.999,21.671 C16.992,21.691 16.976,21.733 16.997,21.752 C17.049,21.797 17.112,21.695 17.148,21.757 C17.247,21.936 17.013,22.016 16.902,22.085 C16.780,22.162 16.834,22.357 16.848,22.471 C16.943,22.466 17.021,22.378 17.121,22.377 C17.267,22.377 17.152,22.579 17.100,22.623 C16.986,22.715 16.789,22.739 16.654,22.675 C16.613,22.657 16.535,22.604 16.507,22.670 C16.478,22.734 16.417,22.792 16.462,22.865 C16.537,22.992 16.747,22.945 16.780,23.118 C16.801,23.237 16.622,23.313 16.749,23.391 C16.848,23.452 16.888,23.532 16.951,23.621 C17.028,23.732 17.170,23.521 17.220,23.656 C17.197,23.574 17.307,23.599 17.351,23.590 C17.414,23.579 17.463,23.523 17.481,23.464 C17.515,23.357 17.380,23.306 17.310,23.257 C17.251,23.215 17.262,23.186 17.310,23.140 C17.278,23.058 17.195,23.023 17.147,22.954 C17.085,22.865 17.127,22.721 17.217,22.664 C17.359,22.573 17.493,22.787 17.627,22.812 C17.778,22.841 17.946,22.805 18.071,22.914 C18.184,23.011 18.241,23.149 18.382,23.220 C18.443,23.251 18.506,23.268 18.518,23.344 C18.531,23.430 18.619,23.393 18.676,23.450 C18.714,23.486 18.718,23.543 18.777,23.557 C18.676,23.681 18.563,23.796 18.435,23.894 C18.329,23.976 18.211,24.051 18.144,24.169 C18.008,24.412 18.117,24.716 17.950,24.949 C17.808,25.150 17.592,25.250 17.520,25.498 C17.454,25.725 17.395,25.931 17.161,26.044 C16.893,26.172 16.582,26.210 16.289,26.239 C16.012,26.265 15.724,26.268 15.485,26.429 C15.262,26.578 15.043,26.706 14.764,26.706 C14.698,26.706 14.633,26.702 14.567,26.697 C14.511,26.739 14.475,26.799 14.421,26.842 C14.313,26.930 14.187,26.821 14.085,26.782 C14.101,26.815 14.105,26.848 14.096,26.883 C14.044,26.862 13.988,26.912 13.939,26.873 C13.896,26.842 13.871,26.790 13.813,26.779 C13.679,26.755 13.596,26.819 13.465,26.733 C13.274,26.609 13.078,26.627 12.855,26.598 C12.625,26.567 12.397,26.516 12.172,26.451 C11.769,26.336 11.334,26.207 10.968,26.001 C10.797,25.906 10.621,25.778 10.560,25.587 C10.534,25.512 10.556,25.416 10.529,25.345 C10.511,25.299 10.315,25.279 10.267,25.263 C10.162,25.228 9.925,25.244 9.972,25.088 C10.004,24.977 10.148,25.017 10.234,25.009 C10.403,24.995 10.387,24.822 10.285,24.732 C10.193,24.650 9.992,24.616 10.000,24.472 C10.011,24.326 10.107,24.022 9.911,23.964 C9.763,23.920 9.621,23.900 9.569,23.750 C9.542,23.670 9.472,23.616 9.441,23.532 C9.409,23.450 9.316,23.371 9.235,23.339 C9.179,23.315 9.024,23.342 9.003,23.278 C8.987,23.229 8.970,23.165 8.972,23.115 C8.983,22.940 9.218,23.211 9.285,23.211 C9.423,23.207 9.547,23.036 9.452,22.920 C9.494,22.900 9.569,22.909 9.589,22.858 C9.542,22.848 9.445,22.892 9.416,22.834 C9.387,22.777 9.449,22.699 9.400,22.648 C9.357,22.601 9.280,22.657 9.226,22.652 C9.161,22.646 9.265,22.577 9.262,22.553 C9.186,22.551 9.123,22.617 9.058,22.644 C8.999,22.672 8.936,22.688 8.877,22.715 C8.825,22.679 8.897,22.626 8.922,22.601 C8.978,22.548 8.943,22.490 8.922,22.431 C9.051,22.440 9.055,22.347 8.979,22.269 C8.880,22.169 8.925,22.096 8.880,21.981 C8.828,21.848 8.746,21.919 8.699,22.001 C8.611,22.152 8.525,21.963 8.483,22.003 C8.444,21.888 8.356,21.828 8.258,21.761 C8.170,21.702 8.158,21.597 8.097,21.518 C8.023,21.425 7.897,21.391 7.836,21.285 C7.780,21.189 7.755,21.076 7.680,20.990 C7.635,20.939 7.295,20.673 7.507,20.618 ZM8.787,22.989 C8.819,22.987 8.868,23.022 8.857,23.053 L8.843,23.067 C8.857,23.073 8.868,23.078 8.871,23.094 C8.819,23.100 8.827,23.167 8.807,23.202 C8.724,23.202 8.685,23.116 8.721,23.053 C8.731,23.031 8.758,22.991 8.787,22.989 ZM24.510,20.174 C24.490,20.126 24.542,20.112 24.566,20.075 C24.594,20.033 24.580,19.982 24.647,19.984 C24.675,19.986 24.679,19.993 24.704,19.984 C24.729,19.977 24.758,19.955 24.781,19.942 C24.796,20.002 24.814,20.039 24.843,20.090 C24.871,20.139 24.852,20.181 24.819,20.223 C24.796,20.250 24.773,20.281 24.737,20.292 C24.697,20.307 24.638,20.312 24.634,20.258 C24.631,20.258 24.625,20.258 24.621,20.256 C24.623,20.252 24.625,20.250 24.627,20.247 L24.618,20.258 C24.584,20.241 24.524,20.210 24.510,20.174 ZM24.501,21.961 C24.438,22.069 24.310,22.100 24.213,22.160 C24.127,22.216 24.075,22.304 23.990,22.360 C23.857,22.449 23.538,22.719 23.383,22.666 C23.368,22.568 23.539,22.466 23.609,22.418 C23.663,22.382 23.687,22.336 23.726,22.295 C23.785,22.236 23.856,22.205 23.897,22.121 C23.951,22.012 23.849,21.817 23.942,21.746 C24.014,21.693 24.048,21.761 24.122,21.739 C24.167,21.724 24.194,21.691 24.217,21.666 C24.287,21.562 24.233,21.373 24.104,21.345 C24.138,21.240 24.345,21.061 24.471,21.103 C24.460,21.148 24.426,21.207 24.449,21.263 C24.544,21.258 24.639,21.123 24.621,21.032 C24.612,20.992 24.566,20.934 24.526,20.915 C24.434,20.879 24.433,20.941 24.377,20.961 C24.260,21.005 24.127,20.992 24.003,21.048 C23.884,21.099 23.811,21.147 23.670,21.123 C23.660,21.107 23.660,21.090 23.670,21.076 C23.701,21.079 23.748,21.061 23.778,21.066 C23.785,20.997 23.917,20.955 23.978,20.924 C24.003,20.910 24.052,20.886 24.071,20.875 C24.096,20.859 24.138,20.821 24.161,20.808 C24.251,20.751 24.409,20.573 24.524,20.569 C24.560,20.667 24.616,20.740 24.733,20.722 C24.789,20.711 24.810,20.718 24.837,20.637 C24.855,20.584 24.859,20.533 24.821,20.487 C25.037,20.498 24.897,20.321 25.028,20.232 C25.096,20.288 25.143,20.212 25.217,20.234 C25.220,20.250 25.224,20.265 25.227,20.281 C25.247,20.272 25.287,20.278 25.308,20.259 C25.398,20.421 25.186,20.764 25.105,20.908 C25.053,20.999 24.979,21.074 24.942,21.170 C24.898,21.281 24.920,21.413 24.826,21.496 C24.751,21.562 24.690,21.588 24.623,21.668 C24.587,21.710 24.550,21.728 24.530,21.783 C24.508,21.845 24.537,21.899 24.501,21.961 Z"/> -</svg> diff --git a/browser/branding/nightly/content/jar.mn b/browser/branding/nightly/content/jar.mn deleted file mode 100644 index 140359a19..000000000 --- a/browser/branding/nightly/content/jar.mn +++ /dev/null @@ -1,19 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -browser.jar: -% content branding %content/branding/ contentaccessible=yes - content/branding/about.png - content/branding/about-background.png - content/branding/about-logo.png - content/branding/about-logo@2x.png - content/branding/about-wordmark.svg - content/branding/icon48.png - content/branding/icon64.png - content/branding/icon16.png (../default16.png) - content/branding/icon32.png (../default32.png) - content/branding/icon128.png (../mozicon128.png) - content/branding/identity-icons-brand.svg - content/branding/silhouette-40.svg - content/branding/aboutDialog.css diff --git a/browser/branding/nightly/content/moz.build b/browser/branding/nightly/content/moz.build deleted file mode 100644 index eb4454d28..000000000 --- a/browser/branding/nightly/content/moz.build +++ /dev/null @@ -1,7 +0,0 @@ -# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*- -# vim: set filetype=python: -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -JAR_MANIFESTS += ['jar.mn']
\ No newline at end of file diff --git a/browser/branding/nightly/content/silhouette-40.svg b/browser/branding/nightly/content/silhouette-40.svg deleted file mode 100644 index bef723b59..000000000 --- a/browser/branding/nightly/content/silhouette-40.svg +++ /dev/null @@ -1,1360 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?>
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-45 31 40 40">
- <path fill="#ccc" d="M-25,62.991c-6.622,0-11.991-5.369-11.991-11.991S-31.622,39.009-25,39.009S-13.009,44.378-13.009,51
- S-18.378,62.991-25,62.991z M-34.439,48.549c-0.002,0.007-0.004,0.013-0.006,0.02c0.002-0.004,0.006-0.006,0.007-0.01
- C-34.437,48.555-34.438,48.552-34.439,48.549z M-34.259,47.956c-0.001-0.006-0.003-0.005-0.002-0.012l0,0
- c-0.001,0.004-0.003,0.008-0.004,0.012l0.008,0.006C-34.258,47.96-34.258,47.958-34.259,47.956z M-34.245,48.067
- c-0.02,0.006-0.04,0.012-0.06,0.019c-0.026,0.084-0.054,0.168-0.078,0.254c0.004-0.002,0.007-0.004,0.01-0.008
- c0.007-0.006,0.013-0.014,0.019-0.021c0.008-0.007,0.009-0.014,0.011-0.023c0.003-0.009,0.003-0.01,0.008-0.017
- c0.01-0.012,0.006-0.037,0.005-0.051c0-0.011-0.007-0.015,0-0.024c0.005-0.007,0.012-0.014,0.017-0.019
- c0.011-0.01,0.026-0.015,0.039-0.022c0.007-0.003,0.013-0.008,0.017-0.014c0.003-0.005,0.004-0.011,0.007-0.017
- c0.007-0.014,0.008-0.027,0.008-0.044C-34.242,48.074-34.243,48.071-34.245,48.067z M-16.736,45.824
- c0.001,0.012,0.002,0.024,0.007,0.036c0.006,0.017,0.012,0.034,0.011,0.054c0,0.017,0.007,0.032,0.011,0.049
- c0.004,0.024,0.013,0.043,0.024,0.064c0.004,0.009,0.009,0.017,0.013,0.026c0.008,0.012,0.014,0.025,0.021,0.038
- c0.009,0.017,0.014,0.034,0.022,0.051c0.004,0.008,0.006,0.016,0.008,0.024c0.002,0.005,0.003,0.013,0.007,0.017
- c-0.02-0.021-0.027-0.053-0.042-0.077c-0.013-0.021-0.029-0.04-0.041-0.061c-0.009-0.016-0.021-0.028-0.023-0.045
- c-0.002-0.015-0.003-0.029-0.007-0.042c-0.003-0.007-0.004-0.012-0.009-0.019c-0.004-0.007-0.011-0.011-0.015-0.018
- c-0.01-0.015-0.018-0.034-0.025-0.051c-0.01-0.022-0.015-0.05-0.037-0.064c0.004,0.004,0.008,0.014,0.009,0.02
- c0.002,0.007,0.005,0.015,0.005,0.022c0,0.013-0.007,0.013-0.014,0.004c-0.005-0.006-0.007-0.015-0.01-0.023
- c-0.001-0.003-0.005-0.009-0.005-0.012c-0.001-0.004,0-0.007-0.001-0.01c-0.001-0.006-0.006-0.013-0.009-0.019
- c-0.004-0.01-0.007-0.018-0.014-0.027c-0.006-0.008-0.012-0.014-0.016-0.025c-0.005-0.014-0.007-0.028-0.017-0.04
- s-0.018-0.001-0.028,0.005c-0.006,0.004-0.014,0.005-0.022,0.008c-0.008,0.002-0.015,0.005-0.023,0.007
- c-0.006,0.002-0.012,0.003-0.018,0.005c-0.003,0.001-0.004,0.002-0.008,0.003c-0.004,0-0.008-0.001-0.012,0
- c-0.01,0.001-0.018,0.005-0.029,0.003c-0.003-0.001-0.005-0.003-0.008-0.003c-0.004-0.001-0.008-0.001-0.012,0
- c-0.02,0.001-0.016,0.025-0.012,0.039c0.004,0.017,0.013,0.032,0.021,0.047c0.001,0.004,0.004,0.008,0.006,0.012
- c0.001,0.004-0.001,0.007,0,0.011c0.002,0.009,0.006,0.017,0.004,0.027c-0.001,0.009-0.003,0.012-0.01,0.016
- c-0.008,0.004-0.01,0.004-0.006,0.014c0.003,0.006,0.008,0.013,0.009,0.019c0.001,0.007,0.001,0.015,0.003,0.022
- c0.004,0.017,0.012,0.034,0.02,0.049c0.005,0.008,0.014,0.031-0.004,0.019c-0.012-0.007-0.019-0.022-0.026-0.033
- c-0.004-0.007-0.009-0.011-0.016-0.015c-0.006-0.003-0.013-0.005-0.019-0.009c-0.011-0.007-0.011-0.014-0.011-0.026
- c0-0.007,0-0.015-0.008-0.019c-0.006-0.003-0.015-0.003-0.023-0.006c-0.005-0.002-0.011-0.004-0.015-0.007
- c0.009,0.008,0.012,0.018,0.015,0.028c0.007,0.02,0.016,0.038,0.027,0.056c0.009,0.016,0.02,0.022,0.034,0.032
- c0.011,0.008,0.022,0.024,0.029,0.035c0.008,0.01,0.015,0.019,0.024,0.028c0.009,0.009,0.019,0.015,0.025,0.027
- c0.008,0.014,0.01,0.027,0.013,0.042c0.004,0.013,0.003,0.027,0.003,0.041c0,0.009,0.001,0.018-0.001,0.026
- c0,0.003-0.002,0.005-0.002,0.008c-0.001,0.004,0,0.008,0,0.012c0,0.013,0,0.027,0,0.041c0,0.027,0.021,0.046,0.029,0.069
- c0.008,0.023,0.006,0.053,0.005,0.079c-0.001,0.004-0.002,0.006-0.003,0.011c-0.002,0.005,0,0.009-0.001,0.014
- c-0.001,0.005-0.003,0.008-0.004,0.012c0,0.003,0,0.006,0,0.008c0,0.004-0.003,0.004-0.004,0.007c-0.001,0.003,0,0.008,0,0.011
- c-0.001,0.004-0.003,0.002-0.003,0.008c0.002,0.003,0.003,0.005,0.003,0.008c0.005,0.013,0.015,0.032,0.027,0.041
- c0.005,0.003,0.012,0.004,0.019,0.004s0.013,0.005,0.018,0.012c0,0.002,0.001,0.004,0.001,0.006
- c0.003,0.002,0.005,0.005,0.006,0.008c0.002,0.004,0.003,0.011,0.004,0.015c0.004,0.017,0.01,0.029,0.019,0.042
- c0.011,0.015,0.021,0.018,0.039,0.019c0.016,0.001,0.029,0.009,0.042,0.02c0.006,0.005,0.011,0.013,0.018,0.018
- c0.005,0.003,0.013,0.004,0.018,0.007c0.009,0.004,0.018,0.006,0.028,0.009c0.008,0.003,0.017,0.005,0.026,0.007
- c0.007,0.001,0.015-0.001,0.023,0.001c0.007,0.002,0.014,0.006,0.022,0.006c0.005,0.001,0.018-0.002,0.022,0.001
- c0.006,0.004,0.02,0.036,0.03,0.029c0.003-0.002,0.001-0.019,0.001-0.022c0-0.009,0.004-0.018,0.004-0.027
- c0-0.005-0.001-0.01,0.001-0.015c0.001-0.004,0.003-0.006,0.003-0.011c-0.001-0.007-0.005-0.017-0.008-0.023
- c-0.012-0.023,0.022-0.001,0.018-0.021c0-0.003-0.006-0.009-0.008-0.012c-0.002-0.005-0.003-0.001-0.002-0.009
- c0.002-0.009,0.003-0.016,0.003-0.026c0-0.009,0-0.017-0.003-0.026c-0.003-0.007-0.009-0.013-0.011-0.02
- c-0.004-0.011,0.006-0.019,0-0.029c-0.003-0.007-0.008-0.01-0.011-0.015c-0.004-0.006-0.004-0.016-0.005-0.023
- c0-0.008-0.005-0.014-0.004-0.021c0.003,0.003,0.005,0.007,0.008,0.01c0.002,0.001,0.004,0.003,0.007,0.004
- c0,0.002,0.001,0.004,0.001,0.006c0.003,0.005,0.011,0.019,0.019,0.016c0.011-0.002-0.009-0.032-0.013-0.037
- c-0.008-0.01-0.017-0.018-0.023-0.03c-0.006-0.014-0.009-0.028-0.013-0.042c0.007,0.002,0.015,0.019,0.019,0.026
- c0.005,0.007,0.012,0.012,0.017,0.02c0.009,0.013,0.017,0.029,0.023,0.044c0.002,0.006,0.001,0.013,0.005,0.019
- c0.004,0.005,0.009,0.011,0.014,0.015c0.006,0.006,0.015,0.012,0.019,0.02c0.003,0.006,0.004,0.015,0.004,0.022
- c0,0.005,0,0.01,0,0.015c0.001,0.004,0.002,0.005,0.003,0.008c0.005,0.018,0.017,0.031,0.025,0.049
- c0.004,0.009,0.006,0.02,0.009,0.03c0.003,0.008,0.006,0.014,0.01,0.021c0.007,0.016,0.017,0.032,0.026,0.047
- c0.005,0.008,0.007,0.017,0.01,0.026c0.003,0.008,0.008,0.017,0.008,0.025c-0.006-0.007-0.016-0.008-0.022-0.014
- c-0.004-0.004-0.007-0.017-0.011-0.018c-0.007,0.022,0.013,0.046,0.022,0.064c0.006,0.013,0.012,0.028,0.017,0.041
- c0.004,0.008,0.007,0.016,0.01,0.023c0.003,0.008,0.01,0.013,0.014,0.019c0.01,0.013,0.019,0.033,0.019,0.049
- c0,0.015,0,0.03,0,0.045c0,0.015,0,0.033-0.008,0.045c-0.005,0.006-0.01,0.015-0.018,0.016c-0.006,0.001-0.017,0.001-0.023,0
- s-0.009-0.004-0.015-0.004c-0.005,0-0.007,0.003-0.012,0.003c-0.006,0.001-0.01-0.003-0.018-0.003c-0.015,0-0.031,0-0.043,0.01
- c-0.006,0.006-0.009,0.014-0.018,0.013c-0.004,0-0.004-0.003-0.007-0.004c-0.003-0.001-0.007,0-0.011-0.001
- c-0.006-0.001-0.012-0.005-0.02-0.002c-0.008,0.003-0.01,0.016-0.016,0.021c-0.006,0.006-0.02,0.011-0.028,0.008
- c-0.003-0.001-0.005-0.005-0.008-0.006c-0.004-0.002-0.008-0.001-0.012-0.001s-0.01-0.001-0.015,0
- c-0.007,0.001-0.01,0.005-0.016,0.008c-0.009,0.004-0.016,0.003-0.026,0.003c-0.017,0-0.037,0.003-0.053-0.006
- c-0.013-0.008-0.018-0.02-0.025-0.032c-0.007-0.015-0.009-0.032-0.023-0.042c-0.015-0.01-0.028-0.006-0.032,0.012
- c-0.005-0.001-0.017-0.015-0.021-0.019c-0.005-0.009-0.007-0.02-0.008-0.03c0-0.007-0.003-0.012-0.004-0.02
- c-0.001-0.009,0.003-0.013,0.004-0.021c0.002-0.012-0.006-0.022-0.004-0.035c0.001-0.008,0.004-0.013,0.004-0.022
- c0-0.008-0.001-0.012-0.005-0.018c-0.006-0.012-0.012-0.023-0.017-0.035c-0.005-0.015-0.011-0.026-0.024-0.037
- c-0.008-0.008-0.016-0.017-0.026-0.023c-0.007-0.005-0.014-0.008-0.02-0.015c-0.007-0.008-0.005-0.01-0.003-0.019
- c0.002-0.011-0.008-0.014-0.012-0.022c-0.003-0.007,0-0.008,0.001-0.016c0.003-0.018-0.018-0.021-0.03-0.027
- c-0.01-0.004-0.024-0.005-0.033-0.012c-0.006-0.004-0.01-0.011-0.016-0.014c0.001,0-0.009-0.003-0.009-0.003
- c-0.003-0.001-0.006-0.001-0.01-0.002c-0.008-0.002-0.015-0.007-0.023-0.009c-0.008-0.003-0.014-0.004-0.022-0.005
- c-0.006-0.001-0.01-0.005-0.015-0.007c-0.005-0.001-0.01-0.002-0.015-0.003c-0.008-0.003-0.015-0.007-0.023-0.009
- c-0.008-0.002-0.015-0.005-0.023-0.007c-0.005-0.001-0.01,0-0.015,0c-0.005-0.001-0.008-0.002-0.012-0.003
- c-0.021-0.005-0.042-0.003-0.063-0.005h-0.001c-0.006,0.002-0.01,0.003-0.016,0.004c-0.005,0-0.013-0.002-0.018,0
- c-0.006,0.001-0.007,0.004-0.015,0.004c-0.005,0-0.01-0.001-0.015,0c-0.01,0-0.021,0.006-0.03,0.011
- c-0.008,0.004-0.016,0.007-0.023,0.013c-0.004,0.004-0.01,0.011-0.011,0.017c-0.001,0.005,0,0.01-0.001,0.015
- c-0.002,0.009-0.005,0.018-0.007,0.027c-0.001,0.005-0.002,0.018-0.008,0.022c-0.008,0.005-0.011-0.008-0.019,0
- c-0.005,0.006-0.007,0.016-0.007,0.023c0.001,0.01,0.006,0.016,0.003,0.026c-0.002,0.008-0.001,0.015-0.004,0.023
- c-0.002,0.008-0.004,0.014-0.002,0.023c0.002,0.007,0.002,0.016,0.006,0.023c0.005,0.009,0.015,0.018,0.022,0.027
- c0.006,0.008,0.011,0.016,0.016,0.025c0.004,0.008,0.007,0.012,0.002,0.02c-0.004,0.007-0.013,0.008-0.02,0.01
- c-0.009,0.002-0.014-0.001-0.022,0.005c-0.005,0.005-0.008,0.01-0.016,0.011c-0.007,0.001-0.013-0.001-0.019-0.004
- c-0.004-0.003-0.012-0.01-0.016-0.011c-0.006-0.001-0.008,0.003-0.014,0.004c-0.004,0-0.008-0.001-0.011-0.001
- c-0.01,0.001-0.017,0.008-0.023,0.016c-0.006,0.006-0.009,0.01-0.007,0.018c0.002,0.008,0.006,0.014,0.01,0.02
- c0,0.001,0,0.001,0.001,0.002c0.01,0.006,0.019,0.013,0.028,0.02c0.026,0.02,0.046,0.051,0.068,0.076
- c0.01,0.012,0.019,0.026,0.029,0.039c0.014,0.017,0.033,0.025,0.049,0.039c0.009,0.008,0.018,0.018,0.027,0.025
- c0.011,0.008,0.028,0.01,0.039,0.018c0.012,0.009,0.02,0.013,0.036,0.018c0.013,0.004,0.025,0.011,0.036,0.019
- c0.008,0.006,0.023,0.021,0.026,0.031c0.002,0.007,0.002,0.012,0.005,0.019c0.005,0.009,0.014,0.017,0.024,0.023
- c0.015,0.009,0.027,0.016,0.036,0.033c0.006,0.014,0.01,0.029,0.012,0.045c0.012,0.002,0.02,0.009,0.032,0.006
- c0.008-0.003,0.014-0.01,0.02-0.015c0.019-0.015,0.036-0.024,0.061-0.017c0.008,0.002,0.024,0.009,0.031,0.014
- c0.009,0.007,0.011,0.02,0.017,0.03c0.004,0.009,0.007,0.019,0.013,0.028c0.009,0.013,0.021,0.024,0.033,0.035
- c0.017,0.016,0.038,0.036,0.045,0.06c0.006,0.024-0.011,0.048-0.004,0.073c0.004,0.012,0.012,0.024,0.016,0.035
- c0.005,0.01,0.007,0.019,0.012,0.029c0.005,0.011,0.005,0.021,0.007,0.033c0.002,0.009,0.011,0.019,0.011,0.03
- c0.026,0,0.022-0.06,0.022-0.076c0-0.015,0-0.025-0.004-0.039s-0.009-0.019-0.017-0.03c-0.011-0.014-0.017-0.037-0.023-0.052
- c-0.005-0.011-0.008-0.023-0.012-0.034c-0.005-0.012-0.011-0.022-0.017-0.034c-0.008-0.015-0.028-0.048-0.015-0.064
- c0.016-0.019,0.042,0.004,0.053,0.017c0.012,0.015,0.024,0.024,0.034,0.041c0.007,0.014,0.014,0.026,0.02,0.04
- c0.011,0.027,0.016,0.053,0.016,0.081c0,0.012,0.001,0.024,0,0.035c-0.001,0.015-0.006,0.021,0,0.036
- c0.011,0.03,0.026,0.059,0.036,0.09c0.007,0.022,0.012,0.041,0.016,0.064c0.002,0.013,0.008,0.02,0.004,0.035
- c-0.003,0.013-0.008,0.027-0.01,0.04c-0.001,0.006,0.001,0.012,0,0.017c-0.001,0.007-0.005,0.011-0.006,0.018
- c-0.001,0.006,0.001,0.012,0.001,0.018c-0.001,0.008-0.005,0.014-0.007,0.022c-0.005,0.025-0.012,0.05-0.018,0.075
- c-0.012,0.051-0.038,0.1-0.056,0.15c-0.006,0.014-0.006,0.024-0.006,0.039c0,0.013-0.004,0.031-0.001,0.042
- c0.003,0.01,0.011,0.018,0.013,0.029c0.002,0.015,0.004,0.026,0.011,0.04c0.002,0.004,0.003,0.007,0.005,0.011
- c0.002,0.002,0.004,0.006,0.006,0.009c0.101,0.09,0.202,0.179,0.302,0.269c0.157-0.083,0.314-0.165,0.471-0.247
- c0.084,0.037,0.169,0.074,0.253,0.111c-0.052,0.135-0.104,0.271-0.156,0.406c0.008,0.013,0.01,0.03,0.014,0.044
- c0.005,0.019,0.007,0.039,0.012,0.058c0.001,0.007,0.007,0.016,0.008,0.023c0.003,0.009,0.002,0.018,0.002,0.027
- c0,0.01,0,0.019,0,0.028c0,0.008-0.005,0.017-0.006,0.024v-0.008l-0.004-0.001c-0.003-0.008,0.001-0.017-0.001-0.026
- c-0.002-0.01-0.006-0.016-0.006-0.027c0.001-0.017,0.004-0.039,0.001-0.055c-0.004-0.013-0.012-0.026-0.016-0.039
- c-0.002-0.009-0.005-0.018-0.008-0.026c-0.001-0.004-0.001-0.005-0.001-0.007c-0.008,0.021-0.017,0.042-0.025,0.063
- c0.003,0.005,0.004,0.01,0.01,0.016c0.013,0.014,0.017,0.03,0.022,0.048c0.003,0.012,0.003,0.031,0,0.043
- c-0.002,0.009-0.005,0.013-0.004,0.022c0,0.006,0.001,0.016,0,0.022c-0.003,0.01-0.019,0.028-0.029,0.031
- c-0.012,0.004-0.026-0.005-0.033-0.015c-0.007-0.01-0.011-0.023-0.016-0.034c-0.004,0.01-0.008,0.021-0.012,0.031
- c0.004,0.007,0.01,0.012,0.012,0.019c0.004,0.011,0.001,0.027,0.001,0.038s0.002,0.023,0.001,0.033
- c-0.004,0.022-0.017,0.044-0.024,0.065c-0.007,0.024-0.013,0.045-0.022,0.068c-0.008,0.023-0.011,0.046-0.022,0.068
- c-0.008,0.02-0.013,0.046-0.02,0.066c-0.006,0.018-0.012,0.039-0.02,0.055c-0.006,0.014-0.013,0.017-0.012,0.032
- c0,0.011,0,0.022,0,0.032c0,0.022-0.005,0.041-0.011,0.061c-0.006,0.018-0.015,0.036-0.022,0.054
- c-0.004,0.008-0.004,0.018-0.007,0.027c-0.001,0.006-0.004,0.009-0.004,0.016c0,0.005,0.002,0.012,0,0.017
- c-0.003,0.012-0.01,0.024-0.011,0.038c-0.001,0.013-0.005,0.025-0.005,0.038c-0.001,0.011,0,0.022,0,0.032
- c0,0.013,0.005,0.021,0.005,0.033c0.001,0.014-0.003,0.026-0.005,0.038c-0.001,0.004-0.004,0.01-0.004,0.012
- c-0.001,0.006,0,0.011-0.001,0.016c-0.001,0.005-0.005,0.004-0.005,0.01c0,0.004,0.004,0.012,0.005,0.017
- c0,0.013-0.004,0.02-0.006,0.032c-0.003,0.014,0,0.031,0,0.045s-0.007,0.024-0.01,0.037c-0.002,0.011-0.004,0.022-0.007,0.033
- c-0.001,0.005,0.001,0.011,0.001,0.016c-0.001,0.005-0.004,0.008-0.005,0.012c-0.001,0.006-0.003,0.015-0.001,0.021
- c0.001,0.005,0.005,0.005,0.006,0.01c0.002,0.01,0,0.023,0,0.033c0,0.014-0.004,0.025-0.006,0.039c-0.002,0.01,0,0.021,0,0.032
- c0,0.009,0.002,0.013,0.004,0.022c0.001,0.004,0,0.013,0.002,0.016c0.006,0.008,0.023,0.001,0.031-0.001
- c0.009-0.003,0.016-0.011,0.027-0.009c0.007,0.001,0.014,0.009,0.019,0.014c0.017,0.017,0.026,0.025,0.026,0.05
- c0,0.011,0,0.022,0,0.033c0,0.016,0,0.017,0.016,0.016c0.014,0,0.021-0.001,0.028,0.011c0.004,0.009,0.005,0.019,0.016,0.022
- c0.008,0.003,0.021,0.001,0.026-0.007c0.006-0.009-0.004-0.021,0.005-0.029c0.008,0.019,0,0.048-0.004,0.067
- c-0.002,0.008-0.002,0.015-0.006,0.024c0,0-0.003,0.011-0.004,0.012c-0.002,0.01-0.001,0.021-0.006,0.031
- c-0.005,0.01-0.011,0.019-0.015,0.028c-0.006,0.012-0.015,0.018-0.024,0.028c-0.005,0.006-0.014,0.017-0.016,0.025
- c-0.003,0.01,0.004,0.02,0.005,0.029c0.003,0.014,0.005,0.019,0.002,0.034c-0.002,0.012-0.001,0.023-0.001,0.035
- c0,0.015-0.006,0.025-0.011,0.039c-0.008,0.022-0.017,0.042-0.022,0.065c-0.002,0.009,0,0.016-0.004,0.026
- c-0.002,0.006-0.005,0.012-0.008,0.018c-0.005,0.009-0.011,0.017-0.015,0.027c-0.008,0.018-0.009,0.038-0.02,0.056
- c-0.003,0.004-0.009,0.009-0.013,0.013c-0.003,0.004-0.004,0.007-0.006,0.011c-0.009,0.012-0.017,0.027-0.026,0.04
- c-0.008,0.01-0.021,0.02-0.032,0.028c-0.01,0.008-0.019,0.018-0.028,0.026c-0.009,0.007-0.017,0.018-0.027,0.023
- c-0.012,0.006-0.018-0.001-0.024-0.012c-0.009-0.016-0.01-0.02-0.026-0.007c-0.006,0.005-0.013,0.01-0.017,0.017
- c-0.005,0.007-0.005,0.015-0.008,0.023c-0.003,0.004-0.006,0.005-0.007,0.01c-0.003,0.01,0.001,0.023,0,0.033
- c-0.001,0.011-0.005,0.021-0.006,0.032c0,0.015-0.004,0.027-0.005,0.041c-0.003,0.029-0.015,0.056-0.016,0.085
- c-0.001,0.011-0.006,0.02-0.006,0.032c0,0.01,0.003,0.024,0.001,0.033c-0.003,0.01-0.008,0.014-0.017,0.018
- c-0.002,0.001-0.015,0.004-0.016,0.005c-0.003,0.007,0.003,0.006,0.004,0.011c0.001,0.005,0,0.01,0.001,0.015
- c0.002,0.011,0.009,0.021,0.006,0.033c-0.002,0.005-0.005,0.005-0.006,0.01s0,0.012,0,0.017c0,0.014,0,0.02-0.007,0.032
- c-0.006,0.012-0.013,0.02-0.015,0.033c-0.001,0.012-0.004,0.027-0.01,0.037c-0.008,0.013-0.019,0.022-0.028,0.033
- c-0.007,0.008-0.014,0.019-0.02,0.028c-0.007,0.011-0.016,0.017-0.023,0.027c-0.007,0.01-0.013,0.017-0.017,0.028
- c-0.004,0.011-0.007,0.022-0.012,0.032c-0.012,0.024-0.023,0.054-0.03,0.081c-0.006,0.024-0.014,0.048-0.028,0.069
- c-0.004,0.005-0.008,0.011-0.012,0.016c0,0.009,0,0.017,0.002,0.025c0.005,0.018,0.009,0.046,0.004,0.065
- c-0.001,0.007-0.004,0.009-0.006,0.016c0,0.005,0.001,0.011,0.001,0.017c0,0.01,0.001,0.024-0.007,0.033
- c-0.017,0.017-0.037-0.004-0.049-0.015c-0.017-0.016-0.034-0.033-0.048-0.051c-0.004-0.006-0.01-0.011-0.015-0.017
- c-0.007-0.008-0.013-0.022-0.021-0.028c-0.015-0.011-0.04-0.001-0.046,0.018c-0.001,0.004,0,0.011-0.001,0.016
- c-0.001,0.008-0.005,0.013-0.004,0.022c0.001,0.012,0.006,0.02,0.006,0.033c-0.001,0.013,0.002,0.024,0.005,0.037
- c0.002,0.007,0.008,0.016,0.01,0.024c0.004,0.024,0.011,0.045,0.023,0.069c0.021,0.044,0.03,0.086,0.047,0.131
- c0.004,0.01,0.011,0.021,0.013,0.032c0.001,0.011,0,0.023,0,0.033c0,0.022-0.006,0.045-0.015,0.065
- c-0.017,0.039-0.036,0.073-0.073,0.097c-0.01,0.007-0.023,0.013-0.031,0.023c-0.008,0.011-0.012,0.024-0.023,0.033
- c-0.018,0.015-0.028,0.027-0.038,0.049c-0.004,0.009-0.011,0.019-0.018,0.027c-0.004,0.005-0.01,0.008-0.014,0.012
- c-0.002,0.003-0.002,0.008-0.005,0.011c-0.005,0.007-0.012,0.013-0.017,0.02c-0.007,0.01-0.011,0.023-0.018,0.032
- c-0.007,0.009-0.019,0.016-0.021,0.028c-0.001,0.006,0.001,0.011-0.001,0.017c-0.002,0.006-0.004,0.009-0.004,0.016
- c-0.001,0.011,0.001,0.018-0.011,0.022c-0.009,0.003-0.02,0.006-0.029,0.001c-0.007-0.005-0.011-0.015-0.014-0.023
- c-0.001-0.002-0.002-0.004-0.003-0.005c-0.013-0.002-0.022-0.011-0.03-0.021c-0.011-0.013-0.027-0.035-0.031-0.051
- c-0.002-0.005,0-0.01-0.003-0.014c-0.001-0.003-0.006-0.005-0.008-0.008c-0.005-0.006-0.005-0.014-0.007-0.021
- c-0.007-0.019-0.005-0.04-0.01-0.059c-0.003-0.016-0.01-0.029-0.012-0.044c-0.003-0.021,0.005-0.039,0.006-0.06
- c0-0.009-0.004-0.022-0.009-0.033c-0.02-0.01-0.041-0.018-0.062-0.021c-0.024-0.003-0.037-0.011-0.053,0.012
- c-0.006,0.008-0.007,0.018-0.014,0.026c-0.006,0.006-0.014,0.011-0.02,0.017c-0.009,0.008-0.013,0.018-0.021,0.028
- c-0.005,0.007-0.012,0.014-0.016,0.021c-0.006,0.012-0.006,0.024-0.007,0.037c0,0.011-0.003,0.021-0.005,0.032
- c-0.002,0.019-0.01,0.034-0.011,0.053c-0.001,0.018-0.001,0.039-0.005,0.057c-0.006,0.026-0.028,0.05-0.041,0.073
- c-0.008,0.014-0.014,0.033-0.03,0.041c-0.003,0.001-0.009,0.002-0.012,0.004c-0.001,0-0.002,0.001-0.003,0.001
- c-0.175,0.457-0.35,0.913-0.525,1.37c0,0.001,0.001,0,0.001,0.002c0.002,0.013-0.004,0.021-0.006,0.032
- c-0.002,0.011,0.003,0.023,0.001,0.033c-0.003,0.012-0.015,0.025-0.022,0.034c-0.007,0.007-0.013,0.013-0.02,0.02
- c-0.047,0.122-0.094,0.245-0.141,0.367c0.116,0.027,0.232,0.055,0.348,0.082c0.005-0.004,0.01-0.008,0.015-0.012
- c0.01-0.006,0.022-0.01,0.032-0.016c0.007-0.005,0.012-0.011,0.017-0.017c0.004-0.003,0.006-0.005,0.008-0.006
- c0.001-0.002,0.002-0.004,0.003-0.006c0.006-0.009,0.012-0.014,0.02-0.022c0.012-0.013,0.027-0.024,0.04-0.036
- c0.012-0.011,0.022-0.022,0.033-0.033c0.012-0.012,0.026-0.021,0.038-0.033c0.01-0.01,0.025-0.02,0.037-0.028
- c0.007-0.005,0.013-0.009,0.017-0.016c0.001-0.001,0.001-0.001,0.002-0.002c0.008-0.012,0.017-0.023,0.025-0.035
- c0.002-0.004,0.004-0.008,0.006-0.012c0.001-0.004,0.006-0.005,0.008-0.008c0.048-0.065,0.095-0.131,0.142-0.196
- c0.009-0.017,0.022-0.036,0.027-0.053c0.004-0.012,0.004-0.021,0.012-0.032c0.009-0.011,0.021-0.022,0.032-0.033
- c0.014-0.014,0.027-0.028,0.037-0.045c0.004-0.006,0.01-0.012,0.014-0.018c0.007-0.011,0.013-0.023,0.021-0.033
- c0.004-0.007,0.016-0.03,0.027-0.029c0.003,0,0.001,0.004,0.002,0.005c0.131-0.182,0.262-0.363,0.393-0.544
- c0.001-0.004-0.001-0.009,0.001-0.012c0.005-0.011,0.014-0.017,0.023-0.027c0.002-0.003,0.006-0.009,0.009-0.011
- c0.001-0.001,0.003-0.001,0.004-0.002c0.019-0.026,0.038-0.053,0.057-0.079c0.002-0.005,0.006-0.009,0.006-0.015
- c0.001-0.005-0.001-0.011,0-0.017c0.001-0.006,0.005-0.01,0.006-0.016c0.001-0.005-0.001-0.011-0.001-0.017
- c0.001-0.003,0.005-0.01,0.005-0.011c0-0.008-0.001-0.008-0.003-0.016c-0.005-0.017,0.001-0.031,0.009-0.046
- c0.007-0.013,0.022-0.048,0.043-0.034c0.007,0.005,0.005,0.015,0.013,0.019c0.008,0.005,0.021,0.001,0.027-0.002
- c0.007-0.004,0.012-0.01,0.018-0.015c0.026-0.036,0.053-0.073,0.079-0.109c-0.007-0.001-0.015-0.002-0.022-0.003
- c-0.01-0.002-0.022,0-0.032,0c-0.02,0-0.056,0.005-0.05-0.027l0.007-0.003c-0.001,0-0.002-0.001-0.002-0.001
- c-0.006-0.003-0.014-0.006-0.016-0.012c-0.002-0.007,0.004-0.016,0.006-0.022c0.004-0.01,0.004-0.018,0.007-0.028
- c0.009-0.032,0.037-0.059,0.042-0.092c0.001-0.007-0.001-0.014,0.001-0.022c0.002-0.007,0.004-0.014,0.006-0.022
- c0.003-0.015,0.01-0.035,0.019-0.049c0.009-0.014,0.021-0.027,0.034-0.038c0.012-0.009,0.027-0.02,0.028-0.037
- c0.007-0.002,0.013,0.001,0.02-0.002c0.004-0.001,0.013-0.007,0.018-0.01c0.008-0.004,0.017-0.021,0.025-0.021
- c0.002,0.01,0.005,0.018,0.007,0.028c0.002,0.016,0.007,0.033,0.01,0.049c0.001,0.011,0.003,0.026,0.001,0.037
- c-0.001,0.006-0.005,0.01-0.006,0.016c-0.001,0.007,0.001,0.015,0,0.022c-0.002,0.021-0.009,0.046-0.018,0.065
- c-0.009,0.022-0.014,0.048-0.02,0.071c-0.003,0.014-0.009,0.025-0.014,0.038c0.102-0.037,0.204-0.075,0.305-0.112
- c0.052,0.073,0.104,0.145,0.156,0.218c-0.134,0.131-0.269,0.263-0.404,0.394c0.001,0.002,0,0.004,0,0.006
- c0.004,0.023,0.023,0.036,0.023,0.06c-0.001,0.013,0.003,0.031,0,0.044c-0.003,0.009-0.01,0.018-0.013,0.028
- c-0.003,0.014-0.01,0.028-0.013,0.042c-0.003,0.012-0.002,0.026-0.002,0.038c0,0.026,0,0.05-0.005,0.075
- c-0.003,0.014-0.006,0.025-0.006,0.04c0.001,0.014-0.002,0.024-0.005,0.038c-0.003,0.012-0.005,0.025-0.009,0.037
- c-0.004,0.011-0.01,0.022-0.012,0.033c-0.001,0.005,0,0.011-0.002,0.016c-0.003,0.007-0.012,0.015-0.017,0.022
- c-0.006,0.011-0.012,0.022-0.019,0.033c-0.007,0.012-0.008,0.027-0.016,0.039c-0.006,0.009-0.011,0.017-0.016,0.027
- c-0.006,0.011-0.01,0.021-0.014,0.032c-0.004,0.013-0.011,0.018-0.019,0.027c-0.009,0.012-0.018,0.023-0.028,0.033
- c-0.012,0.012-0.024,0.019-0.033,0.033c-0.011,0.017-0.019,0.033-0.026,0.05c-0.002,0.005-0.006,0.01-0.007,0.015
- c-0.001,0.005,0.002,0.01-0.001,0.015c-0.003,0.008-0.014,0.014-0.02,0.019c-0.016,0.012-0.039,0.021-0.051,0.037
- c-0.007,0.009-0.014,0.017-0.02,0.027c-0.005,0.008-0.009,0.016-0.017,0.022c-0.007,0.005-0.018,0.007-0.027,0.009
- c-0.006,0.002-0.01,0.001-0.016,0.002c-0.006,0-0.008,0.003-0.012,0.004c-0.023,0.005-0.046-0.007-0.06,0.016
- c-0.01,0.015-0.021,0.031-0.03,0.046c-0.017,0.029-0.048,0.047-0.071,0.071c-0.017,0.019-0.027,0.039-0.05,0.052
- c-0.005,0.003-0.008,0.002-0.013,0.005c-0.002,0.002-0.005,0.006-0.008,0.008c-0.006,0.007-0.012,0.012-0.016,0.021
- c-0.014,0.027-0.025,0.057-0.035,0.086c-0.005,0.013-0.022,0.029-0.032,0.039c-0.01,0.011-0.021,0.019-0.028,0.033
- c-0.005,0.009-0.008,0.019-0.014,0.028c-0.012,0.021-0.023,0.042-0.035,0.063c-0.011,0.018-0.016,0.042-0.026,0.061
- c-0.009,0.019-0.022,0.037-0.033,0.054c-0.02,0.033-0.029,0.072-0.047,0.105c-0.011,0.02-0.021,0.036-0.035,0.053
- c-0.017,0.02-0.014,0.044-0.028,0.064c-0.012,0.018-0.026,0.033-0.035,0.052c-0.009,0.018-0.014,0.035-0.025,0.052
- c-0.011,0.019-0.03,0.032-0.041,0.051c-0.01,0.017-0.02,0.035-0.028,0.053c-0.009,0.021-0.024,0.036-0.037,0.055
- c-0.005,0.008-0.011,0.013-0.016,0.021c-0.007,0.012-0.016,0.017-0.025,0.026c-0.009,0.01-0.015,0.021-0.027,0.028
- c-0.007,0.004-0.013,0.005-0.019,0.013c-0.006,0.008-0.008,0.018-0.013,0.025c-0.005,0.006-0.012,0.011-0.016,0.017
- c-0.009,0.01-0.016,0.022-0.026,0.029c-0.009,0.006-0.018,0.01-0.026,0.016c-0.02,0.016-0.025,0.002-0.041-0.011
- c-0.01-0.007-0.022-0.013-0.033-0.019c-0.012-0.005-0.025-0.009-0.037-0.014c-0.01-0.005-0.015-0.011-0.027-0.011
- c-0.013-0.001-0.024,0.002-0.036,0.005c-0.008,0.002-0.019,0.005-0.03,0.006c-0.017,0.01-0.028,0.021-0.043,0.033
- c-0.005,0.003-0.01,0.007-0.016,0.009c-0.013,0.004-0.026,0.007-0.039,0.012c-0.008,0.004-0.018,0.006-0.027,0.011
- c-0.008,0.004-0.015,0.01-0.022,0.015c-0.019,0.011-0.041,0.017-0.058,0.03c-0.015,0.011-0.028,0.021-0.044,0.03
- c-0.016,0.008-0.033,0.014-0.05,0.022c-0.013,0.007-0.022,0.018-0.034,0.027c-0.005,0.004-0.006,0.001-0.011,0.006
- c-0.003,0.003-0.006,0.009-0.009,0.013c-0.009,0.01-0.013,0.022-0.022,0.034c-0.017,0.024-0.036,0.05-0.058,0.068
- c-0.018,0.014-0.028,0.031-0.038,0.05c-0.012,0.024-0.033,0.039-0.056,0.052c-0.019,0.01-0.042,0.025-0.053,0.045
- c-0.007,0.01-0.018,0.023-0.022,0.034c-0.004,0.009-0.004,0.021-0.008,0.031c-0.008,0.022-0.027,0.034-0.044,0.047
- c-0.021,0.018-0.039,0.04-0.057,0.062c-0.014,0.017-0.036,0.028-0.055,0.037c-0.004-0.008,0.01-0.019,0.014-0.026
- c0.006-0.011,0.017-0.026,0.012-0.038c-0.009,0.002-0.019,0.011-0.027,0.016c-0.01,0.006-0.016,0.007-0.027,0.011
- c-0.014,0.003-0.027,0.017-0.036,0.028c-0.015,0.016-0.027,0.027-0.045,0.038c-0.016,0.01-0.029,0.023-0.045,0.03
- c-0.014,0.007-0.023,0.018-0.037,0.025c-0.018,0.008-0.032,0.021-0.049,0.03c-0.021,0.01-0.039,0.026-0.06,0.035
- c-0.016,0.007-0.032,0.013-0.048,0.022c-0.017,0.01-0.032,0.02-0.05,0.03c-0.007,0.004-0.011,0.004-0.018,0.011
- c-0.004,0.004-0.008,0.01-0.013,0.013c-0.01,0.008-0.022,0.016-0.033,0.022c-0.007,0.004-0.015,0.008-0.023,0.011
- c-0.006,0.003-0.011,0.002-0.017,0.004c-0.003,0-0.005,0.002-0.006,0.004c-0.023,0.001-0.002-0.026,0.005-0.037
- c0.005-0.007,0.011-0.012,0.013-0.021c0.001-0.009-0.004-0.019,0.001-0.027c0.002-0.005,0.01-0.008,0.013-0.013
- c0.005-0.005,0.01-0.013,0.013-0.02c0.009-0.018,0.016-0.036,0.033-0.05c0.01-0.008,0.024-0.01,0.034-0.019
- c0.007-0.008,0.011-0.019,0.02-0.025c0.007-0.006,0.016-0.008,0.023-0.013c0.008-0.007,0.012-0.021,0.014-0.029
- c0.002-0.008-0.001-0.015,0.002-0.022c0.002-0.006,0.01-0.012,0.014-0.017c0.008-0.009,0.015-0.018,0.022-0.027
- c0.016-0.019,0.03-0.037,0.04-0.059c0.01-0.02,0.021-0.037,0.033-0.055c0.007-0.009,0.014-0.018,0.021-0.027
- c0.005-0.008,0.017-0.02,0.02-0.028c0.005-0.012,0.002-0.03,0.002-0.043c-0.001-0.019-0.005-0.024-0.022-0.028
- c-0.013-0.004-0.017-0.008-0.026-0.017c-0.005-0.004-0.009-0.003-0.013-0.004c-0.344,0.335-0.687,0.671-1.031,1.006
- c-0.061-0.042-0.122-0.085-0.183-0.128c-0.002,0.003-0.005,0.006-0.006,0.009c-0.013,0.031-0.044,0.08-0.08,0.087
- c-0.008,0.002-0.009,0.001-0.017,0.006c-0.005,0.003-0.01,0.008-0.016,0.01c-0.009,0.002-0.025,0.003-0.033-0.003
- c-0.003-0.003-0.005-0.006-0.005-0.01c-0.002,0.003-0.003,0.005-0.004,0.007c-0.007,0.014-0.02,0.029-0.023,0.045
- c-0.004,0.02,0.003,0.034-0.007,0.053c-0.007,0.012-0.012,0.026-0.019,0.039c-0.004,0.008-0.005,0.013-0.007,0.022
- c-0.002,0.01-0.004,0.012-0.011,0.02c-0.009,0.012-0.018,0.023-0.032,0.031c-0.015,0.008-0.036,0.005-0.049-0.002l0.003-0.007
- c-0.002,0.001-0.005,0.002-0.008,0.001c-0.009-0.004-0.006-0.017-0.005-0.024c0.002-0.01,0.006-0.025,0.011-0.034
- c0.006-0.011,0.016-0.017,0.022-0.027c0.002-0.004,0.007-0.01,0.008-0.014c0.003-0.008,0-0.017,0.003-0.026
- c0.002-0.011,0.005-0.01,0-0.021c-0.004-0.01-0.01-0.018-0.014-0.027c-0.007-0.017,0.005-0.023,0.007-0.039
- c0.001-0.01-0.001-0.012,0.005-0.022c0.005-0.007,0.009-0.012,0.013-0.02c0.005-0.014,0.007-0.026,0.025-0.029
- c0.002,0,0.006,0,0.01,0c0-0.018,0.007-0.037,0.017-0.049c0.013-0.015,0.03-0.028,0.034-0.048c0.001-0.011-0.001-0.023-0.001-0.033
- c0-0.005,0.002-0.009,0.003-0.014c-0.001-0.002-0.002-0.004-0.004-0.006c-0.344-0.241-0.689-0.482-1.033-0.722
- c0.006-0.039,0.013-0.079,0.02-0.118c-0.014,0-0.028,0-0.041,0c-0.009,0-0.022,0.003-0.027-0.006
- c-0.005-0.01,0.009-0.026,0.014-0.033c0.006-0.009,0.008-0.017,0.013-0.027c0.004-0.007,0.01-0.013,0.014-0.021
- c0.006-0.01,0.01-0.02,0.014-0.031c0.002-0.005,0.004-0.006,0.004-0.012c0.001-0.008,0-0.014,0.001-0.021
- c0.002-0.008,0.009-0.018,0.014-0.025c0.008-0.009,0.009-0.014,0.012-0.025c0.005-0.018,0.014-0.041,0.023-0.059
- c0.001-0.001,0.003-0.002,0.004-0.003c0.012-0.068,0.023-0.137,0.035-0.205c-0.176-0.03-0.352-0.06-0.528-0.09
- c0.067-0.179,0.135-0.359,0.203-0.538c-0.089-0.116-0.178-0.231-0.267-0.346c0.037-0.043,0.074-0.086,0.111-0.128
- c-0.005-0.007-0.01-0.013-0.017-0.018c-0.204,0.031-0.408,0.062-0.612,0.094c-0.004-0.042,0.013,0.467-0.012-0.127
- c-0.024-0.594,0.79-0.564,1.185-0.846c-0.005-0.014-0.01-0.028-0.014-0.042c-0.008-0.025-0.013-0.053-0.025-0.077
- c-0.011-0.024-0.02-0.049-0.036-0.07c-0.014-0.017-0.036-0.032-0.039-0.054c-0.003-0.02,0.009-0.039,0.015-0.056
- c0.008-0.018,0.028-0.026,0.045-0.035c0.009-0.005,0.019-0.007,0.027-0.014c0.009-0.008,0.01-0.015,0.015-0.026
- c0.007-0.013,0.018-0.02,0.011-0.037c-0.001-0.003-0.006-0.008-0.008-0.012c-0.003-0.005-0.004-0.011-0.007-0.016
- c-0.011-0.019-0.012-0.04-0.032-0.055c-0.02-0.014-0.04-0.028-0.06-0.042c-0.02-0.012-0.033-0.031-0.055-0.039
- c-0.022-0.008-0.042-0.035-0.043-0.06c-0.001-0.011,0-0.022,0-0.033c0-0.014,0.003-0.024,0.005-0.038
- c0.002-0.01-0.002-0.022,0.001-0.032c0.003-0.009,0.013-0.017,0.019-0.023c0.014-0.013,0.024-0.027,0.034-0.04
- c-0.145-0.072-0.29-0.143-0.435-0.215c-0.005,0.005-0.011,0.01-0.012,0.016c-0.006-0.001-0.015-0.021-0.02-0.028
- c-0.002-0.003-0.005-0.005-0.008-0.007c-0.101-0.05-0.203-0.101-0.304-0.151c-0.032-0.038-0.064-0.077-0.097-0.116
- c-0.011-0.005-0.018-0.016-0.032-0.019c-0.013-0.003-0.019,0-0.029-0.01c-0.011-0.012-0.013-0.024-0.031-0.028
- c-0.008-0.002-0.009,0.001-0.016-0.005c-0.006-0.004-0.013-0.012-0.018-0.017c-0.009-0.007-0.016-0.01-0.026-0.016
- c-0.009-0.005-0.011-0.011-0.018-0.02c-0.003-0.005-0.006-0.008-0.01-0.011c-0.006-0.004-0.016-0.004-0.021-0.008
- c-0.009-0.007-0.011-0.021-0.02-0.028c-0.007-0.004-0.014-0.005-0.019-0.013c-0.004-0.005-0.005-0.014-0.01-0.018
- c-0.006-0.006-0.01-0.003-0.016-0.006c-0.014-0.006-0.011-0.023-0.02-0.033c-0.01-0.01-0.018-0.006-0.029-0.011
- c-0.011-0.003-0.025-0.022-0.032-0.031c-0.015-0.022-0.04-0.033-0.055-0.055c-0.01-0.012-0.017-0.021-0.029-0.032
- c-0.015-0.014-0.02-0.03-0.031-0.047c-0.007-0.01-0.017-0.018-0.021-0.03c-0.004-0.014,0.004-0.024,0.005-0.038
- c0.001-0.025,0.01-0.045-0.002-0.069c-0.005-0.011,0.002-0.018,0.005-0.026c-0.059-0.071-0.118-0.142-0.177-0.214
- c0.011-0.004,0.023-0.008,0.034-0.012l0.051-0.034c-0.007-0.015-0.015-0.032-0.006-0.049c0.007-0.011,0.017-0.026,0.025-0.037
- c0.009-0.01,0.024-0.015,0.033-0.025c0.025-0.026,0.023-0.063,0.024-0.098c-0.252-0.022-0.504-0.045-0.755-0.067
- c0.009-0.109,0.019-0.218,0.029-0.327c-0.002-0.001-0.004-0.003-0.006-0.005c-0.009-0.01-0.017-0.015-0.023-0.027
- c-0.007-0.017-0.001-0.038,0.018-0.045c0.006-0.003,0.012,0.001,0.018,0.002c0.004-0.051,0.009-0.102,0.013-0.154
- c-0.005-0.003-0.01-0.006-0.015-0.011c-0.009-0.01-0.015-0.019-0.027-0.027c-0.011-0.006-0.017-0.01-0.023-0.021
- c-0.006-0.01-0.006-0.017-0.006-0.028c0-0.007-0.001-0.015,0-0.021c0.002-0.008,0.01-0.014,0.011-0.022
- c0.001-0.009-0.009-0.02-0.016-0.026c-0.003-0.002-0.013-0.01-0.016-0.011c-0.005-0.002-0.012,0.001-0.016-0.002
- c-0.021-0.015,0.031-0.046-0.012-0.054c-0.007-0.001-0.01,0.003-0.015-0.004c-0.002-0.003-0.004-0.018-0.005-0.021
- c-0.003-0.015-0.001-0.031-0.001-0.046c0-0.016,0.002-0.034,0-0.049c-0.001-0.009-0.005-0.016-0.006-0.025
- c-0.001-0.01,0-0.02,0-0.03c0-0.031,0.013-0.066,0.004-0.097c-0.006-0.025-0.003-0.05,0.003-0.076
- c0.006-0.022,0.01-0.042,0.015-0.065c0.007-0.028,0.009-0.058,0.027-0.081c0.011-0.014,0.02-0.037,0.038-0.039
- c0.017-0.001,0.018,0,0.026-0.016c0.008-0.015,0.007-0.027,0.007-0.044c0-0.022-0.001-0.044,0.004-0.065
- c0.003-0.011,0.003-0.022,0.006-0.032c0.003-0.012,0.001-0.026,0.001-0.038c0-0.022-0.005-0.043-0.006-0.065
- c0-0.013,0-0.026,0-0.039V49.35c0-0.013-0.001-0.028,0.002-0.041c0.001-0.005,0.003-0.007,0.004-0.013c0.001-0.005,0-0.011,0-0.017
- c0-0.01-0.001-0.021,0-0.032c0-0.012,0.006-0.024,0.009-0.034c0.004-0.01,0.007-0.022,0.014-0.03
- c0.007-0.009,0.015-0.007,0.026-0.007c0.009,0,0.024-0.001,0.031-0.007c0.012-0.009,0.006-0.019,0.003-0.031
- c-0.003-0.011,0-0.022-0.001-0.033c-0.001-0.012-0.003-0.013,0.01-0.02c0.022-0.011,0.042-0.019,0.066-0.024
- c0.012-0.002,0.022,0.002,0.032,0.005c0.011,0.003,0.022,0.001,0.033,0.001c0.011,0,0.022-0.001,0.033,0
- c0.012,0.002,0.019,0.006,0.032,0.006c0.011,0,0.022,0,0.033,0c0.01-0.001,0.018,0.002,0.027,0.004
- c0.007-0.002,0.014-0.004,0.022-0.005c0.012,0,0.026-0.001,0.038,0c0.011,0.002,0.016,0.006,0.027,0.006c0.011,0,0.022,0,0.033,0
- c0.01,0,0.023,0.002,0.032,0c0.007-0.001,0.011-0.005,0.017-0.006c0.007-0.001,0.015,0.001,0.022,0.001
- c0.019,0,0.046-0.005,0.065-0.001c0.005,0.001,0.006,0.005,0.01,0.006c0.007,0.002,0.018,0.002,0.026,0.004
- c0.015,0.004,0.022,0.012,0.035,0.022c0.016,0.013,0.027,0.036,0.043,0.046c0.008,0.006,0.018,0.009,0.027,0.014
- c0.014,0.007,0.024,0.01,0.038,0.013c0.008,0.002,0.008,0.006,0.016,0.003c0.002,0,0.01-0.008,0.012-0.009
- c0.007-0.006,0.014-0.011,0.02-0.018c0.006-0.006,0.011-0.011,0.018-0.015c0.01-0.007,0.02-0.005,0.032-0.007
- c0.009-0.001,0.019-0.007,0.028-0.008c0.007-0.001,0.014,0,0.02-0.001c0.012-0.002,0.022-0.009,0.034-0.006
- c0.025,0.005,0.044,0.035,0.065,0.048c0.011,0.006,0.022,0.013,0.033,0.018c0.01,0.004,0.02,0.005,0.029,0.009
- c0.009,0.004,0.016,0.008,0.024,0.014c0.015,0.01,0.032,0.011,0.049,0.016c0.023,0.006,0.055,0.022,0.071,0.038
- c0.004,0.004,0.012,0.015,0.013,0.02c0,0.006-0.005,0.012-0.006,0.017c-0.002,0.007-0.005,0.014-0.006,0.021
- c-0.004,0.019,0.02,0.048,0.033,0.059c0.013,0.012,0.028,0.026,0.043,0.034c0.002,0.001,0.01,0.003,0.013,0.004
- c0.004,0.002,0.007,0.004,0.01,0.005c0.012,0.006,0.018,0.009,0.016,0.024c-0.003,0.013-0.009,0.014-0.017,0.021
- c-0.007,0.007-0.012,0.017-0.016,0.028c-0.014,0.038-0.022,0.074-0.022,0.115c0,0.014,0.003,0.034,0,0.048
- c-0.001,0.004-0.002,0.008-0.003,0.012c0.022,0.011,0.043,0.022,0.065,0.033c0.094-0.079,0.189-0.158,0.283-0.238
- c-0.269-0.352-0.538-0.704-0.807-1.056c-0.004,0.003-0.008,0.006-0.014,0.006c-0.005,0.001-0.007,0.002-0.012,0.003
- c-0.004,0.001-0.01,0.001-0.014,0c-0.022-0.005-0.047-0.009-0.067-0.019c-0.027-0.013-0.052-0.029-0.075-0.047
- c-0.025-0.02-0.045-0.05-0.05-0.081c-0.003-0.019,0.003-0.037-0.006-0.054c-0.007-0.012-0.014-0.022-0.019-0.035
- c-0.006-0.017,0.002-0.037,0.01-0.052c0.004-0.008,0.009-0.016,0.009-0.026c-0.001-0.004-0.002-0.007-0.002-0.011
- c-0.062-0.08-0.124-0.161-0.186-0.242c0.389-1.261,1.079-1.084,1.742-0.555c0.001,0,0.002,0.001,0.003,0.001
- c0.005,0,0.012-0.002,0.017-0.001c0.005,0.002,0.006,0.006,0.011,0.007c0.01,0.002,0.024,0,0.035,0s0.024-0.002,0.034-0.001
- c0.013,0.002,0.021,0.006,0.035,0.006s0.027,0.001,0.041,0.006c0.009,0.003,0.019,0.01,0.028,0.012
- c0.015,0.003,0.021-0.007,0.023,0.011c0.002,0.013,0.001,0.028-0.004,0.041c-0.008,0.019-0.013,0.035-0.013,0.057
- c0,0.012-0.004,0.018-0.006,0.029c0,0.001,0,0.002,0,0.004c0.057,0.051,0.114,0.106,0.17,0.161c0.032,0.011,0.064,0.026,0.1,0.018
- c0.005-0.001,0.005-0.005,0.012-0.005c0.007,0.001,0.013,0.005,0.018,0.008c0.012,0.006,0.015,0.01,0.029,0.01
- c0.011,0,0.023,0,0.034,0c0.006,0,0.012-0.001,0.018,0c0.008,0.001,0.01,0.004,0.017,0.006c0.012,0.004,0.022,0.007,0.035,0.013
- c0.01,0.005,0.019,0.01,0.028,0.016c0.02,0.011,0.043,0.018,0.064,0.028c0.035,0.018,0.058,0.054,0.086,0.08
- c0.003,0.002,0.008,0.007,0.01,0.008c0.003,0.002,0.01,0.004,0.012,0.006c0.007,0.006,0.013,0.021,0.018,0.029
- c0.005,0.01,0.008,0.019,0.007,0.031c-0.002,0.02-0.011,0.047-0.019,0.065c-0.004,0.008-0.013,0.015-0.018,0.022
- c-0.004,0.007-0.007,0.016-0.011,0.023c-0.005,0.008-0.012,0.015-0.018,0.023c-0.005,0.008-0.009,0.018-0.014,0.026
- c-0.002,0.004-0.005,0.007-0.007,0.01c0.042,0.045,0.084,0.091,0.124,0.136c0.006-0.006,0.013-0.013,0.02-0.016
- c0.008-0.004,0.026-0.013,0.035-0.011c0.007,0.002,0.013,0.012,0.019,0.017c0.013,0.013,0.025,0.025,0.034,0.041
- c0.008,0.013,0.01,0.027,0.018,0.04c0.004,0.007,0.007,0.015,0.011,0.024c0.012,0.026,0.032,0.046,0.049,0.069
- c0.014,0.018,0.011,0.04,0.016,0.061c0.295,0.327,0.516,0.558,0.595,0.478c0.083-0.331,0.166-0.663,0.248-0.995
- c0.021-0.028,0.042-0.057,0.063-0.085c-0.002-0.004-0.004-0.008-0.004-0.012c-0.001-0.012-0.002-0.029,0.001-0.041
- c0.002-0.007,0.007-0.014,0.009-0.022c0.004-0.012,0.006-0.013,0.013-0.024c0.013-0.017,0.023-0.034,0.039-0.05
- c0.015-0.016,0.035-0.03,0.057-0.04c0.002-0.005,0-0.01,0.002-0.02c0.001-0.006,0.005-0.01,0.006-0.017
- c0.001-0.005-0.002-0.012,0-0.017c0.006-0.02,0.037-0.028,0.052-0.039c0.01-0.007,0.018-0.016,0.029-0.023
- c0.01-0.007,0.02-0.012,0.031-0.018c0.038-0.053,0.077-0.106,0.116-0.159c0.014-0.002,0.029-0.003,0.044-0.004
- c0.003-0.008,0.004-0.017,0.009-0.024c0.005-0.008,0.014-0.013,0.02-0.02c0.018-0.019,0.024-0.044,0.041-0.064
- c0.005-0.006,0.013-0.011,0.017-0.018c0.006-0.01,0.008-0.024,0.011-0.035c0.003-0.009,0.009-0.019,0.011-0.028
- c0.003-0.013-0.003-0.028,0.001-0.041c0.006-0.022,0.032-0.043,0.055-0.039c0.005,0.001,0.018,0.009,0.024,0.012
- c0.012,0.005,0.024,0.01,0.035,0.017c0.038,0.023,0.05,0.063,0.071,0.101c0.009,0.018,0.023,0.034,0.031,0.053
- c0.009,0.019,0.015,0.035,0.031,0.051c0,0,0,0.001,0.001,0.001c0.067-0.006,0.133-0.012,0.2-0.018c0-0.006,0.001-0.011,0.001-0.016
- c-0.001-0.007-0.005-0.011-0.007-0.018c-0.001-0.005,0-0.013-0.001-0.018c-0.003-0.016-0.01-0.03-0.016-0.045
- c-0.009-0.026-0.027-0.049-0.036-0.075c-0.009-0.026-0.021-0.058-0.016-0.087c0.004-0.018,0.009-0.014,0.023-0.017
- c0.015-0.002,0.026-0.006,0.041-0.006c0.011,0,0.024,0.002,0.034,0.001c0.006-0.001,0.012-0.005,0.017-0.006
- c0.014-0.005,0.022-0.004,0.036-0.002c0.014,0.002,0.029,0.002,0.044,0.002c0.016-0.001,0.028,0.003,0.043,0.006
- c0.012,0.001,0.027-0.001,0.039-0.001c0.015,0,0.026,0.006,0.041,0.006c0.023,0,0.046-0.001,0.069,0.005
- c0.012,0.003,0.024,0.006,0.036,0.007c0.018,0.001,0.034,0.009,0.052,0.012c0.022,0.002,0.048,0,0.067-0.007
- c0.01-0.003,0.015-0.003,0.022-0.012c0.003-0.005,0.005-0.009,0.005-0.013c-0.02-0.016-0.041-0.03-0.057-0.05
- c-0.016-0.022-0.029-0.044-0.04-0.069c-0.003-0.008-0.003-0.015-0.006-0.023c-0.001-0.005-0.004-0.009-0.006-0.015
- c-0.002-0.01-0.004-0.02-0.004-0.031c0-0.019,0.003-0.043-0.003-0.06c-0.007-0.019-0.018-0.027-0.036-0.016
- c-0.007,0.005-0.009,0.005-0.018,0.005c-0.008,0-0.015-0.001-0.023-0.004c-0.01-0.004-0.013-0.017-0.018-0.026
- c-0.005-0.009-0.01-0.019-0.016-0.027c-0.011-0.014-0.031-0.005-0.044-0.015c-0.013-0.011-0.018-0.03-0.026-0.045
- c-0.004-0.007-0.009-0.016-0.013-0.023c-0.003-0.004-0.008-0.007-0.011-0.011c-0.004-0.005-0.005-0.01-0.008-0.015
- c-0.002-0.003-0.004-0.005-0.006-0.007c-0.009-0.003-0.018-0.008-0.028-0.013c-0.029-0.016-0.059-0.038-0.082-0.062
- c-0.013-0.014-0.029-0.025-0.042-0.039c-0.008-0.008-0.016-0.018-0.023-0.027c-0.012-0.016-0.02-0.035-0.03-0.052
- c-0.005-0.008-0.014-0.015-0.019-0.024c-0.004-0.007-0.007-0.012-0.011-0.019c-0.008-0.011-0.016-0.024-0.02-0.037
- c-0.004-0.012-0.011-0.025-0.011-0.038c0-0.007,0-0.012,0.008-0.015c0.009-0.003,0.025,0.011,0.031,0.018
- c0.006,0.007,0.008,0.017,0.014,0.024s0.013,0.012,0.018,0.02c0.005,0.007,0.008,0.012,0.016,0.017
- c0.006,0.003,0.013,0.004,0.018,0.009c0.007,0.006,0.015,0.016,0.02,0.023c0.005,0.007,0.009,0.015,0.016,0.007
- c0.005-0.005,0.006-0.015,0.011-0.019c0.004-0.004,0.013-0.009,0.019-0.008c0.006,0,0.01,0.008,0.015,0.011
- c0.004,0.001,0.019,0.002,0.022,0.001c0.011-0.005-0.01-0.025-0.014-0.032c-0.008-0.015-0.014-0.032-0.021-0.048
- c-0.005-0.014-0.005-0.029-0.01-0.041c-0.006-0.017-0.008-0.034-0.016-0.049c-0.004-0.008-0.007-0.016-0.012-0.023
- c-0.004-0.008-0.011-0.013-0.017-0.019c-0.009-0.009-0.018-0.018-0.027-0.027c-0.009-0.008-0.02-0.014-0.03-0.022
- c-0.014-0.011-0.025-0.024-0.038-0.035c-0.004-0.004-0.008-0.006-0.011-0.011c-0.002-0.001-0.004-0.005-0.005-0.007
- c-0.004-0.007-0.007-0.011-0.013-0.016c-0.003-0.003-0.012-0.009-0.008-0.014c0.002-0.003,0.016,0.004,0.021,0.003
- c-0.005-0.004-0.012-0.007-0.017-0.011c-0.008-0.006-0.014-0.013-0.021-0.02c-0.006-0.006-0.014-0.012-0.021-0.019
- c-0.003-0.003-0.004-0.006-0.008-0.009c-0.003-0.002-0.005-0.003-0.008-0.004c-0.004-0.003-0.008-0.009-0.011-0.013
- c-0.005-0.006-0.008-0.012-0.012-0.019c-0.008-0.013-0.017-0.027-0.03-0.036c-0.013-0.01-0.026-0.02-0.035-0.035
- c-0.006-0.012-0.009-0.026-0.014-0.038c-0.007-0.014-0.027-0.015-0.038-0.025c-0.008-0.008-0.013-0.02-0.022-0.028
- c-0.017-0.015-0.038-0.031-0.06-0.037c-0.009-0.003-0.013-0.003-0.019-0.012c-0.003-0.005-0.004-0.015-0.012-0.018
- c-0.012-0.005-0.023,0.017-0.034,0c-0.003-0.006-0.004-0.014-0.007-0.02c-0.003-0.004-0.008-0.01-0.012-0.014
- c-0.011-0.009-0.025-0.017-0.037-0.023c-0.021-0.011-0.047-0.007-0.067-0.016c-0.014-0.006-0.033-0.01-0.047-0.015
- c-0.014-0.004-0.02-0.01-0.031-0.021c-0.01-0.011-0.025-0.019-0.034-0.031c-0.01-0.015-0.017-0.028-0.033-0.038
- c-0.015-0.01-0.031-0.02-0.046-0.03c-0.004-0.002-0.005,0-0.008-0.004c-0.003-0.003-0.003-0.008-0.006-0.012
- c-0.004-0.007-0.011-0.012-0.019-0.015c-0.011-0.003-0.02-0.009-0.027-0.018c-0.004-0.008-0.01-0.012-0.015-0.019
- c-0.01-0.015-0.016-0.031-0.026-0.046c-0.009-0.012-0.018-0.022-0.028-0.033c-0.005-0.005-0.011-0.009-0.018-0.011
- c-0.008-0.004-0.016-0.008-0.024-0.012c-0.01-0.005-0.021-0.008-0.032-0.016c-0.008-0.006-0.015-0.012-0.023-0.018
- c-0.015-0.01-0.029-0.021-0.041-0.034c-0.009-0.01-0.015-0.017-0.027-0.023c-0.007-0.003-0.015-0.003-0.023-0.005
- c-0.011-0.002-0.021-0.006-0.031-0.01c-0.01,0.004-0.02,0.008-0.031,0.009c-0.01,0.002-0.015,0.001-0.024,0.008
- c-0.01,0.008-0.019,0.022-0.022,0.035c-0.004,0.019,0.006,0.031,0.012,0.048c0.013,0.034,0.016,0.069-0.027,0.074
- c0,0.01-0.009,0.017-0.011,0.025c-0.002,0.01,0.001,0.022,0,0.032c-0.001,0.022-0.028,0.033-0.047,0.037
- c-0.007,0.002-0.016,0.001-0.023,0c-0.007,0-0.011-0.003-0.016-0.004c-0.004-0.001-0.01,0-0.014-0.001
- c-0.005-0.001-0.006-0.005-0.01-0.006c-0.005-0.001-0.01,0.001-0.015-0.001c-0.002,0-0.008-0.004-0.011-0.005
- c-0.009-0.004-0.017-0.01-0.026-0.016c-0.009-0.005-0.018-0.011-0.028-0.016c-0.005-0.002-0.009-0.005-0.014-0.009
- c-0.003-0.002-0.008-0.004-0.011-0.006c-0.016-0.012-0.025-0.032-0.036-0.048c-0.018-0.024-0.04-0.013-0.065-0.009
- c-0.005,0.001-0.01-0.001-0.016,0c-0.005,0.001-0.009,0.004-0.015,0.006c-0.008,0.001-0.017-0.002-0.025-0.001
- c-0.01,0.001-0.018,0.005-0.027,0.006c-0.018,0.001-0.036-0.003-0.053,0.001c-0.017,0.003-0.033,0.007-0.05,0.009
- c-0.006,0.001-0.012,0-0.018,0.001c-0.004,0.001-0.006,0.004-0.012,0.005c-0.005,0-0.011-0.002-0.016-0.001
- c-0.005,0.001-0.005,0.005-0.01,0.006c-0.007,0.001-0.014-0.002-0.021-0.001c-0.006,0.002-0.01,0.005-0.016,0.006
- c-0.011,0.002-0.02,0.003-0.032,0.006c-0.012,0.004-0.018,0.004-0.031,0.003c-0.019-0.001-0.032,0.006-0.048,0.016
- c-0.022,0.014-0.04,0.037-0.068,0.038c-0.011,0-0.016-0.004-0.026-0.005c-0.012-0.002-0.021,0-0.032,0.004
- c-0.014,0.004-0.028,0.007-0.042,0.01c-0.012,0.003-0.025,0.006-0.037,0.007c-0.028,0.002-0.055,0.009-0.082,0.016
- c-0.022,0.005-0.044,0.01-0.065,0.014c-0.015,0.003-0.029,0.009-0.043,0.012c-0.024,0.005-0.054,0-0.078,0
- c-0.021,0-0.04,0-0.054-0.015c-0.01-0.009-0.02-0.026-0.024-0.039c-0.002-0.006-0.002-0.01-0.005-0.016
- c-0.002-0.003-0.006-0.006-0.008-0.009c-0.007-0.009-0.011-0.021-0.016-0.032c-0.011-0.022-0.012-0.039,0.007-0.058
- c0.009-0.009,0.017-0.014,0.022-0.026c0.004-0.008,0.006-0.017,0.01-0.025c0.009-0.017,0.018-0.033,0.03-0.05
- c0.019-0.03-0.027-0.017-0.041-0.014c-0.021,0.004-0.037-0.007-0.046-0.023c-0.009-0.015-0.019-0.029-0.032-0.042
- c-0.007-0.007-0.014-0.01-0.021-0.016c-0.007-0.005-0.011-0.013-0.018-0.018c-0.019-0.013-0.038-0.025-0.057-0.038
- c-0.01-0.007-0.016-0.016-0.025-0.023c-0.008-0.006-0.016-0.012-0.024-0.018c-0.013-0.01-0.024-0.021-0.036-0.033
- c-0.017-0.015-0.036-0.023-0.056-0.033c-0.018-0.009-0.035-0.024-0.054-0.03c-0.024-0.008-0.047-0.018-0.068-0.033
- c-0.005-0.003-0.01-0.006-0.015-0.01c-0.009,0.006-0.018,0.012-0.026,0.017c-0.013,0.007-0.019,0.007-0.033,0.01
- c-0.012,0.002-0.019,0.005-0.031,0.005c-0.018,0-0.036,0.002-0.053,0.001c-0.021-0.002-0.038-0.008-0.059-0.005
- c-0.024,0.004-0.049,0.009-0.073,0.01c-0.023,0-0.046,0-0.068,0c-0.013,0-0.025-0.002-0.038-0.001
- c-0.014,0.001-0.026,0.006-0.04,0.006c-0.029,0-0.057-0.015-0.086-0.016c-0.01,0-0.021,0-0.031,0c-0.017,0-0.03,0.004-0.046,0.005
- c-0.02,0.002-0.04,0.009-0.06,0.011c-0.011,0.002-0.024,0-0.036,0h-0.069c-0.01,0-0.021,0-0.031,0c-0.011,0-0.016-0.004-0.027-0.006
- c-0.012-0.001-0.014,0.001-0.021-0.01c-0.006-0.011-0.003-0.02-0.014-0.028c-0.012-0.009-0.029-0.013-0.043-0.018
- c-0.019-0.007-0.039-0.012-0.058-0.018c-0.007-0.003-0.015-0.007-0.021-0.008c-0.009-0.003-0.018,0-0.027-0.001
- c-0.009-0.002-0.017-0.005-0.026-0.006c-0.012-0.001-0.025-0.003-0.036-0.006c-0.014-0.004-0.029-0.009-0.043-0.01
- c-0.007,0-0.015,0.002-0.021,0.001c-0.014-0.003-0.027-0.011-0.042-0.011c-0.007-0.001-0.014,0.001-0.022,0
- c-0.008-0.001-0.012-0.004-0.02-0.006c-0.017-0.002-0.032-0.002-0.048-0.009c-0.018-0.007-0.033-0.016-0.053-0.017
- c-0.021-0.002-0.046,0.005-0.067,0c-0.007-0.001-0.014-0.004-0.021-0.006c-0.005-0.002-0.011-0.003-0.017-0.005
- c-0.006-0.002-0.01-0.007-0.015-0.01c-0.007-0.003-0.014-0.007-0.021-0.01c-0.026-0.013-0.051-0.024-0.075-0.041
- c-0.011-0.008-0.021-0.019-0.031-0.029c-0.006-0.006-0.028-0.023-0.016-0.03l0.011-0.011c-0.01-0.002-0.023-0.029-0.017-0.036
- c0.004-0.004,0.022-0.006,0.027-0.006c0.009-0.001,0.018,0,0.027,0c0.016,0,0.036,0.003,0.052,0
- c0.008-0.001,0.016-0.008,0.022-0.009c0.009-0.003,0.017-0.001,0.025-0.001c0.022-0.001,0.038-0.017,0.059-0.016
- c0.022,0,0.032-0.006,0.046-0.023c0.006-0.007,0.011-0.016,0.015-0.025c0.004-0.007,0.011-0.014,0.013-0.021
- c0.002-0.008-0.002-0.018-0.001-0.026c0.002-0.01,0.006-0.016,0.005-0.026c0-0.004,0-0.008,0.001-0.011
- c-0.001-0.005-0.004-0.008-0.005-0.012c-0.002-0.01,0-0.016-0.006-0.026c-0.006-0.012-0.014-0.023-0.02-0.036
- c-0.003-0.008-0.006-0.014-0.01-0.021c-0.009-0.013-0.016-0.027-0.024-0.041c-0.006-0.011-0.017-0.025-0.02-0.038
- c-0.008-0.032,0.022-0.019,0.041-0.015c0.009,0.001,0.018,0.004,0.028,0.005c0.003,0,0.007,0,0.01,0
- c0.006,0,0.008,0.003,0.012,0.004c0.032,0.008,0.064,0.018,0.093,0.032c0.006-0.022-0.001-0.041-0.019-0.054
- c-0.009-0.006-0.019-0.01-0.028-0.015c-0.011-0.007-0.019-0.017-0.026-0.027c-0.014-0.021-0.021-0.047-0.021-0.072
- c0-0.012-0.004-0.02-0.006-0.031c-0.002-0.014,0.006-0.025,0.006-0.038c-0.001-0.015-0.009-0.033-0.006-0.047
- c0.002-0.009,0.01-0.016,0.011-0.026c0.001-0.005,0-0.011,0-0.016c0-0.007,0.003-0.009,0.004-0.016c0.001-0.003,0-0.013,0.002-0.015
- c0.004-0.003,0.015,0,0.02,0c0.015-0.002,0.011-0.008,0.011-0.022V43.87c0-0.023-0.001-0.043,0.026-0.042
- c0.012,0,0.02,0.001,0.032,0.004c0.011,0.003,0.025,0.001,0.037,0.001s0.024-0.001,0.037,0c0.015,0.001,0.028,0.007,0.043,0.011
- c0.023,0.006,0.05,0.011,0.071,0.022c0.007,0.004,0.02,0.005,0.023,0.014c0.004,0.013-0.004,0.027-0.006,0.038
- c-0.002,0.012,0.002,0.024-0.001,0.036c-0.003,0.01-0.004,0.019-0.008,0.028c-0.009,0.019-0.021,0.038-0.002,0.057
- c0.01,0.009,0.025,0.01,0.036,0.016c0.011,0.006,0.022,0.009,0.033,0.014c0.008,0.003,0.015,0.006,0.021,0.011
- c0.004,0.003,0.007,0.005,0.011,0.01s0.007,0.011,0.011,0.016c0.011,0.012,0.044,0.036,0.059,0.017
- c0.01-0.013-0.027-0.049-0.038-0.058c-0.008-0.006-0.014-0.015-0.022-0.02c-0.006-0.005-0.009-0.006-0.015-0.012
- c-0.006-0.008-0.011-0.015-0.011-0.026c0-0.012,0.006-0.017,0.012-0.026c0.002-0.004,0.007-0.012,0.008-0.016
- c0.001-0.005,0.004-0.013,0.005-0.017c0.005-0.027-0.005-0.037-0.02-0.057c-0.008-0.01-0.013-0.021-0.021-0.031
- c-0.005-0.008-0.01-0.012-0.015-0.021c-0.004-0.007-0.006-0.015-0.011-0.022c-0.008-0.01-0.014-0.023-0.022-0.033
- c-0.01-0.011-0.024-0.021-0.037-0.03c-0.024-0.015-0.04-0.036-0.059-0.056c-0.012-0.015-0.021-0.031-0.034-0.045
- c-0.007-0.008-0.015-0.019-0.012-0.031c0.003-0.014,0.024-0.024,0.037-0.026c0.008-0.001,0.015,0.001,0.023,0
- c0.007-0.001,0.013-0.004,0.02-0.005c0.013-0.003,0.028,0.002,0.041,0.004c0.01,0.002,0.022,0,0.032,0.002
- c0.013,0.004,0.023,0.003,0.037,0.004c0.024,0.002,0.033,0.015,0.049,0.031c0.015,0.014,0.032,0.025,0.051,0.033
- c0.022,0.008,0.041,0.001,0.063,0.005c0.009,0.001,0.02,0.008,0.028,0.009c0.011,0.003,0.023,0.001,0.036,0.001
- c0.01,0.001,0.018,0.005,0.026,0.012c0.009,0.009,0.008,0.013,0.011,0.024c0.003,0.007,0.01,0.016,0.014,0.023
- c0.006,0.01,0.006,0.02,0.013,0.031c0.009,0.015,0.021,0.028,0.03,0.042c0.006,0.009,0.011,0.021,0.017,0.03
- c0.009,0.013,0.022,0.022,0.032,0.033c0.014,0.016,0.03,0.03,0.046,0.042c0.019,0.013,0.041,0.018,0.058,0.032
- c0.012,0.009,0.025,0.016,0.037,0.025c0.019,0.014,0.024,0.039,0.042,0.055c0.008,0.007,0.018,0.013,0.025,0.021
- c0.006,0.008,0.014,0.018,0.023,0.024c0.014,0.009,0.027,0.003,0.042,0.006c0.009,0.002,0.02,0.009,0.03,0.012
- c0.019,0.008,0.034,0.026,0.054,0.035c0.022,0.01,0.049,0.017,0.073,0.017c0.012-0.001,0.02,0.004,0.032,0.005
- c0.017,0.001,0.032-0.005,0.049-0.006c0.01,0,0.025-0.001,0.035,0c0.012,0.002,0.019,0.006,0.032,0.006
- c0.012,0,0.02,0.003,0.031,0.005c0.005,0.002,0.011-0.001,0.016,0c0.009,0.001,0.009,0.002,0.016,0.007
- c0.007,0.004,0.014,0.01,0.021,0.014c0.008,0.005,0.017,0.007,0.026,0.011c0.011,0.004,0.021,0.003,0.032,0.006
- c0.013,0.004,0.024,0.012,0.032,0.021c0.003-0.001,0.007-0.003,0.01-0.005c0.024-0.012,0.043-0.023,0.054-0.049
- c0.009-0.019,0.003-0.044-0.007-0.063c-0.009-0.018-0.038-0.035-0.036-0.058c0.003-0.021,0.03-0.027,0.031-0.047
- c0.001-0.009,0.002-0.023,0-0.032s-0.011-0.023-0.015-0.031c-0.005-0.008-0.011-0.012-0.015-0.02
- c-0.004-0.006-0.005-0.014-0.008-0.02c-0.005-0.01-0.009-0.019-0.013-0.029c-0.004-0.008-0.009-0.019-0.011-0.027
- c-0.001-0.005,0-0.01-0.002-0.015c-0.003-0.006-0.011-0.01-0.016-0.014c-0.017-0.014-0.03-0.026-0.042-0.044
- c-0.006-0.009-0.013-0.017-0.019-0.026c-0.007-0.011-0.016-0.015-0.028-0.021c-0.019-0.011-0.035-0.021-0.056-0.028
- c-0.003-0.001-0.009-0.003-0.012-0.004c-0.001,0-0.011-0.004-0.012-0.004c-0.011-0.002-0.023-0.001-0.035-0.001
- c-0.01,0-0.023,0.003-0.032,0c-0.011-0.002-0.013-0.016-0.016-0.026c-0.005-0.021-0.002-0.048-0.022-0.062
- c-0.018-0.014-0.038-0.02-0.057-0.032c-0.017-0.01-0.03-0.028-0.047-0.039c-0.032-0.022-0.095-0.042-0.095-0.088
- c0-0.008,0.003-0.014,0.004-0.022c0.002-0.006,0-0.013,0.001-0.019c0.002-0.011,0.007-0.022,0.01-0.033
- c0.002-0.008,0.002-0.013,0.006-0.021s0.01-0.018,0.015-0.025c0.009-0.016,0.02-0.029,0.032-0.041
- c-0.009-0.008-0.018-0.015-0.027-0.023c-0.015-0.014-0.039-0.026-0.058-0.034c-0.014-0.006-0.026-0.014-0.041-0.021
- c-0.017-0.007-0.046-0.021-0.052-0.04c-0.003-0.008-0.005-0.019-0.006-0.027c0-0.012,0.003-0.021-0.004-0.031
- c-0.006-0.008-0.016-0.014-0.021-0.023c-0.002-0.004-0.002-0.01-0.005-0.015c-0.002-0.004-0.005-0.005-0.007-0.009
- c-0.004-0.015-0.002-0.044,0-0.059c0.003-0.016,0.011-0.03,0.011-0.047c0-0.021-0.001-0.036-0.009-0.054
- c-0.009-0.018-0.015-0.038-0.023-0.056c-0.011-0.024-0.029-0.045-0.047-0.064c-0.03-0.032-0.062-0.064-0.088-0.1
- c-0.012-0.016-0.026-0.032-0.037-0.048c-0.011-0.017-0.019-0.038-0.033-0.052c-0.006-0.006-0.014-0.007-0.02-0.011
- c-0.006-0.005-0.013-0.014-0.018-0.02c-0.007-0.01-0.024-0.035-0.019-0.047c0.007,0.003,0.018,0.008,0.026,0.005
- c0.011-0.005,0.003-0.014,0-0.021c-0.002-0.004-0.003-0.009-0.004-0.012c-0.002-0.005-0.005-0.011-0.008-0.015
- c-0.006-0.01-0.013-0.023-0.021-0.031c-0.013-0.014-0.025-0.027-0.034-0.043c-0.003-0.004-0.013-0.015-0.013-0.021
- c0.001-0.009,0.015-0.012,0.022-0.016c0.011-0.006,0.03-0.02,0.025-0.035c-0.002-0.006-0.011-0.016-0.016-0.021
- c-0.008-0.008-0.023-0.008-0.029-0.018c-0.004-0.007-0.004-0.018-0.007-0.025c-0.004-0.012-0.005-0.02-0.005-0.032
- c0-0.01-0.002-0.019,0.004-0.028s0.014-0.011,0.022-0.015c0.014-0.007,0.036-0.02,0.02-0.035c-0.012-0.012-0.031-0.015-0.046-0.022
- c-0.019-0.009-0.042-0.015-0.063-0.021c-0.014-0.004-0.029-0.004-0.042-0.007c-0.013-0.002-0.027-0.01-0.038-0.013
- c-0.019-0.005-0.04,0.001-0.058-0.005c-0.009-0.003-0.018-0.007-0.026-0.011c-0.013-0.005-0.023-0.005-0.036-0.007
- c-0.012-0.003-0.025-0.008-0.037-0.011c-0.01-0.003-0.021-0.007-0.032-0.01c-0.01-0.002-0.02-0.005-0.031-0.005
- c-0.013,0.001-0.024-0.004-0.037-0.005c-0.007,0-0.025-0.003-0.031-0.006c-0.011-0.008-0.006-0.014,0.005-0.015
- c0.01-0.001,0.02,0.002,0.03-0.001c0.007-0.002,0.013-0.01,0.022-0.011c-0.001-0.005-0.019-0.015-0.025-0.018
- c-0.011-0.007-0.02-0.007-0.032-0.007c-0.011,0-0.022,0-0.032,0c-0.005,0-0.011,0.001-0.016,0c-0.008,0-0.013-0.004-0.021-0.005
- c-0.011-0.002-0.021-0.003-0.032-0.005c-0.005-0.002-0.009-0.004-0.015-0.006c-0.009-0.002-0.02,0-0.03-0.003
- c-0.014-0.005-0.024-0.006-0.039-0.007c-0.013-0.001-0.023-0.006-0.037-0.005c-0.011,0-0.02-0.004-0.031-0.006
- c-0.012-0.001-0.025-0.003-0.036-0.006c-0.009-0.003-0.017-0.008-0.027-0.009c-0.007-0.001-0.01-0.003-0.016-0.005
- c-0.008-0.001-0.014,0-0.021-0.001c-0.011-0.001-0.016-0.005-0.027-0.005s-0.021,0.001-0.03-0.007c-0.01-0.008-0.006-0.013,0-0.023
- c0.006-0.01,0.009-0.016,0.009-0.028c0-0.022,0.001-0.042-0.004-0.063c-0.001-0.006,0-0.01-0.001-0.016s-0.004-0.01-0.005-0.016
- c-0.002-0.009,0.002-0.02,0.011-0.025c0.005-0.003,0.01,0,0.015-0.001c0.006-0.001,0.01-0.005,0.016-0.006
- c0.011-0.002,0.02,0,0.031-0.005c0.011-0.004,0.023-0.006,0.033-0.011c0.012-0.006,0.032-0.01,0.041-0.019
- c0.02-0.018-0.012-0.029-0.022-0.042c-0.019-0.022-0.022-0.037-0.016-0.065c0.002-0.01,0.009-0.02,0.006-0.031
- c-0.003-0.007-0.007-0.014-0.011-0.021c-0.716-0.167-1.463-0.256-2.23-0.256c-1.483,0-2.888,0.331-4.147,0.923
- c-0.001,0.002-0.003,0.003-0.004,0.004c-0.011,0.007-0.019,0.017-0.021,0.029c-0.001,0.003-0.001,0.007-0.001,0.011
- c0.689-0.188,1.378-0.376,2.067-0.564c0.028,0.121,0.055,0.242,0.083,0.363c-0.41,0.599-0.395,1.249-1.229,1.798
- c-0.743,0.488-0.665,0.181-0.862,0.139c0,0,0,0,0,0.001c0.002,0.009,0.006,0.021,0.003,0.031c-0.002,0.006-0.008,0.015-0.012,0.021
- c-0.004,0.007-0.01,0.015-0.014,0.022c-0.003,0.006-0.006,0.009-0.01,0.014c-0.001,0.001-0.047,0.052-0.11,0.123
- c-0.002,0.008-0.005,0.017-0.007,0.025c0.052-0.057,0.09-0.098,0.089-0.095c-0.008,0.019-0.015,0.038-0.025,0.057
- c-0.011,0.021-0.027,0.038-0.044,0.055c-0.011,0.01-0.022,0.021-0.032,0.031c-0.161,0.768,0.008,1.628-0.821,2.21
- c-0.58,0.408-0.637,0.248-0.658,0.049c-0.037,0.163-0.024,0.083-0.004-0.031c-0.01-0.112-0.018-0.228-0.106-0.255
- c-0.007-0.017-0.014-0.034-0.021-0.051c-0.001,0-0.002,0-0.003,0c-0.004,0-0.007,0.003-0.011,0.004
- c-0.006,0.001-0.012-0.001-0.018,0c-0.009,0.003-0.017,0.003-0.025,0.006c-0.008,0.002-0.014,0.005-0.022,0.009
- c-0.017,0.008-0.028-0.011-0.028-0.026c0-0.007,0-0.015,0-0.022c0-0.009,0.002-0.011,0.007-0.018
- c0.003-0.005,0.005-0.011,0.004-0.018c-0.001-0.003-0.004-0.003-0.004-0.006c-0.001-0.005,0.002-0.009-0.003-0.012
- c0.004-0.006,0.006-0.014,0.009-0.021c0.004-0.007,0.005-0.019,0.011-0.025c-0.016,0.001-0.03,0.01-0.043,0.018
- c-0.008,0.005-0.015,0.009-0.024,0.012c-0.01,0.002-0.018,0.007-0.028,0.01c-0.023,0.009-0.044,0.022-0.066,0.032
- c-0.016,0.006-0.03,0.011-0.046,0.018c-0.018,0.01-0.036,0.019-0.053,0.029c-0.016,0.008-0.028,0.024-0.047,0.024
- c-0.012,0-0.02-0.003-0.031-0.008c-0.01-0.004-0.019-0.006-0.028-0.013c0,0,0.001,0,0.002,0h0.007
- c-0.006-0.001-0.014-0.007-0.018-0.011c-0.006-0.006-0.002-0.014,0.001-0.021c0.01-0.023,0.03-0.038,0.045-0.057
- c0.005-0.006,0.009-0.013,0.014-0.019c0.005-0.008,0.012-0.011,0.018-0.018c0.004-0.004,0.008-0.008,0.012-0.013
- c0.006-0.006,0.014-0.007,0.02-0.012c0.014-0.011,0.025-0.022,0.036-0.035c0.008-0.01,0.017-0.017,0.025-0.026
- c0.005-0.007,0.013-0.011,0.018-0.017c0.003-0.005,0.007-0.01,0.009-0.014c0.002-0.005,0.001-0.008,0.003-0.012
- c0-0.003,0.003-0.003,0.003-0.006c0.001-0.004-0.002-0.007,0.001-0.011c0,0,0.006-0.002,0.007-0.003
- c0.005-0.003,0.012-0.008,0.016-0.012c0.008-0.009,0.014-0.021,0.019-0.032c0.003-0.006,0.004-0.013,0.006-0.018
- c0.004-0.008,0.01-0.014,0.013-0.021c0.006-0.015,0.013-0.03,0.026-0.041c-0.101-0.249-0.203-0.497-0.304-0.746
- c0,0-0.001,0-0.001-0.001c-0.014-0.013-0.029-0.014-0.046-0.004c-0.017,0.012-0.022-0.004-0.038-0.007
- c-0.008-0.001-0.014,0-0.021,0.004c-0.002,0.002-0.004,0.004-0.006,0.005c-0.002,0.001-0.007,0.003-0.009,0.004
- c-0.006,0.006-0.007,0.015-0.015,0.02c-0.009,0.006-0.01,0.002-0.017-0.002c-0.016-0.008-0.031,0.007-0.042,0.017
- c-0.009,0.008-0.018,0.016-0.03,0.016c-0.01,0.001-0.012,0-0.019,0.005c-0.004,0.003-0.012,0.011-0.017,0.012
- c-0.003,0-0.019-0.005-0.021-0.008c-0.008,0.003-0.016,0.007-0.024,0.01c-0.003,0.001-0.008,0.005-0.011,0.005
- c-0.006,0.001-0.007-0.003-0.012-0.003c-0.005,0-0.014,0.008-0.019,0.01c-0.005,0.003-0.011,0.006-0.017,0.008
- s-0.021,0.003-0.024,0.008c-0.001-0.01,0.005-0.015,0.009-0.023c0.005-0.009,0.007-0.019,0.012-0.028
- c0.005-0.009,0.008-0.019,0.012-0.028c0.002-0.006,0.005-0.013,0.007-0.019c0.002-0.005,0.005-0.009,0.008-0.013
- c0.001-0.004,0-0.008,0.001-0.012c0.003-0.011,0.011-0.02,0.014-0.031c0.003-0.01,0.007-0.019,0.009-0.028
- c0.001-0.005,0.003-0.012,0.004-0.017c0.001-0.003,0.004-0.004,0.004-0.007c0.001-0.008-0.005-0.009-0.003-0.018
- c0.001-0.006,0.008-0.012,0.007-0.018c-0.008-0.003-0.011,0.009-0.019,0.007c-0.003-0.008,0.006-0.022,0.008-0.03
- c0.002-0.008,0.007-0.016,0.01-0.024c-0.011-0.005-0.014,0.007-0.023,0.007c-0.005,0.001-0.013-0.007-0.012-0.012
- c0-0.003,0.004-0.006,0.005-0.008c0.005-0.008,0.014-0.015,0.018-0.024c0.004-0.009,0.006-0.019,0.01-0.028
- c0.003-0.006,0.008-0.01,0.01-0.016c0.002-0.004,0.002-0.008,0.004-0.012c0.004-0.007,0.011-0.015,0.017-0.021
- c0.012-0.011,0.026-0.024,0.04-0.034c0.01-0.008,0.017-0.012,0.021-0.025c0.003-0.009,0.004-0.019,0.007-0.028
- c0.005-0.017,0.019-0.032,0.028-0.047c0-0.001,0.001-0.002,0.001-0.002c-0.01-0.024-0.019-0.048-0.029-0.071
- c-0.012,0.003-0.024,0.007-0.036,0.009c-0.033,0.003-0.06,0.027-0.089,0.043c-0.021,0.011-0.04,0.022-0.058,0.038
- c-0.009,0.007-0.016,0.016-0.025,0.022c-0.009,0.006-0.016,0.013-0.024,0.02c-0.007,0.005-0.012,0.013-0.019,0.021
- c-0.009,0.01-0.018,0.019-0.029,0.027c-0.005,0.004-0.01,0.01-0.015,0.013c-0.008,0.005-0.018,0.01-0.025,0.016
- c-0.004,0.004-0.002,0.006-0.004,0.011c-0.002,0.006-0.01,0.012-0.014,0.016c-0.012,0.014-0.026,0.022-0.041,0.032
- c-0.006,0.004-0.017,0.009-0.021,0.015c-0.002,0.002-0.002,0.006-0.004,0.008c-0.003,0.003-0.007,0.004-0.01,0.006
- c-0.011,0.008-0.015,0.022-0.025,0.031c-0.006,0.005-0.012,0.009-0.016,0.016c0.001-0.002-0.003,0.01-0.003,0.009
- c-0.001,0.003,0,0.007-0.001,0.011c-0.002,0.012-0.013,0.03-0.023,0.037c-0.006,0.005-0.01,0.005-0.014,0.014
- c-0.004,0.009-0.002,0.019-0.01,0.028c-0.008,0.01-0.016,0.019-0.025,0.029c-0.004,0.006-0.008,0.013-0.015,0.015
- c-0.002-0.004,0-0.008,0.002-0.011c-0.007,0.003-0.007,0.012-0.015,0.017c-0.006,0.003-0.015,0.006-0.02,0.011
- c-0.004,0.005-0.007,0.017,0,0.02c0.009,0.003,0.012-0.009,0.02-0.001c0.002,0.003-0.001,0.007,0.003,0.01
- c0.005,0.003,0.003,0.001,0.009-0.001c0.006-0.001,0.011-0.008,0.016-0.009c0.008-0.001,0.011,0.008,0.016,0.011
- c0.004,0.004,0.009,0.006,0.013,0.008c0.005,0.003,0.004,0.002,0.007,0.005c0.001,0.001,0.004,0.005,0.005,0.007
- c0.003,0.004,0.007,0.007,0.01,0.01c0.005,0.006,0.006,0.009,0.013,0.014c0.003,0.002,0.01,0.007,0.012,0.009
- c0.006,0.007,0.003,0.008,0,0.016c-0.001,0.003-0.001,0.006-0.003,0.009c-0.001,0.001-0.003,0.003-0.004,0.004
- c-0.002,0.002-0.002,0.006-0.004,0.008c-0.001,0.001-0.003,0.003-0.004,0.004c-0.002,0.003-0.006,0.007-0.005,0.011
- c0,0.002,0.001,0.004,0.003,0.005c0.003,0.014,0.009,0.025,0.009,0.039c0,0.015,0,0.028-0.015,0.037
- c-0.006,0.004-0.013,0.002-0.02,0.004c-0.004,0.001-0.008,0.006-0.013,0.007c-0.008,0.002-0.012-0.001-0.02,0.004
- c-0.007,0.004-0.011,0.004-0.02,0.004c-0.008,0-0.013,0-0.02-0.004c-0.007-0.004-0.008-0.005-0.016,0
- c-0.012,0.007-0.022,0.015-0.035,0.021c-0.013,0.005-0.024,0.009-0.037,0.015c-0.004,0.002-0.008,0.004-0.012,0.007
- c-0.008,0.004-0.01,0.007-0.015,0.013c-0.006,0.006-0.015,0.009-0.021,0.015c-0.006,0.007-0.009,0.016-0.015,0.022
- c-0.012,0.01-0.029,0.006-0.039,0.016c-0.011,0.01-0.018,0.023-0.03,0.033c-0.005,0.005-0.01,0.006-0.015,0.009
- c-0.005,0.004-0.008,0.007-0.013,0.012c-0.009,0.01-0.015,0.009-0.027,0.013c-0.006,0.002-0.01,0.008-0.015,0.012
- c-0.012,0.012-0.02,0.025-0.03,0.038c-0.01,0.013-0.019,0.024-0.028,0.037c-0.004,0.007-0.006,0.011-0.007,0.019
- c-0.001,0.003-0.003,0.005-0.004,0.009c0,0.004,0.001,0.008,0,0.012c-0.001,0.006-0.004,0.01-0.004,0.016
- c0,0.004,0.001,0.007-0.001,0.011c-0.003,0.006-0.009,0.007-0.015,0.01c-0.016,0.007-0.024,0.01-0.032,0.027
- c-0.003,0.008-0.007,0.016-0.012,0.024c-0.005,0.007-0.01,0.009-0.017,0.015c-0.006,0.005-0.007,0.011-0.011,0.017
- c-0.004,0.004-0.01,0.008-0.014,0.013c-0.008,0.008-0.011,0.019-0.014,0.03c0.157,0.008,0.315,0.015,0.472,0.023
- c0.297,0.375,0.594,0.75,0.891,1.125c-0.013,0.092-0.025,0.183-0.038,0.275c-0.505,0.161-1.213-0.164-1.514,0.484
- c-0.301,0.649-0.023,0.006-0.022,0.016c0,0.005,0.006,0.009,0.007,0.013c0.002,0.005,0.001,0.01,0.001,0.015
- c0,0.013-0.003,0.029,0.005,0.039c0.007,0.008,0.013,0.016,0.019,0.025c0.007,0.01,0.613,0.002,0.019,0.032
- c-0.594,0.03,0.013,0.021,0.002,0.036c-0.005,0.007-0.012,0.012-0.016,0.02c-0.004,0.006-0.004,0.013-0.006,0.02
- c-0.004,0.016-0.008,0.03-0.007,0.048c0.001,0.015,0.019,0.04-0.004,0.047c-0.008,0.002-0.016-0.001-0.024,0.003
- c-0.007,0.004-0.012,0.008-0.02,0.01c-0.008,0.001-0.007-0.001-0.012,0.003c-0.001,0.001-0.003,0.006-0.005,0.008
- c-0.003,0.004-0.008,0.007-0.012,0.012c-0.008,0.008-0.016,0.019-0.026,0.024c-0.01,0.006-0.019,0.002-0.029,0.004
- c-0.007,0.002-0.01,0.005-0.02,0.004c-0.017-0.001-0.025-0.013-0.031-0.027c-0.008-0.018-0.012-0.033-0.025-0.047
- c-0.004-0.004-0.009-0.009-0.01-0.014c-0.002-0.008-0.001-0.013-0.005-0.019c-0.008-0.013-0.02-0.019-0.032-0.027
- c-0.013-0.009-0.025-0.019-0.04-0.024c-0.01-0.004-0.019-0.007-0.028-0.012s-0.015-0.004-0.024-0.006
- c-0.015-0.004-0.036-0.006-0.052-0.003c-0.025,0.003-0.051,0.012-0.075,0.019c-0.012,0.003-0.037,0-0.037-0.015
- c-0.01-0.001-0.016-0.004-0.028-0.004c-0.01,0-0.017-0.004-0.027-0.004c-0.011,0-0.018-0.004-0.028-0.004c-0.002,0-0.004,0-0.006,0
- c-0.039,0.012-0.077,0.025-0.116,0.037c-0.003,0.006-0.005,0.014-0.009,0.02c-0.004,0.007-0.011,0.016-0.018,0.022
- c-0.009,0.007-0.021,0.006-0.031,0.009c-0.008,0.003-0.006,0.005-0.008,0.012c-0.004,0.01-0.013,0.02-0.019,0.028
- c-0.007,0.009-0.012,0.018-0.018,0.028c-0.002,0.003-0.004,0.007-0.006,0.011l0,0c0.004,0.006,0.007,0.014,0.006,0.02
- c0,0.007-0.003,0.016-0.006,0.021c-0.004,0.008-0.01,0.012-0.016,0.019c-0.005,0.007-0.006,0.011-0.013,0.016
- c-0.004,0.003-0.008,0.008-0.012,0.011c-0.005,0.003-0.012,0.004-0.015,0.01c-0.003,0.007,0.002,0.016-0.001,0.023
- c-0.002,0.005-0.009,0.007-0.011,0.012c-0.002,0.005,0.001,0.011,0,0.016c-0.002,0.007-0.005,0.014-0.008,0.02
- c-0.004,0.007-0.005,0.011-0.004,0.02c0,0.017,0.003,0.036-0.005,0.052c-0.006,0.014-0.01,0.029-0.015,0.044
- c-0.006,0.015-0.013,0.028-0.017,0.043c-0.001,0.003-0.003,0.004-0.003,0.008c-0.001,0.004,0,0.009,0,0.013
- c-0.001,0.003-0.003,0.006-0.004,0.008c0,0.004,0,0.008,0,0.011c-0.002,0.009-0.004,0.015-0.004,0.024v0.028
- c0,0.02-0.003,0.036-0.009,0.055c-0.006,0.017-0.008,0.035-0.011,0.053c-0.002,0.008-0.006,0.015-0.004,0.024
- c0.001,0.009,0.005,0.013,0.003,0.023c-0.001,0.002-0.003,0.006-0.003,0.009c-0.001,0.003,0,0.014-0.005,0.015
- c-0.004,0.002-0.007-0.003-0.009-0.006c-0.002-0.006,0.001-0.006,0.002-0.013l-0.008,0.008c0.001-0.006-0.002-0.005-0.003-0.009
- c-0.001-0.004-0.001-0.007-0.001-0.011c-0.001-0.007-0.004-0.015-0.007-0.021c-0.005-0.01-0.009-0.012-0.009-0.023
- s-0.003-0.012-0.009-0.02c-0.005-0.007-0.008-0.011-0.006-0.019c0-0.003,0.008-0.02,0.002-0.024c-0.008-0.005-0.01,0.01-0.018,0.007
- c-0.008-0.004-0.005-0.017-0.005-0.024c0-0.008,0-0.016,0-0.024c0-0.009,0.004-0.014,0.004-0.024c0-0.009,0.001-0.011,0.005-0.019
- c0.004-0.007,0.003-0.015,0.003-0.025c0-0.008-0.005-0.012-0.004-0.019c0-0.009,0.007-0.016,0.008-0.024
- c0.001-0.009-0.002-0.02,0-0.029c0.001-0.003,0.004-0.004,0.004-0.007c0.001-0.005-0.002-0.007-0.003-0.011
- c0.003-0.002,0.005-0.011,0.006-0.014c0.001-0.006,0.002-0.013,0-0.019c-0.013,0.006-0.031,0.009-0.04,0.023
- c-0.006,0.007-0.009,0.015-0.011,0.025c-0.002,0.011-0.01,0.02-0.012,0.032c-0.002,0.009-0.001,0.017-0.005,0.027
- c-0.004,0.009-0.013,0.013-0.019,0.02c-0.005,0.006-0.003,0.01-0.005,0.017c-0.001,0.004-0.005,0.007-0.008,0.01
- c-0.006,0.007-0.011,0.012-0.014,0.02c0.009,0.005-0.003,0.022-0.009,0.026c-0.005,0.004-0.009,0.005-0.012,0.011
- c-0.002,0.005-0.002,0.011-0.005,0.016c-0.007,0.012-0.014,0.024-0.019,0.037c-0.005,0.014-0.007,0.029-0.013,0.043
- c-0.003,0.008,0.002,0.008,0.002,0.016c0,0.011-0.011,0.008-0.016,0.013c-0.008,0.007-0.007,0.017-0.016,0.023
- c-0.01,0.005-0.026,0.003-0.032-0.008c-0.003-0.005,0-0.015-0.001-0.02c0-0.009-0.002-0.015-0.005-0.023
- c-0.002-0.006-0.002-0.011-0.003-0.017c-0.002-0.007-0.007-0.013-0.008-0.02c-0.001-0.008,0-0.012-0.004-0.02
- c-0.003-0.004-0.01-0.012-0.011-0.017c-0.001-0.012,0.008-0.022,0.008-0.035c-0.001-0.014-0.008-0.024-0.011-0.037
- c-0.003-0.01-0.002-0.025,0.006-0.032c0.008-0.006,0.026-0.005,0.028-0.018c0.001-0.007-0.006-0.015-0.009-0.02
- c-0.003-0.008-0.001-0.013-0.002-0.021c-0.001-0.007-0.007-0.007,0.001-0.015c0.004-0.005,0.007-0.004,0.014-0.005
- c0.002-0.008,0.001-0.012-0.005-0.018c-0.001-0.001-0.006-0.005-0.006-0.006c0-0.004,0.004-0.003,0.005-0.006
- c0.001-0.005,0.002-0.006,0.003-0.012c0-0.004-0.002-0.01-0.001-0.013c0.002-0.007,0.009-0.013,0.013-0.019
- c-0.005,0.004-0.011,0.013-0.014,0.019c-0.006,0.01-0.011,0.019-0.014,0.031c-0.001,0.01,0.005,0.03-0.008,0.033
- c-0.009,0.002-0.019-0.002-0.028,0c0.007,0.007-0.007,0.017-0.012,0.024c-0.005,0.008-0.009,0.017-0.015,0.025
- c-0.008,0.011-0.023,0.021-0.03,0.033c-0.004,0.007-0.006,0.026-0.018,0.026c0,0.014-0.035,0.019-0.044,0.027
- c-0.008,0.007-0.011,0.016-0.021,0.02c-0.005,0.003-0.019,0.006-0.016,0.014c-0.009,0.007-0.013,0.022-0.019,0.032
- c-0.01,0.018-0.017,0.041-0.03,0.057c-0.002,0.004-0.005,0.005-0.007,0.009c-0.002,0.003-0.003,0.007-0.005,0.011
- c-0.008,0.013-0.02,0.016-0.034,0.021c-0.012,0.005-0.026,0.002-0.038,0.007c-0.009,0.004-0.012,0.01-0.018,0.017
- c-0.004,0.004-0.005,0.005-0.013,0.004c-0.005-0.001-0.008-0.001-0.008-0.007c-0.198,0.776-0.304,1.59-0.304,2.428
- c0,5.385,4.365,9.75,9.75,9.75s9.75-4.365,9.75-9.75C-15.25,49.098-15.794,47.324-16.736,45.824z M-17.781,55.174
- c0.006,0.002,0.007,0.007,0.004,0.011c-0.003,0.005-0.005,0.009-0.007,0.014c-0.008,0.015-0.022,0.028-0.018,0.048
- c0.002,0.015,0.013-0.002,0.018-0.007c0.008-0.008,0.014-0.017,0.023-0.024c0.008-0.006,0.018-0.008,0.027-0.015
- c0.007-0.005,0.014-0.01,0.02-0.016c0.007-0.005,0.012-0.011,0.019-0.016c0.007-0.005,0.014-0.01,0.021-0.016
- c0.005-0.005,0.009-0.01,0.013-0.016c0.004-0.004,0.008-0.006,0.012-0.011c0.007-0.009,0.014-0.018,0.026-0.02
- c0.008-0.002,0.016-0.002,0.023-0.003c0.016-0.003,0.031-0.01,0.044-0.02c0.004-0.003,0.008-0.008,0.013-0.011
- c0.006-0.003,0.011-0.005,0.016-0.009c0.006-0.004,0.013-0.009,0.02-0.011c0.004-0.001,0.01-0.002,0.014-0.004
- c0.005-0.002,0.008-0.008,0.011-0.013c0.009-0.014,0.027-0.02,0.041-0.029c0.009-0.006,0.017-0.015,0.023-0.024
- c0.006-0.008,0.011-0.017,0.019-0.023c0.017-0.015,0.034-0.03,0.054-0.042c0.007-0.004,0.015-0.011,0.02-0.019
- c0.004-0.008,0.006-0.017,0.009-0.025c0.007-0.016,0.017-0.033,0.029-0.045c0.016-0.016,0.036-0.027,0.054-0.04
- c0.005-0.005,0.011-0.008,0.017-0.012c0.005-0.004,0.008-0.009,0.012-0.013c0.01-0.01,0.013-0.024,0.02-0.036
- c0.006-0.01,0.012-0.02,0.02-0.029c0.005-0.005,0.01-0.012,0.014-0.018c-0.017,0.004-0.027,0.013-0.036,0.026
- c-0.002,0.002-0.005,0.005-0.007,0.007c-0.003,0.003-0.004,0.007-0.007,0.011c-0.006,0.008-0.015,0.013-0.022,0.02
- c-0.009,0.009-0.016,0.019-0.024,0.028s-0.016,0.019-0.024,0.029c-0.004,0.004-0.007,0.009-0.012,0.013
- c-0.004,0.004-0.009,0.007-0.013,0.011c-0.007,0.009-0.017,0.018-0.027,0.023c-0.003,0.002-0.011,0.005-0.015,0.003
- c-0.003-0.003,0-0.006,0.001-0.009c0.004-0.01,0.008-0.018,0.015-0.025c0.007-0.006,0.013-0.015,0.019-0.022
- c0.005-0.007,0.012-0.012,0.018-0.018c0.013-0.016,0.031-0.028,0.045-0.044c0.007-0.007,0.013-0.016,0.02-0.024
- c0.006-0.008,0.013-0.016,0.019-0.024c0.005-0.006,0.009-0.013,0.014-0.02l-0.003,0.007c0.005-0.002,0.012-0.013,0.009-0.018
- c-0.003,0.001-0.005,0.002-0.009,0.002c-0.004,0-0.005,0.001-0.009,0.004c-0.015,0.011-0.028,0.028-0.045,0.039
- c-0.009,0.006-0.019,0.012-0.027,0.019c-0.007,0.005-0.012,0.012-0.019,0.018c-0.013,0.01-0.024,0.021-0.036,0.033
- c-0.005,0.005-0.01,0.01-0.016,0.014c-0.005,0.003-0.008,0.002-0.014,0.002c-0.008,0.001-0.018,0.012-0.023,0.018
- c-0.01,0.013-0.024,0.023-0.036,0.034c-0.002,0.003-0.007,0.006-0.008,0.01c-0.001,0.004-0.001,0.002,0.002,0.004
- c0.003,0.004,0.005,0.003,0.004,0.01c0,0.003-0.003,0.013-0.007,0.013c-0.003,0.001-0.004-0.003-0.006-0.005
- c-0.002-0.001-0.005-0.001-0.007-0.002c-0.002-0.002-0.002-0.004-0.005-0.004s-0.006,0.005-0.007,0.007
- c-0.004,0.004-0.01,0.006-0.016,0.009c-0.004,0.003-0.013,0.004-0.013,0.011c0,0.005,0.006,0.006,0.005,0.011
- c-0.001,0.005-0.006,0.005-0.009,0.007c-0.006,0.004-0.011,0.01-0.016,0.014c-0.016,0.015-0.028,0.032-0.043,0.047
- c-0.006,0.007-0.013,0.012-0.019,0.019c-0.004,0.005-0.008,0.011-0.014,0.015c-0.008,0.007-0.016,0.014-0.027,0.017
- c-0.007,0.003-0.014,0.005-0.021,0.008c-0.007,0.004-0.011,0.008-0.017,0.013c-0.007,0.007-0.016,0.012-0.023,0.017
- c-0.016,0.013-0.032,0.027-0.049,0.038c-0.005,0.004-0.008,0.004-0.013,0.007c-0.011,0.005-0.02,0.014-0.03,0.021
- c-0.015,0.011-0.032,0.02-0.045,0.033c-0.004,0.004-0.013,0.015-0.011,0.021c0.001,0.004,0.006,0.006,0.009,0.005
- c0.004-0.001,0.009-0.007,0.012-0.01c0.001-0.001,0.006-0.006,0.008-0.003C-17.778,55.171-17.779,55.173-17.781,55.174z
- M-17.109,54.626c0,0.004-0.001,0.011,0.003,0.014c0.002,0.001,0.01,0,0.013-0.001c0.009-0.002,0.019-0.008,0.025-0.015
- c0.004-0.005,0.005-0.013,0.009-0.019c0.005-0.007,0.009-0.015,0.013-0.022c0.007-0.011,0.013-0.022,0.02-0.033
- c0.01-0.015,0.022-0.029,0.03-0.044c0.018-0.032,0.031-0.067,0.051-0.097c0.019-0.029,0.04-0.056,0.059-0.085
- c0.009-0.015,0.022-0.029,0.03-0.045c0.004-0.01,0.02-0.035,0.011-0.046c-0.01-0.013-0.031,0.024-0.034,0.029
- c-0.014,0.017-0.026,0.034-0.039,0.051c-0.005,0.005-0.007,0.012-0.012,0.018c-0.002,0.004-0.003,0.007-0.005,0.011
- c-0.001,0.003-0.004,0.005-0.005,0.008c-0.002,0.003-0.003,0.005-0.005,0.008c-0.003,0.003-0.005,0.006-0.007,0.009
- c-0.005,0.007-0.01,0.014-0.014,0.021c-0.006,0.01-0.013,0.019-0.018,0.029c-0.005,0.008-0.011,0.015-0.016,0.023
- c-0.006,0.01-0.015,0.019-0.021,0.029c-0.004,0.01-0.009,0.018-0.011,0.028c-0.008,0.028-0.03,0.05-0.046,0.073
- c-0.007,0.011-0.017,0.02-0.024,0.031h-0.001c0.001-0.001,0.001-0.003,0.001-0.004l-0.005,0.011
- c-0.001,0.001-0.001,0.002-0.002,0.002c0,0.001,0,0.002,0,0.003l0.002-0.005c0.001-0.002,0.003-0.004,0.004-0.007
- C-17.104,54.61-17.108,54.618-17.109,54.626z M-17.08,54.48c0.01-0.013,0.024-0.024,0.032-0.038c0.01-0.017,0.017-0.035,0.025-0.052
- c0.005-0.01,0.009-0.019,0.012-0.029c0.003-0.009,0.005-0.018,0.009-0.026c0.007-0.014,0.014-0.031,0.026-0.043
- c0.004-0.004,0.007-0.006,0.01-0.01c0.003-0.005,0.005-0.011,0.009-0.016c0.004-0.006,0.01-0.012,0.014-0.017
- c0.006-0.008,0.013-0.015,0.018-0.022c0.007-0.009,0.014-0.018,0.021-0.026c0.004-0.007,0.012-0.02,0.011-0.028
- c-0.002,0.002-0.003,0.003-0.006,0.005c-0.006,0.004-0.016,0.004-0.022,0.009c-0.003,0.003-0.005,0.006-0.008,0.008
- c-0.007,0.004-0.013,0.011-0.019,0.016c-0.007,0.007-0.012,0.015-0.019,0.021c-0.003,0.003-0.007,0.007-0.01,0.01
- c-0.008,0.009-0.014,0.019-0.021,0.028c-0.009,0.012-0.02,0.022-0.029,0.034c-0.008,0.008-0.015,0.015-0.023,0.023
- c-0.007,0.007-0.013,0.016-0.021,0.022c-0.008,0.006-0.015,0.014-0.022,0.021c-0.006,0.007-0.011,0.013-0.018,0.019
- c-0.006,0.006-0.013,0.012-0.019,0.019c-0.004,0.005-0.009,0.008-0.013,0.014c-0.005,0.006-0.01,0.012-0.016,0.017
- c-0.007,0.006-0.014,0.011-0.021,0.017c-0.005,0.004-0.008,0.009-0.014,0.012c-0.008,0.004-0.022,0.008-0.026,0.017
- c-0.003,0.009-0.005,0.017-0.01,0.025c-0.006,0.011-0.011,0.021-0.019,0.031c-0.008,0.01-0.018,0.02-0.026,0.03
- c-0.009,0.011-0.018,0.022-0.026,0.034c-0.003,0.005-0.005,0.01-0.008,0.014c-0.002,0.003-0.005,0.005-0.006,0.007
- c-0.002,0.003-0.002,0.007-0.005,0.01c-0.002,0.001-0.005,0.002-0.007,0.004c-0.001,0.001-0.002,0.004-0.004,0.005
- c-0.005,0.004-0.009,0.008-0.013,0.013c-0.003,0.004-0.007,0.007-0.011,0.011c-0.002,0.004-0.004,0.008-0.008,0.011
- c-0.005,0.004-0.012,0.004-0.017,0.007c-0.013,0.01-0.02,0.026-0.034,0.035c-0.011,0.008-0.013,0.02-0.023,0.03
- c-0.006,0.006-0.012,0.01-0.018,0.016c-0.003,0.003-0.012,0.01-0.013,0.015c-0.001,0.005,0.003,0.007,0.003,0.011h-0.001h0.001
- c0.001,0.001,0.003,0,0.004-0.002c0.002-0.001,0.005-0.003,0.007-0.005c0.005-0.004,0.008-0.005,0.013-0.006
- c0.003-0.001,0.007-0.003,0.009-0.005c0.005-0.004,0.009-0.007,0.014-0.009c0.022-0.012,0.04-0.031,0.057-0.048
- c0.014-0.014,0.03-0.026,0.045-0.038c0.021-0.015,0.041-0.033,0.064-0.046c0.023-0.014,0.042-0.035,0.063-0.051
- c0.02-0.017,0.04-0.034,0.059-0.052C-17.113,54.515-17.094,54.499-17.08,54.48z M-20.326,56.962c0.008,0.008,0.02,0.009,0.031,0.011
- c0.004,0.001,0.008,0.001,0.011,0.002c0.001-0.007,0.004-0.009,0.006-0.016c0.006-0.022-0.02-0.036-0.037-0.032
- c-0.004,0.001-0.013,0.003-0.018,0.007c0.001,0.005-0.001,0.012,0.001,0.018c0,0,0.001,0,0.001,0.001h0.031
- C-20.309,56.958-20.317,56.961-20.326,56.962z M-16.279,52.758c-0.003,0.011-0.009,0.027-0.014,0.037
- c-0.01,0.02-0.024,0.034-0.038,0.05c-0.01,0.011-0.027,0.034-0.042,0.028c0.006-0.009,0.007-0.018,0.007-0.029
- c0.001-0.019,0.003-0.036,0.006-0.056c0.002-0.009-0.001-0.018,0-0.027c0-0.009,0.002-0.013,0.004-0.02
- c0.002-0.008,0-0.015,0.001-0.022c0.001-0.009,0.004-0.014,0.006-0.022c0.005-0.022,0.006-0.045,0.017-0.065
- c0.004-0.008,0.012-0.024,0.021-0.027c0.015-0.006,0.025,0.015,0.027,0.027c0.006,0.026,0.002,0.055,0.01,0.081
- c0.003,0.011-0.003,0.017-0.005,0.028C-16.28,52.746-16.278,52.752-16.279,52.758z M-16.376,52.871
- c0.001,0.001,0.002,0.002,0.003,0.002c-0.001,0.001-0.002,0.002-0.003,0.004V52.871z M-16.881,54.798
- c-0.002,0.003-0.004,0.007-0.006,0.011c-0.003,0.005-0.008,0.007-0.01,0.011c-0.014,0.019-0.025,0.036-0.041,0.052
- c-0.009,0.009-0.024,0.02-0.026,0.034v-0.021c0.012-0.01,0.016-0.025,0.021-0.038c0.003-0.007,0.007-0.01,0.01-0.016
- c0.007-0.012,0.007-0.022,0.017-0.032c0.012-0.013,0.017-0.026,0.025-0.043c0.006-0.014,0.018-0.025,0.024-0.039
- c0.003-0.007,0-0.01,0.006-0.015c0.011,0.016,0.008,0.045-0.001,0.062C-16.868,54.775-16.875,54.786-16.881,54.798z M-16.936,54.754
- c-0.019,0.042-0.028,0.087-0.055,0.125c-0.011,0.015-0.021,0.027-0.029,0.044c-0.004,0.009-0.008,0.017-0.011,0.026
- c-0.003,0.009-0.005,0.019-0.008,0.028c-0.007,0.022-0.015,0.04-0.029,0.059c-0.006,0.009-0.024,0.044-0.037,0.044
- c0-0.001,0-0.001,0-0.002l-0.012,0.008c0.003-0.021,0.022-0.043,0.032-0.061c0.007-0.013,0.012-0.03,0.017-0.044
- c0.009-0.02,0.02-0.037,0.029-0.057c0.013-0.027,0.033-0.048,0.042-0.077c0.004-0.011,0.005-0.022,0.01-0.033
- c0.004-0.011,0.012-0.021,0.016-0.033c0.004-0.01,0.005-0.021,0.008-0.031c0.004-0.012,0.011-0.022,0.015-0.034
- c0.006-0.017,0.008-0.036,0.015-0.055c0.007-0.017,0.015-0.031,0.025-0.047c0.006-0.011,0.027-0.04,0.031-0.012
- c0.004,0.026-0.017,0.048-0.026,0.071C-16.914,54.7-16.923,54.727-16.936,54.754z M-17.041,54.825
- c-0.007,0.028-0.023,0.052-0.033,0.079c-0.007,0.017-0.012,0.036-0.021,0.053c-0.009,0.019-0.023,0.036-0.032,0.056
- c-0.01,0.018-0.017,0.038-0.028,0.055c-0.009,0.016-0.018,0.03-0.025,0.047c-0.013,0.028-0.033,0.053-0.046,0.08
- c-0.007,0.018-0.015,0.036-0.022,0.055c-0.008,0.019-0.028,0.035-0.036,0.055c-0.004,0.01-0.006,0.017-0.013,0.025
- c-0.005,0.004-0.019,0.022-0.021,0.007V55.32c0.001-0.053,0.038-0.097,0.064-0.141c0.006-0.01,0.009-0.019,0.013-0.028
- c0.005-0.008,0.011-0.013,0.017-0.021c0.006-0.009,0.011-0.018,0.015-0.028c0.005-0.014,0.006-0.027,0.013-0.04
- c0.005-0.01,0.015-0.017,0.02-0.026c0.004-0.008,0.004-0.013,0.006-0.021c0.004-0.01,0.011-0.023,0.016-0.032
- c0.007-0.012,0.016-0.021,0.023-0.033c0.008-0.015,0.015-0.03,0.026-0.043c0.015-0.021,0.022-0.041,0.028-0.066
- c0.002-0.009,0.007-0.018,0.011-0.027c0.004-0.011,0.003-0.026,0.013-0.034c0.009-0.007,0.023-0.007,0.023,0.007
- c0,0.001-0.004,0.014-0.005,0.016C-17.037,54.81-17.039,54.818-17.041,54.825z M-17.292,55.364c0.006-0.01,0.009-0.02,0.016-0.029
- c0.007-0.009,0.015-0.016,0.022-0.026c0.01-0.015,0.027-0.024,0.038-0.039c0.007-0.009,0.012-0.022,0.019-0.032
- c0.005-0.006,0.011-0.01,0.015-0.016c0.005-0.005,0.012-0.012,0.015-0.017c0.01-0.014,0.015-0.03,0.023-0.044
- c0.012-0.022,0.032-0.037,0.044-0.059c0.014-0.026,0.025-0.05,0.041-0.075c0.008-0.012,0.018-0.021,0.026-0.033
- c0.007-0.013,0.013-0.036,0.024-0.045c0.012-0.009,0.013-0.001,0.012,0.012c0,0.016-0.007,0.029-0.015,0.043
- c-0.014,0.027-0.03,0.055-0.043,0.082c-0.007,0.013-0.011,0.026-0.018,0.038c-0.004,0.007-0.008,0.016-0.012,0.023
- c-0.005,0.006-0.01,0.007-0.014,0.015c-0.013,0.025-0.025,0.045-0.045,0.066c-0.012,0.013-0.019,0.027-0.028,0.042
- c-0.009,0.015-0.022,0.026-0.032,0.039c-0.015,0.02-0.027,0.041-0.043,0.06c-0.014,0.016-0.026,0.031-0.038,0.049
- c-0.011,0.016-0.024,0.029-0.032,0.045c-0.008,0.018-0.017,0.036-0.029,0.052c-0.01,0.012-0.021,0.022-0.03,0.035
- c-0.014,0.017-0.03,0.034-0.041,0.053c-0.008,0.012-0.013,0.025-0.019,0.038c-0.006,0.012-0.014,0.02-0.02,0.032
- c-0.003,0.007-0.007,0.014-0.01,0.021c-0.004,0.007-0.006,0.017-0.01,0.025v-0.001l-0.011-0.011
- c0.002-0.001,0.003-0.001,0.005-0.002c0-0.007,0.005-0.018,0.007-0.024c0.005-0.015,0.021-0.028,0.028-0.042
- c0.011-0.022,0.019-0.044,0.033-0.063c0.004-0.007,0.009-0.015,0.014-0.021c0.006-0.006,0.013-0.01,0.018-0.017
- c0.013-0.018,0.018-0.042,0.03-0.06c0.013-0.02,0.028-0.036,0.035-0.059C-17.31,55.4-17.303,55.382-17.292,55.364z M-17.472,55.592
- c-0.009,0.016-0.017,0.031-0.024,0.048c-0.006,0.014-0.015,0.021-0.022,0.034c-0.009,0.016-0.013,0.034-0.019,0.052
- c-0.006,0.018-0.018,0.034-0.027,0.051c-0.006,0.012-0.015,0.022-0.022,0.033c-0.005,0.007-0.008,0.015-0.014,0.022
- c-0.004,0.006-0.009,0.01-0.013,0.016c-0.019,0.025-0.037,0.041-0.064,0.055c-0.014,0.006-0.028,0.01-0.043,0.014
- c-0.024,0.006-0.039,0.02-0.059,0.031c-0.013,0.006-0.026,0.012-0.039,0.018c-0.013,0.006-0.026,0.011-0.039,0.014
- c-0.009,0.003-0.018,0.008-0.027,0.01c-0.007,0.001-0.015-0.002-0.022-0.001s-0.015,0.005-0.022,0.007
- C-17.942,56.001-17.955,56-17.971,56l-0.011-0.016c-0.006,0.008-0.024,0.007-0.032,0.006c-0.008-0.002-0.013-0.005-0.021-0.006
- s-0.014,0.001-0.022-0.001c-0.01-0.002-0.024-0.006-0.03-0.015c-0.004-0.006-0.009-0.026-0.008-0.033
- c0.001-0.016,0.021-0.039,0.033-0.049c0.008-0.007,0.021-0.009,0.031-0.015c0.011-0.006,0.02-0.013,0.029-0.022
- c0.006-0.006,0.012-0.011,0.02-0.016c0.004-0.002,0.012-0.008,0.017-0.007c0.005,0,0.005,0.005,0.01,0.006
- c0.011,0.003,0.024-0.004,0.033-0.01c0.009-0.006,0.016-0.009,0.026-0.013c0.016-0.007,0.036-0.021,0.056-0.016
- c0.01,0.003,0.015,0.006,0.027,0.006c0.014,0,0.024,0.006,0.038,0.005c0.012,0,0.02,0.004,0.031,0.007
- c0.007,0.002,0.003,0.004,0.012,0.003c0.006,0,0.01-0.004,0.017-0.004c0.011-0.001,0.019,0.001,0.028-0.004
- c0.01-0.005,0.018-0.011,0.028-0.017c0.016-0.009,0.032-0.022,0.047-0.035c0.016-0.013,0.026-0.034,0.042-0.049
- c0.016-0.014,0.025-0.028,0.039-0.044c0.012-0.014,0.019-0.03,0.029-0.047c0.011-0.017,0.013-0.04,0.025-0.056
- c0.006-0.009,0.036-0.043,0.044-0.042c0.006,0.013-0.008,0.028-0.014,0.038C-17.455,55.567-17.465,55.579-17.472,55.592z
- M-18.013,56.088c0.011-0.001,0.025,0.002,0.037,0c0.015-0.003,0.03-0.015,0.043-0.022c0.007-0.004,0.011-0.009,0.018-0.002
- c0.01,0.01,0.001,0.019-0.007,0.026c-0.014,0.012-0.029,0.023-0.043,0.031c-0.008,0.005-0.042,0.033-0.044,0.015l0.002-0.005
- c-0.016,0.001-0.034-0.006-0.051-0.005c-0.013,0-0.047-0.01-0.044-0.028c0.004-0.018,0.04-0.025,0.054-0.02
- C-18.034,56.082-18.029,56.088-18.013,56.088z M-18.048,56.206c0.02-0.008,0.045-0.013,0.066-0.01
- c0.013,0.002,0.012,0.002,0.007,0.012c-0.005,0.01-0.01,0.018-0.018,0.025c-0.015,0.013-0.033,0.012-0.049,0.022
- c-0.006,0.003-0.009,0.01-0.015,0.014c-0.007,0.004-0.013,0.003-0.022,0.005c-0.001,0.002-0.003,0.004-0.006,0.004
- c-0.006,0.002-0.011,0-0.017,0.001c-0.003,0.001-0.01,0.002-0.015,0.003l0.004-0.004c-0.015,0.002-0.05-0.02-0.049-0.038
- c0-0.011,0.014-0.02,0.023-0.024c0.008-0.002,0.016-0.003,0.025-0.004c0.01,0,0.007,0.004,0.014,0.005
- C-18.08,56.221-18.066,56.213-18.048,56.206z M-18.259,56.168c-0.008,0.003-0.015,0.01-0.022,0.012
- c-0.009,0.003-0.026,0.002-0.033,0.011l0.006-0.011c-0.005-0.023,0.023-0.051,0.038-0.066c0.006-0.005,0.015-0.011,0.021-0.016
- c0.011-0.007,0.013-0.016,0.022-0.025c0.007-0.006,0.014-0.007,0.021-0.013c0.006-0.004,0.011-0.012,0.016-0.018
- c0.006-0.006,0.024-0.03,0.034-0.026c0.023,0.009-0.045,0.111-0.059,0.126C-18.228,56.156-18.242,56.16-18.259,56.168z
- M-18.196,55.957c-0.007,0.017-0.013,0.039-0.024,0.055c-0.011,0.015-0.027,0.018-0.041,0.03c-0.009,0.009-0.018,0.016-0.027,0.025
- c-0.011,0.011-0.017,0.025-0.031,0.015l0.005-0.011c-0.001,0-0.003,0-0.005-0.001c0.001-0.01,0.009-0.018,0.015-0.026
- c0.012-0.018,0.024-0.036,0.038-0.053c0.004-0.004,0.008-0.009,0.013-0.013c0.003-0.004,0.003-0.01,0.006-0.015
- c0.005-0.007,0.014-0.01,0.019-0.017c0.014-0.018,0.014-0.036,0.035-0.049c0.005-0.003,0.024-0.02,0.031-0.016
- c0.008,0.007-0.007,0.022-0.009,0.027C-18.178,55.925-18.188,55.94-18.196,55.957z M-18.255,56.79c0.002,0.007,0.003,0.018,0,0.025
- c-0.003,0.008-0.013,0.011-0.009,0.022c0.02-0.006,0.027-0.032,0.039-0.046c0.005-0.008,0.014-0.012,0.02-0.019
- c0.012-0.013,0.016-0.033,0.026-0.048c0.011-0.019,0.029-0.036,0.049-0.045c0.008-0.003,0.02-0.005,0.027-0.011
- c0.004-0.002,0.007-0.01,0.012-0.01c0.008,0.001,0.007,0.012,0.006,0.018c-0.003,0.01-0.008,0.021-0.011,0.032
- c-0.004,0.009-0.01,0.022-0.011,0.033c-0.004,0.024-0.011,0.044-0.028,0.063c-0.01,0.011-0.021,0.023-0.028,0.036
- c-0.008,0.014-0.012,0.025-0.027,0.035c-0.012,0.008-0.049,0.035-0.063,0.028c0.001-0.012,0.027-0.021,0.036-0.028
- c0.005-0.004,0.01-0.01,0.013-0.015c0.004-0.004,0.014-0.015,0.015-0.02c-0.012-0.006-0.026,0.005-0.036,0.011
- c-0.013,0.007-0.025,0.014-0.036,0.024c-0.01,0.01-0.022,0.019-0.032,0.029c-0.005,0.004-0.01,0.007-0.014,0.012
- c-0.006,0.007-0.006,0.018-0.012,0.025c-0.009,0.011-0.02,0.018-0.022,0.034c-0.001,0.006,0.002,0.014-0.001,0.02
- c-0.003,0.005-0.011,0.009-0.015,0.012c-0.014,0.01-0.025,0.018-0.035,0.032c-0.007,0.01-0.014,0.022-0.025,0.03
- c-0.018,0.012-0.046,0.026-0.053,0.048c-0.003,0.007-0.002,0.011-0.006,0.017c-0.003,0.005-0.009,0.01-0.012,0.015
- c-0.008,0.011-0.014,0.024-0.021,0.034c-0.017,0.021-0.044,0.036-0.066,0.051c-0.009,0.006-0.016,0.015-0.023,0.022
- c-0.005,0.004-0.011,0.007-0.016,0.011c0.007-0.009,0.008-0.021,0.012-0.031c0.004-0.011,0.006-0.022,0.011-0.033
- c0.007-0.016,0.013-0.034,0.022-0.049c0.005-0.009,0.003-0.012,0.005-0.022c0.001-0.006,0.006-0.012,0.009-0.018
- c0.005-0.009,0.01-0.017,0.017-0.026c0.009-0.015,0.023-0.024,0.034-0.037c0.007-0.01,0.015-0.021,0.023-0.032
- c0.008-0.011,0.02-0.015,0.031-0.023c0.013-0.009,0.022-0.021,0.031-0.034c0.003-0.004,0.005-0.005,0.007-0.009
- c0.003-0.006,0.003-0.016,0.007-0.021c0.006-0.007,0.015-0.009,0.022-0.016c0.008-0.009,0.01-0.017,0.016-0.027
- c0.007-0.012,0.02-0.018,0.027-0.029c0.01-0.012,0.017-0.018,0.03-0.028C-18.291,56.817-18.276,56.799-18.255,56.79z
- M-18.624,57.274c0.001,0,0.002-0.001,0.003-0.002c-0.001,0.002-0.003,0.004-0.003,0.007V57.274z M-18.13,56.418
- c-0.021,0.014-0.052,0.017-0.071,0.035l-0.009,0.01c-0.009-0.012-0.014-0.014-0.005-0.027c0.012-0.016,0.028-0.03,0.043-0.044
- c0.021-0.021,0.044-0.035,0.07-0.049c0.011-0.007,0.019-0.016,0.03-0.022c0.012-0.006,0.025-0.008,0.036-0.016
- c0.01-0.008,0.022-0.019,0.031-0.028c0.006-0.007,0.033-0.055,0.04-0.037c0.004,0.01-0.011,0.029-0.016,0.038
- c-0.008,0.017-0.015,0.03-0.028,0.044c-0.018,0.017-0.037,0.034-0.056,0.048c-0.01,0.008-0.019,0.018-0.03,0.024
- C-18.107,56.401-18.118,56.41-18.13,56.418z M-17.835,56.051c0.012-0.008,0.022-0.019,0.032-0.027
- c0.013-0.01,0.026-0.019,0.039-0.028c0.009-0.006,0.017-0.012,0.025-0.019c0.013-0.009,0.026-0.019,0.036-0.031
- c0.011-0.012,0.021-0.031,0.037-0.037c0.022-0.01,0.017,0.015,0.009,0.026c-0.01,0.016-0.02,0.034-0.033,0.048
- c-0.011,0.013-0.022,0.022-0.035,0.032c-0.013,0.011-0.022,0.022-0.034,0.034c-0.012,0.013-0.027,0.02-0.039,0.032
- c-0.009,0.008-0.017,0.017-0.026,0.024c-0.01,0.009-0.021,0.015-0.029,0.026c-0.008,0.012-0.016,0.027-0.031,0.033l-0.005-0.006
- c-0.012,0.003-0.032-0.006-0.034-0.018c-0.005-0.027,0.026-0.05,0.044-0.063C-17.864,56.066-17.85,56.06-17.835,56.051z
- M-17.847,56.169c0.005-0.008,0.011-0.015,0.018-0.021c0.013-0.011,0.024-0.022,0.036-0.033c0.011-0.01,0.025-0.019,0.035-0.031
- c0,0.017-0.013,0.035-0.023,0.048c-0.012,0.017-0.017,0.035-0.032,0.049c-0.006,0.005-0.01,0.011-0.015,0.017
- c-0.007,0.008-0.01,0.006-0.018,0.009c-0.019,0.008-0.021,0.013-0.022,0.033l-0.011-0.011l-0.001,0.003
- c-0.008-0.006,0.006-0.031,0.012-0.038C-17.861,56.185-17.853,56.179-17.847,56.169z M-17.809,56.229
- c0.012-0.01,0.023-0.022,0.034-0.033c0.009-0.008,0.011-0.017,0.018-0.026c0.008-0.012,0.022-0.021,0.031-0.034
- c0.003-0.004,0.01-0.017,0.016-0.016c0.012,0,0.004,0.02,0.002,0.026c-0.004,0.011-0.008,0.026-0.015,0.036
- c-0.007,0.01-0.017,0.016-0.025,0.025c-0.013,0.017-0.026,0.032-0.042,0.045c-0.02,0.017-0.038,0.036-0.061,0.048l0.005-0.017
- C-17.873,56.28-17.814,56.233-17.809,56.229z M-17.71,56.066l-0.005,0.011c-0.021-0.023-0.007-0.047,0.011-0.064
- c0.015-0.016,0.032-0.03,0.048-0.045c0.018-0.016,0.036-0.032,0.052-0.049c0.011-0.011,0.02-0.022,0.03-0.033
- c0.019-0.02,0.03-0.045,0.048-0.065c0.03-0.036,0.067-0.076,0.087-0.12c0.004-0.009,0.009-0.018,0.013-0.027
- c0.008-0.016,0.017-0.033,0.026-0.048c0.004-0.006,0.038-0.051,0.048-0.044c0.014,0.009-0.017,0.057-0.022,0.064
- c-0.009,0.016-0.022,0.029-0.031,0.044c-0.008,0.012-0.018,0.021-0.026,0.033s-0.015,0.023-0.024,0.035
- c-0.012,0.015-0.024,0.029-0.033,0.047c-0.013,0.026-0.033,0.046-0.049,0.07c-0.029,0.044-0.072,0.079-0.098,0.124
- c-0.007,0.014-0.019,0.031-0.031,0.04c-0.014,0.009-0.027,0.027-0.043,0.032L-17.71,56.066z M-19.005,57.415l-0.022,0.006
- c0.005-0.004,0.007-0.013,0.01-0.018c0.003-0.007,0.007-0.014,0.012-0.02c0.007-0.009,0.026-0.027,0.038-0.028
- c0.017-0.001,0.021,0.016,0.013,0.028c-0.005,0.006-0.014,0.012-0.02,0.017C-18.982,57.408-18.993,57.418-19.005,57.415z
- M-19.109,57.361h-0.01l-0.005-0.001c0.006-0.014,0.039-0.065,0.06-0.053c0.002,0.002,0.009,0.015,0.009,0.017
- c0.001,0.01-0.004,0.012-0.01,0.021C-19.076,57.36-19.093,57.381-19.109,57.361z M-19.194,57.357
- c-0.007,0.003-0.029,0.011-0.023-0.007h-0.017c0.015-0.005,0.022-0.022,0.032-0.034c0.004-0.005,0.01-0.013,0.016-0.016
- c0.007-0.004,0.015-0.003,0.022-0.008c0.001,0.009,0.012,0.012,0.013,0.02c0,0.007-0.017,0.024-0.021,0.029
- C-19.179,57.348-19.185,57.353-19.194,57.357z M-19.499,57.514c-0.001,0.002-0.001,0.003-0.001,0.005l-0.006-0.006
- c-0.001,0.001-0.002,0.001-0.003,0.001c0.019-0.023,0.036-0.05,0.063-0.065c0.014-0.007,0.025-0.011,0.039-0.022
- c0.01-0.008,0.016-0.022,0.031-0.016c-0.002,0.025-0.035,0.052-0.053,0.065C-19.45,57.491-19.474,57.511-19.499,57.514z
- M-19.589,57.621c-0.005,0.009-0.012,0.015-0.019,0.023c-0.011,0.012-0.013,0.008-0.027,0.012c-0.008,0.002-0.014,0.009-0.023,0.01
- c-0.005,0-0.013-0.001-0.019-0.001c0.003-0.001,0.005-0.003,0.008-0.005l-0.016,0.006c-0.007-0.001-0.011-0.008-0.016-0.013
- c0.002-0.008,0.009-0.011,0.016-0.016c0.011-0.008,0.021-0.018,0.032-0.027c0.008-0.005,0.011-0.013,0.018-0.019
- s0.017-0.012,0.026-0.016c0.017-0.01,0.027-0.022,0.038-0.036c0.004-0.006,0.013-0.017,0.02-0.022
- c0.011-0.007,0.016-0.005,0.018,0.007c0.003,0.022-0.012,0.035-0.026,0.051C-19.571,57.589-19.579,57.605-19.589,57.621z
- M-19.772,57.757c-0.03,0.027-0.066,0.047-0.098,0.071c-0.016,0.011-0.027,0.023-0.038,0.039c-0.011,0.015-0.024,0.018-0.039,0.026
- c-0.014,0.007-0.024,0.027-0.039,0.033c-0.006,0.002-0.013,0.001-0.019,0.002c-0.002,0.001-0.004,0.001-0.006,0.002
- c-0.004-0.005,0.008-0.02,0.011-0.025c0.013-0.018,0.034-0.026,0.047-0.043c0.01-0.014,0.022-0.026,0.034-0.038
- c0.01-0.012,0.017-0.023,0.025-0.035c0.009-0.012,0.027-0.022,0.039-0.031c0.018-0.013,0.03-0.031,0.049-0.045
- c0.013-0.01,0.024-0.016,0.039-0.021c0.011-0.004,0.011-0.001,0.022,0.001c0.009,0.002,0.014-0.002,0.021-0.005
- c0.004,0.008-0.012,0.03-0.017,0.037C-19.75,57.736-19.761,57.747-19.772,57.757z M-20.016,57.932c0.002,0,0.004-0.001,0.005-0.002
- c0.001,0.001,0.002,0.002,0.005,0.002H-20.016z M-20.023,57.932h0.007c-0.004,0.003-0.008,0.005-0.01,0.007
- C-20.024,57.937-20.023,57.935-20.023,57.932z M-19.994,57.988c-0.005,0.009-0.017,0.017-0.023,0.025
- c-0.008,0.009-0.016,0.018-0.022,0.028c-0.007,0.011-0.016,0.017-0.027,0.024c-0.01,0.005-0.017,0.014-0.027,0.02
- c-0.019,0.011-0.04,0.015-0.056,0.031c-0.006,0.006-0.015,0.018-0.022,0.022c-0.004,0.003-0.011,0.003-0.015,0
- c-0.002,0-0.003-0.001-0.003-0.002c0.001-0.003,0.003-0.005,0.004-0.007c0.009-0.014,0.019-0.026,0.032-0.036
- c0.011-0.009,0.023-0.02,0.032-0.031c0.012-0.015,0.015-0.027,0.032-0.037c0.011-0.007,0.017-0.011,0.023-0.022
- c0.008-0.014,0.013-0.007,0.027-0.012c0.01-0.003,0.017-0.013,0.027-0.015C-19.999,57.972-19.986,57.974-19.994,57.988z
- M-20.192,58.127c0,0.003,0.001,0.006,0.003,0.009c-0.004,0.007-0.008,0.014-0.013,0.019L-20.192,58.127z M-20.079,57.926
- c-0.013,0.008-0.028,0.019-0.038,0.032c-0.006,0.009-0.006,0.02-0.01,0.029c-0.003,0.006-0.01,0.011-0.014,0.016
- c-0.004,0.005-0.006,0.012-0.011,0.017c-0.008,0.009-0.019,0.018-0.028,0.025c-0.007,0.005-0.027,0.013-0.027,0.022
- c0.003,0.002,0.005,0.002,0.008,0.001c-0.006,0.006-0.01,0.015-0.015,0.022c-0.011,0.014-0.026,0.026-0.038,0.037
- c-0.018,0.015-0.049,0.026-0.071,0.035c-0.023,0.01-0.045,0.02-0.063,0.038c-0.011,0.012-0.022,0.026-0.035,0.036
- c-0.016,0.012-0.033,0.022-0.048,0.034c-0.005,0.004-0.011,0.01-0.017,0.015c-0.007,0.005-0.022,0.01-0.026,0.019
- c-0.008,0.022,0.037-0.003,0.043-0.007s0.02-0.012,0.022,0c0.004,0.014-0.016,0.017-0.023,0.02c-0.009,0.004-0.017,0.01-0.026,0.014
- c-0.01,0.004-0.02,0.009-0.029,0.014c-0.008,0.004-0.017,0.008-0.026,0.01c-0.005,0.002-0.01,0.003-0.016,0.006
- c-0.006,0.002-0.017,0.005-0.022,0.008c-0.005,0.003-0.005,0.007-0.01,0.01c-0.004,0.002-0.011,0.004-0.016,0.007
- c-0.007,0.003-0.015,0.006-0.022,0.009c-0.021,0.009-0.042,0.023-0.054,0.043c-0.008,0.015-0.009,0.033-0.028,0.033
- c-0.006,0-0.012-0.001-0.017,0c-0.006,0.001-0.007,0.003-0.012,0.004c-0.009,0.003-0.017,0.004-0.026,0.007
- c-0.004,0.002-0.007,0.002-0.012,0.004c-0.005,0.002-0.01,0.006-0.015,0.007c-0.012,0.003-0.021-0.002-0.033,0.004
- c-0.01,0.004-0.02,0.009-0.028,0.016c-0.019,0.015-0.047,0.017-0.064,0.034c-0.009,0.01-0.016,0.021-0.027,0.028
- c-0.009,0.005-0.019,0.006-0.027,0.012c-0.012,0.006-0.021,0.013-0.033,0.019c-0.013,0.006-0.019,0.01-0.033,0.013
- c-0.011,0.003-0.022,0.006-0.033,0.01c-0.009,0.004-0.017,0.004-0.027,0.005c-0.009,0.002-0.018,0.007-0.027,0.011
- c-0.01,0.005-0.021,0.007-0.031,0.012c-0.032,0.016-0.07,0.025-0.098,0.05c-0.01,0.008-0.022,0.016-0.034,0.021
- c-0.006,0.003-0.011,0.002-0.017,0.004c-0.004,0.002-0.005,0.005-0.01,0.006s-0.012-0.001-0.017,0c-0.006,0-0.008,0.003-0.012,0.004
- c-0.012,0.003-0.015,0.004-0.024,0.013c-0.008,0.009-0.013,0.009-0.023,0.014c-0.02,0.008-0.039,0.019-0.058,0.029
- c-0.024,0.012-0.049,0.024-0.073,0.032c-0.018,0.006-0.032,0.014-0.048,0.024c-0.02,0.012-0.049,0.018-0.072,0.024
- c-0.011,0.003-0.022-0.001-0.032,0.001c-0.012,0.002-0.022,0.012-0.033,0.016c-0.012,0.003-0.067,0.017-0.048-0.015
- c0.004-0.007,0.016-0.01,0.022-0.016c0.008-0.006,0.013-0.015,0.019-0.023c0.012-0.015,0.022-0.03,0.033-0.045
- c0.008-0.01,0.009-0.025,0.018-0.036c0.003,0,0.006-0.001,0.009-0.001c0.002-0.004,0.004-0.007,0.007-0.009
- c0.004-0.004,0.01-0.011,0.016-0.011c0.006-0.001,0.013,0.006,0.022,0.004c0.009-0.001,0.014-0.006,0.02-0.012
- c0.011-0.011,0.017-0.026,0.029-0.037c0.014-0.014,0.032-0.019,0.049-0.028c0.016-0.009,0.026-0.025,0.042-0.033
- c0.013-0.007,0.028-0.012,0.039-0.021c0.014-0.012,0.016-0.025,0.025-0.039c-0.011-0.008-0.015-0.008-0.029-0.011
- c-0.011-0.002-0.025-0.012-0.039-0.01c-0.006,0.002-0.011,0.005-0.017,0.006c-0.006,0.002-0.015,0-0.021,0
- c-0.014,0-0.03-0.002-0.043,0.001c-0.011,0.003-0.023,0.013-0.034,0.02c-0.013,0.009-0.028,0.011-0.043,0.016
- c-0.027,0.008-0.046,0.02-0.07,0.035c-0.009,0.006-0.019,0.013-0.029,0.019c-0.013,0.008-0.024,0.013-0.037,0.019
- c-0.013,0.007-0.026,0.012-0.038,0.02c-0.013,0.008-0.029,0.008-0.044,0.013c-0.012,0.004-0.022,0.014-0.034,0.019
- c-0.012,0.007-0.027,0.01-0.041,0.013c-0.004,0.002-0.006,0.004-0.012,0.005c-0.007,0.001-0.015,0-0.022,0
- c-0.014,0-0.022,0.008-0.037,0.004c-0.002-0.011,0.008-0.014,0.016-0.019c0.008-0.005,0.013-0.013,0.021-0.018
- c0.015-0.008,0.029-0.019,0.044-0.027c0.007-0.004,0.014-0.006,0.022-0.009c0.012-0.006,0.016-0.017,0.025-0.025
- c0.014-0.013,0.026-0.017,0.034-0.035c-0.011-0.015-0.046,0.004-0.059,0.01c-0.022,0.011-0.044,0.019-0.065,0.03
- c-0.024,0.013-0.048,0.017-0.071,0.03c-0.011,0.007-0.016,0.008-0.027,0.011c-0.007,0.002-0.01,0.004-0.017,0.004
- c-0.007,0.001-0.014,0-0.022,0.002c-0.021,0.005-0.042,0.014-0.06,0.024c-0.007,0.005-0.018,0.007-0.027,0.011
- c-0.019,0.008-0.036,0.022-0.054,0.033c-0.008,0.005-0.018,0.009-0.027,0.013c-0.01,0.005-0.019,0.01-0.027,0.015
- c-0.008,0.004-0.015,0.008-0.022,0.013c-0.011,0.006-0.019,0.012-0.029,0.019c-0.004,0.003-0.01,0.003-0.015,0.006
- c-0.005,0.003-0.011,0.009-0.016,0.012c-0.013,0.009-0.021,0.022-0.033,0.032c-0.007,0.006-0.015,0.017-0.023,0.021
- c-0.004,0.002-0.009,0-0.014,0.002c-0.004,0.001-0.012,0.008-0.016,0.011c-0.013,0.009-0.025,0.022-0.039,0.03
- c-0.009,0.004-0.018,0.008-0.026,0.013c-0.004,0.003-0.008,0.007-0.012,0.01c-0.009,0.006-0.008,0.007-0.013,0.015
- c-0.012,0.018-0.013,0.04-0.019,0.061c-0.003,0.011,0,0.019-0.005,0.028c-0.005,0.011-0.014,0.02-0.022,0.028
- c-0.012,0.011-0.023,0.024-0.035,0.035c-0.016,0.014-0.035,0.024-0.049,0.038c-0.006,0.006-0.007,0.011-0.011,0.017
- c-0.005,0.006-0.013,0.009-0.019,0.013c-0.019,0.013-0.034,0.03-0.053,0.042c-0.017,0.011-0.029,0.023-0.042,0.037
- c-0.013,0.013-0.028,0.019-0.043,0.029c-0.017,0.01-0.035,0.02-0.054,0.027c-0.01,0.004-0.017,0.003-0.027,0.005
- c-0.012,0.002-0.021,0.016-0.033,0.021c-0.006,0.003-0.015,0.004-0.02,0.008c-0.008,0.006-0.016,0.013-0.024,0.019
- c-0.015,0.011-0.032,0.024-0.049,0.033c-0.016,0.009-0.036,0.019-0.053,0.03c-0.014,0.009-0.028,0.02-0.044,0.027
- c-0.015,0.006-0.029,0.005-0.044,0.013c-0.01,0.006-0.019,0.012-0.027,0.018c-0.017,0.012-0.036,0.023-0.055,0.033
- c-0.027,0.015-0.052,0.037-0.081,0.05c-0.016,0.007-0.032,0.011-0.048,0.016c-0.014,0.005-0.027,0.017-0.043,0.016
- c0.002-0.002,0.004-0.003,0.004-0.006l-0.011-0.006c-0.001,0.012-0.013,0.005-0.011-0.005c0.001-0.007,0.01-0.013,0.015-0.017
- c0.013-0.014,0.03-0.021,0.045-0.033c0.008-0.007,0.018-0.014,0.026-0.021c0.007-0.006,0.014-0.008,0.023-0.012
- c0.025-0.011,0.037-0.038,0.06-0.053c0.01-0.007,0.014-0.005,0.02-0.016c0.005-0.009,0.014-0.02,0.017-0.029
- c0.006-0.018-0.006-0.036-0.021-0.046c-0.016-0.013-0.038-0.013-0.033-0.04c0.002-0.011,0.009-0.021,0.011-0.032
- c0.003-0.011,0.009-0.032,0.005-0.042c-0.021,0.007-0.03,0.041-0.037,0.059c-0.013,0.034-0.034,0.067-0.066,0.086
- c-0.019,0.012-0.038,0.023-0.06,0.032c-0.012,0.004-0.012,0.005-0.017,0.017c-0.004,0.01-0.001,0.03-0.009,0.033
- c-0.008,0.003-0.025,0-0.033,0h-0.033c-0.01,0-0.023,0.002-0.033,0s-0.022-0.009-0.032-0.012c-0.015-0.005-0.029-0.013-0.044-0.016
- c-0.01-0.001-0.022,0.001-0.033,0.001c-0.01,0-0.022-0.002-0.032,0.001c-0.007,0.001-0.009,0.005-0.017,0.004
- c-0.008,0-0.009-0.004-0.016-0.006c-0.01-0.002-0.022,0.002-0.033,0.001c-0.017-0.003-0.007-0.008-0.01-0.022
- c-0.001-0.003-0.004-0.01-0.006-0.011c-0.006-0.007-0.002-0.002-0.011-0.005c-0.011-0.005-0.02-0.007-0.033-0.002
- c-0.009,0.004-0.018,0.007-0.027,0.012c-0.009,0.005-0.017,0.013-0.026,0.018c-0.005,0.003-0.012,0.003-0.016,0.005
- c-0.003,0.002-0.005,0.006-0.008,0.009c-0.011,0.008-0.023,0.012-0.037,0.012c-0.016,0-0.049,0.006-0.064-0.001
- c-0.021-0.011-0.008-0.04-0.012-0.059c-0.001-0.006-0.004-0.01-0.006-0.016c-0.001-0.005,0.001-0.011,0.001-0.017
- c-0.001-0.01-0.006-0.015-0.006-0.027c0-0.021-0.011-0.041-0.016-0.059c-0.008-0.025-0.017-0.048-0.038-0.066
- c-0.014-0.011-0.031-0.034-0.049-0.038c-0.005-0.002-0.011,0.001-0.016-0.001c-0.006-0.002-0.012-0.006-0.017-0.009
- c-0.009-0.004-0.019-0.007-0.028-0.01c-0.011-0.004-0.02-0.007-0.032-0.007c-0.013,0-0.026,0.002-0.038-0.004
- c-0.036-0.017-0.003-0.039,0.012-0.056c0.017-0.018,0.031-0.037,0.048-0.053c0.019-0.019,0.043-0.023,0.066-0.034
- c0.019-0.01,0.032-0.027,0.05-0.037c0.019-0.011,0.036-0.025,0.051-0.041c0.008-0.008,0.016-0.017,0.022-0.026
- c0.003-0.003,0.01-0.012,0.012-0.016c0.002-0.007,0-0.014,0.002-0.022c0.002-0.009,0.008-0.018,0.01-0.027
- c0.002-0.012-0.002-0.016,0.006-0.027c0.014-0.019,0.043-0.032,0.064-0.042c0.022-0.011,0.041-0.028,0.051-0.051
- c0.002-0.006,0.002-0.01,0.003-0.016c0.002-0.005,0.005-0.006,0.006-0.011c0.003-0.013-0.002-0.02,0.006-0.032
- c0.011-0.014,0.024-0.019,0.038-0.029c0.01-0.008,0.019-0.016,0.028-0.025c0.008-0.006,0.013-0.012,0.022-0.017
- c0.015-0.009,0.03-0.009,0.046-0.015c0.021-0.008,0.041-0.016,0.061-0.023c0.02-0.008,0.038-0.016,0.054-0.029
- c0.01-0.007,0.02-0.013,0.029-0.02c0.01-0.008,0.02-0.016,0.031-0.021c0.017-0.007,0.055-0.009,0.055-0.034
- c0-0.024-0.032-0.026-0.049-0.023c-0.023,0.005-0.048-0.003-0.071,0.003c-0.011,0.002-0.02,0.006-0.033,0.004
- c-0.011-0.001-0.02-0.008-0.032-0.006c-0.006,0.001-0.011,0.005-0.016,0.007c-0.007,0.003-0.011,0.003-0.017,0.004
- c-0.005,0.001-0.006,0.007-0.011,0.005c-0.003-0.001-0.008-0.009-0.01-0.012c0.003-0.005,0.008-0.015,0.009-0.021
- c0.002-0.011-0.001-0.015-0.005-0.025c-0.005-0.01-0.002-0.017-0.004-0.028c-0.003-0.014-0.012-0.024-0.016-0.037
- c-0.005-0.022,0.003-0.04,0.006-0.06c0.001-0.007,0.005-0.003,0.003-0.012c-0.001-0.007-0.006-0.007-0.01-0.012
- c-0.009-0.011-0.014-0.022-0.018-0.036c0-0.002-0.003-0.009-0.004-0.012c-0.001-0.006-0.001-0.007-0.003-0.012
- c-0.006-0.011-0.012-0.014-0.003-0.026c0.008-0.01,0.018-0.012,0.027-0.018c0.013-0.008,0.024-0.021,0.036-0.031
- c0.015-0.015,0.034-0.027,0.048-0.043c0.02-0.024,0.042-0.05,0.068-0.066c0.018-0.011,0.034-0.02,0.051-0.031
- c0.019-0.014,0.025-0.041,0.044-0.055c0.009-0.006,0.024-0.004,0.032-0.01c0.006-0.005,0.01-0.013,0.015-0.019
- c0.018-0.022,0.038-0.043,0.057-0.063c0.007-0.008,0.014-0.016,0.02-0.024c0.009-0.012,0.021-0.021,0.029-0.032
- c0.012-0.016,0.02-0.036,0.025-0.056c0.002-0.013,0.002-0.023,0.006-0.037c0.004-0.009,0.004-0.012,0.012-0.02
- c0.006-0.005,0.011-0.011,0.016-0.017c0.016-0.017,0.037-0.028,0.052-0.044c0.01-0.01,0.02-0.018,0.03-0.028
- c0.023-0.024,0.05-0.041,0.074-0.062c0.01-0.008,0.019-0.015,0.029-0.023c0.004-0.003,0.006-0.008,0.01-0.011
- c0.007-0.005,0.015-0.007,0.022-0.012c0.024-0.018,0.048-0.035,0.071-0.053c0.019-0.015,0.037-0.027,0.06-0.036
- c0.011-0.004,0.02-0.002,0.031-0.005c0.014-0.004,0.014-0.015,0.023,0.002c0.01,0.018,0.024,0.036,0.045,0.042
- c0.01,0.003,0.02,0.002,0.031,0.006c0.014,0.006,0.024,0.006,0.038,0.006s0.025-0.005,0.039-0.006c0.005,0,0.011,0.001,0.016,0.001
- c0.008-0.002,0.011-0.01,0.021-0.005c-0.003,0.009-0.015,0.01-0.022,0.016c-0.008,0.009-0.014,0.021-0.022,0.031
- c-0.01,0.011-0.016,0.022-0.028,0.032c-0.013,0.011-0.027,0.013-0.026,0.034c0.001,0.01,0.004,0.021,0.013,0.026
- c0.004,0.003,0.024,0.007,0.029,0.007c-0.007,0.004-0.012,0.012-0.008,0.021c0.006,0.01,0.023,0.006,0.033,0.006
- c0.02,0,0.036-0.007,0.053-0.015c0.008-0.004,0.01-0.002,0.018-0.008c0.009-0.007,0.015-0.01,0.025-0.013
- c0.018-0.006,0.036-0.014,0.054-0.017c0.016-0.003,0.034-0.001,0.05-0.001c0.014,0,0.031-0.004,0.044-0.001
- c0.01,0.003,0.021,0.005,0.029,0.006c0.009-0.007,0.013-0.004,0.021,0.001c0.012,0.008,0.006,0.015,0.015,0.022
- c0.016,0.014,0.034,0.001,0.045-0.011c0.008-0.008,0.016-0.017,0.026-0.023c0.016-0.01,0.036-0.003,0.054-0.009
- c0.02-0.007,0.026-0.027,0.049-0.029c0.011-0.001,0.017,0.004,0.027,0.006c0.028,0.006,0.059-0.005,0.087-0.01
- c0.024-0.004,0.049-0.008,0.072-0.019c0.018-0.009,0.034-0.016,0.054-0.022c0.022-0.007,0.025-0.001,0.041,0.012
- c-0.007,0.011-0.02,0.004-0.03,0.006c-0.015,0.002-0.03,0.01-0.043,0.018c-0.011,0.007-0.021,0.009-0.034,0.013
- c-0.014,0.005-0.027,0.012-0.041,0.018c0.011,0,0.024,0.002,0.035,0c0.018-0.003,0.038-0.01,0.056-0.015
- c0.01-0.003,0.02-0.005,0.031-0.008c0.004-0.001,0.006-0.004,0.012-0.004c0.008-0.002,0.014-0.002,0.022-0.005
- c0.012-0.003,0.025,0.001,0.038-0.002c0.013-0.003,0.024-0.004,0.038-0.004c0.011,0,0.022,0.001,0.033-0.001
- c0.013-0.003,0.025-0.005,0.038-0.005c0.007,0,0.022,0.004,0.025-0.005c-0.003-0.011-0.016-0.013-0.025-0.011
- c-0.006,0.001-0.011,0.006-0.017,0.006c-0.004,0-0.007-0.005-0.01-0.006c-0.008-0.003-0.021-0.002-0.016-0.015
- c0.002-0.006,0.018-0.013,0.023-0.016c0.007-0.003,0.023-0.013,0.031-0.013c0.005,0,0.005,0.005,0.01,0.006s0.012,0,0.017,0
- c0.015,0,0.033-0.002,0.047-0.007c0.007-0.002,0.012-0.006,0.017-0.008c0.009-0.004,0.019,0,0.028-0.002
- c-0.001-0.007-0.012-0.014-0.017-0.019c0.023,0.018,0.06-0.013,0.072-0.029c0.009-0.014,0.017-0.019,0.032-0.026
- c0.014-0.007,0.026-0.009,0.04-0.017c0.003-0.002,0.011-0.006,0.014-0.007c0.004,0.001,0.008,0.001,0.012,0.001
- c0.003,0,0.005-0.002,0.006-0.005c0.007-0.001,0.014,0.001,0.021,0c0.012-0.003,0.008-0.008,0.011-0.017
- c0.005-0.027,0.031-0.045,0.047-0.065c0.019-0.024,0.044-0.046,0.074-0.054c0.006-0.001,0.013-0.001,0.02-0.001
- c0.008,0,0.012-0.003,0.018-0.004c0.006-0.002,0.013-0.001,0.019-0.002c0.006-0.002,0.011-0.009,0.017-0.01
- c0.007-0.002,0.014,0.001,0.021-0.001c0.004-0.002,0.014-0.009,0.017-0.011c0.006-0.006,0.012-0.027,0.022-0.027
- c0.006,0,0.008,0.007,0.012,0.01c0.004,0.003,0.011,0.005,0.016,0.007c0.011,0.006,0.024,0.01,0.037,0.012
- c0,0.008,0.006,0.013,0.006,0.02c0.002,0.011,0.001,0.018,0.006,0.028c0,0.003,0.001,0.005,0.004,0.007
- c0.001,0.004-0.001,0.01,0.002,0.014c0.003,0.004,0.017,0.011,0.022,0.016c0.006,0.005,0.014,0.006,0.019,0.013
- c0.001,0.003,0.002,0.006,0.003,0.009c0.002,0.003,0.006,0.004,0.008,0.007c0.005,0.006,0.004,0.015,0.007,0.021
- c0.005,0.013,0.011,0.011,0.025,0.011c-0.001,0.013,0.039,0.002,0.046,0c0.009-0.004,0.018-0.004,0.027-0.011
- c0.012-0.008,0.019-0.022,0.033-0.029c0.02-0.01,0.044-0.002,0.065,0.002s0.03-0.022,0.053-0.015
- c0.007,0.002,0.015,0.007,0.018,0.014c0.002,0.007-0.001,0.016,0.001,0.023c0.002,0.006,0.004,0.009,0.004,0.016
- c0,0.023-0.016,0.038-0.005,0.06c0.005,0.012,0.005,0.014-0.002,0.027c-0.006,0.011-0.009,0.014-0.009,0.027
- s0.003,0.021,0.005,0.033c0.002,0.006,0.002,0.023-0.003,0.028c0.013,0.001,0.026-0.023,0.029-0.034
- c0.005-0.016,0.013-0.037,0.012-0.054c0-0.017,0.007-0.03,0.018-0.042c0.004-0.005,0.01-0.009,0.014-0.014
- c0-0.003,0.001-0.005,0.002-0.008c0.002-0.002,0.012-0.004,0.015-0.005c0.007-0.003,0.01-0.006,0.015-0.009
- c0.008-0.004,0.014-0.003,0.023-0.003c0.012-0.001,0.02-0.001,0.028,0.01c0.003,0.005,0.01,0.016,0.011,0.022
- c0.002,0.009-0.005,0.018-0.006,0.027c-0.001,0.009,0,0.018,0,0.028c0,0.021-0.005,0.047-0.015,0.066
- c-0.008,0.015-0.015,0.026-0.019,0.042c-0.002,0.011-0.006,0.016-0.003,0.027c0.003,0.01,0.003,0.018,0.004,0.028
- c0.001,0.007,0.004,0.009,0.006,0.016c0.002,0.008,0,0.019,0,0.027c0.001,0.022,0.011,0.034,0.027,0.048
- c0.013,0.011,0.026,0.022,0.038,0.033c0.007,0.005,0.011,0.01,0.016,0.017c0.006,0.008,0.008,0.014,0.012,0.022
- c0.008,0.012,0.025,0.021,0.031,0.034c0.005,0.01-0.003,0.012-0.005,0.02c-0.002,0.008-0.001,0.013-0.004,0.021
- c0.006,0.004,0.017,0.021,0.016,0.029c-0.001,0.006-0.007,0.006-0.012,0.01c-0.004,0.004-0.007,0.011-0.01,0.017
- c-0.012,0.019-0.024,0.043-0.045,0.053c-0.005,0.002-0.011,0.001-0.016,0.005c-0.005,0.004-0.002,0.006-0.006,0.011
- c-0.007,0.01-0.01,0.015-0.01,0.028c0.001,0.012,0.007,0.018,0.011,0.027c0.006,0.012,0.005,0.024,0.01,0.035
- c0.008,0.017,0.024,0.032,0.019,0.053c-0.002,0.01-0.013,0.02-0.006,0.031c0.007,0.01,0.022,0.008,0.032,0.006
- c0.012-0.003,0.022-0.01,0.032-0.017c0.011-0.008,0.021-0.01,0.033-0.015c0.025-0.009,0.051-0.011,0.076-0.017
- c0.025-0.006,0.047-0.015,0.071-0.022c0.026-0.008,0.044-0.026,0.064-0.044c0.006-0.005,0.019-0.011,0.022-0.016
- c0.004-0.005,0.002-0.025,0-0.03c-0.003-0.01-0.014-0.017-0.016-0.029c-0.001-0.013,0.012-0.018,0.022-0.023
- c0.013-0.006,0.018-0.002,0.029,0c0.009,0.002,0.022,0.003,0.032,0.002c0.009-0.001,0.014-0.006,0.023-0.01
- c0.011-0.006,0.018-0.012,0.02,0.004c0.002,0.015-0.002,0.021-0.01,0.033c-0.006,0.009-0.006,0.018-0.013,0.026
- c-0.016,0.018-0.025,0.025-0.015,0.05c0.003,0.009,0.003,0.03,0.01,0.033c0.014,0.006,0.035-0.004,0.045-0.012
- c0.017-0.015,0.024-0.052,0.048-0.059c0.005-0.002,0.011,0.001,0.017,0c0.008-0.001,0.011-0.006,0.017-0.01
- c0.005-0.002,0.011-0.004,0.015-0.006c0.005-0.003,0.008-0.007,0.012-0.01c0.006-0.004,0.014-0.003,0.02-0.008
- c0.004-0.003,0.007-0.007,0.01-0.011c0.008-0.008,0.019-0.013,0.027-0.02c-0.006,0.01-0.004,0.021-0.01,0.032
- C-20.058,57.907-20.066,57.918-20.079,57.926z M-20.496,56.942c-0.016,0.005-0.024,0.014-0.022,0.033l-0.011-0.017
- c-0.018,0.024-0.04-0.035-0.048-0.043c-0.006-0.005-0.01-0.004-0.012-0.011c-0.002-0.007,0.001-0.013,0.004-0.018
- c0.008-0.011,0.022-0.015,0.034-0.019c0.03-0.009,0.049-0.033,0.077-0.045c0.011-0.005,0.025-0.008,0.037-0.011
- c0.006,0.001,0.01,0.001,0.015-0.001c0.007-0.003,0.014-0.006,0.021-0.009c0.01-0.002,0.019-0.004,0.029-0.008
- c0.012-0.004,0.023-0.004,0.034,0.007c0.014,0.014,0.011,0.028,0.005,0.044c-0.01,0.026-0.034,0.038-0.056,0.053
- c-0.008,0.005-0.016,0.013-0.025,0.018c-0.013,0.006-0.03,0.01-0.044,0.015C-20.471,56.934-20.484,56.938-20.496,56.942z
- M-20.562,57.008c0.01,0.008,0.021,0.015,0.033,0.021c0.015,0.007,0.025,0.007,0.034,0.022c0.015,0.022,0.011,0.039,0,0.061
- c-0.003,0.006-0.004,0.013-0.008,0.019c-0.005,0.009-0.014,0.015-0.02,0.023c-0.008,0.014-0.006,0.029-0.018,0.042
- c-0.016,0.018-0.038,0.034-0.064,0.028c-0.019-0.005-0.028-0.016-0.042-0.028c-0.007-0.005-0.016-0.01-0.022-0.016
- c-0.002-0.002-0.004-0.004-0.005-0.006c-0.005-0.002-0.009-0.001-0.013-0.003c-0.008-0.004-0.035-0.013-0.038-0.024v0.013
- c-0.005-0.017-0.059-0.055-0.053-0.07c0.002-0.002,0.004-0.003,0.006-0.005c0.002-0.004,0.003-0.008,0.005-0.011
- c0.005-0.008,0.008-0.014,0.011-0.023c0.003-0.009,0.006-0.017,0.004-0.027c-0.002-0.012-0.008-0.019-0.004-0.032
- c0.007-0.023,0.026-0.02,0.045-0.024c0.011-0.002,0.018-0.005,0.03-0.004c0.012,0,0.021-0.007,0.033-0.006
- c0.015,0.001,0.025,0.015,0.037,0.023c0.009,0.006,0.018,0.007,0.027,0.011C-20.577,56.996-20.569,57.003-20.562,57.008z
- M-20.741,57.17c0.003,0.011,0.002,0.033-0.001,0.043c-0.021,0.002-0.04,0.018-0.063,0.011l-0.001-0.005l-0.006-0.005
- c0.001,0.004,0.001,0.007-0.001,0.01c-0.007-0.001-0.018-0.015-0.026-0.019c-0.008-0.005-0.013-0.007-0.022-0.007
- c-0.003,0-0.007,0-0.011,0c-0.005,0-0.008,0.003-0.012,0.004c-0.007,0.001-0.013,0.001-0.02,0.001c-0.012,0-0.012-0.001-0.021-0.007
- c-0.011-0.007-0.022-0.014-0.033-0.021c0-0.023,0.06-0.031,0.075-0.032c0.005,0,0.012-0.001,0.017,0
- c0.007,0.002,0.008,0.007,0.016,0.006c0.004,0,0.007-0.004,0.011-0.006c0.005-0.002,0.011-0.003,0.016-0.005
- c0.013-0.006,0.024-0.012,0.037-0.01c0.01,0.002,0.019,0.009,0.028,0.015C-20.748,57.15-20.743,57.159-20.741,57.17z
- M-24.165,56.011c-0.325-0.11-1.03,0.279-0.976-0.33c0.055-0.609,0.057-0.298,0.086-0.447c0.107-0.033,0.215-0.065,0.322-0.098
- c-0.002-0.002-0.005-0.003-0.007-0.007c-0.002-0.006,0-0.011-0.001-0.018c-0.001-0.007-0.003-0.013-0.003-0.021
- c0-0.011,0.004-0.022,0.005-0.033c0.001-0.006-0.001-0.009-0.003-0.013c-0.001-0.006,0.001-0.013,0.002-0.018
- c0.002-0.005,0.003-0.011,0.004-0.016c0-0.005-0.001-0.01,0-0.015c0-0.006,0.005-0.01,0.007-0.015
- c0.002-0.007,0.002-0.012,0.003-0.019c0.001-0.009,0.008-0.014,0.012-0.023c0.003-0.004,0.004-0.012,0.008-0.015
- c0.003-0.003,0.005-0.002,0.008-0.003c0.004-0.002,0.007-0.007,0.01-0.01c0.003-0.003,0.004-0.008,0.007-0.011
- c0.004-0.003,0.008-0.004,0.012-0.006c0.01-0.006,0.015-0.019,0.025-0.023c0.013-0.006,0.025-0.015,0.036-0.024
- c0.006-0.005,0.011-0.009,0.018-0.013c0.005-0.002,0.006-0.002,0.01-0.002c0.006-0.001,0.01-0.005,0.015-0.008
- c0.003-0.001,0.007-0.003,0.01-0.005c0.003-0.001,0.006-0.004,0.009-0.005s0.005,0,0.008,0c0.004-0.001,0.007-0.002,0.01-0.003
- c0.005-0.001,0.007,0,0.012-0.002c0.002-0.002,0.005-0.005,0.008-0.006c0.002-0.002,0.003-0.004,0.005-0.005
- c0.005-0.003,0.006-0.002,0.011-0.002c0.005-0.001,0.013-0.005,0.018-0.008c0.007-0.004,0.014-0.009,0.02-0.013
- c0.005-0.003,0.01-0.006,0.016-0.008c0.005-0.002,0.012-0.002,0.018-0.005c0.005-0.004,0.012-0.007,0.018-0.011
- c0.005-0.003,0.008-0.006,0.015-0.007c0.012-0.001,0.028-0.002,0.039,0.003c0.006,0.004,0.009,0.006,0.012,0.013
- c0.002,0.004,0.004,0.006,0.006,0.01c0.002,0.003,0.001,0.005,0.002,0.008c0.001,0.002,0.002,0.002,0.003,0.005
- c0.001,0.005-0.001,0.012-0.001,0.018c0.001,0.005-0.002,0.008-0.002,0.013c0,0.006,0.005,0.008,0.01,0.009
- c0.007,0.002,0.011,0.005,0.014,0.011c0.001,0.003,0.001,0.005,0.002,0.008c0,0.003,0.004,0.007,0.004,0.01
- c0.001,0.004-0.002,0.008-0.002,0.013c0,0.005,0,0.008,0.003,0.013c0.005,0.01,0.013,0.018,0.022,0.026
- c0.003,0.002,0.002,0.004,0.006,0.005c0.004,0,0.006-0.001,0.008-0.003c0.007-0.006,0.011-0.018,0.012-0.026
- c0.001-0.006-0.004-0.014-0.007-0.019c-0.004-0.008-0.009-0.016-0.014-0.024c-0.005-0.008-0.013-0.016-0.014-0.026
- c-0.001-0.01,0.008-0.019,0.01-0.028c0.001-0.007-0.001-0.012,0.008-0.013c0.005-0.001,0.01,0.001,0.015-0.001
- c0.005-0.001,0.009-0.004,0.013-0.006c0.004-0.003,0.007-0.007,0.011-0.011c0.003,0.003,0.008,0.004,0.012,0.005
- c0.005,0.002,0.01,0.005,0.016,0.006c0.008,0.002,0.015,0,0.023-0.003c0.007-0.002,0.01-0.005,0.018-0.005
- c0.017,0,0.033,0,0.049-0.008c0.013-0.007,0.026-0.008,0.04-0.008c0.007,0,0.012-0.003,0.018-0.005
- c0.006-0.001,0.01-0.001,0.016-0.003c0.005-0.002,0.009-0.005,0.015-0.005c0.007,0,0.014,0,0.021,0c0.005,0,0.012,0.002,0.018,0
- c0.004-0.001,0.009-0.004,0.013-0.004c0.008-0.002,0.024,0,0.03,0.007c0.001,0.002,0,0.005,0,0.008c0,0.002,0.002,0.003,0.002,0.005
- c0.001,0.005,0.001,0.01,0.001,0.015s0.001,0.01-0.001,0.015c0,0.003-0.002,0.006-0.002,0.008c-0.002,0.004-0.001,0.007-0.002,0.011
- c-0.001,0.004-0.006,0.006-0.006,0.012c0,0.006,0.004,0.011,0.008,0.014c0.01,0.007,0.021,0.008,0.031,0.012
- c0.009,0.003,0.021,0.004,0.031,0.003c0.021-0.002,0.017-0.023,0.03-0.032c0.008-0.006,0.019-0.007,0.027-0.012
- c0.004-0.003,0.009-0.007,0.012-0.011c0.004-0.006,0.005-0.01,0.012-0.009c0.001,0.001,0.002,0.002,0.004,0.002
- c0.003,0,0.003-0.001,0.005-0.002c0.005-0.002,0.009-0.005,0.013-0.008c0.004-0.004,0.005-0.009,0.01-0.013
- c0.005-0.004,0.007-0.002,0.013-0.003c0.011-0.002,0.019-0.01,0.031-0.01c0.003,0,0.01,0.001,0.007-0.005
- c-0.001-0.001-0.006-0.004-0.007-0.005c-0.003-0.003-0.005-0.005-0.008-0.006c0.001-0.006,0.008-0.004,0.012-0.004
- c0.008-0.002,0.014-0.003,0.021-0.003c0.012,0,0.027,0.002,0.039,0c0.011-0.002,0.02-0.014,0.025-0.023
- c0.003-0.005,0.004-0.009,0.009-0.013s0.011-0.005,0.017-0.005c0.01,0,0.018,0.004,0.028,0.005c0.005,0,0.009,0.002,0.014,0.004
- c0.006,0.004,0.01,0.003,0.017,0.003c0.005,0.001,0.003,0,0.005,0.003c0.001,0.001,0.003,0.006,0.004,0.008
- c0.003,0.006,0.006,0.012,0.007,0.018c0.002,0.008,0.001,0.016,0.002,0.024c0.001,0.007,0.003,0.012,0.003,0.02
- c0,0.004-0.001,0.01,0,0.014c0,0.001,0.001,0.001,0.001,0.002c0.099-0.03-0.143,0.256,0.297-0.09s0.336,0.817-0.066,1.025
- C-23.693,55.914-23.874,55.909-24.165,56.011z M-24.181,56.017c0.005-0.002,0.011-0.004,0.016-0.006
- c0.017,0.006,0.034,0.012,0.051,0.018L-24.181,56.017z M-24.607,55.943l0.426,0.074c-0.05,0.017-0.099,0.035-0.148,0.052
- C-24.422,56.027-24.515,55.985-24.607,55.943z M-33.449,52.473c0.015,0.018,0.025,0.032,0.022,0.057
- c-0.003,0.021-0.001,0.046-0.026,0.05c-0.001-0.002-0.003-0.003-0.006-0.003h-0.005c-0.002-0.02-0.023-0.04-0.026-0.063
- c-0.002-0.014,0.012-0.061,0.033-0.037C-33.455,52.475-33.452,52.475-33.449,52.473z M-27.922,53.12L-27.922,53.12L-27.922,53.12
- L-27.922,53.12z M-25.706,56.522c-0.279,0.349-0.558,0.698-0.837,1.047c-0.001,0.012,0.003,0.025-0.001,0.036
- c-0.004,0.013-0.015,0.02-0.02,0.032c-0.01,0.022-0.003,0.045-0.005,0.068c-0.003,0.021-0.017,0.037-0.022,0.058
- c-0.007,0.022-0.001,0.045-0.004,0.068c-0.002,0.011-0.009,0.02-0.011,0.031c-0.002,0.012,0.001,0.025,0,0.037
- c-0.002,0.019-0.012,0.037-0.015,0.058c-0.002,0.022,0.005,0.042,0.01,0.063c0.006,0.027,0.006,0.093,0.041,0.1
- c0.004,0.025,0.002,0.056-0.031,0.057c-0.012,0.001-0.021-0.008-0.035-0.004c-0.014,0.003-0.024,0.019-0.038,0.02
- c-0.024,0.002-0.036-0.029-0.058-0.027c-0.003,0-0.002,0.003-0.003,0.003c-0.019,0.067-0.038,0.134-0.057,0.201
- c0.006,0.01,0.013,0.019,0.014,0.026c0.004,0.015-0.002,0.032-0.017,0.044c-0.005,0.005-0.012-0.001-0.017,0.002
- c-0.092,0.323-0.183,0.646-0.274,0.969c0.091,0.148,0.182,0.296,0.274,0.444c-0.291-0.117-0.581-0.234-0.872-0.352
- c0.122,0.03,0.231,0.045,0.318,0.038l-1.097-0.379c0,0.006-0.007,0.011-0.004,0.022c0,0.001,0.001,0.003,0.002,0.004
- c0.26,0.105,0.521,0.21,0.781,0.315c-0.216-0.052-0.483-0.162-0.78-0.312c0.002,0.006,0.004,0.014,0.007,0.019
- c0.008,0.01,0.009,0.005,0.02,0.011c0.018,0.01,0.024,0.026,0.038,0.04c0.028,0.03,0.071,0.05,0.105,0.068
- c0.035,0.019,0.074,0.04,0.111,0.053c0.02,0.006,0.043,0.012,0.062,0.016c0.016,0.004,0.037,0.006,0.052,0.012
- c0.021,0.009,0.039,0.025,0.059,0.034c0.018,0.009,0.029,0.022,0.046,0.032c0.018,0.01,0.04,0.019,0.059,0.026
- c0.026,0.011,0.024,0.011,0.039,0.037c0.014,0.024,0.041,0.018,0.065,0.027c0.024,0.01,0.041,0.034,0.058,0.053
- c0.022,0.026,0.06,0.041,0.094,0.052c0.018,0.006,0.036,0.008,0.053,0.015c0.019,0.007,0.037,0.02,0.052,0.033
- c0.016,0.015,0.027,0.03,0.047,0.041c0.019,0.011,0.033,0.017,0.048,0.032c0.011,0.01,0.026,0.027,0.039,0.033
- c0.016,0.006,0.037,0.009,0.054,0.014c0.022,0.006,0.045,0.001,0.067,0.006c0.008,0.002,0.019,0.007,0.028,0.009
- c0.011,0.003,0.02,0.004,0.031,0.006c0.022,0.003,0.041,0.007,0.063,0.01c0.014,0.002,0.04,0.013,0.036,0.031
- c-0.022-0.001-0.039,0.007-0.062,0.002c-0.019-0.004-0.036-0.005-0.057-0.008c-0.016-0.001-0.037-0.005-0.053-0.009
- c-0.021-0.004-0.043-0.002-0.063-0.006c-0.019-0.005-0.034-0.016-0.053-0.02c-0.025-0.006-0.051-0.002-0.076-0.012
- c-0.017-0.007-0.033-0.021-0.049-0.025c-0.018-0.004-0.04,0.002-0.058,0c-0.042-0.003-0.08-0.034-0.121-0.047
- c-0.019-0.006-0.035-0.012-0.053-0.012c-0.02,0.001-0.037,0.004-0.053-0.008c-0.006-0.004-0.01-0.011-0.015-0.016
- c-0.019-0.019-0.029-0.02-0.055-0.023c-0.019-0.002-0.045,0-0.064-0.005c-0.016-0.005-0.034-0.015-0.05-0.021
- c-0.011-0.003-0.024-0.013-0.034-0.015c-0.008-0.002-0.019,0.004-0.026-0.001c-0.026-0.015-0.012-0.051-0.048-0.057
- c-0.031-0.004-0.031-0.006-0.051-0.031c-0.025-0.03-0.056-0.057-0.091-0.074c-0.024-0.012-0.049-0.022-0.073-0.035
- c-0.009-0.004-0.016-0.013-0.026-0.016c-0.011-0.002-0.022,0.002-0.032-0.002c-0.013-0.004-0.022-0.012-0.035-0.016
- c-0.008-0.001-0.017-0.004-0.024-0.007c-0.01-0.005-0.014-0.01-0.025-0.012c-0.011-0.003-0.019-0.003-0.031-0.007
- c-0.046-0.017-0.088-0.037-0.136-0.047c-0.032-0.006-0.06-0.024-0.09-0.034c-0.019-0.007-0.03-0.006-0.047-0.018
- c-0.019-0.014-0.036-0.026-0.052-0.041c-0.017-0.017-0.039-0.023-0.058-0.037s-0.029-0.038-0.046-0.056
- c-0.019-0.021-0.044-0.041-0.069-0.054c-0.029-0.016-0.058-0.041-0.089-0.051c-0.031-0.01-0.052-0.018-0.079-0.033
- c-0.031-0.017-0.065-0.026-0.096-0.043c-0.013-0.008-0.027-0.013-0.04-0.021c-0.013-0.008-0.018-0.016-0.028-0.025
- c-0.019-0.018-0.041-0.033-0.06-0.052c-0.019-0.019-0.043-0.015-0.065-0.031c-0.013-0.009-0.016-0.029-0.027-0.037
- c-0.005-0.004-0.023-0.004-0.03-0.006c-0.02-0.006-0.035-0.01-0.041-0.031c-0.006-0.021-0.007-0.043-0.011-0.063
- c-0.004-0.019,0-0.032,0.005-0.053c0.006-0.029,0.005-0.038-0.01-0.062c-0.012-0.021-0.01-0.029-0.038-0.032
- c-0.028-0.003-0.03,0.016-0.053,0.025c-0.018,0.008-0.051,0.003-0.057-0.014c-0.004-0.012,0.005-0.023-0.003-0.033
- c-0.006-0.008-0.019-0.011-0.027-0.016c-0.013-0.009-0.021-0.035-0.037-0.036c-0.002-0.013-0.002-0.021-0.005-0.03
- c-0.021-0.006-0.049-0.03-0.066-0.043c-0.044-0.033-0.081-0.077-0.119-0.115c-0.017-0.017-0.032-0.033-0.048-0.052
- c-0.012-0.015-0.028-0.02-0.042-0.032c-0.034-0.028-0.047-0.063-0.068-0.1c-0.012-0.021-0.04-0.029-0.05-0.051
- c-0.001-0.002,0-0.004-0.001-0.007c-0.446-0.335-0.894-0.711-1.316-1.103c0.004,0.013,0.005,0.026,0.012,0.039
- c0.005,0.008,0.01,0.012,0.014,0.021c0.007,0.017,0.009,0.036,0.016,0.053c0.018,0.046,0.042,0.088,0.053,0.136
- c0.007,0.026,0.015,0.047,0.029,0.069c0.009,0.012,0.033,0.059,0.028,0.067l-0.011-0.005c-0.024-0.008-0.045-0.037-0.067-0.052
- c-0.018-0.011-0.025-0.06-0.037-0.085c-0.013-0.027-0.034-0.048-0.05-0.074c-0.014-0.021-0.023-0.052-0.055-0.052
- c0.003-0.024-0.014-0.031-0.027-0.047c-0.012-0.016-0.023-0.031-0.036-0.046c-0.027-0.029-0.05-0.068-0.065-0.104
- c-0.004-0.01,0-0.02-0.003-0.032c-0.003-0.01-0.011-0.017-0.016-0.027c-0.007-0.014-0.009-0.032-0.017-0.047
- c-0.006-0.011-0.021-0.019-0.026-0.031c-0.004-0.013-0.001-0.019-0.008-0.032c-0.002-0.003-0.004-0.006-0.006-0.008
- c-1.279-1.251-2.211-2.634-1.778-3.512c0.001-0.001,0.002-0.001,0.004-0.002c-0.003-0.011-0.007-0.023-0.011-0.037
- c-0.017-0.067,0.002-0.076,0.068-0.074c0.017,0.021,0.042,0.044,0.046,0.072c0.086-0.033,0.173-0.067,0.259-0.1
- c-0.061-0.188-0.123-0.376-0.184-0.564c-0.002-0.002-0.005-0.002-0.009-0.006c0.002,0.002-0.034-0.046-0.033-0.041
- c-0.001-0.001-0.002-0.002-0.003-0.002c0.006-0.01,0.011-0.023,0.018-0.035c-0.015-0.046-0.03-0.092-0.045-0.138
- c-0.008-0.005-0.018-0.008-0.042-0.015c-0.043-0.01-0.053-0.017-0.072-0.058c-0.048-0.106-0.079-0.23-0.112-0.343
- c0.001,0.002,0.002,0.003,0.005,0.002c0.008-0.042-0.03-0.102-0.042-0.14c-0.015-0.053-0.027-0.105-0.042-0.158
- c-0.019-0.062-0.091-0.233-0.022-0.289c-0.041-0.125-0.082-0.25-0.123-0.375c0.346-0.283,0.692-0.566,1.038-0.85
- c-0.001-0.001-0.002-0.002-0.003-0.003c-0.003-0.005-0.003-0.008-0.004-0.013c-0.001-0.003-0.003-0.004-0.003-0.008
- c0-0.003,0-0.006,0-0.008c0-0.003-0.002-0.006-0.003-0.008c-0.001-0.006,0.003-0.011,0.003-0.016c0-0.007-0.001-0.008-0.003-0.013
- c-0.003-0.009-0.009-0.015-0.013-0.023c-0.004-0.008-0.004-0.019-0.008-0.029c-0.003-0.006-0.006-0.011-0.011-0.016
- c-0.005-0.006-0.007-0.014-0.011-0.019c0.003-0.004,0.01-0.003,0.011-0.008c0-0.007-0.017-0.004-0.021-0.004
- c-0.018,0-0.034,0.005-0.052,0.004c-0.014-0.001-0.026-0.008-0.039-0.011c-0.016-0.004-0.03,0.009-0.045,0.011
- c-0.006,0.001-0.013-0.002-0.02,0.001c-0.008,0.003-0.009,0.008-0.019,0.007c-0.014-0.001-0.023-0.008-0.036,0
- c-0.006,0.003-0.011,0.008-0.017,0.012c-0.01,0.006-0.021,0.008-0.031,0.013c-0.017,0.007-0.035,0.009-0.052,0.014
- c-0.034,0.008-0.062,0.022-0.093,0.037c-0.014,0.007-0.032,0.009-0.048,0.014c-0.016,0.006-0.031,0.016-0.047,0.023
- c-0.012,0.005-0.026,0.012-0.039,0.015c-0.004,0-0.008,0-0.012-0.001c-0.005,0.001-0.007,0.002-0.012,0.003
- c-0.007,0.002-0.014,0.005-0.02,0.006c-0.013,0.002-0.029-0.005-0.04,0.002c-0.006,0.004-0.008,0.01-0.016,0.013
- c-0.007,0.001-0.017,0.002-0.023,0c0-0.007-0.005-0.008-0.008-0.012c-0.004-0.004-0.004-0.006-0.005-0.011
- c-0.002-0.009-0.005-0.017-0.004-0.026c-0.001-0.007-0.002-0.015,0-0.022c0.002-0.016,0.015-0.028,0.023-0.041
- c0.007-0.012,0.006-0.026,0.014-0.038c0.005-0.009,0.006-0.017,0.01-0.026c0.003-0.005,0.01-0.01,0.012-0.015
- c0.002-0.004,0-0.008,0.002-0.011c0.006-0.012,0.019-0.021,0.027-0.033c0.004-0.007,0.005-0.016,0.008-0.024
- c0.002-0.006,0.004-0.013,0.004-0.02v-0.02c0-0.003,0.001-0.009,0-0.012c-0.001-0.003-0.004-0.004-0.005-0.008
- c-0.003-0.014,0.007-0.032-0.004-0.044c-0.006-0.005-0.012-0.005-0.018-0.008c-0.008-0.004-0.014-0.01-0.021-0.015
- c-0.014-0.007-0.023-0.005-0.036,0.003c-0.006,0.003-0.01,0.007-0.012-0.003c-0.002-0.007,0-0.017,0-0.024
- c0-0.009-0.005-0.013-0.004-0.021c0-0.005,0.006-0.01,0.009-0.014c0.006-0.01,0.012-0.02,0.023-0.026
- c0.011-0.007,0.019-0.015,0.025-0.027c0.003-0.007,0.006-0.014,0.01-0.02c0.001-0.003,0.003-0.006,0.005-0.01
- c0.001-0.002,0.001-0.005,0.002-0.008c0.001-0.006,0.004-0.01,0.006-0.016c0.001-0.003,0.002-0.004,0.003-0.007
- c0.001-0.006,0-0.013,0.008-0.014l0,0c0.005-0.008,0.011-0.015,0.016-0.023c0.001-0.002,0.002-0.004,0.004-0.006
- c0.003-0.006,0.006-0.009,0.01-0.013c0.005-0.006,0.009-0.012,0.013-0.018c0.004-0.007,0.005-0.016,0.009-0.023
- c0.004-0.008,0.012-0.014,0.015-0.024c0.006-0.02-0.003-0.035-0.023-0.023c-0.016,0.009-0.031,0.021-0.048,0.03
- c-0.025,0.012-0.013-0.02-0.004-0.03c0.013-0.015,0.03-0.023,0.042-0.039c0.012-0.014,0.015-0.035,0.029-0.047
- c0.012-0.01,0.033-0.022,0.047-0.024c0.021-0.004,0.035-0.013,0.053-0.023c0.01-0.006,0.027-0.012,0.038-0.015
- c0.006-0.001,0.01,0,0.015-0.001c0.005,0,0.007-0.003,0.01-0.003c0.011-0.002,0.014-0.002,0.023-0.007
- c0.01-0.006,0.019-0.012,0.029-0.017c0.018-0.012,0.04-0.021,0.052-0.04c0.005-0.006,0.007-0.016,0.014-0.02
- c0.007-0.005,0.016-0.006,0.023-0.009c0.018-0.009,0.024-0.022,0.035-0.037c0.003-0.005,0.01-0.016,0.015-0.019
- c0.013-0.005,0.015,0.009,0.013,0.018c-0.003,0.009-0.013,0.02-0.018,0.029c-0.006,0.01-0.01,0.019-0.015,0.029
- c-0.006,0.015-0.011,0.028-0.02,0.043c-0.006,0.009-0.01,0.019-0.017,0.029c-0.005,0.007-0.01,0.011-0.014,0.019
- c-0.003,0.006-0.011,0.017-0.011,0.024c-0.001,0.01,0.007,0.012,0.004,0.022c-0.002,0.008-0.01,0.017-0.018,0.02
- c-0.005,0.001-0.009,0-0.015,0.001c-0.004,0-0.007,0.003-0.01,0.003c-0.008,0.002-0.017-0.001-0.022,0.007
- c-0.003,0.005,0.001,0.018,0.005,0.022c0.003,0.003,0.008,0.003,0.012,0.007c0.003,0.003,0.005,0.004,0.006,0.008
- c0.001,0.004-0.001,0.01,0,0.015c0.001,0.006,0.001,0.005,0.003,0.01c0.004,0.008,0.009,0.014,0.013,0.022
- c0.002,0.005,0.003,0.004,0.003,0.011c0,0.006-0.003,0.006-0.004,0.01c-0.001,0.006-0.001,0.012,0,0.018
- c0.005,0.002,0.01,0.003,0.016,0.003c0.009,0.001,0.019-0.002,0.028,0c0.008,0.002,0.01,0.006,0.02,0.003
- c0.008-0.002,0.015-0.002,0.024-0.003c0.003,0,0.009-0.003,0.012-0.003c0.004,0,0.003,0.003,0.007,0.003
- c0.008,0.002,0.014,0.001,0.021,0.007c0.01,0.009,0.001,0.033-0.001,0.045c-0.005,0.018-0.001,0.035,0.007,0.052
- c0.013,0.026,0.064-0.008,0.072-0.025c0.002-0.004,0.001-0.005,0.005-0.008c0.003-0.003,0.008-0.001,0.011-0.004
- c0.007-0.005,0.011-0.015,0.009-0.023c-0.001-0.009-0.022-0.045-0.001-0.045c0.001-0.005,0.004-0.009,0.006-0.014
- c0.003-0.005,0.003-0.01,0.004-0.016c0.001-0.005,0.007-0.023,0.014-0.024c0.004,0.007,0.014-0.001,0.017-0.004
- c0.005-0.005,0.007-0.019,0.016-0.017c0.009,0.002,0.011,0.017,0.013,0.023c0.001,0.006,0.004,0.006,0.002,0.013
- c-0.001,0.006-0.002,0.011-0.004,0.016c-0.003,0.012-0.003,0.023-0.003,0.036c0,0.011,0.001,0.02-0.003,0.029
- c-0.008,0.017-0.007,0.035,0.003,0.051c0.009,0.014,0.024,0.027,0.037,0.039c0.008,0.007,0.016,0.005,0.026,0.005
- c0.016,0,0.034,0,0.048-0.009c0.015-0.01,0.028-0.021,0.044-0.028c0.019-0.008,0.049-0.011,0.066-0.03
- c0.008,0.003,0.009,0.003,0.018,0c0.009-0.003,0.016-0.005,0.023-0.01c0.006-0.003,0.011-0.01,0.017-0.011
- c0.004-0.001,0.009,0.001,0.012,0c0.005-0.001,0.007-0.003,0.012-0.004c0.008-0.001,0.016,0.001,0.023-0.001
- c0.009-0.002,0.019-0.006,0.029-0.007c0.007,0,0.015-0.001,0.02,0.004c0.008,0.007,0.001,0.014,0.004,0.024
- c0.004,0.015,0.022,0.018,0.013,0.036c-0.011,0.021-0.032,0.027-0.049,0.044c-0.014,0.013-0.026,0.028-0.039,0.041
- c-0.011,0.011-0.025,0.017-0.036,0.028c-0.008,0.007-0.02,0.016-0.025,0.026c-0.003,0.008-0.003,0.013-0.009,0.019
- c-0.006,0.007-0.013,0.009-0.019,0.017c-0.007,0.012-0.017,0.02-0.027,0.029c-0.008,0.007-0.014,0.013-0.021,0.02
- c-0.004,0.005-0.009,0.007-0.013,0.011c-0.002,0.004-0.004,0.009-0.006,0.012c-0.009,0.012-0.02,0.02-0.031,0.029
- c-0.005,0.004-0.011,0.009-0.014,0.014c-0.005,0.006-0.007,0.014-0.011,0.021c-0.005,0.007-0.002,0.012-0.004,0.02
- c-0.002,0.007-0.009,0.013-0.011,0.02c-0.005,0.015-0.001,0.036-0.001,0.052c0,0.008-0.003,0.012-0.004,0.02
- c-0.002,0.006,0.001,0.013,0,0.02c-0.001,0.006-0.003,0.009-0.004,0.015c-0.001,0.007,0,0.014,0,0.021
- c-0.001,0.012-0.006,0.027-0.009,0.039c-0.001,0.005-0.001,0.009-0.002,0.013c0.08-0.066,0.159-0.131,0.239-0.196
- c0.048,0.003,0.096,0.005,0.144,0.008c0.001-0.004,0-0.007,0.002-0.01c0.002-0.004,0.005-0.01,0.009-0.013
- c0.004-0.004,0.01-0.003,0.014-0.009c0.008-0.011,0.004-0.027,0.005-0.04c0-0.018,0.014-0.018,0.028-0.025
- c0.011-0.006,0.02-0.012,0.031-0.02c0.012-0.008,0.024-0.003,0.036-0.012c0.006-0.004,0.011-0.009,0.017-0.014
- c0.005-0.004,0.008-0.004,0.015-0.006c0.009-0.002,0.009-0.003,0.016,0.001c0.006,0.004,0.008,0.004,0.007,0.011
- c0,0.003-0.005,0.008-0.006,0.01c-0.002,0.006-0.005,0.013-0.005,0.019c0,0.012,0.003,0.027-0.003,0.037
- c-0.006,0.011-0.021,0.016-0.029,0.026c-0.007,0.008-0.01,0.018-0.019,0.026c-0.002,0.002-0.006,0.005-0.008,0.008
- c-0.002,0.003-0.002,0.011-0.005,0.014c-0.001,0.001-0.003,0.001-0.005,0.002c0.022,0.001,0.043,0.002,0.064,0.003
- c0.002-0.006,0.006-0.013,0.008-0.018c0.008-0.024,0.023-0.032,0.045-0.045c0.022-0.012,0.043-0.01,0.067-0.021
- c0.013-0.006,0.024-0.014,0.037-0.019c0.016-0.007,0.039-0.005,0.054-0.011c0.048-0.02,0.066-0.083,0.096-0.12
- c0.018-0.021,0.03-0.027,0.055-0.019c0.012,0.004,0.021,0.013,0.032,0.016c0.021,0.007,0.044,0.005,0.064,0.011
- c0.026,0.009,0.043,0.024,0.059,0.046c0.009,0.012,0.013,0.026,0.021,0.038c0.006,0.009,0.02,0.018,0.025,0.026
- c0.01,0.017,0.007,0.045,0.005,0.066c-0.005,0.043,0.01,0.019,0.035,0.044c0.015,0.014,0.004,0.026-0.002,0.038
- c0.293,0.016,0.586,0.031,0.879,0.047c0-0.008-0.001-0.017,0.001-0.024c0.004-0.014,0.016-0.024,0.019-0.037
- c-0.001,0.006,0.001,0.011,0.001,0.016c0.02-0.01,0.041-0.019,0.062-0.026c0.02-0.008,0.043-0.037,0.059-0.037
- c0.012,0,0.047,0.023,0.06,0.03c0.035,0.017,0.058,0.028,0.098,0.028l0,0c0.32-0.095,0.639-0.19,0.958-0.285
- c0.003-0.004,0.006-0.008,0.01-0.012c0.019-0.019,0.042-0.016,0.061-0.031c0.016-0.013,0.016-0.038,0.023-0.056
- c0.016-0.04,0.063-0.047,0.1-0.04c0.003,0.006,0.007,0.008,0.013,0.009c0.006-0.001,0.011-0.004,0.013-0.009
- c0.01-0.003,0.014-0.004,0.022-0.01c0.009-0.007,0.027-0.023,0.029-0.034c0.005-0.022-0.051-0.075-0.003-0.083
- c0.018,0.021,0.04,0.04,0.055,0.062c0.016,0.021,0.032,0.044,0.05,0.065c0.005,0.006,0.01,0.015,0.017,0.024
- c0.129-0.039,0.258-0.077,0.387-0.116c0.024,0.045,0.047,0.09,0.07,0.135c-0.204,0.679-0.937,1.674-0.611,2.037
- c0.325,0.363,0.981,0.295,1.472,0.442c0.069,0.151,0.138,0.302,0.207,0.454c-0.111,0.243-0.223,0.487-0.334,0.73
- c0.051,0.247,0.101,0.495,0.152,0.742c0.02,0.015,0.036,0.036,0.042,0.045c0.021,0.033,0.016,0.069,0.028,0.103
- c0.007,0.016,0.016,0.033,0.02,0.049c0.003,0.016-0.008,0.032-0.008,0.046c-0.001,0.012,0.019,0.024,0.027,0.035
- c0.012,0.015,0.016,0.03,0.019,0.045c0.009,0.037,0.011,0.074,0,0.111c-0.006,0.022,0.009,0.04,0.008,0.062
- c0,0.02-0.001,0.04,0,0.059c0.001,0.01,0.007,0.019,0.006,0.028c-0.001,0.009-0.011,0.018-0.018,0.027
- c0.045,0.223,0.091,0.445,0.136,0.668c0.483,0.384,0.967,0.768,1.45,1.152c-0.011,0.005-0.021,0.011-0.032,0.016
- c0.032,0.006,0.083,0.008,0.097,0.036c-0.026,0.011-0.052,0.025-0.078,0.032c-0.021,0.005-0.039,0.021-0.059,0.025
- c-0.022,0.006-0.046,0.005-0.067,0.013c-0.002,0.001-0.004,0.002-0.006,0.003c0.041,0.054,0.082,0.109,0.124,0.164
- c0.047-0.014,0.094-0.027,0.141-0.04c-0.014-0.016-0.025-0.039-0.028-0.05c-0.002-0.012-0.006-0.038,0-0.049
- c0.007-0.012,0.024-0.012,0.033-0.024c0.02-0.028-0.005-0.064,0.023-0.084c0.028-0.02,0.058,0.011,0.085,0.021
- c0.031,0.012,0.067,0.008,0.065,0.05c-0.003,0.038-0.052,0.063-0.079,0.084c-0.008,0.006-0.024,0.015-0.027,0.025
- c-0.001,0.002,0.001,0.004,0.001,0.006C-25.854,56.564-25.78,56.543-25.706,56.522z M-29.093,49.403
- c-0.006,0.016-0.011,0.036-0.032,0.033c-0.008-0.002-0.017-0.013-0.026-0.025l0.016,0.024c-0.018,0.002-0.027-0.025-0.031-0.046
- l0.005,0.008c-0.001-0.003-0.003-0.006-0.005-0.008c-0.001-0.007-0.001-0.013-0.001-0.018c0-0.021,0.011-0.037,0.018-0.055
- c0.006-0.015,0.008-0.046,0.024-0.051c0.019-0.006,0.034,0.02,0.043,0.032c0.016,0.026,0.002,0.027-0.001,0.053
- C-29.085,49.369-29.086,49.386-29.093,49.403z M-29.177,49.371c0.003,0.004,0.007,0.01,0.011,0.018l0,0L-29.177,49.371z
- M-30.756,48.278c-0.003,0.006-0.009,0.011-0.011,0.018c0,0.002-0.001,0.005-0.001,0.007c-0.002,0.002-0.004,0.005-0.006,0.007
- c-0.002,0.006-0.002,0.012-0.005,0.018c-0.004,0.01-0.003,0.021-0.006,0.031c-0.006,0.016-0.011,0.032-0.019,0.047
- c-0.008,0.019-0.025,0.034-0.038,0.051c-0.009,0.011-0.017,0.022-0.026,0.033c-0.006,0.008-0.012,0.016-0.017,0.024
- c-0.01,0.017-0.014,0.037-0.026,0.053c-0.007,0.01-0.017,0.019-0.024,0.029c-0.009,0.012-0.016,0.023-0.025,0.034
- c-0.006,0.006-0.01,0.014-0.017,0.02c-0.006,0.006-0.014,0.011-0.019,0.018c-0.007,0.011-0.016,0.019-0.029,0.022
- c-0.01,0.001-0.022-0.003-0.032,0c-0.004,0.001-0.007,0.006-0.01,0.008c-0.006,0.003-0.009,0.002-0.016,0.002l-0.01-0.007
- c-0.003-0.003-0.007-0.004-0.011-0.006c-0.008-0.007-0.012-0.018-0.018-0.026c-0.006-0.007-0.007-0.014-0.012-0.021
- c-0.004-0.006-0.009-0.009-0.013-0.016c-0.004-0.006-0.009-0.012-0.015-0.018c-0.006-0.005-0.012-0.008-0.017-0.013
- c-0.006-0.005-0.008-0.015-0.01-0.022c-0.002-0.007-0.005-0.013-0.005-0.021c0.001-0.008-0.003-0.014-0.003-0.022
- c-0.001-0.008,0.001-0.017,0-0.025c-0.003-0.032-0.026-0.059-0.033-0.089c-0.004-0.014-0.005-0.027,0.008-0.037
- c0.005-0.004,0.012-0.006,0.018-0.009c0.008-0.005,0.017-0.01,0.025-0.015c0.006-0.003,0.012-0.008,0.018-0.012
- c0.007-0.006,0.011-0.014,0.018-0.02c0.005-0.004,0.01-0.006,0.014-0.011c0.004-0.004,0.005-0.009,0.009-0.013
- c0.008-0.011,0.022-0.021,0.033-0.029c0.01-0.008,0.018-0.016,0.029-0.022c0.013-0.008,0.023-0.02,0.036-0.029
- c0.008-0.006,0.014-0.012,0.022-0.018c0.007-0.004,0.013-0.007,0.02-0.011c0.012-0.008,0.026-0.011,0.038-0.017
- c0.005-0.002,0.01-0.003,0.014-0.007c0.008-0.005,0.017-0.009,0.024-0.015c0.005-0.004,0.01-0.008,0.014-0.01
- c0.007-0.005,0.014-0.01,0.022-0.014c0.006-0.003,0.011-0.005,0.018-0.004c0.009,0.003,0.016,0.006,0.024,0.009
- c0.011,0.005,0.02,0.009,0.03,0.015c0.004,0.002,0.007,0.005,0.011,0.007c0.008,0.004,0.008,0.004,0.01,0.012
- c0.005,0.013,0.002,0.026,0.01,0.039c0.006,0.01,0.026,0.011,0.03,0.021c0.003,0.01-0.003,0.024-0.008,0.032
- S-30.752,48.27-30.756,48.278z M-30.84,48.052c0,0-0.007,0.007-0.007,0.008c-0.004,0.004-0.006,0.005-0.01,0.008
- c-0.008,0.005-0.014,0.014-0.022,0.019c-0.01,0.008-0.023,0.016-0.035,0.019c-0.012,0.003-0.023,0.006-0.033,0.014
- c-0.011,0.007-0.021,0.016-0.032,0.023c-0.003,0.002-0.015,0.009-0.019,0.009c-0.006,0.001-0.014-0.005-0.02-0.01l0.002-0.003
- c-0.004-0.005-0.005-0.009-0.007-0.015c-0.002-0.007,0-0.014-0.002-0.022c-0.001-0.005-0.006-0.007-0.004-0.014
- c0.001-0.006,0.006-0.01,0.01-0.014c0.006-0.006,0.01-0.018,0.014-0.026c0.008-0.016,0.019-0.02,0.033-0.029
- c0.008-0.004,0.011-0.002,0.018,0.001c0.009,0.002,0.011-0.002,0.017-0.008c0.009-0.008,0.019-0.015,0.029-0.024
- c0.012-0.01,0.022-0.022,0.037-0.029c0.004-0.002,0.009-0.005,0.014-0.007c0.004-0.002,0.012-0.004,0.017-0.002
- c0.027,0.01,0,0.046,0.001,0.063C-30.839,48.024-30.836,48.042-30.84,48.052z M-31.022,48.138c0.001,0.001,0.003,0.003,0.004,0.004
- l0,0L-31.022,48.138z M-31.215,48.707c0.002,0.008,0.007,0.015,0.011,0.022c0.005,0.007,0.008,0.014,0.01,0.021
- c0.003,0.007,0.006,0.014,0.003,0.022c-0.004,0.011-0.009,0.008-0.017,0.01c-0.013,0.003-0.024,0.015-0.035,0.021
- c-0.006,0.003-0.013,0.005-0.019,0.008c-0.004,0.003-0.008,0.005-0.013,0.007c-0.005,0.002-0.01,0.006-0.015,0.007
- c-0.005,0.001-0.009,0-0.014,0c-0.009,0.002-0.018,0.004-0.027,0.007c-0.023,0.006-0.046,0.007-0.07,0.013
- c-0.015,0.004-0.03,0.005-0.046,0.008c-0.013,0.003-0.024,0.007-0.036,0.011c-0.038,0.011-0.072,0.036-0.104,0.057
- c-0.018,0.012-0.034,0.018-0.054,0.013c-0.01-0.003-0.02,0.001-0.029,0.006c-0.014,0.007-0.025,0.015-0.04,0.021
- c-0.012,0.004-0.029,0.007-0.042,0.008c-0.006,0-0.012-0.001-0.018-0.001c-0.01,0.001-0.02,0.004-0.029,0.004
- c-0.009,0.001-0.016-0.001-0.024,0.001c-0.008,0.001-0.014,0.003-0.022,0.003c-0.017,0-0.033,0.002-0.05,0.003
- c-0.007,0-0.012,0.003-0.018,0.004c-0.009,0.001-0.019,0-0.028,0c-0.01,0-0.017,0.001-0.026,0.003c-0.01,0.001-0.019-0.001-0.028,0
- c-0.007,0.001-0.014,0.004-0.021,0.004c-0.011,0.001-0.022,0-0.033,0c-0.02,0-0.04,0-0.061,0c-0.023,0-0.053-0.005-0.071-0.021
- c-0.009-0.009-0.017-0.016-0.025-0.025c-0.004-0.003-0.007-0.007-0.011-0.011c-0.005-0.002-0.012-0.003-0.017-0.005
- c-0.006-0.002-0.013-0.006-0.018-0.01c-0.01-0.008-0.01-0.018-0.015-0.028c-0.003-0.007-0.007-0.015-0.011-0.022
- c-0.006-0.01-0.002-0.019,0.001-0.031c0.001-0.004,0.002-0.008,0.004-0.012c-0.004-0.014-0.005-0.028-0.008-0.042
- c-0.002-0.015,0.011-0.033,0.017-0.047c0.002-0.007,0.006-0.014,0.004-0.022c-0.004-0.009-0.01-0.017-0.011-0.027
- c-0.001-0.013-0.006-0.024,0.001-0.037c0.002-0.005,0.004-0.009,0.008-0.013c0.005-0.006,0.012-0.01,0.017-0.016
- c0.005-0.006,0.008-0.009,0.018-0.007c0.003,0.001,0.003,0.003,0.006,0.004c0.004,0.001,0.007,0,0.011,0.001
- c0.008,0.002,0.013,0.004,0.022,0.002c0.003-0.001,0.007-0.003,0.011-0.004c0.005-0.002,0.008-0.001,0.014-0.002
- c0.004-0.001,0.006-0.004,0.011-0.004c0.003,0.001,0.007,0.003,0.01,0.003c0.004,0.001,0.008,0,0.011,0
- c0.004,0.001,0.006,0.003,0.008,0.003c0.007,0.002,0.014,0.001,0.021,0.001c0.009,0,0.016,0.006,0.025,0.007
- c0.003,0.001,0.007-0.001,0.011,0c0.003,0.001,0.003,0.003,0.006,0.004c0.007,0.001,0.016,0,0.022,0c0.017,0,0.03,0.001,0.042-0.012
- c0.009-0.009,0.012-0.023,0.022-0.032c0.003-0.004,0.008-0.007,0.011-0.011c0.006-0.006,0.011-0.007,0.018-0.011
- c0.015-0.007,0.022-0.023,0.03-0.037c0.007-0.013,0.017-0.024,0.024-0.038c0.005-0.012,0.009-0.026,0.014-0.038
- c0.002-0.006,0.009-0.013,0.01-0.019c0.001-0.003,0-0.007,0.001-0.01c0-0.003,0.003-0.004,0.004-0.007
- c0-0.005-0.002-0.007-0.003-0.011c-0.002-0.006-0.002-0.012-0.004-0.018c-0.006-0.023-0.004-0.043,0.003-0.064
- c0.005-0.016,0.011-0.03,0.011-0.047c-0.001-0.016,0-0.035,0.021-0.035c0.017,0,0.021,0.014,0.033,0.024
- c0.012,0.009,0.027,0.002,0.038-0.003c0.014-0.006,0.027-0.017,0.037-0.028c0.006-0.007,0.014-0.015,0.017-0.023
- c0.007-0.013,0.012-0.028,0.018-0.042c0.009-0.018,0.018-0.037,0.029-0.054c0.005-0.009,0.011-0.015,0.013-0.024
- c0.002-0.01-0.002-0.015-0.007-0.022c-0.007-0.012-0.009-0.029-0.006-0.043c0.001-0.008,0.003-0.013,0.003-0.022
- c0-0.007,0-0.014,0-0.021c0.001-0.02,0.007-0.042,0.014-0.061c0.007-0.019,0.005-0.04,0.009-0.06
- c0.003-0.019,0.013-0.039,0.013-0.058c0-0.013,0.003-0.03-0.001-0.043c-0.001-0.006-0.005-0.012-0.006-0.018
- c-0.002-0.007-0.002-0.014-0.003-0.021c-0.001-0.004-0.004-0.004-0.004-0.007c-0.001-0.003,0-0.008,0-0.011
- c0-0.007-0.001-0.015,0.001-0.021c0.004-0.016,0.005-0.03,0.014-0.043c0.008-0.012,0.019-0.019,0.025-0.032
- c0.004-0.008,0.02-0.028,0.031-0.026c0.005,0.001,0.011,0.008,0.014,0.012c0.006,0.008,0.004,0.012,0.001,0.02
- c-0.004,0.017,0.001,0.031,0.01,0.044c0.008,0.014,0.011,0.027,0.016,0.042c0.005,0.017,0.015,0.016,0.028,0.021
- c0.018,0.007,0.022,0.024,0.028,0.04c0.002,0.006,0.006,0.013,0.007,0.018c0.001,0.003-0.001,0.008,0,0.011
- c0.001,0.003,0.003,0.008,0.004,0.01c0.004,0.013,0.003,0.026,0.003,0.04c0,0.006,0.002,0.015,0,0.022
- c-0.001,0.004-0.008,0.016-0.003,0.02c0.01,0.009,0.018-0.03,0.033-0.014c0.009,0.01,0.012,0.031,0.009,0.043
- c-0.001,0.005-0.003,0.007-0.003,0.011c0,0.004,0.001,0.008,0,0.011c-0.001,0.005-0.005,0.013-0.007,0.018
- c-0.003,0.006-0.007,0.009-0.011,0.014c-0.003,0.006-0.006,0.012-0.007,0.018c-0.001,0.008,0.001,0.015-0.002,0.022
- c-0.006,0.014-0.015,0.012-0.026,0.018c-0.008,0.005-0.01,0.012-0.011,0.021c-0.001,0.005-0.001,0.01,0.001,0.014
- c0.001,0.006,0.001,0.013,0.003,0.018c0.005,0.016,0.017,0.029,0.023,0.043c0.004,0.007,0.008,0.014,0.016,0.017
- c0.009,0.004,0.016-0.001,0.021-0.006c0.01-0.011,0.017-0.029,0.022-0.043c0.007-0.016,0-0.034,0.017-0.044
- c0.014-0.007,0.018,0.01,0.025,0.019c0.004,0.005,0.012,0.009,0.018,0.011c0.009,0.001,0.018-0.006,0.025-0.003
- c0.004,0.001,0.007,0.008,0.01,0.011c0.005,0.003,0.01,0.004,0.015,0.007c0.007,0.005,0.014,0.012,0.019,0.019
- c0.009,0.012,0.01,0.02,0.01,0.034v0.06c0,0.019,0.003,0.04-0.004,0.058c-0.002,0.007-0.003,0.013-0.003,0.021
- s-0.003,0.014-0.004,0.021c0,0.004,0.001,0.008,0.001,0.011c-0.001,0.004-0.004,0.007-0.005,0.011c0,0.005,0.001,0.01,0,0.015
- c-0.001,0.008-0.004,0.017-0.007,0.025c-0.006,0.013-0.012,0.027-0.014,0.042c0,0.008-0.003,0.014-0.004,0.022
- c-0.003,0.017-0.003,0.03,0,0.048c0.002,0.01,0,0.02,0.001,0.03c0,0.008,0.003,0.016,0.004,0.024c0.002,0.01,0.003,0.02,0.005,0.03
- c0.003,0.01,0.008,0.019,0.011,0.029c0.005,0.014,0.006,0.029,0.013,0.042c0.002,0.004,0.005,0.011,0.007,0.014
- c0.004,0.006,0.007,0.007,0.012,0.011c0.009,0.008,0.019,0.022,0.024,0.033C-31.218,48.693-31.217,48.7-31.215,48.707z
- M-31.576,47.405c-0.012,0.017-0.033,0.042-0.054,0.043c-0.01,0-0.018,0.003-0.029,0.003c-0.009,0.001-0.025-0.005-0.025-0.017
- l0.011,0.001c-0.008-0.003-0.017-0.012-0.022-0.017c-0.018-0.015-0.019-0.026-0.015-0.048c0.003-0.013,0.006-0.027,0.015-0.037
- c0.008-0.007,0.016-0.011,0.022-0.021c0.005-0.007,0.005-0.023,0.014-0.025c0.01-0.003,0.02-0.001,0.028-0.008
- c0.007-0.005,0.009-0.012,0.019-0.01c0.01,0.002,0.018,0.01,0.028,0.011c0.012,0,0.014-0.001,0.019,0.011
- c0.004,0.009,0.008,0.022,0.007,0.032c-0.002,0.016-0.006,0.031-0.008,0.046C-31.567,47.381-31.57,47.395-31.576,47.405z
- M-32.403,49.724C-32.403,49.723-32.403,49.723-32.403,49.724L-32.403,49.724L-32.403,49.724z M-32.319,48.806
- c-0.002,0.006,0,0.006-0.004,0.012c-0.002,0.003-0.005,0.006-0.007,0.009c-0.004,0.006-0.006,0.013-0.008,0.019
- c-0.003,0.007-0.003,0.013-0.006,0.02c0,0.001-0.007,0.011-0.008,0.011c-0.005,0.003-0.01-0.002-0.015-0.003l-0.008-0.004
- c-0.004-0.014-0.016-0.027-0.021-0.04c-0.003-0.008-0.005-0.014-0.011-0.021c-0.002-0.002-0.005-0.007-0.007-0.008
- c-0.003-0.002-0.007-0.001-0.009-0.003c-0.006-0.003-0.01-0.011-0.015-0.017c-0.006-0.008-0.004-0.009-0.002-0.019
- c0.003-0.011-0.005-0.009-0.01-0.016c-0.004-0.007,0.001-0.017,0.003-0.024c0.005-0.013,0.006-0.029,0.012-0.044
- c0.005-0.012,0.012-0.025,0.019-0.036c0.006-0.009,0.002-0.015,0.005-0.024c0.002-0.006,0.009-0.008,0.011-0.015
- c0.002-0.007,0.005-0.018,0.004-0.024c-0.001-0.009-0.008-0.021,0.005-0.024c0.007-0.003,0.014,0,0.019,0.005
- c0.006,0.006,0.004,0.01,0.006,0.019c0.003,0.015,0.012,0.028,0.016,0.043c0.001,0.004,0.002,0.004,0.003,0.009
- c0,0.007,0.002,0.01,0.003,0.016c0.002,0.008,0.003,0.015,0.006,0.024c0.002,0.008,0.006,0.012,0.011,0.019
- c0.005,0.008,0.007,0.017,0.011,0.025c0.006,0.014,0.009,0.028,0.009,0.043c0,0.01,0.001,0.019-0.003,0.028
- C-32.313,48.793-32.317,48.8-32.319,48.806z M-32.951,49.238c-0.004,0.004-0.007,0.009-0.011,0.013
- c-0.005,0.007-0.015,0.019-0.017,0.027s0.001,0.009-0.005,0.015c-0.003,0.004-0.006,0.007-0.01,0.01
- c-0.011,0.011-0.017,0.014-0.017,0.031c0,0.014-0.003,0.026-0.01,0.037c-0.004,0.005-0.011,0.011-0.018,0.011
- c-0.008,0.001-0.011-0.006-0.015-0.012c0.008-0.018-0.01-0.041-0.02-0.056c-0.011-0.018-0.03-0.034-0.033-0.056
- c-0.001-0.014,0.009-0.022,0.015-0.033c0.008-0.012,0.016-0.023,0.025-0.035c0.007-0.01,0.014-0.02,0.024-0.028
- c0.004-0.002,0.009-0.004,0.012-0.008c0.002-0.005,0.001-0.014,0.005-0.019c0.002,0,0.004-0.001,0.006-0.001
- c0.003-0.002,0.004-0.005,0.006-0.007c0.007-0.005,0.01-0.005,0.019-0.005c0.012,0.001,0.031-0.004,0.039,0.005
- c0.009,0.01,0.013,0.018,0.013,0.031c0,0.007,0,0.014,0,0.02c0,0.01,0.005,0.015,0.009,0.023c0.003,0.007,0.003,0.01-0.001,0.018
- C-32.939,49.226-32.945,49.232-32.951,49.238z M-33.22,48.753c-0.008,0.025-0.021,0.047-0.041,0.062
- c-0.017,0.014-0.035,0.032-0.048,0.05c-0.013,0.02-0.032,0.039-0.042,0.061c-0.004,0.007-0.007,0.013-0.01,0.02
- c-0.002,0.004-0.005,0.008-0.007,0.012c-0.003,0.003-0.003,0.007-0.005,0.011c-0.008,0.013-0.022,0.025-0.031,0.037
- c-0.005,0.006-0.009,0.013-0.013,0.02c-0.003,0.004-0.008,0.007-0.011,0.011c-0.006,0.008-0.006,0.014-0.013,0.022
- c-0.008,0.009-0.018,0.015-0.027,0.023c-0.007,0.007-0.012,0.014-0.019,0.021c-0.005,0.004-0.013,0.01-0.02,0.005
- c-0.007-0.004-0.004-0.011-0.006-0.018c-0.001,0-0.002,0-0.003-0.001l-0.004-0.004c0-0.009,0.003-0.015,0.004-0.023
- c0.001-0.005,0-0.011,0-0.015c0-0.007,0.002-0.011,0.003-0.016c0.004-0.02,0.008-0.039,0.014-0.057
- c0.005-0.016,0.005-0.032,0.011-0.048c0.003-0.008,0.004-0.017,0.009-0.023c0.007-0.008,0.012-0.01,0.016-0.02
- c0.001-0.004,0.002-0.004,0.003-0.009c0-0.004-0.001-0.007,0.001-0.011c0.002-0.004,0.008-0.008,0.012-0.012
- c0.007-0.008,0.011-0.019,0.015-0.029c0.003-0.009,0.008-0.012,0.013-0.02c0.005-0.007,0.007-0.016,0.01-0.025
- c0.004-0.012,0.008-0.013,0.016-0.023c0.009-0.012,0.012-0.027,0.021-0.04c0.009-0.012,0.017-0.022,0.025-0.035
- c0.005-0.009,0.008-0.016,0.015-0.024c0.005-0.008,0.007-0.017,0.012-0.024c0.006-0.008,0.013-0.013,0.021-0.019
- c0.001-0.002,0.003-0.005,0.005-0.006c0.003-0.002,0.006-0.002,0.008-0.004c0.01-0.007,0.013-0.029,0.029-0.023
- c0.013,0.004,0.016,0.023,0.019,0.033c0.003,0.007,0.005,0.013,0.01,0.018c0.003,0.004,0.007,0.006,0.01,0.01
- c0.005,0.004,0.003,0.005,0.005,0.011c0.005,0.014,0.017,0.031,0.019,0.047c0.002,0.012-0.004,0.014-0.011,0.022
- C-33.213,48.73-33.216,48.742-33.22,48.753z M-33.383,48.53c-0.013,0.006-0.025,0.013-0.038,0.017
- c-0.014,0.005-0.02,0.014-0.029,0.024c-0.008,0.008-0.016,0.012-0.026,0.016c-0.007,0.003-0.01,0.004-0.017-0.001
- c-0.005-0.002-0.011-0.006-0.012-0.011l-0.008-0.009c-0.008-0.007-0.014-0.015-0.02-0.024c-0.003-0.004-0.01-0.011-0.011-0.016
- c-0.004-0.011-0.001-0.028,0.002-0.039c0.003-0.009,0.001-0.021,0.009-0.027c0.004-0.004,0.01-0.005,0.015-0.01
- c0.003-0.004,0.005-0.008,0.008-0.012c0.002-0.004,0.007-0.007,0.01-0.01c0.005-0.006,0.008-0.012,0.015-0.016
- c0.006-0.005,0.008-0.004,0.016-0.005c0.007-0.001,0.012-0.004,0.02-0.004s0.012,0.003,0.02,0.004
- c0.012,0.002,0.025-0.003,0.036,0.003c0.006,0.003,0.014,0.008,0.019,0.013s0.006,0.013,0.012,0.017
- c0.007,0.004,0.014,0,0.019,0.004c0.004,0.002,0.006,0.008,0.008,0.012c0.007,0.013,0.012,0.016,0.005,0.031
- c-0.006,0.013-0.011,0.017-0.023,0.024C-33.364,48.516-33.372,48.525-33.383,48.53z M-33.559,49.088
- c-0.003,0.01-0.003,0.011-0.01,0.017c-0.006,0.006-0.017,0.007-0.021,0.015c-0.003,0.005,0,0.013-0.001,0.021
- c-0.001,0.013,0.004,0.016-0.01,0.02l-0.005-0.007c-0.014,0.002-0.02-0.026-0.017-0.036c0.004-0.01,0.006-0.017,0.007-0.027
- c0-0.009-0.002-0.017,0-0.025c0.002-0.015,0.003-0.029,0.011-0.042c0.003-0.006,0.008-0.011,0.013-0.016
- c0.009-0.01,0.013-0.012,0.025-0.005c0.007,0.003,0.011,0.005,0.014,0.012c0.004,0.008,0.006,0.018,0.005,0.028
- c-0.001,0.007,0.001,0.014,0,0.021C-33.55,49.072-33.557,49.079-33.559,49.088z M-33.537,48.952
- c-0.006,0.009-0.019,0.019-0.031,0.016l0.004-0.008c-0.003,0-0.009,0.002-0.012,0.001c-0.006-0.002-0.005-0.007-0.009-0.012
- c-0.006-0.008-0.011-0.012-0.011-0.024c-0.001-0.009,0.003-0.016,0.004-0.025c0.003-0.02,0-0.043,0-0.063
- c0-0.012,0.002-0.018,0.005-0.029c0.003-0.012,0.002-0.021,0.011-0.03c0.006-0.006,0.013-0.01,0.015-0.018
- c0.001-0.005,0-0.01,0.001-0.015c0.001-0.006,0.004-0.01,0.005-0.015c0.008-0.001,0.023-0.005,0.03-0.01
- c0.01-0.007,0.011-0.016,0.014-0.026c0.002-0.008,0.01-0.013,0.016-0.02c0.008-0.009,0.007-0.022,0.014-0.033
- c0.012-0.021,0.045-0.029,0.058-0.005c0.006,0.012,0.001,0.021-0.002,0.033c-0.001,0.005,0.001,0.012,0.001,0.017
- c-0.001,0.012-0.007,0.022-0.009,0.034c0,0.007,0,0.014-0.004,0.021c-0.004,0.006-0.01,0.011-0.014,0.017
- c-0.007,0.009-0.016,0.017-0.02,0.028c-0.01,0.025-0.031,0.045-0.04,0.071c-0.005,0.011-0.007,0.023-0.01,0.035
- c-0.001,0.004-0.003,0.006-0.003,0.013s-0.003,0.009-0.004,0.015c-0.002,0.005,0.001,0.011,0,0.017S-33.534,48.947-33.537,48.952z
- M-33.541,48.343c-0.002,0.008-0.003,0.013-0.003,0.021c0,0.01,0,0.011-0.005,0.019c-0.007,0.012-0.019,0.023-0.023,0.036
- c-0.002,0.007-0.003,0.013-0.007,0.02c-0.003,0.006-0.009,0.014-0.009,0.02s0.003,0.01,0.004,0.016
- c0.001,0.007-0.002,0.012-0.003,0.017c-0.002,0.012-0.002,0.025-0.009,0.035c-0.002,0.004-0.005,0.008-0.009,0.011
- c-0.003,0.002-0.014,0.007-0.018,0.008c0-0.006-0.006-0.009-0.005-0.015l-0.008-0.004c0-0.008,0.001-0.016,0.001-0.023
- c-0.001-0.013-0.008-0.025-0.009-0.037c0-0.005,0.002-0.011,0.001-0.016c-0.001-0.004-0.004-0.008-0.005-0.012
- c-0.001-0.006,0-0.006-0.003-0.012c-0.003-0.004-0.008-0.009-0.012-0.013c-0.008-0.01-0.015-0.022-0.025-0.03
- c-0.007-0.004-0.017-0.005-0.023-0.009c-0.005-0.005-0.012-0.016-0.013-0.024c0-0.008,0.005-0.015,0.005-0.024
- c-0.001-0.008,0.002-0.016,0.003-0.024c0.004-0.016,0.011-0.034,0.017-0.051c0.003-0.005,0.005-0.015,0.008-0.02
- c0.004-0.005,0.009-0.009,0.012-0.016c0.003-0.009,0.007-0.019,0.008-0.028c0-0.009-0.002-0.019,0-0.028
- c0.007,0,0.01-0.003,0.015-0.004c0.006-0.002,0.014,0.001,0.02,0c0.013-0.002,0.021-0.011,0.031-0.017c0.009-0.006,0.011,0,0.02,0
- c0.008,0,0.013-0.003,0.021-0.003c0.014,0,0.027,0.001,0.04,0.007c0.01,0.005,0.02,0.014,0.029,0.02
- c0.007,0.005,0.012,0.016,0.016,0.024c0.005,0.011,0.009,0.018,0.006,0.032c-0.004,0.022-0.019,0.029-0.031,0.045
- C-33.523,48.289-33.533,48.314-33.541,48.343z M-32.86,55.655c0.007,0.016,0.017,0.03,0.024,0.047
- c0.017,0.042,0.038,0.08,0.055,0.121c0.017,0.04,0.045,0.07,0.072,0.105c0.02,0.024,0.06,0.071,0.052,0.104
- c-0.017-0.006-0.026-0.023-0.041-0.031l-0.006,0.005c-0.033-0.027-0.062-0.063-0.067-0.105c-0.005-0.03-0.024-0.065-0.039-0.094
- c-0.009-0.018-0.031-0.033-0.035-0.052c-0.002-0.008,0.001-0.017-0.001-0.025c-0.004-0.012-0.016-0.028-0.021-0.04
- c-0.008-0.018-0.015-0.031-0.02-0.051c-0.003-0.012-0.021-0.054,0.006-0.037C-32.866,55.611-32.865,55.641-32.86,55.655z
- M-31.614,57.091c0.006,0.006,0.009,0.014,0.014,0.021c0.002,0.003,0.004,0.007,0.007,0.011c0.001,0.001,0.003,0.002,0.004,0.004
- c0.002,0.003,0.005,0.004,0.007,0.006c0.002,0.002,0.004,0.005,0.006,0.008c0.003,0.004,0.005,0.008,0.008,0.013
- c0.003,0.005,0.006,0.011,0.009,0.017c0.001,0.004,0.004,0.007,0.008,0.01c0.003,0.002,0.004,0.005,0.006,0.009
- c0.002,0.003,0.003,0.008,0.006,0.011c0.004,0.004,0.007,0.009,0.008,0.014c0.002,0.005,0.003,0.009,0.005,0.014
- c0.001,0.002,0.002,0.004,0.004,0.006c0.002,0.002,0.005,0.003,0.007,0.006c0.002,0.003,0.005,0.005,0.007,0.008
- c0.001,0.002,0.002,0.004,0.004,0.006c0.001,0.003,0.004,0.006,0.007,0.009c0.001,0.001,0.003,0.002,0.004,0.004
- c0.001,0.001,0.002,0.002,0.002,0.003c0.003,0.005,0.007,0.01,0.009,0.015c0.003,0.009,0.007,0.017,0.011,0.025
- c0.001,0.003,0.002,0.007,0.004,0.01c0.001,0.002,0.005,0.007,0.004,0.009c-0.001,0-0.004-0.004-0.004-0.005
- c-0.002-0.002-0.003-0.003-0.005-0.005c-0.004-0.003-0.008-0.007-0.013-0.01c-0.003-0.002-0.007-0.005-0.009-0.008
- c-0.001-0.002-0.003-0.003-0.004-0.005c-0.001-0.002-0.003-0.004-0.004-0.007c-0.001-0.002-0.002-0.004-0.004-0.006
- c-0.001-0.001-0.003-0.002-0.004-0.003c-0.003-0.004-0.003-0.009-0.005-0.013c-0.002-0.003-0.004-0.005-0.007-0.007
- c-0.003-0.004-0.005-0.008-0.007-0.012c-0.002-0.003-0.003-0.007-0.005-0.01c-0.002-0.005-0.004-0.01-0.007-0.014
- c-0.005-0.007-0.011-0.014-0.016-0.021c-0.002-0.004-0.006-0.007-0.008-0.011c-0.003-0.004-0.006-0.008-0.008-0.012
- c-0.005-0.007-0.009-0.015-0.014-0.022c-0.003-0.004-0.007-0.008-0.01-0.012c-0.003-0.003-0.005-0.008-0.006-0.012
- c-0.002-0.004-0.003-0.008-0.006-0.012c-0.001-0.001-0.002-0.002-0.002-0.004c-0.001,0-0.001-0.001-0.001-0.001s0,0,0-0.001
- c-0.001-0.001-0.001-0.002-0.002-0.004c0-0.002-0.001-0.002-0.001-0.003s0-0.002,0-0.003s-0.001-0.001-0.001-0.002
- c0-0.001,0-0.002-0.001-0.003c-0.001-0.004-0.003-0.007-0.004-0.01c-0.001-0.002-0.001-0.004,0.001-0.004
- C-31.618,57.088-31.615,57.09-31.614,57.091z M-31.125,57.71c0.016,0.015,0.034,0.023,0.052,0.036
- c0.023,0.015,0.041,0.038,0.063,0.054c0.033,0.024,0.065,0.05,0.1,0.072c0.018,0.011,0.033,0.026,0.051,0.039
- c0.014,0.01,0.034,0.018,0.042,0.034c-0.014,0.003-0.039-0.014-0.053-0.019c-0.014-0.004-0.044-0.007-0.051-0.022l0,0
- c-0.026-0.02-0.048-0.046-0.072-0.069c-0.023-0.022-0.049-0.034-0.069-0.058c-0.027-0.032-0.054-0.036-0.09-0.055
- c-0.018-0.009-0.059-0.045-0.062-0.068c0.023-0.02,0.031,0.013,0.043,0.024C-31.158,57.69-31.14,57.698-31.125,57.71z
- M-22.303,59.124c0.005-0.006,0.012-0.01,0.017-0.016c0.004-0.007,0.003-0.01,0.006-0.016c0.004-0.01,0.012-0.017,0.017-0.027
- c0.001-0.002,0.002-0.01,0.003-0.012c0.003-0.005,0.008-0.009,0.013-0.015c0.009-0.01,0.011-0.012,0.026-0.012
- c0.01,0.001,0.018-0.002,0.027-0.005c0.01-0.004,0.022-0.01,0.032-0.011c0.005-0.001,0.012,0,0.017,0
- c0.009,0,0.013-0.002,0.022-0.004c0.012-0.003,0.021-0.004,0.033-0.011c0.007-0.004,0.013-0.008,0.021-0.012
- c0.01-0.005,0.018-0.01,0.026-0.018c0.003-0.003,0.005-0.006,0.008-0.008c0.005-0.004,0.009-0.005,0.014-0.008
- c0.014-0.011,0.017-0.026,0.027-0.039c0.011-0.016,0.034-0.026,0.049-0.037c0.006-0.005,0.01-0.012,0.017-0.017
- c0.01-0.006,0.022-0.011,0.033-0.015c0.019-0.007,0.035-0.021,0.055-0.026c0.019-0.004,0.046-0.006,0.064-0.019
- c0.015-0.01,0.029-0.025,0.046-0.035c0.005-0.003,0.019-0.011,0.025-0.006c0.008,0.008-0.004,0.018-0.009,0.022
- c-0.012,0.012-0.026,0.02-0.038,0.033c-0.013,0.014-0.027,0.028-0.041,0.041c-0.005,0.004-0.012,0.01-0.016,0.016
- c-0.006,0.009-0.005,0.02-0.009,0.029c-0.012,0.023-0.036,0.037-0.055,0.053c-0.007,0.006-0.012,0.011-0.018,0.017
- c-0.011,0.012-0.017,0.025-0.027,0.039c-0.014,0.021-0.051,0.038-0.075,0.042c-0.012,0.002-0.025,0-0.037,0.002
- c-0.009,0.002-0.019,0.008-0.029,0.011c-0.011,0.003-0.028,0.009-0.036,0.016c-0.005,0.005-0.007,0.011-0.012,0.016
- c-0.005,0.004-0.011,0.007-0.016,0.01c-0.009,0.006-0.018,0.015-0.027,0.021c-0.017,0.01-0.037,0.015-0.054,0.023
- c-0.013,0.006-0.021,0.004-0.034,0.005c-0.011,0.002-0.021,0.007-0.032,0.01c-0.011,0.003-0.027,0.003-0.038,0.001
- c-0.01-0.001-0.016-0.005-0.025-0.005l0.003-0.006C-22.321,59.142-22.312,59.134-22.303,59.124z M-22.336,59.162
- c-0.004,0.001-0.005-0.001-0.005-0.004c0.003-0.001,0.006-0.001,0.008-0.001L-22.336,59.162z M-21.881,59.028
- c-0.01-0.011,0.016-0.024,0.024-0.029c0.007-0.004,0.016-0.006,0.023-0.009c0.005-0.002,0.008-0.003,0.011-0.006
- c0.005-0.002,0.007-0.009,0.011-0.011c0.006-0.004,0.015-0.002,0.022-0.005c0.007-0.004,0.014-0.009,0.02-0.013
- c0.009-0.005,0.047-0.031,0.044-0.005c0,0.005-0.007,0.018-0.01,0.022c-0.003,0.006-0.008,0.011-0.012,0.016
- c-0.008,0.011-0.02,0.027-0.034,0.032c-0.008,0.002-0.016,0-0.024,0.002c-0.009,0.002-0.014,0.008-0.023,0.01
- c-0.011,0.002-0.023,0-0.033,0c-0.013-0.001-0.021,0.004-0.033,0.005l0.011-0.005C-21.883,59.03-21.882,59.029-21.881,59.028z
- M-23.012,48.049c0.012-0.009,0.023-0.017,0.03-0.03c0.003-0.007,0.004-0.011,0.011-0.014c0.006-0.002,0.012-0.003,0.018-0.003
- c0.025-0.001,0.044,0.01,0.051,0.036c0.005,0.018,0.007,0.037,0.01,0.056c0.002,0.017,0.009,0.033,0.012,0.05
- c0.002,0.014,0.004,0.027,0.001,0.041c-0.003,0.013-0.006,0.019-0.018,0.024c-0.024,0.011-0.052,0.005-0.076,0
- c-0.008-0.002-0.016-0.005-0.022-0.01c-0.007-0.005-0.012-0.013-0.021-0.014h0.013c-0.003,0-0.005-0.003-0.008-0.005
- c-0.006-0.006-0.01-0.008-0.014-0.015c-0.005-0.008-0.012-0.014-0.015-0.023c-0.003-0.006-0.005-0.014-0.006-0.021
- c-0.001-0.014-0.002-0.033,0.006-0.046C-23.032,48.063-23.023,48.056-23.012,48.049z M-22.19,43.243
- c0.013,0.002,0.025,0.012,0.037,0.018c0.011,0.005,0.021,0,0.032,0.003c0.005,0.001,0.005,0.005,0.01,0.006
- c0.007,0.002,0.014-0.002,0.021-0.001c0.01,0.002,0.018,0.007,0.026,0.012c0.007,0.004,0.012,0.01,0.019,0.014
- c0.008,0.005,0.017,0.005,0.024,0.013c0.007,0.007,0.016,0.02,0.005,0.025c-0.002,0.001-0.013,0.003-0.016,0.004
- c-0.008,0.002-0.014,0.004-0.021,0.008c-0.01,0.005-0.016,0.01-0.026,0.014c-0.005,0.002-0.005,0.005-0.011,0.005
- c-0.005,0-0.014-0.005-0.021-0.005c-0.023,0-0.044-0.011-0.066-0.01c-0.002-0.002-0.004-0.005-0.006-0.007
- c-0.01-0.01-0.019-0.021-0.027-0.032c-0.006-0.007-0.011-0.016-0.017-0.024c-0.011-0.018,0.002-0.022,0.015-0.033
- C-22.204,43.246-22.201,43.241-22.19,43.243z M-22.195,43.354c0.006-0.003,0.012-0.004,0.018-0.005
- c0.002,0.002,0.005,0.004,0.007,0.005H-22.195z M-21.865,43.386c0.003-0.011,0-0.022,0.001-0.032
- c0.001-0.003,0.005-0.01,0.005-0.012c0.001-0.008-0.003-0.011-0.005-0.02c-0.002-0.015-0.002-0.047,0.016-0.053
- c0.009-0.002,0.024,0.001,0.033,0.001c0.017,0,0.031,0,0.047-0.006c0.02-0.007,0.035-0.012,0.057-0.006
- c0.024,0.006,0.042-0.011,0.063,0.003c0.015,0.009,0.031,0.023,0.039,0.039c0.009,0.019,0.009,0.042,0.009,0.065
- c0,0.019-0.004,0.044,0.004,0.063c0.009,0.02,0.024,0.035,0.038,0.052c0.015,0.018,0.027,0.036,0.038,0.057
- c0.004,0.008,0.008,0.013,0.009,0.022c0.003,0.017,0.001,0.021-0.015,0.021c-0.02,0-0.037-0.013-0.053-0.025
- c-0.023-0.016-0.058-0.029-0.086-0.036c-0.024-0.007-0.046-0.017-0.071-0.022c-0.015-0.003-0.025,0.004-0.038,0.003
- c-0.01,0-0.021-0.008-0.031-0.009c-0.011-0.001-0.021-0.002-0.031-0.006c-0.003-0.001-0.009-0.007-0.012-0.009
- c-0.004-0.002-0.011-0.005-0.014-0.007c-0.007-0.007-0.005-0.017-0.011-0.023l0.004,0.003
- C-21.886,43.435-21.868,43.401-21.865,43.386z"/>
-</svg>
diff --git a/browser/branding/nightly/default16.png b/browser/branding/nightly/default16.png Binary files differdeleted file mode 100644 index ace90e53c..000000000 --- a/browser/branding/nightly/default16.png +++ /dev/null diff --git a/browser/branding/nightly/default32.png b/browser/branding/nightly/default32.png Binary files differdeleted file mode 100644 index b62d0200f..000000000 --- a/browser/branding/nightly/default32.png +++ /dev/null diff --git a/browser/branding/nightly/default48.png b/browser/branding/nightly/default48.png Binary files differdeleted file mode 100644 index 88a307340..000000000 --- a/browser/branding/nightly/default48.png +++ /dev/null diff --git a/browser/branding/nightly/disk.icns b/browser/branding/nightly/disk.icns Binary files differdeleted file mode 100644 index c49b7b878..000000000 --- a/browser/branding/nightly/disk.icns +++ /dev/null diff --git a/browser/branding/nightly/document.icns b/browser/branding/nightly/document.icns Binary files differdeleted file mode 100644 index 98b461d75..000000000 --- a/browser/branding/nightly/document.icns +++ /dev/null diff --git a/browser/branding/nightly/document.ico b/browser/branding/nightly/document.ico Binary files differdeleted file mode 100644 index 796181004..000000000 --- a/browser/branding/nightly/document.ico +++ /dev/null diff --git a/browser/branding/nightly/dsstore b/browser/branding/nightly/dsstore Binary files differdeleted file mode 100644 index 657101d6e..000000000 --- a/browser/branding/nightly/dsstore +++ /dev/null diff --git a/browser/branding/nightly/firefox.VisualElementsManifest.xml b/browser/branding/nightly/firefox.VisualElementsManifest.xml deleted file mode 100644 index 7654e0ab7..000000000 --- a/browser/branding/nightly/firefox.VisualElementsManifest.xml +++ /dev/null @@ -1,8 +0,0 @@ -<Application xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'> - <VisualElements - ShowNameOnSquare150x150Logo='on' - Square150x150Logo='browser\VisualElements\VisualElements_150.png' - Square70x70Logo='browser\VisualElements\VisualElements_70.png' - ForegroundText='light' - BackgroundColor='#14171a'/> -</Application> diff --git a/browser/branding/nightly/firefox.icns b/browser/branding/nightly/firefox.icns Binary files differdeleted file mode 100644 index 858cb2a19..000000000 --- a/browser/branding/nightly/firefox.icns +++ /dev/null diff --git a/browser/branding/nightly/firefox.ico b/browser/branding/nightly/firefox.ico Binary files differdeleted file mode 100644 index 12bebb1c2..000000000 --- a/browser/branding/nightly/firefox.ico +++ /dev/null diff --git a/browser/branding/nightly/locales/browserconfig.properties b/browser/branding/nightly/locales/browserconfig.properties deleted file mode 100644 index 06cefece3..000000000 --- a/browser/branding/nightly/locales/browserconfig.properties +++ /dev/null @@ -1,6 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -# Do NOT localize or otherwise change these values -browser.startup.homepage=about:home diff --git a/browser/branding/nightly/locales/en-US/brand.dtd b/browser/branding/nightly/locales/en-US/brand.dtd deleted file mode 100644 index cf4596ae0..000000000 --- a/browser/branding/nightly/locales/en-US/brand.dtd +++ /dev/null @@ -1,9 +0,0 @@ -<!-- This Source Code Form is subject to the terms of the Mozilla Public - - License, v. 2.0. If a copy of the MPL was not distributed with this - - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - -<!ENTITY brandShorterName "Nightly"> -<!ENTITY brandShortName "Nightly"> -<!ENTITY brandFullName "Nightly"> -<!ENTITY vendorShortName "Mozilla"> -<!ENTITY trademarkInfo.part1 " "> diff --git a/browser/branding/nightly/locales/en-US/brand.properties b/browser/branding/nightly/locales/en-US/brand.properties deleted file mode 100644 index 8cd2c2ec9..000000000 --- a/browser/branding/nightly/locales/en-US/brand.properties +++ /dev/null @@ -1,10 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -brandShorterName=Nightly -brandShortName=Nightly -brandFullName=Nightly -vendorShortName=Mozilla - -syncBrandShortName=Sync diff --git a/browser/branding/nightly/locales/jar.mn b/browser/branding/nightly/locales/jar.mn deleted file mode 100644 index 63af8f6f9..000000000 --- a/browser/branding/nightly/locales/jar.mn +++ /dev/null @@ -1,12 +0,0 @@ -#filter substitution -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - - -@AB_CD@.jar: -% locale branding @AB_CD@ %locale/branding/ -# Nightly branding only exists in en-US - locale/branding/brand.dtd (en-US/brand.dtd) - locale/branding/brand.properties (en-US/brand.properties) - locale/branding/browserconfig.properties diff --git a/browser/branding/nightly/locales/moz.build b/browser/branding/nightly/locales/moz.build deleted file mode 100644 index 8bad13124..000000000 --- a/browser/branding/nightly/locales/moz.build +++ /dev/null @@ -1,9 +0,0 @@ -# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*- -# vim: set filetype=python: -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -DEFINES['MOZ_DISTRIBUTION_ID_UNQUOTED'] = CONFIG['MOZ_DISTRIBUTION_ID'] - -JAR_MANIFESTS += ['jar.mn']
\ No newline at end of file diff --git a/browser/branding/nightly/moz.build b/browser/branding/nightly/moz.build deleted file mode 100644 index 9045cee11..000000000 --- a/browser/branding/nightly/moz.build +++ /dev/null @@ -1,13 +0,0 @@ -# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*- -# vim: set filetype=python: -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -DIRS += ['content', 'locales'] - -DIST_SUBDIR = 'browser' -export('DIST_SUBDIR') - -include('../branding-common.mozbuild') -FirefoxBranding() diff --git a/browser/branding/nightly/mozicon128.png b/browser/branding/nightly/mozicon128.png Binary files differdeleted file mode 100644 index 4222e6814..000000000 --- a/browser/branding/nightly/mozicon128.png +++ /dev/null diff --git a/browser/branding/nightly/newtab.ico b/browser/branding/nightly/newtab.ico Binary files differdeleted file mode 100644 index a9b37c08c..000000000 --- a/browser/branding/nightly/newtab.ico +++ /dev/null diff --git a/browser/branding/nightly/newwindow.ico b/browser/branding/nightly/newwindow.ico Binary files differdeleted file mode 100644 index 553720771..000000000 --- a/browser/branding/nightly/newwindow.ico +++ /dev/null diff --git a/browser/branding/nightly/particles.bmp b/browser/branding/nightly/particles.bmp Binary files differdeleted file mode 100644 index ab74ce047..000000000 --- a/browser/branding/nightly/particles.bmp +++ /dev/null diff --git a/browser/branding/nightly/pbmode.ico b/browser/branding/nightly/pbmode.ico Binary files differdeleted file mode 100644 index 47677c13f..000000000 --- a/browser/branding/nightly/pbmode.ico +++ /dev/null diff --git a/browser/branding/nightly/pencil-rtl.bmp b/browser/branding/nightly/pencil-rtl.bmp Binary files differdeleted file mode 100644 index e50d92db7..000000000 --- a/browser/branding/nightly/pencil-rtl.bmp +++ /dev/null diff --git a/browser/branding/nightly/pencil.bmp b/browser/branding/nightly/pencil.bmp Binary files differdeleted file mode 100644 index 252c10f41..000000000 --- a/browser/branding/nightly/pencil.bmp +++ /dev/null diff --git a/browser/branding/nightly/pref/firefox-branding.js b/browser/branding/nightly/pref/firefox-branding.js deleted file mode 100644 index 359d6bb6e..000000000 --- a/browser/branding/nightly/pref/firefox-branding.js +++ /dev/null @@ -1,34 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -pref("startup.homepage_override_url", "https://www.mozilla.org/projects/firefox/%VERSION%/whatsnew/?oldversion=%OLD_VERSION%"); -pref("startup.homepage_welcome_url", "https://www.mozilla.org/projects/firefox/%VERSION%/firstrun/"); -pref("startup.homepage_welcome_url.additional", ""); -// The time interval between checks for a new version (in seconds) -pref("app.update.interval", 7200); // 2 hours -// The time interval between the downloading of mar file chunks in the -// background (in seconds) -// 0 means "download everything at once" -pref("app.update.download.backgroundInterval", 0); -// Give the user x seconds to react before showing the big UI. default=12 hours -pref("app.update.promptWaitTime", 43200); -// URL user can browse to manually if for some reason all update installation -// attempts fail. -pref("app.update.url.manual", "https://nightly.mozilla.org"); -// A default value for the "More information about this update" link -// supplied in the "An update is available" page of the update wizard. -pref("app.update.url.details", "https://nightly.mozilla.org"); - -// The number of days a binary is permitted to be old -// without checking for an update. This assumes that -// app.update.checkInstallTime is true. -pref("app.update.checkInstallTime.days", 2); - -// Give the user x seconds to reboot before showing a badge on the hamburger -// button. default=immediately -pref("app.update.badgeWaitTime", 0); - -// Number of usages of the web console or scratchpad. -// If this is less than 5, then pasting code into the web console or scratchpad is disabled -pref("devtools.selfxss.count", 5); diff --git a/browser/branding/nightly/wizHeader.bmp b/browser/branding/nightly/wizHeader.bmp Binary files differdeleted file mode 100644 index ac96070a8..000000000 --- a/browser/branding/nightly/wizHeader.bmp +++ /dev/null diff --git a/browser/branding/nightly/wizHeaderRTL.bmp b/browser/branding/nightly/wizHeaderRTL.bmp Binary files differdeleted file mode 100644 index 710af4a8e..000000000 --- a/browser/branding/nightly/wizHeaderRTL.bmp +++ /dev/null diff --git a/browser/branding/nightly/wizWatermark.bmp b/browser/branding/nightly/wizWatermark.bmp Binary files differdeleted file mode 100644 index 86d929cc1..000000000 --- a/browser/branding/nightly/wizWatermark.bmp +++ /dev/null diff --git a/browser/branding/official/VisualElements_150.png b/browser/branding/official/VisualElements_150.png Binary files differindex f46b957c2..70b256398 100644 --- a/browser/branding/official/VisualElements_150.png +++ b/browser/branding/official/VisualElements_150.png diff --git a/browser/branding/official/VisualElements_70.png b/browser/branding/official/VisualElements_70.png Binary files differindex b45a3400f..64ce3276d 100644 --- a/browser/branding/official/VisualElements_70.png +++ b/browser/branding/official/VisualElements_70.png diff --git a/browser/branding/official/firefox.VisualElementsManifest.xml b/browser/branding/official/basilisk.VisualElementsManifest.xml index d675d573f..d675d573f 100644 --- a/browser/branding/official/firefox.VisualElementsManifest.xml +++ b/browser/branding/official/basilisk.VisualElementsManifest.xml diff --git a/browser/branding/official/bgintro.bmp b/browser/branding/official/bgintro.bmp Binary files differdeleted file mode 100644 index 9c2fc80cf..000000000 --- a/browser/branding/official/bgintro.bmp +++ /dev/null diff --git a/browser/branding/official/branding.nsi b/browser/branding/official/branding.nsi index 5960f3107..58d7554df 100644 --- a/browser/branding/official/branding.nsi +++ b/browser/branding/official/branding.nsi @@ -8,24 +8,24 @@ # BrandFullNameInternal is used for some registry and file system values # instead of BrandFullName and typically should not be modified. -!define BrandFullNameInternal "Mozilla Firefox" -!define CompanyName "Mozilla Corporation" -!define URLInfoAbout "https://www.mozilla.org" -!define URLUpdateInfo "https://www.mozilla.org/firefox/${AppVersion}/releasenotes" -!define HelpLink "https://support.mozilla.org" +!define BrandFullNameInternal "Basilisk" +!define CompanyName "Moonchild Productions" +!define URLInfoAbout "https://www.basilisk-browser.org" +!define URLUpdateInfo "https://www.basilisk-browser.org/releasenotes.shtml" +!define HelpLink "https://www.basilisk-browser.org" ; The OFFICIAL define is a workaround to support different urls for Release and ; Beta since they share the same branding when building with other branches that ; set the update channel to beta. !define OFFICIAL -!define URLStubDownload "http://download.mozilla.org/?os=win&lang=${AB_CD}&product=firefox-latest" -!define URLManualDownload "https://www.mozilla.org/${AB_CD}/firefox/installer-help/?channel=release&installer_lang=${AB_CD}" -!define URLSystemRequirements "https://www.mozilla.org/firefox/system-requirements/" +!define URLStubDownload "" +!define URLManualDownload "" +!define URLSystemRequirements "http://www.basilisk-browser.org/requirements.shtml" !define Channel "release" # The installer's certificate name and issuer expected by the stub installer -!define CertNameDownload "Mozilla Corporation" -!define CertIssuerDownload "DigiCert SHA2 Assured ID Code Signing CA" +!define CertNameDownload "" +!define CertIssuerDownload "" # Dialog units are used so the UI displays correctly with the system's DPI # settings. diff --git a/browser/branding/official/clock.bmp b/browser/branding/official/clock.bmp Binary files differdeleted file mode 100644 index 7da034d3b..000000000 --- a/browser/branding/official/clock.bmp +++ /dev/null diff --git a/browser/branding/official/configure.sh b/browser/branding/official/configure.sh index 92ef14e03..49126c4aa 100644 --- a/browser/branding/official/configure.sh +++ b/browser/branding/official/configure.sh @@ -2,4 +2,4 @@ # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. -MOZ_APP_DISPLAYNAME=Firefox +MOZ_APP_DISPLAYNAME=Basilisk diff --git a/browser/branding/official/content/about-logo.png b/browser/branding/official/content/about-logo.png Binary files differindex c7c5ac2b8..a6c89cf2c 100644 --- a/browser/branding/official/content/about-logo.png +++ b/browser/branding/official/content/about-logo.png diff --git a/browser/branding/official/content/about-logo@2x.png b/browser/branding/official/content/about-logo@2x.png Binary files differindex 624ad150f..761e47f6e 100644 --- a/browser/branding/official/content/about-logo@2x.png +++ b/browser/branding/official/content/about-logo@2x.png diff --git a/browser/branding/official/content/about-wordmark.png b/browser/branding/official/content/about-wordmark.png Binary files differindex c9651b520..4ac8d3557 100644 --- a/browser/branding/official/content/about-wordmark.png +++ b/browser/branding/official/content/about-wordmark.png diff --git a/browser/branding/official/content/about.png b/browser/branding/official/content/about.png Binary files differindex 7d78057dc..4fc6e5c36 100644 --- a/browser/branding/official/content/about.png +++ b/browser/branding/official/content/about.png diff --git a/browser/branding/official/content/aboutDialog.css b/browser/branding/official/content/aboutDialog.css index 46ba1b771..631f06a72 100644 --- a/browser/branding/official/content/aboutDialog.css +++ b/browser/branding/official/content/aboutDialog.css @@ -28,8 +28,14 @@ #rightBox { margin-left: 30px; margin-right: 30px; + background-image: url("chrome://branding/content/about-wordmark.png"); + background-repeat: no-repeat; + /* padding-top creates room for the wordmark */ + padding-top: 38px; + margin-top:20px; } + #updateDeck > hbox > label:not([class="text-link"]) { color: #909090; } diff --git a/browser/branding/official/content/icon48.png b/browser/branding/official/content/icon48.png Binary files differindex 10de89172..e7dcd8ae2 100644 --- a/browser/branding/official/content/icon48.png +++ b/browser/branding/official/content/icon48.png diff --git a/browser/branding/official/content/icon64.png b/browser/branding/official/content/icon64.png Binary files differindex ac94fb47d..7bad34f8b 100644 --- a/browser/branding/official/content/icon64.png +++ b/browser/branding/official/content/icon64.png diff --git a/browser/branding/official/content/identity-icons-brand.svg b/browser/branding/official/content/identity-icons-brand.svg index 380e4e597..80d2155c2 100644 --- a/browser/branding/official/content/identity-icons-brand.svg +++ b/browser/branding/official/content/identity-icons-brand.svg @@ -1,7 +1,77 @@ -<?xml version="1.0" encoding="utf-8"?> +<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> -<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32"> - <path fill="#ff9500" d="M26.797,6.125 C26.719,6.050 26.674,6.013 26.674,6.013 C26.715,6.045 26.756,6.082 26.797,6.125 M28.924,21.127 C28.947,20.948 28.949,20.780 28.929,20.626 C28.501,21.359 27.844,22.025 27.228,22.905 C27.980,22.421 28.624,21.866 28.924,21.127 ZM30.097,13.924 C30.082,13.747 30.062,13.570 30.036,13.394 C29.974,12.946 29.875,12.504 29.728,12.076 C29.735,12.102 29.741,12.129 29.747,12.155 C29.737,12.124 29.731,12.107 29.731,12.107 C29.731,12.107 29.614,12.472 29.435,13.070 C29.423,14.290 29.290,15.417 29.094,16.268 C29.419,15.962 29.657,15.599 29.820,15.196 C29.748,15.461 29.649,15.713 29.520,15.947 C29.361,16.217 29.182,16.436 29.009,16.610 C28.821,16.797 28.641,16.932 28.500,17.024 C28.543,16.905 28.585,16.773 28.625,16.631 C28.626,16.629 28.626,16.628 28.627,16.626 C28.637,16.590 28.647,16.552 28.657,16.513 C28.761,16.176 28.854,15.828 28.934,15.474 C29.049,14.961 29.137,14.433 29.192,13.898 C29.300,12.857 29.284,11.787 29.104,10.744 C29.015,10.227 28.886,9.717 28.712,9.220 C28.480,8.559 28.197,8.001 27.916,7.544 C27.895,7.508 27.874,7.472 27.853,7.436 C27.760,7.280 27.665,7.132 27.570,6.994 C27.258,6.543 26.939,6.200 26.674,6.013 C26.715,6.045 26.756,6.082 26.797,6.125 C26.719,6.050 26.674,6.013 26.674,6.013 C26.694,6.035 26.712,6.058 26.732,6.081 C26.682,6.033 26.653,6.008 26.653,6.008 C26.653,6.008 26.682,6.170 26.733,6.456 C25.969,5.218 24.807,4.635 24.807,4.635 C24.807,4.635 24.902,4.945 25.050,5.391 C25.741,5.949 26.345,6.571 26.869,7.227 C26.871,7.238 26.873,7.250 26.875,7.261 C26.905,7.435 26.938,7.624 26.973,7.826 C26.880,7.700 26.782,7.575 26.683,7.451 C25.589,5.958 24.211,4.706 22.611,3.779 C22.625,3.783 22.600,3.776 22.613,3.780 C20.672,2.647 18.429,2.000 16.039,2.000 C12.495,2.000 9.273,3.423 6.880,5.744 C6.814,5.809 7.271,6.270 7.404,6.311 C8.081,6.106 8.838,6.051 9.423,6.120 C9.705,5.897 9.663,5.963 9.961,5.769 L9.964,5.772 C11.767,4.606 13.854,3.982 16.035,3.982 C18.042,3.982 19.969,4.510 21.669,5.503 C22.118,5.635 22.683,5.830 23.182,6.091 C22.663,5.187 22.132,4.560 21.761,4.182 C23.311,5.364 24.150,6.425 24.701,7.396 C24.746,7.475 24.789,7.553 24.830,7.631 C24.928,7.816 25.017,7.998 25.099,8.177 C24.570,7.618 23.753,7.042 23.039,6.772 C22.981,6.750 22.924,6.730 22.868,6.712 C22.708,6.662 22.555,6.628 22.414,6.617 C23.550,7.488 25.407,9.978 25.432,13.744 C25.432,13.765 25.432,13.786 25.432,13.807 C25.432,14.010 25.428,14.216 25.417,14.427 C25.207,13.971 24.877,13.340 24.562,12.869 C24.483,12.751 24.405,12.644 24.330,12.551 C24.265,12.471 24.202,12.400 24.143,12.346 C24.479,15.517 24.324,16.750 24.116,17.651 C24.096,17.734 24.077,17.815 24.057,17.894 C24.015,18.058 23.973,18.216 23.934,18.378 C23.920,18.257 23.899,18.145 23.874,18.040 C23.816,17.791 23.735,17.585 23.666,17.424 C23.643,17.372 23.621,17.322 23.603,17.280 C23.603,17.280 23.581,17.854 23.325,18.780 C23.199,19.234 23.018,19.771 22.754,20.367 C22.294,21.408 21.823,21.903 21.501,22.062 C21.397,22.113 21.309,22.129 21.242,22.117 C21.167,22.112 21.126,22.079 21.127,22.076 C21.135,22.001 21.143,21.926 21.146,21.854 C21.150,21.754 21.145,21.662 21.119,21.593 C21.119,21.593 20.862,21.684 20.697,21.924 C20.630,22.020 20.544,22.115 20.431,22.203 C20.411,22.219 20.614,21.936 20.599,21.949 C20.499,22.033 20.392,22.130 20.285,22.245 C20.170,22.368 20.059,22.494 19.954,22.609 C19.699,22.887 19.483,23.095 19.352,23.001 C19.437,22.975 19.513,22.906 19.572,22.818 C19.635,22.726 19.680,22.613 19.699,22.500 C19.544,22.612 19.152,22.914 18.272,23.049 C18.109,23.074 17.707,23.146 17.127,23.121 C16.424,23.090 15.460,22.916 14.345,22.341 C14.578,22.313 14.903,22.241 15.196,22.312 C15.275,22.331 15.352,22.360 15.424,22.405 C15.392,22.369 15.355,22.338 15.315,22.310 C14.933,22.037 14.212,22.084 13.681,21.911 C13.170,21.744 12.503,21.005 12.119,20.631 C12.263,20.667 12.407,20.696 12.551,20.721 C12.652,20.738 12.752,20.753 12.852,20.765 C13.008,20.784 13.164,20.798 13.319,20.805 C14.486,20.856 15.595,20.569 16.313,20.063 C17.285,19.377 17.861,18.876 18.378,18.994 C18.428,19.006 18.476,19.010 18.522,19.010 C18.543,19.010 18.563,19.009 18.583,19.007 C18.867,18.975 19.053,18.730 19.002,18.441 C18.983,18.332 18.931,18.217 18.836,18.104 C18.561,17.778 18.016,17.375 17.274,17.265 C16.935,17.215 16.556,17.226 16.142,17.333 C15.385,17.528 14.711,18.047 13.824,18.051 C13.526,18.053 13.204,17.996 12.846,17.850 C12.759,17.815 12.671,17.774 12.580,17.728 C12.489,17.681 12.877,17.783 12.781,17.725 C12.508,17.621 12.011,17.386 11.888,17.297 C11.868,17.282 12.094,17.339 12.070,17.324 C10.721,16.501 10.809,15.842 10.809,15.435 C10.809,15.270 10.858,15.077 10.953,14.899 C11.046,14.723 11.183,14.563 11.362,14.461 C11.475,14.502 11.562,14.541 11.616,14.567 C11.655,14.586 11.677,14.598 11.677,14.598 C11.677,14.598 11.664,14.576 11.644,14.546 C11.613,14.499 11.565,14.428 11.530,14.386 C11.544,14.381 11.557,14.377 11.571,14.373 C11.665,14.406 11.829,14.468 11.985,14.532 C12.092,14.576 12.195,14.621 12.268,14.659 C12.514,14.786 12.596,14.916 12.596,14.916 C12.596,14.916 12.654,14.879 12.594,14.749 C12.583,14.726 12.560,14.683 12.519,14.630 C12.465,14.561 12.378,14.473 12.239,14.386 C12.244,14.386 12.248,14.385 12.251,14.385 C12.379,14.437 12.514,14.503 12.663,14.590 C12.670,14.555 12.679,14.520 12.687,14.484 C12.688,14.479 12.690,14.475 12.691,14.470 C12.693,14.462 12.695,14.454 12.697,14.446 C12.704,14.416 12.711,14.385 12.718,14.354 C12.730,14.301 12.740,14.245 12.748,14.185 C12.764,14.058 12.768,13.913 12.740,13.731 C12.695,13.446 12.701,13.373 12.632,13.269 C12.573,13.181 12.648,13.142 12.740,13.221 C12.718,13.151 12.687,13.081 12.650,13.010 C12.650,13.009 12.651,13.009 12.651,13.007 C12.659,12.968 12.693,12.919 12.745,12.864 C12.758,12.849 12.774,12.834 12.790,12.818 C12.805,12.803 12.821,12.789 12.839,12.773 C13.359,12.313 14.782,11.539 14.908,11.443 C15.118,11.283 15.332,11.035 15.466,10.750 C15.508,10.672 15.544,10.578 15.571,10.468 C15.606,10.323 15.625,10.149 15.614,9.937 C15.606,9.764 15.537,9.634 14.917,9.568 C14.584,9.533 14.091,9.516 13.362,9.521 C13.335,9.521 13.309,9.521 13.282,9.521 C12.690,9.526 12.305,9.171 12.073,8.833 C12.025,8.759 11.984,8.689 11.946,8.626 C11.895,8.532 11.861,8.448 11.834,8.381 C11.917,8.070 12.028,7.772 12.165,7.489 C12.456,6.890 12.871,6.355 13.419,5.893 C13.468,5.850 13.226,5.921 13.272,5.877 C13.327,5.824 13.669,5.655 13.733,5.618 C13.772,5.595 13.692,5.556 13.557,5.528 C13.549,5.527 13.541,5.525 13.532,5.524 C13.380,5.496 13.167,5.485 12.972,5.527 C12.581,5.610 12.505,5.658 12.303,5.765 C12.385,5.678 12.650,5.540 12.585,5.554 C12.161,5.652 11.661,5.940 11.235,6.251 C11.231,6.211 11.235,6.179 11.243,6.116 C11.042,6.223 10.557,6.609 10.433,6.903 C10.433,6.839 10.433,6.807 10.425,6.736 C10.299,6.856 10.177,6.996 10.065,7.151 C10.055,7.165 10.044,7.178 10.034,7.192 C10.033,7.195 10.031,7.197 10.029,7.199 C9.691,7.112 9.367,7.055 9.056,7.023 C8.305,6.944 7.631,7.012 7.032,7.178 C6.951,7.201 6.871,7.224 6.793,7.250 C6.579,7.089 6.235,6.843 5.692,5.978 C5.659,5.926 5.656,6.097 5.626,6.042 C5.468,5.748 5.327,5.300 5.258,4.892 C5.234,4.750 5.218,4.613 5.214,4.489 C5.214,4.489 5.050,4.588 4.873,4.889 C4.806,5.003 4.737,5.146 4.675,5.324 C4.662,5.361 4.649,5.399 4.637,5.439 C4.596,5.570 4.568,5.648 4.539,5.720 C4.530,5.742 4.556,5.482 4.546,5.502 C4.530,5.537 4.502,5.579 4.472,5.627 C4.431,5.692 4.385,5.769 4.356,5.851 C4.349,5.870 4.343,5.889 4.338,5.909 C4.308,6.034 4.259,6.110 4.239,6.266 C4.238,6.270 4.237,6.273 4.235,6.276 C4.234,6.261 4.233,6.230 4.231,6.200 C4.229,6.152 4.225,6.105 4.218,6.123 C4.118,6.397 4.024,6.712 3.948,7.067 C3.838,7.628 3.726,8.395 3.793,9.368 C3.792,9.403 3.795,9.438 3.797,9.472 C3.800,9.514 3.803,9.555 3.802,9.594 C3.461,10.078 3.239,10.494 3.153,10.699 C3.066,10.873 2.979,11.068 2.893,11.284 C2.564,12.102 2.241,13.234 1.969,14.813 C1.969,14.813 2.200,14.061 2.661,13.210 C2.321,14.282 2.055,15.950 2.211,18.452 C2.215,18.397 2.248,18.101 2.322,17.660 C2.360,17.435 2.408,17.173 2.470,16.885 C2.473,16.950 2.477,17.015 2.482,17.081 C2.497,17.315 2.519,17.556 2.548,17.803 C2.565,17.949 2.585,18.097 2.607,18.248 C2.814,19.617 3.265,21.166 4.197,22.811 C5.154,24.502 7.676,28.430 14.005,29.900 C13.826,29.847 13.665,29.780 13.524,29.710 C13.117,29.508 12.879,29.280 12.879,29.280 C12.879,29.280 13.080,29.346 13.407,29.439 C14.081,29.630 15.290,29.931 16.388,29.990 C16.586,30.000 16.781,30.004 16.968,29.996 C16.428,29.900 16.320,29.631 16.320,29.631 C16.320,29.631 21.233,29.917 23.785,27.837 C23.835,27.796 23.885,27.754 23.934,27.711 C23.938,27.709 23.941,27.708 23.945,27.706 C24.327,27.379 24.606,27.021 24.755,26.675 C24.636,26.734 24.518,26.789 24.403,26.841 C24.025,27.251 23.564,27.586 23.055,27.860 C22.590,27.996 22.118,28.072 21.749,28.108 C21.581,28.124 21.434,28.132 21.319,28.133 C21.594,27.872 21.957,27.681 22.387,27.495 C23.024,27.219 23.811,26.955 24.683,26.496 C24.685,26.495 24.687,26.494 24.689,26.493 C24.741,26.466 24.793,26.437 24.845,26.409 C25.598,25.996 26.410,25.432 27.244,24.585 C28.038,23.779 28.427,23.083 28.643,22.448 C28.703,22.270 28.750,22.097 28.788,21.928 C28.852,21.645 28.893,21.372 28.934,21.104 C28.934,21.103 28.934,21.101 28.934,21.100 C28.934,21.102 28.933,21.103 28.933,21.105 C28.926,21.144 28.918,21.183 28.910,21.221 C28.671,22.267 27.797,22.972 26.794,23.585 C26.608,23.698 26.417,23.808 26.226,23.917 C26.339,23.696 26.459,23.491 26.582,23.294 C26.586,23.289 26.589,23.284 26.592,23.279 C26.590,23.284 26.588,23.288 26.586,23.293 C26.573,23.319 26.561,23.344 26.550,23.367 C26.567,23.339 26.585,23.311 26.603,23.283 C26.798,22.973 27.012,22.669 27.232,22.372 C27.760,21.689 28.278,21.118 28.621,20.490 C28.672,20.397 28.726,20.292 28.782,20.177 C28.803,20.134 28.825,20.090 28.846,20.043 C29.220,19.292 29.607,18.267 29.857,17.120 C29.969,16.606 30.053,16.067 30.097,15.517 C30.138,14.992 30.142,14.457 30.097,13.924 Z"/> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="32" + height="32" + viewBox="0 0 32 32" + id="svg2" + version="1.1" + inkscape:version="0.91 r13725" + sodipodi:docname="identity-icons-brand.svg"> + <metadata + id="metadata10"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs8" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="909" + inkscape:window-height="821" + id="namedview6" + showgrid="false" + inkscape:zoom="7.375" + inkscape:cx="16" + inkscape:cy="16" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="0" + inkscape:current-layer="svg2" /> + <g + transform="matrix(0.09806566,0,0,0.09806566,0.8046769,0.794967)" + id="g4695"> + <circle + r="152.95874" + cy="155.04951" + cx="154.9505" + id="path4138" + style="fill:#159677;fill-opacity:1;stroke:none;stroke-width:1.02310705;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0" /> + <ellipse + ry="141.58415" + rx="138.61386" + cy="155.54456" + cx="156.43564" + id="path4136" + style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.65116278" /> + <path + sodipodi:nodetypes="csssssssssssssssssssssssssssssssssccssssssssssssssssssssssscssssssssssssssssssscssssssssssscssssssssssssssssscs" + inkscape:connector-curvature="0" + id="path4158" + d="m 127.95182,303.54475 c -5.42765,-1.02093 -14.92656,-3.62133 -21.1087,-5.77867 -6.18214,-2.15735 -16.30326,-6.64613 -22.491383,-9.9751 -6.188122,-3.32895 -15.51351,-9.36105 -20.723085,-13.40464 -5.209574,-4.04361 -13.693816,-11.9823 -18.853871,-17.64159 -5.160055,-5.65926 -12.06401,-14.49733 -15.342124,-19.64014 -3.278112,-5.14282 -8.18276,-14.29065 -10.899218,-20.3285 -2.716457,-6.03785 -6.483488,-16.75495 -8.371181,-23.8158 -3.1894021,-11.92984 -3.4283741,-14.53982 -3.3785531,-36.89976 0.04858,-21.80859 0.360979,-25.24403 3.3358421,-36.68566 1.805227,-6.94309 5.548131,-17.66019 8.317568,-23.815802 2.769436,-6.15561 7.62586,-15.25077 10.792053,-20.21147 3.166194,-4.96071 9.969264,-13.68367 15.117932,-19.38435 5.148669,-5.70068 13.584686,-13.67575 18.746703,-17.72237 5.162016,-4.04663 14.534575,-10.17782 20.827907,-13.62488 6.29333,-3.447075 16.4997,-8.008262 22.68081,-10.135983 6.18112,-2.127723 16.53517,-4.7966559 23.00901,-5.9309599 6.47383,-1.134304 18.3156,-2.062372 26.31504,-2.062372 7.99944,0 19.82639,0.945049 26.28214,2.10011 21.43411,3.8349939 41.18811,12.0048139 59.18524,24.4777049 5.61631,3.89237 14.25757,10.97893 19.20284,15.7479 4.94527,4.76898 12.60023,13.67935 17.01106,19.80084 4.4108,6.12148 10.53577,16.44926 13.61104,22.95063 3.07526,6.50136 6.78194,15.890682 8.23707,20.865142 4.02216,13.75005 6.31582,29.59534 6.31582,43.63152 0,6.96612 -0.83802,17.67103 -1.86224,23.78868 -1.02423,6.11765 -3.25757,15.70525 -4.96297,21.3058 -1.70539,5.60055 -5.38687,14.82601 -8.18104,20.50104 -2.79419,5.67501 -7.64271,14.05839 -10.77448,18.62971 -3.13178,4.57132 -9.10633,12.11081 -13.27676,16.75444 -4.17045,4.64364 -12.40091,12.21847 -18.28992,16.83296 -5.88901,4.61451 -15.53733,10.99562 -21.44069,14.18023 -5.90338,3.18462 -15.73944,7.53716 -21.8579,9.67228 -6.11847,2.13512 -16.11243,4.78805 -22.20881,5.89538 -13.76317,2.49991 -41.47336,2.46144 -54.96515,-0.0763 z m 95.95681,-34.54419 c 4.84748,-2.98012 11.90936,-7.88086 15.69306,-10.89052 9.51274,-7.5667 22.9262,-22.65624 27.77856,-31.24963 2.2286,-3.94679 5.30879,-9.3466 6.84486,-11.9996 3.49738,-6.0404 8.26443,-19.14099 10.98415,-30.18613 1.14496,-4.6498 2.3724,-15.185 2.72766,-23.41156 0.47109,-10.90872 0.0836,-18.06479 -1.43178,-26.43737 -1.14274,-6.31401 -3.75449,-16.30674 -5.8039,-22.20607 -2.04939,-5.89934 -6.17923,-15.072922 -9.17742,-20.385742 -2.99817,-5.31282 -8.76002,-13.75669 -12.80407,-18.76417 -4.04408,-5.00747 -11.91062,-12.91922 -17.48121,-17.58167 -5.57059,-4.66246 -15.10386,-11.18977 -21.18507,-14.50516 -6.0812,-3.31537 -16.39496,-7.78029 -22.91947,-9.92203 -6.52451,-2.14175 -17.09287,-4.62781 -23.48523,-5.5246 -15.66988,-2.19833 -36.24257,-0.92992 -51.7837,3.19271 -6.71499,1.78131 -17.46036,5.82975 -23.8786,8.99654 -6.41823,3.16679 -15.183985,8.24369 -19.479452,11.282 -4.29547,3.03832 -11.892389,9.56341 -16.882046,14.5002 -4.989657,4.93681 -11.871045,13.20489 -15.291972,18.37351 -3.420927,5.16863 -8.254042,13.61841 -10.740253,18.777312 -2.486214,5.1589 -5.979551,14.52352 -7.762975,20.81027 -2.469225,8.70428 -3.404826,15.48348 -3.922826,28.42407 -0.65147,16.27502 0.295164,26.82296 3.467979,38.64214 0.725043,2.70089 1.767851,4.62129 2.317351,4.26755 0.549502,-0.35373 1.392334,-6.06899 1.872964,-12.70056 1.190411,-16.42492 6.155827,-46.05672 10.044947,-59.9446 1.762181,-6.29266 4.82574,-14.77934 6.807909,-18.8593 1.982169,-4.079952 5.732589,-9.694472 8.334265,-12.476692 2.601677,-2.78222 7.577332,-6.41018 11.057011,-8.06215 3.90144,-1.85219 12.070798,-3.809 21.311209,-5.1047 20.984849,-2.94249 33.033109,-5.449 44.795139,-9.31916 9.92991,-3.26731 10.32965,-3.29583 18.93362,-1.35105 4.83424,1.0927 13.35945,3.82237 18.94491,6.06593 5.58545,2.24356 13.99331,7.03655 18.6841,10.65107 4.69079,3.61453 9.93351,7.32393 11.65049,8.24313 1.71697,0.91919 4.95268,2.08197 7.19047,2.58395 2.23778,0.50198 4.62594,1.99721 5.30702,3.32274 0.68107,1.32554 1.23832,3.891442 1.23832,5.702012 0,1.81056 1.63028,5.96953 3.62285,9.24215 3.21856,5.28622 4.73947,10.04311 10.08948,31.55662 0.92947,3.73762 4.04159,8.72905 9.52741,15.28064 4.48088,5.35142 10.74764,11.59353 13.92613,13.87134 3.17848,2.2778 10.30492,5.83438 15.83652,7.9035 l 10.05747,3.76204 -7.71646,-0.71854 c -4.24405,-0.3952 -10.56564,-1.84618 -14.04798,-3.22439 -4.67209,-1.84908 -6.33154,-2.07443 -6.33154,-0.85974 0,0.90535 1.74283,5.6497 3.87296,10.54298 2.13014,4.89327 4.38109,10.38816 5.00212,12.21084 0.96638,2.8362 0.90309,2.99055 -0.439,1.07068 -0.8625,-1.2338 -3.41486,-5.637 -5.67192,-9.78491 -2.25707,-4.14788 -9.19573,-13.6736 -15.41923,-21.16827 -6.22352,-7.49466 -12.86479,-16.84574 -14.7584,-20.78018 -1.89359,-3.93445 -4.63511,-11.25056 -6.09226,-16.25804 -1.45714,-5.00747 -3.96487,-10.79642 -5.57274,-12.86432 l -2.92338,-3.75984 -7.71296,2.78024 c -4.24214,1.52914 -13.61474,4.23274 -20.82802,6.00801 -7.21327,1.77528 -15.50448,4.48222 -18.4249,6.01543 -7.94513,4.17117 -19.55264,13.14845 -26.16757,20.23806 -7.01295,7.51618 -11.57143,17.33819 -10.36686,22.33714 0.45791,1.90038 2.63917,5.79906 4.84724,8.66374 2.20805,2.86468 6.79857,10.37507 10.20113,16.68975 3.40258,6.31467 9.43687,15.20572 13.40954,19.75788 3.97268,4.55215 11.5586,11.46227 16.85758,15.35582 5.299,3.89355 16.92011,14.17072 25.82468,22.83815 8.90456,8.66743 16.73876,15.75898 17.4093,15.75898 0.67056,0 5.18531,-2.43829 10.03279,-5.41843 z M 161.46447,98.864488 c 1.7617,-0.69765 3.20307,-2.09825 3.20307,-3.11245 0,-1.0142 -0.88883,-2.19927 -1.97519,-2.63348 -2.53984,-1.01516 -8.49431,-1.01516 -11.03414,0 -1.08636,0.43421 -1.97519,1.5757 -1.97519,2.53666 0,2.02856 3.43173,4.380972 6.47443,4.438172 1.15718,0.0218 3.54534,-0.531252 5.30702,-1.228902 z" + style="fill:#159677;fill-opacity:1;stroke:#159677;stroke-width:1.00678515;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.65116278" /> + </g> </svg> diff --git a/browser/branding/official/content/silhouette-40.svg b/browser/branding/official/content/silhouette-40.svg index 5a41a1c3f..c00a38cb1 100644 --- a/browser/branding/official/content/silhouette-40.svg +++ b/browser/branding/official/content/silhouette-40.svg @@ -1,26 +1,58 @@ -<?xml version="1.0" encoding="utf-8"?>
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-45 31 40 40">
- <path fill="#ccc" d="M-14.1,54.7c0.7-1.4,1.7-4.4,0.8-6.9c0,0,0,0,0,0.1l0,0c0,0-0.2,0.5-0.4,1.3c0-0.1,0-0.2,0-0.3
- c0.1-0.9,0-1.9-0.1-2.9c-0.3-1.5-1.4-2.8-2-3.2c0,0,0.1,0,0.1,0.1c-0.1-0.1-0.1-0.1-0.1-0.1s0,0.1,0.1,0.4c-0.7-1.1-1.6-1.5-1.6-1.5
- s0,0.2,0.1,0.5c-2-1.9-4.7-3-7.6-3c-3,0-5.7,1.2-7.8,3.1c0.1,0.1,0.2,0.3,0.4,0.5c0,0,0.8-0.1,1.7-0.1c1.7-1.2,3.6-1.8,5.7-1.8
- c2.6,0,5.1,1.1,7,3c-0.2-0.1-0.1,0,0,0.1c-0.6-0.4-1.2-0.8-1.7-0.8c1,0.8,2.6,2.7,2.4,6.2c-0.3-0.6-0.6-1-0.9-1.3
- c0.4,3.5,0,4.2-0.2,5.1c0-0.4-0.2-0.7-0.3-0.9c0,0,0,1.1-0.7,2.6c-0.5,1.2-1.1,1.5-1.3,1.5c-0.2,0-0.1-0.2-0.1-0.4
- c0,0-0.4,0.2-0.7,0.6c-0.3,0.4-0.6,0.8-0.8,0.6c0.1-0.1,0.2-0.3,0.3-0.4c-0.1,0.1-0.5,0.4-1.2,0.5c-0.3,0-1.6,0.3-3.3-0.6
- c0.3,0,0.6-0.1,0.9,0.1c-0.3-0.3-1-0.3-1.5-0.4c-0.5-0.4-1.1-1-1.4-1.4c1.3,0.3,2.8,0.1,3.6-0.5s1.3-1,1.8-0.9
- c0.4,0.1,0.7-0.4,0.4-0.8c-0.3-0.4-1.2-1-2.3-0.7c-0.8,0.2-1.8,1.1-3.3,0.2c-1.3-0.8-1.3-1.4-1.3-1.8c0-0.3,0.2-0.7,0.5-0.8
- c0.2,0.1,0.3,0.1,0.3,0.1s-0.1-0.1-0.1-0.2l0,0c0.1,0,0.4,0.2,0.6,0.2c0.2,0.1,0.3,0.2,0.3,0.2s0,0,0-0.1c0,0-0.1-0.2-0.3-0.3l0,0
- c0.1,0,0.2,0.1,0.4,0.2c0-0.2,0.1-0.4,0.1-0.7c0-0.2,0-0.3-0.1-0.4c-0.1-0.1,0-0.1,0.1,0c0-0.1,0-0.1-0.1-0.2l0,0c0,0,0,0,0-0.1
- c0.2-0.3,1.8-1.2,1.9-1.3c0.2-0.1,0.3-0.3,0.4-0.5c0.2-0.1,0.3-0.5,0.3-0.8c0-0.1-0.2-0.3-0.4-0.3c-0.1,0-0.4-0.1-0.6,0l0,0
- c-0.3,0-0.7,0-1.2,0s-0.8-0.3-1-0.6c0-0.1-0.1-0.1-0.1-0.2c0-0.1-0.1-0.2-0.1-0.2c0.2-0.8,0.7-1.5,1.4-2.1c0,0-0.2,0-0.1,0
- c0,0,0.3-0.2,0.4-0.2c0.1,0-0.3-0.1-0.6-0.1c-0.5,0.2-0.6,0.2-0.8,0.3c0.1-0.1,0.3-0.2,0.2-0.2c-0.3,0.1-0.7,0.4-1.1,0.6v-0.1
- c-0.2,0.1-0.6,0.4-0.7,0.7c0-0.1,0-0.1,0-0.1c-0.1,0-0.2,0.2-0.3,0.3l0,0c-1.1-0.3-2-0.2-2.8,0c-0.2-0.1-0.6-0.5-0.9-1
- c0,0,0,0.1-0.1,0.1c-0.1-0.4-0.3-0.9-0.3-1.3v-0.1c0,0-0.1,0.1-0.3,0.3c-0.1,0.2-0.2,0.3-0.2,0.5c0,0.1-0.1,0.2-0.1,0.2v-0.2
- c0,0.1-0.1,0.2-0.2,0.3c0,0.2,0,0.3-0.1,0.4l0,0c0,0,0-0.2,0-0.1c-0.1,0.2-0.2,0.5-0.2,0.8c-0.1,0.3-0.1,0.5-0.1,0.8s0,0.7,0,1.2
- c0,0.1,0,0.1,0,0.2c-0.3,0.4-0.5,0.7-0.6,0.9c-0.4,0.7-0.7,1.8-1,3.5c0,0,0.2-0.6,0.6-1.3l0,0c-0.3,0.9-0.5,2.3-0.4,4.4
- c0-0.1,0.1-0.6,0.2-1.3c0.1,1.4,0.5,3.1,1.5,5c0.8,1.4,1.7,2.4,2.7,3.2c0.2,0.2,0.4,0.3,0.6,0.5c1.3,1,3.3,2.1,5,2.4
- c-0.6-0.2-1-0.5-1-0.5s2,0.7,3.5,0.6c-0.5-0.1-0.6-0.3-0.6-0.3s4.2,0.2,6.4-1.5c0.5-0.4,0.8-0.8,0.9-1.2c0.6-0.4,1.3-0.8,2-1.6
- c1.2-1.2,1.3-2.1,1.4-3v0.1C-14,55.2-14,54.9-14.1,54.7z"/>
-</svg>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- This Source Code Form is subject to the terms of the Mozilla Public + - License, v. 2.0. If a copy of the MPL was not distributed with this + - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + viewBox="-45 31 40 40" + id="svg2" + version="1.1" + inkscape:version="0.91 r13725" + sodipodi:docname="silhouette-40.svg"> + <metadata + id="metadata10"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs8" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1365" + inkscape:window-height="882" + id="namedview6" + showgrid="false" + inkscape:zoom="5.9" + inkscape:cx="20" + inkscape:cy="20" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="0" + inkscape:current-layer="svg2" /> + <path + style="fill:#cdcdcd;fill-opacity:1;stroke:none;stroke-width:0.09873105;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.65116278" + d="m -27.647643,65.562283 c -0.532266,-0.100118 -1.463783,-0.355128 -2.070039,-0.566689 -0.606256,-0.211562 -1.59879,-0.651757 -2.205632,-0.978215 -0.606843,-0.326455 -1.521343,-0.917997 -2.032223,-1.314534 -0.510881,-0.39654 -1.342893,-1.175053 -1.848918,-1.730035 -0.506024,-0.554979 -1.183065,-1.42169 -1.504535,-1.926023 -0.32147,-0.504334 -0.802448,-1.401422 -1.068839,-1.993528 -0.266391,-0.592105 -0.635808,-1.643085 -0.820925,-2.335512 -0.312771,-1.169907 -0.336206,-1.425857 -0.331321,-3.618599 0.0048,-2.138674 0.0354,-2.475573 0.327132,-3.597604 0.177031,-0.680878 0.544081,-1.731858 0.815668,-2.335512 0.271586,-0.603654 0.747835,-1.495577 1.05833,-1.982051 0.310495,-0.486475 0.977642,-1.341898 1.48255,-1.900939 0.504907,-0.559041 1.332191,-1.341122 1.838407,-1.737956 0.506217,-0.396836 1.425343,-0.998095 2.042503,-1.336133 0.617159,-0.33804 1.618054,-0.785335 2.224208,-0.993992 0.606156,-0.208656 1.621533,-0.470387 2.256394,-0.581623 0.634861,-0.111237 1.796132,-0.202248 2.580602,-0.202248 0.78447,0 1.944288,0.09268 2.577375,0.205948 2.101951,0.376082 4.03914,1.17726 5.80404,2.400423 0.550767,0.381708 1.398178,1.076656 1.883139,1.544328 0.484961,0.467673 1.23565,1.341474 1.668201,1.941782 0.432548,0.600307 1.033197,1.613108 1.334776,2.250669 0.301577,0.63756 0.665075,1.55833 0.807773,2.046154 0.394436,1.348408 0.619365,2.902287 0.619365,4.278754 0,0.683137 -0.08218,1.732921 -0.182621,2.332852 -0.100442,0.599932 -0.319456,1.540146 -0.486697,2.089368 -0.167241,0.549221 -0.528267,1.453922 -0.802279,2.010448 -0.274014,0.556523 -0.749488,1.378645 -1.056607,1.826935 -0.30712,0.448289 -0.893018,1.187654 -1.301994,1.643035 -0.408978,0.455381 -1.216104,1.198212 -1.793613,1.650735 -0.57751,0.452525 -1.523679,1.078293 -2.102596,1.390594 -0.578918,0.312302 -1.543498,0.739136 -2.143509,0.948518 -0.600012,0.209382 -1.580076,0.469544 -2.177922,0.578135 -1.349694,0.245155 -4.067112,0.241382 -5.390193,-0.0075 z m 9.410068,-3.387599 c 0.475371,-0.292247 1.167899,-0.772841 1.53895,-1.067986 0.932873,-0.742033 2.248273,-2.221799 2.724123,-3.064515 0.218549,-0.387045 0.52061,-0.916581 0.671245,-1.176749 0.342973,-0.592356 0.810457,-1.877074 1.077168,-2.960223 0.112282,-0.455985 0.232651,-1.489127 0.26749,-2.29587 0.0462,-1.069771 0.0082,-1.771535 -0.140408,-2.592598 -0.112064,-0.619187 -0.368187,-1.599131 -0.569164,-2.177653 -0.200974,-0.578522 -0.60597,-1.478136 -0.899989,-1.999141 -0.294018,-0.521005 -0.859058,-1.349059 -1.25564,-1.840121 -0.396585,-0.491061 -1.168023,-1.266932 -1.714306,-1.724158 -0.546284,-0.457227 -1.48117,-1.097332 -2.077528,-1.422458 -0.596357,-0.325124 -1.607783,-0.762979 -2.247613,-0.97301 -0.639831,-0.210032 -1.676224,-0.45383 -2.303095,-0.541774 -1.536677,-0.215581 -3.554151,-0.09119 -5.078202,0.313095 -0.65851,0.174686 -1.712262,0.571699 -2.341671,0.882252 -0.629408,0.310553 -1.489028,0.808423 -1.910265,1.106377 -0.421239,0.297955 -1.166235,0.937842 -1.655549,1.421971 -0.489314,0.484132 -1.164142,1.294947 -1.499618,1.801811 -0.335475,0.506865 -0.809438,1.335498 -1.05325,1.841409 -0.243812,0.505911 -0.586388,1.424259 -0.761281,2.040773 -0.242146,0.853591 -0.333897,1.518398 -0.384695,2.787425 -0.06389,1.596021 0.02895,2.630412 0.34009,3.789467 0.0711,0.264865 0.173366,0.45319 0.227253,0.4185 0.05389,-0.03469 0.13654,-0.595159 0.183673,-1.245488 0.116739,-1.610721 0.603675,-4.516583 0.985064,-5.878507 0.17281,-0.617094 0.47324,-1.449346 0.667623,-1.84945 0.194382,-0.400103 0.56217,-0.950695 0.817305,-1.223535 0.255135,-0.27284 0.743076,-0.628618 1.084313,-0.79062 0.382597,-0.181636 1.183731,-0.373532 2.089898,-0.500596 2.057893,-0.288557 3.239413,-0.534359 4.392864,-0.913889 0.973784,-0.320411 1.012984,-0.323208 1.856738,-0.132492 0.474073,0.107156 1.310104,0.374843 1.857846,0.59486 0.54774,0.220016 1.372263,0.690043 1.832268,1.044504 0.460006,0.354461 0.974136,0.718226 1.142513,0.808368 0.168376,0.09014 0.485688,0.20417 0.705138,0.253397 0.21945,0.04923 0.453646,0.195857 0.520437,0.325846 0.06679,0.12999 0.121436,0.381617 0.121436,0.559172 0,0.177554 0.159875,0.585406 0.355278,0.906337 0.31563,0.518397 0.464779,0.984885 0.989431,3.094621 0.09115,0.366532 0.396341,0.85602 0.934312,1.498506 0.43942,0.524791 1.053974,1.136927 1.365675,1.360302 0.3117,0.223374 1.010559,0.572153 1.553019,0.775062 l 0.986292,0.368927 -0.75672,-0.07046 c -0.416195,-0.03876 -1.036126,-0.181047 -1.377624,-0.316202 -0.458172,-0.181331 -0.620907,-0.20343 -0.620907,-0.08431 0,0.08878 0.170912,0.554042 0.379805,1.033904 0.208893,0.479862 0.429634,1.018722 0.490536,1.197465 0.09477,0.278133 0.08856,0.29327 -0.04305,0.104996 -0.08458,-0.120993 -0.33488,-0.552796 -0.55622,-0.959563 -0.221342,-0.406765 -0.901786,-1.340911 -1.512097,-2.075881 -0.610314,-0.734968 -1.261595,-1.651988 -1.447293,-2.037822 -0.185696,-0.385834 -0.454545,-1.103293 -0.597441,-1.594355 -0.142896,-0.491061 -0.388818,-1.058758 -0.546495,-1.261548 l -0.286683,-0.368711 -0.756376,0.272646 c -0.416009,0.149956 -1.335139,0.415086 -2.042514,0.589179 -0.707374,0.174094 -1.520457,0.439552 -1.80685,0.589907 -0.779144,0.409049 -1.917442,1.289412 -2.56614,1.984659 -0.687729,0.737079 -1.13476,1.700281 -1.016633,2.190506 0.0449,0.186362 0.258812,0.568689 0.475348,0.849616 0.216534,0.280927 0.666706,1.017438 1.000381,1.636691 0.333676,0.619252 0.925432,1.491159 1.315015,1.93757 0.389583,0.446409 1.133502,1.124055 1.65315,1.505878 0.51965,0.381824 1.659281,1.389661 2.532514,2.239639 0.873231,0.849977 1.641497,1.545414 1.707254,1.545414 0.06576,0 0.508501,-0.239112 0.983873,-0.531362 z m -6.123628,-16.684506 c 0.172762,-0.06842 0.314111,-0.205766 0.314111,-0.305224 0,-0.09946 -0.08716,-0.215673 -0.193698,-0.258254 -0.249071,-0.09955 -0.833,-0.09955 -1.082071,0 -0.106534,0.04258 -0.193698,0.154522 -0.193698,0.248759 0,0.198932 0.336535,0.429623 0.634919,0.435232 0.11348,0.0021 0.347677,-0.0521 0.520437,-0.120513 z" + id="path4158" + inkscape:connector-curvature="0" + sodipodi:nodetypes="csssssssssssssssssssssssssssssssssccssssssssssssssssssssssscssssssssssssssssssscssssssssssscssssssssssssssssscs" /> +</svg> diff --git a/browser/branding/official/default16.png b/browser/branding/official/default16.png Binary files differindex 33ebba13b..6618c0667 100644 --- a/browser/branding/official/default16.png +++ b/browser/branding/official/default16.png diff --git a/browser/branding/official/default22.png b/browser/branding/official/default22.png Binary files differindex 2390f0924..d53d5b503 100644 --- a/browser/branding/official/default22.png +++ b/browser/branding/official/default22.png diff --git a/browser/branding/official/default24.png b/browser/branding/official/default24.png Binary files differindex 737466b5a..1e86c0cdd 100644 --- a/browser/branding/official/default24.png +++ b/browser/branding/official/default24.png diff --git a/browser/branding/official/default256.png b/browser/branding/official/default256.png Binary files differindex eef767dab..96f72ae15 100644 --- a/browser/branding/official/default256.png +++ b/browser/branding/official/default256.png diff --git a/browser/branding/official/default32.png b/browser/branding/official/default32.png Binary files differindex e9d5bbb4b..ac39ccf0d 100644 --- a/browser/branding/official/default32.png +++ b/browser/branding/official/default32.png diff --git a/browser/branding/official/default48.png b/browser/branding/official/default48.png Binary files differindex 10de89172..e7dcd8ae2 100644 --- a/browser/branding/official/default48.png +++ b/browser/branding/official/default48.png diff --git a/browser/branding/official/default64.png b/browser/branding/official/default64.png Binary files differnew file mode 100644 index 000000000..7bad34f8b --- /dev/null +++ b/browser/branding/official/default64.png diff --git a/browser/branding/official/document.ico b/browser/branding/official/document.ico Binary files differindex 0957f61e3..525b1a929 100644 --- a/browser/branding/official/document.ico +++ b/browser/branding/official/document.ico diff --git a/browser/branding/official/firefox.ico b/browser/branding/official/firefox.ico Binary files differindex 85ffedfe6..320796dd2 100644 --- a/browser/branding/official/firefox.ico +++ b/browser/branding/official/firefox.ico diff --git a/browser/branding/official/locales/en-US/brand.dtd b/browser/branding/official/locales/en-US/brand.dtd index bb912cf05..1d2ac791e 100644 --- a/browser/branding/official/locales/en-US/brand.dtd +++ b/browser/branding/official/locales/en-US/brand.dtd @@ -2,8 +2,9 @@ - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> -<!ENTITY brandShorterName "Firefox"> -<!ENTITY brandShortName "Firefox"> -<!ENTITY brandFullName "Mozilla Firefox"> -<!ENTITY vendorShortName "Mozilla"> -<!ENTITY trademarkInfo.part1 "Firefox and the Firefox logos are trademarks of the Mozilla Foundation."> +<!ENTITY brandShorterName "Basilisk"> +<!ENTITY brandShortName "Basilisk"> +<!ENTITY brandFullName "Basilisk"> +<!ENTITY vendorShortName "Moonchild"> +<!ENTITY vendorFullName "Moonchild Productions"> +<!ENTITY trademarkInfo.part1 "Basilisk, Basilisk Browser and the Basilisk logos are trademarks of Moonchild Productions."> diff --git a/browser/branding/official/locales/en-US/brand.properties b/browser/branding/official/locales/en-US/brand.properties index b7b267fb3..9bdb66706 100644 --- a/browser/branding/official/locales/en-US/brand.properties +++ b/browser/branding/official/locales/en-US/brand.properties @@ -2,12 +2,12 @@ # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. -brandShorterName=Firefox -brandShortName=Firefox -brandFullName=Mozilla Firefox -vendorShortName=Mozilla +brandShorterName=Basilisk +brandShortName=Basilisk +brandFullName=Basilisk +vendorShortName=Moonchild -homePageSingleStartMain=Firefox Start, a fast home page with built-in search +homePageSingleStartMain=Internal home page with search. homePageImport=Import your home page from %S homePageMigrationPageTitle=Home Page Selection diff --git a/browser/branding/official/moz.build b/browser/branding/official/moz.build index 9045cee11..e3b7fd1ab 100644 --- a/browser/branding/official/moz.build +++ b/browser/branding/official/moz.build @@ -9,5 +9,5 @@ DIRS += ['content', 'locales'] DIST_SUBDIR = 'browser' export('DIST_SUBDIR') -include('../branding-common.mozbuild') -FirefoxBranding() +include('../shared/branding.mozbuild') +ApplicationBranding()
\ No newline at end of file diff --git a/browser/branding/official/mozicon128.png b/browser/branding/official/mozicon128.png Binary files differindex 946c31e68..0de78e0ce 100644 --- a/browser/branding/official/mozicon128.png +++ b/browser/branding/official/mozicon128.png diff --git a/browser/branding/official/newtab.ico b/browser/branding/official/newtab.ico Binary files differdeleted file mode 100644 index a9b37c08c..000000000 --- a/browser/branding/official/newtab.ico +++ /dev/null diff --git a/browser/branding/official/newwindow.ico b/browser/branding/official/newwindow.ico Binary files differdeleted file mode 100644 index 553720771..000000000 --- a/browser/branding/official/newwindow.ico +++ /dev/null diff --git a/browser/branding/official/particles.bmp b/browser/branding/official/particles.bmp Binary files differdeleted file mode 100644 index d523606c2..000000000 --- a/browser/branding/official/particles.bmp +++ /dev/null diff --git a/browser/branding/official/pbmode.ico b/browser/branding/official/pbmode.ico Binary files differdeleted file mode 100644 index 47677c13f..000000000 --- a/browser/branding/official/pbmode.ico +++ /dev/null diff --git a/browser/branding/official/pencil-rtl.bmp b/browser/branding/official/pencil-rtl.bmp Binary files differdeleted file mode 100644 index 67d2fe5d2..000000000 --- a/browser/branding/official/pencil-rtl.bmp +++ /dev/null diff --git a/browser/branding/official/pencil.bmp b/browser/branding/official/pencil.bmp Binary files differdeleted file mode 100644 index 7dd55741f..000000000 --- a/browser/branding/official/pencil.bmp +++ /dev/null diff --git a/browser/branding/official/pref/firefox-branding.js b/browser/branding/official/pref/firefox-branding.js index 35be87314..190b84e78 100644 --- a/browser/branding/official/pref/firefox-branding.js +++ b/browser/branding/official/pref/firefox-branding.js @@ -2,35 +2,47 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -pref("startup.homepage_override_url", ""); -pref("startup.homepage_welcome_url", "https://www.mozilla.org/%LOCALE%/firefox/%VERSION%/firstrun/"); +#filter substitution +#filter emptyLines + +// Set defines to construct URLs +#define BRANDING_BASEURL basilisk-browser.org +#define BRANDING_SITEURL www.@BRANDING_BASEURL@ +#define BRANDING_RELNOTESPATH releasenotes.shtml +#define BRANDING_FIRSTRUNPATH firstrun/ +#define BRANDING_APPUPDATEURL aus.@BRANDING_BASEURL@ +#define BRANDING_APPUPDATEPATH ?application=%PRODUCT%&version=%VERSION%&arch=%BUILD_TARGET%&buildid=%BUILD_ID%&channel=%CHANNEL% + +// Shared Branding Preferences +// XXX: These should REALLY go back to application preferences +#include ../../shared/preferences.inc + +// Branding Specific Preferences +pref("startup.homepage_override_url", "https://@BRANDING_SITEURL@/@BRANDING_RELNOTESPATH@"); +pref("startup.homepage_welcome_url", "http://@BRANDING_SITEURL@/@BRANDING_FIRSTRUNPATH@"); pref("startup.homepage_welcome_url.additional", ""); -// Interval: Time between checks for a new version (in seconds) -pref("app.update.interval", 43200); // 12 hours -// The time interval between the downloading of mar file chunks in the -// background (in seconds) -// 0 means "download everything at once" -pref("app.update.download.backgroundInterval", 0); -// Give the user x seconds to react before showing the big UI. default=192 hours -pref("app.update.promptWaitTime", 691200); + +// Version release notes +pref("app.releaseNotesURL", "http://@BRANDING_SITEURL@/@BRANDING_RELNOTESPATH@"); + +// Vendor home page +pref("app.vendorURL", "http://@BRANDING_SITEURL@/"); + +pref("app.update.url", "https://@BRANDING_APPUPDATEURL@/@BRANDING_APPUPDATEPATH@"); + // URL user can browse to manually if for some reason all update installation // attempts fail. -pref("app.update.url.manual", "https://www.mozilla.org/firefox/"); +pref("app.update.url.manual", "https://@BRANDING_SITEURL@/"); // A default value for the "More information about this update" link // supplied in the "An update is available" page of the update wizard. -pref("app.update.url.details", "https://www.mozilla.org/%LOCALE%/firefox/notes"); - -// The number of days a binary is permitted to be old -// without checking for an update. This assumes that -// app.update.checkInstallTime is true. -pref("app.update.checkInstallTime.days", 63); +pref("app.update.url.details", "https://@BRANDING_SITEURL@/@BRANDING_RELNOTESPATH@"); -// Give the user x seconds to reboot before showing a badge on the hamburger -// button. default=immediately -pref("app.update.badgeWaitTime", 0); - -// Number of usages of the web console or scratchpad. -// If this is less than 5, then pasting code into the web console or scratchpad is disabled -pref("devtools.selfxss.count", 0); +// Provide UA Gecko and Firefox slices for web compatibility +pref("general.useragent.compatMode.firefox",true); +pref("general.useragent.compatMode.gecko",true); +// Switch Application Updates off for now pref("app.update.enabled", false); + +// Shared User Agent Overrides +#include ../../shared/uaoverrides.inc diff --git a/browser/branding/official/wizHeader.bmp b/browser/branding/official/wizHeader.bmp Binary files differindex 51bec2211..8f1a0598b 100644 --- a/browser/branding/official/wizHeader.bmp +++ b/browser/branding/official/wizHeader.bmp diff --git a/browser/branding/official/wizHeaderRTL.bmp b/browser/branding/official/wizHeaderRTL.bmp Binary files differindex 7610fbfd0..8f1a0598b 100644 --- a/browser/branding/official/wizHeaderRTL.bmp +++ b/browser/branding/official/wizHeaderRTL.bmp diff --git a/browser/branding/official/wizWatermark.bmp b/browser/branding/official/wizWatermark.bmp Binary files differindex 5326bba93..491f27aa5 100644 --- a/browser/branding/official/wizWatermark.bmp +++ b/browser/branding/official/wizWatermark.bmp diff --git a/browser/branding/branding-common.mozbuild b/browser/branding/shared/branding.mozbuild index f74724f4a..e6fee3f4e 100644 --- a/browser/branding/branding-common.mozbuild +++ b/browser/branding/shared/branding.mozbuild @@ -5,42 +5,37 @@ # file, You can obtain one at http://mozilla.org/MPL/2.0/. @template -def FirefoxBranding(): - JS_PREFERENCE_FILES += [ +def ApplicationBranding(): + JS_PREFERENCE_PP_FILES += [ 'pref/firefox-branding.js', ] if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'windows': FINAL_TARGET_FILES['..'] += [ - 'firefox.VisualElementsManifest.xml', + 'basilisk.VisualElementsManifest.xml', ] FINAL_TARGET_FILES.VisualElements += [ 'VisualElements_150.png', 'VisualElements_70.png', ] BRANDING_FILES += [ + '../shared/newtab.ico', + '../shared/newwindow.ico', + '../shared/pbmode.ico', 'appname.bmp', - 'bgintro.bmp', 'branding.nsi', - 'clock.bmp', 'document.ico', 'firefox.ico', - 'newtab.ico', - 'newwindow.ico', - 'particles.bmp', - 'pbmode.ico', - 'pencil-rtl.bmp', - 'pencil.bmp', 'wizHeader.bmp', 'wizHeaderRTL.bmp', 'wizWatermark.bmp', ] elif CONFIG['MOZ_WIDGET_TOOLKIT'] == 'cocoa': BRANDING_FILES += [ + '../shared/dsstore', 'background.png', 'disk.icns', 'document.icns', - 'dsstore', 'firefox.icns', ] elif 'gtk' in CONFIG['MOZ_WIDGET_TOOLKIT']: @@ -56,3 +51,6 @@ def FirefoxBranding(): 'default32.png', 'default48.png', ] + DEFINES['MOZ_APP_VERSION'] = CONFIG['MOZ_APP_VERSION'] + DEFINES['MOZ_BRANDING_DIRECTORY'] = CONFIG['MOZ_BRANDING_DIRECTORY'] + DEFINES['MOZILLA_UAVERSION_U'] = CONFIG['MOZILLA_UAVERSION_U'] diff --git a/browser/branding/official/dsstore b/browser/branding/shared/dsstore Binary files differindex 8ea703674..8ea703674 100644 --- a/browser/branding/official/dsstore +++ b/browser/branding/shared/dsstore diff --git a/browser/branding/aurora/newtab.ico b/browser/branding/shared/newtab.ico Binary files differindex a9b37c08c..a9b37c08c 100644 --- a/browser/branding/aurora/newtab.ico +++ b/browser/branding/shared/newtab.ico diff --git a/browser/branding/aurora/newwindow.ico b/browser/branding/shared/newwindow.ico Binary files differindex 553720771..553720771 100644 --- a/browser/branding/aurora/newwindow.ico +++ b/browser/branding/shared/newwindow.ico diff --git a/browser/branding/aurora/pbmode.ico b/browser/branding/shared/pbmode.ico Binary files differindex 47677c13f..47677c13f 100644 --- a/browser/branding/aurora/pbmode.ico +++ b/browser/branding/shared/pbmode.ico diff --git a/browser/branding/shared/preferences.inc b/browser/branding/shared/preferences.inc new file mode 100644 index 000000000..90fd3da06 --- /dev/null +++ b/browser/branding/shared/preferences.inc @@ -0,0 +1,35 @@ +// Interval: Time between checks for a new version (in seconds) +pref("app.update.interval", 86400); // 1 day + +// The time interval between the downloading of mar file chunks in the +// background (in seconds) +// 0 means "download everything at once" +pref("app.update.download.backgroundInterval", 0); + +// Give the user x seconds to react before showing the big UI. default=192 hours +pref("app.update.promptWaitTime", 691200); + +// The number of days a binary is permitted to be old +// without checking for an update. This assumes that +// app.update.checkInstallTime is true. +pref("app.update.checkInstallTime.days", 14); + +// Give the user x seconds to reboot before showing a badge on the hamburger +// button. default=immediately +pref("app.update.badgeWaitTime", 0); + +// Number of usages of the web console or scratchpad. +// If this is less than 5, then pasting code into the web console or scratchpad is disabled +pref("devtools.selfxss.count", 100); + +// Disable Google Safebrowsing by default. Without an API key, this won't work. +pref("browser.safebrowsing.phishing.enabled", false); +pref("browser.safebrowsing.malware.enabled", false); +pref("browser.safebrowsing.downloads.enabled", false); +pref("browser.safebrowsing.downloads.remote.enabled", false); + +// Disable the UI controls for it as well for Basilisk-official. +pref("browser.safebrowsing.UI.enabled", false); + +// +pref("general.useragent.appVersionIsBuildID", true); diff --git a/browser/branding/shared/uaoverrides.inc b/browser/branding/shared/uaoverrides.inc new file mode 100644 index 000000000..59e413728 --- /dev/null +++ b/browser/branding/shared/uaoverrides.inc @@ -0,0 +1,41 @@ +#define GUAO_PREF general.useragent.override
+
+#define GRE_VERSION @MOZILLA_UAVERSION_U@
+#define GRE_VERSION_SLICE Goanna/@GRE_VERSION@
+#define GRE_DATE_SLICE Goanna/20170101
+#define APP_SLICE Basilisk/@MOZ_APP_VERSION@
+
+#define GK_VERSION 52.9
+#define GK_SLICE Gecko/20100101
+#define FX_SLICE Firefox/@GK_VERSION@
+
+#ifdef XP_UNIX
+#ifndef XP_MACOSX
+#define OS_SLICE X11; Linux x86_64;
+#else
+#define OS_SLICE Macintosh; Intel Mac OS X 10.11;
+#endif
+#else
+#define OS_SLICE Windows NT 6.1; WOW64;
+#endif
+
+// FxA override
+pref("@GUAO_PREF@.accounts.firefox.com", "Mozilla/5.0 (@OS_SLICE@ rv:@GK_VERSION@) @GK_SLICE@ @FX_SLICE@");
+
+// Required for domains that have proven unresponsive to requests from users
+
+// The never-ending Facebook debacle...
+
+// UA-Sniffing domains below are pending responses from their operators - temp workaround
+// Daily motion only likes strict Firefox UAs
+pref("@GUAO_PREF@.dailymotion.com","Mozilla/5.0 (@OS_SLICE@ rv:52.0) @GK_SLICE@ Firefox/52.0");
+
+// The following requires native mode. Or it blocks.. "too old firefox", breakage, etc.
+
+// UA-Sniffing domains below have indicated no interest in supporting Pale Moon (BOO!)
+
+// UA-sniffing domains that are "app/vendor-specific" and do not like Pale Moon
+
+// The following domains do not like the Goanna slice
+pref("@GUAO_PREF@.hitbox.tv","Mozilla/5.0 (@OS_SLICE@ rv:@GK_VERSION@) @GK_SLICE@ @FX_SLICE@");
+pref("@GUAO_PREF@.yuku.com","Mozilla/5.0 (@OS_SLICE@ rv:@GK_VERSION@) @GK_SLICE@ @FX_SLICE@ @APP_SLICE@");
diff --git a/browser/branding/unofficial/VisualElements_150.png b/browser/branding/unofficial/VisualElements_150.png Binary files differindex 461961e8d..eb74e4adc 100644 --- a/browser/branding/unofficial/VisualElements_150.png +++ b/browser/branding/unofficial/VisualElements_150.png diff --git a/browser/branding/unofficial/VisualElements_70.png b/browser/branding/unofficial/VisualElements_70.png Binary files differindex aad81f40d..571532a9b 100644 --- a/browser/branding/unofficial/VisualElements_70.png +++ b/browser/branding/unofficial/VisualElements_70.png diff --git a/browser/branding/unofficial/bgintro.bmp b/browser/branding/unofficial/bgintro.bmp Binary files differdeleted file mode 100644 index 9f2a0a6e0..000000000 --- a/browser/branding/unofficial/bgintro.bmp +++ /dev/null diff --git a/browser/branding/unofficial/branding.nsi b/browser/branding/unofficial/branding.nsi index 34214453f..77f08a4cb 100644 --- a/browser/branding/unofficial/branding.nsi +++ b/browser/branding/unofficial/branding.nsi @@ -8,19 +8,19 @@ # BrandFullNameInternal is used for some registry and file system values # instead of BrandFullName and typically should not be modified. -!define BrandFullNameInternal "Mozilla Developer Preview" -!define CompanyName "mozilla.org" -!define URLInfoAbout "https://www.mozilla.org" -!define HelpLink "https://support.mozilla.org" +!define BrandFullNameInternal "Serpent" +!define CompanyName "Moonchild Productions" +!define URLInfoAbout "http://www.basilisk-browser.org" +!define HelpLink "https://forum.palemoon.org" -!define URLStubDownload "http://download.mozilla.org/?os=win&lang=${AB_CD}&product=firefox-latest" -!define URLManualDownload "https://www.mozilla.org/${AB_CD}/firefox/installer-help/?channel=release&installer_lang=${AB_CD}" -!define URLSystemRequirements "https://www.mozilla.org/firefox/system-requirements/" +!define URLStubDownload "" +!define URLManualDownload "" +!define URLSystemRequirements "" !define Channel "unofficial" # The installer's certificate name and issuer expected by the stub installer -!define CertNameDownload "Mozilla Corporation" -!define CertIssuerDownload "DigiCert SHA2 Assured ID Code Signing CA" +!define CertNameDownload "" +!define CertIssuerDownload "" # Dialog units are used so the UI displays correctly with the system's DPI # settings. diff --git a/browser/branding/unofficial/clock.bmp b/browser/branding/unofficial/clock.bmp Binary files differdeleted file mode 100644 index c74398edb..000000000 --- a/browser/branding/unofficial/clock.bmp +++ /dev/null diff --git a/browser/branding/unofficial/configure.sh b/browser/branding/unofficial/configure.sh index edd3bd3e8..ea4e37e45 100644 --- a/browser/branding/unofficial/configure.sh +++ b/browser/branding/unofficial/configure.sh @@ -2,4 +2,4 @@ # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. -MOZ_APP_DISPLAYNAME=Nightly +MOZ_APP_DISPLAYNAME=Serpent diff --git a/browser/branding/unofficial/content/about-background.png b/browser/branding/unofficial/content/about-background.png Binary files differindex 70eb8dafd..e36211b08 100644 --- a/browser/branding/unofficial/content/about-background.png +++ b/browser/branding/unofficial/content/about-background.png diff --git a/browser/branding/unofficial/content/about-logo.png b/browser/branding/unofficial/content/about-logo.png Binary files differindex 4c7214ba3..c5a838178 100644 --- a/browser/branding/unofficial/content/about-logo.png +++ b/browser/branding/unofficial/content/about-logo.png diff --git a/browser/branding/unofficial/content/about-logo@2x.png b/browser/branding/unofficial/content/about-logo@2x.png Binary files differindex 3526eda54..48c31564c 100644 --- a/browser/branding/unofficial/content/about-logo@2x.png +++ b/browser/branding/unofficial/content/about-logo@2x.png diff --git a/browser/branding/unofficial/content/about-wordmark.svg b/browser/branding/unofficial/content/about-wordmark.svg index 60b278d03..ce7a5c07b 100644 --- a/browser/branding/unofficial/content/about-wordmark.svg +++ b/browser/branding/unofficial/content/about-wordmark.svg @@ -1,22 +1,87 @@ -<?xml version="1.0" encoding="utf-8"?> +<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> -<svg xmlns="http://www.w3.org/2000/svg" width="132px" height="48px" viewBox="0 0 132 48"> - <path fill="#fff" d="M60.6,14.3l-2.4-2.4C57,12.7,56,13,54.7,13c-3,0-3.8-1.4-7.6-1.4c-5.4,0-9.2,3.4-9.2,8.4 - c0,3.3,2.2,6.1,5.6,7.2c-3.4,1-4.5,2.2-4.5,4.3c0,2.2,1.8,3.6,4.7,3.6h3.8c2.5,0,3.9,0.2,4.9,0.9c0.9,0.6,1.4,1.6,1.4,3 - c0,3.1-2.2,4.4-6,4.4c-2,0-3.8-0.5-5.1-1.2c-0.9-0.6-1.5-1.6-1.5-2.9c0-0.8,0.3-1.7,0.7-2.2l-4.1,0.4c-0.3,1-0.5,1.7-0.5,2.6 - c0,3.5,3,6.4,10.8,6.4c6.1,0,9.9-2.5,9.9-7.9c0-2.1-0.8-3.9-2.7-5.3c-1.5-1.1-3.1-1.4-6-1.4h-4c-1.3,0-2-0.5-2-1.2 - c0-0.8,1.1-1.7,4.5-2.9c1.8,0,3.4-0.3,4.7-1.1c2.3-1.4,3.7-4.1,3.7-6.8c0-1.6-0.5-3-1.5-4.3c0.4,0.2,1.1,0.3,1.7,0.3 - C57.9,15.8,59,15.4,60.6,14.3z M47.1,24.8c-3.1,0-4.8-1.7-4.8-4.8c0-3.5,1.6-5.1,4.7-5.1c3.3,0,4.6,1.5,4.6,4.9 - C51.6,23.1,50.1,24.8,47.1,24.8z M30.7,1.3c-1.7,0-3,1.4-3,3.1s1.4,3,3,3c1.7,0,3.1-1.3,3.1-3C33.7,2.7,32.4,1.3,30.7,1.3z - M107.7,34.5c-1.1,0-1.4-0.6-1.4-2.5V6.5c0-3.8-0.6-5.9-0.6-5.9l-3.9,0.8c0,0,0.6,1.9,0.6,5.1v26.4c0,1.8,0.4,2.8,1.2,3.5 - c0.7,0.7,1.7,1,2.9,1c1,0,1.5-0.1,2.5-0.5l-0.8-2.5C108.2,34.4,107.8,34.5,107.7,34.5z M74.7,11.6c-3.2,0-6.1,1.8-8.3,3.9 - c0,0,0.2-1.8,0.2-3.4V6.3c0-3.8-0.7-5.9-0.7-5.9l-3.9,0.7c0,0,0.7,1.9,0.7,5.1V37h3.9V19.3c2.1-2.7,4.9-4.2,7.2-4.2 - c1.3,0,2.3,0.4,2.9,1c0.7,0.7,0.9,1.8,0.9,3.7V37h3.8V19.1c0-1.8-0.1-2.6-0.4-3.6C80.4,13.2,77.7,11.6,74.7,11.6z M127.4,12.1 - l-4.9,16.4c-0.6,2-1.6,5.2-1.6,5.2s-0.7-3.9-1.5-6.2l-5.1-16.2l-3.9,1.3l5.4,15.6c0.8,2.5,2.2,7.4,2.5,9l1.6-0.3 - c-1.3,5.1-2.5,6.7-5.7,7.6l1.2,2.7c4.4-1,6.4-4.3,8-9.3l8.6-25.8H127.4z M96.9,15l1.2-2.9h-6.2c0-3.3,0.5-7.2,0.5-7.2l-4.1,0.9 - c0,0-0.4,3.9-0.4,6.3h-3.2V15h3.2v17.1c0,2.5,0.7,4.1,2.4,5c0.9,0.4,1.9,0.7,3.3,0.7c1.8,0,3.1-0.4,4.4-1l-0.6-2.5 - c-0.7,0.3-1.3,0.5-2.4,0.5c-2.4,0-3.2-0.9-3.2-3.7V15H96.9z M28.6,37h4.1V11.5l-4.1,0.6V37z M18.9,21.3c0,5,0.4,10.5,0.4,10.5 - s-1.4-3.8-3.2-7.2L4.8,2.7H0V37h4.2L4,17.1c0-4.5-0.4-9.3-0.4-9.3s1.7,4.1,3.9,8.2l11,21h4.3V2.7h-4L18.9,21.3z"/> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="132px" + height="48px" + viewBox="0 0 132 48" + id="svg2" + version="1.1" + inkscape:version="0.91 r13725" + sodipodi:docname="about-wordmark.svg"> + <metadata + id="metadata10"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs8" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1215" + inkscape:window-height="778" + id="namedview6" + showgrid="false" + inkscape:zoom="2.4090909" + inkscape:cx="91.154186" + inkscape:cy="24" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="0" + inkscape:current-layer="svg2" /> + <g + transform="scale(0.83939803,1.1913299)" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:42.56122971px;line-height:125%;font-family:'Levenim MT';-inkscape-font-specification:'Levenim MT';letter-spacing:0px;word-spacing:0px;fill:#a8e6db;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + id="text4138"> + <path + d="m 18.521413,24.115665 q 0,3.470569 -2.618513,5.881264 -2.535386,2.348349 -6.0475185,2.348349 -5.6942271,0 -9.22714164,-6.463156 L 3.2259712,24.323483 q 2.7432042,5.04999 6.3384644,5.04999 3.4082234,0 4.9460804,-2.639295 0.706583,-1.205347 0.706583,-2.556167 0,-1.537857 -1.039093,-3.013369 Q 12.827186,19.23193 9.1487985,16.488726 5.3872836,13.703958 4.1819363,12.082974 2.560952,9.9008792 2.560952,7.4070572 q 0,-4.2394975 3.6576056,-6.2345551 1.7248936,-0.93518331 3.761515,-0.93518331 4.3641884,0 8.0217944,5.00842591 L 15.508045,7.1368931 Q 14.115661,5.3080903 13.138914,4.5391618 11.684184,3.3961601 9.917727,3.3961601 q -1.7664573,0 -2.9510228,1.0598743 -1.246911,1.0806563 -1.246911,2.8263317 0,2.0574032 1.9327121,3.9693339 0.56111,0.540328 3.9485517,3.054932 3.117277,2.306785 4.655134,4.15637 2.265222,2.763986 2.265222,5.652663 z" + style="" + id="path4143" /> + <path + d="m 46.743165,20.499623 -20.324649,0 q 0.08313,3.803079 2.369131,6.338464 2.410694,2.660077 6.151427,2.660077 3.616042,0 6.130646,-2.202876 1.143002,-0.997529 2.47304,-3.221187 l 2.452259,1.288475 q -2.286004,4.468098 -6.338465,6.026737 -1.974275,0.768928 -4.468097,0.768928 -5.091554,0 -8.437432,-3.36666 -3.325096,-3.366659 -3.325096,-8.458213 0,-4.301843 2.639295,-7.668503 3.345878,-4.2810608 8.956978,-4.2810608 5.777354,0 9.227141,4.3849708 2.452259,3.117277 2.493822,7.730848 z M 43.54276,17.985019 q -1.080656,-4.301843 -4.634352,-5.964391 -1.828803,-0.852056 -3.844643,-0.852056 -3.325096,0 -5.715008,2.140531 -1.745676,1.558639 -2.639295,4.675916 l 16.833298,0 z" + style="" + id="path4145" /> + <path + d="m 62.516592,9.1527326 -1.517075,2.4522584 q -0.914401,-0.394855 -1.537857,-0.394855 -3.491351,0 -4.862953,4.904517 -0.540328,1.932712 -0.540328,7.813975 l 0,7.647721 -2.971805,0 0,-22.610653 2.971805,0 0,3.304314 q 2.639295,-3.8862058 5.881264,-3.8862058 1.205347,0 2.576949,0.7689284 z" + style="" + id="path4147" /> + <path + d="m 88.577029,20.208677 q 0,4.94608 -3.325096,8.416649 -3.366659,3.532915 -8.271176,3.532915 -5.382499,0 -9.060887,-4.468098 l 0,12.157383 -2.888677,0 0,-30.88183 2.888677,0 0,4.15637 q 3.449787,-4.7382618 8.977759,-4.7382618 4.883735,0 8.271177,3.4705688 3.408223,3.470569 3.408223,8.354304 z m -2.930241,0.103909 q 0,-2.410694 -1.205347,-4.572007 -1.205347,-2.161312 -3.283532,-3.345878 -2.057403,-1.205347 -4.48888,-1.205347 -3.865424,0 -6.421592,2.660077 -2.535385,2.660077 -2.535385,6.546283 0,5.403281 4.468097,7.897103 2.140531,1.205347 4.530444,1.205347 2.410694,0 4.488879,-1.246911 2.01584,-1.226129 3.221187,-3.387441 1.226129,-2.161313 1.226129,-4.551226 z" + style="" + id="path4149" /> + <path + d="m 116.23767,20.499623 -20.324647,0 q 0.08313,3.803079 2.36913,6.338464 2.410697,2.660077 6.151427,2.660077 3.61604,0 6.13065,-2.202876 1.143,-0.997529 2.47304,-3.221187 l 2.45226,1.288475 q -2.28601,4.468098 -6.33847,6.026737 -1.97427,0.768928 -4.4681,0.768928 -5.09155,0 -8.437428,-3.36666 -3.325096,-3.366659 -3.325096,-8.458213 0,-4.301843 2.639295,-7.668503 3.345878,-4.2810608 8.956979,-4.2810608 5.77735,0 9.22714,4.3849708 2.45226,3.117277 2.49382,7.730848 z m -3.2004,-2.514604 q -1.08066,-4.301843 -4.63436,-5.964391 -1.8288,-0.852056 -3.84464,-0.852056 -3.32509,0 -5.715007,2.140531 -1.745675,1.558639 -2.639295,4.675916 l 16.833302,0 z" + style="" + id="path4151" /> + <path + d="m 141.4045,31.576349 -2.88868,0 0,-10.78578 q 0,-3.823861 -0.33251,-5.216245 -1.08066,-4.509661 -5.69423,-4.509661 -2.63929,0 -4.73826,1.745675 -2.07819,1.724894 -2.7432,4.322625 -0.41564,1.641766 -0.41564,6.151428 l 0,8.291958 -2.90946,0 0,-22.610653 2.90946,0 0,4.052461 q 3.47057,-4.6343528 8.47899,-4.6343528 2.47304,0 4.44732,1.2676928 1.99506,1.246911 2.93024,3.470569 0.95597,2.202876 0.95597,6.816447 l 0,11.637836 z" + style="" + id="path4153" /> + <path + d="m 157.69747,11.459518 -4.61357,0 0,20.116831 -2.93024,0 0,-20.116831 -3.96934,0 0,-2.493822 3.96934,0 0,-8.3958676 2.93024,0 0,8.3958676 4.61357,0 0,2.493822 z" + style="" + id="path4155" /> + </g> </svg> diff --git a/browser/branding/unofficial/content/about.png b/browser/branding/unofficial/content/about.png Binary files differindex 231449344..e323c8df5 100644 --- a/browser/branding/unofficial/content/about.png +++ b/browser/branding/unofficial/content/about.png diff --git a/browser/branding/unofficial/content/icon48.png b/browser/branding/unofficial/content/icon48.png Binary files differindex 5fc7861e5..16e022a64 100644 --- a/browser/branding/unofficial/content/icon48.png +++ b/browser/branding/unofficial/content/icon48.png diff --git a/browser/branding/unofficial/content/icon64.png b/browser/branding/unofficial/content/icon64.png Binary files differindex 83f7016bc..9860917e3 100644 --- a/browser/branding/unofficial/content/icon64.png +++ b/browser/branding/unofficial/content/icon64.png diff --git a/browser/branding/unofficial/default16.png b/browser/branding/unofficial/default16.png Binary files differindex d285a90b4..67ef39df8 100644 --- a/browser/branding/unofficial/default16.png +++ b/browser/branding/unofficial/default16.png diff --git a/browser/branding/unofficial/default32.png b/browser/branding/unofficial/default32.png Binary files differindex 95adf2497..2f709e6b2 100644 --- a/browser/branding/unofficial/default32.png +++ b/browser/branding/unofficial/default32.png diff --git a/browser/branding/unofficial/default48.png b/browser/branding/unofficial/default48.png Binary files differindex d38185f54..02a1e14c1 100644 --- a/browser/branding/unofficial/default48.png +++ b/browser/branding/unofficial/default48.png diff --git a/browser/branding/unofficial/firefox.VisualElementsManifest.xml b/browser/branding/unofficial/firefox.VisualElementsManifest.xml deleted file mode 100644 index 7654e0ab7..000000000 --- a/browser/branding/unofficial/firefox.VisualElementsManifest.xml +++ /dev/null @@ -1,8 +0,0 @@ -<Application xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'> - <VisualElements - ShowNameOnSquare150x150Logo='on' - Square150x150Logo='browser\VisualElements\VisualElements_150.png' - Square70x70Logo='browser\VisualElements\VisualElements_70.png' - ForegroundText='light' - BackgroundColor='#14171a'/> -</Application> diff --git a/browser/branding/unofficial/firefox.icns b/browser/branding/unofficial/firefox.icns Binary files differindex 0c6941acf..2c613634b 100644 --- a/browser/branding/unofficial/firefox.icns +++ b/browser/branding/unofficial/firefox.icns diff --git a/browser/branding/unofficial/firefox.ico b/browser/branding/unofficial/firefox.ico Binary files differindex 5217a6c0b..0c7acb61b 100644 --- a/browser/branding/unofficial/firefox.ico +++ b/browser/branding/unofficial/firefox.ico diff --git a/browser/branding/unofficial/locales/en-US/brand.dtd b/browser/branding/unofficial/locales/en-US/brand.dtd index cf4596ae0..17c243606 100644 --- a/browser/branding/unofficial/locales/en-US/brand.dtd +++ b/browser/branding/unofficial/locales/en-US/brand.dtd @@ -2,8 +2,9 @@ - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> -<!ENTITY brandShorterName "Nightly"> -<!ENTITY brandShortName "Nightly"> -<!ENTITY brandFullName "Nightly"> -<!ENTITY vendorShortName "Mozilla"> +<!ENTITY brandShorterName "Serpent"> +<!ENTITY brandShortName "Serpent"> +<!ENTITY brandFullName "Serpent"> +<!ENTITY vendorShortName "Moonchild"> +<!ENTITY vendorFullName "Moonchild Productions"> <!ENTITY trademarkInfo.part1 " "> diff --git a/browser/branding/unofficial/locales/en-US/brand.properties b/browser/branding/unofficial/locales/en-US/brand.properties index 8cd2c2ec9..80349f0e3 100644 --- a/browser/branding/unofficial/locales/en-US/brand.properties +++ b/browser/branding/unofficial/locales/en-US/brand.properties @@ -2,9 +2,10 @@ # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. -brandShorterName=Nightly -brandShortName=Nightly -brandFullName=Nightly -vendorShortName=Mozilla +brandShorterName=Serpent +brandShortName=Serpent +brandFullName=Serpent +vendorShortName=Moonchild +vendorFullName=Moonchild Productions syncBrandShortName=Sync diff --git a/browser/branding/unofficial/moz.build b/browser/branding/unofficial/moz.build index 9045cee11..0d829fa5e 100644 --- a/browser/branding/unofficial/moz.build +++ b/browser/branding/unofficial/moz.build @@ -9,5 +9,5 @@ DIRS += ['content', 'locales'] DIST_SUBDIR = 'browser' export('DIST_SUBDIR') -include('../branding-common.mozbuild') -FirefoxBranding() +include('../shared/branding.mozbuild') +ApplicationBranding() diff --git a/browser/branding/unofficial/mozicon128.png b/browser/branding/unofficial/mozicon128.png Binary files differindex 471cf4645..739b61084 100644 --- a/browser/branding/unofficial/mozicon128.png +++ b/browser/branding/unofficial/mozicon128.png diff --git a/browser/branding/unofficial/newtab.ico b/browser/branding/unofficial/newtab.ico Binary files differdeleted file mode 100644 index a9b37c08c..000000000 --- a/browser/branding/unofficial/newtab.ico +++ /dev/null diff --git a/browser/branding/unofficial/newwindow.ico b/browser/branding/unofficial/newwindow.ico Binary files differdeleted file mode 100644 index 553720771..000000000 --- a/browser/branding/unofficial/newwindow.ico +++ /dev/null diff --git a/browser/branding/unofficial/particles.bmp b/browser/branding/unofficial/particles.bmp Binary files differdeleted file mode 100644 index ab74ce047..000000000 --- a/browser/branding/unofficial/particles.bmp +++ /dev/null diff --git a/browser/branding/unofficial/pbmode.ico b/browser/branding/unofficial/pbmode.ico Binary files differdeleted file mode 100644 index 47677c13f..000000000 --- a/browser/branding/unofficial/pbmode.ico +++ /dev/null diff --git a/browser/branding/unofficial/pencil-rtl.bmp b/browser/branding/unofficial/pencil-rtl.bmp Binary files differdeleted file mode 100644 index e50d92db7..000000000 --- a/browser/branding/unofficial/pencil-rtl.bmp +++ /dev/null diff --git a/browser/branding/unofficial/pencil.bmp b/browser/branding/unofficial/pencil.bmp Binary files differdeleted file mode 100644 index 252c10f41..000000000 --- a/browser/branding/unofficial/pencil.bmp +++ /dev/null diff --git a/browser/branding/unofficial/pref/firefox-branding.js b/browser/branding/unofficial/pref/firefox-branding.js index b20a3a309..a5b617a53 100644 --- a/browser/branding/unofficial/pref/firefox-branding.js +++ b/browser/branding/unofficial/pref/firefox-branding.js @@ -2,32 +2,39 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +#filter substitution +#filter emptyLines + +// Set defines to construct URLs +#define BRANDING_BASEURL basilisk-browser.org +#define BRANDING_SITEURL www.@BRANDING_BASEURL@ + +// Shared Branding Preferences +// XXX: These should REALLY go back to application preferences +#include ../../shared/preferences.inc + +// Branding Specific Preferences pref("startup.homepage_override_url", ""); pref("startup.homepage_welcome_url", ""); pref("startup.homepage_welcome_url.additional", ""); -// The time interval between checks for a new version (in seconds) -pref("app.update.interval", 86400); // 24 hours -// The time interval between the downloading of mar file chunks in the -// background (in seconds) -pref("app.update.download.backgroundInterval", 60); -// Give the user x seconds to react before showing the big UI. default=24 hours -pref("app.update.promptWaitTime", 86400); + +// Version release notes +pref("app.releaseNotesURL", "about:blank"); + +// Vendor home page +pref("app.vendorURL", "about:"); + +pref("app.update.url", ""); + // URL user can browse to manually if for some reason all update installation // attempts fail. -pref("app.update.url.manual", "https://nightly.mozilla.org"); +pref("app.update.url.manual", "about:"); // A default value for the "More information about this update" link // supplied in the "An update is available" page of the update wizard. -pref("app.update.url.details", "https://nightly.mozilla.org"); - -// The number of days a binary is permitted to be old -// without checking for an update. This assumes that -// app.update.checkInstallTime is true. -pref("app.update.checkInstallTime.days", 2); +pref("app.update.url.details", "about:"); -// Give the user x seconds to reboot before showing a badge on the hamburger -// button. default=immediately -pref("app.update.badgeWaitTime", 0); +// Switch Application Updates off for unofficial branding +pref("app.update.enabled", false); -// Number of usages of the web console or scratchpad. -// If this is less than 5, then pasting code into the web console or scratchpad is disabled -pref("devtools.selfxss.count", 0); +// Shared User Agent Overrides +#include ../../shared/uaoverrides.inc diff --git a/browser/branding/aurora/firefox.VisualElementsManifest.xml b/browser/branding/unofficial/serpent.VisualElementsManifest.xml index 7654e0ab7..5046ee7da 100644 --- a/browser/branding/aurora/firefox.VisualElementsManifest.xml +++ b/browser/branding/unofficial/serpent.VisualElementsManifest.xml @@ -4,5 +4,5 @@ Square150x150Logo='browser\VisualElements\VisualElements_150.png' Square70x70Logo='browser\VisualElements\VisualElements_70.png' ForegroundText='light' - BackgroundColor='#14171a'/> + BackgroundColor='#304D7E'/> </Application> diff --git a/browser/components/BrowserComponents.manifest b/browser/components/BrowserComponents.manifest index dbfc3d2ec..0c80006be 100644 --- a/browser/components/BrowserComponents.manifest +++ b/browser/components/BrowserComponents.manifest @@ -39,6 +39,4 @@ component {eab9012e-5f74-4cbc-b2b5-a590235513cc} nsBrowserGlue.js contract @mozilla.org/browser/browserglue;1 {eab9012e-5f74-4cbc-b2b5-a590235513cc} category app-startup nsBrowserGlue service,@mozilla.org/browser/browserglue;1 application={3c2e2abc-06d4-11e1-ac3b-374f68613e61} application={ec8030f7-c20a-464f-9b0e-13a3a9e97384} application={aa3c5121-dab2-40e2-81ca-7ea25febc110} application={a23983c0-fd0e-11dc-95ff-0800200c9a66} application={d1bfe7d9-c01e-4237-998b-7b5f960a4314} component {d8903bf6-68d5-4e97-bcd1-e4d3012f721a} nsBrowserGlue.js -#ifndef MOZ_MULET contract @mozilla.org/content-permission/prompt;1 {d8903bf6-68d5-4e97-bcd1-e4d3012f721a} -#endif diff --git a/browser/components/about/AboutRedirector.cpp b/browser/components/about/AboutRedirector.cpp index a09932d95..717ae9c48 100644 --- a/browser/components/about/AboutRedirector.cpp +++ b/browser/components/about/AboutRedirector.cpp @@ -35,75 +35,117 @@ struct RedirEntry { URI_SAFE_FOR_UNTRUSTED_CONTENT. */ static RedirEntry kRedirMap[] = { - { "blocked", "chrome://browser/content/blockedSite.xhtml", + { + "basilisk", "chrome://global/content/memoriam.xhtml", + nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT | + nsIAboutModule::HIDE_FROM_ABOUTABOUT + }, + { + "blocked", "chrome://browser/content/blockedSite.xhtml", nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT | nsIAboutModule::URI_CAN_LOAD_IN_CHILD | nsIAboutModule::ALLOW_SCRIPT | - nsIAboutModule::HIDE_FROM_ABOUTABOUT }, - { "certerror", "chrome://browser/content/aboutNetError.xhtml", + nsIAboutModule::HIDE_FROM_ABOUTABOUT + }, + { + "certerror", "chrome://browser/content/aboutNetError.xhtml", nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT | nsIAboutModule::URI_CAN_LOAD_IN_CHILD | nsIAboutModule::ALLOW_SCRIPT | - nsIAboutModule::HIDE_FROM_ABOUTABOUT }, - { "socialerror", "chrome://browser/content/aboutSocialError.xhtml", + nsIAboutModule::HIDE_FROM_ABOUTABOUT + }, + { + "socialerror", "chrome://browser/content/aboutSocialError.xhtml", nsIAboutModule::ALLOW_SCRIPT | - nsIAboutModule::HIDE_FROM_ABOUTABOUT }, - { "providerdirectory", "chrome://browser/content/aboutProviderDirectory.xhtml", + nsIAboutModule::HIDE_FROM_ABOUTABOUT + }, + { + "providerdirectory", "chrome://browser/content/aboutProviderDirectory.xhtml", nsIAboutModule::ALLOW_SCRIPT | - nsIAboutModule::HIDE_FROM_ABOUTABOUT }, - { "tabcrashed", "chrome://browser/content/aboutTabCrashed.xhtml", + nsIAboutModule::HIDE_FROM_ABOUTABOUT + }, + { + "tabcrashed", "chrome://browser/content/aboutTabCrashed.xhtml", nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT | nsIAboutModule::ALLOW_SCRIPT | - nsIAboutModule::HIDE_FROM_ABOUTABOUT }, - { "feeds", "chrome://browser/content/feeds/subscribe.xhtml", + nsIAboutModule::HIDE_FROM_ABOUTABOUT + }, + { + "feeds", "chrome://browser/content/feeds/subscribe.xhtml", nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT | nsIAboutModule::ALLOW_SCRIPT | - nsIAboutModule::HIDE_FROM_ABOUTABOUT }, - { "privatebrowsing", "chrome://browser/content/aboutPrivateBrowsing.xhtml", + nsIAboutModule::HIDE_FROM_ABOUTABOUT + }, + { + "privatebrowsing", "chrome://browser/content/aboutPrivateBrowsing.xhtml", nsIAboutModule::URI_MUST_LOAD_IN_CHILD | - nsIAboutModule::ALLOW_SCRIPT }, - { "rights", - "chrome://global/content/aboutRights.xhtml", + nsIAboutModule::ALLOW_SCRIPT + }, + { + "rights", "chrome://global/content/aboutRights.xhtml", nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT | nsIAboutModule::MAKE_LINKABLE | - nsIAboutModule::ALLOW_SCRIPT }, - { "robots", "chrome://browser/content/aboutRobots.xhtml", + nsIAboutModule::ALLOW_SCRIPT + }, + { + "robots", "chrome://browser/content/aboutRobots.xhtml", nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT | - nsIAboutModule::ALLOW_SCRIPT }, - { "searchreset", "chrome://browser/content/search/searchReset.xhtml", + nsIAboutModule::ALLOW_SCRIPT + }, + { + "searchreset", "chrome://browser/content/search/searchReset.xhtml", nsIAboutModule::ALLOW_SCRIPT | - nsIAboutModule::HIDE_FROM_ABOUTABOUT }, - { "sessionrestore", "chrome://browser/content/aboutSessionRestore.xhtml", - nsIAboutModule::ALLOW_SCRIPT }, - { "welcomeback", "chrome://browser/content/aboutWelcomeBack.xhtml", - nsIAboutModule::ALLOW_SCRIPT }, - { "sync-tabs", "chrome://browser/content/sync/aboutSyncTabs.xul", - nsIAboutModule::ALLOW_SCRIPT }, - // Linkable because of indexeddb use (bug 1228118) + nsIAboutModule::HIDE_FROM_ABOUTABOUT + }, + { + "sessionrestore", "chrome://browser/content/aboutSessionRestore.xhtml", + nsIAboutModule::ALLOW_SCRIPT + }, + { + "welcomeback", "chrome://browser/content/aboutWelcomeBack.xhtml", + nsIAboutModule::ALLOW_SCRIPT + }, + { + "sync-tabs", "chrome://browser/content/sync/aboutSyncTabs.xul", + nsIAboutModule::ALLOW_SCRIPT + }, { "home", "chrome://browser/content/abouthome/aboutHome.xhtml", nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT | nsIAboutModule::URI_MUST_LOAD_IN_CHILD | nsIAboutModule::ALLOW_SCRIPT | + // Linkable because of indexeddb use (bug 1228118) nsIAboutModule::MAKE_LINKABLE | nsIAboutModule::ENABLE_INDEXED_DB }, - // the newtab's actual URL will be determined when the channel is created - { "newtab", "about:blank", - nsIAboutModule::ALLOW_SCRIPT }, - { "preferences", "chrome://browser/content/preferences/in-content/preferences.xul", - nsIAboutModule::ALLOW_SCRIPT }, - { "downloads", "chrome://browser/content/downloads/contentAreaDownloadsView.xul", - nsIAboutModule::ALLOW_SCRIPT }, + { + // the newtab's actual URL will be determined when the channel is created + "newtab", "about:blank", + nsIAboutModule::ALLOW_SCRIPT + }, + { + "preferences", "chrome://browser/content/preferences/in-content/preferences.xul", + nsIAboutModule::ALLOW_SCRIPT + }, + { + "downloads", "chrome://browser/content/downloads/contentAreaDownloadsView.xul", + nsIAboutModule::ALLOW_SCRIPT + }, #ifdef MOZ_SERVICES_HEALTHREPORT - { "healthreport", "chrome://browser/content/abouthealthreport/abouthealth.xhtml", - nsIAboutModule::ALLOW_SCRIPT }, + { + "healthreport", "chrome://browser/content/abouthealthreport/abouthealth.xhtml", + nsIAboutModule::ALLOW_SCRIPT + }, #endif - { "accounts", "chrome://browser/content/aboutaccounts/aboutaccounts.xhtml", - nsIAboutModule::ALLOW_SCRIPT }, - { "reader", "chrome://global/content/reader/aboutReader.html", + { + "accounts", "chrome://browser/content/aboutaccounts/aboutaccounts.xhtml", + nsIAboutModule::ALLOW_SCRIPT + }, + { + "reader", "chrome://global/content/reader/aboutReader.html", nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT | nsIAboutModule::ALLOW_SCRIPT | nsIAboutModule::URI_MUST_LOAD_IN_CHILD | - nsIAboutModule::HIDE_FROM_ABOUTABOUT }, + nsIAboutModule::HIDE_FROM_ABOUTABOUT + }, }; static const int kRedirTotal = ArrayLength(kRedirMap); diff --git a/browser/components/build/moz.build b/browser/components/build/moz.build index 8c99b74dd..622cf449c 100644 --- a/browser/components/build/moz.build +++ b/browser/components/build/moz.build @@ -12,8 +12,7 @@ SOURCES += [ 'nsModule.cpp', ] -Library('browsercomps') -FINAL_LIBRARY = 'xul' +XPCOMBinaryComponent('browsercomps') LOCAL_INCLUDES += [ '../about', @@ -22,3 +21,22 @@ LOCAL_INCLUDES += [ '../migration', '../shell', ] + +if CONFIG['OS_ARCH'] == 'WINNT': + OS_LIBS += [ + 'esent', + 'netapi32', + 'ole32', + 'shell32', + 'shlwapi', + 'version', + ] + DELAYLOAD_DLLS += [ + 'esent.dll', + 'netapi32.dll', + ] + +# Mac: Need to link with CoreFoundation for Mac Migrators (PList reading code) +# GTK2: Need to link with glib for GNOME shell service +if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('cocoa', 'gtk2', 'gtk3'): + OS_LIBS += CONFIG['TK_LIBS'] diff --git a/browser/components/build/nsModule.cpp b/browser/components/build/nsModule.cpp index f85d8812c..1fad0ce68 100644 --- a/browser/components/build/nsModule.cpp +++ b/browser/components/build/nsModule.cpp @@ -85,6 +85,7 @@ static const mozilla::Module::ContractIDEntry kBrowserContracts[] = { { NS_SHELLSERVICE_CONTRACTID, &kNS_SHELLSERVICE_CID }, #endif { NS_FEEDSNIFFER_CONTRACTID, &kNS_FEEDSNIFFER_CID }, + { NS_ABOUT_MODULE_CONTRACTID_PREFIX "basilisk", &kNS_BROWSER_ABOUT_REDIRECTOR_CID }, { NS_ABOUT_MODULE_CONTRACTID_PREFIX "blocked", &kNS_BROWSER_ABOUT_REDIRECTOR_CID }, { NS_ABOUT_MODULE_CONTRACTID_PREFIX "certerror", &kNS_BROWSER_ABOUT_REDIRECTOR_CID }, { NS_ABOUT_MODULE_CONTRACTID_PREFIX "socialerror", &kNS_BROWSER_ABOUT_REDIRECTOR_CID }, diff --git a/browser/components/customizableui/CustomizableUI.jsm b/browser/components/customizableui/CustomizableUI.jsm index 86ff2708b..cb0f519b2 100644 --- a/browser/components/customizableui/CustomizableUI.jsm +++ b/browser/components/customizableui/CustomizableUI.jsm @@ -207,15 +207,6 @@ var CustomizableUIInternal = { panelPlacements.splice(-1, 0, "developer-button"); } - if (AppConstants.E10S_TESTING_ONLY) { - if (gPalette.has("e10s-button")) { - let newWindowIndex = panelPlacements.indexOf("new-window-button"); - if (newWindowIndex > -1) { - panelPlacements.splice(newWindowIndex + 1, 0, "e10s-button"); - } - } - } - let showCharacterEncoding = Services.prefs.getComplexValue( "browser.menu.showCharacterEncoding", Ci.nsIPrefLocalizedString @@ -262,24 +253,14 @@ var CustomizableUIInternal = { defaultCollapsed: false, }, true); - if (AppConstants.platform != "macosx") { + if (AppConstants.MENUBAR_CAN_AUTOHIDE) { this.registerArea(CustomizableUI.AREA_MENUBAR, { legacy: true, type: CustomizableUI.TYPE_TOOLBAR, defaultPlacements: [ "menubar-items", ], - get defaultCollapsed() { - if (AppConstants.MENUBAR_CAN_AUTOHIDE) { - if (AppConstants.platform == "linux") { - return true; - } - // This is duplicated logic from /browser/base/jar.mn - // for win6BrowserOverlay.xul. - return AppConstants.isPlatformAndVersionAtLeast("win", 6); - } - return false; - } + defaultCollapsed: true, }, true); } diff --git a/browser/components/customizableui/CustomizableWidgets.jsm b/browser/components/customizableui/CustomizableWidgets.jsm index 907e2e0f7..3e83b081c 100644 --- a/browser/components/customizableui/CustomizableWidgets.jsm +++ b/browser/components/customizableui/CustomizableWidgets.jsm @@ -1187,10 +1187,7 @@ let preferencesButton = { win.openPreferences(); } }; -if (AppConstants.platform == "win") { - preferencesButton.label = "preferences-button.labelWin"; - preferencesButton.tooltiptext = "preferences-button.tooltipWin2"; -} else if (AppConstants.platform == "macosx") { +if (AppConstants.platform == "macosx") { preferencesButton.tooltiptext = "preferences-button.tooltiptext.withshortcut"; preferencesButton.shortcutId = "key_preferencesCmdMac"; } else { @@ -1261,21 +1258,3 @@ if (Services.prefs.getBoolPref("privacy.panicButton.enabled")) { }, }); } - -if (AppConstants.E10S_TESTING_ONLY) { - if (Services.appinfo.browserTabsRemoteAutostart) { - CustomizableWidgets.push({ - id: "e10s-button", - defaultArea: CustomizableUI.AREA_PANEL, - onBuild: function(aDocument) { - let node = aDocument.createElementNS(kNSXUL, "toolbarbutton"); - node.setAttribute("label", CustomizableUI.getLocalizedProperty(this, "label")); - node.setAttribute("tooltiptext", CustomizableUI.getLocalizedProperty(this, "tooltiptext")); - }, - onCommand: function(aEvent) { - let win = aEvent.view; - win.OpenBrowserWindow({remote: false}); - }, - }); - } -} diff --git a/browser/components/dirprovider/DirectoryProvider.cpp b/browser/components/dirprovider/DirectoryProvider.cpp index 7b4f81c7d..8b7c0b9e0 100644 --- a/browser/components/dirprovider/DirectoryProvider.cpp +++ b/browser/components/dirprovider/DirectoryProvider.cpp @@ -20,7 +20,7 @@ #include "nsDirectoryServiceUtils.h" #include "mozilla/ModuleUtils.h" #include "nsServiceManagerUtils.h" -#include "nsString.h" +#include "nsStringAPI.h" #include "nsXULAppAPI.h" #include "nsIPrefLocalizedString.h" diff --git a/browser/components/downloads/DownloadsCommon.jsm b/browser/components/downloads/DownloadsCommon.jsm index b6684817d..90f14f2d8 100644 --- a/browser/components/downloads/DownloadsCommon.jsm +++ b/browser/components/downloads/DownloadsCommon.jsm @@ -42,6 +42,8 @@ XPCOMUtils.defineLazyModuleGetter(this, "NetUtil", "resource://gre/modules/NetUtil.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "PluralForm", "resource://gre/modules/PluralForm.jsm"); +XPCOMUtils.defineLazyModuleGetter(this, "AppConstants", + "resource://gre/modules/AppConstants.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "Downloads", "resource://gre/modules/Downloads.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "DownloadUIHelper", @@ -460,8 +462,12 @@ this.DownloadsCommon = { throw new Error("aOwnerWindow must be a dom-window object"); } + let isWindowsExe = AppConstants.platform == "win" && + aFile.leafName.toLowerCase().endsWith(".exe"); + let promiseShouldLaunch; - if (aFile.isExecutable()) { + // Don't prompt on Windows for .exe since there will be a native prompt. + if (aFile.isExecutable() && !isWindowsExe) { // We get a prompter for the provided window here, even though anchoring // to the most recently active window should work as well. promiseShouldLaunch = diff --git a/browser/components/extensions/extension-win-panel.css b/browser/components/extensions/extension-win-panel.css deleted file mode 100644 index ddafe3ea5..000000000 --- a/browser/components/extensions/extension-win-panel.css +++ /dev/null @@ -1,7 +0,0 @@ -@media (-moz-os-version: windows-xp), - (-moz-os-version: windows-vista), - (-moz-os-version: windows-win7) { - body { - border-radius: 4px; - } -} diff --git a/browser/components/feeds/nsFeedSniffer.cpp b/browser/components/feeds/nsFeedSniffer.cpp index f2d0da776..f314d3d3b 100644 --- a/browser/components/feeds/nsFeedSniffer.cpp +++ b/browser/components/feeds/nsFeedSniffer.cpp @@ -185,15 +185,9 @@ IsDocumentElement(const char *start, const char* end) static bool ContainsTopLevelSubstring(nsACString& dataString, const char *substring) { - nsACString::const_iterator start, end; - dataString.BeginReading(start); - dataString.EndReading(end); - - if (!FindInReadable(nsCString(substring), start, end)){ + int32_t offset = dataString.Find(substring); + if (offset == -1) return false; - } - - auto offset = start.get() - dataString.Data(); const char *begin = dataString.BeginReading(); @@ -318,10 +312,9 @@ nsFeedSniffer::GetMIMETypeFromContent(nsIRequest* request, // RSS 1.0 if (!isFeed) { - bool foundNS_RDF = FindInReadable(NS_LITERAL_CSTRING(NS_RDF), dataString); - bool foundNS_RSS = FindInReadable(NS_LITERAL_CSTRING(NS_RSS), dataString); isFeed = ContainsTopLevelSubstring(dataString, "<rdf:RDF") && - foundNS_RDF && foundNS_RSS; + dataString.Find(NS_RDF) != -1 && + dataString.Find(NS_RSS) != -1; } // If we sniffed a feed, coerce our internal type diff --git a/browser/components/feeds/nsFeedSniffer.h b/browser/components/feeds/nsFeedSniffer.h index b7ac002bd..a0eb9862c 100644 --- a/browser/components/feeds/nsFeedSniffer.h +++ b/browser/components/feeds/nsFeedSniffer.h @@ -6,7 +6,7 @@ #include "nsIContentSniffer.h" #include "nsIStreamListener.h" -#include "nsString.h" +#include "nsStringAPI.h" #include "mozilla/Attributes.h" class nsFeedSniffer final : public nsIContentSniffer, diff --git a/browser/components/migration/FirefoxProfileMigrator.js b/browser/components/migration/FirefoxProfileMigrator.js index 60ffcf627..2714cdbcd 100644 --- a/browser/components/migration/FirefoxProfileMigrator.js +++ b/browser/components/migration/FirefoxProfileMigrator.js @@ -7,7 +7,7 @@ "use strict"; /* - * Migrates from a Firefox profile in a lossy manner in order to clean up a + * Migrates from a Basilisk profile in a lossy manner in order to clean up a * user's profile. Data is only migrated where the benefits outweigh the * potential problems caused by importing undesired/invalid configurations * from the source profile. diff --git a/browser/components/migration/MigrationUtils.jsm b/browser/components/migration/MigrationUtils.jsm index 104efe005..e133ec520 100644 --- a/browser/components/migration/MigrationUtils.jsm +++ b/browser/components/migration/MigrationUtils.jsm @@ -726,6 +726,7 @@ this.MigrationUtils = Object.freeze({ "Internet Explorer": "ie", "Microsoft Edge": "edge", "Safari": "safari", + "Basilisk": "firefox", "Firefox": "firefox", "Nightly": "firefox", "Google Chrome": "chrome", // Windows, Linux diff --git a/browser/components/migration/nsIEHistoryEnumerator.cpp b/browser/components/migration/nsIEHistoryEnumerator.cpp index 116e9a860..0b377d27e 100644 --- a/browser/components/migration/nsIEHistoryEnumerator.cpp +++ b/browser/components/migration/nsIEHistoryEnumerator.cpp @@ -9,10 +9,9 @@ #include "nsArrayEnumerator.h" #include "nsCOMArray.h" -#include "nsIURI.h" #include "nsIVariant.h" #include "nsNetUtil.h" -#include "nsString.h" +#include "nsStringAPI.h" #include "nsWindowsMigrationUtils.h" #include "prtime.h" @@ -23,7 +22,7 @@ NS_IMPL_ISUPPORTS(nsIEHistoryEnumerator, nsISimpleEnumerator) nsIEHistoryEnumerator::nsIEHistoryEnumerator() { - ::CoInitialize(nullptr); + ::CoInitialize(nullptr); } nsIEHistoryEnumerator::~nsIEHistoryEnumerator() diff --git a/browser/components/moz.build b/browser/components/moz.build index 3c0dea3fb..a49580200 100644 --- a/browser/components/moz.build +++ b/browser/components/moz.build @@ -10,7 +10,6 @@ DIRS += [ 'customizableui', 'dirprovider', 'downloads', - 'extensions', 'feeds', 'migration', 'newtab', @@ -26,6 +25,9 @@ DIRS += [ 'translation', ] +if CONFIG['MOZ_WEBEXTENSIONS']: + DIRS += ['webextensions'] + DIRS += ['build'] XPIDL_SOURCES += [ @@ -35,11 +37,8 @@ XPIDL_SOURCES += [ XPIDL_MODULE = 'browsercompsbase' -EXTRA_PP_COMPONENTS += [ - 'BrowserComponents.manifest', -] - EXTRA_COMPONENTS += [ + 'BrowserComponents.manifest', 'nsBrowserContentHandler.js', 'nsBrowserGlue.js', ] diff --git a/browser/components/nsBrowserContentHandler.js b/browser/components/nsBrowserContentHandler.js index e8fe0fe93..74144fc1b 100644 --- a/browser/components/nsBrowserContentHandler.js +++ b/browser/components/nsBrowserContentHandler.js @@ -454,16 +454,16 @@ nsBrowserContentHandler.prototype = { get helpInfo() { let info = - " --browser Open a browser window.\n" + - " --new-window <url> Open <url> in a new window.\n" + - " --new-tab <url> Open <url> in a new tab.\n" + - " --private-window <url> Open <url> in a new private window.\n"; + " --browser Open a browser window.\n" + + " --new-window <url> Open <url> in a new window.\n" + + " --new-tab <url> Open <url> in a new tab.\n" + + " --private-window <url> Open <url> in a new private window.\n"; if (AppConstants.platform == "win") { - info += " --preferences Open Options dialog.\n"; + info += " --preferences Open Options dialog.\n"; } else { - info += " --preferences Open Preferences dialog.\n"; + info += " --preferences Open Preferences dialog.\n"; } - info += " --search <term> Search <term> with your default search engine.\n"; + info += " --search <term> Search <term> with your default search engine.\n"; return info; }, @@ -558,7 +558,7 @@ nsBrowserContentHandler.prototype = { if (overridePage && startPage && !willRestoreSession && !skipStartPage) return overridePage + "|" + startPage; - return overridePage || startPage || "about:blank"; + return overridePage || startPage || "about:blank" || "about:logopage"; }, get startPage() { diff --git a/browser/components/nsBrowserGlue.js b/browser/components/nsBrowserGlue.js index d69a11f6b..448bb910d 100644 --- a/browser/components/nsBrowserGlue.js +++ b/browser/components/nsBrowserGlue.js @@ -64,20 +64,12 @@ XPCOMUtils.defineLazyServiceGetter(this, "AlertsService", "@mozilla.org/alerts-s ["Task", "resource://gre/modules/Task.jsm"], ["UITour", "resource:///modules/UITour.jsm"], ["URLBarZoom", "resource:///modules/URLBarZoom.jsm"], + ["UserAgentOverrides", "resource://gre/modules/UserAgentOverrides.jsm"], ["WebChannel", "resource://gre/modules/WebChannel.jsm"], ["WindowsRegistry", "resource://gre/modules/WindowsRegistry.jsm"], ["webrtcUI", "resource:///modules/webrtcUI.jsm"], ].forEach(([name, resource]) => XPCOMUtils.defineLazyModuleGetter(this, name, resource)); -if (AppConstants.MOZ_CRASHREPORTER) { - XPCOMUtils.defineLazyModuleGetter(this, "PluginCrashReporter", - "resource:///modules/ContentCrashHandlers.jsm"); - XPCOMUtils.defineLazyModuleGetter(this, "UnsubmittedCrashHandler", - "resource:///modules/ContentCrashHandlers.jsm"); - XPCOMUtils.defineLazyModuleGetter(this, "CrashSubmit", - "resource://gre/modules/CrashSubmit.jsm"); -} - XPCOMUtils.defineLazyGetter(this, "gBrandBundle", function() { return Services.strings.createBundle('chrome://branding/locale/brand.properties'); }); @@ -662,6 +654,8 @@ BrowserGlue.prototype = { } } catch (ex) { /* missing any of the prefs is not critical */ } + UserAgentOverrides.init(); + PageThumbs.init(); webrtcUI.init(); AboutHome.init(); @@ -707,10 +701,6 @@ BrowserGlue.prototype = { } TabCrashHandler.init(); - if (AppConstants.MOZ_CRASHREPORTER) { - PluginCrashReporter.init(); - UnsubmittedCrashHandler.init(); - } Services.obs.notifyObservers(null, "browser-ui-startup-complete", ""); }, @@ -1042,6 +1032,7 @@ BrowserGlue.prototype = { BrowserUsageTelemetry.uninit(); SelfSupportBackend.uninit(); + UserAgentOverrides.uninit(); PageThumbs.uninit(); NewTabMessages.uninit(); AboutNewTab.uninit(); diff --git a/browser/components/places/PlacesUIUtils.jsm b/browser/components/places/PlacesUIUtils.jsm index b25835a71..17fa276aa 100644 --- a/browser/components/places/PlacesUIUtils.jsm +++ b/browser/components/places/PlacesUIUtils.jsm @@ -46,43 +46,6 @@ let gFaviconLoadDataMap = new Map(); // copied from utilityOverlay.js const TAB_DROP_TYPE = "application/x-moz-tabbrowser-tab"; -// This function isn't public both because it's synchronous and because it is -// going to be removed in bug 1072833. -function IsLivemark(aItemId) { - // Since this check may be done on each dragover event, it's worth maintaining - // a cache. - let self = IsLivemark; - if (!("ids" in self)) { - const LIVEMARK_ANNO = PlacesUtils.LMANNO_FEEDURI; - - let idsVec = PlacesUtils.annotations.getItemsWithAnnotation(LIVEMARK_ANNO); - self.ids = new Set(idsVec); - - let obs = Object.freeze({ - QueryInterface: XPCOMUtils.generateQI(Ci.nsIAnnotationObserver), - - onItemAnnotationSet(itemId, annoName) { - if (annoName == LIVEMARK_ANNO) - self.ids.add(itemId); - }, - - onItemAnnotationRemoved(itemId, annoName) { - // If annoName is set to an empty string, the item is gone. - if (annoName == LIVEMARK_ANNO || annoName == "") - self.ids.delete(itemId); - }, - - onPageAnnotationSet() { }, - onPageAnnotationRemoved() { }, - }); - PlacesUtils.annotations.addObserver(obs); - PlacesUtils.registerShutdownFunction(() => { - PlacesUtils.annotations.removeObserver(obs); - }); - } - return self.ids.has(aItemId); -} - let InternalFaviconLoader = { /** * This gets called for every inner window that is destroyed. @@ -509,6 +472,52 @@ this.PlacesUIUtils = { }, /** + * Test if a bookmark item = a live bookmark item. + * + * @param aItemId + * item identifier + * @return true if a live bookmark item, false otherwise. + * + * @note Maybe this should be removed later, see bug 1072833. + */ + _isLivemark: + function PUIU__isLivemark(aItemId) + { + // Since this check may be done on each dragover event, it's worth maintaining + // a cache. + let self = PUIU__isLivemark; + if (!("ids" in self)) { + const LIVEMARK_ANNO = PlacesUtils.LMANNO_FEEDURI; + + let idsVec = PlacesUtils.annotations.getItemsWithAnnotation(LIVEMARK_ANNO); + self.ids = new Set(idsVec); + + let obs = Object.freeze({ + QueryInterface: XPCOMUtils.generateQI(Ci.nsIAnnotationObserver), + + onItemAnnotationSet(itemId, annoName) { + if (annoName == LIVEMARK_ANNO) + self.ids.add(itemId); + }, + + onItemAnnotationRemoved(itemId, annoName) { + // If annoName is set to an empty string, the item is gone. + if (annoName == LIVEMARK_ANNO || annoName == "") + self.ids.delete(itemId); + }, + + onPageAnnotationSet() { }, + onPageAnnotationRemoved() { }, + }); + PlacesUtils.annotations.addObserver(obs); + PlacesUtils.registerShutdownFunction(() => { + PlacesUtils.annotations.removeObserver(obs); + }); + } + return self.ids.has(aItemId); + }, + + /** * Constructs a Transaction for the drop or paste of a blob of data into * a container. * @param data @@ -857,7 +866,7 @@ this.PlacesUIUtils = { throw new Error("invalid value for aNodeOrItemId"); } - if (itemId == PlacesUtils.placesRootId || IsLivemark(itemId)) + if (itemId == PlacesUtils.placesRootId || this._isLivemark(itemId)) return true; // leftPaneFolderId, and as a result, allBookmarksFolderId, is a lazy getter diff --git a/browser/components/places/content/controller.js b/browser/components/places/content/controller.js index 0d66fbcaf..ebdab60f4 100644 --- a/browser/components/places/content/controller.js +++ b/browser/components/places/content/controller.js @@ -253,7 +253,8 @@ PlacesController.prototype = { } else host = NetUtil.newURI(this._view.selectedNode.uri).host; - ForgetAboutSite.removeDataFromDomain(host); + ForgetAboutSite.removeDataFromDomain(host) + .catch(Components.utils.reportError); break; case "cmd_selectAll": this.selectAll(); diff --git a/browser/components/places/content/editBookmarkOverlay.js b/browser/components/places/content/editBookmarkOverlay.js index e26cfb138..d59f5c764 100644 --- a/browser/components/places/content/editBookmarkOverlay.js +++ b/browser/components/places/content/editBookmarkOverlay.js @@ -57,12 +57,14 @@ var gEditItemOverlay = { } } let focusedElement = aInitInfo.focusedElement; + let onPanelReady = aInitInfo.onPanelReady; return this._paneInfo = { itemId, itemGuid, isItem, isURI, uri, title, isBookmark, isFolderShortcut, isParentReadOnly, bulkTagging, uris, - visibleRows, postData, isTag, focusedElement }; + visibleRows, postData, isTag, focusedElement, + onPanelReady }; }, get initialized() { @@ -214,7 +216,8 @@ var gEditItemOverlay = { let { itemId, isItem, isURI, isBookmark, bulkTagging, uris, - visibleRows, focusedElement } = this._setPaneInfo(aInfo); + visibleRows, focusedElement, + onPanelReady } = this._setPaneInfo(aInfo); let showOrCollapse = (rowId, isAppropriateForInput, nameInHiddenRows = null) => { @@ -286,22 +289,34 @@ var gEditItemOverlay = { this._observersAdded = true; } - // The focusedElement possible values are: - // * preferred: focus the field that the user touched first the last - // time the pane was shown (either namePicker or tagsField) - // * first: focus the first non collapsed textbox - // Note: since all controls are collapsed by default, we don't get the - // default XUL dialog behavior, that selects the first control, so we set - // the focus explicitly. - let elt; - if (focusedElement === "preferred") { - elt = this._element(gPrefService.getCharPref("browser.bookmarks.editDialog.firstEditField")); - } else if (focusedElement === "first") { - elt = document.querySelector("textbox:not([collapsed=true])"); - } - if (elt) { - elt.focus(); - elt.select(); + let focusElement = () => { + // The focusedElement possible values are: + // * preferred: focus the field that the user touched first the last + // time the pane was shown (either namePicker or tagsField) + // * first: focus the first non collapsed textbox + // Note: since all controls are collapsed by default, we don't get the + // default XUL dialog behavior, that selects the first control, so we set + // the focus explicitly. + // Note: If focusedElement === "preferred", this file expects gPrefService + // to be defined in the global scope. + let elt; + if (focusedElement === "preferred") { + /* eslint-disable no-undef */ + elt = this._element(gPrefService.getCharPref("browser.bookmarks.editDialog.firstEditField")); + /* eslint-enable no-undef */ + } else if (focusedElement === "first") { + elt = document.querySelector("textbox:not([collapsed=true])"); + } + if (elt) { + elt.focus(); + elt.select(); + } + }; + + if (onPanelReady) { + onPanelReady(focusElement); + } else { + focusElement(); } }, @@ -335,10 +350,23 @@ var gEditItemOverlay = { if (aElement.value != aValue) { aElement.value = aValue; - // Clear the undo stack - let editor = aElement.editor; - if (editor) - editor.transactionManager.clear(); + // Clear the editor's undo stack + let transactionManager; + try { + transactionManager = aElement.editor.transactionManager; + } catch (e) { + // When retrieving the transaction manager, editor may be null resulting + // in a TypeError. Additionally, the transaction manager may not + // exist yet, which causes access to it to throw NS_ERROR_FAILURE. + // In either event, the transaction manager doesn't exist it, so we + // don't need to worry about clearing it. + if (!(e instanceof TypeError) && e.result != Cr.NS_ERROR_FAILURE) { + throw e; + } + } + if (transactionManager) { + transactionManager.clear(); + } } }, diff --git a/browser/components/places/content/treeView.js b/browser/components/places/content/treeView.js index 5baf3a21f..181bb5404 100644 --- a/browser/components/places/content/treeView.js +++ b/browser/components/places/content/treeView.js @@ -170,7 +170,9 @@ PlacesTreeView.prototype = { let row = -1; let useNodeIndex = typeof(aNodeIndex) == "number"; if (parent == this._rootNode) { - row = useNodeIndex ? aNodeIndex : this._rootNode.getChildIndex(aNode); + if (aNode instanceof Ci.nsINavHistoryResultNode) { + row = useNodeIndex ? aNodeIndex : this._rootNode.getChildIndex(aNode); + } } else if (useNodeIndex && typeof(aParentRow) == "number") { // If we have both the row of the parent node, and the node's index, we diff --git a/browser/components/preferences/cookies.js b/browser/components/preferences/cookies.js index 1042642da..921eee4c0 100644 --- a/browser/components/preferences/cookies.js +++ b/browser/components/preferences/cookies.js @@ -30,6 +30,11 @@ var gCookiesWindow = { this._bundle = document.getElementById("bundlePreferences"); this._tree = document.getElementById("cookiesList"); + let removeAllCookies = document.getElementById("removeAllCookies"); + removeAllCookies.setAttribute("accesskey", this._bundle.getString("removeAllCookies.accesskey")); + let removeSelectedCookies = document.getElementById("removeSelectedCookies"); + removeSelectedCookies.setAttribute("accesskey", this._bundle.getString("removeSelectedCookies.accesskey")); + this._populateList(true); document.getElementById("filter").focus(); @@ -582,7 +587,7 @@ var gCookiesWindow = { } } - let buttonLabel = this._bundle.getString("removeSelectedCookies"); + let buttonLabel = this._bundle.getString("removeSelectedCookies.label"); let removeSelectedCookies = document.getElementById("removeSelectedCookies"); removeSelectedCookies.label = PluralForm.get(selectedCookieCount, buttonLabel) .replace("#1", selectedCookieCount); @@ -894,7 +899,17 @@ var gCookiesWindow = { }, _updateRemoveAllButton: function gCookiesWindow__updateRemoveAllButton() { - document.getElementById("removeAllCookies").disabled = this._view._rowCount == 0; + let removeAllCookies = document.getElementById("removeAllCookies"); + removeAllCookies.disabled = this._view._rowCount == 0; + + let labelStringID = "removeAllCookies.label"; + let accessKeyStringID = "removeAllCookies.accesskey"; + if (this._view._filtered) { + labelStringID = "removeAllShownCookies.label"; + accessKeyStringID = "removeAllShownCookies.accesskey"; + } + removeAllCookies.setAttribute("label", this._bundle.getString(labelStringID)); + removeAllCookies.setAttribute("accesskey", this._bundle.getString(accessKeyStringID)); }, filter: function () { diff --git a/browser/components/preferences/cookies.xul b/browser/components/preferences/cookies.xul index cda6ea220..bd60d9346 100644 --- a/browser/components/preferences/cookies.xul +++ b/browser/components/preferences/cookies.xul @@ -96,10 +96,8 @@ <hbox align="end"> <hbox class="actionButtons" flex="1"> <button id="removeSelectedCookies" disabled="true" icon="clear" - accesskey="&button.removeSelectedCookies.accesskey;" oncommand="gCookiesWindow.deleteCookie();"/> <button id="removeAllCookies" disabled="true" icon="clear" - label="&button.removeAllCookies.label;" accesskey="&button.removeAllCookies.accesskey;" oncommand="gCookiesWindow.deleteAllCookies();"/> <spacer flex="1"/> #ifndef XP_MACOSX diff --git a/browser/components/preferences/in-content/advanced.js b/browser/components/preferences/in-content/advanced.js index 448a21dae..5f9458eee 100644 --- a/browser/components/preferences/in-content/advanced.js +++ b/browser/components/preferences/in-content/advanced.js @@ -40,9 +40,6 @@ var gAdvancedPane = { this.updateReadPrefs(); } this.updateOfflineApps(); - if (AppConstants.MOZ_CRASHREPORTER) { - this.initSubmitCrashes(); - } this.initTelemetry(); if (AppConstants.MOZ_TELEMETRY_REPORTING) { this.initSubmitHealthReport(); diff --git a/browser/components/preferences/in-content/advanced.xul b/browser/components/preferences/in-content/advanced.xul index facaaeaa9..4973f8e09 100644 --- a/browser/components/preferences/in-content/advanced.xul +++ b/browser/components/preferences/in-content/advanced.xul @@ -54,13 +54,6 @@ type="bool"/> #endif - <!-- Data Choices tab --> -#ifdef MOZ_CRASHREPORTER - <preference id="browser.crashReports.unsubmittedCheck.autoSubmit2" - name="browser.crashReports.unsubmittedCheck.autoSubmit2" - type="bool"/> -#endif - <!-- Network tab --> <preference id="browser.cache.disk.capacity" name="browser.cache.disk.capacity" @@ -233,22 +226,6 @@ </vbox> </groupbox> #endif -#ifdef MOZ_CRASHREPORTER - <groupbox> - <caption> - <checkbox id="automaticallySubmitCrashesBox" - preference="browser.crashReports.unsubmittedCheck.autoSubmit2" - label="&alwaysSubmitCrashReports.label;" - accesskey="&alwaysSubmitCrashReports.accesskey;"/> - </caption> - <hbox class="indent"> - <label flex="1">&crashReporterDesc2.label;</label> - <spacer flex="10"/> - <label id="crashReporterLearnMore" - class="text-link">&crashReporterLearnMore.label;</label> - </hbox> - </groupbox> -#endif </tabpanel> #endif diff --git a/browser/components/preferences/in-content/content.js b/browser/components/preferences/in-content/content.js index 5ba334b02..a957b1dd5 100644 --- a/browser/components/preferences/in-content/content.js +++ b/browser/components/preferences/in-content/content.js @@ -78,6 +78,7 @@ var gContentPane = { document.getElementById("notificationsPolicyLearnMore").setAttribute("href", notificationInfoURL); +#ifdef MOZ_EME let drmInfoURL = Services.urlFormatter.formatURLPref("app.support.baseURL") + "drm-content"; document.getElementById("playDRMContentLink").setAttribute("href", drmInfoURL); @@ -91,6 +92,7 @@ var gContentPane = { // of the pane hiding/showing code potentially interfering: document.getElementById("drmGroup").setAttribute("style", "display: none !important"); } +#endif }, // UTILITY FUNCTIONS diff --git a/browser/components/preferences/in-content/content.xul b/browser/components/preferences/in-content/content.xul index c646c16a2..9434cba62 100644 --- a/browser/components/preferences/in-content/content.xul +++ b/browser/components/preferences/in-content/content.xul @@ -6,10 +6,12 @@ <preferences id="contentPreferences" hidden="true" data-category="paneContent"> +#ifdef MOZ_EME <!-- DRM content --> <preference id="media.eme.enabled" name="media.eme.enabled" type="bool"/> +#endif <!-- Popups --> <preference id="dom.disable_open_during_load" @@ -40,6 +42,7 @@ <html:a class="help-button" target="_blank" aria-label="&helpButton.label;"></html:a> </hbox> +#ifdef MOZ_EME <groupbox id="drmGroup" data-category="paneContent" hidden="true"> <caption><label>&drmContent.label;</label></caption> <grid id="contentGrid2"> @@ -60,6 +63,7 @@ </rows> </grid> </groupbox> +#endif <groupbox id="notificationsGroup" data-category="paneContent" hidden="true"> <caption><label>¬ificationsPolicy.label;</label></caption> diff --git a/browser/components/preferences/in-content/jar.mn b/browser/components/preferences/in-content/jar.mn index 52f536e96..3497ff555 100644 --- a/browser/components/preferences/in-content/jar.mn +++ b/browser/components/preferences/in-content/jar.mn @@ -12,7 +12,7 @@ browser.jar: content/browser/preferences/in-content/containers.js content/browser/preferences/in-content/advanced.js content/browser/preferences/in-content/applications.js - content/browser/preferences/in-content/content.js +* content/browser/preferences/in-content/content.js content/browser/preferences/in-content/sync.js content/browser/preferences/in-content/security.js content/browser/preferences/in-content/search.js diff --git a/browser/components/preferences/in-content/main.js b/browser/components/preferences/in-content/main.js index 4f20ba8c3..bac771bec 100644 --- a/browser/components/preferences/in-content/main.js +++ b/browser/components/preferences/in-content/main.js @@ -11,11 +11,6 @@ Components.utils.import("resource:///modules/TransientPrefs.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "OS", "resource://gre/modules/osfile.jsm"); -if (AppConstants.E10S_TESTING_ONLY) { - XPCOMUtils.defineLazyModuleGetter(this, "UpdateUtils", - "resource://gre/modules/UpdateUtils.jsm"); -} - var gMainPane = { /** * Initialization of this. @@ -83,26 +78,6 @@ var gMainPane = { setEventListener("chooseFolder", "command", gMainPane.chooseFolder); - if (AppConstants.E10S_TESTING_ONLY) { - setEventListener("e10sAutoStart", "command", - gMainPane.enableE10SChange); - let e10sCheckbox = document.getElementById("e10sAutoStart"); - - let e10sPref = document.getElementById("browser.tabs.remote.autostart"); - let e10sTempPref = document.getElementById("e10sTempPref"); - let e10sForceEnable = document.getElementById("e10sForceEnable"); - - let preffedOn = e10sPref.value || e10sTempPref.value || e10sForceEnable.value; - - if (preffedOn) { - // The checkbox is checked if e10s is preffed on and enabled. - e10sCheckbox.checked = Services.appinfo.browserTabsRemoteAutostart; - - // but if it's force disabled, then the checkbox is disabled. - e10sCheckbox.disabled = !Services.appinfo.browserTabsRemoteAutostart; - } - } - if (AppConstants.MOZ_DEV_EDITION) { let uAppData = OS.Constants.Path.userApplicationDataDir; let ignoreSeparateProfile = OS.Path.join(uAppData, "ignore-dev-edition-profile"); @@ -123,36 +98,7 @@ var gMainPane = { enableE10SChange: function () { - if (AppConstants.E10S_TESTING_ONLY) { - let e10sCheckbox = document.getElementById("e10sAutoStart"); - let e10sPref = document.getElementById("browser.tabs.remote.autostart"); - let e10sTempPref = document.getElementById("e10sTempPref"); - - let prefsToChange; - if (e10sCheckbox.checked) { - // Enabling e10s autostart - prefsToChange = [e10sPref]; - } else { - // Disabling e10s autostart - prefsToChange = [e10sPref]; - if (e10sTempPref.value) { - prefsToChange.push(e10sTempPref); - } - } - - let buttonIndex = confirmRestartPrompt(e10sCheckbox.checked, 0, - true, false); - if (buttonIndex == CONFIRM_RESTART_PROMPT_RESTART_NOW) { - for (let prefToChange of prefsToChange) { - prefToChange.value = e10sCheckbox.checked; - } - - Services.startup.quit(Ci.nsIAppStartup.eAttemptQuit | Ci.nsIAppStartup.eRestart); - } - - // Revert the checkbox in case we didn't quit - e10sCheckbox.checked = e10sPref.value || e10sTempPref.value; - } + // **STUB** }, separateProfileModeChange: function () diff --git a/browser/components/preferences/in-content/main.xul b/browser/components/preferences/in-content/main.xul index 526bbc714..8eca11877 100644 --- a/browser/components/preferences/in-content/main.xul +++ b/browser/components/preferences/in-content/main.xul @@ -9,18 +9,6 @@ <preferences id="mainPreferences" hidden="true" data-category="paneGeneral"> -#ifdef E10S_TESTING_ONLY - <preference id="browser.tabs.remote.autostart" - name="browser.tabs.remote.autostart" - type="bool"/> - <preference id="e10sTempPref" - name="browser.tabs.remote.autostart.2" - type="bool"/> - <preference id="e10sForceEnable" - name="browser.tabs.remote.force-enable" - type="bool"/> -#endif - <!-- Startup --> <preference id="browser.startup.page" name="browser.startup.page" @@ -135,11 +123,6 @@ </vbox> #endif -#ifdef E10S_TESTING_ONLY - <checkbox id="e10sAutoStart" - label="&e10sEnabled.label;"/> -#endif - #ifdef HAVE_SHELL_SERVICE <vbox id="defaultBrowserBox"> <hbox align="center"> diff --git a/browser/components/preferences/in-content/preferences.xul b/browser/components/preferences/in-content/preferences.xul index e9664eaf4..7ec7ef119 100644 --- a/browser/components/preferences/in-content/preferences.xul +++ b/browser/components/preferences/in-content/preferences.xul @@ -55,18 +55,10 @@ %advancedDTD; ]> -#ifdef XP_WIN -#define USE_WIN_TITLE_STYLE -#endif - <page xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" xmlns:html="http://www.w3.org/1999/xhtml" disablefastfind="true" -#ifdef USE_WIN_TITLE_STYLE - title="&prefWindow.titleWin;"> -#else title="&prefWindow.title;"> -#endif <html:link rel="shortcut icon" href="chrome://browser/skin/preferences/in-content/favicon.ico"/> diff --git a/browser/components/preferences/in-content/security.js b/browser/components/preferences/in-content/security.js index a8ad28c7e..0d7af39a3 100644 --- a/browser/components/preferences/in-content/security.js +++ b/browser/components/preferences/in-content/security.js @@ -168,12 +168,24 @@ var gSecurityPane = { let safeBrowsingPhishingPref = document.getElementById("browser.safebrowsing.phishing.enabled"); let safeBrowsingMalwarePref = document.getElementById("browser.safebrowsing.malware.enabled"); + let safeBrowsingUIPref = document.getElementById("browser.safebrowsing.UI.enabled"); + let safeBrowsingUISep = document.getElementById("safeBrowsingUISep"); + let safeBrowsingUIGroup = document.getElementById("safeBrowsingUIGroup"); + let blockDownloadsPref = document.getElementById("browser.safebrowsing.downloads.enabled"); let malwareTable = document.getElementById("urlclassifier.malwareTable"); let blockUnwantedPref = document.getElementById("browser.safebrowsing.downloads.remote.block_potentially_unwanted"); let blockUncommonPref = document.getElementById("browser.safebrowsing.downloads.remote.block_uncommon"); + if (safeBrowsingUIPref.value == false) { + safeBrowsingUISep.setAttribute("hidden", "true"); + safeBrowsingUIGroup.setAttribute("hidden", "true"); + } else { + safeBrowsingUISep.removeAttribute("hidden"); + safeBrowsingUIGroup.removeAttribute("hidden"); + } + enableSafeBrowsing.addEventListener("command", function() { safeBrowsingPhishingPref.value = enableSafeBrowsing.checked; safeBrowsingMalwarePref.value = enableSafeBrowsing.checked; diff --git a/browser/components/preferences/in-content/security.xul b/browser/components/preferences/in-content/security.xul index a10576c25..5dc8ad5e9 100644 --- a/browser/components/preferences/in-content/security.xul +++ b/browser/components/preferences/in-content/security.xul @@ -28,6 +28,10 @@ name="browser.safebrowsing.phishing.enabled" type="bool"/> + <preference id="browser.safebrowsing.UI.enabled" + name="browser.safebrowsing.UI.enabled" + type="bool"/> + <preference id="browser.safebrowsing.downloads.enabled" name="browser.safebrowsing.downloads.enabled" type="bool"/> @@ -45,6 +49,7 @@ <!-- Passwords --> <preference id="signon.rememberSignons" name="signon.rememberSignons" type="bool"/> + <preference id="signon.autofillForms" name="signon.autofillForms" type="bool"/> </preferences> @@ -72,8 +77,8 @@ accesskey="&addonExceptions.accesskey;"/> </hbox> - <separator class="thin"/> - <vbox align="start"> + <separator id="safeBrowsingUISep" class="thin"/> + <vbox id="safeBrowsingUIGroup" align="start"> <checkbox id="enableSafeBrowsing" label="&enableSafeBrowsing.label;" accesskey="&enableSafeBrowsing.accesskey;" /> @@ -103,6 +108,9 @@ accesskey="&passwordExceptions.accesskey;" preference="pref.privacy.disable_button.view_passwords_exceptions"/> </hbox> + <checkbox id="autofillPasswords" flex="1" + label="&autofillPasswords.label;" accesskey="&autofillPasswords.accesskey;" + preference="signon.autofillForms"/> <grid id="passwordGrid"> <columns> <column flex="1"/> diff --git a/browser/components/sessionstore/SessionStore.jsm b/browser/components/sessionstore/SessionStore.jsm index 2f44b2af3..93e21357f 100644 --- a/browser/components/sessionstore/SessionStore.jsm +++ b/browser/components/sessionstore/SessionStore.jsm @@ -186,6 +186,15 @@ XPCOMUtils.defineLazyModuleGetter(this, "ViewSourceBrowser", XPCOMUtils.defineLazyModuleGetter(this, "AsyncShutdown", "resource://gre/modules/AsyncShutdown.jsm"); +Object.defineProperty(this, "HUDService", { + get: function HUDService_getter() { + let devtools = Cu.import("resource://devtools/shared/Loader.jsm", {}).devtools; + return devtools.require("devtools/client/webconsole/hudservice").HUDService; + }, + configurable: true, + enumerable: true +}); + /** * |true| if we are in debug mode, |false| otherwise. * Debug mode is controlled by preference browser.sessionstore.debug @@ -2570,10 +2579,16 @@ var SessionStoreInternal = { this._capClosedWindows(); } + // Scratchpad if (lastSessionState.scratchpads) { ScratchpadManager.restoreSession(lastSessionState.scratchpads); } + // The Browser Console + if (lastSessionState.browserConsole) { + HUDService.restoreBrowserConsoleSession(); + } + // Set data that persists between sessions this._recentCrashes = lastSessionState.session && lastSessionState.session.recentCrashes || 0; @@ -2931,6 +2946,7 @@ var SessionStoreInternal = { global: this._globalState.getState() }; + // Scratchpad if (Cu.isModuleLoaded("resource://devtools/client/scratchpad/scratchpad-manager.jsm")) { // get open Scratchpad window states too let scratchpads = ScratchpadManager.getSessionState(); @@ -2939,6 +2955,9 @@ var SessionStoreInternal = { } } + // The Browser Console + state.browserConsole = HUDService.getBrowserConsoleSessionState(); + // Persist the last session if we deferred restoring it if (LastSession.canRestore) { state.lastSessionState = LastSession.getState(); @@ -3290,9 +3309,15 @@ var SessionStoreInternal = { this.restoreWindow(aWindow, root.windows[0], aOptions); + // Scratchpad if (aState.scratchpads) { ScratchpadManager.restoreSession(aState.scratchpads); } + + // The Browser Console + if (aState.browserConsole) { + HUDService.restoreBrowserConsoleSession(); + } }, /** diff --git a/browser/components/sessionstore/content/aboutSessionRestore.js b/browser/components/sessionstore/content/aboutSessionRestore.js index cc8d2da0b..8a9410aa8 100644 --- a/browser/components/sessionstore/content/aboutSessionRestore.js +++ b/browser/components/sessionstore/content/aboutSessionRestore.js @@ -41,7 +41,11 @@ window.onload = function() { return; } - gStateObject = JSON.parse(sessionData.value); + try { + gStateObject = JSON.parse(sessionData.value); + } catch (e) { + Cu.reportError(e); + } // make sure the data is tracked to be restored in case of a subsequent crash var event = document.createEvent("UIEvents"); @@ -68,30 +72,32 @@ function initTreeView() { var winLabel = tabList.getAttribute("_window_label"); gTreeData = []; - gStateObject.windows.forEach(function(aWinData, aIx) { - var winState = { - label: winLabel.replace("%S", (aIx + 1)), - open: true, - checked: true, - ix: aIx - }; - winState.tabs = aWinData.tabs.map(function(aTabData) { - var entry = aTabData.entries[aTabData.index - 1] || { url: "about:blank" }; - var iconURL = aTabData.image || null; - // don't initiate a connection just to fetch a favicon (see bug 462863) - if (/^https?:/.test(iconURL)) - iconURL = "moz-anno:favicon:" + iconURL; - return { - label: entry.title || entry.url, + if (gStateObject) { + gStateObject.windows.forEach(function(aWinData, aIx) { + var winState = { + label: winLabel.replace("%S", (aIx + 1)), + open: true, checked: true, - src: iconURL, - parent: winState + ix: aIx }; - }); - gTreeData.push(winState); - for (let tab of winState.tabs) - gTreeData.push(tab); - }, this); + winState.tabs = aWinData.tabs.map(function(aTabData) { + var entry = aTabData.entries[aTabData.index - 1] || { url: "about:blank" }; + var iconURL = aTabData.image || null; + // don't initiate a connection just to fetch a favicon (see bug 462863) + if (/^https?:/.test(iconURL)) + iconURL = "moz-anno:favicon:" + iconURL; + return { + label: entry.title || entry.url, + checked: true, + src: iconURL, + parent: winState + }; + }); + gTreeData.push(winState); + for (let tab of winState.tabs) + gTreeData.push(tab); + }, this); + } tabList.view = treeView; tabList.view.selection.select(0); diff --git a/browser/components/shell/ShellService.jsm b/browser/components/shell/ShellService.jsm index 2a3400b60..cc225eae0 100644 --- a/browser/components/shell/ShellService.jsm +++ b/browser/components/shell/ShellService.jsm @@ -62,10 +62,10 @@ let ShellServiceInternal = { if (AppConstants.platform == "win") { let optOutValue = WindowsRegistry.readRegKey(Ci.nsIWindowsRegKey.ROOT_KEY_CURRENT_USER, - "Software\\Mozilla\\Firefox", + "Software\\Mozilla\\Basilisk", "DefaultBrowserOptOut"); WindowsRegistry.removeRegKey(Ci.nsIWindowsRegKey.ROOT_KEY_CURRENT_USER, - "Software\\Mozilla\\Firefox", + "Software\\Mozilla\\Basilisk", "DefaultBrowserOptOut"); if (optOutValue == "True") { Services.prefs.setBoolPref("browser.shell.checkDefaultBrowser", false); diff --git a/browser/components/shell/nsGNOMEShellService.cpp b/browser/components/shell/nsGNOMEShellService.cpp index f6c2613d4..613b5bffc 100644 --- a/browser/components/shell/nsGNOMEShellService.cpp +++ b/browser/components/shell/nsGNOMEShellService.cpp @@ -14,7 +14,7 @@ #include "nsDirectoryServiceDefs.h" #include "nsIPrefService.h" #include "prenv.h" -#include "nsString.h" +#include "nsStringAPI.h" #include "nsIGConfService.h" #include "nsIGIOService.h" #include "nsIGSettingsService.h" @@ -70,16 +70,16 @@ static const MimeTypeAssociation appTypes[] = { // GConf registry key constants #define DG_BACKGROUND "/desktop/gnome/background" -#define kDesktopImageKey DG_BACKGROUND "/picture_filename" -#define kDesktopOptionsKey DG_BACKGROUND "/picture_options" -#define kDesktopDrawBGKey DG_BACKGROUND "/draw_background" -#define kDesktopColorKey DG_BACKGROUND "/primary_color" +static const char kDesktopImageKey[] = DG_BACKGROUND "/picture_filename"; +static const char kDesktopOptionsKey[] = DG_BACKGROUND "/picture_options"; +static const char kDesktopDrawBGKey[] = DG_BACKGROUND "/draw_background"; +static const char kDesktopColorKey[] = DG_BACKGROUND "/primary_color"; -#define kDesktopBGSchema "org.gnome.desktop.background" -#define kDesktopImageGSKey "picture-uri" -#define kDesktopOptionGSKey "picture-options" -#define kDesktopDrawBGGSKey "draw-background" -#define kDesktopColorGSKey "primary-color" +static const char kDesktopBGSchema[] = "org.gnome.desktop.background"; +static const char kDesktopImageGSKey[] = "picture-uri"; +static const char kDesktopOptionGSKey[] = "picture-options"; +static const char kDesktopDrawBGGSKey[] = "draw-background"; +static const char kDesktopColorGSKey[] = "primary-color"; nsresult nsGNOMEShellService::Init() @@ -451,7 +451,7 @@ nsGNOMEShellService::SetDesktopBackground(nsIDOMElement* aElement, // Set the image to an empty string first to force a refresh // (since we could be writing a new image on top of an existing - // Firefox_wallpaper.png and nautilus doesn't monitor the file for changes) + // Basilisk_wallpaper.png and nautilus doesn't monitor the file for changes) gconf->SetString(NS_LITERAL_CSTRING(kDesktopImageKey), EmptyCString()); @@ -508,8 +508,7 @@ static void ColorToCString(uint32_t aColor, nsCString& aResult) { // The #rrrrggggbbbb format is used to match gdk_color_to_string() - aResult.SetLength(13); - char *buf = aResult.BeginWriting(); + char *buf = aResult.BeginWriting(13); if (!buf) return; diff --git a/browser/components/shell/nsGNOMEShellService.h b/browser/components/shell/nsGNOMEShellService.h index b3ef1a918..a7b003802 100644 --- a/browser/components/shell/nsGNOMEShellService.h +++ b/browser/components/shell/nsGNOMEShellService.h @@ -7,7 +7,7 @@ #define nsgnomeshellservice_h____ #include "nsIGNOMEShellService.h" -#include "nsString.h" +#include "nsStringAPI.h" #include "mozilla/Attributes.h" class nsGNOMEShellService final : public nsIGNOMEShellService diff --git a/browser/components/shell/nsMacShellService.cpp b/browser/components/shell/nsMacShellService.cpp index 48db4896b..d8d64039d 100644 --- a/browser/components/shell/nsMacShellService.cpp +++ b/browser/components/shell/nsMacShellService.cpp @@ -20,7 +20,7 @@ #include "nsIProperties.h" #include "nsServiceManagerUtils.h" #include "nsShellService.h" -#include "nsString.h" +#include "nsStringAPI.h" #include "nsIDocShell.h" #include "nsILoadContext.h" diff --git a/browser/components/shell/nsSetDefaultBrowser.js b/browser/components/shell/nsSetDefaultBrowser.js index bb09ab213..c7a78c538 100644 --- a/browser/components/shell/nsSetDefaultBrowser.js +++ b/browser/components/shell/nsSetDefaultBrowser.js @@ -21,7 +21,7 @@ nsSetDefaultBrowser.prototype = { } }, - helpInfo: " --setDefaultBrowser Set this app as the default browser.\n", + helpInfo: " --setDefaultBrowser Set this app as the default browser.\n", classID: Components.ID("{F57899D0-4E2C-4ac6-9E29-50C736103B0C}"), QueryInterface: XPCOMUtils.generateQI([Ci.nsICommandLineHandler]), diff --git a/browser/components/shell/nsWindowsShellService.cpp b/browser/components/shell/nsWindowsShellService.cpp index 416e00cbc..879b0c7f0 100644 --- a/browser/components/shell/nsWindowsShellService.cpp +++ b/browser/components/shell/nsWindowsShellService.cpp @@ -12,7 +12,6 @@ #include "nsIDOMElement.h" #include "nsIDOMHTMLImageElement.h" #include "nsIImageLoadingContent.h" -#include "nsIOutputStream.h" #include "nsIPrefService.h" #include "nsIPrefLocalizedString.h" #include "nsIServiceManager.h" @@ -102,18 +101,18 @@ OpenKeyForReading(HKEY aKeyRoot, const nsAString& aKeyName, HKEY* aKey) // .htm .html .shtml .xht .xhtml // are mapped like so: // -// HKCU\SOFTWARE\Classes\.<ext>\ (default) REG_SZ FirefoxHTML +// HKCU\SOFTWARE\Classes\.<ext>\ (default) REG_SZ BasiliskHTML // // as aliases to the class: // -// HKCU\SOFTWARE\Classes\FirefoxHTML\ +// HKCU\SOFTWARE\Classes\BasiliskHTML\ // DefaultIcon (default) REG_SZ <apppath>,1 // shell\open\command (default) REG_SZ <apppath> -osint -url "%1" // shell\open\ddeexec (default) REG_SZ <empty string> // // - Windows Vista and above Protocol Handler // -// HKCU\SOFTWARE\Classes\FirefoxURL\ (default) REG_SZ <appname> URL +// HKCU\SOFTWARE\Classes\BasiliskURL\ (default) REG_SZ <appname> URL // EditFlags REG_DWORD 2 // FriendlyTypeName REG_SZ <appname> URL // DefaultIcon (default) REG_SZ <apppath>,1 @@ -133,10 +132,10 @@ OpenKeyForReading(HKEY aKeyRoot, const nsAString& aKeyName, HKEY* aKey) // // - Windows Start Menu (XP SP1 and newer) // ------------------------------------------------- -// The following keys are set to make Firefox appear in the Start Menu as the +// The following keys are set to make Basilisk appear in the Start Menu as the // browser: // -// HKCU\SOFTWARE\Clients\StartMenuInternet\FIREFOX.EXE\ +// HKCU\SOFTWARE\Clients\StartMenuInternet\BASILISK.EXE\ // (default) REG_SZ <appname> // DefaultIcon (default) REG_SZ <apppath>,0 // InstallInfo HideIconsCommand REG_SZ <uninstpath> /HideShortcuts @@ -157,7 +156,7 @@ typedef struct { const char* oldValueData; } SETTING; -#define APP_REG_NAME L"Firefox" +#define APP_REG_NAME L"Basilisk" #define VAL_FILE_ICON "%APPPATH%,1" #define VAL_OPEN "\"%APPPATH%\" -osint -url \"%1\"" #define OLD_VAL_OPEN "\"%APPPATH%\" -requestPending -osint -url \"%1\"" @@ -171,11 +170,11 @@ typedef struct { PREFIX MID // The DefaultIcon registry key value should never be used when checking if -// Firefox is the default browser for file handlers since other applications +// Basilisk is the default browser for file handlers since other applications // (e.g. MS Office) may modify the DefaultIcon registry key value to add Icon // Handlers. see http://msdn2.microsoft.com/en-us/library/aa969357.aspx for // more info. The FTP protocol is not checked so advanced users can set the FTP -// handler to another application and still have Firefox check if it is the +// handler to another application and still have Basilisk check if it is the // default HTTP and HTTPS handler. // *** Do not add additional checks here unless you skip them when aForAllTypes // is false below***. @@ -183,10 +182,10 @@ static SETTING gSettings[] = { // File Handler Class // ***keep this as the first entry because when aForAllTypes is not set below // it will skip over this check.*** - { MAKE_KEY_NAME1("FirefoxHTML", SOC), VAL_OPEN, OLD_VAL_OPEN }, + { MAKE_KEY_NAME1("BasiliskHTML", SOC), VAL_OPEN, OLD_VAL_OPEN }, // Protocol Handler Class - for Vista and above - { MAKE_KEY_NAME1("FirefoxURL", SOC), VAL_OPEN, OLD_VAL_OPEN }, + { MAKE_KEY_NAME1("BasiliskURL", SOC), VAL_OPEN, OLD_VAL_OPEN }, // Protocol Handlers { MAKE_KEY_NAME1("HTTP", DI), VAL_FILE_ICON }, @@ -196,14 +195,14 @@ static SETTING gSettings[] = { }; // The settings to disable DDE are separate from the default browser settings -// since they are only checked when Firefox is the default browser and if they +// since they are only checked when Basilisk is the default browser and if they // are incorrect they are fixed without notifying the user. static SETTING gDDESettings[] = { // File Handler Class - { MAKE_KEY_NAME1("Software\\Classes\\FirefoxHTML", SOD) }, + { MAKE_KEY_NAME1("Software\\Classes\\BasiliskHTML", SOD) }, // Protocol Handler Class - for Vista and above - { MAKE_KEY_NAME1("Software\\Classes\\FirefoxURL", SOD) }, + { MAKE_KEY_NAME1("Software\\Classes\\BasiliskURL", SOD) }, // Protocol Handlers { MAKE_KEY_NAME1("Software\\Classes\\FTP", SOD) }, @@ -340,7 +339,7 @@ IsAARDefault(const RefPtr<IApplicationAssociationRegistration>& pAAR, return false; } - LPCWSTR progID = isProtocol ? L"FirefoxURL" : L"FirefoxHTML"; + LPCWSTR progID = isProtocol ? L"BasiliskURL" : L"BasiliskHTML"; bool isDefault = !wcsicmp(registeredApp, progID); CoTaskMemFree(registeredApp); @@ -372,9 +371,9 @@ IsDefaultBrowserWin8(bool aCheckAllTypes, bool* aIsDefaultBrowser) /* * Query's the AAR for the default status. - * This only checks for FirefoxURL and if aCheckAllTypes is set, then - * it also checks for FirefoxHTML. Note that those ProgIDs are shared - * by all Firefox browsers. + * This only checks for BasiliskURL and if aCheckAllTypes is set, then + * it also checks for BasiliskHTML. Note that those ProgIDs are shared + * by all Basilisk browsers. */ bool nsWindowsShellService::IsDefaultBrowserVista(bool aCheckAllTypes, @@ -417,7 +416,7 @@ nsWindowsShellService::IsDefaultBrowser(bool aStartupCheck, return NS_ERROR_FAILURE; // Convert the path to a long path since GetModuleFileNameW returns the path - // that was used to launch Firefox which is not necessarily a long path. + // that was used to launch Basilisk which is not necessarily a long path. if (!::GetLongPathNameW(exePath, exePath, MAX_BUF)) return NS_ERROR_FAILURE; @@ -466,31 +465,32 @@ nsWindowsShellService::IsDefaultBrowser(bool aStartupCheck, return NS_OK; } - res = ::RegOpenKeyExW(HKEY_CLASSES_ROOT, keyName.get(), + res = ::RegOpenKeyExW(HKEY_CLASSES_ROOT, PromiseFlatString(keyName).get(), 0, KEY_SET_VALUE, &theKey); if (REG_FAILED(res)) { // If updating the open command fails try to update it using the helper - // application when setting Firefox as the default browser. + // application when setting Basilisk as the default browser. *aIsDefaultBrowser = false; return NS_OK; } + const nsString &flatValue = PromiseFlatString(valueData); res = ::RegSetValueExW(theKey, L"", 0, REG_SZ, - (const BYTE *) valueData.get(), - (valueData.Length() + 1) * sizeof(char16_t)); + (const BYTE *) flatValue.get(), + (flatValue.Length() + 1) * sizeof(char16_t)); // Close the key that was created. ::RegCloseKey(theKey); if (REG_FAILED(res)) { // If updating the open command fails try to update it using the helper - // application when setting Firefox as the default browser. + // application when setting Basilisk as the default browser. *aIsDefaultBrowser = false; return NS_OK; } } } - // Only check if Firefox is the default browser on Vista and above if the - // previous checks show that Firefox is the default browser. + // Only check if Basilisk is the default browser on Vista and above if the + // previous checks show that Basilisk is the default browser. if (*aIsDefaultBrowser) { IsDefaultBrowserVista(aForAllTypes, aIsDefaultBrowser); if (IsWin8OrLater()) { @@ -499,9 +499,9 @@ nsWindowsShellService::IsDefaultBrowser(bool aStartupCheck, } // To handle the case where DDE isn't disabled due for a user because there - // account didn't perform a Firefox update this will check if Firefox is the + // account didn't perform a Basilisk update this will check if Basilisk is the // default browser and if dde is disabled for each handler - // and if it isn't disable it. When Firefox is not the default browser the + // and if it isn't disable it. When Basilisk is not the default browser the // helper application will disable dde for each handler. if (*aIsDefaultBrowser && aForAllTypes) { // Check ftp settings @@ -515,7 +515,7 @@ nsWindowsShellService::IsDefaultBrowser(bool aStartupCheck, if (NS_FAILED(rv)) { ::RegCloseKey(theKey); // If disabling DDE fails try to disable it using the helper - // application when setting Firefox as the default browser. + // application when setting Basilisk as the default browser. *aIsDefaultBrowser = false; return NS_OK; } @@ -529,13 +529,14 @@ nsWindowsShellService::IsDefaultBrowser(bool aStartupCheck, if (REG_FAILED(res) || char16_t('\0') != *currValue) { // Key wasn't set or was set to something other than our registry entry. // Delete the key along with all of its childrean and then recreate it. - ::SHDeleteKeyW(HKEY_CURRENT_USER, keyName.get()); - res = ::RegCreateKeyExW(HKEY_CURRENT_USER, keyName.get(), 0, nullptr, + const nsString &flatName = PromiseFlatString(keyName); + ::SHDeleteKeyW(HKEY_CURRENT_USER, flatName.get()); + res = ::RegCreateKeyExW(HKEY_CURRENT_USER, flatName.get(), 0, nullptr, REG_OPTION_NON_VOLATILE, KEY_SET_VALUE, nullptr, &theKey, nullptr); if (REG_FAILED(res)) { // If disabling DDE fails try to disable it using the helper - // application when setting Firefox as the default browser. + // application when setting Basilisk as the default browser. *aIsDefaultBrowser = false; return NS_OK; } @@ -546,7 +547,7 @@ nsWindowsShellService::IsDefaultBrowser(bool aStartupCheck, ::RegCloseKey(theKey); if (REG_FAILED(res)) { // If disabling DDE fails try to disable it using the helper - // application when setting Firefox as the default browser. + // application when setting Basilisk as the default browser. *aIsDefaultBrowser = false; return NS_OK; } @@ -582,13 +583,14 @@ nsWindowsShellService::IsDefaultBrowser(bool aStartupCheck, NS_ConvertUTF8toUTF16 valueData(VAL_OPEN); valueData.Replace(offset, 9, appLongPath); + const nsString &flatValue = PromiseFlatString(valueData); res = ::RegSetValueExW(theKey, L"", 0, REG_SZ, - (const BYTE *) valueData.get(), - (valueData.Length() + 1) * sizeof(char16_t)); + (const BYTE *) flatValue.get(), + (flatValue.Length() + 1) * sizeof(char16_t)); // Close the key that was created. ::RegCloseKey(theKey); // If updating the FTP protocol handlers shell open command fails try to - // update it using the helper application when setting Firefox as the + // update it using the helper application when setting Basilisk as the // default browser. if (REG_FAILED(res)) { *aIsDefaultBrowser = false; @@ -646,11 +648,6 @@ nsWindowsShellService::LaunchControlPanelDefaultsSelectionUI() nsresult nsWindowsShellService::LaunchControlPanelDefaultPrograms() { - // This Default Programs feature is Win7+ only. - if (!IsWin7OrLater()) { - return NS_ERROR_FAILURE; - } - // Build the path control.exe path safely WCHAR controlEXEPath[MAX_PATH + 1] = { '\0' }; if (!GetSystemDirectoryW(controlEXEPath, MAX_PATH)) { @@ -1005,7 +1002,7 @@ nsWindowsShellService::SetDesktopBackground(nsIDOMElement* aElement, getter_AddRefs(file)); NS_ENSURE_SUCCESS(rv, rv); - // eventually, the path is "%APPDATA%\Mozilla\Firefox\Desktop Background.bmp" + // eventually, the path is "%APPDATA%\Mozilla\Basilisk\Desktop Background.bmp" rv = file->Append(fileLeafName); NS_ENSURE_SUCCESS(rv, rv); diff --git a/browser/components/shell/nsWindowsShellService.h b/browser/components/shell/nsWindowsShellService.h index b9c473a15..06c6c3c9b 100644 --- a/browser/components/shell/nsWindowsShellService.h +++ b/browser/components/shell/nsWindowsShellService.h @@ -7,7 +7,7 @@ #define nswindowsshellservice_h____ #include "nscore.h" -#include "nsString.h" +#include "nsStringAPI.h" #include "nsIWindowsShellService.h" #include "nsITimer.h" diff --git a/browser/components/extensions/.eslintrc.js b/browser/components/webextensions/.eslintrc.js index 81a11c4ac..81a11c4ac 100644 --- a/browser/components/extensions/.eslintrc.js +++ b/browser/components/webextensions/.eslintrc.js diff --git a/browser/components/extensions/ext-bookmarks.js b/browser/components/webextensions/ext-bookmarks.js index 399f6212d..399f6212d 100644 --- a/browser/components/extensions/ext-bookmarks.js +++ b/browser/components/webextensions/ext-bookmarks.js diff --git a/browser/components/extensions/ext-browserAction.js b/browser/components/webextensions/ext-browserAction.js index 97c6fd22c..2c82ac701 100644 --- a/browser/components/extensions/ext-browserAction.js +++ b/browser/components/webextensions/ext-browserAction.js @@ -9,9 +9,9 @@ XPCOMUtils.defineLazyModuleGetter(this, "clearTimeout", XPCOMUtils.defineLazyModuleGetter(this, "setTimeout", "resource://gre/modules/Timer.jsm"); -XPCOMUtils.defineLazyGetter(this, "colorUtils", () => { - return require("devtools/shared/css/color").colorUtils; -}); +XPCOMUtils.defineLazyServiceGetter(this, "DOMUtils", + "@mozilla.org/inspector/dom-utils;1", + "inIDOMUtils"); Cu.import("resource://devtools/shared/event-emitter.js"); Cu.import("resource://gre/modules/ExtensionUtils.jsm"); @@ -497,6 +497,9 @@ extensions.registerSchemaAPI("browserAction", "addon_parent", context => { // For internal consistency, we currently resolve both relative to the // calling context. let url = details.popup && context.uri.resolve(details.popup); + if (url && !context.checkLoadURL(url)) { + return Promise.reject({message: `Access denied for URL ${url}`}); + } BrowserAction.for(extension).setProperty(tab, "popup", url); }, @@ -511,7 +514,7 @@ extensions.registerSchemaAPI("browserAction", "addon_parent", context => { let tab = details.tabId !== null ? TabManager.getTab(details.tabId, context) : null; let color = details.color; if (!Array.isArray(color)) { - let col = colorUtils.colorToRGBA(color); + let col = DOMUtils.colorToRGBA(color); color = col && [col.r, col.g, col.b, Math.round(col.a * 255)]; } BrowserAction.for(extension).setProperty(tab, "badgeBackgroundColor", color); diff --git a/browser/components/extensions/ext-c-contextMenus.js b/browser/components/webextensions/ext-c-contextMenus.js index 9fde90808..9fde90808 100644 --- a/browser/components/extensions/ext-c-contextMenus.js +++ b/browser/components/webextensions/ext-c-contextMenus.js diff --git a/browser/components/extensions/ext-c-omnibox.js b/browser/components/webextensions/ext-c-omnibox.js index 3b9b6e2f7..3b9b6e2f7 100644 --- a/browser/components/extensions/ext-c-omnibox.js +++ b/browser/components/webextensions/ext-c-omnibox.js diff --git a/browser/components/extensions/ext-c-tabs.js b/browser/components/webextensions/ext-c-tabs.js index d5ce9fbf9..d5ce9fbf9 100644 --- a/browser/components/extensions/ext-c-tabs.js +++ b/browser/components/webextensions/ext-c-tabs.js diff --git a/browser/components/extensions/ext-commands.js b/browser/components/webextensions/ext-commands.js index 416544e86..b6e7ab3d1 100644 --- a/browser/components/extensions/ext-commands.js +++ b/browser/components/webextensions/ext-commands.js @@ -74,15 +74,14 @@ CommandList.prototype = { // For Windows, chrome.runtime expects 'win' while chrome.commands // expects 'windows'. We can special case this for now. let os = PlatformInfo.os == "win" ? "windows" : PlatformInfo.os; - for (let name of Object.keys(manifest.commands)) { - let command = manifest.commands[name]; - let shortcut = command.suggested_key[os] || command.suggested_key.default; - if (shortcut) { - commands.set(name, { - description: command.description, - shortcut: shortcut.replace(/\s+/g, ""), - }); - } + for (let [name, command] of Object.entries(manifest.commands)) { + let suggested_key = command.suggested_key || {}; + let shortcut = suggested_key[os] || suggested_key.default; + shortcut = shortcut ? shortcut.replace(/\s+/g, "") : null; + commands.set(name, { + description: command.description, + shortcut, + }); } return commands; }, @@ -96,8 +95,10 @@ CommandList.prototype = { let keyset = doc.createElementNS(XUL_NS, "keyset"); keyset.id = `ext-keyset-id-${this.id}`; this.commands.forEach((command, name) => { - let keyElement = this.buildKey(doc, name, command.shortcut); - keyset.appendChild(keyElement); + if (command.shortcut) { + let keyElement = this.buildKey(doc, name, command.shortcut); + keyset.appendChild(keyElement); + } }); doc.documentElement.appendChild(keyset); this.keysetsMap.set(window, keyset); @@ -162,11 +163,12 @@ CommandList.prototype = { // The modifiers are the remaining elements. keyElement.setAttribute("modifiers", this.getModifiersAttribute(parts)); - if (/^[A-Z0-9]$/.test(chromeKey)) { + if (/^[A-Z]$/.test(chromeKey)) { // We use the key attribute for all single digits and characters. keyElement.setAttribute("key", chromeKey); } else { keyElement.setAttribute("keycode", this.getKeycodeAttribute(chromeKey)); + keyElement.setAttribute("event", "keydown"); } return keyElement; @@ -186,6 +188,9 @@ CommandList.prototype = { * @returns {string} The constructed value for the Key's 'keycode' attribute. */ getKeycodeAttribute(chromeKey) { + if (/[0-9]/.test(chromeKey)) { + return `VK_${chromeKey}`; + } return `VK${chromeKey.replace(/([A-Z])/g, "_$&").toUpperCase()}`; }, diff --git a/browser/components/extensions/ext-contextMenus.js b/browser/components/webextensions/ext-contextMenus.js index b3bf8aa53..b3bf8aa53 100644 --- a/browser/components/extensions/ext-contextMenus.js +++ b/browser/components/webextensions/ext-contextMenus.js diff --git a/browser/components/extensions/ext-desktop-runtime.js b/browser/components/webextensions/ext-desktop-runtime.js index 0fdb45562..0fdb45562 100644 --- a/browser/components/extensions/ext-desktop-runtime.js +++ b/browser/components/webextensions/ext-desktop-runtime.js diff --git a/browser/components/extensions/ext-history.js b/browser/components/webextensions/ext-history.js index a47df1621..a47df1621 100644 --- a/browser/components/extensions/ext-history.js +++ b/browser/components/webextensions/ext-history.js diff --git a/browser/components/extensions/ext-omnibox.js b/browser/components/webextensions/ext-omnibox.js index 9b2f60ca4..9b2f60ca4 100644 --- a/browser/components/extensions/ext-omnibox.js +++ b/browser/components/webextensions/ext-omnibox.js diff --git a/browser/components/extensions/ext-pageAction.js b/browser/components/webextensions/ext-pageAction.js index 153f05d7a..5bf3a9c70 100644 --- a/browser/components/extensions/ext-pageAction.js +++ b/browser/components/webextensions/ext-pageAction.js @@ -273,6 +273,9 @@ extensions.registerSchemaAPI("pageAction", "addon_parent", context => { // For internal consistency, we currently resolve both relative to the // calling context. let url = details.popup && context.uri.resolve(details.popup); + if (url && !context.checkLoadURL(url)) { + return Promise.reject({message: `Access denied for URL ${url}`}); + } PageAction.for(extension).setProperty(tab, "popup", url); }, diff --git a/browser/components/extensions/ext-sessions.js b/browser/components/webextensions/ext-sessions.js index 4c13a1ac3..4c13a1ac3 100644 --- a/browser/components/extensions/ext-sessions.js +++ b/browser/components/webextensions/ext-sessions.js diff --git a/browser/components/extensions/ext-tabs.js b/browser/components/webextensions/ext-tabs.js index bb575aaab..bb575aaab 100644 --- a/browser/components/extensions/ext-tabs.js +++ b/browser/components/webextensions/ext-tabs.js diff --git a/browser/components/extensions/ext-utils.js b/browser/components/webextensions/ext-utils.js index 57c38a339..75b2f4bd4 100644 --- a/browser/components/extensions/ext-utils.js +++ b/browser/components/webextensions/ext-utils.js @@ -17,10 +17,6 @@ XPCOMUtils.defineLazyServiceGetter(this, "styleSheetService", "@mozilla.org/content/style-sheet-service;1", "nsIStyleSheetService"); -XPCOMUtils.defineLazyGetter(this, "colorUtils", () => { - return require("devtools/shared/css/color").colorUtils; -}); - Cu.import("resource://gre/modules/ExtensionUtils.jsm"); Cu.import("resource://gre/modules/AppConstants.jsm"); diff --git a/browser/components/extensions/ext-windows.js b/browser/components/webextensions/ext-windows.js index 5956ae15b..5956ae15b 100644 --- a/browser/components/extensions/ext-windows.js +++ b/browser/components/webextensions/ext-windows.js diff --git a/browser/components/extensions/extension-mac-panel.css b/browser/components/webextensions/extension-mac-panel.css index 2e9ed6bdb..2e9ed6bdb 100644 --- a/browser/components/extensions/extension-mac-panel.css +++ b/browser/components/webextensions/extension-mac-panel.css diff --git a/browser/components/extensions/extension-mac.css b/browser/components/webextensions/extension-mac.css index 49cd3b359..49cd3b359 100644 --- a/browser/components/extensions/extension-mac.css +++ b/browser/components/webextensions/extension-mac.css diff --git a/browser/components/webextensions/extension-win-panel.css b/browser/components/webextensions/extension-win-panel.css new file mode 100644 index 000000000..9da6da14c --- /dev/null +++ b/browser/components/webextensions/extension-win-panel.css @@ -0,0 +1,5 @@ +@media (-moz-os-version: windows-win7) { + body { + border-radius: 4px; + } +} diff --git a/browser/components/extensions/extension.css b/browser/components/webextensions/extension.css index 6b59033e3..6b59033e3 100644 --- a/browser/components/extensions/extension.css +++ b/browser/components/webextensions/extension.css diff --git a/browser/components/extensions/extension.svg b/browser/components/webextensions/extension.svg index a16455253..a16455253 100644 --- a/browser/components/extensions/extension.svg +++ b/browser/components/webextensions/extension.svg diff --git a/browser/components/extensions/extensions-browser.manifest b/browser/components/webextensions/extensions-browser.manifest index ed5cca813..ed5cca813 100644 --- a/browser/components/extensions/extensions-browser.manifest +++ b/browser/components/webextensions/extensions-browser.manifest diff --git a/browser/components/extensions/jar.mn b/browser/components/webextensions/jar.mn index a7b506ec4..a7b506ec4 100644 --- a/browser/components/extensions/jar.mn +++ b/browser/components/webextensions/jar.mn diff --git a/browser/components/extensions/moz.build b/browser/components/webextensions/moz.build index 116e90415..116e90415 100644 --- a/browser/components/extensions/moz.build +++ b/browser/components/webextensions/moz.build diff --git a/browser/components/extensions/schemas/LICENSE b/browser/components/webextensions/schemas/LICENSE index 9314092fd..9314092fd 100644 --- a/browser/components/extensions/schemas/LICENSE +++ b/browser/components/webextensions/schemas/LICENSE diff --git a/browser/components/extensions/schemas/bookmarks.json b/browser/components/webextensions/schemas/bookmarks.json index fb74c633e..fb74c633e 100644 --- a/browser/components/extensions/schemas/bookmarks.json +++ b/browser/components/webextensions/schemas/bookmarks.json diff --git a/browser/components/extensions/schemas/browser_action.json b/browser/components/webextensions/schemas/browser_action.json index 1a7da956a..1a7da956a 100644 --- a/browser/components/extensions/schemas/browser_action.json +++ b/browser/components/webextensions/schemas/browser_action.json diff --git a/browser/components/extensions/schemas/commands.json b/browser/components/webextensions/schemas/commands.json index a1632088e..a1632088e 100644 --- a/browser/components/extensions/schemas/commands.json +++ b/browser/components/webextensions/schemas/commands.json diff --git a/browser/components/extensions/schemas/context_menus.json b/browser/components/webextensions/schemas/context_menus.json index b31af51f3..b31af51f3 100644 --- a/browser/components/extensions/schemas/context_menus.json +++ b/browser/components/webextensions/schemas/context_menus.json diff --git a/browser/components/extensions/schemas/context_menus_internal.json b/browser/components/webextensions/schemas/context_menus_internal.json index c3cb7aff0..c3cb7aff0 100644 --- a/browser/components/extensions/schemas/context_menus_internal.json +++ b/browser/components/webextensions/schemas/context_menus_internal.json diff --git a/browser/components/extensions/schemas/history.json b/browser/components/webextensions/schemas/history.json index e05569e38..e05569e38 100644 --- a/browser/components/extensions/schemas/history.json +++ b/browser/components/webextensions/schemas/history.json diff --git a/browser/components/extensions/schemas/jar.mn b/browser/components/webextensions/schemas/jar.mn index c9fc9a808..c9fc9a808 100644 --- a/browser/components/extensions/schemas/jar.mn +++ b/browser/components/webextensions/schemas/jar.mn diff --git a/browser/components/extensions/schemas/moz.build b/browser/components/webextensions/schemas/moz.build index aac3a838c..aac3a838c 100644 --- a/browser/components/extensions/schemas/moz.build +++ b/browser/components/webextensions/schemas/moz.build diff --git a/browser/components/extensions/schemas/omnibox.json b/browser/components/webextensions/schemas/omnibox.json index 34428fab7..34428fab7 100644 --- a/browser/components/extensions/schemas/omnibox.json +++ b/browser/components/webextensions/schemas/omnibox.json diff --git a/browser/components/extensions/schemas/page_action.json b/browser/components/webextensions/schemas/page_action.json index f4f9ee8db..126378ca5 100644 --- a/browser/components/extensions/schemas/page_action.json +++ b/browser/components/webextensions/schemas/page_action.json @@ -173,6 +173,7 @@ { "name": "setPopup", "type": "function", + "async": true, "description": "Sets the html document to be opened as a popup when the user clicks on the page action's icon.", "parameters": [ { diff --git a/browser/components/extensions/schemas/sessions.json b/browser/components/webextensions/schemas/sessions.json index 690bb8ebc..690bb8ebc 100644 --- a/browser/components/extensions/schemas/sessions.json +++ b/browser/components/webextensions/schemas/sessions.json diff --git a/browser/components/extensions/schemas/tabs.json b/browser/components/webextensions/schemas/tabs.json index 23ce33a4b..23ce33a4b 100644 --- a/browser/components/extensions/schemas/tabs.json +++ b/browser/components/webextensions/schemas/tabs.json diff --git a/browser/components/extensions/schemas/windows.json b/browser/components/webextensions/schemas/windows.json index 8453358b5..8453358b5 100644 --- a/browser/components/extensions/schemas/windows.json +++ b/browser/components/webextensions/schemas/windows.json diff --git a/browser/config/mozconfigs/win32/common-opt b/browser/config/mozconfigs/win32/common-opt index d43a9878b..816c8926a 100644 --- a/browser/config/mozconfigs/win32/common-opt +++ b/browser/config/mozconfigs/win32/common-opt @@ -4,7 +4,6 @@ ac_add_options --enable-update-channel=${MOZ_UPDATE_CHANNEL} ac_add_options --enable-jemalloc -ac_add_options --enable-require-all-d3dc-versions if [ -f /c/builds/gapi.data ]; then _gapi_keyfile=c:/builds/gapi.data diff --git a/browser/config/mozconfigs/win32/debug b/browser/config/mozconfigs/win32/debug index 6beee93c2..815276d0f 100644 --- a/browser/config/mozconfigs/win32/debug +++ b/browser/config/mozconfigs/win32/debug @@ -6,7 +6,6 @@ ac_add_options --enable-debug ac_add_options --enable-dmd ac_add_options --enable-profiling # needed for --enable-dmd to work on Windows ac_add_options --enable-verify-mar -ac_add_options --enable-require-all-d3dc-versions # Needed to enable breakpad in application.ini export MOZILLA_OFFICIAL=1 diff --git a/browser/config/version.txt b/browser/config/version.txt index 4e9247c69..d90a8c220 100644 --- a/browser/config/version.txt +++ b/browser/config/version.txt @@ -1 +1 @@ -52.6.0 +52.9.0 diff --git a/browser/config/version_display.txt b/browser/config/version_display.txt index 4e9247c69..d90a8c220 100644 --- a/browser/config/version_display.txt +++ b/browser/config/version_display.txt @@ -1 +1 @@ -52.6.0 +52.9.0 diff --git a/browser/configure.in b/browser/configure.in new file mode 100644 index 000000000..9638c1e4d --- /dev/null +++ b/browser/configure.in @@ -0,0 +1,28 @@ +dnl -*- Mode: Autoconf; tab-width: 2; indent-tabs-mode: nil; -*- +dnl vi: set tabstop=2 shiftwidth=2 expandtab: +dnl This Source Code Form is subject to the terms of the Mozilla Public +dnl License, v. 2.0. If a copy of the MPL was not distributed with this +dnl file, You can obtain one at http://mozilla.org/MPL/2.0/. + +dnl Things we need to carry from confvars.sh +AC_DEFINE(MOZ_PHOENIX) +AC_SUBST(MOZ_PHOENIX) + +AC_DEFINE(MC_BASILISK) +AC_SUBST(MC_BASILISK) + +dnl Optional parts of the build. + +dnl ======================================================== +dnl = Disable WebExtensions +dnl ======================================================== +MOZ_ARG_DISABLE_BOOL(webextensions, +[ --disable-webextensions Disable WebExtensions], + MOZ_WEBEXTENSIONS=, + MOZ_WEBEXTENSIONS=1) + +if test -n "$MOZ_WEBEXTENSIONS"; then + AC_DEFINE(MOZ_WEBEXTENSIONS) +fi + +AC_SUBST(MOZ_WEBEXTENSIONS)
\ No newline at end of file diff --git a/browser/confvars.sh b/browser/confvars.sh index 1bc9d1ad0..41c0be3d7 100755 --- a/browser/confvars.sh +++ b/browser/confvars.sh @@ -3,10 +3,11 @@ # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. -MOZ_APP_BASENAME=Firefox -MOZ_APP_VENDOR=Mozilla -MOZ_UPDATER=1 +MOZ_APP_BASENAME=Basilisk +MOZ_APP_VENDOR=Moonchild MOZ_PHOENIX=1 +MC_BASILISK=1 +MOZ_UPDATER=1 if test "$OS_ARCH" = "WINNT" -o \ "$OS_ARCH" = "Linux"; then @@ -14,51 +15,51 @@ if test "$OS_ARCH" = "WINNT" -o \ fi if test "$OS_ARCH" = "WINNT"; then - MOZ_MAINTENANCE_SERVICE=1 - if ! test "$HAVE_64BIT_BUILD"; then - if test "$MOZ_UPDATE_CHANNEL" = "nightly" -o \ - "$MOZ_UPDATE_CHANNEL" = "aurora" -o \ - "$MOZ_UPDATE_CHANNEL" = "beta" -o \ - "$MOZ_UPDATE_CHANNEL" = "beta-dev" -o \ - "$MOZ_UPDATE_CHANNEL" = "release" -o \ - "$MOZ_UPDATE_CHANNEL" = "release-dev"; then - if ! test "$MOZ_DEBUG"; then - MOZ_STUB_INSTALLER=1 - fi - fi - fi + MOZ_MAINTENANCE_SERVICE= fi -# Enable building ./signmar and running libmar signature tests -MOZ_ENABLE_SIGNMAR=1 +# For Basilisk we want to use 52.9.YYYY.MM.DD as MOZ_APP_VERSION in release +# builds so add-on developers have something to target while maintaining +# Firefox compatiblity. +# To enable add "export BASILISK_VERSION=1" to the .mozconfig file. +# However, this will cause a full rebuild at 00:00 UTC every day so +# don't export the variable if you are in development or don't care. +# When not exported we fall back the value in the version*.txt file. +if test -n "$BASILISK_VERSION" ; then + MOZ_APP_VERSION=52.9.`date --utc '+%Y.%m.%d'` + MOZ_APP_VERSION_DISPLAY=`date --utc '+%Y.%m.%d'` +else + MOZ_APP_VERSION=`cat ${_topsrcdir}/$MOZ_BUILD_APP/config/version.txt` + MOZ_APP_VERSION_DISPLAY=`cat ${_topsrcdir}/$MOZ_BUILD_APP/config/version_display.txt` +fi -MOZ_APP_VERSION=`cat ${_topsrcdir}/$MOZ_BUILD_APP/config/version.txt` -MOZ_APP_VERSION_DISPLAY=`cat ${_topsrcdir}/$MOZ_BUILD_APP/config/version_display.txt` MOZ_EXTENSIONS_DEFAULT=" gio" + # MOZ_APP_DISPLAYNAME will be set by branding/configure.sh # MOZ_BRANDING_DIRECTORY is the default branding directory used when none is # specified. It should never point to the "official" branding directory. -# For mozilla-beta, mozilla-release, or mozilla-central repositories, use -# "unofficial" branding. -# For the mozilla-aurora repository, use "aurora". -MOZ_BRANDING_DIRECTORY=browser/branding/unofficial -MOZ_OFFICIAL_BRANDING_DIRECTORY=browser/branding/official +MOZ_BRANDING_DIRECTORY=$MOZ_BUILD_APP/branding/unofficial +MOZ_OFFICIAL_BRANDING_DIRECTORY=$MOZ_BUILD_APP/branding/official MOZ_APP_ID={ec8030f7-c20a-464f-9b0e-13a3a9e97384} # This should usually be the same as the value MAR_CHANNEL_ID. # If more than one ID is needed, then you should use a comma separated list # of values. -ACCEPTED_MAR_CHANNEL_IDS=firefox-mozilla-esr +ACCEPTED_MAR_CHANNEL_IDS=basilisk-release # The MAR_CHANNEL_ID must not contain the following 3 characters: ",\t " -MAR_CHANNEL_ID=firefox-mozilla-esr +MAR_CHANNEL_ID=basilisk-release + +# Features MOZ_PROFILE_MIGRATOR=1 MOZ_APP_STATIC_INI=1 MOZ_WEBGL_CONFORMANT=1 MOZ_JSDOWNLOADS=1 -MOZ_RUST_MP4PARSE=1 -MOZ_RUST_URLPARSE=1 - -# Enable checking that add-ons are signed by the trusted root -MOZ_ADDON_SIGNING=1 +MOZ_WEBRTC=1 +MOZ_WEBEXTENSIONS=1 +MOZ_DEVTOOLS=1 +MOZ_SERVICES_COMMON=1 +MOZ_SERVICES_SYNC=1 +MOZ_SERVICES_HEALTHREPORT= -# Include the DevTools client, not just the server (which is the default) -MOZ_DEVTOOLS=all +# Disable checking that add-ons are signed by the trusted root +MOZ_ADDON_SIGNING=0 +MOZ_REQUIRE_SIGNING=0 diff --git a/browser/experiments/.eslintrc.js b/browser/experiments/.eslintrc.js deleted file mode 100644 index 1f6b11d67..000000000 --- a/browser/experiments/.eslintrc.js +++ /dev/null @@ -1,11 +0,0 @@ -"use strict"; - -module.exports = { - "rules": { - "no-unused-vars": ["error", { - "vars": "all", - "varsIgnorePattern": "^(Cc|Ci|Cr|Cu|EXPORTED_SYMBOLS)$", - "args": "none" - }] - } -}; diff --git a/browser/experiments/Experiments.jsm b/browser/experiments/Experiments.jsm deleted file mode 100644 index e9a63f19f..000000000 --- a/browser/experiments/Experiments.jsm +++ /dev/null @@ -1,2354 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -"use strict"; - -this.EXPORTED_SYMBOLS = [ - "Experiments", -]; - -const {classes: Cc, interfaces: Ci, utils: Cu} = Components; - -Cu.import("resource://gre/modules/XPCOMUtils.jsm"); -Cu.import("resource://gre/modules/Services.jsm"); -Cu.import("resource://gre/modules/Task.jsm"); -Cu.import("resource://gre/modules/Promise.jsm"); -Cu.import("resource://gre/modules/osfile.jsm"); -Cu.import("resource://gre/modules/Log.jsm"); -Cu.import("resource://gre/modules/Preferences.jsm"); -Cu.import("resource://gre/modules/AsyncShutdown.jsm"); - -XPCOMUtils.defineLazyModuleGetter(this, "UpdateUtils", - "resource://gre/modules/UpdateUtils.jsm"); -XPCOMUtils.defineLazyModuleGetter(this, "AddonManager", - "resource://gre/modules/AddonManager.jsm"); -XPCOMUtils.defineLazyModuleGetter(this, "AddonManagerPrivate", - "resource://gre/modules/AddonManager.jsm"); -XPCOMUtils.defineLazyModuleGetter(this, "TelemetryEnvironment", - "resource://gre/modules/TelemetryEnvironment.jsm"); -XPCOMUtils.defineLazyModuleGetter(this, "TelemetryLog", - "resource://gre/modules/TelemetryLog.jsm"); -XPCOMUtils.defineLazyModuleGetter(this, "TelemetryUtils", - "resource://gre/modules/TelemetryUtils.jsm"); -XPCOMUtils.defineLazyModuleGetter(this, "CommonUtils", - "resource://services-common/utils.js"); - -XPCOMUtils.defineLazyServiceGetter(this, "gCrashReporter", - "@mozilla.org/xre/app-info;1", - "nsICrashReporter"); - -const FILE_CACHE = "experiments.json"; -const EXPERIMENTS_CHANGED_TOPIC = "experiments-changed"; -const MANIFEST_VERSION = 1; -const CACHE_VERSION = 1; - -const KEEP_HISTORY_N_DAYS = 180; - -const PREF_BRANCH = "experiments."; -const PREF_ENABLED = "enabled"; // experiments.enabled -const PREF_ACTIVE_EXPERIMENT = "activeExperiment"; // whether we have an active experiment -const PREF_LOGGING = "logging"; -const PREF_LOGGING_LEVEL = PREF_LOGGING + ".level"; // experiments.logging.level -const PREF_LOGGING_DUMP = PREF_LOGGING + ".dump"; // experiments.logging.dump -const PREF_MANIFEST_URI = "manifest.uri"; // experiments.logging.manifest.uri -const PREF_FORCE_SAMPLE = "force-sample-value"; // experiments.force-sample-value - -const PREF_BRANCH_TELEMETRY = "toolkit.telemetry."; -const PREF_TELEMETRY_ENABLED = "enabled"; - -const URI_EXTENSION_STRINGS = "chrome://mozapps/locale/extensions/extensions.properties"; -const STRING_TYPE_NAME = "type.%ID%.name"; - -const CACHE_WRITE_RETRY_DELAY_SEC = 60 * 3; -const MANIFEST_FETCH_TIMEOUT_MSEC = 60 * 3 * 1000; // 3 minutes - -const TELEMETRY_LOG = { - // log(key, [kind, experimentId, details]) - ACTIVATION_KEY: "EXPERIMENT_ACTIVATION", - ACTIVATION: { - // Successfully activated. - ACTIVATED: "ACTIVATED", - // Failed to install the add-on. - INSTALL_FAILURE: "INSTALL_FAILURE", - // Experiment does not meet activation requirements. Details will - // be provided. - REJECTED: "REJECTED", - }, - - // log(key, [kind, experimentId, optionalDetails...]) - TERMINATION_KEY: "EXPERIMENT_TERMINATION", - TERMINATION: { - // The Experiments service was disabled. - SERVICE_DISABLED: "SERVICE_DISABLED", - // Add-on uninstalled. - ADDON_UNINSTALLED: "ADDON_UNINSTALLED", - // The experiment disabled itself. - FROM_API: "FROM_API", - // The experiment expired (e.g. by exceeding the end date). - EXPIRED: "EXPIRED", - // Disabled after re-evaluating conditions. If this is specified, - // details will be provided. - RECHECK: "RECHECK", - }, -}; -XPCOMUtils.defineConstant(this, "TELEMETRY_LOG", TELEMETRY_LOG); - -const gPrefs = new Preferences(PREF_BRANCH); -const gPrefsTelemetry = new Preferences(PREF_BRANCH_TELEMETRY); -var gExperimentsEnabled = false; -var gAddonProvider = null; -var gExperiments = null; -var gLogAppenderDump = null; -var gPolicyCounter = 0; -var gExperimentsCounter = 0; -var gExperimentEntryCounter = 0; -var gPreviousProviderCounter = 0; - -// Tracks active AddonInstall we know about so we can deny external -// installs. -var gActiveInstallURLs = new Set(); - -// Tracks add-on IDs that are being uninstalled by us. This allows us -// to differentiate between expected uninstalled and user-driven uninstalls. -var gActiveUninstallAddonIDs = new Set(); - -var gLogger; -var gLogDumping = false; - -function configureLogging() { - if (!gLogger) { - gLogger = Log.repository.getLogger("Browser.Experiments"); - gLogger.addAppender(new Log.ConsoleAppender(new Log.BasicFormatter())); - } - gLogger.level = gPrefs.get(PREF_LOGGING_LEVEL, Log.Level.Warn); - - let logDumping = gPrefs.get(PREF_LOGGING_DUMP, false); - if (logDumping != gLogDumping) { - if (logDumping) { - gLogAppenderDump = new Log.DumpAppender(new Log.BasicFormatter()); - gLogger.addAppender(gLogAppenderDump); - } else { - gLogger.removeAppender(gLogAppenderDump); - gLogAppenderDump = null; - } - gLogDumping = logDumping; - } -} - -// Loads a JSON file using OS.file. file is a string representing the path -// of the file to be read, options contains additional options to pass to -// OS.File.read. -// Returns a Promise resolved with the json payload or rejected with -// OS.File.Error or JSON.parse() errors. -function loadJSONAsync(file, options) { - return Task.spawn(function*() { - let rawData = yield OS.File.read(file, options); - // Read json file into a string - let data; - try { - // Obtain a converter to read from a UTF-8 encoded input stream. - let converter = new TextDecoder(); - data = JSON.parse(converter.decode(rawData)); - } catch (ex) { - gLogger.error("Experiments: Could not parse JSON: " + file + " " + ex); - throw ex; - } - return data; - }); -} - -// Returns a promise that is resolved with the AddonInstall for that URL. -function addonInstallForURL(url, hash) { - let deferred = Promise.defer(); - AddonManager.getInstallForURL(url, install => deferred.resolve(install), - "application/x-xpinstall", hash); - return deferred.promise; -} - -// Returns a promise that is resolved with an Array<Addon> of the installed -// experiment addons. -function installedExperimentAddons() { - let deferred = Promise.defer(); - AddonManager.getAddonsByTypes(["experiment"], (addons) => { - deferred.resolve(addons.filter(a => !a.appDisabled)); - }); - return deferred.promise; -} - -// Takes an Array<Addon> and returns a promise that is resolved when the -// addons are uninstalled. -function uninstallAddons(addons) { - let ids = new Set(addons.map(addon => addon.id)); - let deferred = Promise.defer(); - - let listener = {}; - listener.onUninstalled = addon => { - if (!ids.has(addon.id)) { - return; - } - - ids.delete(addon.id); - if (ids.size == 0) { - AddonManager.removeAddonListener(listener); - deferred.resolve(); - } - }; - - AddonManager.addAddonListener(listener); - - for (let addon of addons) { - // Disabling the add-on before uninstalling is necessary to cause tests to - // pass. This might be indicative of a bug in XPIProvider. - // TODO follow up in bug 992396. - addon.userDisabled = true; - addon.uninstall(); - } - - return deferred.promise; -} - -/** - * The experiments module. - */ - -var Experiments = { - /** - * Provides access to the global `Experiments.Experiments` instance. - */ - instance: function () { - if (!gExperiments) { - gExperiments = new Experiments.Experiments(); - } - - return gExperiments; - }, -}; - -/* - * The policy object allows us to inject fake enviroment data from the - * outside by monkey-patching. - */ - -Experiments.Policy = function () { - this._log = Log.repository.getLoggerWithMessagePrefix( - "Browser.Experiments.Policy", - "Policy #" + gPolicyCounter++ + "::"); - - // Set to true to ignore hash verification on downloaded XPIs. This should - // not be used outside of testing. - this.ignoreHashes = false; -}; - -Experiments.Policy.prototype = { - now: function () { - return new Date(); - }, - - random: function () { - let pref = gPrefs.get(PREF_FORCE_SAMPLE); - if (pref !== undefined) { - let val = Number.parseFloat(pref); - this._log.debug("random sample forced: " + val); - if (isNaN(val) || val < 0) { - return 0; - } - if (val > 1) { - return 1; - } - return val; - } - return Math.random(); - }, - - futureDate: function (offset) { - return new Date(this.now().getTime() + offset); - }, - - oneshotTimer: function (callback, timeout, thisObj, name) { - return CommonUtils.namedTimer(callback, timeout, thisObj, name); - }, - - updatechannel: function () { - return UpdateUtils.UpdateChannel; - }, - - locale: function () { - let chrome = Cc["@mozilla.org/chrome/chrome-registry;1"].getService(Ci.nsIXULChromeRegistry); - return chrome.getSelectedLocale("global"); - }, - - /** - * For testing a race condition, one of the tests delays the callback of - * writing the cache by replacing this policy function. - */ - delayCacheWrite: function(promise) { - return promise; - }, -}; - -function AlreadyShutdownError(message="already shut down") { - Error.call(this, message); - let error = new Error(); - this.name = "AlreadyShutdownError"; - this.message = message; - this.stack = error.stack; -} -AlreadyShutdownError.prototype = Object.create(Error.prototype); -AlreadyShutdownError.prototype.constructor = AlreadyShutdownError; - -function CacheWriteError(message="Error writing cache file") { - Error.call(this, message); - let error = new Error(); - this.name = "CacheWriteError"; - this.message = message; - this.stack = error.stack; -} -CacheWriteError.prototype = Object.create(Error.prototype); -CacheWriteError.prototype.constructor = CacheWriteError; - -/** - * Manages the experiments and provides an interface to control them. - */ - -Experiments.Experiments = function (policy=new Experiments.Policy()) { - let log = Log.repository.getLoggerWithMessagePrefix( - "Browser.Experiments.Experiments", - "Experiments #" + gExperimentsCounter++ + "::"); - - // At the time of this writing, Experiments.jsm has severe - // crashes. For forensics purposes, keep the last few log - // messages in memory and upload them in case of crash. - this._forensicsLogs = []; - this._forensicsLogs.length = 30; - this._log = Object.create(log); - this._log.log = (level, string, params) => { - this._addToForensicsLog("Experiments", string); - log.log(level, string, params); - }; - - this._log.trace("constructor"); - - // Capture the latest error, for forensics purposes. - this._latestError = null; - - - this._policy = policy; - - // This is a Map of (string -> ExperimentEntry), keyed with the experiment id. - // It holds both the current experiments and history. - // Map() preserves insertion order, which means we preserve the manifest order. - // This is null until we've successfully completed loading the cache from - // disk the first time. - this._experiments = null; - this._refresh = false; - this._terminateReason = null; // or TELEMETRY_LOG.TERMINATION.... - this._dirty = false; - - // Loading the cache happens once asynchronously on startup - this._loadTask = null; - - // The _main task handles all other actions: - // * refreshing the manifest off the network (if _refresh) - // * disabling/enabling experiments - // * saving the cache (if _dirty) - this._mainTask = null; - - // Timer for re-evaluating experiment status. - this._timer = null; - - this._shutdown = false; - this._networkRequest = null; - - // We need to tell when we first evaluated the experiments to fire an - // experiments-changed notification when we only loaded completed experiments. - this._firstEvaluate = true; - - this.init(); -}; - -Experiments.Experiments.prototype = { - QueryInterface: XPCOMUtils.generateQI([Ci.nsITimerCallback, Ci.nsIObserver]), - - /** - * `true` if the experiments manager is currently setup (has been fully initialized - * and not uninitialized yet). - */ - get isReady() { - return !this._shutdown; - }, - - init: function () { - this._shutdown = false; - configureLogging(); - - gExperimentsEnabled = gPrefs.get(PREF_ENABLED, false) && TelemetryUtils.isTelemetryEnabled; - this._log.trace("enabled=" + gExperimentsEnabled + ", " + this.enabled); - - gPrefs.observe(PREF_LOGGING, configureLogging); - gPrefs.observe(PREF_MANIFEST_URI, this.updateManifest, this); - gPrefs.observe(PREF_ENABLED, this._toggleExperimentsEnabled, this); - - gPrefsTelemetry.observe(PREF_TELEMETRY_ENABLED, this._telemetryStatusChanged, this); - - AddonManager.shutdown.addBlocker("Experiments.jsm shutdown", - this.uninit.bind(this), - this._getState.bind(this) - ); - - this._registerWithAddonManager(); - - this._loadTask = this._loadFromCache(); - - return this._loadTask.then( - () => { - this._log.trace("_loadTask finished ok"); - this._loadTask = null; - return this._run(); - }, - (e) => { - this._log.error("_loadFromCache caught error: " + e); - this._latestError = e; - throw e; - } - ); - }, - - /** - * Uninitialize this instance. - * - * This function is susceptible to race conditions. If it is called multiple - * times before the previous uninit() has completed or if it is called while - * an init() operation is being performed, the object may get in bad state - * and/or deadlock could occur. - * - * @return Promise<> - * The promise is fulfilled when all pending tasks are finished. - */ - uninit: Task.async(function* () { - this._log.trace("uninit: started"); - yield this._loadTask; - this._log.trace("uninit: finished with _loadTask"); - - if (!this._shutdown) { - this._log.trace("uninit: no previous shutdown"); - this._unregisterWithAddonManager(); - - gPrefs.ignore(PREF_LOGGING, configureLogging); - gPrefs.ignore(PREF_MANIFEST_URI, this.updateManifest, this); - gPrefs.ignore(PREF_ENABLED, this._toggleExperimentsEnabled, this); - - gPrefsTelemetry.ignore(PREF_TELEMETRY_ENABLED, this._telemetryStatusChanged, this); - - if (this._timer) { - this._timer.clear(); - } - } - - this._shutdown = true; - if (this._mainTask) { - if (this._networkRequest) { - try { - this._log.trace("Aborting pending network request: " + this._networkRequest); - this._networkRequest.abort(); - } catch (e) { - // pass - } - } - try { - this._log.trace("uninit: waiting on _mainTask"); - yield this._mainTask; - } catch (e) { - // We error out of tasks after shutdown via this exception. - this._log.trace(`uninit: caught error - ${e}`); - if (!(e instanceof AlreadyShutdownError)) { - this._latestError = e; - throw e; - } - } - } - - this._log.info("Completed uninitialization."); - }), - - // Return state information, for debugging purposes. - _getState: function() { - let activeExperiment = this._getActiveExperiment(); - let state = { - isShutdown: this._shutdown, - isEnabled: gExperimentsEnabled, - isRefresh: this._refresh, - isDirty: this._dirty, - isFirstEvaluate: this._firstEvaluate, - hasLoadTask: !!this._loadTask, - hasMainTask: !!this._mainTask, - hasTimer: !!this._hasTimer, - hasAddonProvider: !!gAddonProvider, - latestLogs: this._forensicsLogs, - experiments: this._experiments ? [...this._experiments.keys()] : null, - terminateReason: this._terminateReason, - activeExperiment: activeExperiment ? activeExperiment.id : null, - }; - if (this._latestError) { - if (typeof this._latestError == "object") { - state.latestError = { - message: this._latestError.message, - stack: this._latestError.stack - }; - } else { - state.latestError = "" + this._latestError; - } - } - return state; - }, - - _addToForensicsLog: function (what, string) { - this._forensicsLogs.shift(); - let timeInSec = Math.floor(Services.telemetry.msSinceProcessStart() / 1000); - this._forensicsLogs.push(`${timeInSec}: ${what} - ${string}`); - }, - - _registerWithAddonManager: function (previousExperimentsProvider) { - this._log.trace("Registering instance with Addon Manager."); - - AddonManager.addAddonListener(this); - AddonManager.addInstallListener(this); - - if (!gAddonProvider) { - // The properties of this AddonType should be kept in sync with the - // experiment AddonType registered in XPIProvider. - this._log.trace("Registering previous experiment add-on provider."); - gAddonProvider = previousExperimentsProvider || new Experiments.PreviousExperimentProvider(this); - AddonManagerPrivate.registerProvider(gAddonProvider, [ - new AddonManagerPrivate.AddonType("experiment", - URI_EXTENSION_STRINGS, - STRING_TYPE_NAME, - AddonManager.VIEW_TYPE_LIST, - 11000, - AddonManager.TYPE_UI_HIDE_EMPTY), - ]); - } - - }, - - _unregisterWithAddonManager: function () { - this._log.trace("Unregistering instance with Addon Manager."); - - this._log.trace("Removing install listener from add-on manager."); - AddonManager.removeInstallListener(this); - this._log.trace("Removing addon listener from add-on manager."); - AddonManager.removeAddonListener(this); - this._log.trace("Finished unregistering with addon manager."); - - if (gAddonProvider) { - this._log.trace("Unregistering previous experiment add-on provider."); - AddonManagerPrivate.unregisterProvider(gAddonProvider); - gAddonProvider = null; - } - }, - - /* - * Change the PreviousExperimentsProvider that this instance uses. - * For testing only. - */ - _setPreviousExperimentsProvider: function (provider) { - this._unregisterWithAddonManager(); - this._registerWithAddonManager(provider); - }, - - /** - * Throws an exception if we've already shut down. - */ - _checkForShutdown: function() { - if (this._shutdown) { - throw new AlreadyShutdownError("uninit() already called"); - } - }, - - /** - * Whether the experiments feature is enabled. - */ - get enabled() { - return gExperimentsEnabled; - }, - - /** - * Toggle whether the experiments feature is enabled or not. - */ - set enabled(enabled) { - this._log.trace("set enabled(" + enabled + ")"); - gPrefs.set(PREF_ENABLED, enabled); - }, - - _toggleExperimentsEnabled: Task.async(function* (enabled) { - this._log.trace("_toggleExperimentsEnabled(" + enabled + ")"); - let wasEnabled = gExperimentsEnabled; - gExperimentsEnabled = enabled && TelemetryUtils.isTelemetryEnabled; - - if (wasEnabled == gExperimentsEnabled) { - return; - } - - if (gExperimentsEnabled) { - yield this.updateManifest(); - } else { - yield this.disableExperiment(TELEMETRY_LOG.TERMINATION.SERVICE_DISABLED); - if (this._timer) { - this._timer.clear(); - } - } - }), - - _telemetryStatusChanged: function () { - this._toggleExperimentsEnabled(gExperimentsEnabled); - }, - - /** - * Returns a promise that is resolved with an array of `ExperimentInfo` objects, - * which provide info on the currently and recently active experiments. - * The array is in chronological order. - * - * The experiment info is of the form: - * { - * id: <string>, - * name: <string>, - * description: <string>, - * active: <boolean>, - * endDate: <integer>, // epoch ms - * detailURL: <string>, - * ... // possibly extended later - * } - * - * @return Promise<Array<ExperimentInfo>> Array of experiment info objects. - */ - getExperiments: function () { - return Task.spawn(function*() { - yield this._loadTask; - let list = []; - - for (let [id, experiment] of this._experiments) { - if (!experiment.startDate) { - // We only collect experiments that are or were active. - continue; - } - - list.push({ - id: id, - name: experiment._name, - description: experiment._description, - active: experiment.enabled, - endDate: experiment.endDate.getTime(), - detailURL: experiment._homepageURL, - branch: experiment.branch, - }); - } - - // Sort chronologically, descending. - list.sort((a, b) => b.endDate - a.endDate); - return list; - }.bind(this)); - }, - - /** - * Returns the ExperimentInfo for the active experiment, or null - * if there is none. - */ - getActiveExperiment: function () { - let experiment = this._getActiveExperiment(); - if (!experiment) { - return null; - } - - let info = { - id: experiment.id, - name: experiment._name, - description: experiment._description, - active: experiment.enabled, - endDate: experiment.endDate.getTime(), - detailURL: experiment._homepageURL, - }; - - return info; - }, - - /** - * Experiment "branch" support. If an experiment has multiple branches, it - * can record the branch with the experiment system and it will - * automatically be included in data reporting (FHR/telemetry payloads). - */ - - /** - * Set the experiment branch for the specified experiment ID. - * @returns Promise<> - */ - setExperimentBranch: Task.async(function*(id, branchstr) { - yield this._loadTask; - let e = this._experiments.get(id); - if (!e) { - throw new Error("Experiment not found"); - } - e.branch = String(branchstr); - this._log.trace("setExperimentBranch(" + id + ", " + e.branch + ") _dirty=" + this._dirty); - this._dirty = true; - Services.obs.notifyObservers(null, EXPERIMENTS_CHANGED_TOPIC, null); - yield this._run(); - }), - /** - * Get the branch of the specified experiment. If the experiment is unknown, - * throws an error. - * - * @param id The ID of the experiment. Pass null for the currently running - * experiment. - * @returns Promise<string|null> - * @throws Error if the specified experiment ID is unknown, or if there is no - * current experiment. - */ - getExperimentBranch: Task.async(function*(id=null) { - yield this._loadTask; - let e; - if (id) { - e = this._experiments.get(id); - if (!e) { - throw new Error("Experiment not found"); - } - } else { - e = this._getActiveExperiment(); - if (e === null) { - throw new Error("No active experiment"); - } - } - return e.branch; - }), - - /** - * Determine whether another date has the same UTC day as now(). - */ - _dateIsTodayUTC: function (d) { - let now = this._policy.now(); - - return stripDateToMidnight(now).getTime() == stripDateToMidnight(d).getTime(); - }, - - /** - * Obtain the entry of the most recent active experiment that was active - * today. - * - * If no experiment was active today, this resolves to nothing. - * - * Assumption: Only a single experiment can be active at a time. - * - * @return Promise<object> - */ - lastActiveToday: function () { - return Task.spawn(function* getMostRecentActiveExperimentTask() { - let experiments = yield this.getExperiments(); - - // Assumption: Ordered chronologically, descending, with active always - // first. - for (let experiment of experiments) { - if (experiment.active) { - return experiment; - } - - if (experiment.endDate && this._dateIsTodayUTC(experiment.endDate)) { - return experiment; - } - } - return null; - }.bind(this)); - }, - - _run: function() { - this._log.trace("_run"); - this._checkForShutdown(); - if (!this._mainTask) { - this._mainTask = Task.spawn(function*() { - try { - yield this._main(); - } catch (e) { - // In the CacheWriteError case we want to reschedule - if (!(e instanceof CacheWriteError)) { - this._log.error("_main caught error: " + e); - return; - } - } finally { - this._mainTask = null; - } - this._log.trace("_main finished, scheduling next run"); - try { - yield this._scheduleNextRun(); - } catch (ex) { - // We error out of tasks after shutdown via this exception. - if (!(ex instanceof AlreadyShutdownError)) { - throw ex; - } - } - }.bind(this)); - } - return this._mainTask; - }, - - _main: function*() { - do { - this._log.trace("_main iteration"); - yield this._loadTask; - if (!gExperimentsEnabled) { - this._refresh = false; - } - - if (this._refresh) { - yield this._loadManifest(); - } - yield this._evaluateExperiments(); - if (this._dirty) { - yield this._saveToCache(); - } - // If somebody called .updateManifest() or disableExperiment() - // while we were running, go again right now. - } - while (this._refresh || this._terminateReason || this._dirty); - }, - - _loadManifest: function*() { - this._log.trace("_loadManifest"); - let uri = Services.urlFormatter.formatURLPref(PREF_BRANCH + PREF_MANIFEST_URI); - - this._checkForShutdown(); - - this._refresh = false; - try { - let responseText = yield this._httpGetRequest(uri); - this._log.trace("_loadManifest() - responseText=\"" + responseText + "\""); - - if (this._shutdown) { - return; - } - - let data = JSON.parse(responseText); - this._updateExperiments(data); - } catch (e) { - this._log.error("_loadManifest - failure to fetch/parse manifest (continuing anyway): " + e); - } - }, - - /** - * Fetch an updated list of experiments and trigger experiment updates. - * Do only use when experiments are enabled. - * - * @return Promise<> - * The promise is resolved when the manifest and experiment list is updated. - */ - updateManifest: function () { - this._log.trace("updateManifest()"); - - if (!gExperimentsEnabled) { - return Promise.reject(new Error("experiments are disabled")); - } - - if (this._shutdown) { - return Promise.reject(Error("uninit() alrady called")); - } - - this._refresh = true; - return this._run(); - }, - - notify: function (timer) { - this._log.trace("notify()"); - this._checkForShutdown(); - return this._run(); - }, - - // START OF ADD-ON LISTENERS - - onUninstalled: function (addon) { - this._log.trace("onUninstalled() - addon id: " + addon.id); - if (gActiveUninstallAddonIDs.has(addon.id)) { - this._log.trace("matches pending uninstall"); - return; - } - let activeExperiment = this._getActiveExperiment(); - if (!activeExperiment || activeExperiment._addonId != addon.id) { - return; - } - - this.disableExperiment(TELEMETRY_LOG.TERMINATION.ADDON_UNINSTALLED); - }, - - /** - * @returns {Boolean} returns false when we cancel the install. - */ - onInstallStarted: function (install) { - if (install.addon.type != "experiment") { - return true; - } - - this._log.trace("onInstallStarted() - " + install.addon.id); - if (install.addon.appDisabled) { - // This is a PreviousExperiment - return true; - } - - // We want to be in control of all experiment add-ons: reject installs - // for add-ons that we don't know about. - - // We have a race condition of sorts to worry about here. We have 2 - // onInstallStarted listeners. This one (the global one) and the one - // created as part of ExperimentEntry._installAddon. Because of the order - // they are registered in, this one likely executes first. Unfortunately, - // this means that the add-on ID is not yet set on the ExperimentEntry. - // So, we can't just look at this._trackedAddonIds because the new experiment - // will have its add-on ID set to null. We work around this by storing a - // identifying field - the source URL of the install - in a module-level - // variable (so multiple Experiments instances doesn't cancel each other - // out). - - if (this._trackedAddonIds.has(install.addon.id)) { - this._log.info("onInstallStarted allowing install because add-on ID " + - "tracked by us."); - return true; - } - - if (gActiveInstallURLs.has(install.sourceURI.spec)) { - this._log.info("onInstallStarted allowing install because install " + - "tracked by us."); - return true; - } - - this._log.warn("onInstallStarted cancelling install of unknown " + - "experiment add-on: " + install.addon.id); - return false; - }, - - // END OF ADD-ON LISTENERS. - - _getExperimentByAddonId: function (addonId) { - for (let [, entry] of this._experiments) { - if (entry._addonId === addonId) { - return entry; - } - } - - return null; - }, - - /* - * Helper function to make HTTP GET requests. Returns a promise that is resolved with - * the responseText when the request is complete. - */ - _httpGetRequest: function (url) { - this._log.trace("httpGetRequest(" + url + ")"); - let xhr = Cc["@mozilla.org/xmlextras/xmlhttprequest;1"].createInstance(Ci.nsIXMLHttpRequest); - - this._networkRequest = xhr; - let deferred = Promise.defer(); - - let log = this._log; - let errorhandler = (evt) => { - log.error("httpGetRequest::onError() - Error making request to " + url + ": " + evt.type); - deferred.reject(new Error("Experiments - XHR error for " + url + " - " + evt.type)); - this._networkRequest = null; - }; - xhr.onerror = errorhandler; - xhr.ontimeout = errorhandler; - xhr.onabort = errorhandler; - - xhr.onload = (event) => { - if (xhr.status !== 200 && xhr.state !== 0) { - log.error("httpGetRequest::onLoad() - Request to " + url + " returned status " + xhr.status); - deferred.reject(new Error("Experiments - XHR status for " + url + " is " + xhr.status)); - this._networkRequest = null; - return; - } - - deferred.resolve(xhr.responseText); - this._networkRequest = null; - }; - - try { - xhr.open("GET", url); - - if (xhr.channel instanceof Ci.nsISupportsPriority) { - xhr.channel.priority = Ci.nsISupportsPriority.PRIORITY_LOWEST; - } - - xhr.timeout = MANIFEST_FETCH_TIMEOUT_MSEC; - xhr.send(null); - } catch (e) { - this._log.error("httpGetRequest() - Error opening request to " + url + ": " + e); - return Promise.reject(new Error("Experiments - Error opening XHR for " + url)); - } - return deferred.promise; - }, - - /* - * Path of the cache file we use in the profile. - */ - get _cacheFilePath() { - return OS.Path.join(OS.Constants.Path.profileDir, FILE_CACHE); - }, - - /* - * Part of the main task to save the cache to disk, called from _main. - */ - _saveToCache: function* () { - this._log.trace("_saveToCache"); - let path = this._cacheFilePath; - this._dirty = false; - try { - let textData = JSON.stringify({ - version: CACHE_VERSION, - data: [...this._experiments.values()].map(e => e.toJSON()), - }); - - let encoder = new TextEncoder(); - let data = encoder.encode(textData); - let options = { tmpPath: path + ".tmp", compression: "lz4" }; - yield this._policy.delayCacheWrite(OS.File.writeAtomic(path, data, options)); - } catch (e) { - // We failed to write the cache, it's still dirty. - this._dirty = true; - this._log.error("_saveToCache failed and caught error: " + e); - throw new CacheWriteError(); - } - - this._log.debug("_saveToCache saved to " + path); - }, - - /* - * Task function, load the cached experiments manifest file from disk. - */ - _loadFromCache: Task.async(function* () { - this._log.trace("_loadFromCache"); - let path = this._cacheFilePath; - try { - let result = yield loadJSONAsync(path, { compression: "lz4" }); - this._populateFromCache(result); - } catch (e) { - if (e instanceof OS.File.Error && e.becauseNoSuchFile) { - // No cached manifest yet. - this._experiments = new Map(); - } else { - throw e; - } - } - }), - - _populateFromCache: function (data) { - this._log.trace("populateFromCache() - data: " + JSON.stringify(data)); - - // If the user has a newer cache version than we can understand, we fail - // hard; no experiments should be active in this older client. - if (CACHE_VERSION !== data.version) { - throw new Error("Experiments::_populateFromCache() - invalid cache version"); - } - - let experiments = new Map(); - for (let item of data.data) { - let entry = new Experiments.ExperimentEntry(this._policy); - if (!entry.initFromCacheData(item)) { - continue; - } - - // Discard old experiments if they ended more than 180 days ago. - if (entry.shouldDiscard()) { - // We discarded an experiment, the cache needs to be updated. - this._dirty = true; - continue; - } - - experiments.set(entry.id, entry); - } - - this._experiments = experiments; - }, - - /* - * Update the experiment entries from the experiments - * array in the manifest - */ - _updateExperiments: function (manifestObject) { - this._log.trace("_updateExperiments() - experiments: " + JSON.stringify(manifestObject)); - - if (manifestObject.version !== MANIFEST_VERSION) { - this._log.warning("updateExperiments() - unsupported version " + manifestObject.version); - } - - let experiments = new Map(); // The new experiments map - - // Collect new and updated experiments. - for (let data of manifestObject.experiments) { - let entry = this._experiments.get(data.id); - - if (entry) { - if (!entry.updateFromManifestData(data)) { - this._log.error("updateExperiments() - Invalid manifest data for " + data.id); - continue; - } - } else { - entry = new Experiments.ExperimentEntry(this._policy); - if (!entry.initFromManifestData(data)) { - continue; - } - } - - if (entry.shouldDiscard()) { - continue; - } - - experiments.set(entry.id, entry); - } - - // Make sure we keep experiments that are or were running. - // We remove them after KEEP_HISTORY_N_DAYS. - for (let [id, entry] of this._experiments) { - if (experiments.has(id)) { - continue; - } - - if (!entry.startDate || entry.shouldDiscard()) { - this._log.trace("updateExperiments() - discarding entry for " + id); - continue; - } - - experiments.set(id, entry); - } - - this._experiments = experiments; - this._dirty = true; - }, - - getActiveExperimentID: function() { - if (!this._experiments) { - return null; - } - let e = this._getActiveExperiment(); - if (!e) { - return null; - } - return e.id; - }, - - getActiveExperimentBranch: function() { - if (!this._experiments) { - return null; - } - let e = this._getActiveExperiment(); - if (!e) { - return null; - } - return e.branch; - }, - - _getActiveExperiment: function () { - let enabled = [...this._experiments.values()].filter(experiment => experiment._enabled); - - if (enabled.length == 1) { - return enabled[0]; - } - - if (enabled.length > 1) { - this._log.error("getActiveExperimentId() - should not have more than 1 active experiment"); - throw new Error("have more than 1 active experiment"); - } - - return null; - }, - - /** - * Disables all active experiments. - * - * @return Promise<> Promise that will get resolved once the task is done or failed. - */ - disableExperiment: function (reason) { - if (!reason) { - throw new Error("Must specify a termination reason."); - } - - this._log.trace("disableExperiment()"); - this._terminateReason = reason; - return this._run(); - }, - - /** - * The Set of add-on IDs that we know about from manifests. - */ - get _trackedAddonIds() { - if (!this._experiments) { - return new Set(); - } - - return new Set([...this._experiments.values()].map(e => e._addonId)); - }, - - /* - * Task function to check applicability of experiments, disable the active - * experiment if needed and activate the first applicable candidate. - */ - _evaluateExperiments: function*() { - this._log.trace("_evaluateExperiments"); - - this._checkForShutdown(); - - // The first thing we do is reconcile our state against what's in the - // Addon Manager. It's possible that the Addon Manager knows of experiment - // add-ons that we don't. This could happen if an experiment gets installed - // when we're not listening or if there is a bug in our synchronization - // code. - // - // We have a few options of what to do with unknown experiment add-ons - // coming from the Addon Manager. Ideally, we'd convert these to - // ExperimentEntry instances and stuff them inside this._experiments. - // However, since ExperimentEntry contain lots of metadata from the - // manifest and trying to make up data could be error prone, it's safer - // to not try. Furthermore, if an experiment really did come from us, we - // should have some record of it. In the end, we decide to discard all - // knowledge for these unknown experiment add-ons. - let installedExperiments = yield installedExperimentAddons(); - let expectedAddonIds = this._trackedAddonIds; - let unknownAddons = installedExperiments.filter(a => !expectedAddonIds.has(a.id)); - if (unknownAddons.length) { - this._log.warn("_evaluateExperiments() - unknown add-ons in AddonManager: " + - unknownAddons.map(a => a.id).join(", ")); - - yield uninstallAddons(unknownAddons); - } - - let activeExperiment = this._getActiveExperiment(); - let activeChanged = false; - - if (!activeExperiment) { - // Avoid this pref staying out of sync if there were e.g. crashes. - gPrefs.set(PREF_ACTIVE_EXPERIMENT, false); - } - - // Ensure the active experiment is in the proper state. This may install, - // uninstall, upgrade, or enable the experiment add-on. What exactly is - // abstracted away from us by design. - if (activeExperiment) { - let changes; - let shouldStopResult = yield activeExperiment.shouldStop(); - if (shouldStopResult.shouldStop) { - let expireReasons = ["endTime", "maxActiveSeconds"]; - let kind, reason; - - if (expireReasons.indexOf(shouldStopResult.reason[0]) != -1) { - kind = TELEMETRY_LOG.TERMINATION.EXPIRED; - reason = null; - } else { - kind = TELEMETRY_LOG.TERMINATION.RECHECK; - reason = shouldStopResult.reason; - } - changes = yield activeExperiment.stop(kind, reason); - } - else if (this._terminateReason) { - changes = yield activeExperiment.stop(this._terminateReason); - } - else { - changes = yield activeExperiment.reconcileAddonState(); - } - - if (changes) { - this._dirty = true; - activeChanged = true; - } - - if (!activeExperiment._enabled) { - activeExperiment = null; - activeChanged = true; - } - } - - this._terminateReason = null; - - if (!activeExperiment && gExperimentsEnabled) { - for (let [id, experiment] of this._experiments) { - let applicable; - let reason = null; - try { - applicable = yield experiment.isApplicable(); - } - catch (e) { - applicable = false; - reason = e; - } - - if (!applicable && reason && reason[0] != "was-active") { - // Report this from here to avoid over-reporting. - let data = [TELEMETRY_LOG.ACTIVATION.REJECTED, id]; - data = data.concat(reason); - const key = TELEMETRY_LOG.ACTIVATION_KEY; - TelemetryLog.log(key, data); - this._log.trace("evaluateExperiments() - added " + key + " to TelemetryLog: " + JSON.stringify(data)); - } - - if (!applicable) { - continue; - } - - this._log.debug("evaluateExperiments() - activating experiment " + id); - try { - yield experiment.start(); - activeChanged = true; - activeExperiment = experiment; - this._dirty = true; - break; - } catch (e) { - // On failure, clean up the best we can and try the next experiment. - this._log.error("evaluateExperiments() - Unable to start experiment: " + e.message); - experiment._enabled = false; - yield experiment.reconcileAddonState(); - } - } - } - - gPrefs.set(PREF_ACTIVE_EXPERIMENT, activeExperiment != null); - - if (activeChanged || this._firstEvaluate) { - Services.obs.notifyObservers(null, EXPERIMENTS_CHANGED_TOPIC, null); - this._firstEvaluate = false; - } - - if ("@mozilla.org/toolkit/crash-reporter;1" in Cc && activeExperiment) { - try { - gCrashReporter.annotateCrashReport("ActiveExperiment", activeExperiment.id); - gCrashReporter.annotateCrashReport("ActiveExperimentBranch", activeExperiment.branch); - } catch (e) { - // It's ok if crash reporting is disabled. - } - } - }, - - /* - * Schedule the soonest re-check of experiment applicability that is needed. - */ - _scheduleNextRun: function () { - this._checkForShutdown(); - - if (this._timer) { - this._timer.clear(); - } - - if (!gExperimentsEnabled || this._experiments.length == 0) { - return; - } - - let time = null; - let now = this._policy.now().getTime(); - if (this._dirty) { - // If we failed to write the cache, we should try again periodically - time = now + 1000 * CACHE_WRITE_RETRY_DELAY_SEC; - } - - for (let [, experiment] of this._experiments) { - let scheduleTime = experiment.getScheduleTime(); - if (scheduleTime > now) { - if (time !== null) { - time = Math.min(time, scheduleTime); - } else { - time = scheduleTime; - } - } - } - - if (time === null) { - // No schedule time found. - return; - } - - this._log.trace("scheduleExperimentEvaluation() - scheduling for "+time+", now: "+now); - this._policy.oneshotTimer(this.notify, time - now, this, "_timer"); - }, -}; - - -/* - * Represents a single experiment. - */ - -Experiments.ExperimentEntry = function (policy) { - this._policy = policy || new Experiments.Policy(); - let log = Log.repository.getLoggerWithMessagePrefix( - "Browser.Experiments.Experiments", - "ExperimentEntry #" + gExperimentEntryCounter++ + "::"); - this._log = Object.create(log); - this._log.log = (level, string, params) => { - if (gExperiments) { - gExperiments._addToForensicsLog("ExperimentEntry", string); - } - log.log(level, string, params); - }; - - // Is the experiment supposed to be running. - this._enabled = false; - // When this experiment was started, if ever. - this._startDate = null; - // When this experiment was ended, if ever. - this._endDate = null; - // The condition data from the manifest. - this._manifestData = null; - // For an active experiment, signifies whether we need to update the xpi. - this._needsUpdate = false; - // A random sample value for comparison against the manifest conditions. - this._randomValue = null; - // When this entry was last changed for respecting history retention duration. - this._lastChangedDate = null; - // Has this experiment failed to activate before? - this._failedStart = false; - // The experiment branch - this._branch = null; - - // We grab these from the addon after download. - this._name = null; - this._description = null; - this._homepageURL = null; - this._addonId = null; -}; - -Experiments.ExperimentEntry.prototype = { - MANIFEST_REQUIRED_FIELDS: new Set([ - "id", - "xpiURL", - "xpiHash", - "startTime", - "endTime", - "maxActiveSeconds", - "appName", - "channel", - ]), - - MANIFEST_OPTIONAL_FIELDS: new Set([ - "maxStartTime", - "minVersion", - "maxVersion", - "version", - "minBuildID", - "maxBuildID", - "buildIDs", - "os", - "locale", - "sample", - "disabled", - "frozen", - "jsfilter", - ]), - - SERIALIZE_KEYS: new Set([ - "_enabled", - "_manifestData", - "_needsUpdate", - "_randomValue", - "_failedStart", - "_name", - "_description", - "_homepageURL", - "_addonId", - "_startDate", - "_endDate", - "_branch", - ]), - - DATE_KEYS: new Set([ - "_startDate", - "_endDate", - ]), - - UPGRADE_KEYS: new Map([ - ["_branch", null], - ]), - - ADDON_CHANGE_NONE: 0, - ADDON_CHANGE_INSTALL: 1, - ADDON_CHANGE_UNINSTALL: 2, - ADDON_CHANGE_ENABLE: 4, - - /* - * Initialize entry from the manifest. - * @param data The experiment data from the manifest. - * @return boolean Whether initialization succeeded. - */ - initFromManifestData: function (data) { - if (!this._isManifestDataValid(data)) { - return false; - } - - this._manifestData = data; - - this._randomValue = this._policy.random(); - this._lastChangedDate = this._policy.now(); - - return true; - }, - - get enabled() { - return this._enabled; - }, - - get id() { - return this._manifestData.id; - }, - - get branch() { - return this._branch; - }, - - set branch(v) { - this._branch = v; - }, - - get startDate() { - return this._startDate; - }, - - get endDate() { - if (!this._startDate) { - return null; - } - - let endTime = 0; - - if (!this._enabled) { - return this._endDate; - } - - let maxActiveMs = 1000 * this._manifestData.maxActiveSeconds; - endTime = Math.min(1000 * this._manifestData.endTime, - this._startDate.getTime() + maxActiveMs); - - return new Date(endTime); - }, - - get needsUpdate() { - return this._needsUpdate; - }, - - /* - * Initialize entry from the cache. - * @param data The entry data from the cache. - * @return boolean Whether initialization succeeded. - */ - initFromCacheData: function (data) { - for (let [key, dval] of this.UPGRADE_KEYS) { - if (!(key in data)) { - data[key] = dval; - } - } - - for (let key of this.SERIALIZE_KEYS) { - if (!(key in data) && !this.DATE_KEYS.has(key)) { - this._log.error("initFromCacheData() - missing required key " + key); - return false; - } - } - - if (!this._isManifestDataValid(data._manifestData)) { - return false; - } - - // Dates are restored separately from epoch ms, everything else is just - // copied in. - - this.SERIALIZE_KEYS.forEach(key => { - if (!this.DATE_KEYS.has(key)) { - this[key] = data[key]; - } - }); - - this.DATE_KEYS.forEach(key => { - if (key in data) { - let date = new Date(); - date.setTime(data[key]); - this[key] = date; - } - }); - - // In order for the experiment's data expiration mechanism to work, use the experiment's - // |_endData| as the |_lastChangedDate| (if available). - this._lastChangedDate = this._endDate ? this._endDate : this._policy.now(); - - return true; - }, - - /* - * Returns a JSON representation of this object. - */ - toJSON: function () { - let obj = {}; - - // Dates are serialized separately as epoch ms. - - this.SERIALIZE_KEYS.forEach(key => { - if (!this.DATE_KEYS.has(key)) { - obj[key] = this[key]; - } - }); - - this.DATE_KEYS.forEach(key => { - if (this[key]) { - obj[key] = this[key].getTime(); - } - }); - - return obj; - }, - - /* - * Update from the experiment data from the manifest. - * @param data The experiment data from the manifest. - * @return boolean Whether updating succeeded. - */ - updateFromManifestData: function (data) { - let old = this._manifestData; - - if (!this._isManifestDataValid(data)) { - return false; - } - - if (this._enabled) { - if (old.xpiHash !== data.xpiHash) { - // A changed hash means we need to update active experiments. - this._needsUpdate = true; - } - } else if (this._failedStart && - (old.xpiHash !== data.xpiHash) || - (old.xpiURL !== data.xpiURL)) { - // Retry installation of previously invalid experiments - // if hash or url changed. - this._failedStart = false; - } - - this._manifestData = data; - this._lastChangedDate = this._policy.now(); - - return true; - }, - - /* - * Is this experiment applicable? - * @return Promise<> Resolved if the experiment is applicable. - * If it is not applicable it is rejected with - * a Promise<string> which contains the reason. - */ - isApplicable: function () { - let versionCmp = Cc["@mozilla.org/xpcom/version-comparator;1"] - .getService(Ci.nsIVersionComparator); - let app = Cc["@mozilla.org/xre/app-info;1"].getService(Ci.nsIXULAppInfo); - let runtime = Cc["@mozilla.org/xre/app-info;1"] - .getService(Ci.nsIXULRuntime); - - let locale = this._policy.locale(); - let channel = this._policy.updatechannel(); - let data = this._manifestData; - - let now = this._policy.now() / 1000; // The manifest times are in seconds. - let maxActive = data.maxActiveSeconds || 0; - let startSec = (this.startDate || 0) / 1000; - - this._log.trace("isApplicable() - now=" + now - + ", randomValue=" + this._randomValue); - - // Not applicable if it already ran. - - if (!this.enabled && this._endDate) { - return Promise.reject(["was-active"]); - } - - // Define and run the condition checks. - - let simpleChecks = [ - { name: "failedStart", - condition: () => !this._failedStart }, - { name: "disabled", - condition: () => !data.disabled }, - { name: "frozen", - condition: () => !data.frozen || this._enabled }, - { name: "startTime", - condition: () => now >= data.startTime }, - { name: "endTime", - condition: () => now < data.endTime }, - { name: "maxStartTime", - condition: () => this._startDate || !data.maxStartTime || now <= data.maxStartTime }, - { name: "maxActiveSeconds", - condition: () => !this._startDate || now <= (startSec + maxActive) }, - { name: "appName", - condition: () => !data.appName || data.appName.indexOf(app.name) != -1 }, - { name: "minBuildID", - condition: () => !data.minBuildID || app.platformBuildID >= data.minBuildID }, - { name: "maxBuildID", - condition: () => !data.maxBuildID || app.platformBuildID <= data.maxBuildID }, - { name: "buildIDs", - condition: () => !data.buildIDs || data.buildIDs.indexOf(app.platformBuildID) != -1 }, - { name: "os", - condition: () => !data.os || data.os.indexOf(runtime.OS) != -1 }, - { name: "channel", - condition: () => !data.channel || data.channel.indexOf(channel) != -1 }, - { name: "locale", - condition: () => !data.locale || data.locale.indexOf(locale) != -1 }, - { name: "sample", - condition: () => data.sample === undefined || this._randomValue <= data.sample }, - { name: "version", - condition: () => !data.version || data.version.indexOf(app.version) != -1 }, - { name: "minVersion", - condition: () => !data.minVersion || versionCmp.compare(app.version, data.minVersion) >= 0 }, - { name: "maxVersion", - condition: () => !data.maxVersion || versionCmp.compare(app.version, data.maxVersion) <= 0 }, - ]; - - for (let check of simpleChecks) { - let result = check.condition(); - if (!result) { - this._log.debug("isApplicable() - id=" - + data.id + " - test '" + check.name + "' failed"); - return Promise.reject([check.name]); - } - } - - if (data.jsfilter) { - return this._runFilterFunction(data.jsfilter); - } - - return Promise.resolve(true); - }, - - /* - * Run the jsfilter function from the manifest in a sandbox and return the - * result (forced to boolean). - */ - _runFilterFunction: Task.async(function* (jsfilter) { - this._log.trace("runFilterFunction() - filter: " + jsfilter); - - let ssm = Services.scriptSecurityManager; - const nullPrincipal = ssm.createNullPrincipal({}); - let options = { - sandboxName: "telemetry experiments jsfilter sandbox", - wantComponents: false, - }; - - let sandbox = Cu.Sandbox(nullPrincipal, options); - try { - Cu.evalInSandbox(jsfilter, sandbox); - } catch (e) { - this._log.error("runFilterFunction() - failed to eval jsfilter: " + e.message); - throw ["jsfilter-evalfailed"]; - } - - let currentEnvironment = yield TelemetryEnvironment.onInitialized(); - - Object.defineProperty(sandbox, "_e", - { get: () => Cu.cloneInto(currentEnvironment, sandbox) }); - - let result = false; - try { - result = !!Cu.evalInSandbox("filter({get telemetryEnvironment() { return _e; } })", sandbox); - } - catch (e) { - this._log.debug("runFilterFunction() - filter function failed: " - + e.message + ", " + e.stack); - throw ["jsfilter-threw", e.message]; - } - finally { - Cu.nukeSandbox(sandbox); - } - - if (!result) { - throw ["jsfilter-false"]; - } - - return true; - }), - - /* - * Start running the experiment. - * - * @return Promise<> Resolved when the operation is complete. - */ - start: Task.async(function* () { - this._log.trace("start() for " + this.id); - - this._enabled = true; - return yield this.reconcileAddonState(); - }), - - // Async install of the addon for this experiment, part of the start task above. - _installAddon: Task.async(function* () { - let deferred = Promise.defer(); - - let hash = this._policy.ignoreHashes ? null : this._manifestData.xpiHash; - - let install = yield addonInstallForURL(this._manifestData.xpiURL, hash); - gActiveInstallURLs.add(install.sourceURI.spec); - - let failureHandler = (install, handler) => { - let message = "AddonInstall " + handler + " for " + this.id + ", state=" + - (install.state || "?") + ", error=" + install.error; - this._log.error("_installAddon() - " + message); - this._failedStart = true; - gActiveInstallURLs.delete(install.sourceURI.spec); - - TelemetryLog.log(TELEMETRY_LOG.ACTIVATION_KEY, - [TELEMETRY_LOG.ACTIVATION.INSTALL_FAILURE, this.id]); - - deferred.reject(new Error(message)); - }; - - let listener = { - _expectedID: null, - - onDownloadEnded: install => { - this._log.trace("_installAddon() - onDownloadEnded for " + this.id); - - if (install.existingAddon) { - this._log.warn("_installAddon() - onDownloadEnded, addon already installed"); - } - - if (install.addon.type !== "experiment") { - this._log.error("_installAddon() - onDownloadEnded, wrong addon type"); - install.cancel(); - } - }, - - onInstallStarted: install => { - this._log.trace("_installAddon() - onInstallStarted for " + this.id); - - if (install.existingAddon) { - this._log.warn("_installAddon() - onInstallStarted, addon already installed"); - } - - if (install.addon.type !== "experiment") { - this._log.error("_installAddon() - onInstallStarted, wrong addon type"); - return false; - } - return undefined; - }, - - onInstallEnded: install => { - this._log.trace("_installAddon() - install ended for " + this.id); - gActiveInstallURLs.delete(install.sourceURI.spec); - - this._lastChangedDate = this._policy.now(); - this._startDate = this._policy.now(); - this._enabled = true; - - TelemetryLog.log(TELEMETRY_LOG.ACTIVATION_KEY, - [TELEMETRY_LOG.ACTIVATION.ACTIVATED, this.id]); - - let addon = install.addon; - this._name = addon.name; - this._addonId = addon.id; - this._description = addon.description || ""; - this._homepageURL = addon.homepageURL || ""; - - // Experiment add-ons default to userDisabled=true. Enable if needed. - if (addon.userDisabled) { - this._log.trace("Add-on is disabled. Enabling."); - listener._expectedID = addon.id; - AddonManager.addAddonListener(listener); - addon.userDisabled = false; - } else { - this._log.trace("Add-on is enabled. start() completed."); - deferred.resolve(); - } - }, - - onEnabled: addon => { - this._log.info("onEnabled() for " + addon.id); - - if (addon.id != listener._expectedID) { - return; - } - - AddonManager.removeAddonListener(listener); - deferred.resolve(); - }, - }; - - ["onDownloadCancelled", "onDownloadFailed", "onInstallCancelled", "onInstallFailed"] - .forEach(what => { - listener[what] = install => failureHandler(install, what) - }); - - install.addListener(listener); - install.install(); - - return yield deferred.promise; - }), - - /** - * Stop running the experiment if it is active. - * - * @param terminationKind (optional) - * The termination kind, e.g. ADDON_UNINSTALLED or EXPIRED. - * @param terminationReason (optional) - * The termination reason details for termination kind RECHECK. - * @return Promise<> Resolved when the operation is complete. - */ - stop: Task.async(function* (terminationKind, terminationReason) { - this._log.trace("stop() - id=" + this.id + ", terminationKind=" + terminationKind); - if (!this._enabled) { - throw new Error("Must not call stop() on an inactive experiment."); - } - - this._enabled = false; - let now = this._policy.now(); - this._lastChangedDate = now; - this._endDate = now; - - let changes = yield this.reconcileAddonState(); - this._logTermination(terminationKind, terminationReason); - - if (terminationKind == TELEMETRY_LOG.TERMINATION.ADDON_UNINSTALLED) { - changes |= this.ADDON_CHANGE_UNINSTALL; - } - - return changes; - }), - - /** - * Reconcile the state of the add-on against what it's supposed to be. - * - * If we are active, ensure the add-on is enabled and up to date. - * - * If we are inactive, ensure the add-on is not installed. - */ - reconcileAddonState: Task.async(function* () { - this._log.trace("reconcileAddonState()"); - - if (!this._enabled) { - if (!this._addonId) { - this._log.trace("reconcileAddonState() - Experiment is not enabled and " + - "has no add-on. Doing nothing."); - return this.ADDON_CHANGE_NONE; - } - - let addon = yield this._getAddon(); - if (!addon) { - this._log.trace("reconcileAddonState() - Inactive experiment has no " + - "add-on. Doing nothing."); - return this.ADDON_CHANGE_NONE; - } - - this._log.info("reconcileAddonState() - Uninstalling add-on for inactive " + - "experiment: " + addon.id); - gActiveUninstallAddonIDs.add(addon.id); - yield uninstallAddons([addon]); - gActiveUninstallAddonIDs.delete(addon.id); - return this.ADDON_CHANGE_UNINSTALL; - } - - // If we get here, we're supposed to be active. - - let changes = 0; - - // That requires an add-on. - let currentAddon = yield this._getAddon(); - - // If we have an add-on but it isn't up to date, uninstall it - // (to prepare for reinstall). - if (currentAddon && this._needsUpdate) { - this._log.info("reconcileAddonState() - Uninstalling add-on because update " + - "needed: " + currentAddon.id); - gActiveUninstallAddonIDs.add(currentAddon.id); - yield uninstallAddons([currentAddon]); - gActiveUninstallAddonIDs.delete(currentAddon.id); - changes |= this.ADDON_CHANGE_UNINSTALL; - } - - if (!currentAddon || this._needsUpdate) { - this._log.info("reconcileAddonState() - Installing add-on."); - yield this._installAddon(); - changes |= this.ADDON_CHANGE_INSTALL; - } - - let addon = yield this._getAddon(); - if (!addon) { - throw new Error("Could not obtain add-on for experiment that should be " + - "enabled."); - } - - // If we have the add-on and it is enabled, we are done. - if (!addon.userDisabled) { - return changes; - } - - // Check permissions to see if we can enable the addon. - if (!(addon.permissions & AddonManager.PERM_CAN_ENABLE)) { - throw new Error("Don't have permission to enable addon " + addon.id + ", perm=" + addon.permission); - } - - // Experiment addons should not require a restart. - if (addon.operationsRequiringRestart & AddonManager.OP_NEEDS_RESTART_ENABLE) { - throw new Error("Experiment addon requires a restart: " + addon.id); - } - - let deferred = Promise.defer(); - - // Else we need to enable it. - let listener = { - onEnabled: enabledAddon => { - if (enabledAddon.id != addon.id) { - return; - } - - AddonManager.removeAddonListener(listener); - deferred.resolve(); - }, - }; - - for (let handler of ["onDisabled", "onOperationCancelled", "onUninstalled"]) { - listener[handler] = (evtAddon) => { - if (evtAddon.id != addon.id) { - return; - } - - AddonManager.removeAddonListener(listener); - deferred.reject("Failed to enable addon " + addon.id + " due to: " + handler); - }; - } - - this._log.info("reconcileAddonState() - Activating add-on: " + addon.id); - AddonManager.addAddonListener(listener); - addon.userDisabled = false; - yield deferred.promise; - changes |= this.ADDON_CHANGE_ENABLE; - - this._log.info("reconcileAddonState() - Add-on has been enabled: " + addon.id); - return changes; - }), - - /** - * Obtain the underlying Addon from the Addon Manager. - * - * @return Promise<Addon|null> - */ - _getAddon: function () { - if (!this._addonId) { - return Promise.resolve(null); - } - - let deferred = Promise.defer(); - - AddonManager.getAddonByID(this._addonId, (addon) => { - if (addon && addon.appDisabled) { - // Don't return PreviousExperiments. - addon = null; - } - - deferred.resolve(addon); - }); - - return deferred.promise; - }, - - _logTermination: function (terminationKind, terminationReason) { - if (terminationKind === undefined) { - return; - } - - if (!(terminationKind in TELEMETRY_LOG.TERMINATION)) { - this._log.warn("stop() - unknown terminationKind " + terminationKind); - return; - } - - let data = [terminationKind, this.id]; - if (terminationReason) { - data = data.concat(terminationReason); - } - - TelemetryLog.log(TELEMETRY_LOG.TERMINATION_KEY, data); - }, - - /** - * Determine whether an active experiment should be stopped. - */ - shouldStop: function () { - if (!this._enabled) { - throw new Error("shouldStop must not be called on disabled experiments."); - } - - let deferred = Promise.defer(); - this.isApplicable().then( - () => deferred.resolve({shouldStop: false}), - reason => deferred.resolve({shouldStop: true, reason: reason}) - ); - - return deferred.promise; - }, - - /* - * Should this be discarded from the cache due to age? - */ - shouldDiscard: function () { - let limit = this._policy.now(); - limit.setDate(limit.getDate() - KEEP_HISTORY_N_DAYS); - return (this._lastChangedDate < limit); - }, - - /* - * Get next date (in epoch-ms) to schedule a re-evaluation for this. - * Returns 0 if it doesn't need one. - */ - getScheduleTime: function () { - if (this._enabled) { - let startTime = this._startDate.getTime(); - let maxActiveTime = startTime + 1000 * this._manifestData.maxActiveSeconds; - return Math.min(1000 * this._manifestData.endTime, maxActiveTime); - } - - if (this._endDate) { - return this._endDate.getTime(); - } - - return 1000 * this._manifestData.startTime; - }, - - /* - * Perform sanity checks on the experiment data. - */ - _isManifestDataValid: function (data) { - this._log.trace("isManifestDataValid() - data: " + JSON.stringify(data)); - - for (let key of this.MANIFEST_REQUIRED_FIELDS) { - if (!(key in data)) { - this._log.error("isManifestDataValid() - missing required key: " + key); - return false; - } - } - - for (let key in data) { - if (!this.MANIFEST_OPTIONAL_FIELDS.has(key) && - !this.MANIFEST_REQUIRED_FIELDS.has(key)) { - this._log.error("isManifestDataValid() - unknown key: " + key); - return false; - } - } - - return true; - }, -}; - -/** - * Strip a Date down to its UTC midnight. - * - * This will return a cloned Date object. The original is unchanged. - */ -var stripDateToMidnight = function (d) { - let m = new Date(d); - m.setUTCHours(0, 0, 0, 0); - - return m; -}; - -/** - * An Add-ons Manager provider that knows about old experiments. - * - * This provider exposes read-only add-ons corresponding to previously-active - * experiments. The existence of this provider (and the add-ons it knows about) - * facilitates the display of old experiments in the Add-ons Manager UI with - * very little custom code in that component. - */ -this.Experiments.PreviousExperimentProvider = function (experiments) { - this._experiments = experiments; - this._experimentList = []; - this._log = Log.repository.getLoggerWithMessagePrefix( - "Browser.Experiments.Experiments", - "PreviousExperimentProvider #" + gPreviousProviderCounter++ + "::"); -} - -this.Experiments.PreviousExperimentProvider.prototype = Object.freeze({ - name: "PreviousExperimentProvider", - - startup: function () { - this._log.trace("startup()"); - Services.obs.addObserver(this, EXPERIMENTS_CHANGED_TOPIC, false); - }, - - shutdown: function () { - this._log.trace("shutdown()"); - try { - Services.obs.removeObserver(this, EXPERIMENTS_CHANGED_TOPIC); - } catch (e) { - // Prevent crash in mochitest-browser3 on Mulet - } - }, - - observe: function (subject, topic, data) { - switch (topic) { - case EXPERIMENTS_CHANGED_TOPIC: - this._updateExperimentList(); - break; - } - }, - - getAddonByID: function (id, cb) { - for (let experiment of this._experimentList) { - if (experiment.id == id) { - cb(new PreviousExperimentAddon(experiment)); - return; - } - } - - cb(null); - }, - - getAddonsByTypes: function (types, cb) { - if (types && types.length > 0 && types.indexOf("experiment") == -1) { - cb([]); - return; - } - - cb(this._experimentList.map(e => new PreviousExperimentAddon(e))); - }, - - _updateExperimentList: function () { - return this._experiments.getExperiments().then((experiments) => { - let list = experiments.filter(e => !e.active); - - let newMap = new Map(list.map(e => [e.id, e])); - let oldMap = new Map(this._experimentList.map(e => [e.id, e])); - - let added = [...newMap.keys()].filter(id => !oldMap.has(id)); - let removed = [...oldMap.keys()].filter(id => !newMap.has(id)); - - for (let id of added) { - this._log.trace("updateExperimentList() - adding " + id); - let wrapper = new PreviousExperimentAddon(newMap.get(id)); - AddonManagerPrivate.callInstallListeners("onExternalInstall", null, wrapper, null, false); - AddonManagerPrivate.callAddonListeners("onInstalling", wrapper, false); - } - - for (let id of removed) { - this._log.trace("updateExperimentList() - removing " + id); - let wrapper = new PreviousExperimentAddon(oldMap.get(id)); - AddonManagerPrivate.callAddonListeners("onUninstalling", wrapper, false); - } - - this._experimentList = list; - - for (let id of added) { - let wrapper = new PreviousExperimentAddon(newMap.get(id)); - AddonManagerPrivate.callAddonListeners("onInstalled", wrapper); - } - - for (let id of removed) { - let wrapper = new PreviousExperimentAddon(oldMap.get(id)); - AddonManagerPrivate.callAddonListeners("onUninstalled", wrapper); - } - - return this._experimentList; - }); - }, -}); - -/** - * An add-on that represents a previously-installed experiment. - */ -function PreviousExperimentAddon(experiment) { - this._id = experiment.id; - this._name = experiment.name; - this._endDate = experiment.endDate; - this._description = experiment.description; -} - -PreviousExperimentAddon.prototype = Object.freeze({ - // BEGIN REQUIRED ADDON PROPERTIES - - get appDisabled() { - return true; - }, - - get blocklistState() { - Ci.nsIBlocklistService.STATE_NOT_BLOCKED - }, - - get creator() { - return new AddonManagerPrivate.AddonAuthor(""); - }, - - get foreignInstall() { - return false; - }, - - get id() { - return this._id; - }, - - get isActive() { - return false; - }, - - get isCompatible() { - return true; - }, - - get isPlatformCompatible() { - return true; - }, - - get name() { - return this._name; - }, - - get pendingOperations() { - return AddonManager.PENDING_NONE; - }, - - get permissions() { - return 0; - }, - - get providesUpdatesSecurely() { - return true; - }, - - get scope() { - return AddonManager.SCOPE_PROFILE; - }, - - get type() { - return "experiment"; - }, - - get userDisabled() { - return true; - }, - - get version() { - return null; - }, - - // END REQUIRED PROPERTIES - - // BEGIN OPTIONAL PROPERTIES - - get description() { - return this._description; - }, - - get updateDate() { - return new Date(this._endDate); - }, - - // END OPTIONAL PROPERTIES - - // BEGIN REQUIRED METHODS - - isCompatibleWith: function (appVersion, platformVersion) { - return true; - }, - - findUpdates: function (listener, reason, appVersion, platformVersion) { - AddonManagerPrivate.callNoUpdateListeners(this, listener, reason, - appVersion, platformVersion); - }, - - // END REQUIRED METHODS - - /** - * The end-date of the experiment, required for the Addon Manager UI. - */ - - get endDate() { - return this._endDate; - }, - -}); diff --git a/browser/experiments/Experiments.manifest b/browser/experiments/Experiments.manifest deleted file mode 100644 index 4a6a05a60..000000000 --- a/browser/experiments/Experiments.manifest +++ /dev/null @@ -1,6 +0,0 @@ -component {f7800463-3b97-47f9-9341-b7617e6d8d49} ExperimentsService.js -contract @mozilla.org/browser/experiments-service;1 {f7800463-3b97-47f9-9341-b7617e6d8d49} -category update-timer ExperimentsService @mozilla.org/browser/experiments-service;1,getService,experiments-update-timer,experiments.manifest.fetchIntervalSeconds,86400 -category profile-after-change ExperimentsService @mozilla.org/browser/experiments-service;1 - - diff --git a/browser/experiments/ExperimentsService.js b/browser/experiments/ExperimentsService.js deleted file mode 100644 index 53e811251..000000000 --- a/browser/experiments/ExperimentsService.js +++ /dev/null @@ -1,118 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -"use strict"; - -const {interfaces: Ci, utils: Cu} = Components; - -Cu.import("resource://gre/modules/XPCOMUtils.jsm"); -Cu.import("resource://gre/modules/Services.jsm"); -Cu.import("resource://gre/modules/Preferences.jsm"); - -XPCOMUtils.defineLazyModuleGetter(this, "Experiments", - "resource:///modules/experiments/Experiments.jsm"); -XPCOMUtils.defineLazyModuleGetter(this, "OS", - "resource://gre/modules/osfile.jsm"); -XPCOMUtils.defineLazyModuleGetter(this, "CommonUtils", - "resource://services-common/utils.js"); - -const PREF_EXPERIMENTS_ENABLED = "experiments.enabled"; -const PREF_ACTIVE_EXPERIMENT = "experiments.activeExperiment"; // whether we have an active experiment -const PREF_TELEMETRY_ENABLED = "toolkit.telemetry.enabled"; -const PREF_TELEMETRY_UNIFIED = "toolkit.telemetry.unified"; -const DELAY_INIT_MS = 30 * 1000; - -// Whether the FHR/Telemetry unification features are enabled. -// Changing this pref requires a restart. -const IS_UNIFIED_TELEMETRY = Preferences.get(PREF_TELEMETRY_UNIFIED, false); - -XPCOMUtils.defineLazyGetter( - this, "gPrefs", () => { - return new Preferences(); - }); - -XPCOMUtils.defineLazyGetter( - this, "gExperimentsEnabled", () => { - // We can enable experiments if either unified Telemetry or FHR is on, and the user - // has opted into Telemetry. - return gPrefs.get(PREF_EXPERIMENTS_ENABLED, false) && - IS_UNIFIED_TELEMETRY && gPrefs.get(PREF_TELEMETRY_ENABLED, false); - }); - -XPCOMUtils.defineLazyGetter( - this, "gActiveExperiment", () => { - return gPrefs.get(PREF_ACTIVE_EXPERIMENT); - }); - -function ExperimentsService() { - this._initialized = false; - this._delayedInitTimer = null; -} - -ExperimentsService.prototype = { - classID: Components.ID("{f7800463-3b97-47f9-9341-b7617e6d8d49}"), - QueryInterface: XPCOMUtils.generateQI([Ci.nsITimerCallback, Ci.nsIObserver]), - - notify: function (timer) { - if (!gExperimentsEnabled) { - return; - } - if (OS.Constants.Path.profileDir === undefined) { - throw Error("Update timer fired before profile was initialized?"); - } - let instance = Experiments.instance(); - if (instance.isReady) { - instance.updateManifest(); - } - }, - - _delayedInit: function () { - if (!this._initialized) { - this._initialized = true; - Experiments.instance(); // for side effects - } - }, - - observe: function (subject, topic, data) { - switch (topic) { - case "profile-after-change": - if (gExperimentsEnabled) { - Services.obs.addObserver(this, "quit-application", false); - Services.obs.addObserver(this, "sessionstore-state-finalized", false); - Services.obs.addObserver(this, "EM-loaded", false); - - if (gActiveExperiment) { - this._initialized = true; - Experiments.instance(); // for side effects - } - } - break; - case "sessionstore-state-finalized": - if (!this._initialized) { - CommonUtils.namedTimer(this._delayedInit, DELAY_INIT_MS, this, "_delayedInitTimer"); - } - break; - case "EM-loaded": - if (!this._initialized) { - Experiments.instance(); // for side effects - this._initialized = true; - - if (this._delayedInitTimer) { - this._delayedInitTimer.clear(); - } - } - break; - case "quit-application": - Services.obs.removeObserver(this, "quit-application"); - Services.obs.removeObserver(this, "sessionstore-state-finalized"); - Services.obs.removeObserver(this, "EM-loaded"); - if (this._delayedInitTimer) { - this._delayedInitTimer.clear(); - } - break; - } - }, -}; - -this.NSGetFactory = XPCOMUtils.generateNSGetFactory([ExperimentsService]); diff --git a/browser/experiments/Makefile.in b/browser/experiments/Makefile.in deleted file mode 100644 index 5558582a6..000000000 --- a/browser/experiments/Makefile.in +++ /dev/null @@ -1,16 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -include $(topsrcdir)/config/rules.mk - -# This is so hacky. Waiting on bug 988938. -addondir = $(srcdir)/test/addons -testdir = $(topobjdir)/_tests/xpcshell/browser/experiments/test/xpcshell - -misc:: $(call mkdir_deps,$(testdir)) - $(EXIT_ON_ERROR) \ - for dir in $(addondir)/*; do \ - base=`basename $$dir`; \ - (cd $$dir && zip -qr $(testdir)/$$base.xpi *); \ - done diff --git a/browser/experiments/docs/index.rst b/browser/experiments/docs/index.rst deleted file mode 100644 index 11e5d4faa..000000000 --- a/browser/experiments/docs/index.rst +++ /dev/null @@ -1,13 +0,0 @@ -===================== -Telemetry Experiments -===================== - -Telemetry Experiments is a feature of Firefox that allows the installation -of add-ons called experiments to a subset of the Firefox population for -the purposes of experimenting with changes and collecting data on specific -aspects of application usage. - -.. toctree:: - :maxdepth: 1 - - manifest diff --git a/browser/experiments/docs/manifest.rst b/browser/experiments/docs/manifest.rst deleted file mode 100644 index d4fad5243..000000000 --- a/browser/experiments/docs/manifest.rst +++ /dev/null @@ -1,429 +0,0 @@ -.. _experiments_manifests: - -===================== -Experiments Manifests -===================== - -*Experiments Manifests* are documents that describe the set of active -experiments a client may run. - -*Experiments Manifests* are fetched periodically by clients. When -fetched, clients look at the experiments within the manifest and -determine which experiments are applicable. If an experiment is -applicable, the client may download and start the experiment. - -Manifest Format -=============== - -Manifests are JSON documents where the main element is an object. - -The *schema* of the object is versioned and defined by the presence -of a top-level ``version`` property, whose integer value is the -schema version used by that manifest. Each version is documented -in the sections below. - -Version 1 ---------- - -Version 1 is the original manifest format. - -The following properties may exist in the root object: - -experiments - An array of objects describing candidate experiments. The format of - these objects is documented below. - - An array is used to create an explicit priority of experiments. - Experiments listed at the beginning of the array take priority over - experiments that follow. - -Experiments Objects -^^^^^^^^^^^^^^^^^^^ - -Each object in the ``experiments`` array may contain the following -properties: - -id - (required) String identifier of this experiment. The identifier should - be treated as opaque by clients. It is used to uniquely identify an - experiment for all of time. - -xpiURL - (required) String URL of the XPI that implements this experiment. - - If the experiment is activated, the client will download and install this - XPI. - -xpiHash - (required) String hash of the XPI that implements this experiment. - - The value is composed of a hash identifier followed by a colon - followed by the hash value. e.g. - `sha1:f677428b9172e22e9911039aef03f3736e7f78a7`. `sha1` and `sha256` - are the two supported hashing mechanisms. The hash value is the hex - encoding of the binary hash. - - When the client downloads the XPI for the experiment, it should compare - the hash of that XPI against this value. If the hashes don't match, - the client should not install the XPI. - - Clients may also use this hash as a means of determining when an - experiment's XPI has changed and should be refreshed. - -startTime - Integer seconds since UNIX epoch that this experiment should - start. Clients should not start an experiment if *now()* is less than - this value. - -maxStartTime - (optional) Integer seconds since UNIX epoch after which this experiment - should no longer start. - - Some experiments may wish to impose hard deadlines after which no new - clients should activate the experiment. This property may be used to - facilitate that. - -endTime - Integer seconds since UNIX epoch after which this experiment - should no longer run. Clients should cease an experiment when the current - time is beyond this value. - -maxActiveSeconds - Integer seconds defining the max wall time this experiment should be - active for. - - The client should deactivate the experiment this many seconds after - initial activation. - - This value only involves wall time, not browser activity or session time. - -appName - Array of application names this experiment should run on. - - An application name comes from ``nsIXULAppInfo.name``. It is a value - like ``Firefox``, ``Fennec``, or `B2G`. - - The client should compare its application name against the members of - this array. If a match is found, the experiment is applicable. - -minVersion - (optional) String version number of the minimum application version this - experiment should run on. - - A version number is something like ``27.0.0`` or ``28``. - - The client should compare its version number to this value. If the client's - version is greater or equal to this version (using a version-aware comparison - function), the experiment is applicable. - - If this is not specified, there is no lower bound to versions this - experiment should run on. - -maxVersion - (optional) String version number of the maximum application version this - experiment should run on. - - This is similar to ``minVersion`` except it sets the upper bound for - application versions. - - If the client's version is less than or equal to this version, the - experiment is applicable. - - If this is not specified, there is no upper bound to versions this - experiment should run on. - -version - (optional) Array of application versions this experiment should run on. - - This is similar to ``minVersion`` and ``maxVersion`` except only a - whitelisted set of specific versions are allowed. - - The client should compare its version to members of this array. If a match - is found, the experiment is applicable. - -minBuildID - (optional) String minimum Build ID this experiment should run on. - - Build IDs are values like ``201402261424``. - - The client should perform a string comparison of its Build ID against this - value. If its value is greater than or equal to this value, the experiment - is applicable. - -maxBuildID - (optional) String maximum Build ID this experiment should run on. - - This is similar to ``minBuildID`` except it sets the upper bound - for Build IDs. - - The client should perform a string comparison of its Build ID against - this value. If its value is less than or equal to this value, the - experiment is applicable. - -buildIDs - (optional) Array of Build IDs this experiment should run on. - - This is similar to ``minBuildID`` and ``maxBuildID`` except only a - whitelisted set of Build IDs are considered. - - The client should compare its Build ID to members of this array. If a - match is found, the experiment is applicable. - -os - (optional) Array of operating system identifiers this experiment should - run on. - - Values for this array come from ``nsIXULRuntime.OS``. - - The client will compare its operating system identifier to members - of this array. If a match is found, the experiment is applicable to the - client. - -channel - (optional) Array of release channel identifiers this experiment should run - on. - - The client will compare its channel to members of this array. If a match - is found, the experiment is applicable. - - If this property is not defined, the client should assume the experiment - is to run on all channels. - -locale - (optional) Array of locale identifiers this experiment should run on. - - A locale identifier is a string like ``en-US`` or ``zh-CN`` and is - obtained by looking at - ``nsIXULChromeRegistry.getSelectedLocale("global")``. - - The client should compare its locale identifier to members of this array. - If a match is found, the experiment is applicable. - - If this property is not defined, the client should assume the experiment - is to run on all locales. - -sample - (optional) Decimal number indicating the sampling rate for this experiment. - - This will contain a value between ``0.0`` and ``1.0``. The client should - generate a random decimal between ``0.0`` and ``1.0``. If the randomly - generated number is less than or equal to the value of this field, the - experiment is applicable. - -disabled - (optional) Boolean value indicating whether an experiment is disabled. - - Normally, experiments are deactivated after a certain time has passed or - after the experiment itself determines it no longer needs to run (perhaps - it collected sufficient data already). - - This property serves as a backup mechanism to remotely disable an - experiment before it was scheduled to be disabled. It can be used to - kill experiments that are found to be doing wrong or bad things or that - aren't useful. - - If this property is not defined or is false, the client should assume - the experiment is active and a candidate for activation. - -frozen - (optional) Boolean value indicating this experiment is frozen and no - longer accepting new enrollments. - - If a client sees a true value in this field, it should not attempt to - activate an experiment. - -jsfilter - (optional) JavaScript code that will be evaluated to determine experiment - applicability. - - This property contains the string representation of JavaScript code that - will be evaluated in a sandboxed environment using JavaScript's - ``eval()``. - - The string is expected to contain the definition of a JavaScript function - ``filter(context)``. This function receives as its argument an object - holding application state. See the section below for the definition of - this object. - - The purpose of this property is to allow experiments to define complex - rules and logic for evaluating experiment applicability in a manner - that is privacy conscious and doesn't require the transmission of - excessive data. - - The return value of this filter indicates whether the experiment is - applicable. Functions should return true if the experiment is - applicable. - - If an experiment is not applicable, they should throw an Error whose - message contains the reason the experiment is not applicable. This - message may be logged and sent to remote servers, so it should not - contain private or otherwise sensitive data that wouldn't normally - be submitted. - - If a falsey (or undefined) value is returned, the client should - assume the experiment is not applicable. - - If this property is not defined, the client does not consider a custom - JavaScript filter function when determining whether an experiment is - applicable. - -JavaScript Filter Context Objects -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The object passed to a ``jsfilter`` ``filter()`` function contains the -following properties: - -healthReportSubmissionEnabled - This property contains a boolean indicating whether Firefox Health - Report has its data submission flag enabled (whether Firefox Health - Report is sending data to remote servers). - -healthReportPayload - This property contains the current Firefox Health Report payload. - - The payload format is documented at :ref:`healthreport_dataformat`. - -telemetryPayload - This property contains the current Telemetry payload. - -The evaluation sandbox for the JavaScript filters may be destroyed -immediately after ``filter()`` returns. This function should not assume -async code will finish. - -Experiment Applicability and Client Behavior -============================================ - -The point of an experiment manifest is to define which experiments are -available and where and how to run them. This section explains those -rules in more detail. - -Many of the properties in *Experiment Objects* are related to determining -whether an experiment should run on a given client. This evaluation is -performed client side. - -1. Multiple conditions in an experiment ---------------------------------------- - -If multiple conditions are defined for an experiment, the client should -combine each condition with a logical *AND*: all conditions must be -satisfied for an experiment to run. If one condition fails, the experiment -is not applicable. - -2. Active experiment disappears from manifest ---------------------------------------------- - -If a specific experiment disappears from the manifest, the client should -continue conducting an already-active experiment. Furthermore, the -client should remember what the expiration events were for an experiment -and honor them. - -The rationale here is that we want to prevent an accidental deletion -or temporary failure on the server to inadvertantly deactivate -supposed-to-be-active experiments. We also don't want premature deletion -of an experiment from the manifest to result in indefinite activation -periods. - -3. Inactive experiment disappears from manifest ------------------------------------------------ - -If an inactive but scheduled-to-be-active experiment disappears from the -manifest, the client should not activate the experiment. - -If that experiment reappears in the manifest, the client should not -treat that experiment any differently than any other new experiment. Put -another way, the fact an inactive experiment disappears and then -reappears should not be significant. - -The rationale here is that server operators should have complete -control of an inactive experiment up to it's go-live date. - -4. Re-evaluating applicability on manifest refresh --------------------------------------------------- - -When an experiment manifest is refreshed or updated, the client should -re-evaluate the applicability of each experiment therein. - -The rationale here is that the server may change the parameters of an -experiment and want clients to pick those up. - -5. Activating a previously non-applicable experiment ----------------------------------------------------- - -If the conditions of an experiment change or the state of the client -changes to allow an experiment to transition from previously -non-applicable to applicable, the experiment should be activated. - -For example, if a client is running version 28 and the experiment -initially requires version 29 or above, the client will not mark the -experiment as applicable. But if the client upgrades to version 29 or if -the manifest is updated to require 28 or above, the experiment will -become applicable. - -6. Deactivating a previously active experiment ----------------------------------------------- - -If the conditions of an experiment change or the state of the client -changes and an active experiment is no longer applicable, that -experiment should be deactivated. - -7. Calculation of sampling-based applicability ----------------------------------------------- - -For calculating sampling-based applicability, the client will associate -a random value between ``0.0`` and ``1.0`` for each observed experiment -ID. This random value will be generated the first time sampling -applicability is evaluated. This random value will be persisted and used -in future applicability evaluations for this experiment. - -By saving and re-using the value, the client is able to reliably and -consistently evaluate applicability, even if the sampling threshold -in the manifest changes. - -Clients should retain the randomly-generated sampling value for -experiments that no longer appear in a manifest for a period of at least -30 days. The rationale is that if an experiment disappears and reappears -from a manifest, the client will not have multiple opportunities to -generate a random value that satisfies the sampling criteria. - -8. Incompatible version numbers -------------------------------- - -If a client receives a manifest with a version number that it doesn't -recognize, it should ignore the manifest. - -9. Usage of old manifests -------------------------- - -If a client experiences an error fetching a manifest (server not -available) or if the manifest is corrupt, not readable, or compatible, -the client may use a previously-fetched (cached) manifest. - -10. Updating XPIs ------------------ - -If the URL or hash of an active experiment's XPI changes, the client -should fetch the new XPI, uninstall the old XPI, and install the new -XPI. - -Examples -======== - -Here is an example manifest:: - - { - "version": 1, - "experiments": [ - { - "id": "da9d7f4f-f3f9-4f81-bacd-6f0626ffa360", - "xpiURL": "https://experiments.mozilla.org/foo.xpi", - "xpiHash": "sha1:cb1eb32b89d86d78b7326f416cf404548c5e0099", - "startTime": 1393000000, - "endTime": 1394000000, - "appName": ["Firefox", "Fennec"], - "minVersion": "28", - "maxVersion": "30", - "os": ["windows", "linux", "osx"], - "jsfilter": "function filter(context) { return context.healthReportEnabled; }" - } - ] - } diff --git a/browser/experiments/moz.build b/browser/experiments/moz.build deleted file mode 100644 index a11e4b725..000000000 --- a/browser/experiments/moz.build +++ /dev/null @@ -1,18 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -HAS_MISC_RULE = True - -EXTRA_COMPONENTS += [ - 'Experiments.manifest', - 'ExperimentsService.js', -] - -EXTRA_JS_MODULES.experiments += [ - 'Experiments.jsm', -] - -XPCSHELL_TESTS_MANIFESTS += ['test/xpcshell/xpcshell.ini'] - -SPHINX_TREES['experiments'] = 'docs' diff --git a/browser/experiments/test/addons/experiment-1/install.rdf b/browser/experiments/test/addons/experiment-1/install.rdf deleted file mode 100644 index f9d70054a..000000000 --- a/browser/experiments/test/addons/experiment-1/install.rdf +++ /dev/null @@ -1,16 +0,0 @@ -<?xml version="1.0"?> - -<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:em="http://www.mozilla.org/2004/em-rdf#"> - - <Description about="urn:mozilla:install-manifest"> - <em:id>test-experiment-1@tests.mozilla.org</em:id> - <em:version>1</em:version> - <em:type>128</em:type> - - <!-- Front End MetaData --> - <em:name>Test experiment 1</em:name> - <em:description>Yet another experiment that experiments experimentally.</em:description> - - </Description> -</RDF> diff --git a/browser/experiments/test/addons/experiment-1a/install.rdf b/browser/experiments/test/addons/experiment-1a/install.rdf deleted file mode 100644 index 7806b11b1..000000000 --- a/browser/experiments/test/addons/experiment-1a/install.rdf +++ /dev/null @@ -1,16 +0,0 @@ -<?xml version="1.0"?> - -<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:em="http://www.mozilla.org/2004/em-rdf#"> - - <Description about="urn:mozilla:install-manifest"> - <em:id>test-experiment-1@tests.mozilla.org</em:id> - <em:version>1.1</em:version> - <em:type>128</em:type> - - <!-- Front End MetaData --> - <em:name>Test experiment 1.1</em:name> - <em:description>And yet another experiment that experiments experimentally.</em:description> - - </Description> -</RDF> diff --git a/browser/experiments/test/addons/experiment-2/install.rdf b/browser/experiments/test/addons/experiment-2/install.rdf deleted file mode 100644 index 69122c0ef..000000000 --- a/browser/experiments/test/addons/experiment-2/install.rdf +++ /dev/null @@ -1,16 +0,0 @@ -<?xml version="1.0"?> - -<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:em="http://www.mozilla.org/2004/em-rdf#"> - - <Description about="urn:mozilla:install-manifest"> - <em:id>test-experiment-2@tests.mozilla.org</em:id> - <em:version>1</em:version> - <em:type>128</em:type> - - <!-- Front End MetaData --> - <em:name>Test experiment 2</em:name> - <em:description>And yet another experiment that experiments experimentally.</em:description> - - </Description> -</RDF> diff --git a/browser/experiments/test/addons/experiment-racybranch/bootstrap.js b/browser/experiments/test/addons/experiment-racybranch/bootstrap.js deleted file mode 100644 index e8278f50f..000000000 --- a/browser/experiments/test/addons/experiment-racybranch/bootstrap.js +++ /dev/null @@ -1,35 +0,0 @@ -/* exported startup, shutdown, install, uninstall */ - -var {classes: Cc, interfaces: Ci, utils: Cu} = Components; - -Cu.import("resource:///modules/experiments/Experiments.jsm"); - -var gStarted = false; - -function startup(data, reasonCode) { - if (gStarted) { - return; - } - gStarted = true; - - // delay realstartup to trigger the race condition - Cc['@mozilla.org/thread-manager;1'].getService(Ci.nsIThreadManager) - .mainThread.dispatch(realstartup, 0); -} - -function realstartup() { - let experiments = Experiments.instance(); - let experiment = experiments._getActiveExperiment(); - if (experiment.branch) { - Cu.reportError("Found pre-existing branch: " + experiment.branch); - return; - } - - let branch = "racy-set"; - experiments.setExperimentBranch(experiment.id, branch) - .then(null, Cu.reportError); -} - -function shutdown() { } -function install() { } -function uninstall() { } diff --git a/browser/experiments/test/addons/experiment-racybranch/install.rdf b/browser/experiments/test/addons/experiment-racybranch/install.rdf deleted file mode 100644 index cebaede56..000000000 --- a/browser/experiments/test/addons/experiment-racybranch/install.rdf +++ /dev/null @@ -1,16 +0,0 @@ -<?xml version="1.0"?>
-
-<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:em="http://www.mozilla.org/2004/em-rdf#">
-
- <Description about="urn:mozilla:install-manifest">
- <em:id>test-experiment-racybranch@tests.mozilla.org</em:id>
- <em:version>1</em:version>
- <em:type>128</em:type>
-
- <!-- Front End MetaData -->
- <em:name>Test experiment racybranch</em:name>
- <em:description>An experiment that sets the experiment branch in a potentially racy way.</em:description>
-
- </Description>
-</RDF>
diff --git a/browser/experiments/test/xpcshell/.eslintrc.js b/browser/experiments/test/xpcshell/.eslintrc.js deleted file mode 100644 index 1f540a05b..000000000 --- a/browser/experiments/test/xpcshell/.eslintrc.js +++ /dev/null @@ -1,15 +0,0 @@ -"use strict"; - -module.exports = { - "extends": [ - "../../../../testing/xpcshell/xpcshell.eslintrc.js" - ], - - "rules": { - "no-unused-vars": ["error", { - "vars": "all", - "varsIgnorePattern": "^(Cc|Ci|Cr|Cu|EXPORTED_SYMBOLS)$", - "args": "none" - }] - } -}; diff --git a/browser/experiments/test/xpcshell/experiments_1.manifest b/browser/experiments/test/xpcshell/experiments_1.manifest deleted file mode 100644 index 0401ea328..000000000 --- a/browser/experiments/test/xpcshell/experiments_1.manifest +++ /dev/null @@ -1,19 +0,0 @@ -{ - "version": 1, - "experiments": [ - { - "id": "test-experiment-1@tests.mozilla.org", - "xpiURL": "https://experiments.mozilla.org/foo.xpi", - "xpiHash": "sha1:cb1eb32b89d86d78b7326f416cf404548c5e0099", - "startTime": 1393000000, - "endTime": 1394000000, - "appName": ["Firefox", "Fennec"], - "minVersion": "28", - "maxVersion": "30", - "maxActiveSeconds": 60, - "os": ["windows", "linux", "osx"], - "channel": ["daily", "weekly", "nightly"], - "jsfilter": "function filter(context) { return true; }" - } - ] -} diff --git a/browser/experiments/test/xpcshell/head.js b/browser/experiments/test/xpcshell/head.js deleted file mode 100644 index ae356ea2d..000000000 --- a/browser/experiments/test/xpcshell/head.js +++ /dev/null @@ -1,199 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - * http://creativecommons.org/publicdomain/zero/1.0/ */ - -/* exported PREF_EXPERIMENTS_ENABLED, PREF_LOGGING_LEVEL, PREF_LOGGING_DUMP - PREF_MANIFEST_URI, PREF_FETCHINTERVAL, EXPERIMENT1_ID, - EXPERIMENT1_NAME, EXPERIMENT1_XPI_SHA1, EXPERIMENT1A_NAME, - EXPERIMENT1A_XPI_SHA1, EXPERIMENT2_ID, EXPERIMENT2_XPI_SHA1, - EXPERIMENT3_ID, EXPERIMENT4_ID, FAKE_EXPERIMENTS_1, - FAKE_EXPERIMENTS_2, gAppInfo, removeCacheFile, defineNow, - futureDate, dateToSeconds, loadAddonManager, promiseRestartManager, - startAddonManagerOnly, getExperimentAddons, replaceExperiments */ - -var {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components; - -Cu.import("resource://gre/modules/Services.jsm"); -Cu.import("resource://gre/modules/XPCOMUtils.jsm"); -Cu.import("resource://gre/modules/Promise.jsm"); -Cu.import("resource://gre/modules/Task.jsm"); -Cu.import("resource://gre/modules/osfile.jsm"); -Cu.import("resource://testing-common/AddonManagerTesting.jsm"); -Cu.import("resource://testing-common/AddonTestUtils.jsm"); - -XPCOMUtils.defineLazyModuleGetter(this, "AddonManager", - "resource://gre/modules/AddonManager.jsm"); - -const PREF_EXPERIMENTS_ENABLED = "experiments.enabled"; -const PREF_LOGGING_LEVEL = "experiments.logging.level"; -const PREF_LOGGING_DUMP = "experiments.logging.dump"; -const PREF_MANIFEST_URI = "experiments.manifest.uri"; -const PREF_FETCHINTERVAL = "experiments.manifest.fetchIntervalSeconds"; -const PREF_TELEMETRY_ENABLED = "toolkit.telemetry.enabled"; - -function getExperimentPath(base) { - let p = do_get_cwd(); - p.append(base); - return p.path; -} - -function sha1File(path) { - let f = Cc["@mozilla.org/file/local;1"] - .createInstance(Ci.nsILocalFile); - f.initWithPath(path); - let hasher = Cc["@mozilla.org/security/hash;1"] - .createInstance(Ci.nsICryptoHash); - hasher.init(hasher.SHA1); - - let is = Cc["@mozilla.org/network/file-input-stream;1"] - .createInstance(Ci.nsIFileInputStream); - is.init(f, -1, 0, 0); - hasher.updateFromStream(is, Math.pow(2, 32) - 1); - is.close(); - let bytes = hasher.finish(false); - - let rv = ""; - for (let i = 0; i < bytes.length; i++) { - rv += ("0" + bytes.charCodeAt(i).toString(16)).substr(-2); - } - return rv; -} - -const EXPERIMENT1_ID = "test-experiment-1@tests.mozilla.org"; -const EXPERIMENT1_XPI_NAME = "experiment-1.xpi"; -const EXPERIMENT1_NAME = "Test experiment 1"; -const EXPERIMENT1_PATH = getExperimentPath(EXPERIMENT1_XPI_NAME); -const EXPERIMENT1_XPI_SHA1 = "sha1:" + sha1File(EXPERIMENT1_PATH); - - -const EXPERIMENT1A_XPI_NAME = "experiment-1a.xpi"; -const EXPERIMENT1A_NAME = "Test experiment 1.1"; -const EXPERIMENT1A_PATH = getExperimentPath(EXPERIMENT1A_XPI_NAME); -const EXPERIMENT1A_XPI_SHA1 = "sha1:" + sha1File(EXPERIMENT1A_PATH); - -const EXPERIMENT2_ID = "test-experiment-2@tests.mozilla.org" -const EXPERIMENT2_XPI_NAME = "experiment-2.xpi"; -const EXPERIMENT2_PATH = getExperimentPath(EXPERIMENT2_XPI_NAME); -const EXPERIMENT2_XPI_SHA1 = "sha1:" + sha1File(EXPERIMENT2_PATH); - -const EXPERIMENT3_ID = "test-experiment-3@tests.mozilla.org"; -const EXPERIMENT4_ID = "test-experiment-4@tests.mozilla.org"; - -const FAKE_EXPERIMENTS_1 = [ - { - id: "id1", - name: "experiment1", - description: "experiment 1", - active: true, - detailUrl: "https://dummy/experiment1", - branch: "foo", - }, -]; - -const FAKE_EXPERIMENTS_2 = [ - { - id: "id2", - name: "experiment2", - description: "experiment 2", - active: false, - endDate: new Date(2014, 2, 11, 2, 4, 35, 42).getTime(), - detailUrl: "https://dummy/experiment2", - branch: null, - }, - { - id: "id1", - name: "experiment1", - description: "experiment 1", - active: false, - endDate: new Date(2014, 2, 10, 0, 0, 0, 0).getTime(), - detailURL: "https://dummy/experiment1", - branch: null, - }, -]; - -var gAppInfo = null; - -function removeCacheFile() { - let path = OS.Path.join(OS.Constants.Path.profileDir, "experiments.json"); - return OS.File.remove(path); -} - -function patchPolicy(policy, data) { - for (let key of Object.keys(data)) { - Object.defineProperty(policy, key, { - value: data[key], - writable: true, - }); - } -} - -function defineNow(policy, time) { - patchPolicy(policy, { now: () => new Date(time) }); -} - -function futureDate(date, offset) { - return new Date(date.getTime() + offset); -} - -function dateToSeconds(date) { - return date.getTime() / 1000; -} - -var gGlobalScope = this; -function loadAddonManager() { - AddonTestUtils.init(gGlobalScope); - AddonTestUtils.overrideCertDB(); - createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9.2"); - return AddonTestUtils.promiseStartupManager(); -} - -const { - promiseRestartManager, -} = AddonTestUtils; - -// Starts the addon manager without creating app info. We can't directly use -// |loadAddonManager| defined above in test_conditions.js as it would make the test fail. -function startAddonManagerOnly() { - let addonManager = Cc["@mozilla.org/addons/integration;1"] - .getService(Ci.nsIObserver) - .QueryInterface(Ci.nsITimerCallback); - addonManager.observe(null, "addons-startup", null); -} - -function getExperimentAddons(previous=false) { - let deferred = Promise.defer(); - - AddonManager.getAddonsByTypes(["experiment"], (addons) => { - if (previous) { - deferred.resolve(addons); - } else { - deferred.resolve(addons.filter(a => !a.appDisabled)); - } - }); - - return deferred.promise; -} - -function createAppInfo(ID="xpcshell@tests.mozilla.org", name="XPCShell", - version="1.0", platformVersion="1.0") { - AddonTestUtils.createAppInfo(ID, name, version, platformVersion); - gAppInfo = AddonTestUtils.appInfo; -} - -/** - * Replace the experiments on an Experiments with a new list. - * - * This monkeypatches getExperiments(). It doesn't monkeypatch the internal - * experiments list. So its utility is not as great as it could be. - */ -function replaceExperiments(experiment, list) { - Object.defineProperty(experiment, "getExperiments", { - writable: true, - value: () => { - return Promise.resolve(list); - }, - }); -} - -// Experiments require Telemetry to be enabled, and that's not true for debug -// builds. Let's just enable it here instead of going through each test. -Services.prefs.setBoolPref(PREF_TELEMETRY_ENABLED, true); diff --git a/browser/experiments/test/xpcshell/test_activate.js b/browser/experiments/test/xpcshell/test_activate.js deleted file mode 100644 index 60deafbfb..000000000 --- a/browser/experiments/test/xpcshell/test_activate.js +++ /dev/null @@ -1,151 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - * http://creativecommons.org/publicdomain/zero/1.0/ */ - -"use strict"; - -Cu.import("resource://testing-common/httpd.js"); -Cu.import("resource:///modules/experiments/Experiments.jsm"); - -const SEC_IN_ONE_DAY = 24 * 60 * 60; -const MS_IN_ONE_DAY = SEC_IN_ONE_DAY * 1000; - -var gHttpServer = null; -var gHttpRoot = null; -var gPolicy = null; - -function ManifestEntry(data) { - this.id = data.id || EXPERIMENT1_ID; - this.xpiURL = data.xpiURL || gHttpRoot + EXPERIMENT1_XPI_NAME; - this.xpiHash = data.xpiHash || EXPERIMENT1_XPI_SHA1; - this.appName = data.appName || ["XPCShell"]; - this.channel = data.appName || ["nightly"]; - this.startTime = data.startTime || new Date(2010, 0, 1, 12).getTime() / 1000; - this.endTime = data.endTime || new Date(9001, 0, 1, 12).getTime() / 1000; - this.maxActiveSeconds = data.maxActiveSeconds || 5 * SEC_IN_ONE_DAY; -} - -function run_test() { - run_next_test(); -} - -add_task(function* test_setup() { - loadAddonManager(); - gPolicy = new Experiments.Policy(); - - gHttpServer = new HttpServer(); - gHttpServer.start(-1); - let port = gHttpServer.identity.primaryPort; - gHttpRoot = "http://localhost:" + port + "/"; - gHttpServer.registerDirectory("/", do_get_cwd()); - do_register_cleanup(() => gHttpServer.stop(() => {})); - - patchPolicy(gPolicy, { - updatechannel: () => "nightly", - }); - - Services.prefs.setBoolPref(PREF_EXPERIMENTS_ENABLED, true); - Services.prefs.setIntPref(PREF_LOGGING_LEVEL, 0); - Services.prefs.setBoolPref(PREF_LOGGING_DUMP, true); -}); - -function isApplicable(experiment) { - let deferred = Promise.defer(); - experiment.isApplicable().then( - result => deferred.resolve({ applicable: true, reason: null }), - reason => deferred.resolve({ applicable: false, reason: reason }) - ); - - return deferred.promise; -} - -add_task(function* test_startStop() { - let baseDate = new Date(2014, 5, 1, 12); - let startDate = futureDate(baseDate, 30 * MS_IN_ONE_DAY); - let endDate = futureDate(baseDate, 60 * MS_IN_ONE_DAY); - let manifestData = new ManifestEntry({ - startTime: dateToSeconds(startDate), - endTime: dateToSeconds(endDate), - maxActiveSeconds: 10 * SEC_IN_ONE_DAY, - }); - let experiment = new Experiments.ExperimentEntry(gPolicy); - experiment.initFromManifestData(manifestData); - - // We need to associate it with the singleton so the onInstallStarted - // Addon Manager listener will know about it. - Experiments.instance()._experiments = new Map(); - Experiments.instance()._experiments.set(experiment.id, experiment); - - let result; - - defineNow(gPolicy, baseDate); - result = yield isApplicable(experiment); - Assert.equal(result.applicable, false, "Experiment should not be applicable."); - Assert.equal(experiment.enabled, false, "Experiment should not be enabled."); - - let addons = yield getExperimentAddons(); - Assert.equal(addons.length, 0, "No experiment add-ons are installed."); - - defineNow(gPolicy, futureDate(startDate, 5 * MS_IN_ONE_DAY)); - result = yield isApplicable(experiment); - Assert.equal(result.applicable, true, "Experiment should now be applicable."); - Assert.equal(experiment.enabled, false, "Experiment should not be enabled."); - - let changes = yield experiment.start(); - Assert.equal(changes, experiment.ADDON_CHANGE_INSTALL, "Add-on was installed."); - addons = yield getExperimentAddons(); - Assert.equal(experiment.enabled, true, "Experiment should now be enabled."); - Assert.equal(addons.length, 1, "1 experiment add-on is installed."); - Assert.equal(addons[0].id, experiment._addonId, "The add-on is the one we expect."); - Assert.equal(addons[0].userDisabled, false, "The add-on is not userDisabled."); - Assert.ok(addons[0].isActive, "The add-on is active."); - - changes = yield experiment.stop(); - Assert.equal(changes, experiment.ADDON_CHANGE_UNINSTALL, "Add-on was uninstalled."); - addons = yield getExperimentAddons(); - Assert.equal(experiment.enabled, false, "Experiment should not be enabled."); - Assert.equal(addons.length, 0, "Experiment should be uninstalled from the Addon Manager."); - - changes = yield experiment.start(); - Assert.equal(changes, experiment.ADDON_CHANGE_INSTALL, "Add-on was installed."); - addons = yield getExperimentAddons(); - Assert.equal(experiment.enabled, true, "Experiment should now be enabled."); - Assert.equal(addons.length, 1, "1 experiment add-on is installed."); - Assert.equal(addons[0].id, experiment._addonId, "The add-on is the one we expect."); - Assert.equal(addons[0].userDisabled, false, "The add-on is not userDisabled."); - Assert.ok(addons[0].isActive, "The add-on is active."); - - result = yield experiment.shouldStop(); - Assert.equal(result.shouldStop, false, "shouldStop should be false."); - Assert.equal(experiment.enabled, true, "Experiment should be enabled."); - addons = yield getExperimentAddons(); - Assert.equal(addons.length, 1, "Experiment still in add-ons manager."); - Assert.ok(addons[0].isActive, "The add-on is still active."); - - defineNow(gPolicy, futureDate(endDate, MS_IN_ONE_DAY)); - result = yield experiment.shouldStop(); - Assert.equal(result.shouldStop, true, "shouldStop should now be true."); - changes = yield experiment.stop(); - Assert.equal(changes, experiment.ADDON_CHANGE_UNINSTALL, "Add-on should be uninstalled."); - Assert.equal(experiment.enabled, false, "Experiment should be disabled."); - addons = yield getExperimentAddons(); - Assert.equal(addons.length, 0, "Experiment add-on is uninstalled."); - - // Ensure hash validation works. - // We set an incorrect hash and expect the install to fail. - experiment._manifestData.xpiHash = "sha1:41014dcc66b4dcedcd973491a1530a32f0517d8a"; - let errored = false; - try { - yield experiment.start(); - } catch (ex) { - errored = true; - } - Assert.ok(experiment._failedStart, "Experiment failed to start."); - Assert.ok(errored, "start() threw an exception."); - - // Make sure "ignore hashes" mode works. - gPolicy.ignoreHashes = true; - changes = yield experiment.start(); - Assert.equal(changes, experiment.ADDON_CHANGE_INSTALL); - yield experiment.stop(); - gPolicy.ignoreHashes = false; -}); diff --git a/browser/experiments/test/xpcshell/test_api.js b/browser/experiments/test/xpcshell/test_api.js deleted file mode 100644 index 9f0112570..000000000 --- a/browser/experiments/test/xpcshell/test_api.js +++ /dev/null @@ -1,1647 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - * http://creativecommons.org/publicdomain/zero/1.0/ */ - -"use strict"; - -Cu.import("resource://testing-common/httpd.js"); -Cu.import("resource://testing-common/AddonManagerTesting.jsm"); - -XPCOMUtils.defineLazyModuleGetter(this, "Experiments", - "resource:///modules/experiments/Experiments.jsm"); - -const MANIFEST_HANDLER = "manifests/handler"; - -const SEC_IN_ONE_DAY = 24 * 60 * 60; -const MS_IN_ONE_DAY = SEC_IN_ONE_DAY * 1000; - -var gHttpServer = null; -var gHttpRoot = null; -var gDataRoot = null; -var gPolicy = null; -var gManifestObject = null; -var gManifestHandlerURI = null; -var gTimerScheduleOffset = -1; - -function uninstallExperimentAddons() { - return Task.spawn(function* () { - let addons = yield getExperimentAddons(); - for (let a of addons) { - yield AddonManagerTesting.uninstallAddonByID(a.id); - } - }); -} - -function testCleanup(experimentsInstance) { - return Task.spawn(function* () { - yield promiseRestartManager(); - yield uninstallExperimentAddons(); - yield removeCacheFile(); - }); -} - -function run_test() { - run_next_test(); -} - -add_task(function* test_setup() { - loadAddonManager(); - - gHttpServer = new HttpServer(); - gHttpServer.start(-1); - let port = gHttpServer.identity.primaryPort; - gHttpRoot = "http://localhost:" + port + "/"; - gDataRoot = gHttpRoot + "data/"; - gManifestHandlerURI = gHttpRoot + MANIFEST_HANDLER; - gHttpServer.registerDirectory("/data/", do_get_cwd()); - gHttpServer.registerPathHandler("/" + MANIFEST_HANDLER, (request, response) => { - response.setStatusLine(null, 200, "OK"); - response.write(JSON.stringify(gManifestObject)); - response.processAsync(); - response.finish(); - }); - do_register_cleanup(() => gHttpServer.stop(() => {})); - - Services.prefs.setBoolPref(PREF_EXPERIMENTS_ENABLED, true); - Services.prefs.setIntPref(PREF_LOGGING_LEVEL, 0); - Services.prefs.setBoolPref(PREF_LOGGING_DUMP, true); - Services.prefs.setCharPref(PREF_MANIFEST_URI, gManifestHandlerURI); - Services.prefs.setIntPref(PREF_FETCHINTERVAL, 0); - - gPolicy = new Experiments.Policy(); - patchPolicy(gPolicy, { - updatechannel: () => "nightly", - oneshotTimer: (callback, timeout, thisObj, name) => gTimerScheduleOffset = timeout, - }); -}); - -add_task(function* test_contract() { - Cc["@mozilla.org/browser/experiments-service;1"].getService(); -}); - -// Test basic starting and stopping of experiments. - -add_task(function* test_getExperiments() { - const OBSERVER_TOPIC = "experiments-changed"; - let observerFireCount = 0; - let expectedObserverFireCount = 0; - let observer = () => ++observerFireCount; - Services.obs.addObserver(observer, OBSERVER_TOPIC, false); - - // Dates the following tests are based on. - - let baseDate = new Date(2014, 5, 1, 12); - let startDate1 = futureDate(baseDate, 50 * MS_IN_ONE_DAY); - let endDate1 = futureDate(baseDate, 100 * MS_IN_ONE_DAY); - let startDate2 = futureDate(baseDate, 150 * MS_IN_ONE_DAY); - let endDate2 = futureDate(baseDate, 200 * MS_IN_ONE_DAY); - - // The manifest data we test with. - - gManifestObject = { - "version": 1, - experiments: [ - { - id: EXPERIMENT2_ID, - xpiURL: gDataRoot + EXPERIMENT2_XPI_NAME, - xpiHash: EXPERIMENT2_XPI_SHA1, - startTime: dateToSeconds(startDate2), - endTime: dateToSeconds(endDate2), - maxActiveSeconds: 10 * SEC_IN_ONE_DAY, - appName: ["XPCShell"], - channel: ["nightly"], - }, - { - id: EXPERIMENT1_ID, - xpiURL: gDataRoot + EXPERIMENT1_XPI_NAME, - xpiHash: EXPERIMENT1_XPI_SHA1, - startTime: dateToSeconds(startDate1), - endTime: dateToSeconds(endDate1), - maxActiveSeconds: 10 * SEC_IN_ONE_DAY, - appName: ["XPCShell"], - channel: ["nightly"], - }, - ], - }; - - // Data to compare the result of Experiments.getExperiments() against. - - let experimentListData = [ - { - id: EXPERIMENT2_ID, - name: "Test experiment 2", - description: "And yet another experiment that experiments experimentally.", - }, - { - id: EXPERIMENT1_ID, - name: EXPERIMENT1_NAME, - description: "Yet another experiment that experiments experimentally.", - }, - ]; - - let experiments = new Experiments.Experiments(gPolicy); - - // Trigger update, clock set to before any activation. - // Use updateManifest() to provide for coverage of that path. - - let now = baseDate; - gTimerScheduleOffset = -1; - defineNow(gPolicy, now); - - yield experiments.updateManifest(); - Assert.equal(observerFireCount, ++expectedObserverFireCount, - "Experiments observer should have been called."); - Assert.equal(experiments.getActiveExperimentID(), null, - "getActiveExperimentID should return null"); - - let list = yield experiments.getExperiments(); - Assert.equal(list.length, 0, "Experiment list should be empty."); - let addons = yield getExperimentAddons(); - Assert.equal(addons.length, 0, "Precondition: No experiment add-ons are installed."); - - try { - yield experiments.getExperimentBranch(); - Assert.ok(false, "getExperimentBranch should fail with no experiment"); - } - catch (e) { - Assert.ok(true, "getExperimentBranch correctly threw"); - } - - // Trigger update, clock set for experiment 1 to start. - - now = futureDate(startDate1, 5 * MS_IN_ONE_DAY); - gTimerScheduleOffset = -1; - defineNow(gPolicy, now); - - yield experiments.updateManifest(); - Assert.equal(observerFireCount, ++expectedObserverFireCount, - "Experiments observer should have been called."); - - Assert.equal(experiments.getActiveExperimentID(), EXPERIMENT1_ID, - "getActiveExperimentID should return the active experiment1"); - - list = yield experiments.getExperiments(); - Assert.equal(list.length, 1, "Experiment list should have 1 entry now."); - addons = yield getExperimentAddons(); - Assert.equal(addons.length, 1, "An experiment add-on was installed."); - - experimentListData[1].active = true; - experimentListData[1].endDate = now.getTime() + 10 * MS_IN_ONE_DAY; - for (let k of Object.keys(experimentListData[1])) { - Assert.equal(experimentListData[1][k], list[0][k], - "Property " + k + " should match reference data."); - } - - let b = yield experiments.getExperimentBranch(); - Assert.strictEqual(b, null, "getExperimentBranch should return null by default"); - - b = yield experiments.getExperimentBranch(EXPERIMENT1_ID); - Assert.strictEqual(b, null, "getExperimentsBranch should return null (with id)"); - - yield experiments.setExperimentBranch(EXPERIMENT1_ID, "foo"); - b = yield experiments.getExperimentBranch(); - Assert.strictEqual(b, "foo", "getExperimentsBranch should return the set value"); - - Assert.equal(observerFireCount, ++expectedObserverFireCount, - "Experiments observer should have been called."); - - Assert.equal(gTimerScheduleOffset, 10 * MS_IN_ONE_DAY, - "Experiment re-evaluation should have been scheduled correctly."); - - // Trigger update, clock set for experiment 1 to stop. - - now = futureDate(endDate1, 1000); - gTimerScheduleOffset = -1; - defineNow(gPolicy, now); - - yield experiments.updateManifest(); - Assert.equal(observerFireCount, ++expectedObserverFireCount, - "Experiments observer should have been called."); - - Assert.equal(experiments.getActiveExperimentID(), null, - "getActiveExperimentID should return null again"); - - list = yield experiments.getExperiments(); - Assert.equal(list.length, 1, "Experiment list should have 1 entry."); - addons = yield getExperimentAddons(); - Assert.equal(addons.length, 0, "The experiment add-on should be uninstalled."); - - experimentListData[1].active = false; - experimentListData[1].endDate = now.getTime(); - for (let k of Object.keys(experimentListData[1])) { - Assert.equal(experimentListData[1][k], list[0][k], - "Property " + k + " should match reference data."); - } - - Assert.equal(gTimerScheduleOffset, startDate2 - now, - "Experiment re-evaluation should have been scheduled correctly."); - - // Trigger update, clock set for experiment 2 to start. - // Use notify() to provide for coverage of that path. - - now = startDate2; - gTimerScheduleOffset = -1; - defineNow(gPolicy, now); - - yield experiments.notify(); - Assert.equal(observerFireCount, ++expectedObserverFireCount, - "Experiments observer should have been called."); - - Assert.equal(experiments.getActiveExperimentID(), EXPERIMENT2_ID, - "getActiveExperimentID should return the active experiment2"); - - list = yield experiments.getExperiments(); - Assert.equal(list.length, 2, "Experiment list should have 2 entries now."); - addons = yield getExperimentAddons(); - Assert.equal(addons.length, 1, "An experiment add-on is installed."); - - experimentListData[0].active = true; - experimentListData[0].endDate = now.getTime() + 10 * MS_IN_ONE_DAY; - for (let i=0; i<experimentListData.length; ++i) { - let entry = experimentListData[i]; - for (let k of Object.keys(entry)) { - Assert.equal(entry[k], list[i][k], - "Entry " + i + " - Property '" + k + "' should match reference data."); - } - } - - Assert.equal(gTimerScheduleOffset, 10 * MS_IN_ONE_DAY, - "Experiment re-evaluation should have been scheduled correctly."); - - // Trigger update, clock set for experiment 2 to stop. - - now = futureDate(startDate2, 10 * MS_IN_ONE_DAY + 1000); - gTimerScheduleOffset = -1; - defineNow(gPolicy, now); - yield experiments.notify(); - Assert.equal(observerFireCount, ++expectedObserverFireCount, - "Experiments observer should have been called."); - - Assert.equal(experiments.getActiveExperimentID(), null, - "getActiveExperimentID should return null again2"); - - list = yield experiments.getExperiments(); - Assert.equal(list.length, 2, "Experiment list should have 2 entries now."); - addons = yield getExperimentAddons(); - Assert.equal(addons.length, 0, "No experiments add-ons are installed."); - - experimentListData[0].active = false; - experimentListData[0].endDate = now.getTime(); - for (let i=0; i<experimentListData.length; ++i) { - let entry = experimentListData[i]; - for (let k of Object.keys(entry)) { - Assert.equal(entry[k], list[i][k], - "Entry " + i + " - Property '" + k + "' should match reference data."); - } - } - - // Cleanup. - - Services.obs.removeObserver(observer, OBSERVER_TOPIC); - yield testCleanup(experiments); -}); - -add_task(function* test_getActiveExperimentID() { - // Check that getActiveExperimentID returns the correct result even - // after .uninit() - - // Dates the following tests are based on. - - let baseDate = new Date(2014, 5, 1, 12); - let startDate1 = futureDate(baseDate, 50 * MS_IN_ONE_DAY); - let endDate1 = futureDate(baseDate, 100 * MS_IN_ONE_DAY); - - gManifestObject = { - "version": 1, - experiments: [ - { - id: EXPERIMENT1_ID, - xpiURL: gDataRoot + EXPERIMENT1_XPI_NAME, - xpiHash: EXPERIMENT1_XPI_SHA1, - startTime: dateToSeconds(startDate1), - endTime: dateToSeconds(endDate1), - maxActiveSeconds: 10 * SEC_IN_ONE_DAY, - appName: ["XPCShell"], - channel: ["nightly"], - }, - ], - }; - - let now = futureDate(startDate1, 5 * MS_IN_ONE_DAY); - gTimerScheduleOffset = -1; - defineNow(gPolicy, now); - - let experiments = new Experiments.Experiments(gPolicy); - yield experiments.updateManifest(); - - Assert.equal(experiments.getActiveExperimentID(), EXPERIMENT1_ID, - "getActiveExperimentID should return the active experiment1"); - - yield promiseRestartManager(); - Assert.equal(experiments.getActiveExperimentID(), EXPERIMENT1_ID, - "getActiveExperimentID should return the active experiment1 after uninit()"); - - yield testCleanup(experiments); -}); - -// Test that we handle the experiments addon already being -// installed properly. -// We should just pave over them. - -add_task(function* test_addonAlreadyInstalled() { - const OBSERVER_TOPIC = "experiments-changed"; - let observerFireCount = 0; - let expectedObserverFireCount = 0; - let observer = () => ++observerFireCount; - Services.obs.addObserver(observer, OBSERVER_TOPIC, false); - - // Dates the following tests are based on. - - let baseDate = new Date(2014, 5, 1, 12); - let startDate = futureDate(baseDate, 100 * MS_IN_ONE_DAY); - let endDate = futureDate(baseDate, 10000 * MS_IN_ONE_DAY); - - // The manifest data we test with. - - gManifestObject = { - "version": 1, - experiments: [ - { - id: EXPERIMENT1_ID, - xpiURL: gDataRoot + EXPERIMENT1_XPI_NAME, - xpiHash: EXPERIMENT1_XPI_SHA1, - startTime: dateToSeconds(startDate), - endTime: dateToSeconds(endDate), - maxActiveSeconds: 10 * SEC_IN_ONE_DAY, - appName: ["XPCShell"], - channel: ["nightly"], - }, - ], - }; - - let experiments = new Experiments.Experiments(gPolicy); - - // Trigger update, clock set to before any activation. - - let now = baseDate; - defineNow(gPolicy, now); - yield experiments.updateManifest(); - Assert.equal(observerFireCount, ++expectedObserverFireCount, - "Experiments observer should have been called."); - let list = yield experiments.getExperiments(); - Assert.equal(list.length, 0, "Experiment list should be empty."); - - // Trigger update, clock set for the experiment to start. - - now = futureDate(startDate, 10 * MS_IN_ONE_DAY); - defineNow(gPolicy, now); - yield experiments.updateManifest(); - Assert.equal(observerFireCount, ++expectedObserverFireCount, - "Experiments observer should have been called."); - - list = yield experiments.getExperiments(); - list = yield experiments.getExperiments(); - Assert.equal(list.length, 1, "Experiment list should have 1 entry now."); - Assert.equal(list[0].id, EXPERIMENT1_ID, "Experiment 1 should be the sole entry."); - Assert.equal(list[0].active, true, "Experiment 1 should be active."); - - let addons = yield getExperimentAddons(); - Assert.equal(addons.length, 1, "1 add-on is installed."); - - // Install conflicting addon. - - yield AddonManagerTesting.installXPIFromURL(gDataRoot + EXPERIMENT1_XPI_NAME, EXPERIMENT1_XPI_SHA1); - addons = yield getExperimentAddons(); - Assert.equal(addons.length, 1, "1 add-on is installed."); - list = yield experiments.getExperiments(); - Assert.equal(list.length, 1, "Experiment list should still have 1 entry."); - Assert.equal(list[0].id, EXPERIMENT1_ID, "Experiment 1 should be the sole entry."); - Assert.equal(list[0].active, true, "Experiment 1 should be active."); - - // Cleanup. - - Services.obs.removeObserver(observer, OBSERVER_TOPIC); - yield testCleanup(experiments); -}); - -add_task(function* test_lastActiveToday() { - let experiments = new Experiments.Experiments(gPolicy); - - replaceExperiments(experiments, FAKE_EXPERIMENTS_1); - - let e = yield experiments.getExperiments(); - Assert.equal(e.length, 1, "Monkeypatch successful."); - Assert.equal(e[0].id, "id1", "ID looks sane"); - Assert.ok(e[0].active, "Experiment is active."); - - let lastActive = yield experiments.lastActiveToday(); - Assert.equal(e[0], lastActive, "Last active object is expected."); - - replaceExperiments(experiments, FAKE_EXPERIMENTS_2); - e = yield experiments.getExperiments(); - Assert.equal(e.length, 2, "Monkeypatch successful."); - - defineNow(gPolicy, e[0].endDate); - - lastActive = yield experiments.lastActiveToday(); - Assert.ok(lastActive, "Have a last active experiment"); - Assert.equal(lastActive, e[0], "Last active object is expected."); - - yield testCleanup(experiments); -}); - -// Test explicitly disabling experiments. - -add_task(function* test_disableExperiment() { - // Dates this test is based on. - - let startDate = new Date(2004, 10, 9, 12); - let endDate = futureDate(startDate, 100 * MS_IN_ONE_DAY); - - // The manifest data we test with. - - gManifestObject = { - "version": 1, - experiments: [ - { - id: EXPERIMENT1_ID, - xpiURL: gDataRoot + EXPERIMENT1_XPI_NAME, - xpiHash: EXPERIMENT1_XPI_SHA1, - startTime: dateToSeconds(startDate), - endTime: dateToSeconds(endDate), - maxActiveSeconds: 10 * SEC_IN_ONE_DAY, - appName: ["XPCShell"], - channel: ["nightly"], - }, - ], - }; - - // Data to compare the result of Experiments.getExperiments() against. - - let experimentInfo = { - id: EXPERIMENT1_ID, - name: EXPERIMENT1_NAME, - description: "Yet another experiment that experiments experimentally.", - }; - - let experiments = new Experiments.Experiments(gPolicy); - - // Trigger update, clock set for the experiment to start. - - let now = futureDate(startDate, 5 * MS_IN_ONE_DAY); - defineNow(gPolicy, now); - yield experiments.updateManifest(); - - let list = yield experiments.getExperiments(); - Assert.equal(list.length, 1, "Experiment list should have 1 entry now."); - - experimentInfo.active = true; - experimentInfo.endDate = now.getTime() + 10 * MS_IN_ONE_DAY; - for (let k of Object.keys(experimentInfo)) { - Assert.equal(experimentInfo[k], list[0][k], - "Property " + k + " should match reference data."); - } - - // Test disabling the experiment. - - now = futureDate(now, 1 * MS_IN_ONE_DAY); - defineNow(gPolicy, now); - yield experiments.disableExperiment("foo"); - - list = yield experiments.getExperiments(); - Assert.equal(list.length, 1, "Experiment list should have 1 entry."); - - experimentInfo.active = false; - experimentInfo.endDate = now.getTime(); - for (let k of Object.keys(experimentInfo)) { - Assert.equal(experimentInfo[k], list[0][k], - "Property " + k + " should match reference data."); - } - - // Test that updating the list doesn't re-enable it. - - now = futureDate(now, 1 * MS_IN_ONE_DAY); - defineNow(gPolicy, now); - yield experiments.updateManifest(); - - list = yield experiments.getExperiments(); - Assert.equal(list.length, 1, "Experiment list should have 1 entry."); - - for (let k of Object.keys(experimentInfo)) { - Assert.equal(experimentInfo[k], list[0][k], - "Property " + k + " should match reference data."); - } - - yield testCleanup(experiments); -}); - -add_task(function* test_disableExperimentsFeature() { - // Dates this test is based on. - - let startDate = new Date(2004, 10, 9, 12); - let endDate = futureDate(startDate, 100 * MS_IN_ONE_DAY); - - // The manifest data we test with. - - gManifestObject = { - "version": 1, - experiments: [ - { - id: EXPERIMENT1_ID, - xpiURL: gDataRoot + EXPERIMENT1_XPI_NAME, - xpiHash: EXPERIMENT1_XPI_SHA1, - startTime: dateToSeconds(startDate), - endTime: dateToSeconds(endDate), - maxActiveSeconds: 10 * SEC_IN_ONE_DAY, - appName: ["XPCShell"], - channel: ["nightly"], - }, - ], - }; - - // Data to compare the result of Experiments.getExperiments() against. - - let experimentInfo = { - id: EXPERIMENT1_ID, - name: EXPERIMENT1_NAME, - description: "Yet another experiment that experiments experimentally.", - }; - - let experiments = new Experiments.Experiments(gPolicy); - Assert.equal(experiments.enabled, true, "Experiments feature should be enabled."); - - // Trigger update, clock set for the experiment to start. - - let now = futureDate(startDate, 5 * MS_IN_ONE_DAY); - defineNow(gPolicy, now); - yield experiments.updateManifest(); - - let list = yield experiments.getExperiments(); - Assert.equal(list.length, 1, "Experiment list should have 1 entry now."); - - experimentInfo.active = true; - experimentInfo.endDate = now.getTime() + 10 * MS_IN_ONE_DAY; - for (let k of Object.keys(experimentInfo)) { - Assert.equal(experimentInfo[k], list[0][k], - "Property " + k + " should match reference data."); - } - - // Test disabling experiments. - - experiments._toggleExperimentsEnabled(false); - yield experiments.notify(); - Assert.equal(experiments.enabled, false, "Experiments feature should be disabled now."); - - list = yield experiments.getExperiments(); - Assert.equal(list.length, 1, "Experiment list should have 1 entry."); - - experimentInfo.active = false; - experimentInfo.endDate = now.getTime(); - for (let k of Object.keys(experimentInfo)) { - Assert.equal(experimentInfo[k], list[0][k], - "Property " + k + " should match reference data."); - } - - // Test that updating the list doesn't re-enable it. - - now = futureDate(now, 1 * MS_IN_ONE_DAY); - defineNow(gPolicy, now); - try { - yield experiments.updateManifest(); - } catch (e) { - // Exception expected, the feature is disabled. - } - - list = yield experiments.getExperiments(); - Assert.equal(list.length, 1, "Experiment list should have 1 entry."); - - for (let k of Object.keys(experimentInfo)) { - Assert.equal(experimentInfo[k], list[0][k], - "Property " + k + " should match reference data."); - } - - yield testCleanup(experiments); -}); - -// Test that after a failed experiment install: -// * the next applicable experiment gets installed -// * changing the experiments data later triggers re-evaluation - -add_task(function* test_installFailure() { - const OBSERVER_TOPIC = "experiments-changed"; - let observerFireCount = 0; - let expectedObserverFireCount = 0; - let observer = () => ++observerFireCount; - Services.obs.addObserver(observer, OBSERVER_TOPIC, false); - - // Dates the following tests are based on. - - let baseDate = new Date(2014, 5, 1, 12); - let startDate = futureDate(baseDate, 100 * MS_IN_ONE_DAY); - let endDate = futureDate(baseDate, 10000 * MS_IN_ONE_DAY); - - // The manifest data we test with. - - gManifestObject = { - "version": 1, - experiments: [ - { - id: EXPERIMENT1_ID, - xpiURL: gDataRoot + EXPERIMENT1_XPI_NAME, - xpiHash: EXPERIMENT1_XPI_SHA1, - startTime: dateToSeconds(startDate), - endTime: dateToSeconds(endDate), - maxActiveSeconds: 10 * SEC_IN_ONE_DAY, - appName: ["XPCShell"], - channel: ["nightly"], - }, - { - id: EXPERIMENT2_ID, - xpiURL: gDataRoot + EXPERIMENT2_XPI_NAME, - xpiHash: EXPERIMENT2_XPI_SHA1, - startTime: dateToSeconds(startDate), - endTime: dateToSeconds(endDate), - maxActiveSeconds: 10 * SEC_IN_ONE_DAY, - appName: ["XPCShell"], - channel: ["nightly"], - }, - ], - }; - - // Data to compare the result of Experiments.getExperiments() against. - - let experimentListData = [ - { - id: EXPERIMENT1_ID, - name: EXPERIMENT1_NAME, - description: "Yet another experiment that experiments experimentally.", - }, - { - id: EXPERIMENT2_ID, - name: "Test experiment 2", - description: "And yet another experiment that experiments experimentally.", - }, - ]; - - let experiments = new Experiments.Experiments(gPolicy); - - // Trigger update, clock set to before any activation. - - let now = baseDate; - defineNow(gPolicy, now); - yield experiments.updateManifest(); - Assert.equal(observerFireCount, ++expectedObserverFireCount, - "Experiments observer should have been called."); - let list = yield experiments.getExperiments(); - Assert.equal(list.length, 0, "Experiment list should be empty."); - - // Trigger update, clock set for experiment 1 & 2 to start, - // invalid hash for experiment 1. - // Order in the manifest matters, so we should start experiment 1, - // fail to install it & start experiment 2 instead. - - now = futureDate(startDate, 10 * MS_IN_ONE_DAY); - defineNow(gPolicy, now); - gManifestObject.experiments[0].xpiHash = "sha1:0000000000000000000000000000000000000000"; - yield experiments.updateManifest(); - Assert.equal(observerFireCount, ++expectedObserverFireCount, - "Experiments observer should have been called."); - - list = yield experiments.getExperiments(); - Assert.equal(list.length, 1, "Experiment list should have 1 entry now."); - Assert.equal(list[0].id, EXPERIMENT2_ID, "Experiment 2 should be the sole entry."); - Assert.equal(list[0].active, true, "Experiment 2 should be active."); - - // Trigger update, clock set for experiment 2 to stop. - - now = futureDate(now, 20 * MS_IN_ONE_DAY); - defineNow(gPolicy, now); - yield experiments.updateManifest(); - Assert.equal(observerFireCount, ++expectedObserverFireCount, - "Experiments observer should have been called."); - - experimentListData[0].active = false; - experimentListData[0].endDate = now; - - list = yield experiments.getExperiments(); - Assert.equal(list.length, 1, "Experiment list should have 1 entry now."); - Assert.equal(list[0].id, EXPERIMENT2_ID, "Experiment 2 should be the sole entry."); - Assert.equal(list[0].active, false, "Experiment should not be active."); - - // Trigger update with a fixed entry for experiment 1, - // which should get re-evaluated & started now. - - now = futureDate(now, 20 * MS_IN_ONE_DAY); - defineNow(gPolicy, now); - gManifestObject.experiments[0].xpiHash = EXPERIMENT1_XPI_SHA1; - yield experiments.updateManifest(); - Assert.equal(observerFireCount, ++expectedObserverFireCount, - "Experiments observer should have been called."); - - experimentListData[0].active = true; - experimentListData[0].endDate = now.getTime() + 10 * MS_IN_ONE_DAY; - - list = yield experiments.getExperiments(); - Assert.equal(list.length, 2, "Experiment list should have 2 entries now."); - - for (let i=0; i<experimentListData.length; ++i) { - let entry = experimentListData[i]; - for (let k of Object.keys(entry)) { - Assert.equal(entry[k], list[i][k], - "Entry " + i + " - Property '" + k + "' should match reference data."); - } - } - - yield testCleanup(experiments); -}); - -// Test that after an experiment was disabled by user action, -// the experiment is not activated again if manifest data changes. - -add_task(function* test_userDisabledAndUpdated() { - const OBSERVER_TOPIC = "experiments-changed"; - let observerFireCount = 0; - let expectedObserverFireCount = 0; - let observer = () => ++observerFireCount; - Services.obs.addObserver(observer, OBSERVER_TOPIC, false); - - // Dates the following tests are based on. - - let baseDate = new Date(2014, 5, 1, 12); - let startDate = futureDate(baseDate, 100 * MS_IN_ONE_DAY); - let endDate = futureDate(baseDate, 10000 * MS_IN_ONE_DAY); - - // The manifest data we test with. - - gManifestObject = { - "version": 1, - experiments: [ - { - id: EXPERIMENT1_ID, - xpiURL: gDataRoot + EXPERIMENT1_XPI_NAME, - xpiHash: EXPERIMENT1_XPI_SHA1, - startTime: dateToSeconds(startDate), - endTime: dateToSeconds(endDate), - maxActiveSeconds: 10 * SEC_IN_ONE_DAY, - appName: ["XPCShell"], - channel: ["nightly"], - }, - ], - }; - - let experiments = new Experiments.Experiments(gPolicy); - - // Trigger update, clock set to before any activation. - - let now = baseDate; - defineNow(gPolicy, now); - yield experiments.updateManifest(); - Assert.equal(observerFireCount, ++expectedObserverFireCount, - "Experiments observer should have been called."); - let list = yield experiments.getExperiments(); - Assert.equal(list.length, 0, "Experiment list should be empty."); - - // Trigger update, clock set for experiment 1 to start. - - now = futureDate(startDate, 10 * MS_IN_ONE_DAY); - defineNow(gPolicy, now); - yield experiments.updateManifest(); - Assert.equal(observerFireCount, ++expectedObserverFireCount, - "Experiments observer should have been called."); - - list = yield experiments.getExperiments(); - Assert.equal(list.length, 1, "Experiment list should have 1 entry now."); - Assert.equal(list[0].id, EXPERIMENT1_ID, "Experiment 1 should be the sole entry."); - Assert.equal(list[0].active, true, "Experiment 1 should be active."); - let todayActive = yield experiments.lastActiveToday(); - Assert.ok(todayActive, "Last active for today reports a value."); - Assert.equal(todayActive.id, list[0].id, "The entry is what we expect."); - - // Explicitly disable an experiment. - - now = futureDate(now, 20 * MS_IN_ONE_DAY); - defineNow(gPolicy, now); - yield experiments.disableExperiment("foo"); - Assert.equal(observerFireCount, ++expectedObserverFireCount, - "Experiments observer should have been called."); - - list = yield experiments.getExperiments(); - Assert.equal(list.length, 1, "Experiment list should have 1 entry now."); - Assert.equal(list[0].id, EXPERIMENT1_ID, "Experiment 1 should be the sole entry."); - Assert.equal(list[0].active, false, "Experiment should not be active anymore."); - todayActive = yield experiments.lastActiveToday(); - Assert.ok(todayActive, "Last active for today still returns a value."); - Assert.equal(todayActive.id, list[0].id, "The ID is still the same."); - - // Trigger an update with a faked change for experiment 1. - - now = futureDate(now, 20 * MS_IN_ONE_DAY); - defineNow(gPolicy, now); - experiments._experiments.get(EXPERIMENT1_ID)._manifestData.xpiHash = - "sha1:0000000000000000000000000000000000000000"; - yield experiments.updateManifest(); - Assert.equal(observerFireCount, expectedObserverFireCount, - "Experiments observer should not have been called."); - - list = yield experiments.getExperiments(); - Assert.equal(list.length, 1, "Experiment list should have 1 entry now."); - Assert.equal(list[0].id, EXPERIMENT1_ID, "Experiment 1 should be the sole entry."); - Assert.equal(list[0].active, false, "Experiment should still be inactive."); - - // Cleanup. - - Services.obs.removeObserver(observer, OBSERVER_TOPIC); - yield testCleanup(experiments); -}); - -// Test that changing the hash for an active experiments triggers an -// update for it. - -add_task(function* test_updateActiveExperiment() { - const OBSERVER_TOPIC = "experiments-changed"; - let observerFireCount = 0; - let expectedObserverFireCount = 0; - let observer = () => ++observerFireCount; - Services.obs.addObserver(observer, OBSERVER_TOPIC, false); - - // Dates the following tests are based on. - - let baseDate = new Date(2014, 5, 1, 12); - let startDate = futureDate(baseDate, 100 * MS_IN_ONE_DAY); - let endDate = futureDate(baseDate, 10000 * MS_IN_ONE_DAY); - - // The manifest data we test with. - - gManifestObject = { - "version": 1, - experiments: [ - { - id: EXPERIMENT1_ID, - xpiURL: gDataRoot + EXPERIMENT1_XPI_NAME, - xpiHash: EXPERIMENT1_XPI_SHA1, - startTime: dateToSeconds(startDate), - endTime: dateToSeconds(endDate), - maxActiveSeconds: 10 * SEC_IN_ONE_DAY, - appName: ["XPCShell"], - channel: ["nightly"], - }, - ], - }; - - let experiments = new Experiments.Experiments(gPolicy); - - // Trigger update, clock set to before any activation. - - let now = baseDate; - defineNow(gPolicy, now); - yield experiments.updateManifest(); - Assert.equal(observerFireCount, ++expectedObserverFireCount, - "Experiments observer should have been called."); - let list = yield experiments.getExperiments(); - Assert.equal(list.length, 0, "Experiment list should be empty."); - - let todayActive = yield experiments.lastActiveToday(); - Assert.equal(todayActive, null, "No experiment active today."); - - // Trigger update, clock set for the experiment to start. - - now = futureDate(startDate, 10 * MS_IN_ONE_DAY); - defineNow(gPolicy, now); - yield experiments.updateManifest(); - Assert.equal(observerFireCount, ++expectedObserverFireCount, - "Experiments observer should have been called."); - - list = yield experiments.getExperiments(); - Assert.equal(list.length, 1, "Experiment list should have 1 entry now."); - Assert.equal(list[0].id, EXPERIMENT1_ID, "Experiment 1 should be the sole entry."); - Assert.equal(list[0].active, true, "Experiment 1 should be active."); - Assert.equal(list[0].name, EXPERIMENT1_NAME, "Experiments name should match."); - todayActive = yield experiments.lastActiveToday(); - Assert.ok(todayActive, "todayActive() returns a value."); - Assert.equal(todayActive.id, list[0].id, "It returns the active experiment."); - - // Trigger an update for the active experiment by changing it's hash (and xpi) - // in the manifest. - - now = futureDate(now, 1 * MS_IN_ONE_DAY); - defineNow(gPolicy, now); - gManifestObject.experiments[0].xpiHash = EXPERIMENT1A_XPI_SHA1; - gManifestObject.experiments[0].xpiURL = gDataRoot + EXPERIMENT1A_XPI_NAME; - yield experiments.updateManifest(); - Assert.equal(observerFireCount, ++expectedObserverFireCount, - "Experiments observer should have been called."); - - list = yield experiments.getExperiments(); - Assert.equal(list.length, 1, "Experiment list should have 1 entry now."); - Assert.equal(list[0].id, EXPERIMENT1_ID, "Experiment 1 should be the sole entry."); - Assert.equal(list[0].active, true, "Experiment 1 should still be active."); - Assert.equal(list[0].name, EXPERIMENT1A_NAME, "Experiments name should have been updated."); - todayActive = yield experiments.lastActiveToday(); - Assert.equal(todayActive.id, list[0].id, "last active today is still sane."); - - // Cleanup. - - Services.obs.removeObserver(observer, OBSERVER_TOPIC); - yield testCleanup(experiments); -}); - -// Tests that setting the disable flag for an active experiment -// stops it. - -add_task(function* test_disableActiveExperiment() { - const OBSERVER_TOPIC = "experiments-changed"; - let observerFireCount = 0; - let expectedObserverFireCount = 0; - let observer = () => ++observerFireCount; - Services.obs.addObserver(observer, OBSERVER_TOPIC, false); - - // Dates the following tests are based on. - - let baseDate = new Date(2014, 5, 1, 12); - let startDate = futureDate(baseDate, 100 * MS_IN_ONE_DAY); - let endDate = futureDate(baseDate, 10000 * MS_IN_ONE_DAY); - - // The manifest data we test with. - - gManifestObject = { - "version": 1, - experiments: [ - { - id: EXPERIMENT1_ID, - xpiURL: gDataRoot + EXPERIMENT1_XPI_NAME, - xpiHash: EXPERIMENT1_XPI_SHA1, - startTime: dateToSeconds(startDate), - endTime: dateToSeconds(endDate), - maxActiveSeconds: 10 * SEC_IN_ONE_DAY, - appName: ["XPCShell"], - channel: ["nightly"], - }, - ], - }; - - let experiments = new Experiments.Experiments(gPolicy); - - // Trigger update, clock set to before any activation. - - let now = baseDate; - defineNow(gPolicy, now); - yield experiments.updateManifest(); - Assert.equal(observerFireCount, ++expectedObserverFireCount, - "Experiments observer should have been called."); - let list = yield experiments.getExperiments(); - Assert.equal(list.length, 0, "Experiment list should be empty."); - - // Trigger update, clock set for the experiment to start. - - now = futureDate(startDate, 10 * MS_IN_ONE_DAY); - defineNow(gPolicy, now); - yield experiments.updateManifest(); - Assert.equal(observerFireCount, ++expectedObserverFireCount, - "Experiments observer should have been called."); - - list = yield experiments.getExperiments(); - Assert.equal(list.length, 1, "Experiment list should have 1 entry now."); - Assert.equal(list[0].id, EXPERIMENT1_ID, "Experiment 1 should be the sole entry."); - Assert.equal(list[0].active, true, "Experiment 1 should be active."); - - // Trigger an update with the experiment being disabled. - - now = futureDate(now, 1 * MS_IN_ONE_DAY); - defineNow(gPolicy, now); - gManifestObject.experiments[0].disabled = true; - yield experiments.updateManifest(); - Assert.equal(observerFireCount, ++expectedObserverFireCount, - "Experiments observer should have been called."); - - list = yield experiments.getExperiments(); - Assert.equal(list.length, 1, "Experiment list should have 1 entry now."); - Assert.equal(list[0].id, EXPERIMENT1_ID, "Experiment 1 should be the sole entry."); - Assert.equal(list[0].active, false, "Experiment 1 should be disabled."); - - // Check that the experiment stays disabled. - - now = futureDate(now, 1 * MS_IN_ONE_DAY); - defineNow(gPolicy, now); - delete gManifestObject.experiments[0].disabled; - yield experiments.updateManifest(); - - list = yield experiments.getExperiments(); - Assert.equal(list.length, 1, "Experiment list should have 1 entry now."); - Assert.equal(list[0].id, EXPERIMENT1_ID, "Experiment 1 should be the sole entry."); - Assert.equal(list[0].active, false, "Experiment 1 should still be disabled."); - - // Cleanup. - - Services.obs.removeObserver(observer, OBSERVER_TOPIC); - yield testCleanup(experiments); -}); - -// Test that: -// * setting the frozen flag for a not-yet-started experiment keeps -// it from starting -// * after a removing the frozen flag, the experiment can still start - -add_task(function* test_freezePendingExperiment() { - const OBSERVER_TOPIC = "experiments-changed"; - let observerFireCount = 0; - let expectedObserverFireCount = 0; - let observer = () => ++observerFireCount; - Services.obs.addObserver(observer, OBSERVER_TOPIC, false); - - // Dates the following tests are based on. - - let baseDate = new Date(2014, 5, 1, 12); - let startDate = futureDate(baseDate, 100 * MS_IN_ONE_DAY); - let endDate = futureDate(baseDate, 10000 * MS_IN_ONE_DAY); - - // The manifest data we test with. - - gManifestObject = { - "version": 1, - experiments: [ - { - id: EXPERIMENT1_ID, - xpiURL: gDataRoot + EXPERIMENT1_XPI_NAME, - xpiHash: EXPERIMENT1_XPI_SHA1, - startTime: dateToSeconds(startDate), - endTime: dateToSeconds(endDate), - maxActiveSeconds: 10 * SEC_IN_ONE_DAY, - appName: ["XPCShell"], - channel: ["nightly"], - }, - ], - }; - - let experiments = new Experiments.Experiments(gPolicy); - - // Trigger update, clock set to before any activation. - - let now = baseDate; - defineNow(gPolicy, now); - yield experiments.updateManifest(); - Assert.equal(observerFireCount, ++expectedObserverFireCount, - "Experiments observer should have been called."); - let list = yield experiments.getExperiments(); - Assert.equal(list.length, 0, "Experiment list should be empty."); - - // Trigger update, clock set for the experiment to start but frozen. - - now = futureDate(startDate, 10 * MS_IN_ONE_DAY); - defineNow(gPolicy, now); - gManifestObject.experiments[0].frozen = true; - yield experiments.updateManifest(); - Assert.equal(observerFireCount, expectedObserverFireCount, - "Experiments observer should have not been called."); - - list = yield experiments.getExperiments(); - Assert.equal(list.length, 0, "Experiment list should have no entries yet."); - - // Trigger an update with the experiment not being frozen anymore. - - now = futureDate(now, 1 * MS_IN_ONE_DAY); - defineNow(gPolicy, now); - delete gManifestObject.experiments[0].frozen; - yield experiments.updateManifest(); - Assert.equal(observerFireCount, ++expectedObserverFireCount, - "Experiments observer should have been called."); - - list = yield experiments.getExperiments(); - Assert.equal(list.length, 1, "Experiment list should have 1 entry now."); - Assert.equal(list[0].id, EXPERIMENT1_ID, "Experiment 1 should be the sole entry."); - Assert.equal(list[0].active, true, "Experiment 1 should be active now."); - - // Cleanup. - - Services.obs.removeObserver(observer, OBSERVER_TOPIC); - yield testCleanup(experiments); -}); - -// Test that setting the frozen flag for an active experiment doesn't -// stop it. - -add_task(function* test_freezeActiveExperiment() { - const OBSERVER_TOPIC = "experiments-changed"; - let observerFireCount = 0; - let expectedObserverFireCount = 0; - let observer = () => ++observerFireCount; - Services.obs.addObserver(observer, OBSERVER_TOPIC, false); - - // Dates the following tests are based on. - - let baseDate = new Date(2014, 5, 1, 12); - let startDate = futureDate(baseDate, 100 * MS_IN_ONE_DAY); - let endDate = futureDate(baseDate, 10000 * MS_IN_ONE_DAY); - - // The manifest data we test with. - - gManifestObject = { - "version": 1, - experiments: [ - { - id: EXPERIMENT1_ID, - xpiURL: gDataRoot + EXPERIMENT1_XPI_NAME, - xpiHash: EXPERIMENT1_XPI_SHA1, - startTime: dateToSeconds(startDate), - endTime: dateToSeconds(endDate), - maxActiveSeconds: 10 * SEC_IN_ONE_DAY, - appName: ["XPCShell"], - channel: ["nightly"], - }, - ], - }; - - let experiments = new Experiments.Experiments(gPolicy); - - // Trigger update, clock set to before any activation. - - let now = baseDate; - defineNow(gPolicy, now); - yield experiments.updateManifest(); - Assert.equal(observerFireCount, ++expectedObserverFireCount, - "Experiments observer should have been called."); - let list = yield experiments.getExperiments(); - Assert.equal(list.length, 0, "Experiment list should be empty."); - - // Trigger update, clock set for the experiment to start. - - now = futureDate(startDate, 10 * MS_IN_ONE_DAY); - defineNow(gPolicy, now); - yield experiments.updateManifest(); - Assert.equal(observerFireCount, ++expectedObserverFireCount, - "Experiments observer should have been called."); - - list = yield experiments.getExperiments(); - Assert.equal(list.length, 1, "Experiment list should have 1 entry now."); - Assert.equal(list[0].id, EXPERIMENT1_ID, "Experiment 1 should be the sole entry."); - Assert.equal(list[0].active, true, "Experiment 1 should be active."); - Assert.equal(list[0].name, EXPERIMENT1_NAME, "Experiments name should match."); - - // Trigger an update with the experiment being disabled. - - now = futureDate(now, 1 * MS_IN_ONE_DAY); - defineNow(gPolicy, now); - gManifestObject.experiments[0].frozen = true; - yield experiments.updateManifest(); - Assert.equal(observerFireCount, expectedObserverFireCount, - "Experiments observer should have been called."); - - list = yield experiments.getExperiments(); - Assert.equal(list.length, 1, "Experiment list should have 1 entry now."); - Assert.equal(list[0].id, EXPERIMENT1_ID, "Experiment 1 should be the sole entry."); - Assert.equal(list[0].active, true, "Experiment 1 should still be active."); - - // Cleanup. - - Services.obs.removeObserver(observer, OBSERVER_TOPIC); - yield testCleanup(experiments); -}); - -// Test that removing an active experiment from the manifest doesn't -// stop it. - -add_task(function* test_removeActiveExperiment() { - const OBSERVER_TOPIC = "experiments-changed"; - let observerFireCount = 0; - let expectedObserverFireCount = 0; - let observer = () => ++observerFireCount; - Services.obs.addObserver(observer, OBSERVER_TOPIC, false); - - // Dates the following tests are based on. - - let baseDate = new Date(2014, 5, 1, 12); - let startDate = futureDate(baseDate, 100 * MS_IN_ONE_DAY); - let endDate = futureDate(baseDate, 10000 * MS_IN_ONE_DAY); - let startDate2 = futureDate(baseDate, 20000 * MS_IN_ONE_DAY); - let endDate2 = futureDate(baseDate, 30000 * MS_IN_ONE_DAY); - - // The manifest data we test with. - - gManifestObject = { - "version": 1, - experiments: [ - { - id: EXPERIMENT1_ID, - xpiURL: gDataRoot + EXPERIMENT1_XPI_NAME, - xpiHash: EXPERIMENT1_XPI_SHA1, - startTime: dateToSeconds(startDate), - endTime: dateToSeconds(endDate), - maxActiveSeconds: 10 * SEC_IN_ONE_DAY, - appName: ["XPCShell"], - channel: ["nightly"], - }, - { - id: EXPERIMENT2_ID, - xpiURL: gDataRoot + EXPERIMENT1_XPI_NAME, - xpiHash: EXPERIMENT2_XPI_SHA1, - startTime: dateToSeconds(startDate2), - endTime: dateToSeconds(endDate2), - maxActiveSeconds: 10 * SEC_IN_ONE_DAY, - appName: ["XPCShell"], - channel: ["nightly"], - }, - ], - }; - - let experiments = new Experiments.Experiments(gPolicy); - - // Trigger update, clock set to before any activation. - - let now = baseDate; - defineNow(gPolicy, now); - yield experiments.updateManifest(); - Assert.equal(observerFireCount, ++expectedObserverFireCount, - "Experiments observer should have been called."); - let list = yield experiments.getExperiments(); - Assert.equal(list.length, 0, "Experiment list should be empty."); - - // Trigger update, clock set for the experiment to start. - - now = futureDate(startDate, 10 * MS_IN_ONE_DAY); - defineNow(gPolicy, now); - yield experiments.updateManifest(); - Assert.equal(observerFireCount, ++expectedObserverFireCount, - "Experiments observer should have been called."); - - list = yield experiments.getExperiments(); - Assert.equal(list.length, 1, "Experiment list should have 1 entry now."); - Assert.equal(list[0].id, EXPERIMENT1_ID, "Experiment 1 should be the sole entry."); - Assert.equal(list[0].active, true, "Experiment 1 should be active."); - Assert.equal(list[0].name, EXPERIMENT1_NAME, "Experiments name should match."); - - // Trigger an update with experiment 1 missing from the manifest - - now = futureDate(now, 1 * MS_IN_ONE_DAY); - defineNow(gPolicy, now); - gManifestObject.experiments[0].frozen = true; - yield experiments.updateManifest(); - Assert.equal(observerFireCount, expectedObserverFireCount, - "Experiments observer should have been called."); - - list = yield experiments.getExperiments(); - Assert.equal(list.length, 1, "Experiment list should have 1 entry now."); - Assert.equal(list[0].id, EXPERIMENT1_ID, "Experiment 1 should be the sole entry."); - Assert.equal(list[0].active, true, "Experiment 1 should still be active."); - - // Cleanup. - - Services.obs.removeObserver(observer, OBSERVER_TOPIC); - yield testCleanup(experiments); -}); - -// Test that we correctly handle experiment start & install failures. - -add_task(function* test_invalidUrl() { - const OBSERVER_TOPIC = "experiments-changed"; - let observerFireCount = 0; - let expectedObserverFireCount = 0; - let observer = () => ++observerFireCount; - Services.obs.addObserver(observer, OBSERVER_TOPIC, false); - - // Dates the following tests are based on. - - let baseDate = new Date(2014, 5, 1, 12); - let startDate = futureDate(baseDate, 100 * MS_IN_ONE_DAY); - let endDate = futureDate(baseDate, 10000 * MS_IN_ONE_DAY); - - // The manifest data we test with. - - gManifestObject = { - "version": 1, - experiments: [ - { - id: EXPERIMENT1_ID, - xpiURL: gDataRoot + EXPERIMENT1_XPI_NAME + ".invalid", - xpiHash: EXPERIMENT1_XPI_SHA1, - startTime: 0, - endTime: dateToSeconds(endDate), - maxActiveSeconds: 10 * SEC_IN_ONE_DAY, - appName: ["XPCShell"], - channel: ["nightly"], - }, - ], - }; - - let experiments = new Experiments.Experiments(gPolicy); - - // Trigger update, clock set for the experiment to start. - - let now = futureDate(startDate, 10 * MS_IN_ONE_DAY); - defineNow(gPolicy, now); - gTimerScheduleOffset = null; - - yield experiments.updateManifest(); - Assert.equal(observerFireCount, ++expectedObserverFireCount, - "Experiments observer should have been called."); - Assert.equal(gTimerScheduleOffset, null, "No new timer should have been scheduled."); - - let list = yield experiments.getExperiments(); - Assert.equal(list.length, 0, "Experiment list should be empty."); - - // Cleanup. - - Services.obs.removeObserver(observer, OBSERVER_TOPIC); - yield testCleanup(experiments); -}); - -// Test that we handle it properly when active experiment addons are being -// uninstalled. - -add_task(function* test_unexpectedUninstall() { - const OBSERVER_TOPIC = "experiments-changed"; - let observerFireCount = 0; - let expectedObserverFireCount = 0; - let observer = () => ++observerFireCount; - Services.obs.addObserver(observer, OBSERVER_TOPIC, false); - - // Dates the following tests are based on. - - let baseDate = new Date(2014, 5, 1, 12); - let startDate = futureDate(baseDate, 100 * MS_IN_ONE_DAY); - let endDate = futureDate(baseDate, 10000 * MS_IN_ONE_DAY); - - // The manifest data we test with. - - gManifestObject = { - "version": 1, - experiments: [ - { - id: EXPERIMENT1_ID, - xpiURL: gDataRoot + EXPERIMENT1_XPI_NAME, - xpiHash: EXPERIMENT1_XPI_SHA1, - startTime: dateToSeconds(startDate), - endTime: dateToSeconds(endDate), - maxActiveSeconds: 10 * SEC_IN_ONE_DAY, - appName: ["XPCShell"], - channel: ["nightly"], - }, - ], - }; - - let experiments = new Experiments.Experiments(gPolicy); - - // Trigger update, clock set to before any activation. - - let now = baseDate; - defineNow(gPolicy, now); - yield experiments.updateManifest(); - Assert.equal(observerFireCount, ++expectedObserverFireCount, - "Experiments observer should have been called."); - let list = yield experiments.getExperiments(); - Assert.equal(list.length, 0, "Experiment list should be empty."); - - // Trigger update, clock set for the experiment to start. - - now = futureDate(startDate, 10 * MS_IN_ONE_DAY); - defineNow(gPolicy, now); - yield experiments.updateManifest(); - Assert.equal(observerFireCount, ++expectedObserverFireCount, - "Experiments observer should have been called."); - - list = yield experiments.getExperiments(); - Assert.equal(list.length, 1, "Experiment list should have 1 entry now."); - Assert.equal(list[0].id, EXPERIMENT1_ID, "Experiment 1 should be the sole entry."); - Assert.equal(list[0].active, true, "Experiment 1 should be active."); - - // Uninstall the addon through the addon manager instead of stopping it through - // the experiments API. - - yield AddonManagerTesting.uninstallAddonByID(EXPERIMENT1_ID); - yield experiments._mainTask; - - yield experiments.notify(); - - list = yield experiments.getExperiments(); - Assert.equal(list.length, 1, "Experiment list should have 1 entry now."); - Assert.equal(list[0].id, EXPERIMENT1_ID, "Experiment 1 should be the sole entry."); - Assert.equal(list[0].active, false, "Experiment 1 should not be active anymore."); - - // Cleanup. - - Services.obs.removeObserver(observer, OBSERVER_TOPIC); - yield testCleanup(experiments); -}); - -// If the Addon Manager knows of an experiment that we don't, it should get -// uninstalled. -add_task(function* testUnknownExperimentsUninstalled() { - let experiments = new Experiments.Experiments(gPolicy); - - let addons = yield getExperimentAddons(); - Assert.equal(addons.length, 0, "Precondition: No experiment add-ons are present."); - - // Simulate us not listening. - experiments._unregisterWithAddonManager(); - yield AddonManagerTesting.installXPIFromURL(gDataRoot + EXPERIMENT1_XPI_NAME, EXPERIMENT1_XPI_SHA1); - experiments._registerWithAddonManager(); - - addons = yield getExperimentAddons(); - Assert.equal(addons.length, 1, "Experiment 1 installed via AddonManager"); - - // Simulate no known experiments. - gManifestObject = { - "version": 1, - experiments: [], - }; - - yield experiments.updateManifest(); - let fromManifest = yield experiments.getExperiments(); - Assert.equal(fromManifest.length, 0, "No experiments known in manifest."); - - // And the unknown add-on should be gone. - addons = yield getExperimentAddons(); - Assert.equal(addons.length, 0, "Experiment 1 was uninstalled."); - - yield testCleanup(experiments); -}); - -// If someone else installs an experiment add-on, we detect and stop that. -add_task(function* testForeignExperimentInstall() { - let experiments = new Experiments.Experiments(gPolicy); - - gManifestObject = { - "version": 1, - experiments: [], - }; - - yield experiments.init(); - - let addons = yield getExperimentAddons(); - Assert.equal(addons.length, 0, "Precondition: No experiment add-ons present."); - - let failed = false; - try { - yield AddonManagerTesting.installXPIFromURL(gDataRoot + EXPERIMENT1_XPI_NAME, EXPERIMENT1_XPI_SHA1); - } catch (ex) { - failed = true; - } - Assert.ok(failed, "Add-on install should not have completed successfully"); - addons = yield getExperimentAddons(); - Assert.equal(addons.length, 0, "Add-on install should have been cancelled."); - - yield testCleanup(experiments); -}); - -// Experiment add-ons will be disabled after Addon Manager restarts. Ensure -// we enable them automatically. -add_task(function* testEnabledAfterRestart() { - let experiments = new Experiments.Experiments(gPolicy); - - gManifestObject = { - "version": 1, - experiments: [ - { - id: EXPERIMENT1_ID, - xpiURL: gDataRoot + EXPERIMENT1_XPI_NAME, - xpiHash: EXPERIMENT1_XPI_SHA1, - startTime: gPolicy.now().getTime() / 1000 - 60, - endTime: gPolicy.now().getTime() / 1000 + 60, - maxActiveSeconds: 10 * SEC_IN_ONE_DAY, - appName: ["XPCShell"], - channel: ["nightly"], - }, - ], - }; - - let addons = yield getExperimentAddons(); - Assert.equal(addons.length, 0, "Precondition: No experiment add-ons installed."); - - yield experiments.updateManifest(); - let fromManifest = yield experiments.getExperiments(); - Assert.equal(fromManifest.length, 1, "A single experiment is known."); - - addons = yield getExperimentAddons(); - Assert.equal(addons.length, 1, "A single experiment add-on is installed."); - Assert.ok(addons[0].isActive, "That experiment is active."); - - dump("Restarting Addon Manager\n"); - yield promiseRestartManager(); - experiments = new Experiments.Experiments(gPolicy); - - addons = yield getExperimentAddons(); - Assert.equal(addons.length, 1, "The experiment is still there after restart."); - Assert.ok(addons[0].userDisabled, "But it is disabled."); - Assert.equal(addons[0].isActive, false, "And not active."); - - yield experiments.updateManifest(); - Assert.ok(addons[0].isActive, "It activates when the manifest is evaluated."); - - yield testCleanup(experiments); -}); - -// If experiment add-ons were ever started, maxStartTime shouldn't be evaluated -// anymore. Ensure that if maxStartTime is passed but experiment has started -// already, maxStartTime does not cause deactivation. - -add_task(function* testMaxStartTimeEvaluation() { - - // Dates the following tests are based on. - - let startDate = new Date(2014, 5, 1, 12); - let now = futureDate(startDate, 10 * MS_IN_ONE_DAY); - let maxStartDate = futureDate(startDate, 100 * MS_IN_ONE_DAY); - let endDate = futureDate(startDate, 1000 * MS_IN_ONE_DAY); - - defineNow(gPolicy, now); - - // The manifest data we test with. - // We set a value for maxStartTime. - - gManifestObject = { - "version": 1, - experiments: [ - { - id: EXPERIMENT1_ID, - xpiURL: gDataRoot + EXPERIMENT1_XPI_NAME, - xpiHash: EXPERIMENT1_XPI_SHA1, - startTime: dateToSeconds(startDate), - endTime: dateToSeconds(endDate), - maxActiveSeconds: 1000 * SEC_IN_ONE_DAY, - maxStartTime: dateToSeconds(maxStartDate), - appName: ["XPCShell"], - channel: ["nightly"], - }, - ], - }; - - let experiments = new Experiments.Experiments(gPolicy); - - let addons = yield getExperimentAddons(); - Assert.equal(addons.length, 0, "Precondition: No experiment add-ons installed."); - - yield experiments.updateManifest(); - let fromManifest = yield experiments.getExperiments(); - Assert.equal(fromManifest.length, 1, "A single experiment is known."); - - addons = yield getExperimentAddons(); - Assert.equal(addons.length, 1, "A single experiment add-on is installed."); - Assert.ok(addons[0].isActive, "That experiment is active."); - - dump("Setting current time to maxStartTime + 100 days and reloading manifest\n"); - now = futureDate(maxStartDate, 100 * MS_IN_ONE_DAY); - defineNow(gPolicy, now); - yield experiments.updateManifest(); - - addons = yield getExperimentAddons(); - Assert.equal(addons.length, 1, "The experiment is still there."); - Assert.ok(addons[0].isActive, "It is still active."); - - yield testCleanup(experiments); -}); - -// Test coverage for an add-on uninstall disabling the experiment and that it stays -// disabled over restarts. -add_task(function* test_foreignUninstallAndRestart() { - let experiments = new Experiments.Experiments(gPolicy); - - gManifestObject = { - "version": 1, - experiments: [ - { - id: EXPERIMENT1_ID, - xpiURL: gDataRoot + EXPERIMENT1_XPI_NAME, - xpiHash: EXPERIMENT1_XPI_SHA1, - startTime: gPolicy.now().getTime() / 1000 - 60, - endTime: gPolicy.now().getTime() / 1000 + 60, - maxActiveSeconds: 10 * SEC_IN_ONE_DAY, - appName: ["XPCShell"], - channel: ["nightly"], - }, - ], - }; - - let addons = yield getExperimentAddons(); - Assert.equal(addons.length, 0, "Precondition: No experiment add-ons installed."); - - yield experiments.updateManifest(); - let experimentList = yield experiments.getExperiments(); - Assert.equal(experimentList.length, 1, "A single experiment is known."); - - addons = yield getExperimentAddons(); - Assert.equal(addons.length, 1, "A single experiment add-on is installed."); - Assert.ok(addons[0].isActive, "That experiment is active."); - - yield AddonManagerTesting.uninstallAddonByID(EXPERIMENT1_ID); - yield experiments._mainTask; - - addons = yield getExperimentAddons(); - Assert.equal(addons.length, 0, "Experiment add-on should have been removed."); - - experimentList = yield experiments.getExperiments(); - Assert.equal(experimentList.length, 1, "A single experiment is known."); - Assert.equal(experimentList[0].id, EXPERIMENT1_ID, "Experiment 1 should be the sole entry."); - Assert.ok(!experimentList[0].active, "Experiment 1 should not be active anymore."); - - // Fake restart behaviour. - yield promiseRestartManager(); - experiments = new Experiments.Experiments(gPolicy); - yield experiments.updateManifest(); - - addons = yield getExperimentAddons(); - Assert.equal(addons.length, 0, "No experiment add-ons installed."); - - experimentList = yield experiments.getExperiments(); - Assert.equal(experimentList.length, 1, "A single experiment is known."); - Assert.equal(experimentList[0].id, EXPERIMENT1_ID, "Experiment 1 should be the sole entry."); - Assert.ok(!experimentList[0].active, "Experiment 1 should not be active."); - - yield testCleanup(experiments); -}); diff --git a/browser/experiments/test/xpcshell/test_cache.js b/browser/experiments/test/xpcshell/test_cache.js deleted file mode 100644 index 4f2bce881..000000000 --- a/browser/experiments/test/xpcshell/test_cache.js +++ /dev/null @@ -1,399 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - * http://creativecommons.org/publicdomain/zero/1.0/ */ - -"use strict"; - -Cu.import("resource://testing-common/httpd.js"); -XPCOMUtils.defineLazyModuleGetter(this, "Experiments", - "resource:///modules/experiments/Experiments.jsm"); - -const MANIFEST_HANDLER = "manifests/handler"; - -const SEC_IN_ONE_DAY = 24 * 60 * 60; -const MS_IN_ONE_DAY = SEC_IN_ONE_DAY * 1000; - -var gHttpServer = null; -var gHttpRoot = null; -var gDataRoot = null; -var gPolicy = null; -var gManifestObject = null; -var gManifestHandlerURI = null; - -function run_test() { - run_next_test(); -} - -add_task(function* test_setup() { - loadAddonManager(); - yield removeCacheFile(); - - gHttpServer = new HttpServer(); - gHttpServer.start(-1); - let port = gHttpServer.identity.primaryPort; - gHttpRoot = "http://localhost:" + port + "/"; - gDataRoot = gHttpRoot + "data/"; - gManifestHandlerURI = gHttpRoot + MANIFEST_HANDLER; - gHttpServer.registerDirectory("/data/", do_get_cwd()); - gHttpServer.registerPathHandler("/" + MANIFEST_HANDLER, (request, response) => { - response.setStatusLine(null, 200, "OK"); - response.write(JSON.stringify(gManifestObject)); - response.processAsync(); - response.finish(); - }); - do_register_cleanup(() => gHttpServer.stop(() => {})); - - Services.prefs.setBoolPref(PREF_EXPERIMENTS_ENABLED, true); - Services.prefs.setIntPref(PREF_LOGGING_LEVEL, 0); - Services.prefs.setBoolPref(PREF_LOGGING_DUMP, true); - Services.prefs.setCharPref(PREF_MANIFEST_URI, gManifestHandlerURI); - Services.prefs.setIntPref(PREF_FETCHINTERVAL, 0); - - gPolicy = new Experiments.Policy(); - patchPolicy(gPolicy, { - updatechannel: () => "nightly", - oneshotTimer: (callback, timeout, thisObj, name) => {}, - }); -}); - -function checkExperimentListsEqual(list, list2) { - Assert.equal(list.length, list2.length, "Lists should have the same length.") - - for (let i=0; i<list.length; ++i) { - for (let k of Object.keys(list[i])) { - Assert.equal(list[i][k], list2[i][k], - "Field '" + k + "' should match for list entry " + i + "."); - } - } -} - -function checkExperimentSerializations(experimentEntryIterator) { - for (let experiment of experimentEntryIterator) { - let experiment2 = new Experiments.ExperimentEntry(gPolicy); - let jsonStr = JSON.stringify(experiment.toJSON()); - Assert.ok(experiment2.initFromCacheData(JSON.parse(jsonStr)), - "Should have initialized successfully from JSON serialization."); - Assert.equal(JSON.stringify(experiment), JSON.stringify(experiment2), - "Object stringifications should match."); - } -} - -function validateCache(cachedExperiments, experimentIds) { - let cachedExperimentIds = new Set(cachedExperiments); - Assert.equal(cachedExperimentIds.size, experimentIds.length, - "The number of cached experiments does not match with the provided list"); - for (let id of experimentIds) { - Assert.ok(cachedExperimentIds.has(id), "The cache must contain the experiment with id " + id); - } -} - -// Set up an experiments instance and check if it is properly restored from cache. - -add_task(function* test_cache() { - // The manifest data we test with. - - gManifestObject = { - "version": 1, - experiments: [ - { - id: EXPERIMENT1_ID, - xpiURL: gDataRoot + EXPERIMENT1_XPI_NAME, - xpiHash: EXPERIMENT1_XPI_SHA1, - maxActiveSeconds: 10 * SEC_IN_ONE_DAY, - appName: ["XPCShell"], - channel: ["nightly"], - }, - { - id: EXPERIMENT2_ID, - xpiURL: gDataRoot + EXPERIMENT2_XPI_NAME, - xpiHash: EXPERIMENT2_XPI_SHA1, - maxActiveSeconds: 10 * SEC_IN_ONE_DAY, - appName: ["XPCShell"], - channel: ["nightly"], - }, - { - id: EXPERIMENT3_ID, - xpiURL: "https://inval.id/foo.xpi", - xpiHash: "sha1:0000000000000000000000000000000000000000", - maxActiveSeconds: 10 * SEC_IN_ONE_DAY, - appName: ["XPCShell"], - channel: ["nightly"], - }, - ], - }; - - // Setup dates for the experiments. - - let baseDate = new Date(2014, 5, 1, 12); - let startDates = []; - let endDates = []; - - for (let i=0; i<gManifestObject.experiments.length; ++i) { - let experiment = gManifestObject.experiments[i]; - startDates.push(futureDate(baseDate, (50 + (150 * i)) * MS_IN_ONE_DAY)); - endDates .push(futureDate(startDates[i], 50 * MS_IN_ONE_DAY)); - experiment.startTime = dateToSeconds(startDates[i]); - experiment.endTime = dateToSeconds(endDates[i]); - } - - // Data to compare the result of Experiments.getExperiments() against. - - let experimentListData = [ - { - id: EXPERIMENT2_ID, - name: "Test experiment 2", - description: "And yet another experiment that experiments experimentally.", - }, - { - id: EXPERIMENT1_ID, - name: EXPERIMENT1_NAME, - description: "Yet another experiment that experiments experimentally.", - }, - ]; - - // Trigger update & re-init, clock set to before any activation. - - let now = baseDate; - defineNow(gPolicy, now); - - let experiments = new Experiments.Experiments(gPolicy); - yield experiments.updateManifest(); - let list = yield experiments.getExperiments(); - Assert.equal(list.length, 0, "Experiment list should be empty."); - checkExperimentSerializations(experiments._experiments.values()); - - yield promiseRestartManager(); - experiments = new Experiments.Experiments(gPolicy); - - yield experiments._run(); - list = yield experiments.getExperiments(); - Assert.equal(list.length, 0, "Experiment list should be empty."); - checkExperimentSerializations(experiments._experiments.values()); - - // Re-init, clock set for experiment 1 to start. - - now = futureDate(startDates[0], 5 * MS_IN_ONE_DAY); - defineNow(gPolicy, now); - - yield promiseRestartManager(); - experiments = new Experiments.Experiments(gPolicy); - yield experiments._run(); - - list = yield experiments.getExperiments(); - Assert.equal(list.length, 1, "Experiment list should have 1 entry now."); - - experimentListData[1].active = true; - experimentListData[1].endDate = now.getTime() + 10 * MS_IN_ONE_DAY; - checkExperimentListsEqual(experimentListData.slice(1), list); - checkExperimentSerializations(experiments._experiments.values()); - - let branch = yield experiments.getExperimentBranch(EXPERIMENT1_ID); - Assert.strictEqual(branch, null); - - yield experiments.setExperimentBranch(EXPERIMENT1_ID, "testbranch"); - branch = yield experiments.getExperimentBranch(EXPERIMENT1_ID); - Assert.strictEqual(branch, "testbranch"); - - // Re-init, clock set for experiment 1 to stop. - - now = futureDate(now, 20 * MS_IN_ONE_DAY); - defineNow(gPolicy, now); - - yield promiseRestartManager(); - experiments = new Experiments.Experiments(gPolicy); - yield experiments._run(); - - list = yield experiments.getExperiments(); - Assert.equal(list.length, 1, "Experiment list should have 1 entry."); - - experimentListData[1].active = false; - experimentListData[1].endDate = now.getTime(); - checkExperimentListsEqual(experimentListData.slice(1), list); - checkExperimentSerializations(experiments._experiments.values()); - - branch = yield experiments.getExperimentBranch(EXPERIMENT1_ID); - Assert.strictEqual(branch, "testbranch"); - - // Re-init, clock set for experiment 2 to start. - - now = futureDate(startDates[1], 20 * MS_IN_ONE_DAY); - defineNow(gPolicy, now); - - yield promiseRestartManager(); - experiments = new Experiments.Experiments(gPolicy); - yield experiments._run(); - - list = yield experiments.getExperiments(); - Assert.equal(list.length, 2, "Experiment list should have 2 entries."); - - experimentListData[0].active = true; - experimentListData[0].endDate = now.getTime() + 10 * MS_IN_ONE_DAY; - checkExperimentListsEqual(experimentListData, list); - checkExperimentSerializations(experiments._experiments.values()); - - // Re-init, clock set for experiment 2 to stop. - - now = futureDate(now, 20 * MS_IN_ONE_DAY); - defineNow(gPolicy, now); - - yield promiseRestartManager(); - experiments = new Experiments.Experiments(gPolicy); - yield experiments._run(); - - list = yield experiments.getExperiments(); - Assert.equal(list.length, 2, "Experiment list should have 2 entries."); - - experimentListData[0].active = false; - experimentListData[0].endDate = now.getTime(); - checkExperimentListsEqual(experimentListData, list); - checkExperimentSerializations(experiments._experiments.values()); - - // Cleanup. - - yield experiments._toggleExperimentsEnabled(false); - yield promiseRestartManager(); - yield removeCacheFile(); -}); - -add_task(function* test_expiration() { - // The manifest data we test with. - gManifestObject = { - "version": 1, - experiments: [ - { - id: EXPERIMENT1_ID, - xpiURL: gDataRoot + EXPERIMENT1_XPI_NAME, - xpiHash: EXPERIMENT1_XPI_SHA1, - maxActiveSeconds: 10 * SEC_IN_ONE_DAY, - appName: ["XPCShell"], - channel: ["nightly"], - }, - { - id: EXPERIMENT2_ID, - xpiURL: gDataRoot + EXPERIMENT2_XPI_NAME, - xpiHash: EXPERIMENT2_XPI_SHA1, - maxActiveSeconds: 50 * SEC_IN_ONE_DAY, - appName: ["XPCShell"], - channel: ["nightly"], - }, - // The 3rd experiment will never run, so it's ok to use experiment's 2 data. - { - id: EXPERIMENT3_ID, - xpiURL: gDataRoot + EXPERIMENT2_XPI_NAME, - xpiHash: EXPERIMENT2_XPI_SHA1, - maxActiveSeconds: 10 * SEC_IN_ONE_DAY, - appName: ["XPCShell"], - channel: ["nightly"], - } - ], - }; - - // Data to compare the result of Experiments.getExperiments() against. - let experimentListData = [ - { - id: EXPERIMENT2_ID, - name: "Test experiment 2", - description: "And yet another experiment that experiments experimentally.", - }, - { - id: EXPERIMENT1_ID, - name: EXPERIMENT1_NAME, - description: "Yet another experiment that experiments experimentally.", - }, - ]; - - // Setup dates for the experiments. - let baseDate = new Date(2014, 5, 1, 12); - let startDates = []; - let endDates = []; - - for (let i=0; i<gManifestObject.experiments.length; ++i) { - let experiment = gManifestObject.experiments[i]; - // Spread out experiments in time so that one experiment can end and expire while - // the next is still running. - startDates.push(futureDate(baseDate, (50 + (200 * i)) * MS_IN_ONE_DAY)); - endDates .push(futureDate(startDates[i], 50 * MS_IN_ONE_DAY)); - experiment.startTime = dateToSeconds(startDates[i]); - experiment.endTime = dateToSeconds(endDates[i]); - } - - let now = null; - let experiments = null; - - let setDateAndRestartExperiments = new Task.async(function* (newDate) { - now = newDate; - defineNow(gPolicy, now); - - yield promiseRestartManager(); - experiments = new Experiments.Experiments(gPolicy); - yield experiments._run(); - }); - - // Trigger update & re-init, clock set to before any activation. - now = baseDate; - defineNow(gPolicy, now); - - experiments = new Experiments.Experiments(gPolicy); - yield experiments.updateManifest(); - let list = yield experiments.getExperiments(); - Assert.equal(list.length, 0, "Experiment list should be empty."); - - // Re-init, clock set for experiment 1 to start... - yield setDateAndRestartExperiments(startDates[0]); - list = yield experiments.getExperiments(); - Assert.equal(list.length, 1, "The first experiment should have started."); - - // ... init again, and set the clock so that the first experiment ends. - yield setDateAndRestartExperiments(endDates[0]); - - // The experiment just ended, it should still be in the cache, but marked - // as finished. - list = yield experiments.getExperiments(); - Assert.equal(list.length, 1, "Experiment list should have 1 entry."); - - experimentListData[1].active = false; - experimentListData[1].endDate = now.getTime(); - checkExperimentListsEqual(experimentListData.slice(1), list); - validateCache([...experiments._experiments.keys()], [EXPERIMENT1_ID, EXPERIMENT2_ID, EXPERIMENT3_ID]); - - // Start the second experiment. - yield setDateAndRestartExperiments(startDates[1]); - - // The experiments cache should contain the finished experiment and the - // one that's still running. - list = yield experiments.getExperiments(); - Assert.equal(list.length, 2, "Experiment list should have 2 entries."); - - experimentListData[0].active = true; - experimentListData[0].endDate = now.getTime() + 50 * MS_IN_ONE_DAY; - checkExperimentListsEqual(experimentListData, list); - - // Move the clock in the future, just 31 days after the start date of the second experiment, - // so that the cache for the first experiment expires and the second experiment is still running. - yield setDateAndRestartExperiments(futureDate(startDates[1], 31 * MS_IN_ONE_DAY)); - validateCache([...experiments._experiments.keys()], [EXPERIMENT2_ID, EXPERIMENT3_ID]); - - // Make sure that the expired experiment is not reported anymore. - let history = yield experiments.getExperiments(); - Assert.equal(history.length, 1, "Experiments older than 180 days must be removed from the cache."); - - // Test that we don't write expired experiments in the cache. - yield setDateAndRestartExperiments(now); - validateCache([...experiments._experiments.keys()], [EXPERIMENT2_ID, EXPERIMENT3_ID]); - - // The first experiment should be expired and not in the cache, it ended more than - // 180 days ago. We should see the one still running in the cache. - history = yield experiments.getExperiments(); - Assert.equal(history.length, 1, "Expired experiments must not be saved to cache."); - checkExperimentListsEqual(experimentListData.slice(0, 1), history); - - // Test that experiments that are cached locally but never ran are removed from cache - // when they are removed from the manifest (this is cached data, not really history). - gManifestObject["experiments"] = gManifestObject["experiments"].slice(1, 1); - yield experiments.updateManifest(); - validateCache([...experiments._experiments.keys()], [EXPERIMENT2_ID]); - - // Cleanup. - yield experiments._toggleExperimentsEnabled(false); - yield promiseRestartManager(); - yield removeCacheFile(); -}); diff --git a/browser/experiments/test/xpcshell/test_cacherace.js b/browser/experiments/test/xpcshell/test_cacherace.js deleted file mode 100644 index ff77cfdc4..000000000 --- a/browser/experiments/test/xpcshell/test_cacherace.js +++ /dev/null @@ -1,102 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - * http://creativecommons.org/publicdomain/zero/1.0/ */ - -"use strict"; - -Cu.import("resource://testing-common/httpd.js"); -Cu.import("resource://gre/modules/Timer.jsm"); - -const MANIFEST_HANDLER = "manifests/handler"; - -const SEC_IN_ONE_DAY = 24 * 60 * 60; -const MS_IN_ONE_DAY = SEC_IN_ONE_DAY * 1000; - -var gHttpServer = null; -var gHttpRoot = null; -var gDataRoot = null; -var gPolicy = null; -var gManifestObject = null; -var gManifestHandlerURI = null; - -function run_test() { - run_next_test(); -} - -add_task(function* test_setup() { - loadAddonManager(); - yield removeCacheFile(); - - gHttpServer = new HttpServer(); - gHttpServer.start(-1); - let port = gHttpServer.identity.primaryPort; - gHttpRoot = "http://localhost:" + port + "/"; - gDataRoot = gHttpRoot + "data/"; - gManifestHandlerURI = gHttpRoot + MANIFEST_HANDLER; - gHttpServer.registerDirectory("/data/", do_get_cwd()); - gHttpServer.registerPathHandler("/" + MANIFEST_HANDLER, (request, response) => { - response.setStatusLine(null, 200, "OK"); - response.write(JSON.stringify(gManifestObject)); - response.processAsync(); - response.finish(); - }); - do_register_cleanup(() => gHttpServer.stop(() => {})); - - Services.prefs.setBoolPref(PREF_EXPERIMENTS_ENABLED, true); - Services.prefs.setIntPref(PREF_LOGGING_LEVEL, 0); - Services.prefs.setBoolPref(PREF_LOGGING_DUMP, true); - Services.prefs.setCharPref(PREF_MANIFEST_URI, gManifestHandlerURI); - Services.prefs.setIntPref(PREF_FETCHINTERVAL, 0); - - let ExperimentsScope = Cu.import("resource:///modules/experiments/Experiments.jsm"); - let Experiments = ExperimentsScope.Experiments; - - gPolicy = new Experiments.Policy(); - patchPolicy(gPolicy, { - updatechannel: () => "nightly", - delayCacheWrite: (promise) => { - return new Promise((resolve, reject) => { - promise.then( - (result) => { setTimeout(() => resolve(result), 500); }, - (err) => { reject(err); } - ); - }); - }, - }); - - let now = new Date(2014, 5, 1, 12); - defineNow(gPolicy, now); - - let experimentName = "experiment-racybranch.xpi"; - let experimentPath = getExperimentPath(experimentName); - let experimentHash = "sha1:" + sha1File(experimentPath); - - gManifestObject = { - version: 1, - experiments: [ - { - id: "test-experiment-racybranch@tests.mozilla.org", - xpiURL: gDataRoot + "experiment-racybranch.xpi", - xpiHash: experimentHash, - maxActiveSeconds: 10 * SEC_IN_ONE_DAY, - appName: ["XPCShell"], - channel: ["nightly"], - startTime: dateToSeconds(futureDate(now, -MS_IN_ONE_DAY)), - endTime: dateToSeconds(futureDate(now, MS_IN_ONE_DAY)), - }, - ], - }; - - do_print("gManifestObject: " + JSON.stringify(gManifestObject)); - - // In order for the addon manager to work properly, we hack - // Experiments.instance which is used by the XPIProvider - let experiments = new Experiments.Experiments(gPolicy); - Assert.strictEqual(ExperimentsScope.gExperiments, null); - ExperimentsScope.gExperiments = experiments; - - yield experiments.updateManifest(); - let active = experiments._getActiveExperiment(); - Assert.ok(active); - Assert.equal(active.branch, "racy-set"); - Assert.ok(!experiments._dirty); -}); diff --git a/browser/experiments/test/xpcshell/test_conditions.js b/browser/experiments/test/xpcshell/test_conditions.js deleted file mode 100644 index 23c147fdb..000000000 --- a/browser/experiments/test/xpcshell/test_conditions.js +++ /dev/null @@ -1,325 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - * http://creativecommons.org/publicdomain/zero/1.0/ */ - -"use strict"; - - -Cu.import("resource:///modules/experiments/Experiments.jsm"); -Cu.import("resource://gre/modules/TelemetryController.jsm", this); - -const SEC_IN_ONE_DAY = 24 * 60 * 60; - -var gPolicy = null; - -function ManifestEntry(data) { - this.id = EXPERIMENT1_ID; - this.xpiURL = "http://localhost:1/dummy.xpi"; - this.xpiHash = EXPERIMENT1_XPI_SHA1; - this.startTime = new Date(2010, 0, 1, 12).getTime() / 1000; - this.endTime = new Date(9001, 0, 1, 12).getTime() / 1000; - this.maxActiveSeconds = SEC_IN_ONE_DAY; - this.appName = ["XPCShell"]; - this.channel = ["nightly"]; - - data = data || {}; - for (let k of Object.keys(data)) { - this[k] = data[k]; - } - - if (!this.endTime) { - this.endTime = this.startTime + 5 * SEC_IN_ONE_DAY; - } -} - -function applicableFromManifestData(data, policy) { - let manifestData = new ManifestEntry(data); - let entry = new Experiments.ExperimentEntry(policy); - entry.initFromManifestData(manifestData); - return entry.isApplicable(); -} - -function run_test() { - run_next_test(); -} - -add_task(function* test_setup() { - createAppInfo(); - do_get_profile(); - startAddonManagerOnly(); - yield TelemetryController.testSetup(); - gPolicy = new Experiments.Policy(); - - patchPolicy(gPolicy, { - updatechannel: () => "nightly", - locale: () => "en-US", - random: () => 0.5, - }); - - Services.prefs.setBoolPref(PREF_EXPERIMENTS_ENABLED, true); - Services.prefs.setIntPref(PREF_LOGGING_LEVEL, 0); - Services.prefs.setBoolPref(PREF_LOGGING_DUMP, true); -}); - -function arraysEqual(a, b) { - if (a.length !== b.length) { - return false; - } - - for (let i=0; i<a.length; ++i) { - if (a[i] !== b[i]) { - return false; - } - } - - return true; -} - -// This function exists solely to be .toSource()d -const sanityFilter = function filter(c) { - if (c.telemetryEnvironment === undefined) { - throw Error("No .telemetryEnvironment"); - } - if (c.telemetryEnvironment.build == undefined) { - throw Error("No .telemetryEnvironment.build"); - } - return true; -} - -// Utility function to generate build ID for previous/next date. -function addDate(buildId, diff) { - let m = /^([0-9]{4})([0-9]{2})([0-9]{2})(.*)$/.exec(buildId); - if (!m) { - throw Error("Unsupported build ID: " + buildId); - } - let year = Number.parseInt(m[1], 10); - let month = Number.parseInt(m[2], 10); - let date = Number.parseInt(m[3], 10); - let remainingParts = m[4]; - - let d = new Date(); - d.setUTCFullYear(year, month - 1, date); - d.setTime(d.getTime() + diff * 24 * 60 * 60 * 1000); - - let yearStr = String(d.getUTCFullYear()); - let monthStr = ("0" + String(d.getUTCMonth() + 1)).slice(-2); - let dateStr = ("0" + String(d.getUTCDate())).slice(-2); - return yearStr + monthStr + dateStr + remainingParts; -} -function prevDate(buildId) { - return addDate(buildId, -1); -} -function nextDate(buildId) { - return addDate(buildId, 1); -} - -add_task(function* test_simpleFields() { - let testData = [ - // "expected applicable?", failure reason or null, manifest data - - // misc. environment - - [false, ["appName"], {appName: []}], - [false, ["appName"], {appName: ["foo", gAppInfo.name + "-invalid"]}], - [true, null, {appName: ["not-an-app-name", gAppInfo.name]}], - - [false, ["os"], {os: []}], - [false, ["os"], {os: ["42", "abcdef"]}], - [true, null, {os: [gAppInfo.OS, "plan9"]}], - - [false, ["channel"], {channel: []}], - [false, ["channel"], {channel: ["foo", gPolicy.updatechannel() + "-invalid"]}], - [true, null, {channel: ["not-a-channel", gPolicy.updatechannel()]}], - - [false, ["locale"], {locale: []}], - [false, ["locale"], {locale: ["foo", gPolicy.locale + "-invalid"]}], - [true, null, {locale: ["not-a-locale", gPolicy.locale()]}], - - // version - - [false, ["version"], {version: []}], - [false, ["version"], {version: ["-1", gAppInfo.version + "-invalid", "asdf", "0,4", "99.99", "0.1.1.1"]}], - [true, null, {version: ["99999999.999", "-1", gAppInfo.version]}], - - [false, ["minVersion"], {minVersion: "1.0.1"}], - [true, null, {minVersion: "1.0b1"}], - [true, null, {minVersion: "1.0"}], - [true, null, {minVersion: "0.9"}], - - [false, ["maxVersion"], {maxVersion: "0.1"}], - [false, ["maxVersion"], {maxVersion: "0.9.9"}], - [false, ["maxVersion"], {maxVersion: "1.0b1"}], - [true, ["maxVersion"], {maxVersion: "1.0"}], - [true, ["maxVersion"], {maxVersion: "1.7pre"}], - - // build id - - [false, ["buildIDs"], {buildIDs: []}], - [false, ["buildIDs"], {buildIDs: ["not-a-build-id", gAppInfo.platformBuildID + "-invalid"]}], - [true, null, {buildIDs: ["not-a-build-id", gAppInfo.platformBuildID]}], - - [true, null, {minBuildID: prevDate(gAppInfo.platformBuildID)}], - [true, null, {minBuildID: gAppInfo.platformBuildID}], - [false, ["minBuildID"], {minBuildID: nextDate(gAppInfo.platformBuildID)}], - - [false, ["maxBuildID"], {maxBuildID: prevDate(gAppInfo.platformBuildID)}], - [true, null, {maxBuildID: gAppInfo.platformBuildID}], - [true, null, {maxBuildID: nextDate(gAppInfo.platformBuildID)}], - - // sample - - [false, ["sample"], {sample: -1 }], - [false, ["sample"], {sample: 0.0}], - [false, ["sample"], {sample: 0.1}], - [true, null, {sample: 0.5}], - [true, null, {sample: 0.6}], - [true, null, {sample: 1.0}], - [true, null, {sample: 0.5}], - - // experiment control - - [false, ["disabled"], {disabled: true}], - [true, null, {disabled: false}], - - [false, ["frozen"], {frozen: true}], - [true, null, {frozen: false}], - - [false, null, {frozen: true, disabled: true}], - [false, null, {frozen: true, disabled: false}], - [false, null, {frozen: false, disabled: true}], - [true, null, {frozen: false, disabled: false}], - - // jsfilter - - [true, null, {jsfilter: "function filter(c) { return true; }"}], - [false, ["jsfilter-false"], {jsfilter: "function filter(c) { return false; }"}], - [true, null, {jsfilter: "function filter(c) { return 123; }"}], // truthy - [false, ["jsfilter-false"], {jsfilter: "function filter(c) { return ''; }"}], // falsy - [false, ["jsfilter-false"], {jsfilter: "function filter(c) { var a = []; }"}], // undefined - [false, ["jsfilter-threw", "some error"], {jsfilter: "function filter(c) { throw new Error('some error'); }"}], - [false, ["jsfilter-evalfailed"], {jsfilter: "123, this won't work"}], - [true, null, {jsfilter: "var filter = " + sanityFilter.toSource()}], - ]; - - for (let i=0; i<testData.length; ++i) { - let entry = testData[i]; - let applicable; - let reason = null; - - yield applicableFromManifestData(entry[2], gPolicy).then( - value => applicable = value, - value => { - applicable = false; - reason = value; - } - ); - - Assert.equal(applicable, entry[0], - "Experiment entry applicability should match for test " - + i + ": " + JSON.stringify(entry[2])); - - let expectedReason = entry[1]; - if (!applicable && expectedReason) { - Assert.ok(arraysEqual(reason, expectedReason), - "Experiment rejection reasons should match for test " + i + ". " - + "Got " + JSON.stringify(reason) + ", expected " - + JSON.stringify(expectedReason)); - } - } -}); - -add_task(function* test_times() { - let now = new Date(2014, 5, 6, 12); - let nowSec = now.getTime() / 1000; - let testData = [ - // "expected applicable?", rejection reason or null, fake now date, manifest data - - // start time - - [true, null, now, - {startTime: nowSec - 5 * SEC_IN_ONE_DAY, - endTime: nowSec + 10 * SEC_IN_ONE_DAY}], - [true, null, now, - {startTime: nowSec, - endTime: nowSec + 10 * SEC_IN_ONE_DAY}], - [false, "startTime", now, - {startTime: nowSec + 5 * SEC_IN_ONE_DAY, - endTime: nowSec + 10 * SEC_IN_ONE_DAY}], - - // end time - - [false, "endTime", now, - {startTime: nowSec - 5 * SEC_IN_ONE_DAY, - endTime: nowSec - 10 * SEC_IN_ONE_DAY}], - [false, "endTime", now, - {startTime: nowSec - 5 * SEC_IN_ONE_DAY, - endTime: nowSec - 5 * SEC_IN_ONE_DAY}], - - // max start time - - [false, "maxStartTime", now, - {maxStartTime: nowSec - 15 * SEC_IN_ONE_DAY, - startTime: nowSec - 10 * SEC_IN_ONE_DAY, - endTime: nowSec + 10 * SEC_IN_ONE_DAY}], - [false, "maxStartTime", now, - {maxStartTime: nowSec - 1 * SEC_IN_ONE_DAY, - startTime: nowSec - 10 * SEC_IN_ONE_DAY, - endTime: nowSec + 10 * SEC_IN_ONE_DAY}], - [false, "maxStartTime", now, - {maxStartTime: nowSec - 10 * SEC_IN_ONE_DAY, - startTime: nowSec - 10 * SEC_IN_ONE_DAY, - endTime: nowSec + 10 * SEC_IN_ONE_DAY}], - [true, null, now, - {maxStartTime: nowSec, - startTime: nowSec - 10 * SEC_IN_ONE_DAY, - endTime: nowSec + 10 * SEC_IN_ONE_DAY}], - [true, null, now, - {maxStartTime: nowSec + 1 * SEC_IN_ONE_DAY, - startTime: nowSec - 10 * SEC_IN_ONE_DAY, - endTime: nowSec + 10 * SEC_IN_ONE_DAY}], - - // max active seconds - - [true, null, now, - {maxActiveSeconds: 5 * SEC_IN_ONE_DAY, - startTime: nowSec - 10 * SEC_IN_ONE_DAY, - endTime: nowSec + 10 * SEC_IN_ONE_DAY}], - [true, null, now, - {maxActiveSeconds: 10 * SEC_IN_ONE_DAY, - startTime: nowSec - 10 * SEC_IN_ONE_DAY, - endTime: nowSec + 10 * SEC_IN_ONE_DAY}], - [true, null, now, - {maxActiveSeconds: 15 * SEC_IN_ONE_DAY, - startTime: nowSec - 10 * SEC_IN_ONE_DAY, - endTime: nowSec + 10 * SEC_IN_ONE_DAY}], - [true, null, now, - {maxActiveSeconds: 20 * SEC_IN_ONE_DAY, - startTime: nowSec - 10 * SEC_IN_ONE_DAY, - endTime: nowSec + 10 * SEC_IN_ONE_DAY}], - ]; - - for (let i=0; i<testData.length; ++i) { - let entry = testData[i]; - let applicable; - let reason = null; - defineNow(gPolicy, entry[2]); - - yield applicableFromManifestData(entry[3], gPolicy).then( - value => applicable = value, - value => { - applicable = false; - reason = value; - } - ); - - Assert.equal(applicable, entry[0], - "Experiment entry applicability should match for test " - + i + ": " + JSON.stringify([entry[2], entry[3]])); - if (!applicable && entry[1]) { - Assert.equal(reason, entry[1], "Experiment rejection reason should match for test " + i); - } - } -}); - -add_task(function* test_shutdown() { - yield TelemetryController.testShutdown(); -}); diff --git a/browser/experiments/test/xpcshell/test_disableExperiments.js b/browser/experiments/test/xpcshell/test_disableExperiments.js deleted file mode 100644 index 8441b922d..000000000 --- a/browser/experiments/test/xpcshell/test_disableExperiments.js +++ /dev/null @@ -1,180 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - * http://creativecommons.org/publicdomain/zero/1.0/ */ - -"use strict"; - -Cu.import("resource://testing-common/httpd.js"); -Cu.import("resource://testing-common/AddonManagerTesting.jsm"); - -XPCOMUtils.defineLazyModuleGetter(this, "Experiments", - "resource:///modules/experiments/Experiments.jsm"); - -const MANIFEST_HANDLER = "manifests/handler"; - -const SEC_IN_ONE_DAY = 24 * 60 * 60; -const MS_IN_ONE_DAY = SEC_IN_ONE_DAY * 1000; - -var gHttpServer = null; -var gHttpRoot = null; -var gDataRoot = null; -var gPolicy = null; -var gManifestObject = null; -var gManifestHandlerURI = null; - -function run_test() { - run_next_test(); -} - -add_task(function* test_setup() { - loadAddonManager(); - - gHttpServer = new HttpServer(); - gHttpServer.start(-1); - let port = gHttpServer.identity.primaryPort; - gHttpRoot = "http://localhost:" + port + "/"; - gDataRoot = gHttpRoot + "data/"; - gManifestHandlerURI = gHttpRoot + MANIFEST_HANDLER; - gHttpServer.registerDirectory("/data/", do_get_cwd()); - gHttpServer.registerPathHandler("/" + MANIFEST_HANDLER, (request, response) => { - response.setStatusLine(null, 200, "OK"); - response.write(JSON.stringify(gManifestObject)); - response.processAsync(); - response.finish(); - }); - do_register_cleanup(() => gHttpServer.stop(() => {})); - - Services.prefs.setBoolPref(PREF_EXPERIMENTS_ENABLED, true); - Services.prefs.setIntPref(PREF_LOGGING_LEVEL, 0); - Services.prefs.setBoolPref(PREF_LOGGING_DUMP, true); - Services.prefs.setCharPref(PREF_MANIFEST_URI, gManifestHandlerURI); - Services.prefs.setIntPref(PREF_FETCHINTERVAL, 0); - - gPolicy = new Experiments.Policy(); - patchPolicy(gPolicy, { - updatechannel: () => "nightly", - oneshotTimer: (callback, timeout, thisObj, name) => {}, - }); -}); - -// Test disabling the feature stops current and future experiments. - -add_task(function* test_disableExperiments() { - const OBSERVER_TOPIC = "experiments-changed"; - let observerFireCount = 0; - let expectedObserverFireCount = 0; - let observer = () => ++observerFireCount; - Services.obs.addObserver(observer, OBSERVER_TOPIC, false); - - // Dates the following tests are based on. - - let baseDate = new Date(2014, 5, 1, 12); - let startDate1 = futureDate(baseDate, 50 * MS_IN_ONE_DAY); - let endDate1 = futureDate(baseDate, 100 * MS_IN_ONE_DAY); - let startDate2 = futureDate(baseDate, 150 * MS_IN_ONE_DAY); - let endDate2 = futureDate(baseDate, 200 * MS_IN_ONE_DAY); - - // The manifest data we test with. - - gManifestObject = { - "version": 1, - experiments: [ - { - id: EXPERIMENT2_ID, - xpiURL: gDataRoot + EXPERIMENT2_XPI_NAME, - xpiHash: EXPERIMENT2_XPI_SHA1, - startTime: dateToSeconds(startDate2), - endTime: dateToSeconds(endDate2), - maxActiveSeconds: 10 * SEC_IN_ONE_DAY, - appName: ["XPCShell"], - channel: ["nightly"], - }, - { - id: EXPERIMENT1_ID, - xpiURL: gDataRoot + EXPERIMENT1_XPI_NAME, - xpiHash: EXPERIMENT1_XPI_SHA1, - startTime: dateToSeconds(startDate1), - endTime: dateToSeconds(endDate1), - maxActiveSeconds: 10 * SEC_IN_ONE_DAY, - appName: ["XPCShell"], - channel: ["nightly"], - }, - ], - }; - - let experiments = new Experiments.Experiments(gPolicy); - - // Trigger update, clock set to before any activation. - // Use updateManifest() to provide for coverage of that path. - - let now = baseDate; - defineNow(gPolicy, now); - - yield experiments.updateManifest(); - Assert.equal(observerFireCount, ++expectedObserverFireCount, - "Experiments observer should have been called."); - let list = yield experiments.getExperiments(); - Assert.equal(list.length, 0, "Experiment list should be empty."); - let addons = yield getExperimentAddons(); - Assert.equal(addons.length, 0, "Precondition: No experiment add-ons are installed."); - - // Trigger update, clock set for experiment 1 to start. - - now = futureDate(startDate1, 5 * MS_IN_ONE_DAY); - defineNow(gPolicy, now); - - yield experiments.updateManifest(); - Assert.equal(observerFireCount, ++expectedObserverFireCount, - "Experiments observer should have been called."); - - list = yield experiments.getExperiments(); - Assert.equal(list.length, 1, "Experiment list should have 1 entry now."); - Assert.equal(list[0].active, true, "Experiment should be active."); - addons = yield getExperimentAddons(); - Assert.equal(addons.length, 1, "An experiment add-on was installed."); - - // Disable the experiments feature. Check that we stop the running experiment. - - Services.prefs.setBoolPref(PREF_EXPERIMENTS_ENABLED, false); - yield experiments._mainTask; - - Assert.equal(observerFireCount, ++expectedObserverFireCount, - "Experiments observer should have been called."); - - list = yield experiments.getExperiments(); - Assert.equal(list.length, 1, "Experiment list should have 1 entry."); - Assert.equal(list[0].active, false, "Experiment entry should not be active."); - addons = yield getExperimentAddons(); - Assert.equal(addons.length, 0, "The experiment add-on should be uninstalled."); - - // Trigger update, clock set for experiment 2 to start. Verify we don't start it. - - now = startDate2; - defineNow(gPolicy, now); - - try { - yield experiments.updateManifest(); - } catch (e) { - // This exception is expected, we rethrow everything else - if (e.message != "experiments are disabled") { - throw e; - } - } - - experiments.notify(); - yield experiments._mainTask; - - Assert.equal(observerFireCount, expectedObserverFireCount, - "Experiments observer should not have been called."); - - list = yield experiments.getExperiments(); - Assert.equal(list.length, 1, "Experiment list should still have 1 entry."); - Assert.equal(list[0].active, false, "Experiment entry should not be active."); - addons = yield getExperimentAddons(); - Assert.equal(addons.length, 0, "There should still be no experiment add-on installed."); - - // Cleanup. - - Services.obs.removeObserver(observer, OBSERVER_TOPIC); - yield promiseRestartManager(); - yield removeCacheFile(); -}); diff --git a/browser/experiments/test/xpcshell/test_fetch.js b/browser/experiments/test/xpcshell/test_fetch.js deleted file mode 100644 index e8d76fa35..000000000 --- a/browser/experiments/test/xpcshell/test_fetch.js +++ /dev/null @@ -1,68 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - * http://creativecommons.org/publicdomain/zero/1.0/ */ - -"use strict"; - -Cu.import("resource://testing-common/httpd.js"); -Cu.import("resource://gre/modules/Services.jsm"); -Cu.import("resource://gre/modules/osfile.jsm"); -Cu.import("resource:///modules/experiments/Experiments.jsm"); - -var gHttpServer = null; -var gHttpRoot = null; -var gPolicy = new Experiments.Policy(); - -function run_test() { - loadAddonManager(); - - gHttpServer = new HttpServer(); - gHttpServer.start(-1); - let port = gHttpServer.identity.primaryPort; - gHttpRoot = "http://localhost:" + port + "/"; - gHttpServer.registerDirectory("/", do_get_cwd()); - do_register_cleanup(() => gHttpServer.stop(() => {})); - - Services.prefs.setBoolPref(PREF_EXPERIMENTS_ENABLED, true); - Services.prefs.setIntPref(PREF_LOGGING_LEVEL, 0); - Services.prefs.setBoolPref(PREF_LOGGING_DUMP, true); - - patchPolicy(gPolicy, { - updatechannel: () => "nightly", - }); - - run_next_test(); -} - -add_task(function* test_fetchAndCache() { - Services.prefs.setCharPref(PREF_MANIFEST_URI, gHttpRoot + "experiments_1.manifest"); - let ex = new Experiments.Experiments(gPolicy); - - Assert.equal(ex._experiments, null, "There should be no cached experiments yet."); - yield ex.updateManifest(); - Assert.notEqual(ex._experiments.size, 0, "There should be cached experiments now."); - - yield promiseRestartManager(); -}); - -add_task(function* test_checkCache() { - let ex = new Experiments.Experiments(gPolicy); - yield ex.notify(); - Assert.notEqual(ex._experiments.size, 0, "There should be cached experiments now."); - - yield promiseRestartManager(); -}); - -add_task(function* test_fetchInvalid() { - yield removeCacheFile(); - - Services.prefs.setCharPref(PREF_MANIFEST_URI, gHttpRoot + "experiments_1.manifest"); - let ex = new Experiments.Experiments(gPolicy); - yield ex.updateManifest(); - Assert.notEqual(ex._experiments.size, 0, "There should be experiments"); - - Services.prefs.setCharPref(PREF_MANIFEST_URI, gHttpRoot + "invalid.manifest"); - yield ex.updateManifest() - Assert.notEqual(ex._experiments.size, 0, "There should still be experiments: fetch failure shouldn't remove them."); - - yield promiseRestartManager(); -}); diff --git a/browser/experiments/test/xpcshell/test_nethang_bug1012924.js b/browser/experiments/test/xpcshell/test_nethang_bug1012924.js deleted file mode 100644 index 7ef604901..000000000 --- a/browser/experiments/test/xpcshell/test_nethang_bug1012924.js +++ /dev/null @@ -1,47 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - * http://creativecommons.org/publicdomain/zero/1.0/ */ - -"use strict"; - -Cu.import("resource://testing-common/httpd.js"); -Cu.import("resource:///modules/experiments/Experiments.jsm"); - -const MANIFEST_HANDLER = "manifests/handler"; - -function run_test() { - run_next_test(); -} - -add_task(function* test_setup() { - loadAddonManager(); - do_get_profile(); - - let httpServer = new HttpServer(); - httpServer.start(-1); - let port = httpServer.identity.primaryPort; - let httpRoot = "http://localhost:" + port + "/"; - let handlerURI = httpRoot + MANIFEST_HANDLER; - httpServer.registerPathHandler("/" + MANIFEST_HANDLER, - (request, response) => { - response.processAsync(); - response.setStatus(null, 200, "OK"); - response.write("["); // never finish! - }); - - do_register_cleanup(() => httpServer.stop(() => {})); - Services.prefs.setBoolPref(PREF_EXPERIMENTS_ENABLED, true); - Services.prefs.setIntPref(PREF_LOGGING_LEVEL, 0); - Services.prefs.setBoolPref(PREF_LOGGING_DUMP, true); - Services.prefs.setCharPref(PREF_MANIFEST_URI, handlerURI); - Services.prefs.setIntPref(PREF_FETCHINTERVAL, 0); - - let experiments = Experiments.instance(); - experiments.updateManifest().then( - () => { - Assert.ok(true, "updateManifest finished successfully"); - }, - (e) => { - do_throw("updateManifest should not have failed: got error " + e); - }); - yield experiments.uninit(); -}); diff --git a/browser/experiments/test/xpcshell/test_previous_provider.js b/browser/experiments/test/xpcshell/test_previous_provider.js deleted file mode 100644 index f7186e159..000000000 --- a/browser/experiments/test/xpcshell/test_previous_provider.js +++ /dev/null @@ -1,179 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - * http://creativecommons.org/publicdomain/zero/1.0/ */ - -"use strict"; - -Cu.import("resource://gre/modules/Promise.jsm"); -Cu.import("resource:///modules/experiments/Experiments.jsm"); -Cu.import("resource://testing-common/httpd.js"); - -var gDataRoot; -var gHttpServer; -var gManifestObject; - -function run_test() { - run_next_test(); -} - -add_task(function test_setup() { - loadAddonManager(); - do_get_profile(); - - gHttpServer = new HttpServer(); - gHttpServer.start(-1); - let httpRoot = "http://localhost:" + gHttpServer.identity.primaryPort + "/"; - gDataRoot = httpRoot + "data/"; - gHttpServer.registerDirectory("/data/", do_get_cwd()); - gHttpServer.registerPathHandler("/manifests/handler", (req, res) => { - res.setStatusLine(null, 200, "OK"); - res.write(JSON.stringify(gManifestObject)); - res.processAsync(); - res.finish(); - }); - do_register_cleanup(() => gHttpServer.stop(() => {})); - - Services.prefs.setBoolPref("experiments.enabled", true); - Services.prefs.setCharPref("experiments.manifest.uri", - httpRoot + "manifests/handler"); - Services.prefs.setBoolPref("experiments.logging.dump", true); - Services.prefs.setCharPref("experiments.logging.level", "Trace"); -}); - -add_task(function* test_provider_basic() { - let e = Experiments.instance(); - - let provider = new Experiments.PreviousExperimentProvider(e); - e._setPreviousExperimentsProvider(provider); - - let deferred = Promise.defer(); - provider.getAddonsByTypes(["experiment"], (addons) => { - deferred.resolve(addons); - }); - let experimentAddons = yield deferred.promise; - Assert.ok(Array.isArray(experimentAddons), "getAddonsByTypes returns an Array."); - Assert.equal(experimentAddons.length, 0, "No previous add-ons returned."); - - gManifestObject = { - version: 1, - experiments: [ - { - id: EXPERIMENT1_ID, - xpiURL: gDataRoot + EXPERIMENT1_XPI_NAME, - xpiHash: EXPERIMENT1_XPI_SHA1, - startTime: Date.now() / 1000 - 60, - endTime: Date.now() / 1000 + 60, - maxActiveSeconds: 60, - appName: ["XPCShell"], - channel: [e._policy.updatechannel()], - }, - ], - }; - - yield e.updateManifest(); - - deferred = Promise.defer(); - provider.getAddonsByTypes(["experiment"], (addons) => { - deferred.resolve(addons); - }); - experimentAddons = yield deferred.promise; - Assert.equal(experimentAddons.length, 0, "Still no previous experiment."); - - let experiments = yield e.getExperiments(); - Assert.equal(experiments.length, 1, "1 experiment present."); - Assert.ok(experiments[0].active, "It is active."); - - // Deactivate it. - defineNow(e._policy, new Date(gManifestObject.experiments[0].endTime * 1000 + 1000)); - yield e.updateManifest(); - - experiments = yield e.getExperiments(); - Assert.equal(experiments.length, 1, "1 experiment present."); - Assert.equal(experiments[0].active, false, "It isn't active."); - - deferred = Promise.defer(); - provider.getAddonsByTypes(["experiment"], (addons) => { - deferred.resolve(addons); - }); - experimentAddons = yield deferred.promise; - Assert.equal(experimentAddons.length, 1, "1 previous add-on known."); - Assert.equal(experimentAddons[0].id, EXPERIMENT1_ID, "ID matches expected."); - - deferred = Promise.defer(); - provider.getAddonByID(EXPERIMENT1_ID, (addon) => { - deferred.resolve(addon); - }); - let addon = yield deferred.promise; - Assert.ok(addon, "We got an add-on from its ID."); - Assert.equal(addon.id, EXPERIMENT1_ID, "ID matches expected."); - Assert.ok(addon.appDisabled, "Add-on is a previous experiment."); - Assert.ok(addon.userDisabled, "Add-on is disabled."); - Assert.equal(addon.type, "experiment", "Add-on is an experiment."); - Assert.equal(addon.isActive, false, "Add-on is not active."); - Assert.equal(addon.permissions, 0, "Add-on has no permissions."); - - deferred = Promise.defer(); - AddonManager.getAddonsByTypes(["experiment"], (addons) => { - deferred.resolve(addons); - }); - experimentAddons = yield deferred.promise; - Assert.equal(experimentAddons.length, 1, "Got 1 experiment from add-on manager."); - Assert.equal(experimentAddons[0].id, EXPERIMENT1_ID, "ID matches expected."); - Assert.ok(experimentAddons[0].appDisabled, "It is a previous experiment add-on."); -}); - -add_task(function* test_active_and_previous() { - // Building on the previous test, activate experiment 2. - let e = Experiments.instance(); - let provider = new Experiments.PreviousExperimentProvider(e); - e._setPreviousExperimentsProvider(provider); - - gManifestObject = { - version: 1, - experiments: [ - { - id: EXPERIMENT2_ID, - xpiURL: gDataRoot + EXPERIMENT2_XPI_NAME, - xpiHash: EXPERIMENT2_XPI_SHA1, - startTime: Date.now() / 1000 - 60, - endTime: Date.now() / 1000 + 60, - maxActiveSeconds: 60, - appName: ["XPCShell"], - channel: [e._policy.updatechannel()], - }, - ], - }; - - defineNow(e._policy, new Date()); - yield e.updateManifest(); - - let experiments = yield e.getExperiments(); - Assert.equal(experiments.length, 2, "2 experiments known."); - - let deferred = Promise.defer(); - provider.getAddonsByTypes(["experiment"], (addons) => { - deferred.resolve(addons); - }); - let experimentAddons = yield deferred.promise; - Assert.equal(experimentAddons.length, 1, "1 previous experiment."); - - deferred = Promise.defer(); - AddonManager.getAddonsByTypes(["experiment"], (addons) => { - deferred.resolve(addons); - }); - experimentAddons = yield deferred.promise; - Assert.equal(experimentAddons.length, 2, "2 experiment add-ons known."); - - for (let addon of experimentAddons) { - if (addon.id == EXPERIMENT1_ID) { - Assert.equal(addon.isActive, false, "Add-on is not active."); - Assert.ok(addon.appDisabled, "Should be a previous experiment."); - } - else if (addon.id == EXPERIMENT2_ID) { - Assert.ok(addon.isActive, "Add-on is active."); - Assert.ok(!addon.appDisabled, "Should not be a previous experiment."); - } - else { - throw new Error("Unexpected add-on ID: " + addon.id); - } - } -}); diff --git a/browser/experiments/test/xpcshell/test_telemetry.js b/browser/experiments/test/xpcshell/test_telemetry.js deleted file mode 100644 index 02bd15d2b..000000000 --- a/browser/experiments/test/xpcshell/test_telemetry.js +++ /dev/null @@ -1,294 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - * http://creativecommons.org/publicdomain/zero/1.0/ */ - -"use strict"; - -Cu.import("resource://testing-common/httpd.js"); -Cu.import("resource://gre/modules/TelemetryLog.jsm"); -var bsp = Cu.import("resource:///modules/experiments/Experiments.jsm"); - - -const MANIFEST_HANDLER = "manifests/handler"; - -const SEC_IN_ONE_DAY = 24 * 60 * 60; -const MS_IN_ONE_DAY = SEC_IN_ONE_DAY * 1000; - - -var gHttpServer = null; -var gHttpRoot = null; -var gDataRoot = null; -var gPolicy = null; -var gManifestObject = null; -var gManifestHandlerURI = null; - -const TLOG = bsp.TELEMETRY_LOG; - -function checkEvent(event, id, data) -{ - do_print("Checking message " + id); - Assert.equal(event[0], id, "id should match"); - Assert.ok(event[1] > 0, "timestamp should be greater than 0"); - - if (data === undefined) { - Assert.equal(event.length, 2, "event array should have 2 entries"); - } else { - Assert.equal(event.length, data.length + 2, "event entry count should match expected count"); - for (var i = 0; i < data.length; ++i) { - Assert.equal(typeof(event[i + 2]), "string", "event entry should be a string"); - Assert.equal(event[i + 2], data[i], "event entry should match expected entry"); - } - } -} - -function run_test() { - run_next_test(); -} - -add_task(function* test_setup() { - loadAddonManager(); - - gHttpServer = new HttpServer(); - gHttpServer.start(-1); - let port = gHttpServer.identity.primaryPort; - gHttpRoot = "http://localhost:" + port + "/"; - gDataRoot = gHttpRoot + "data/"; - gManifestHandlerURI = gHttpRoot + MANIFEST_HANDLER; - gHttpServer.registerDirectory("/data/", do_get_cwd()); - gHttpServer.registerPathHandler("/" + MANIFEST_HANDLER, (request, response) => { - response.setStatusLine(null, 200, "OK"); - response.write(JSON.stringify(gManifestObject)); - response.processAsync(); - response.finish(); - }); - do_register_cleanup(() => gHttpServer.stop(() => {})); - - Services.prefs.setBoolPref(PREF_EXPERIMENTS_ENABLED, true); - Services.prefs.setIntPref(PREF_LOGGING_LEVEL, 0); - Services.prefs.setBoolPref(PREF_LOGGING_DUMP, true); - Services.prefs.setCharPref(PREF_MANIFEST_URI, gManifestHandlerURI); - Services.prefs.setIntPref(PREF_FETCHINTERVAL, 0); - - gPolicy = new Experiments.Policy(); - let dummyTimer = { cancel: () => {}, clear: () => {} }; - patchPolicy(gPolicy, { - updatechannel: () => "nightly", - oneshotTimer: (callback, timeout, thisObj, name) => dummyTimer, - }); - - yield removeCacheFile(); -}); - -// Test basic starting and stopping of experiments. - -add_task(function* test_telemetryBasics() { - // Check TelemetryLog instead of TelemetrySession.getPayload().log because - // TelemetrySession gets Experiments.instance() and side-effects log entries. - - let expectedLogLength = 0; - - // Dates the following tests are based on. - - let baseDate = new Date(2014, 5, 1, 12); - let startDate1 = futureDate(baseDate, 50 * MS_IN_ONE_DAY); - let endDate1 = futureDate(baseDate, 100 * MS_IN_ONE_DAY); - let startDate2 = futureDate(baseDate, 150 * MS_IN_ONE_DAY); - let endDate2 = futureDate(baseDate, 200 * MS_IN_ONE_DAY); - - // The manifest data we test with. - - gManifestObject = { - "version": 1, - experiments: [ - { - id: EXPERIMENT1_ID, - xpiURL: gDataRoot + EXPERIMENT1_XPI_NAME, - xpiHash: EXPERIMENT1_XPI_SHA1, - startTime: dateToSeconds(startDate1), - endTime: dateToSeconds(endDate1), - maxActiveSeconds: 10 * SEC_IN_ONE_DAY, - appName: ["XPCShell"], - channel: ["nightly"], - }, - { - id: EXPERIMENT2_ID, - xpiURL: gDataRoot + EXPERIMENT2_XPI_NAME, - xpiHash: EXPERIMENT2_XPI_SHA1, - startTime: dateToSeconds(startDate2), - endTime: dateToSeconds(endDate2), - maxActiveSeconds: 10 * SEC_IN_ONE_DAY, - appName: ["XPCShell"], - channel: ["nightly"], - }, - ], - }; - - let experiments = new Experiments.Experiments(gPolicy); - - // Trigger update, clock set to before any activation. - // Use updateManifest() to provide for coverage of that path. - - let now = baseDate; - defineNow(gPolicy, now); - - yield experiments.updateManifest(); - let list = yield experiments.getExperiments(); - Assert.equal(list.length, 0, "Experiment list should be empty."); - - expectedLogLength += 2; - let log = TelemetryLog.entries(); - do_print("Telemetry log: " + JSON.stringify(log)); - Assert.equal(log.length, expectedLogLength, "Telemetry log should have " + expectedLogLength + " entries."); - checkEvent(log[log.length-2], TLOG.ACTIVATION_KEY, - [TLOG.ACTIVATION.REJECTED, EXPERIMENT1_ID, "startTime"]); - checkEvent(log[log.length-1], TLOG.ACTIVATION_KEY, - [TLOG.ACTIVATION.REJECTED, EXPERIMENT2_ID, "startTime"]); - - // Trigger update, clock set for experiment 1 to start. - - now = futureDate(startDate1, 5 * MS_IN_ONE_DAY); - defineNow(gPolicy, now); - - yield experiments.updateManifest(); - list = yield experiments.getExperiments(); - Assert.equal(list.length, 1, "Experiment list should have 1 entry now."); - - expectedLogLength += 1; - log = TelemetryLog.entries(); - Assert.equal(log.length, expectedLogLength, "Telemetry log should have " + expectedLogLength + " entries. Got " + log.toSource()); - checkEvent(log[log.length-1], TLOG.ACTIVATION_KEY, - [TLOG.ACTIVATION.ACTIVATED, EXPERIMENT1_ID]); - - // Trigger update, clock set for experiment 1 to stop. - - now = futureDate(endDate1, 1000); - defineNow(gPolicy, now); - - yield experiments.updateManifest(); - list = yield experiments.getExperiments(); - Assert.equal(list.length, 1, "Experiment list should have 1 entry."); - - expectedLogLength += 2; - log = TelemetryLog.entries(); - Assert.equal(log.length, expectedLogLength, "Telemetry log should have " + expectedLogLength + " entries."); - checkEvent(log[log.length-2], TLOG.TERMINATION_KEY, - [TLOG.TERMINATION.EXPIRED, EXPERIMENT1_ID]); - checkEvent(log[log.length-1], TLOG.ACTIVATION_KEY, - [TLOG.ACTIVATION.REJECTED, EXPERIMENT2_ID, "startTime"]); - - // Trigger update, clock set for experiment 2 to start with invalid hash. - - now = startDate2; - defineNow(gPolicy, now); - gManifestObject.experiments[1].xpiHash = "sha1:0000000000000000000000000000000000000000"; - - yield experiments.updateManifest(); - list = yield experiments.getExperiments(); - Assert.equal(list.length, 1, "Experiment list should have 1 entries."); - - expectedLogLength += 1; - log = TelemetryLog.entries(); - Assert.equal(log.length, expectedLogLength, "Telemetry log should have " + expectedLogLength + " entries."); - checkEvent(log[log.length-1], TLOG.ACTIVATION_KEY, - [TLOG.ACTIVATION.INSTALL_FAILURE, EXPERIMENT2_ID]); - - // Trigger update, clock set for experiment 2 to properly start now. - - now = futureDate(now, MS_IN_ONE_DAY); - defineNow(gPolicy, now); - gManifestObject.experiments[1].xpiHash = EXPERIMENT2_XPI_SHA1; - - yield experiments.updateManifest(); - list = yield experiments.getExperiments(); - Assert.equal(list.length, 2, "Experiment list should have 2 entries."); - - expectedLogLength += 1; - log = TelemetryLog.entries(); - Assert.equal(log.length, expectedLogLength, "Telemetry log should have " + expectedLogLength + " entries."); - checkEvent(log[log.length-1], TLOG.ACTIVATION_KEY, - [TLOG.ACTIVATION.ACTIVATED, EXPERIMENT2_ID]); - - // Fake user uninstall of experiment via add-on manager. - - now = futureDate(now, MS_IN_ONE_DAY); - defineNow(gPolicy, now); - - yield experiments.disableExperiment(TLOG.TERMINATION.ADDON_UNINSTALLED); - list = yield experiments.getExperiments(); - Assert.equal(list.length, 2, "Experiment list should have 2 entries."); - - expectedLogLength += 1; - log = TelemetryLog.entries(); - Assert.equal(log.length, expectedLogLength, "Telemetry log should have " + expectedLogLength + " entries."); - checkEvent(log[log.length-1], TLOG.TERMINATION_KEY, - [TLOG.TERMINATION.ADDON_UNINSTALLED, EXPERIMENT2_ID]); - - // Trigger update with experiment 1a ready to start. - - now = futureDate(now, MS_IN_ONE_DAY); - defineNow(gPolicy, now); - gManifestObject.experiments[0].id = EXPERIMENT3_ID; - gManifestObject.experiments[0].endTime = dateToSeconds(futureDate(now, 50 * MS_IN_ONE_DAY)); - - yield experiments.updateManifest(); - list = yield experiments.getExperiments(); - Assert.equal(list.length, 3, "Experiment list should have 3 entries."); - - expectedLogLength += 1; - log = TelemetryLog.entries(); - Assert.equal(log.length, expectedLogLength, "Telemetry log should have " + expectedLogLength + " entries."); - checkEvent(log[log.length-1], TLOG.ACTIVATION_KEY, - [TLOG.ACTIVATION.ACTIVATED, EXPERIMENT3_ID]); - - // Trigger disable of an experiment via the API. - - now = futureDate(now, MS_IN_ONE_DAY); - defineNow(gPolicy, now); - - yield experiments.disableExperiment(TLOG.TERMINATION.FROM_API); - list = yield experiments.getExperiments(); - Assert.equal(list.length, 3, "Experiment list should have 3 entries."); - - expectedLogLength += 1; - log = TelemetryLog.entries(); - Assert.equal(log.length, expectedLogLength, "Telemetry log should have " + expectedLogLength + " entries."); - checkEvent(log[log.length-1], TLOG.TERMINATION_KEY, - [TLOG.TERMINATION.FROM_API, EXPERIMENT3_ID]); - - // Trigger update with experiment 1a ready to start. - - now = futureDate(now, MS_IN_ONE_DAY); - defineNow(gPolicy, now); - gManifestObject.experiments[0].id = EXPERIMENT4_ID; - gManifestObject.experiments[0].endTime = dateToSeconds(futureDate(now, 50 * MS_IN_ONE_DAY)); - - yield experiments.updateManifest(); - list = yield experiments.getExperiments(); - Assert.equal(list.length, 4, "Experiment list should have 4 entries."); - - expectedLogLength += 1; - log = TelemetryLog.entries(); - Assert.equal(log.length, expectedLogLength, "Telemetry log should have " + expectedLogLength + " entries."); - checkEvent(log[log.length-1], TLOG.ACTIVATION_KEY, - [TLOG.ACTIVATION.ACTIVATED, EXPERIMENT4_ID]); - - // Trigger experiment termination by something other than expiry via the manifest. - - now = futureDate(now, MS_IN_ONE_DAY); - defineNow(gPolicy, now); - gManifestObject.experiments[0].os = "Plan9"; - - yield experiments.updateManifest(); - list = yield experiments.getExperiments(); - Assert.equal(list.length, 4, "Experiment list should have 4 entries."); - - expectedLogLength += 1; - log = TelemetryLog.entries(); - Assert.equal(log.length, expectedLogLength, "Telemetry log should have " + expectedLogLength + " entries."); - checkEvent(log[log.length-1], TLOG.TERMINATION_KEY, - [TLOG.TERMINATION.RECHECK, EXPERIMENT4_ID, "os"]); - - // Cleanup. - - yield promiseRestartManager(); - yield removeCacheFile(); -}); diff --git a/browser/experiments/test/xpcshell/test_telemetry_disabled.js b/browser/experiments/test/xpcshell/test_telemetry_disabled.js deleted file mode 100644 index 74f85ccfc..000000000 --- a/browser/experiments/test/xpcshell/test_telemetry_disabled.js +++ /dev/null @@ -1,21 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - * http://creativecommons.org/publicdomain/zero/1.0/ */ - -"use strict"; - -Cu.import("resource:///modules/experiments/Experiments.jsm"); - -add_test(function test_experiments_activation() { - do_get_profile(); - loadAddonManager(); - - Services.prefs.setBoolPref(PREF_EXPERIMENTS_ENABLED, true); - Services.prefs.setBoolPref(PREF_TELEMETRY_ENABLED, false); - - let experiments = Experiments.instance(); - Assert.ok(!experiments.enabled, "Experiments must be disabled if Telemetry is disabled."); - - // TODO: Test that Experiments are turned back on when bug 1232648 lands. - - run_next_test(); -}); diff --git a/browser/experiments/test/xpcshell/test_upgrade.js b/browser/experiments/test/xpcshell/test_upgrade.js deleted file mode 100644 index f094a406d..000000000 --- a/browser/experiments/test/xpcshell/test_upgrade.js +++ /dev/null @@ -1,52 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - * http://creativecommons.org/publicdomain/zero/1.0/ */ - -"use strict"; -Cu.import("resource:///modules/experiments/Experiments.jsm"); - -var cacheData = { - _enabled: true, - _manifestData: { - id: "foobartestid", - xpiURL: "http://example.com/foo.xpi", - xpiHash: "sha256:abcde", - startTime: 0, - endTime: 2000000000, - maxActiveSeconds: 40000000, - appName: "TestApp", - channel: "test-foo", - }, - _needsUpdate: false, - _randomValue: 0.5, - _failedStart: false, - _name: "Foo", - _description: "Foobar", - _homepageURL: "", - _addonId: "foo@test", - _startDate: 0, - _endDate: 2000000000, - _branch: null -}; - -add_task(function* test_valid() { - let e = new Experiments.ExperimentEntry(); - Assert.ok(e.initFromCacheData(cacheData)); - Assert.ok(e.enabled); -}); - -add_task(function* test_upgrade() { - let e = new Experiments.ExperimentEntry(); - delete cacheData._branch; - Assert.ok(e.initFromCacheData(cacheData)); - Assert.ok(e.enabled); -}); - -add_task(function* test_missing() { - let e = new Experiments.ExperimentEntry(); - delete cacheData._name; - Assert.ok(!e.initFromCacheData(cacheData)); -}); - -function run_test() { - run_next_test(); -} diff --git a/browser/experiments/test/xpcshell/xpcshell.ini b/browser/experiments/test/xpcshell/xpcshell.ini deleted file mode 100644 index 5ea30976c..000000000 --- a/browser/experiments/test/xpcshell/xpcshell.ini +++ /dev/null @@ -1,31 +0,0 @@ -[DEFAULT] -head = head.js -tail = -tags = addons -firefox-appdir = browser -skip-if = toolkit == 'android' -support-files = - experiments_1.manifest - experiment-1.xpi - experiment-1a.xpi - experiment-2.xpi - experiment-racybranch.xpi - !/toolkit/mozapps/extensions/test/xpcshell/head_addons.js -generated-files = - experiment-1.xpi - experiment-1a.xpi - experiment-2.xpi - experiment-racybranch.xpi - -[test_activate.js] -[test_api.js] -[test_cache.js] -[test_cacherace.js] -[test_conditions.js] -[test_disableExperiments.js] -[test_fetch.js] -[test_telemetry.js] -[test_telemetry_disabled.js] -[test_previous_provider.js] -[test_upgrade.js] -[test_nethang_bug1012924.js] diff --git a/browser/extensions/aushelper/bootstrap.js b/browser/extensions/aushelper/bootstrap.js deleted file mode 100644 index f57f621e1..000000000 --- a/browser/extensions/aushelper/bootstrap.js +++ /dev/null @@ -1,189 +0,0 @@ -/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -const {classes: Cc, interfaces: Ci, utils: Cu} = Components; - -const APP_UPDATE_URL_PREF = "app.update.url"; -const REPLACE_KEY = "%OS_VERSION%"; - -const AUSHELPER_CPU_RESULT_CODE_HISTOGRAM_ID = "AUSHELPER_CPU_RESULT_CODE"; -// The system is not vulnerable to Bug 1296630. -const CPU_NO_BUG1296630 = 1; -// The system is vulnerable to Bug 1296630. -const CPU_YES_BUG1296630 = 2; -// An error occured when checking if the system is vulnerable to Bug 1296630. -const CPU_ERR_BUG1296630 = 3; -// It is unknown whether the system is vulnerable to Bug 1296630 (should never happen). -const CPU_UNKNOWN_BUG1296630 = 4; - -const AUSHELPER_CPU_ERROR_CODE_HISTOGRAM_ID = "AUSHELPER_CPU_ERROR_CODE"; -const CPU_SUCCESS = 0; -const CPU_REG_OPEN_ERROR = 1; -const CPU_VENDOR_ID_ERROR = 2; -const CPU_ID_ERROR = 4; -const CPU_REV_ERROR = 8; - -const AUSHELPER_WEBSENSE_REG_VERSION_SCALAR_NAME = "aushelper.websense_reg_version"; -const AUSHELPER_WEBSENSE_REG_EXISTS_HISTOGRAM_ID = "AUSHELPER_WEBSENSE_REG_EXISTS"; - -const AUSHELPER_WEBSENSE_ERROR_CODE_HISTOGRAM_ID = "AUSHELPER_WEBSENSE_ERROR_CODE"; -const WEBSENSE_SUCCESS = 0; -const WEBSENSE_REG_OPEN_ERROR = 1; -const WEBSENSE_REG_READ_ERROR = 2; -const WEBSENSE_ALREADY_MODIFIED = 4; - -Cu.import("resource://gre/modules/Services.jsm"); - -function startup() { - if (Services.appinfo.OS != "WINNT") { - return; - } - - const regCPUPath = "HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0"; - let wrk; - let cpuErrorCode = CPU_SUCCESS; - try { - wrk = Cc["@mozilla.org/windows-registry-key;1"].createInstance(Ci.nsIWindowsRegKey); - wrk.open(wrk.ROOT_KEY_LOCAL_MACHINE, regCPUPath, wrk.ACCESS_READ); - } catch (e) { - Cu.reportError("AUSHelper - unable to open registry. Exception: " + e); - cpuErrorCode |= CPU_REG_OPEN_ERROR; - } - - // If any of the following values are successfully retrieved and they don't - // match the condition for that value then it is safe to update. Hence why the - // following checks are somewhat convoluted. The possible values for the - // variable set by each check is as follows: - // - // | Match | No Match | Error | - // variable | true | false | null | - - let cpuVendorIDMatch = false; - try { - let cpuVendorID = wrk.readStringValue("VendorIdentifier"); - if (cpuVendorID.toLowerCase() == "genuineintel") { - cpuVendorIDMatch = true; - } - } catch (e) { - Cu.reportError("AUSHelper - error getting CPU vendor indentifier. Exception: " + e); - cpuVendorIDMatch = null; - cpuErrorCode |= CPU_VENDOR_ID_ERROR; - } - - let cpuIDMatch = false; - try { - let cpuID = wrk.readStringValue("Identifier"); - if (cpuID.toLowerCase().indexOf("family 6 model 61 stepping 4") != -1) { - cpuIDMatch = true; - } - } catch (e) { - Cu.reportError("AUSHelper - error getting CPU indentifier. Exception: " + e); - cpuIDMatch = null; - cpuErrorCode |= CPU_ID_ERROR; - } - - let microCodeVersions = [0xe, 0x11, 0x12, 0x13, 0x16, 0x18, 0x19]; - let cpuRevMatch = null; - try { - let keyNames = ["Update Revision", "Update Signature"]; - for (let i = 0; i < keyNames.length; ++i) { - try { - let regVal = wrk.readBinaryValue(keyNames[i]); - if (regVal.length == 8) { - let hexVal = []; - // We are only inyterested in the upper 4 bytes and the little endian - // value for it. - for (let j = 4; j < 8; j++) { - let c = regVal.charCodeAt(j).toString(16); - if (c.length == 1) { - c = "0" + c; - } - hexVal.unshift(c); - } - cpuRevMatch = false; - if (microCodeVersions.indexOf(parseInt(hexVal.join(''))) != -1) { - cpuRevMatch = true; - } - break; - } - } catch (e) { - if (i == keyNames.length - 1) { - // The registry key name's value was not successfully queried. - cpuRevMatch = null; - cpuErrorCode |= CPU_REV_ERROR; - } - } - } - wrk.close(); - } catch (ex) { - Cu.reportError("AUSHelper - error getting CPU revision. Exception: " + ex); - cpuRevMatch = null; - cpuErrorCode |= CPU_REV_ERROR; - } - - let cpuResult = CPU_UNKNOWN_BUG1296630; - let cpuValue = "(unkBug1296630v1)"; - // The following uses strict equality checks since the values can be true, - // false, or null. - if (cpuVendorIDMatch === false || cpuIDMatch === false || cpuRevMatch === false) { - // Since one of the values is false then the system won't be affected by - // bug 1296630 according to the conditions set out in bug 1311515. - cpuValue = "(noBug1296630v1)"; - cpuResult = CPU_NO_BUG1296630; - } else if (cpuVendorIDMatch === null || cpuIDMatch === null || cpuRevMatch === null) { - // Since one of the values is null we can't say for sure if the system will - // be affected by bug 1296630. - cpuValue = "(errBug1296630v1)"; - cpuResult = CPU_ERR_BUG1296630; - } else if (cpuVendorIDMatch === true && cpuIDMatch === true && cpuRevMatch === true) { - // Since all of the values are true we can say that the system will be - // affected by bug 1296630. - cpuValue = "(yesBug1296630v1)"; - cpuResult = CPU_YES_BUG1296630; - } - - Services.telemetry.getHistogramById(AUSHELPER_CPU_RESULT_CODE_HISTOGRAM_ID).add(cpuResult); - Services.telemetry.getHistogramById(AUSHELPER_CPU_ERROR_CODE_HISTOGRAM_ID).add(cpuErrorCode); - - const regWebsensePath = "Websense\\Agent"; - let websenseErrorCode = WEBSENSE_SUCCESS; - let websenseVersion = ""; - try { - let regModes = [wrk.ACCESS_READ, wrk.ACCESS_READ | wrk.WOW64_64]; - for (let i = 0; i < regModes.length; ++i) { - wrk.open(wrk.ROOT_KEY_LOCAL_MACHINE, "SOFTWARE", regModes[i]); - try { - if (wrk.hasChild(regWebsensePath)) { - let childKey = wrk.openChild(regWebsensePath, wrk.ACCESS_READ); - websenseVersion = childKey.readStringValue("InstallVersion"); - Services.telemetry.scalarSet(AUSHELPER_WEBSENSE_REG_VERSION_SCALAR_NAME, websenseVersion); - } - wrk.close(); - } catch (e) { - Cu.reportError("AUSHelper - unable to read registry. Exception: " + e); - websenseErrorCode |= WEBSENSE_REG_READ_ERROR; - } - } - } catch (ex) { - Cu.reportError("AUSHelper - unable to open registry. Exception: " + ex); - websenseErrorCode |= WEBSENSE_REG_OPEN_ERROR; - } - - Services.telemetry.getHistogramById(AUSHELPER_WEBSENSE_REG_EXISTS_HISTOGRAM_ID).add(!!websenseVersion); - let websenseValue = "(" + (websenseVersion ? "websense-" + websenseVersion : "nowebsense") + ")"; - - let branch = Services.prefs.getDefaultBranch(""); - let curValue = branch.getCharPref(APP_UPDATE_URL_PREF); - if (curValue.indexOf(REPLACE_KEY + "/") > -1) { - let newValue = curValue.replace(REPLACE_KEY + "/", REPLACE_KEY + cpuValue + websenseValue + "/"); - branch.setCharPref(APP_UPDATE_URL_PREF, newValue); - } else { - websenseErrorCode |= WEBSENSE_ALREADY_MODIFIED; - } - Services.telemetry.getHistogramById(AUSHELPER_WEBSENSE_ERROR_CODE_HISTOGRAM_ID).add(websenseErrorCode); -} -function shutdown() {} -function install() {} -function uninstall() {} diff --git a/browser/extensions/aushelper/install.rdf.in b/browser/extensions/aushelper/install.rdf.in deleted file mode 100644 index 78e841d88..000000000 --- a/browser/extensions/aushelper/install.rdf.in +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0"?> -<!-- This Source Code Form is subject to the terms of the Mozilla Public - - License, v. 2.0. If a copy of the MPL was not distributed with this - - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - -#filter substitution - -<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:em="http://www.mozilla.org/2004/em-rdf#"> - - <Description about="urn:mozilla:install-manifest"> - <em:id>aushelper@mozilla.org</em:id> - <em:version>2.0</em:version> - <em:type>2</em:type> - <em:bootstrap>true</em:bootstrap> - <em:multiprocessCompatible>true</em:multiprocessCompatible> - - <!-- Target Application this extension can install into, - with minimum and maximum supported versions. --> - <em:targetApplication> - <Description> - <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id> - <em:minVersion>@MOZ_APP_VERSION@</em:minVersion> - <em:maxVersion>@MOZ_APP_MAXVERSION@</em:maxVersion> - </Description> - </em:targetApplication> - - <!-- Front End MetaData --> - <em:name>Application Update Service Helper</em:name> - <em:description>Sets value(s) in the update url based on custom checks.</em:description> - </Description> -</RDF> diff --git a/browser/extensions/aushelper/moz.build b/browser/extensions/aushelper/moz.build deleted file mode 100644 index a4ff06055..000000000 --- a/browser/extensions/aushelper/moz.build +++ /dev/null @@ -1,16 +0,0 @@ -# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*- -# vim: set filetype=python: -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -DEFINES['MOZ_APP_VERSION'] = CONFIG['MOZ_APP_VERSION'] -DEFINES['MOZ_APP_MAXVERSION'] = CONFIG['MOZ_APP_MAXVERSION'] - -FINAL_TARGET_FILES.features['aushelper@mozilla.org'] += [ - 'bootstrap.js' -] - -FINAL_TARGET_PP_FILES.features['aushelper@mozilla.org'] += [ - 'install.rdf.in' -] diff --git a/browser/extensions/e10srollout/bootstrap.js b/browser/extensions/e10srollout/bootstrap.js deleted file mode 100644 index 0da7ac225..000000000 --- a/browser/extensions/e10srollout/bootstrap.js +++ /dev/null @@ -1,197 +0,0 @@ -/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -"use strict"; - -const {classes: Cc, interfaces: Ci, utils: Cu} = Components; - -Cu.import("resource://gre/modules/Preferences.jsm"); -Cu.import("resource://gre/modules/Services.jsm"); -Cu.import("resource://gre/modules/UpdateUtils.jsm"); -Cu.import("resource://gre/modules/AppConstants.jsm"); - - // The amount of people to be part of e10s -const TEST_THRESHOLD = { - "beta" : 0.5, // 50% - "release" : 1.0, // 100% - "esr" : 1.0, // 100% -}; - -const ADDON_ROLLOUT_POLICY = { - "beta" : "51alladdons", // Any WebExtension or addon except with mpc = false - "release" : "51set1", - "esr" : "esrA", // WebExtensions and Addons with mpc=true -}; - -if (AppConstants.RELEASE_OR_BETA) { - // Bug 1348576 - e10s is never enabled for non-official release builds - // This is hacky, but the problem it solves is the following: - // the e10s rollout is controlled by the channel name, which - // is the only way to distinguish between Beta and Release. - // However, non-official release builds (like the ones done by distros - // to ship Firefox on their package managers) do not set a value - // for the release channel, which gets them to the default value - // of.. (drumroll) "default". - // But we can't just always configure the same settings for the - // "default" channel because that's also the name that a locally - // built Firefox gets, and e10s is managed in a different way - // there (directly by prefs, on Nightly and Aurora). - TEST_THRESHOLD.default = TEST_THRESHOLD.release; - ADDON_ROLLOUT_POLICY.default = ADDON_ROLLOUT_POLICY.release; -} - - -const PREF_COHORT_SAMPLE = "e10s.rollout.cohortSample"; -const PREF_COHORT_NAME = "e10s.rollout.cohort"; -const PREF_E10S_OPTED_IN = "browser.tabs.remote.autostart"; -const PREF_E10S_FORCE_ENABLED = "browser.tabs.remote.force-enable"; -const PREF_E10S_FORCE_DISABLED = "browser.tabs.remote.force-disable"; -const PREF_TOGGLE_E10S = "browser.tabs.remote.autostart.2"; -const PREF_E10S_ADDON_POLICY = "extensions.e10s.rollout.policy"; -const PREF_E10S_ADDON_BLOCKLIST = "extensions.e10s.rollout.blocklist"; -const PREF_E10S_HAS_NONEXEMPT_ADDON = "extensions.e10s.rollout.hasAddon"; - -function startup() { - // In theory we only need to run this once (on install()), but - // it's better to also run it on every startup. If the user has - // made manual changes to the prefs, this will keep the data - // reported more accurate. - // It's also fine (and preferred) to just do it here on startup - // (instead of observing prefs), because e10s takes a restart - // to take effect, so we keep the data based on how it was when - // the session started. - defineCohort(); -} - -function install() { - defineCohort(); -} - -let cohortDefinedOnThisSession = false; - -function defineCohort() { - // Avoid running twice when it was called by install() first - if (cohortDefinedOnThisSession) { - return; - } - cohortDefinedOnThisSession = true; - - let updateChannel = UpdateUtils.getUpdateChannel(false); - if (!(updateChannel in TEST_THRESHOLD)) { - setCohort("unsupportedChannel"); - return; - } - - let addonPolicy = "unknown"; - if (updateChannel in ADDON_ROLLOUT_POLICY) { - addonPolicy = ADDON_ROLLOUT_POLICY[updateChannel]; - Preferences.set(PREF_E10S_ADDON_POLICY, addonPolicy); - // This is also the proper place to set the blocklist pref - // in case it is necessary. - - Preferences.set(PREF_E10S_ADDON_BLOCKLIST, - // bug 1185672 - Tab Mix Plus - "{dc572301-7619-498c-a57d-39143191b318};" + - // bug 1332692 - LastPass - "support@lastpass.com;"); - } else { - Preferences.reset(PREF_E10S_ADDON_POLICY); - } - - let userOptedOut = optedOut(); - let userOptedIn = optedIn(); - let disqualified = (Services.appinfo.multiprocessBlockPolicy != 0); - let testGroup = (getUserSample() < TEST_THRESHOLD[updateChannel]); - let hasNonExemptAddon = Preferences.get(PREF_E10S_HAS_NONEXEMPT_ADDON, false); - let temporaryDisqualification = getTemporaryDisqualification(); - - let cohortPrefix = ""; - if (disqualified) { - cohortPrefix = "disqualified-"; - } else if (hasNonExemptAddon) { - cohortPrefix = `addons-set${addonPolicy}-`; - } - - if (userOptedOut) { - setCohort("optedOut"); - } else if (userOptedIn) { - setCohort("optedIn"); - } else if (temporaryDisqualification != "") { - // Users who are disqualified by the backend (from multiprocessBlockPolicy) - // can be put into either the test or control groups, because e10s will - // still be denied by the backend, which is useful so that the E10S_STATUS - // telemetry probe can be correctly set. - - // For these volatile disqualification reasons, however, we must not try - // to activate e10s because the backend doesn't know about it. E10S_STATUS - // here will be accumulated as "2 - Disabled", which is fine too. - setCohort(`temp-disqualified-${temporaryDisqualification}`); - Preferences.reset(PREF_TOGGLE_E10S); - } else if (testGroup) { - setCohort(`${cohortPrefix}test`); - Preferences.set(PREF_TOGGLE_E10S, true); - } else { - setCohort(`${cohortPrefix}control`); - Preferences.reset(PREF_TOGGLE_E10S); - } -} - -function shutdown(data, reason) { -} - -function uninstall() { -} - -function getUserSample() { - let prefValue = Preferences.get(PREF_COHORT_SAMPLE, undefined); - let value = 0.0; - - if (typeof(prefValue) == "string") { - value = parseFloat(prefValue, 10); - return value; - } - - if (typeof(prefValue) == "number") { - // convert old integer value - value = prefValue / 100; - } else { - value = Math.random(); - } - - Preferences.set(PREF_COHORT_SAMPLE, value.toString().substr(0, 8)); - return value; -} - -function setCohort(cohortName) { - Preferences.set(PREF_COHORT_NAME, cohortName); - try { - if (Ci.nsICrashReporter) { - Services.appinfo.QueryInterface(Ci.nsICrashReporter).annotateCrashReport("E10SCohort", cohortName); - } - } catch (e) {} -} - -function optedIn() { - return Preferences.get(PREF_E10S_OPTED_IN, false) || - Preferences.get(PREF_E10S_FORCE_ENABLED, false); -} - -function optedOut() { - // Users can also opt-out by toggling back the pref to false. - // If they reset the pref instead they might be re-enabled if - // they are still part of the threshold. - return Preferences.get(PREF_E10S_FORCE_DISABLED, false) || - (Preferences.isSet(PREF_TOGGLE_E10S) && - Preferences.get(PREF_TOGGLE_E10S) == false); -} - -/* If this function returns a non-empty string, it - * means that this particular user should be temporarily - * disqualified due to some particular reason. - * If a user shouldn't be disqualified, then an empty - * string must be returned. - */ -function getTemporaryDisqualification() { - return ""; -} diff --git a/browser/extensions/e10srollout/install.rdf.in b/browser/extensions/e10srollout/install.rdf.in deleted file mode 100644 index 19ff58471..000000000 --- a/browser/extensions/e10srollout/install.rdf.in +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0"?> -<!-- This Source Code Form is subject to the terms of the Mozilla Public - - License, v. 2.0. If a copy of the MPL was not distributed with this - - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - -#filter substitution - -<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:em="http://www.mozilla.org/2004/em-rdf#"> - - <Description about="urn:mozilla:install-manifest"> - <em:id>e10srollout@mozilla.org</em:id> - <em:version>1.10</em:version> - <em:type>2</em:type> - <em:bootstrap>true</em:bootstrap> - <em:multiprocessCompatible>true</em:multiprocessCompatible> - - <!-- Target Application this theme can install into, - with minimum and maximum supported versions. --> - <em:targetApplication> - <Description> - <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id> - <em:minVersion>@MOZ_APP_VERSION@</em:minVersion> - <em:maxVersion>@MOZ_APP_MAXVERSION@</em:maxVersion> - </Description> - </em:targetApplication> - - <!-- Front End MetaData --> - <em:name>Multi-process staged rollout</em:name> - <em:description>Staged rollout of Firefox multi-process feature.</em:description> - </Description> -</RDF> diff --git a/browser/extensions/e10srollout/moz.build b/browser/extensions/e10srollout/moz.build deleted file mode 100644 index 9b5a16d5a..000000000 --- a/browser/extensions/e10srollout/moz.build +++ /dev/null @@ -1,16 +0,0 @@ -# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*- -# vim: set filetype=python: -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -DEFINES['MOZ_APP_VERSION'] = CONFIG['MOZ_APP_VERSION'] -DEFINES['MOZ_APP_MAXVERSION'] = CONFIG['MOZ_APP_MAXVERSION'] - -FINAL_TARGET_FILES.features['e10srollout@mozilla.org'] += [ - 'bootstrap.js' -] - -FINAL_TARGET_PP_FILES.features['e10srollout@mozilla.org'] += [ - 'install.rdf.in' -] diff --git a/browser/extensions/flyweb/bootstrap.js b/browser/extensions/flyweb/bootstrap.js deleted file mode 100644 index 089226519..000000000 --- a/browser/extensions/flyweb/bootstrap.js +++ /dev/null @@ -1,297 +0,0 @@ -/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -const {classes: Cc, interfaces: Ci, utils: Cu} = Components; - -Cu.import("resource://gre/modules/XPCOMUtils.jsm"); - -XPCOMUtils.defineLazyModuleGetter(this, "CustomizableUI", - "resource:///modules/CustomizableUI.jsm"); -XPCOMUtils.defineLazyModuleGetter(this, "Console", - "resource://gre/modules/Console.jsm"); -XPCOMUtils.defineLazyModuleGetter(this, "Services", - "resource://gre/modules/Services.jsm"); -XPCOMUtils.defineLazyModuleGetter(this, "Integration", - "resource://gre/modules/Integration.jsm"); -XPCOMUtils.defineLazyModuleGetter(this, "PermissionUI", - "resource:///modules/PermissionUI.jsm"); - -XPCOMUtils.defineLazyGetter(this, "gFlyWebBundle", function() { - const tns = { - "flyweb-button.label": "FlyWeb", - "flyweb-button.tooltiptext": "Discover nearby FlyWeb services", - "flyweb-items-empty": "There are no FlyWeb services currently nearby" - }; - return { - GetStringFromName(name) { - return tns[name]; - } - }; -}); - -const FLYWEB_ENABLED_PREF = "dom.flyweb.enabled"; - -function install(aData, aReason) {} - -function uninstall(aData, aReason) {} - -function startup(aData, aReason) { - // Observe pref changes and enable/disable as necessary. - Services.prefs.addObserver(FLYWEB_ENABLED_PREF, prefObserver, false); - - // Only initialize if pref is enabled. - let enabled = Services.prefs.getBoolPref(FLYWEB_ENABLED_PREF); - if (enabled) { - FlyWebView.init(); - } -} - -function shutdown(aData, aReason) { - Services.prefs.removeObserver(FLYWEB_ENABLED_PREF, prefObserver); - - let enabled = Services.prefs.getBoolPref(FLYWEB_ENABLED_PREF); - if (enabled) { - FlyWebView.uninit(); - } -} - -// use enabled pref as a way for tests (e.g. test_contextmenu.html) to disable -// the addon when running. -function prefObserver(aSubject, aTopic, aData) { - let enabled = Services.prefs.getBoolPref(FLYWEB_ENABLED_PREF); - if (enabled) { - FlyWebView.init(); - } else { - FlyWebView.uninit(); - } -} - -let gDiscoveryManagerInstance; - -class DiscoveryManager { - constructor(aWindow) { - this._discoveryManager = new aWindow.FlyWebDiscoveryManager(); - } - - destroy() { - if (this._id) { - this.stop(); - } - - this._discoveryManager = null; - } - - start(callback) { - if (!this._id) { - this._id = this._discoveryManager.startDiscovery(this); - } - - this._callback = callback; - } - - stop() { - this._discoveryManager.stopDiscovery(this._id); - - this._id = null; - } - - pairWith(serviceId, callback) { - this._discoveryManager.pairWithService(serviceId, { - pairingSucceeded(service) { - callback(service); - }, - - pairingFailed(error) { - console.error("FlyWeb failed to pair with service " + serviceId, error); - } - }); - } - - onDiscoveredServicesChanged(services) { - if (!this._id || !this._callback) { - return; - } - - this._callback(services); - } -} - -const FlyWebPermissionPromptIntegration = (base) => ({ - __proto__: base, - createPermissionPrompt(type, request) { - if (type != "flyweb-publish-server") { - return super.createPermissionPrompt(...arguments); - } - - return { - __proto__: PermissionUI.PermissionPromptForRequestPrototype, - get request() { - return request; - }, - get permissionKey() { - return "flyweb-publish-server"; - }, - get popupOptions() { - return { - learnMoreURL: "https://flyweb.github.io", - popupIconURL: "chrome://flyweb/skin/icon-64.png", - }; - }, - get notificationID() { - return "flyweb-publish-server"; - }, - get anchorID() { - const kAnchorID = "flyweb-publish-server-notification-icon"; - let chromeDoc = this.browser.ownerDocument; - let anchor = chromeDoc.getElementById(kAnchorID); - if (!anchor) { - let notificationPopupBox = - chromeDoc.getElementById("notification-popup-box"); - let notificationIcon = chromeDoc.createElement("image"); - notificationIcon.id = kAnchorID; - notificationIcon.setAttribute("src", - "chrome://flyweb/skin/icon-64.png"); - notificationIcon.classList.add("notification-anchor-icon"); - notificationIcon.setAttribute("role", "button"); - notificationIcon.setAttribute("aria-label", - "View the publish-server request"); - notificationIcon.style.filter = - "url('chrome://browser/skin/filters.svg#fill')"; - notificationIcon.style.fill = "currentcolor"; - notificationIcon.style.opacity = "0.4"; - notificationPopupBox.appendChild(notificationIcon); - } - - return kAnchorID; - }, - get message() { - return "Would you like to let this site start a server accessible " + - "to nearby devices and people?"; - }, - get promptActions() { - return [{ - label: "Allow Server", - accessKey: "A", - action: Ci.nsIPermissionManager.ALLOW_ACTION, - expireType: Ci.nsIPermissionManager.EXPIRE_SESSION, - }, { - label: "Block Server", - accessKey: "B", - action: Ci.nsIPermissionManager.DENY_ACTION, - expireType: Ci.nsIPermissionManager.EXPIRE_SESSION, - }]; - }, - }; - }, -}); - -let FlyWebView = { - init() { - // Create widget and add it to the menu panel. - CustomizableUI.createWidget({ - id: "flyweb-button", - type: "view", - viewId: "flyweb-panel", - label: gFlyWebBundle.GetStringFromName("flyweb-button.label"), - tooltiptext: gFlyWebBundle.GetStringFromName("flyweb-button.tooltiptext"), - - onBeforeCreated(aDocument) { - let panel = aDocument.createElement("panelview"); - panel.id = "flyweb-panel"; - panel.setAttribute("class", "PanelUI-subView"); - panel.setAttribute("flex", "1"); - - let label = aDocument.createElement("label"); - label.setAttribute("class", "panel-subview-header"); - label.setAttribute("value", gFlyWebBundle.GetStringFromName("flyweb-button.label")); - - let empty = aDocument.createElement("description"); - empty.id = "flyweb-items-empty"; - empty.setAttribute("mousethrough", "always"); - empty.textContent = gFlyWebBundle.GetStringFromName("flyweb-items-empty"); - - let items = aDocument.createElement("vbox"); - items.id = "flyweb-items"; - items.setAttribute("class", "panel-subview-body"); - - panel.appendChild(label); - panel.appendChild(empty); - panel.appendChild(items); - - panel.addEventListener("command", this); - - aDocument.getElementById("PanelUI-multiView").appendChild(panel); - - this._sheetURI = Services.io.newURI("chrome://flyweb/skin/flyweb.css", null, null); - aDocument.defaultView.QueryInterface(Ci.nsIInterfaceRequestor). - getInterface(Ci.nsIDOMWindowUtils).loadSheet(this._sheetURI, 1); - }, - - onDestroyed(aDocument) { - aDocument.defaultView.QueryInterface(Ci.nsIInterfaceRequestor). - getInterface(Ci.nsIDOMWindowUtils).removeSheet(this._sheetURI, 1); - }, - - onViewShowing(aEvent) { - let doc = aEvent.target.ownerDocument; - - let items = doc.getElementById("flyweb-items"); - let empty = doc.getElementById("flyweb-items-empty"); - - if (!gDiscoveryManagerInstance) { - gDiscoveryManagerInstance = new DiscoveryManager(doc.defaultView); - } - - gDiscoveryManagerInstance.start((services) => { - while (items.firstChild) { - items.firstChild.remove(); - } - - let fragment = doc.createDocumentFragment(); - - for (let service of services) { - let button = doc.createElement("toolbarbutton"); - button.setAttribute("class", "subviewbutton cui-withicon"); - button.setAttribute("label", service.displayName); - button.setAttribute("data-service-id", service.serviceId); - fragment.appendChild(button); - } - - items.appendChild(fragment); - - empty.hidden = services.length > 0; - }); - }, - - onViewHiding(aEvent) { - gDiscoveryManagerInstance.stop(); - }, - - handleEvent(aEvent) { - if (aEvent.type === "command") { - let serviceId = aEvent.target.getAttribute("data-service-id"); - gDiscoveryManagerInstance.pairWith(serviceId, (service) => { - aEvent.view.openUILinkIn(service.uiUrl, "tab"); - }); - } - } - }); - - Integration.contentPermission - .register(FlyWebPermissionPromptIntegration); - }, - - uninit() { - CustomizableUI.destroyWidget("flyweb-button"); - - if (gDiscoveryManagerInstance) { - gDiscoveryManagerInstance.destroy(); - gDiscoveryManagerInstance = null; - } - - Integration.contentPermission - .unregister(FlyWebPermissionPromptIntegration); - } -}; diff --git a/browser/extensions/flyweb/install.rdf.in b/browser/extensions/flyweb/install.rdf.in deleted file mode 100644 index 17f746f9b..000000000 --- a/browser/extensions/flyweb/install.rdf.in +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0"?> -<!-- This Source Code Form is subject to the terms of the Mozilla Public - - License, v. 2.0. If a copy of the MPL was not distributed with this - - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - -#filter substitution - -<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:em="http://www.mozilla.org/2004/em-rdf#"> - - <Description about="urn:mozilla:install-manifest"> - <em:id>flyweb@mozilla.org</em:id> - <em:version>1.0.0</em:version> - <em:type>2</em:type> - <em:bootstrap>true</em:bootstrap> - <em:multiprocessCompatible>true</em:multiprocessCompatible> - - <!-- Target Application this theme can install into, - with minimum and maximum supported versions. --> - <em:targetApplication> - <Description> - <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id> - <em:minVersion>@MOZ_APP_VERSION@</em:minVersion> - <em:maxVersion>@MOZ_APP_MAXVERSION@</em:maxVersion> - </Description> - </em:targetApplication> - - <!-- Front End MetaData --> - <em:name>FlyWeb</em:name> - <em:description>Discover nearby services in the browser</em:description> - </Description> -</RDF> diff --git a/browser/extensions/flyweb/jar.mn b/browser/extensions/flyweb/jar.mn deleted file mode 100644 index 8eed2135b..000000000 --- a/browser/extensions/flyweb/jar.mn +++ /dev/null @@ -1,10 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -[features/flyweb@mozilla.org] chrome.jar: -% skin flyweb classic/1.0 %skin/linux/ -% skin flyweb classic/1.0 %skin/osx/ os=Darwin -% skin flyweb classic/1.0 %skin/windows/ os=WINNT -% skin flyweb-shared classic/1.0 %skin/shared/ - skin/ (skin/*) diff --git a/browser/extensions/flyweb/moz.build b/browser/extensions/flyweb/moz.build deleted file mode 100644 index 7f71bfb55..000000000 --- a/browser/extensions/flyweb/moz.build +++ /dev/null @@ -1,18 +0,0 @@ -# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*- -# vim: set filetype=python: -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -DEFINES['MOZ_APP_VERSION'] = CONFIG['MOZ_APP_VERSION'] -DEFINES['MOZ_APP_MAXVERSION'] = CONFIG['MOZ_APP_MAXVERSION'] - -FINAL_TARGET_FILES.features['flyweb@mozilla.org'] += [ - 'bootstrap.js' -] - -FINAL_TARGET_PP_FILES.features['flyweb@mozilla.org'] += [ - 'install.rdf.in' -] - -JAR_MANIFESTS += ['jar.mn'] diff --git a/browser/extensions/flyweb/skin/flyweb-icon.svg b/browser/extensions/flyweb/skin/flyweb-icon.svg deleted file mode 100644 index 1b247e645..000000000 --- a/browser/extensions/flyweb/skin/flyweb-icon.svg +++ /dev/null @@ -1,40 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> -<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> -<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" - width="64px" height="64px" viewBox="0 0 64 64" enable-background="new 0 0 64 64" xml:space="preserve"> -<circle fill="#797C80" cx="32" cy="52" r="6"/> -<g> - <path fill="#797C80" d="M6.894,15.255c-2.254,1.547-4.386,3.304-6.361,5.279L0.18,20.887l3.536,3.536l0.354-0.354 - c1.621-1.62,3.363-3.072,5.196-4.369C8.126,18.464,7.296,16.943,6.894,15.255z"/> - <path fill="#797C80" d="M63.465,20.532C55.061,12.128,43.887,7.5,32,7.5c-2.265,0-4.504,0.17-6.703,0.501 - c0.822,1.44,1.3,3.1,1.312,4.87C28.382,12.631,30.181,12.5,32,12.5c10.55,0,20.468,4.108,27.928,11.567l0.354,0.354l3.537-3.535 - L63.465,20.532z"/> -</g> -<g> - <path fill="#797C80" d="M16.613,10.94c1.103,0,2,0.897,2,2s-0.897,2-2,2s-2-0.897-2-2S15.51,10.94,16.613,10.94 M16.613,6.94 - c-3.313,0-6,2.687-6,6s2.687,6,6,6s6-2.687,6-6S19.926,6.94,16.613,6.94L16.613,6.94z"/> -</g> -<g> - <path fill="#797C80" d="M46.492,37.502c-1.853-1.852-4.002-3.292-6.334-4.305c0.031,0.324,0.05,0.652,0.05,0.984 - c0,1.477-0.33,2.874-0.906,4.137c1.329,0.712,2.561,1.623,3.657,2.719l0.354,0.354l3.533-3.535L46.492,37.502z"/> - <path fill="#797C80" d="M20.262,35.207c-0.972,0.683-1.9,1.439-2.758,2.297l-0.354,0.354l3.536,3.537l0.354-0.354 - c0.35-0.35,0.715-0.679,1.091-0.99C21.118,38.66,20.446,37.007,20.262,35.207z"/> -</g> -<g> - <path fill="#797C80" d="M30.209,32.182c1.102,0,1.999,0.897,1.999,2s-0.896,2-1.999,2c-1.103,0-2-0.897-2-2 - S29.106,32.182,30.209,32.182 M30.209,28.182c-3.313,0-6,2.686-6,6c0,3.312,2.687,6,6,6c3.313,0,5.999-2.688,5.999-6 - C36.208,30.867,33.522,28.182,30.209,28.182L30.209,28.182z"/> -</g> -<g> - <path fill="#797C80" d="M32.207,23.716c0-1.497,0.34-2.912,0.932-4.188C32.76,19.515,32.381,19.5,32,19.5 - c-8.681,0-16.843,3.381-22.981,9.52l-0.354,0.354l3.535,3.535l0.354-0.354C17.748,27.36,24.654,24.5,32,24.5 - c0.083,0,0.165,0.005,0.247,0.006C32.227,24.245,32.207,23.982,32.207,23.716z"/> - <path fill="#797C80" d="M54.98,29.018c-0.987-0.987-2.033-1.896-3.119-2.738c-0.447,1.68-1.313,3.188-2.491,4.399 - c0.717,0.586,1.409,1.21,2.073,1.874l0.354,0.354l3.537-3.535L54.98,29.018z"/> -</g> -<g> - <path fill="#797C80" d="M42.207,21.716c1.103,0,2,0.897,2,2s-0.897,2-2,2s-2-0.897-2-2S41.104,21.716,42.207,21.716 M42.207,17.716 - c-3.313,0-6,2.687-6,6s2.687,6,6,6s6-2.687,6-6S45.521,17.716,42.207,17.716L42.207,17.716z"/> -</g> -</svg> diff --git a/browser/extensions/flyweb/skin/linux/flyweb.css b/browser/extensions/flyweb/skin/linux/flyweb.css deleted file mode 100644 index c549248da..000000000 --- a/browser/extensions/flyweb/skin/linux/flyweb.css +++ /dev/null @@ -1,5 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -@import url("chrome://flyweb-shared/skin/flyweb.css"); diff --git a/browser/extensions/flyweb/skin/linux/icon-16.png b/browser/extensions/flyweb/skin/linux/icon-16.png Binary files differdeleted file mode 100644 index 3a6c2e43a..000000000 --- a/browser/extensions/flyweb/skin/linux/icon-16.png +++ /dev/null diff --git a/browser/extensions/flyweb/skin/linux/icon-32-anchored.png b/browser/extensions/flyweb/skin/linux/icon-32-anchored.png Binary files differdeleted file mode 100644 index b05590dda..000000000 --- a/browser/extensions/flyweb/skin/linux/icon-32-anchored.png +++ /dev/null diff --git a/browser/extensions/flyweb/skin/linux/icon-32.png b/browser/extensions/flyweb/skin/linux/icon-32.png Binary files differdeleted file mode 100644 index a04ec20b9..000000000 --- a/browser/extensions/flyweb/skin/linux/icon-32.png +++ /dev/null diff --git a/browser/extensions/flyweb/skin/linux/icon-64-anchored.png b/browser/extensions/flyweb/skin/linux/icon-64-anchored.png Binary files differdeleted file mode 100644 index b617b9208..000000000 --- a/browser/extensions/flyweb/skin/linux/icon-64-anchored.png +++ /dev/null diff --git a/browser/extensions/flyweb/skin/linux/icon-64.png b/browser/extensions/flyweb/skin/linux/icon-64.png Binary files differdeleted file mode 100644 index be8ece467..000000000 --- a/browser/extensions/flyweb/skin/linux/icon-64.png +++ /dev/null diff --git a/browser/extensions/flyweb/skin/osx/flyweb.css b/browser/extensions/flyweb/skin/osx/flyweb.css deleted file mode 100644 index c549248da..000000000 --- a/browser/extensions/flyweb/skin/osx/flyweb.css +++ /dev/null @@ -1,5 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -@import url("chrome://flyweb-shared/skin/flyweb.css"); diff --git a/browser/extensions/flyweb/skin/osx/icon-16.png b/browser/extensions/flyweb/skin/osx/icon-16.png Binary files differdeleted file mode 100644 index 7c87435a4..000000000 --- a/browser/extensions/flyweb/skin/osx/icon-16.png +++ /dev/null diff --git a/browser/extensions/flyweb/skin/osx/icon-32-anchored.png b/browser/extensions/flyweb/skin/osx/icon-32-anchored.png Binary files differdeleted file mode 100644 index b05590dda..000000000 --- a/browser/extensions/flyweb/skin/osx/icon-32-anchored.png +++ /dev/null diff --git a/browser/extensions/flyweb/skin/osx/icon-32.png b/browser/extensions/flyweb/skin/osx/icon-32.png Binary files differdeleted file mode 100644 index 5b0140ffa..000000000 --- a/browser/extensions/flyweb/skin/osx/icon-32.png +++ /dev/null diff --git a/browser/extensions/flyweb/skin/osx/icon-64-anchored.png b/browser/extensions/flyweb/skin/osx/icon-64-anchored.png Binary files differdeleted file mode 100644 index b617b9208..000000000 --- a/browser/extensions/flyweb/skin/osx/icon-64-anchored.png +++ /dev/null diff --git a/browser/extensions/flyweb/skin/osx/icon-64.png b/browser/extensions/flyweb/skin/osx/icon-64.png Binary files differdeleted file mode 100644 index eb67c29ec..000000000 --- a/browser/extensions/flyweb/skin/osx/icon-64.png +++ /dev/null diff --git a/browser/extensions/flyweb/skin/shared/flyweb.css b/browser/extensions/flyweb/skin/shared/flyweb.css deleted file mode 100644 index acc8a743d..000000000 --- a/browser/extensions/flyweb/skin/shared/flyweb.css +++ /dev/null @@ -1,54 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#flyweb-panel { - width: 20em; -} - -#flyweb-items-empty { - box-sizing: border-box; - color: GrayText; - padding: 10px 20px; - text-align: center; -} - -#flyweb-button { - list-style-image: url("chrome://flyweb/skin/icon-16.png"); -} - -#flyweb-button[cui-areatype="menu-panel"], -toolbarpaletteitem[place="palette"] > #flyweb-button { - list-style-image: url("chrome://flyweb/skin/icon-32.png"); -} - -#flyweb-button[cui-areatype="menu-panel"][panel-multiview-anchor="true"] { - list-style-image: url("chrome://flyweb/skin/icon-32-anchored.png"); -} - -#flyweb-items > toolbarbutton { - list-style-image: url("chrome://flyweb/skin/icon-16.png"); -} - -@media (min-resolution: 2dppx) { - #flyweb-button { - list-style-image: url("chrome://flyweb/skin/icon-32.png"); - } - - #flyweb-button[cui-areatype="menu-panel"], - toolbarpaletteitem[place="palette"] > #flyweb-button { - list-style-image: url("chrome://flyweb/skin/icon-64.png"); - } - - #flyweb-button[cui-areatype="menu-panel"][panel-multiview-anchor="true"] { - list-style-image: url("chrome://flyweb/skin/icon-64-anchored.png"); - } - - #flyweb-items > toolbarbutton { - list-style-image: url("chrome://flyweb/skin/icon-32.png"); - } - - #flyweb-items > toolbarbutton > .toolbarbutton-icon { - width: 16px; - } -} diff --git a/browser/extensions/flyweb/skin/windows/flyweb.css b/browser/extensions/flyweb/skin/windows/flyweb.css deleted file mode 100644 index c549248da..000000000 --- a/browser/extensions/flyweb/skin/windows/flyweb.css +++ /dev/null @@ -1,5 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -@import url("chrome://flyweb-shared/skin/flyweb.css"); diff --git a/browser/extensions/flyweb/skin/windows/icon-16.png b/browser/extensions/flyweb/skin/windows/icon-16.png Binary files differdeleted file mode 100644 index 3a6c2e43a..000000000 --- a/browser/extensions/flyweb/skin/windows/icon-16.png +++ /dev/null diff --git a/browser/extensions/flyweb/skin/windows/icon-32-anchored.png b/browser/extensions/flyweb/skin/windows/icon-32-anchored.png Binary files differdeleted file mode 100644 index b05590dda..000000000 --- a/browser/extensions/flyweb/skin/windows/icon-32-anchored.png +++ /dev/null diff --git a/browser/extensions/flyweb/skin/windows/icon-32.png b/browser/extensions/flyweb/skin/windows/icon-32.png Binary files differdeleted file mode 100644 index a04ec20b9..000000000 --- a/browser/extensions/flyweb/skin/windows/icon-32.png +++ /dev/null diff --git a/browser/extensions/flyweb/skin/windows/icon-64-anchored.png b/browser/extensions/flyweb/skin/windows/icon-64-anchored.png Binary files differdeleted file mode 100644 index b617b9208..000000000 --- a/browser/extensions/flyweb/skin/windows/icon-64-anchored.png +++ /dev/null diff --git a/browser/extensions/flyweb/skin/windows/icon-64.png b/browser/extensions/flyweb/skin/windows/icon-64.png Binary files differdeleted file mode 100644 index be8ece467..000000000 --- a/browser/extensions/flyweb/skin/windows/icon-64.png +++ /dev/null diff --git a/browser/extensions/formautofill/.eslintrc.js b/browser/extensions/formautofill/.eslintrc.js deleted file mode 100644 index ec89029e5..000000000 --- a/browser/extensions/formautofill/.eslintrc.js +++ /dev/null @@ -1,474 +0,0 @@ -"use strict"; - -module.exports = { // eslint-disable-line no-undef - "extends": "../../.eslintrc.js", - - "globals": { - "Components": true, - "dump": true, - "TextDecoder": false, - "TextEncoder": false, - }, - - "rules": { - // Rules from the mozilla plugin - "mozilla/balanced-listeners": "error", - "mozilla/no-aArgs": "warn", - "mozilla/no-cpows-in-tests": "warn", - "mozilla/var-only-at-top-level": "warn", - - "valid-jsdoc": ["error", { - "prefer": { - "return": "returns", - }, - "preferType": { - "Boolean": "boolean", - "Number": "number", - "String": "string", - "bool": "boolean", - }, - "requireParamDescription": false, - "requireReturn": false, - "requireReturnDescription": false, - }], - - // Braces only needed for multi-line arrow function blocks - // "arrow-body-style": ["error", "as-needed"], - - // Require spacing around => - "arrow-spacing": "error", - - // Always require spacing around a single line block - "block-spacing": "warn", - - // Forbid spaces inside the square brackets of array literals. - "array-bracket-spacing": ["error", "never"], - - // Forbid spaces inside the curly brackets of object literals. - "object-curly-spacing": ["error", "never"], - - // No space padding in parentheses - "space-in-parens": ["error", "never"], - - // Enforce one true brace style (opening brace on the same line) and avoid - // start and end braces on the same line. - "brace-style": ["error", "1tbs", {"allowSingleLine": true}], - - // No space before always a space after a comma - "comma-spacing": ["error", {"before": false, "after": true}], - - // Commas at the end of the line not the start - "comma-style": "error", - - // Don't require spaces around computed properties - "computed-property-spacing": ["warn", "never"], - - // Functions are not required to consistently return something or nothing - "consistent-return": "off", - - // Require braces around blocks that start a new line - "curly": ["error", "all"], - - // Always require a trailing EOL - "eol-last": "error", - - // Require function* name() - "generator-star-spacing": ["error", {"before": false, "after": true}], - - // Two space indent - "indent": ["error", 2, {"SwitchCase": 1}], - - // Space after colon not before in property declarations - "key-spacing": ["error", {"beforeColon": false, "afterColon": true, "mode": "minimum"}], - - // Require spaces before and after finally, catch, etc. - "keyword-spacing": "error", - - // Unix linebreaks - "linebreak-style": ["error", "unix"], - - // Always require parenthesis for new calls - "new-parens": "error", - - // Use [] instead of Array() - "no-array-constructor": "error", - - // No duplicate arguments in function declarations - "no-dupe-args": "error", - - // No duplicate keys in object declarations - "no-dupe-keys": "error", - - // No duplicate cases in switch statements - "no-duplicate-case": "error", - - // If an if block ends with a return no need for an else block - // "no-else-return": "error", - - // Disallow empty statements. This will report an error for: - // try { something(); } catch (e) {} - // but will not report it for: - // try { something(); } catch (e) { /* Silencing the error because ...*/ } - // which is a valid use case. - "no-empty": "error", - - // No empty character classes in regex - "no-empty-character-class": "error", - - // Disallow empty destructuring - "no-empty-pattern": "error", - - // No assiging to exception variable - "no-ex-assign": "error", - - // No using !! where casting to boolean is already happening - "no-extra-boolean-cast": "warn", - - // No double semicolon - "no-extra-semi": "error", - - // No overwriting defined functions - "no-func-assign": "error", - - // No invalid regular expresions - "no-invalid-regexp": "error", - - // No odd whitespace characters - "no-irregular-whitespace": "error", - - // No single if block inside an else block - "no-lonely-if": "warn", - - // No mixing spaces and tabs in indent - "no-mixed-spaces-and-tabs": ["error", "smart-tabs"], - - // Disallow use of multiple spaces (sometimes used to align const values, - // array or object items, etc.). It's hard to maintain and doesn't add that - // much benefit. - "no-multi-spaces": "warn", - - // No reassigning native JS objects - "no-native-reassign": "error", - - // No (!foo in bar) - "no-negated-in-lhs": "error", - - // Nested ternary statements are confusing - "no-nested-ternary": "error", - - // Use {} instead of new Object() - "no-new-object": "error", - - // No Math() or JSON() - "no-obj-calls": "error", - - // No octal literals - "no-octal": "error", - - // No redeclaring variables - "no-redeclare": "error", - - // No unnecessary comparisons - "no-self-compare": "error", - - // No spaces between function name and parentheses - "no-spaced-func": "warn", - - // No trailing whitespace - "no-trailing-spaces": "error", - - // Error on newline where a semicolon is needed - "no-unexpected-multiline": "error", - - // No unreachable statements - "no-unreachable": "error", - - // No expressions where a statement is expected - "no-unused-expressions": "error", - - // No declaring variables that are never used - "no-unused-vars": ["error", {"args": "none", "varsIgnorePattern": "^(Cc|Ci|Cr|Cu|EXPORTED_SYMBOLS)$"}], - - // No using variables before defined - "no-use-before-define": "error", - - // No using with - "no-with": "error", - - // Always require semicolon at end of statement - "semi": ["error", "always"], - - // Require space before blocks - "space-before-blocks": "error", - - // Never use spaces before function parentheses - "space-before-function-paren": ["error", {"anonymous": "never", "named": "never"}], - - // Require spaces around operators, except for a|"off". - "space-infix-ops": ["error", {"int32Hint": true}], - - // ++ and -- should not need spacing - "space-unary-ops": ["warn", {"nonwords": false}], - - // No comparisons to NaN - "use-isnan": "error", - - // Only check typeof against valid results - "valid-typeof": "error", - - // Disallow using variables outside the blocks they are defined (especially - // since only let and const are used, see "no-var"). - "block-scoped-var": "error", - - // Allow trailing commas for easy list extension. Having them does not - // impair readability, but also not required either. - "comma-dangle": ["error", "always-multiline"], - - // Warn about cyclomatic complexity in functions. - "complexity": "warn", - - // Don't warn for inconsistent naming when capturing this (not so important - // with auto-binding fat arrow functions). - // "consistent-this": ["error", "self"], - - // Don't require a default case in switch statements. Avoid being forced to - // add a bogus default when you know all possible cases are handled. - "default-case": "off", - - // Enforce dots on the next line with property name. - "dot-location": ["error", "property"], - - // Encourage the use of dot notation whenever possible. - "dot-notation": "error", - - // Allow using == instead of ===, in the interest of landing something since - // the devtools codebase is split on convention here. - "eqeqeq": "off", - - // Don't require function expressions to have a name. - // This makes the code more verbose and hard to read. Our engine already - // does a fantastic job assigning a name to the function, which includes - // the enclosing function name, and worst case you have a line number that - // you can just look up. - "func-names": "off", - - // Allow use of function declarations and expressions. - "func-style": "off", - - // Don't enforce the maximum depth that blocks can be nested. The complexity - // rule is a better rule to check this. - "max-depth": "off", - - // Maximum length of a line. - // Disabled because we exceed this in too many places. - "max-len": ["off", 80], - - // Maximum depth callbacks can be nested. - "max-nested-callbacks": ["error", 4], - - // Don't limit the number of parameters that can be used in a function. - "max-params": "off", - - // Don't limit the maximum number of statement allowed in a function. We - // already have the complexity rule that's a better measurement. - "max-statements": "off", - - // Don't require a capital letter for constructors, only check if all new - // operators are followed by a capital letter. Don't warn when capitalized - // functions are used without the new operator. - "new-cap": ["off", {"capIsNew": false}], - - // Allow use of bitwise operators. - "no-bitwise": "off", - - // Disallow use of arguments.caller or arguments.callee. - "no-caller": "error", - - // Disallow the catch clause parameter name being the same as a variable in - // the outer scope, to avoid confusion. - "no-catch-shadow": "off", - - // Disallow assignment in conditional expressions. - "no-cond-assign": "error", - - // Disallow using the console API. - "no-console": "error", - - // Allow using constant expressions in conditions like while (true) - "no-constant-condition": "off", - - // Allow use of the continue statement. - "no-continue": "off", - - // Disallow control characters in regular expressions. - "no-control-regex": "error", - - // Disallow use of debugger. - "no-debugger": "error", - - // Disallow deletion of variables (deleting properties is fine). - "no-delete-var": "error", - - // Allow division operators explicitly at beginning of regular expression. - "no-div-regex": "off", - - // Disallow use of eval(). We have other APIs to evaluate code in content. - "no-eval": "error", - - // Disallow adding to native types - "no-extend-native": "error", - - // Disallow unnecessary function binding. - "no-extra-bind": "error", - - // Allow unnecessary parentheses, as they may make the code more readable. - "no-extra-parens": "off", - - // Disallow fallthrough of case statements, except if there is a comment. - "no-fallthrough": "error", - - // Allow the use of leading or trailing decimal points in numeric literals. - "no-floating-decimal": "off", - - // Allow comments inline after code. - "no-inline-comments": "off", - - // Disallow use of labels for anything other then loops and switches. - "no-labels": ["error", {"allowLoop": true}], - - // Disallow use of multiline strings (use template strings instead). - "no-multi-str": "warn", - - // Disallow multiple empty lines. - "no-multiple-empty-lines": ["warn", {"max": 2}], - - // Allow reassignment of function parameters. - "no-param-reassign": "off", - - // Allow string concatenation with __dirname and __filename (not a node env). - "no-path-concat": "off", - - // Allow use of unary operators, ++ and --. - "no-plusplus": "off", - - // Allow using process.env (not a node environment). - "no-process-env": "off", - - // Allow using process.exit (not a node environment). - "no-process-exit": "off", - - // Disallow usage of __proto__ property. - "no-proto": "error", - - // Disallow multiple spaces in a regular expression literal. - "no-regex-spaces": "error", - - // Allow reserved words being used as object literal keys. - "no-reserved-keys": "off", - - // Don't restrict usage of specified node modules (not a node environment). - "no-restricted-modules": "off", - - // Disallow use of assignment in return statement. It is preferable for a - // single line of code to have only one easily predictable effect. - "no-return-assign": "error", - - // Don't warn about declaration of variables already declared in the outer scope. - "no-shadow": "off", - - // Disallow shadowing of names such as arguments. - "no-shadow-restricted-names": "error", - - // Allow use of synchronous methods (not a node environment). - "no-sync": "off", - - // Allow the use of ternary operators. - "no-ternary": "off", - - // Disallow throwing literals (eg. throw "error" instead of - // throw new Error("error")). - "no-throw-literal": "error", - - // Disallow use of undeclared variables unless mentioned in a /* global */ - // block. Note that globals from head.js are automatically imported in tests - // by the import-headjs-globals rule form the mozilla eslint plugin. - "no-undef": "error", - - // Allow dangling underscores in identifiers (for privates). - "no-underscore-dangle": "off", - - // Allow use of undefined variable. - "no-undefined": "off", - - // Disallow the use of Boolean literals in conditional expressions. - "no-unneeded-ternary": "error", - - // We use var-only-at-top-level instead of no-var as we allow top level - // vars. - "no-var": "off", - - // Allow using TODO/FIXME comments. - "no-warning-comments": "off", - - // Don't require method and property shorthand syntax for object literals. - // We use this in the code a lot, but not consistently, and this seems more - // like something to check at code review time. - "object-shorthand": "off", - - // Allow more than one variable declaration per function. - "one-var": "off", - - // Disallow padding within blocks. - "padded-blocks": ["warn", "never"], - - // Don't require quotes around object literal property names. - "quote-props": "off", - - // Double quotes should be used. - "quotes": ["warn", "double", {"avoidEscape": true, "allowTemplateLiterals": true}], - - // Require use of the second argument for parseInt(). - "radix": "error", - - // Enforce spacing after semicolons. - "semi-spacing": ["error", {"before": false, "after": true}], - - // Don't require to sort variables within the same declaration block. - // Anyway, one-var is disabled. - "sort-vars": "off", - - // Require a space immediately following the // in a line comment. - "spaced-comment": ["error", "always"], - - // Require "use strict" to be defined globally in the script. - "strict": ["error", "global"], - - // Allow vars to be declared anywhere in the scope. - "vars-on-top": "off", - - // Don't require immediate function invocation to be wrapped in parentheses. - "wrap-iife": "off", - - // Don't require regex literals to be wrapped in parentheses (which - // supposedly prevent them from being mistaken for division operators). - "wrap-regex": "off", - - // Disallow Yoda conditions (where literal value comes first). - "yoda": "error", - - // disallow use of eval()-like methods - "no-implied-eval": "error", - - // Disallow function or variable declarations in nested blocks - "no-inner-declarations": "error", - - // Disallow usage of __iterator__ property - "no-iterator": "error", - - // Disallow labels that share a name with a variable - "no-label-var": "error", - - // Disallow creating new instances of String, Number, and Boolean - "no-new-wrappers": "error", - }, -}; diff --git a/browser/extensions/formautofill/bootstrap.js b/browser/extensions/formautofill/bootstrap.js deleted file mode 100644 index 0b3f355bd..000000000 --- a/browser/extensions/formautofill/bootstrap.js +++ /dev/null @@ -1,12 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -"use strict"; - -/* exported startup, shutdown, install, uninstall */ - -function startup() {} -function shutdown() {} -function install() {} -function uninstall() {} diff --git a/browser/extensions/formautofill/content/FormAutofillContent.jsm b/browser/extensions/formautofill/content/FormAutofillContent.jsm deleted file mode 100644 index bde397580..000000000 --- a/browser/extensions/formautofill/content/FormAutofillContent.jsm +++ /dev/null @@ -1,134 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -/* - * Implements a service used by DOM content to request Form Autofill. - */ - -"use strict"; - -const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components; - -/** - * Handles profile autofill for a DOM Form element. - * @param {HTMLFormElement} form Form that need to be auto filled - */ -function FormAutofillHandler(form) { - this.form = form; - this.fieldDetails = []; -} - -FormAutofillHandler.prototype = { - /** - * DOM Form element to which this object is attached. - */ - form: null, - - /** - * Array of collected data about relevant form fields. Each item is an object - * storing the identifying details of the field and a reference to the - * originally associated element from the form. - * - * The "section", "addressType", "contactType", and "fieldName" values are - * used to identify the exact field when the serializable data is received - * from the backend. There cannot be multiple fields which have - * the same exact combination of these values. - * - * A direct reference to the associated element cannot be sent to the user - * interface because processing may be done in the parent process. - */ - fieldDetails: null, - - /** - * Returns information from the form about fields that can be autofilled, and - * populates the fieldDetails array on this object accordingly. - * - * @returns {Array<Object>} Serializable data structure that can be sent to the user - * interface, or null if the operation failed because the constraints - * on the allowed fields were not honored. - */ - collectFormFields() { - let autofillData = []; - - for (let element of this.form.elements) { - // Query the interface and exclude elements that cannot be autocompleted. - if (!(element instanceof Ci.nsIDOMHTMLInputElement)) { - continue; - } - - // Exclude elements to which no autocomplete field has been assigned. - let info = element.getAutocompleteInfo(); - if (!info.fieldName || ["on", "off"].includes(info.fieldName)) { - continue; - } - - // Store the association between the field metadata and the element. - if (this.fieldDetails.some(f => f.section == info.section && - f.addressType == info.addressType && - f.contactType == info.contactType && - f.fieldName == info.fieldName)) { - // A field with the same identifier already exists. - return null; - } - - let inputFormat = { - section: info.section, - addressType: info.addressType, - contactType: info.contactType, - fieldName: info.fieldName, - }; - // Clone the inputFormat for caching the fields and elements together - let formatWithElement = Object.assign({}, inputFormat); - - inputFormat.index = autofillData.length; - autofillData.push(inputFormat); - - formatWithElement.element = element; - this.fieldDetails.push(formatWithElement); - } - - return autofillData; - }, - - /** - * Processes form fields that can be autofilled, and populates them with the - * data provided by backend. - * - * @param {Array<Object>} autofillResult - * Data returned by the user interface. - * [{ - * section: Value originally provided to the user interface. - * addressType: Value originally provided to the user interface. - * contactType: Value originally provided to the user interface. - * fieldName: Value originally provided to the user interface. - * value: String with which the field should be updated. - * index: Index to match the input in fieldDetails - * }], - * } - */ - autofillFormFields(autofillResult) { - for (let field of autofillResult) { - // Get the field details, if it was processed by the user interface. - let fieldDetail = this.fieldDetails[field.index]; - - // Avoid the invalid value set - if (!fieldDetail || !field.value) { - continue; - } - - let info = fieldDetail.element.getAutocompleteInfo(); - if (field.section != info.section || - field.addressType != info.addressType || - field.contactType != info.contactType || - field.fieldName != info.fieldName) { - Cu.reportError("Autocomplete tokens mismatched"); - continue; - } - - fieldDetail.element.setUserInput(field.value); - } - }, -}; - -this.EXPORTED_SYMBOLS = ["FormAutofillHandler"]; diff --git a/browser/extensions/formautofill/content/FormAutofillParent.jsm b/browser/extensions/formautofill/content/FormAutofillParent.jsm deleted file mode 100644 index bdfe0f478..000000000 --- a/browser/extensions/formautofill/content/FormAutofillParent.jsm +++ /dev/null @@ -1,173 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -/* - * Implements a service used to access storage and communicate with content. - * - * A "fields" array is used to communicate with FormAutofillContent. Each item - * represents a single input field in the content page as well as its - * @autocomplete properties. The schema is as below. Please refer to - * FormAutofillContent.jsm for more details. - * - * [ - * { - * section, - * addressType, - * contactType, - * fieldName, - * value, - * index - * }, - * { - * // ... - * } - * ] - */ - -/* exported FormAutofillParent */ - -"use strict"; - -const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components; - -Cu.import("resource://gre/modules/XPCOMUtils.jsm"); - -XPCOMUtils.defineLazyModuleGetter(this, "OS", - "resource://gre/modules/osfile.jsm"); -XPCOMUtils.defineLazyModuleGetter(this, "ProfileStorage", - "resource://formautofill/ProfileStorage.jsm"); - -const PROFILE_JSON_FILE_NAME = "autofill-profiles.json"; - -let FormAutofillParent = { - _profileStore: null, - - /** - * Initializes ProfileStorage and registers the message handler. - */ - init: function() { - let storePath = - OS.Path.join(OS.Constants.Path.profileDir, PROFILE_JSON_FILE_NAME); - - this._profileStore = new ProfileStorage(storePath); - this._profileStore.initialize(); - - let mm = Cc["@mozilla.org/globalmessagemanager;1"] - .getService(Ci.nsIMessageListenerManager); - mm.addMessageListener("FormAutofill:PopulateFieldValues", this); - }, - - /** - * Handles the message coming from FormAutofillContent. - * - * @param {string} message.name The name of the message. - * @param {object} message.data The data of the message. - * @param {nsIFrameMessageManager} message.target Caller's message manager. - */ - receiveMessage: function({name, data, target}) { - switch (name) { - case "FormAutofill:PopulateFieldValues": - this._populateFieldValues(data, target); - break; - } - }, - - /** - * Returns the instance of ProfileStorage. To avoid syncing issues, anyone - * who needs to access the profile should request the instance by this instead - * of creating a new one. - * - * @returns {ProfileStorage} - */ - getProfileStore: function() { - return this._profileStore; - }, - - /** - * Uninitializes FormAutofillParent. This is for testing only. - * - * @private - */ - _uninit: function() { - if (this._profileStore) { - this._profileStore._saveImmediately(); - this._profileStore = null; - } - - let mm = Cc["@mozilla.org/globalmessagemanager;1"] - .getService(Ci.nsIMessageListenerManager); - mm.removeMessageListener("FormAutofill:PopulateFieldValues", this); - }, - - /** - * Populates the field values and notifies content to fill in. Exception will - * be thrown if there's no matching profile. - * - * @private - * @param {string} data.guid - * Indicates which profile to populate - * @param {Fields} data.fields - * The "fields" array collected from content. - * @param {nsIFrameMessageManager} target - * Content's message manager. - */ - _populateFieldValues({guid, fields}, target) { - this._profileStore.notifyUsed(guid); - this._fillInFields(this._profileStore.get(guid), fields); - target.sendAsyncMessage("FormAutofill:fillForm", {fields}); - }, - - /** - * Transforms a word with hyphen into camel case. - * (e.g. transforms "address-type" into "addressType".) - * - * @private - * @param {string} str The original string with hyphen. - * @returns {string} The camel-cased output string. - */ - _camelCase(str) { - return str.toLowerCase().replace(/-([a-z])/g, s => s[1].toUpperCase()); - }, - - /** - * Get the corresponding value from the specified profile according to a valid - * @autocomplete field name. - * - * Note that the field name doesn't need to match the property name defined in - * Profile object. This method can transform the raw data to fulfill it. (e.g. - * inputting "country-name" as "fieldName" will get a full name transformed - * from the country code that is recorded in "country" field.) - * - * @private - * @param {Profile} profile The specified profile. - * @param {string} fieldName A valid @autocomplete field name. - * @returns {string} The corresponding value. Returns "undefined" if there's - * no matching field. - */ - _getDataByFieldName(profile, fieldName) { - let key = this._camelCase(fieldName); - - // TODO: Transform the raw profile data to fulfill "fieldName" here. - - return profile[key]; - }, - - /** - * Fills in the "fields" array by the specified profile. - * - * @private - * @param {Profile} profile The specified profile to fill in. - * @param {Fields} fields The "fields" array collected from content. - */ - _fillInFields(profile, fields) { - for (let field of fields) { - let value = this._getDataByFieldName(profile, field.fieldName); - if (value !== undefined) { - field.value = value; - } - } - }, -}; - -this.EXPORTED_SYMBOLS = ["FormAutofillParent"]; diff --git a/browser/extensions/formautofill/content/ProfileStorage.jsm b/browser/extensions/formautofill/content/ProfileStorage.jsm deleted file mode 100644 index 843177d4e..000000000 --- a/browser/extensions/formautofill/content/ProfileStorage.jsm +++ /dev/null @@ -1,251 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -/* - * Implements an interface of the storage of Form Autofill. - * - * The data is stored in JSON format, without indentation, using UTF-8 encoding. - * With indentation applied, the file would look like this: - * - * { - * version: 1, - * profiles: [ - * { - * guid, // 12 character... - * - * // profile - * organization, // Company - * streetAddress, // (Multiline) - * addressLevel2, // City/Town - * addressLevel1, // Province (Standardized code if possible) - * postalCode, - * country, // ISO 3166 - * tel, - * email, - * - * // metadata - * timeCreated, // in ms - * timeLastUsed, // in ms - * timeLastModified, // in ms - * timesUsed - * }, - * { - * // ... - * } - * ] - * } - */ - -"use strict"; - -const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components; - -Cu.import("resource://gre/modules/XPCOMUtils.jsm"); -Cu.import("resource://gre/modules/Services.jsm"); -Cu.import("resource://gre/modules/Task.jsm"); - -XPCOMUtils.defineLazyModuleGetter(this, "JSONFile", - "resource://gre/modules/JSONFile.jsm"); - -XPCOMUtils.defineLazyServiceGetter(this, "gUUIDGenerator", - "@mozilla.org/uuid-generator;1", - "nsIUUIDGenerator"); - -const SCHEMA_VERSION = 1; - -// Name-related fields will be handled in follow-up bugs due to the complexity. -const VALID_FIELDS = [ - "organization", - "streetAddress", - "addressLevel2", - "addressLevel1", - "postalCode", - "country", - "tel", - "email", -]; - -function ProfileStorage(path) { - this._path = path; -} - -ProfileStorage.prototype = { - /** - * Loads the profile data from file to memory. - * - * @returns {Promise} - * @resolves When the operation finished successfully. - * @rejects JavaScript exception. - */ - initialize() { - this._store = new JSONFile({ - path: this._path, - dataPostProcessor: this._dataPostProcessor.bind(this), - }); - return this._store.load(); - }, - - /** - * Adds a new profile. - * - * @param {Profile} profile - * The new profile for saving. - */ - add(profile) { - this._store.ensureDataReady(); - - let profileToSave = this._normalizeProfile(profile); - - profileToSave.guid = gUUIDGenerator.generateUUID().toString() - .replace(/[{}-]/g, "").substring(0, 12); - - // Metadata - let now = Date.now(); - profileToSave.timeCreated = now; - profileToSave.timeLastModified = now; - profileToSave.timeLastUsed = 0; - profileToSave.timesUsed = 0; - - this._store.data.profiles.push(profileToSave); - - this._store.saveSoon(); - }, - - /** - * Update the specified profile. - * - * @param {string} guid - * Indicates which profile to update. - * @param {Profile} profile - * The new profile used to overwrite the old one. - */ - update(guid, profile) { - this._store.ensureDataReady(); - - let profileFound = this._findByGUID(guid); - if (!profileFound) { - throw new Error("No matching profile."); - } - - let profileToUpdate = this._normalizeProfile(profile); - for (let field of VALID_FIELDS) { - if (profileToUpdate[field] !== undefined) { - profileFound[field] = profileToUpdate[field]; - } else { - delete profileFound[field]; - } - } - - profileFound.timeLastModified = Date.now(); - - this._store.saveSoon(); - }, - - /** - * Notifies the stroage of the use of the specified profile, so we can update - * the metadata accordingly. - * - * @param {string} guid - * Indicates which profile to be notified. - */ - notifyUsed(guid) { - this._store.ensureDataReady(); - - let profileFound = this._findByGUID(guid); - if (!profileFound) { - throw new Error("No matching profile."); - } - - profileFound.timesUsed++; - profileFound.timeLastUsed = Date.now(); - - this._store.saveSoon(); - }, - - /** - * Removes the specified profile. No error occurs if the profile isn't found. - * - * @param {string} guid - * Indicates which profile to remove. - */ - remove(guid) { - this._store.ensureDataReady(); - - this._store.data.profiles = - this._store.data.profiles.filter(profile => profile.guid != guid); - this._store.saveSoon(); - }, - - /** - * Returns the profile with the specified GUID. - * - * @param {string} guid - * Indicates which profile to retrieve. - * @returns {Profile} - * A clone of the profile. - */ - get(guid) { - this._store.ensureDataReady(); - - let profileFound = this._findByGUID(guid); - if (!profileFound) { - throw new Error("No matching profile."); - } - - // Profile is cloned to avoid accidental modifications from outside. - return this._clone(profileFound); - }, - - /** - * Returns all profiles. - * - * @returns {Array.<Profile>} - * An array containing clones of all profiles. - */ - getAll() { - this._store.ensureDataReady(); - - // Profiles are cloned to avoid accidental modifications from outside. - return this._store.data.profiles.map(this._clone); - }, - - _clone(profile) { - return Object.assign({}, profile); - }, - - _findByGUID(guid) { - return this._store.data.profiles.find(profile => profile.guid == guid); - }, - - _normalizeProfile(profile) { - let result = {}; - for (let key in profile) { - if (!VALID_FIELDS.includes(key)) { - throw new Error(`"${key}" is not a valid field.`); - } - if (typeof profile[key] !== "string" && - typeof profile[key] !== "number") { - throw new Error(`"${key}" contains invalid data type.`); - } - - result[key] = profile[key]; - } - return result; - }, - - _dataPostProcessor(data) { - data.version = SCHEMA_VERSION; - if (!data.profiles) { - data.profiles = []; - } - return data; - }, - - // For test only. - _saveImmediately() { - return this._store._save(); - }, -}; - -this.EXPORTED_SYMBOLS = ["ProfileStorage"]; diff --git a/browser/extensions/formautofill/install.rdf.in b/browser/extensions/formautofill/install.rdf.in deleted file mode 100644 index 5e34051ba..000000000 --- a/browser/extensions/formautofill/install.rdf.in +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0"?> -<!-- This Source Code Form is subject to the terms of the Mozilla Public - - License, v. 2.0. If a copy of the MPL was not distributed with this - - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - -#filter substitution - -<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:em="http://www.mozilla.org/2004/em-rdf#"> - - <Description about="urn:mozilla:install-manifest"> - <em:id>formautofill@mozilla.org</em:id> - <em:version>1.0</em:version> - <em:type>2</em:type> - <em:bootstrap>true</em:bootstrap> - <em:multiprocessCompatible>true</em:multiprocessCompatible> - - <!-- Target Application this extension can install into, - with minimum and maximum supported versions. --> - <em:targetApplication> - <Description> - <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id> - <em:minVersion>@MOZ_APP_VERSION@</em:minVersion> - <em:maxVersion>@MOZ_APP_MAXVERSION@</em:maxVersion> - </Description> - </em:targetApplication> - - <!-- Front End MetaData --> - <em:name>Form Autofill</em:name> - <em:description>Autofill forms with saved profiles</em:description> - </Description> -</RDF> diff --git a/browser/extensions/formautofill/jar.mn b/browser/extensions/formautofill/jar.mn deleted file mode 100644 index 0cba721ef..000000000 --- a/browser/extensions/formautofill/jar.mn +++ /dev/null @@ -1,7 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -[features/formautofill@mozilla.org] chrome.jar: -% resource formautofill %content/ - content/ (content/*) diff --git a/browser/extensions/formautofill/moz.build b/browser/extensions/formautofill/moz.build deleted file mode 100644 index abcc659ee..000000000 --- a/browser/extensions/formautofill/moz.build +++ /dev/null @@ -1,18 +0,0 @@ -# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*- -# vim: set filetype=python: -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -DEFINES['MOZ_APP_VERSION'] = CONFIG['MOZ_APP_VERSION'] -DEFINES['MOZ_APP_MAXVERSION'] = CONFIG['MOZ_APP_MAXVERSION'] - -FINAL_TARGET_FILES.features['formautofill@mozilla.org'] += [ - 'bootstrap.js' -] - -FINAL_TARGET_PP_FILES.features['formautofill@mozilla.org'] += [ - 'install.rdf.in' -] - -JAR_MANIFESTS += ['jar.mn'] diff --git a/browser/extensions/moz.build b/browser/extensions/moz.build index 4f95704e6..69d6af6d6 100644 --- a/browser/extensions/moz.build +++ b/browser/extensions/moz.build @@ -5,16 +5,6 @@ # file, You can obtain one at http://mozilla.org/MPL/2.0/. DIRS += [ -# 'aushelper', -# 'e10srollout', 'pdfjs', -# 'pocket', -# 'webcompat', ] -# Only include the following system add-ons if building Aurora or Nightly -if 'a' in CONFIG['GRE_MILESTONE']: - DIRS += [ - 'flyweb', - 'formautofill', - ] diff --git a/browser/extensions/pdfjs/content/PdfStreamConverter.jsm b/browser/extensions/pdfjs/content/PdfStreamConverter.jsm index 3b9f9de26..5e337bbc5 100644 --- a/browser/extensions/pdfjs/content/PdfStreamConverter.jsm +++ b/browser/extensions/pdfjs/content/PdfStreamConverter.jsm @@ -29,7 +29,8 @@ const MOZ_CENTRAL = JSON.parse('true'); const PDFJS_EVENT_ID = 'pdf.js.message'; const PDF_CONTENT_TYPE = 'application/pdf'; const PREF_PREFIX = 'pdfjs'; -const PDF_VIEWER_WEB_PAGE = 'resource://pdf.js/web/viewer.html'; +const PDF_VIEWER_ORIGIN = "resource://pdf.js"; +const PDF_VIEWER_WEB_PAGE = "resource://pdf.js/web/viewer.html"; const MAX_NUMBER_OF_PREFS = 50; const MAX_STRING_PREF_LENGTH = 128; @@ -110,11 +111,15 @@ function log(aMsg) { dump(msg + '\n'); } -function getDOMWindow(aChannel) { +function getDOMWindow(aChannel, aPrincipal) { var requestor = aChannel.notificationCallbacks ? aChannel.notificationCallbacks : aChannel.loadGroup.notificationCallbacks; var win = requestor.getInterface(Components.interfaces.nsIDOMWindow); + // Ensure the window wasn't navigated to something that is not PDF.js. + if (!win.document.nodePrincipal.equals(aPrincipal)) { + return null; + } return win; } @@ -632,7 +637,7 @@ var RangedChromeActions = (function RangedChromeActionsClosure() { loaded: loaded, total: total, chunk: self.dataListener.readData() - }, '*'); + }, PDF_VIEWER_ORIGIN); }; this.dataListener.oncomplete = function () { self.dataListener = null; @@ -646,7 +651,7 @@ var RangedChromeActions = (function RangedChromeActionsClosure() { pdfUrl: this.pdfUrl, length: this.contentLength, data: data - }, '*'); + }, PDF_VIEWER_ORIGIN); return true; }; @@ -668,13 +673,13 @@ var RangedChromeActions = (function RangedChromeActionsClosure() { pdfjsLoadAction: 'range', begin: args.begin, chunk: args.chunk - }, '*'); + }, PDF_VIEWER_ORIGIN); }, onProgress: function RangedChromeActions_onProgress(evt) { domWindow.postMessage({ pdfjsLoadAction: 'rangeProgress', loaded: evt.loaded, - }, '*'); + }, PDF_VIEWER_ORIGIN); } }); }; @@ -723,7 +728,7 @@ var StandardChromeActions = (function StandardChromeActionsClosure() { pdfjsLoadAction: 'progress', loaded: loaded, total: total - }, '*'); + }, PDF_VIEWER_ORIGIN); }; this.dataListener.oncomplete = @@ -732,7 +737,7 @@ var StandardChromeActions = (function StandardChromeActionsClosure() { pdfjsLoadAction: 'complete', data: data, errorCode: errorCode - }, '*'); + }, PDF_VIEWER_ORIGIN); self.dataListener = null; self.originalRequest = null; @@ -977,10 +982,14 @@ PdfStreamConverter.prototype = { listener.onDataAvailable(aRequest, aContext, inputStream, offset, count); }, - onStopRequest: function(request, context, statusCode) { - // We get the DOM window here instead of before the request since it - // may have changed during a redirect. - var domWindow = getDOMWindow(channel); + onStopRequest(request, context, statusCode) { + var domWindow = getDOMWindow(channel, resourcePrincipal); + if (!Components.isSuccessCode(statusCode) || !domWindow) { + // The request may have been aborted and the document may have been + // replaced with something that is not PDF.js, abort attaching. + listener.onStopRequest(aRequest, context, statusCode); + return; + } var actions; if (rangeRequest || streamRequest) { actions = new RangedChromeActions( @@ -991,7 +1000,7 @@ PdfStreamConverter.prototype = { domWindow, contentDispositionFilename, aRequest, dataListener); } var requestListener = new RequestListener(actions); - domWindow.addEventListener(PDFJS_EVENT_ID, function(event) { + domWindow.document.addEventListener(PDFJS_EVENT_ID, function(event) { requestListener.receive(event); }, false, true); if (actions.supportsIntegratedFind()) { diff --git a/browser/extensions/pdfjs/content/build/pdf.worker.js b/browser/extensions/pdfjs/content/build/pdf.worker.js index 4c35bd401..6ce519940 100644 --- a/browser/extensions/pdfjs/content/build/pdf.worker.js +++ b/browser/extensions/pdfjs/content/build/pdf.worker.js @@ -41653,6 +41653,22 @@ var isStream = corePrimitives.isStream; var PostScriptLexer = corePsParser.PostScriptLexer; var PostScriptParser = corePsParser.PostScriptParser; + function toNumberArray(arr) { + if (!Array.isArray(arr)) { + return null; + } + var length = arr.length; + for (var i = 0; i < length; i++) { + if (typeof arr[i] !== 'number') { + var result = new Array(length); + for (var j = 0; j < length; j++) { + result[j] = +arr[j]; + } + return result; + } + } + return arr; + } var PDFFunction = function PDFFunctionClosure() { var CONSTRUCT_SAMPLED = 0; var CONSTRUCT_INTERPOLATED = 2; @@ -41752,8 +41768,8 @@ } return out; } - var domain = dict.getArray('Domain'); - var range = dict.getArray('Range'); + var domain = toNumberArray(dict.getArray('Domain')); + var range = toNumberArray(dict.getArray('Range')); if (!domain || !range) { error('No domain or range'); } @@ -41761,7 +41777,7 @@ var outputSize = range.length / 2; domain = toMultiArray(domain); range = toMultiArray(range); - var size = dict.get('Size'); + var size = toNumberArray(dict.get('Size')); var bps = dict.get('BitsPerSample'); var order = dict.get('Order') || 1; if (order !== 1) { @@ -41769,16 +41785,16 @@ // As in poppler, ignoring order, linear interpolation may work as good info('No support for cubic spline interpolation: ' + order); } - var encode = dict.getArray('Encode'); + var encode = toNumberArray(dict.getArray('Encode')); if (!encode) { encode = []; for (var i = 0; i < inputSize; ++i) { - encode.push(0); - encode.push(size[i] - 1); + encode.push([0, size[i] - 1]); } + } else { + encode = toMultiArray(encode); } - encode = toMultiArray(encode); - var decode = dict.getArray('Decode'); + var decode = toNumberArray(dict.getArray('Decode')); if (!decode) { decode = range; } else { @@ -41873,12 +41889,9 @@ }; }, constructInterpolated: function PDFFunction_constructInterpolated(str, dict) { - var c0 = dict.getArray('C0') || [0]; - var c1 = dict.getArray('C1') || [1]; + var c0 = toNumberArray(dict.getArray('C0')) || [0]; + var c1 = toNumberArray(dict.getArray('C1')) || [1]; var n = dict.get('N'); - if (!isArray(c0) || !isArray(c1)) { - error('Illegal dictionary for interpolated function'); - } var length = c0.length; var diff = []; for (var i = 0; i < length; ++i) { @@ -41904,7 +41917,7 @@ }; }, constructStiched: function PDFFunction_constructStiched(fn, dict, xref) { - var domain = dict.getArray('Domain'); + var domain = toNumberArray(dict.getArray('Domain')); if (!domain) { error('No domain'); } @@ -41915,10 +41928,10 @@ var fnRefs = dict.get('Functions'); var fns = []; for (var i = 0, ii = fnRefs.length; i < ii; ++i) { - fns.push(PDFFunction.getIR(xref, xref.fetchIfRef(fnRefs[i]))); + fns.push(PDFFunction.parse(xref, xref.fetchIfRef(fnRefs[i]))); } - var bounds = dict.getArray('Bounds'); - var encode = dict.getArray('Encode'); + var bounds = toNumberArray(dict.getArray('Bounds')); + var encode = toNumberArray(dict.getArray('Encode')); return [ CONSTRUCT_STICHED, domain, @@ -41931,12 +41944,8 @@ var domain = IR[1]; var bounds = IR[2]; var encode = IR[3]; - var fnsIR = IR[4]; - var fns = []; + var fns = IR[4]; var tmpBuf = new Float32Array(1); - for (var i = 0, ii = fnsIR.length; i < ii; i++) { - fns.push(PDFFunction.fromIR(fnsIR[i])); - } return function constructStichedFromIRResult(src, srcOffset, dest, destOffset) { var clip = function constructStichedFromIRClip(v, min, max) { if (v > max) { @@ -41973,8 +41982,8 @@ }; }, constructPostScript: function PDFFunction_constructPostScript(fn, dict, xref) { - var domain = dict.getArray('Domain'); - var range = dict.getArray('Range'); + var domain = toNumberArray(dict.getArray('Domain')); + var range = toNumberArray(dict.getArray('Range')); if (!domain) { error('No domain.'); } @@ -42933,8 +42942,8 @@ case 'AlternateCS': var numComps = IR[1]; var alt = IR[2]; - var tintFnIR = IR[3]; - return new AlternateCS(numComps, ColorSpace.fromIR(alt), PDFFunction.fromIR(tintFnIR)); + var tintFn = IR[3]; + return new AlternateCS(numComps, ColorSpace.fromIR(alt), tintFn); case 'LabCS': whitePoint = IR[1]; blackPoint = IR[2]; @@ -43072,12 +43081,12 @@ numComps = name.length; } alt = ColorSpace.parseToIR(cs[2], xref, res); - var tintFnIR = PDFFunction.getIR(xref, xref.fetchIfRef(cs[3])); + var tintFn = PDFFunction.parse(xref, xref.fetchIfRef(cs[3])); return [ 'AlternateCS', numComps, alt, - tintFnIR + tintFn ]; case 'Lab': params = xref.fetchIfRef(cs[1]); @@ -52488,4 +52497,4 @@ })); }.call(pdfjsLibs)); exports.WorkerMessageHandler = pdfjsLibs.pdfjsCoreWorker.WorkerMessageHandler; -}));
\ No newline at end of file +})); diff --git a/browser/extensions/pocket/bootstrap.js b/browser/extensions/pocket/bootstrap.js deleted file mode 100644 index c470eb8d3..000000000 --- a/browser/extensions/pocket/bootstrap.js +++ /dev/null @@ -1,511 +0,0 @@ -/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -const {classes: Cc, interfaces: Ci, utils: Cu, manager: Cm} = Components; - -Cu.import("resource://gre/modules/XPCOMUtils.jsm"); -Cu.import("resource://services-common/utils.js"); -Cu.import("resource://gre/modules/Preferences.jsm"); -XPCOMUtils.defineLazyModuleGetter(this, "Services", - "resource://gre/modules/Services.jsm"); -XPCOMUtils.defineLazyModuleGetter(this, "RecentWindow", - "resource:///modules/RecentWindow.jsm"); -XPCOMUtils.defineLazyModuleGetter(this, "CustomizableUI", - "resource:///modules/CustomizableUI.jsm"); -XPCOMUtils.defineLazyModuleGetter(this, "AddonManager", - "resource://gre/modules/AddonManager.jsm"); -XPCOMUtils.defineLazyModuleGetter(this, "ReaderMode", - "resource://gre/modules/ReaderMode.jsm"); -XPCOMUtils.defineLazyModuleGetter(this, "Pocket", - "chrome://pocket/content/Pocket.jsm"); -XPCOMUtils.defineLazyModuleGetter(this, "AboutPocket", - "chrome://pocket/content/AboutPocket.jsm"); -XPCOMUtils.defineLazyGetter(this, "gPocketBundle", function() { - return Services.strings.createBundle("chrome://pocket/locale/pocket.properties"); -}); -XPCOMUtils.defineLazyGetter(this, "gPocketStyleURI", function() { - return Services.io.newURI("chrome://pocket/skin/pocket.css", null, null); -}); - -// Due to bug 1051238 frame scripts are cached forever, so we can't update them -// as a restartless add-on. The Math.random() is the work around for this. -const PROCESS_SCRIPT = "chrome://pocket/content/pocket-content-process.js?" + Math.random(); - -const PREF_BRANCH = "extensions.pocket."; -const PREFS = { - enabled: true, // bug 1229937, figure out ui tour support - api: "api.getpocket.com", - site: "getpocket.com", - oAuthConsumerKey: "40249-e88c401e1b1f2242d9e441c4" -}; - -function setDefaultPrefs() { - let branch = Services.prefs.getDefaultBranch(PREF_BRANCH); - for (let [key, val] of Object.entries(PREFS)) { - // If someone beat us to setting a default, don't overwrite it. This can - // happen if distribution.ini sets the default first. - if (branch.getPrefType(key) != branch.PREF_INVALID) - continue; - switch (typeof val) { - case "boolean": - branch.setBoolPref(key, val); - break; - case "number": - branch.setIntPref(key, val); - break; - case "string": - branch.setCharPref(key, val); - break; - } - } -} - -function createElementWithAttrs(document, type, attrs) { - let element = document.createElement(type); - Object.keys(attrs).forEach(function (attr) { - element.setAttribute(attr, attrs[attr]); - }) - return element; -} - -function CreatePocketWidget(reason) { - let id = "pocket-button" - let widget = CustomizableUI.getWidget(id); - // The widget is only null if we've created then destroyed the widget. - // Once we've actually called createWidget the provider will be set to - // PROVIDER_API. - if (widget && widget.provider == CustomizableUI.PROVIDER_API) - return; - // if upgrading from builtin version and the button was placed in ui, - // seenWidget will not be null - let seenWidget = CustomizableUI.getPlacementOfWidget("pocket-button", false, true); - let pocketButton = { - id: "pocket-button", - defaultArea: CustomizableUI.AREA_NAVBAR, - introducedInVersion: "pref", - type: "view", - tabSpecific: true, - viewId: "PanelUI-pocketView", - label: gPocketBundle.GetStringFromName("pocket-button.label"), - tooltiptext: gPocketBundle.GetStringFromName("pocket-button.tooltiptext"), - // Use forwarding functions here to avoid loading Pocket.jsm on startup: - onViewShowing: function() { - return Pocket.onPanelViewShowing.apply(this, arguments); - }, - onViewHiding: function() { - return Pocket.onPanelViewHiding.apply(this, arguments); - }, - onBeforeCreated: function(doc) { - // Bug 1223127,CUI should make this easier to do. - if (doc.getElementById("PanelUI-pocketView")) - return; - let view = doc.createElement("panelview"); - view.id = "PanelUI-pocketView"; - let panel = doc.createElement("vbox"); - panel.setAttribute("class", "panel-subview-body"); - view.appendChild(panel); - doc.getElementById("PanelUI-multiView").appendChild(view); - } - }; - - CustomizableUI.createWidget(pocketButton); - CustomizableUI.addListener(pocketButton); - // placed is null if location is palette - let placed = CustomizableUI.getPlacementOfWidget("pocket-button"); - - // a first time install will always have placed the button somewhere, and will - // not have a placement prior to creating the widget. Thus, !seenWidget && - // placed. - if (reason == ADDON_ENABLE && !seenWidget && placed) { - // initially place the button after the bookmarks button if it is in the UI - let widgets = CustomizableUI.getWidgetIdsInArea(CustomizableUI.AREA_NAVBAR); - let bmbtn = widgets.indexOf("bookmarks-menu-button"); - if (bmbtn > -1) { - CustomizableUI.moveWidgetWithinArea("pocket-button", bmbtn + 1); - } - } - - // Uninstall the Pocket social provider if it exists, but only if we haven't - // already uninstalled it in this manner. That way the user can reinstall - // it if they prefer it without its being uninstalled every time they start - // the browser. - let SocialService; - try { - // For Firefox 51+ - SocialService = Cu.import("resource:///modules/SocialService.jsm", {}).SocialService; - } catch (e) { - SocialService = Cu.import("resource://gre/modules/SocialService.jsm", {}).SocialService; - } - - let origin = "https://getpocket.com"; - SocialService.getProvider(origin, provider => { - if (provider) { - let pref = "social.backup.getpocket-com"; - if (!Services.prefs.prefHasUserValue(pref)) { - let str = Cc["@mozilla.org/supports-string;1"]. - createInstance(Ci.nsISupportsString); - str.data = JSON.stringify(provider.manifest); - Services.prefs.setComplexValue(pref, Ci.nsISupportsString, str); - SocialService.uninstallProvider(origin, () => {}); - } - } - }); - -} - -// PocketContextMenu -// When the context menu is opened check if we need to build and enable pocket UI. -var PocketContextMenu = { - init: function() { - Services.obs.addObserver(this, "on-build-contextmenu", false); - }, - shutdown: function() { - Services.obs.removeObserver(this, "on-build-contextmenu"); - // loop through windows and remove context menus - // iterate through all windows and add pocket to them - for (let win of CustomizableUI.windows) { - let document = win.document; - for (let id of ["context-pocket", "context-savelinktopocket"]) { - let element = document.getElementById(id); - if (element) - element.remove(); - } - } - }, - observe: function(aSubject, aTopic, aData) { - let subject = aSubject.wrappedJSObject; - let document = subject.menu.ownerDocument; - let pocketEnabled = CustomizableUI.getPlacementOfWidget("pocket-button"); - - let showSaveCurrentPageToPocket = !(subject.onTextInput || subject.onLink || - subject.isContentSelected || subject.onImage || - subject.onCanvas || subject.onVideo || subject.onAudio); - let targetUrl = subject.onLink ? subject.linkUrl : subject.pageUrl; - let targetURI = Services.io.newURI(targetUrl, null, null); - let canPocket = pocketEnabled && (targetURI.schemeIs("http") || targetURI.schemeIs("https") || - (targetURI.schemeIs("about") && ReaderMode.getOriginalUrl(targetUrl))); - - let showSaveLinkToPocket = canPocket && !showSaveCurrentPageToPocket && subject.onLink; - - // create menu entries if necessary - let menu = document.getElementById("context-pocket"); - if (!menu) { - menu = createElementWithAttrs(document, "menuitem", { - "id": "context-pocket", - "label": gPocketBundle.GetStringFromName("saveToPocketCmd.label"), - "accesskey": gPocketBundle.GetStringFromName("saveToPocketCmd.accesskey"), - "oncommand": "Pocket.savePage(gContextMenu.browser, gContextMenu.browser.currentURI.spec, gContextMenu.browser.contentTitle);" - }); - let sibling = document.getElementById("context-savepage"); - if (sibling.nextSibling) { - sibling.parentNode.insertBefore(menu, sibling.nextSibling); - } else { - sibling.parentNode.appendChild(menu); - } - } - menu.hidden = !(canPocket && showSaveCurrentPageToPocket); - - menu = document.getElementById("context-savelinktopocket"); - if (!menu) { - menu = createElementWithAttrs(document, "menuitem", { - "id": "context-savelinktopocket", - "label": gPocketBundle.GetStringFromName("saveLinkToPocketCmd.label"), - "accesskey": gPocketBundle.GetStringFromName("saveLinkToPocketCmd.accesskey"), - "oncommand": "Pocket.savePage(gContextMenu.browser, gContextMenu.linkURL);" - }); - let sibling = document.getElementById("context-savelink"); - if (sibling.nextSibling) { - sibling.parentNode.insertBefore(menu, sibling.nextSibling); - } else { - sibling.parentNode.appendChild(menu); - } - } - menu.hidden = !showSaveLinkToPocket; - } -} - -// PocketReader -// Listen for reader mode setup and add our button to the reader toolbar -var PocketReader = { - _hidden: true, - get hidden() { - return this._hidden; - }, - set hidden(hide) { - hide = !!hide; - if (hide === this._hidden) - return; - this._hidden = hide; - this.update(); - }, - startup: function() { - // Setup the listeners, update will be called when the widget is added, - // no need to do that now. - let mm = Services.mm; - mm.addMessageListener("Reader:OnSetup", this); - mm.addMessageListener("Reader:Clicked-pocket-button", this); - }, - shutdown: function() { - let mm = Services.mm; - mm.removeMessageListener("Reader:OnSetup", this); - mm.removeMessageListener("Reader:Clicked-pocket-button", this); - this.hidden = true; - }, - update: function() { - if (this.hidden) { - Services.mm.broadcastAsyncMessage("Reader:RemoveButton", { id: "pocket-button" }); - } else { - Services.mm.broadcastAsyncMessage("Reader:AddButton", - { id: "pocket-button", - title: gPocketBundle.GetStringFromName("pocket-button.tooltiptext"), - image: "chrome://pocket/content/panels/img/pocket.svg#pocket-mark" }); - } - }, - receiveMessage: function(message) { - switch (message.name) { - case "Reader:OnSetup": { - // Tell the reader about our button. - if (this.hidden) - break; - message.target.messageManager. - sendAsyncMessage("Reader:AddButton", { id: "pocket-button", - title: gPocketBundle.GetStringFromName("pocket-button.tooltiptext"), - image: "chrome://pocket/content/panels/img/pocket.svg#pocket-mark"}); - break; - } - case "Reader:Clicked-pocket-button": { - let doc = message.target.ownerDocument; - let pocketWidget = doc.getElementById("pocket-button"); - let placement = CustomizableUI.getPlacementOfWidget("pocket-button"); - if (placement) { - if (placement.area == CustomizableUI.AREA_PANEL) { - doc.defaultView.PanelUI.show().then(function() { - // The DOM node might not exist yet if the panel wasn't opened before. - pocketWidget = doc.getElementById("pocket-button"); - pocketWidget.doCommand(); - }); - } else { - pocketWidget.doCommand(); - } - } - break; - } - } - } -} - - -function pktUIGetter(prop, window) { - return { - get: function() { - // delete any getters for properties loaded from main.js so we only load main.js once - delete window.pktUI; - delete window.pktApi; - delete window.pktUIMessaging; - Services.scriptloader.loadSubScript("chrome://pocket/content/main.js", window); - return window[prop]; - }, - configurable: true, - enumerable: true - }; -} - -var PocketOverlay = { - startup: function(reason) { - let styleSheetService = Cc["@mozilla.org/content/style-sheet-service;1"] - .getService(Ci.nsIStyleSheetService); - this._sheetType = styleSheetService.AUTHOR_SHEET; - this._cachedSheet = styleSheetService.preloadSheet(gPocketStyleURI, - this._sheetType); - Services.ppmm.loadProcessScript(PROCESS_SCRIPT, true); - PocketReader.startup(); - CustomizableUI.addListener(this); - CreatePocketWidget(reason); - PocketContextMenu.init(); - - for (let win of CustomizableUI.windows) { - this.onWindowOpened(win); - } - }, - shutdown: function(reason) { - let ppmm = Cc["@mozilla.org/parentprocessmessagemanager;1"] - .getService(Ci.nsIMessageBroadcaster); - ppmm.broadcastAsyncMessage("PocketShuttingDown"); - // Although the ppmm loads the scripts into the chrome process as well, - // we need to manually unregister here anyway to ensure these aren't part - // of the chrome process and avoid errors. - AboutPocket.aboutSaved.unregister(); - AboutPocket.aboutSignup.unregister(); - - CustomizableUI.removeListener(this); - for (let window of CustomizableUI.windows) { - for (let id of ["panelMenu_pocket", "menu_pocket", "BMB_pocket", - "panelMenu_pocketSeparator", "menu_pocketSeparator", - "BMB_pocketSeparator"]) { - let element = window.document.getElementById(id); - if (element) - element.remove(); - } - this.removeStyles(window); - // remove script getters/objects - delete window.Pocket; - delete window.pktApi; - delete window.pktUI; - delete window.pktUIMessaging; - } - CustomizableUI.destroyWidget("pocket-button"); - PocketContextMenu.shutdown(); - PocketReader.shutdown(); - }, - onWindowOpened: function(window) { - if (window.hasOwnProperty("pktUI")) - return; - this.setWindowScripts(window); - this.addStyles(window); - this.updateWindow(window); - }, - setWindowScripts: function(window) { - XPCOMUtils.defineLazyModuleGetter(window, "Pocket", - "chrome://pocket/content/Pocket.jsm"); - // Can't use XPCOMUtils for these because the scripts try to define the variables - // on window, and so the defineProperty inside defineLazyGetter fails. - Object.defineProperty(window, "pktApi", pktUIGetter("pktApi", window)); - Object.defineProperty(window, "pktUI", pktUIGetter("pktUI", window)); - Object.defineProperty(window, "pktUIMessaging", pktUIGetter("pktUIMessaging", window)); - }, - // called for each window as it is opened - updateWindow: function(window) { - // insert our three menu items - let document = window.document; - let hidden = !CustomizableUI.getPlacementOfWidget("pocket-button"); - - // add to bookmarksMenu - let sib = document.getElementById("menu_bookmarkThisPage"); - if (sib && !document.getElementById("menu_pocket")) { - let menu = createElementWithAttrs(document, "menuitem", { - "id": "menu_pocket", - "label": gPocketBundle.GetStringFromName("pocketMenuitem.label"), - "class": "menuitem-iconic", // OSX only - "oncommand": "openUILink(Pocket.listURL, event);", - "hidden": hidden - }); - let sep = createElementWithAttrs(document, "menuseparator", { - "id": "menu_pocketSeparator", - "hidden": hidden - }); - sib.parentNode.insertBefore(menu, sib); - sib.parentNode.insertBefore(sep, sib); - } - - // add to bookmarks-menu-button - sib = document.getElementById("BMB_bookmarksToolbar"); - if (sib && !document.getElementById("BMB_pocket")) { - let menu = createElementWithAttrs(document, "menuitem", { - "id": "BMB_pocket", - "label": gPocketBundle.GetStringFromName("pocketMenuitem.label"), - "class": "menuitem-iconic bookmark-item subviewbutton", - "oncommand": "openUILink(Pocket.listURL, event);", - "hidden": hidden - }); - let sep = createElementWithAttrs(document, "menuseparator", { - "id": "BMB_pocketSeparator", - "hidden": hidden - }); - sib.parentNode.insertBefore(menu, sib); - sib.parentNode.insertBefore(sep, sib); - } - - // add to PanelUI-bookmarks - sib = document.getElementById("panelMenuBookmarkThisPage"); - if (sib && !document.getElementById("panelMenu_pocket")) { - let menu = createElementWithAttrs(document, "toolbarbutton", { - "id": "panelMenu_pocket", - "label": gPocketBundle.GetStringFromName("pocketMenuitem.label"), - "class": "subviewbutton cui-withicon", - "oncommand": "openUILink(Pocket.listURL, event);", - "hidden": hidden - }); - let sep = createElementWithAttrs(document, "toolbarseparator", { - "id": "panelMenu_pocketSeparator", - "hidden": hidden - }); - // nextSibling is no-id toolbarseparator - // insert separator first then button - sib = sib.nextSibling; - sib.parentNode.insertBefore(sep, sib); - sib.parentNode.insertBefore(menu, sib); - } - }, - onWidgetAfterDOMChange: function(aWidgetNode) { - if (aWidgetNode.id != "pocket-button") { - return; - } - let doc = aWidgetNode.ownerDocument; - let hidden = !CustomizableUI.getPlacementOfWidget("pocket-button"); - for (let prefix of ["panelMenu_", "menu_", "BMB_"]) { - let element = doc.getElementById(prefix + "pocket"); - if (element) { - element.hidden = hidden; - doc.getElementById(prefix + "pocketSeparator").hidden = hidden; - } - } - // enable or disable reader button - PocketReader.hidden = hidden; - }, - - addStyles: function(win) { - let utils = win.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindowUtils); - utils.addSheet(this._cachedSheet, this._sheetType); - }, - - removeStyles: function(win) { - let utils = win.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindowUtils); - utils.removeSheet(gPocketStyleURI, this._sheetType); - } - -} - -// use enabled pref as a way for tests (e.g. test_contextmenu.html) to disable -// the addon when running. -function prefObserver(aSubject, aTopic, aData) { - let enabled = Services.prefs.getBoolPref("extensions.pocket.enabled"); - if (enabled) - PocketOverlay.startup(ADDON_ENABLE); - else - PocketOverlay.shutdown(ADDON_DISABLE); -} - -function startup(data, reason) { - AddonManager.getAddonByID("isreaditlater@ideashower.com", addon => { - if (addon && addon.isActive) - return; - setDefaultPrefs(); - // migrate enabled pref - if (Services.prefs.prefHasUserValue("browser.pocket.enabled")) { - Services.prefs.setBoolPref("extensions.pocket.enabled", Services.prefs.getBoolPref("browser.pocket.enabled")); - Services.prefs.clearUserPref("browser.pocket.enabled"); - } - // watch pref change and enable/disable if necessary - Services.prefs.addObserver("extensions.pocket.enabled", prefObserver, false); - if (!Services.prefs.getBoolPref("extensions.pocket.enabled")) - return; - PocketOverlay.startup(reason); - }); -} - -function shutdown(data, reason) { - // For speed sake, we should only do a shutdown if we're being disabled. - // On an app shutdown, just let it fade away... - if (reason != APP_SHUTDOWN) { - Services.prefs.removeObserver("extensions.pocket.enabled", prefObserver); - PocketOverlay.shutdown(reason); - } -} - -function install() { -} - -function uninstall() { -} diff --git a/browser/extensions/pocket/content/AboutPocket.jsm b/browser/extensions/pocket/content/AboutPocket.jsm deleted file mode 100644 index c7f57aa87..000000000 --- a/browser/extensions/pocket/content/AboutPocket.jsm +++ /dev/null @@ -1,93 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -"use strict"; - -const { interfaces: Ci, results: Cr, manager: Cm, utils: Cu } = Components; - -Cu.import("resource://gre/modules/Services.jsm"); -Cu.import("resource://gre/modules/XPCOMUtils.jsm"); - -// See LOG_LEVELS in Console.jsm. Common examples: "All", "Info", "Warn", & "Error". -const PREF_LOG_LEVEL = "loop.debug.loglevel"; - -XPCOMUtils.defineLazyGetter(this, "log", () => { - let ConsoleAPI = Cu.import("resource://gre/modules/Console.jsm", {}).ConsoleAPI; - let consoleOptions = { - maxLogLevelPref: PREF_LOG_LEVEL, - prefix: "Loop" - }; - return new ConsoleAPI(consoleOptions); -}); - - -function AboutPage(chromeURL, aboutHost, classID, description, uriFlags) { - this.chromeURL = chromeURL; - this.aboutHost = aboutHost; - this.classID = Components.ID(classID); - this.description = description; - this.uriFlags = uriFlags; -} - -AboutPage.prototype = { - QueryInterface: XPCOMUtils.generateQI([Ci.nsIAboutModule]), - getURIFlags: function(aURI) { // eslint-disable-line no-unused-vars - return this.uriFlags; - }, - - newChannel: function(aURI, aLoadInfo) { - let newURI = Services.io.newURI(this.chromeURL, null, null); - let channel = Services.io.newChannelFromURIWithLoadInfo(newURI, - aLoadInfo); - channel.originalURI = aURI; - - if (this.uriFlags & Ci.nsIAboutModule.URI_SAFE_FOR_UNTRUSTED_CONTENT) { - let principal = Services.scriptSecurityManager.getNoAppCodebasePrincipal(aURI); - channel.owner = principal; - } - return channel; - }, - - createInstance: function(outer, iid) { - if (outer !== null) { - throw Cr.NS_ERROR_NO_AGGREGATION; - } - return this.QueryInterface(iid); - }, - - register: function() { - Cm.QueryInterface(Ci.nsIComponentRegistrar).registerFactory( - this.classID, this.description, - "@mozilla.org/network/protocol/about;1?what=" + this.aboutHost, this); - }, - - unregister: function() { - Cm.QueryInterface(Ci.nsIComponentRegistrar).unregisterFactory( - this.classID, this); - } -}; - -/* exported AboutPocket */ -var AboutPocket = {}; - -XPCOMUtils.defineLazyGetter(AboutPocket, "aboutSaved", () => - new AboutPage("chrome://pocket/content/panels/saved.html", - "pocket-saved", - "{3e759f54-37af-7843-9824-f71b5993ceed}", - "About Pocket Saved", - Ci.nsIAboutModule.ALLOW_SCRIPT | - Ci.nsIAboutModule.URI_SAFE_FOR_UNTRUSTED_CONTENT | - Ci.nsIAboutModule.HIDE_FROM_ABOUTABOUT) -); - -XPCOMUtils.defineLazyGetter(AboutPocket, "aboutSignup", () => - new AboutPage("chrome://pocket/content/panels/signup.html", - "pocket-signup", - "{8548329d-00c4-234e-8f17-75026db3b56e}", - "About Pocket Signup", - Ci.nsIAboutModule.ALLOW_SCRIPT | - Ci.nsIAboutModule.URI_SAFE_FOR_UNTRUSTED_CONTENT | - Ci.nsIAboutModule.HIDE_FROM_ABOUTABOUT) -); - -this.EXPORTED_SYMBOLS = ["AboutPocket"]; diff --git a/browser/extensions/pocket/content/Pocket.jsm b/browser/extensions/pocket/content/Pocket.jsm deleted file mode 100644 index 54f9cdf11..000000000 --- a/browser/extensions/pocket/content/Pocket.jsm +++ /dev/null @@ -1,93 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -"use strict"; -const {classes: Cc, interfaces: Ci, utils: Cu} = Components; - -this.EXPORTED_SYMBOLS = ["Pocket"]; - -Cu.import("resource://gre/modules/XPCOMUtils.jsm"); -Cu.import("resource://gre/modules/Services.jsm"); - -XPCOMUtils.defineLazyModuleGetter(this, "CustomizableUI", - "resource:///modules/CustomizableUI.jsm"); -XPCOMUtils.defineLazyModuleGetter(this, "ReaderMode", - "resource://gre/modules/ReaderMode.jsm"); - -var Pocket = { - get site() { return Services.prefs.getCharPref("extensions.pocket.site"); }, - get listURL() { return "https://" + Pocket.site + "/?src=ff_ext"; }, - - /** - * Functions related to the Pocket panel UI. - */ - onPanelViewShowing(event) { - let document = event.target.ownerDocument; - let window = document.defaultView; - let iframe = window.pktUI.getPanelFrame(); - - let urlToSave = Pocket._urlToSave; - let titleToSave = Pocket._titleToSave; - Pocket._urlToSave = null; - Pocket._titleToSave = null; - // ViewShowing fires immediately before it creates the contents, - // in lieu of an AfterViewShowing event, just spin the event loop. - window.setTimeout(function() { - if (urlToSave) { - window.pktUI.tryToSaveUrl(urlToSave, titleToSave); - } else { - window.pktUI.tryToSaveCurrentPage(); - } - - // pocketPanelDidHide in main.js set iframe to about:blank when it was - // hidden, make sure we're loading the save panel. - if (iframe.contentDocument && - iframe.contentDocument.readyState == "complete" && - iframe.contentDocument.documentURI != "about:blank") { - window.pktUI.pocketPanelDidShow(); - } else { - // iframe didn't load yet. This seems to always be the case when in - // the toolbar panel, but never the case for a subview. - // XXX this only being fired when it's a _capturing_ listener! - iframe.addEventListener("load", Pocket.onFrameLoaded, true); - } - }, 0); - }, - - onFrameLoaded(event) { - let document = event.currentTarget.ownerDocument; - let window = document.defaultView; - let iframe = window.pktUI.getPanelFrame(); - - iframe.removeEventListener("load", Pocket.onFrameLoaded, true); - window.pktUI.pocketPanelDidShow(); - }, - - onPanelViewHiding(event) { - let window = event.target.ownerGlobal; - window.pktUI.pocketPanelDidHide(event); - }, - - _urlToSave: null, - _titleToSave: null, - savePage(browser, url, title) { - let document = browser.ownerDocument; - let pocketWidget = document.getElementById("pocket-button"); - let placement = CustomizableUI.getPlacementOfWidget("pocket-button"); - if (!placement) - return; - - this._urlToSave = url; - this._titleToSave = title; - if (placement.area == CustomizableUI.AREA_PANEL) { - let win = document.defaultView; - win.PanelUI.show().then(function() { - pocketWidget = document.getElementById("pocket-button"); - pocketWidget.doCommand(); - }); - } else { - pocketWidget.doCommand(); - } - }, -}; diff --git a/browser/extensions/pocket/content/main.js b/browser/extensions/pocket/content/main.js deleted file mode 100644 index 3c1c5785e..000000000 --- a/browser/extensions/pocket/content/main.js +++ /dev/null @@ -1,737 +0,0 @@ -/* - * LICENSE - * - * POCKET MARKS - * - * Notwithstanding the permitted uses of the Software (as defined below) pursuant to the license set forth below, "Pocket," "Read It Later" and the Pocket icon and logos (collectively, the “Pocket Marksâ€) are registered and common law trademarks of Read It Later, Inc. This means that, while you have considerable freedom to redistribute and modify the Software, there are tight restrictions on your ability to use the Pocket Marks. This license does not grant you any rights to use the Pocket Marks except as they are embodied in the Software. - * - * --- - * - * SOFTWARE - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/* - * Pocket UI module - * - * Handles interactions with Pocket buttons, panels and menus. - * - */ - -// TODO : Get the toolbar icons from Firefox's build (Nikki needs to give us a red saved icon) -// TODO : [needs clarificaiton from Fx] Firefox's plan was to hide Pocket from context menus until the user logs in. Now that it's an extension I'm wondering if we still need to do this. -// TODO : [needs clarificaiton from Fx] Reader mode (might be a something they need to do since it's in html, need to investigate their code) -// TODO : [needs clarificaiton from Fx] Move prefs within pktApi.s to sqlite or a local file so it's not editable (and is safer) -// TODO : [nice to have] - Immediately save, buffer the actions in a local queue and send (so it works offline, works like our native extensions) - -Cu.import("resource://gre/modules/XPCOMUtils.jsm"); -XPCOMUtils.defineLazyModuleGetter(this, "PrivateBrowsingUtils", - "resource://gre/modules/PrivateBrowsingUtils.jsm"); -XPCOMUtils.defineLazyModuleGetter(this, "ReaderMode", - "resource://gre/modules/ReaderMode.jsm"); -XPCOMUtils.defineLazyModuleGetter(this, "pktApi", - "chrome://pocket/content/pktApi.jsm"); - -var pktUI = (function() { - - // -- Initialization (on startup and new windows) -- // - var _currentPanelDidShow; - var _currentPanelDidHide; - - // Init panel id at 0. The first actual panel id will have the number 1 so - // in case at some point any panel has the id 0 we know there is something - // wrong - var _panelId = 0; - - var overflowMenuWidth = 230; - var overflowMenuHeight = 475; - var savePanelWidth = 350; - var savePanelHeights = {collapsed: 153, expanded: 272}; - - // -- Event Handling -- // - - /** - * Event handler when Pocket toolbar button is pressed - */ - - function pocketPanelDidShow(event) { - if (_currentPanelDidShow) { - _currentPanelDidShow(event); - } - - } - - function pocketPanelDidHide(event) { - if (_currentPanelDidHide) { - _currentPanelDidHide(event); - } - - // clear the panel - getPanelFrame().setAttribute('src', 'about:blank'); - } - - - // -- Communication to API -- // - - /** - * Either save or attempt to log the user in - */ - function tryToSaveCurrentPage() { - tryToSaveUrl(getCurrentUrl(), getCurrentTitle()); - } - - function tryToSaveUrl(url, title) { - - // If the user is logged in, go ahead and save the current page - if (pktApi.isUserLoggedIn()) { - saveAndShowConfirmation(url, title); - return; - } - - // If the user is not logged in, show the logged-out state to prompt them to authenticate - showSignUp(); - } - - - // -- Panel UI -- // - - /** - * Show the sign-up panel - */ - function showSignUp() { - // AB test: Direct logged-out users to tab vs panel - if (pktApi.getSignupPanelTabTestVariant() == 'v2') - { - let site = Services.prefs.getCharPref("extensions.pocket.site"); - openTabWithUrl('https://' + site + '/firefox_learnmore?s=ffi&t=autoredirect&tv=page_learnmore&src=ff_ext', true); - - // force the panel closed before it opens - getPanel().hidePopup(); - - return; - } - - // Control: Show panel as normal - getFirefoxAccountSignedInUser(function(userdata) - { - var fxasignedin = (typeof userdata == 'object' && userdata !== null) ? '1' : '0'; - var startheight = 490; - var inOverflowMenu = isInOverflowMenu(); - var controlvariant = pktApi.getSignupPanelTabTestVariant() == 'control'; - - if (inOverflowMenu) - { - startheight = overflowMenuHeight; - } - else - { - startheight = 460; - if (fxasignedin == '1') - { - startheight = 406; - } - } - if (!controlvariant) { - startheight = 427; - } - var variant; - if (inOverflowMenu) - { - variant = 'overflow'; - } - else - { - variant = 'storyboard_lm'; - } - - showPanel("about:pocket-signup?pockethost=" - + Services.prefs.getCharPref("extensions.pocket.site") - + "&fxasignedin=" - + fxasignedin - + "&variant=" - + variant - + '&controlvariant=' - + controlvariant - + '&inoverflowmenu=' - + inOverflowMenu - + "&locale=" - + getUILocale(), { - onShow: function() { - }, - onHide: panelDidHide, - width: inOverflowMenu ? overflowMenuWidth : 300, - height: startheight - }); - }); - } - - /** - * Show the logged-out state / sign-up panel - */ - function saveAndShowConfirmation(url, title) { - - // Validate input parameter - if (typeof url !== 'undefined' && url.startsWith("about:reader?url=")) { - url = ReaderMode.getOriginalUrl(url); - } - - var isValidURL = (typeof url !== 'undefined' && (url.startsWith("http") || url.startsWith('https'))); - - var inOverflowMenu = isInOverflowMenu(); - var startheight = pktApi.isPremiumUser() && isValidURL ? savePanelHeights.expanded : savePanelHeights.collapsed; - if (inOverflowMenu) { - startheight = overflowMenuHeight; - } - - var panelId = showPanel("about:pocket-saved?pockethost=" + Services.prefs.getCharPref("extensions.pocket.site") + "&premiumStatus=" + (pktApi.isPremiumUser() ? '1' : '0') + '&inoverflowmenu='+inOverflowMenu + "&locale=" + getUILocale(), { - onShow: function() { - var saveLinkMessageId = 'saveLink'; - - // Send error message for invalid url - if (!isValidURL) { - // TODO: Pass key for localized error in error object - let error = { - message: 'Only links can be saved', - localizedKey: "onlylinkssaved" - }; - pktUIMessaging.sendErrorMessageToPanel(panelId, saveLinkMessageId, error); - return; - } - - // Check online state - if (!navigator.onLine) { - // TODO: Pass key for localized error in error object - let error = { - message: 'You must be connected to the Internet in order to save to Pocket. Please connect to the Internet and try again.' - }; - pktUIMessaging.sendErrorMessageToPanel(panelId, saveLinkMessageId, error); - return; - } - - // Add url - var options = { - success: function(data, request) { - var item = data.item; - var successResponse = { - status: "success", - item: item - }; - pktUIMessaging.sendMessageToPanel(panelId, saveLinkMessageId, successResponse); - }, - error: function(error, request) { - // If user is not authorized show singup page - if (request.status === 401) { - showSignUp(); - return; - } - - // If there is no error message in the error use a - // complete catch-all - var errorMessage = error.message || "There was an error when trying to save to Pocket."; - var panelError = { message: errorMessage} - - // Send error message to panel - pktUIMessaging.sendErrorMessageToPanel(panelId, saveLinkMessageId, panelError); - } - } - - // Add title if given - if (typeof title !== "undefined") { - options.title = title; - } - - // Send the link - pktApi.addLink(url, options); - }, - onHide: panelDidHide, - width: inOverflowMenu ? overflowMenuWidth : savePanelWidth, - height: startheight - }); - } - - /** - * Open a generic panel - */ - function showPanel(url, options) { - - // Add new panel id - _panelId += 1; - url += ("&panelId=" + _panelId); - - // We don't have to hide and show the panel again if it's already shown - // as if the user tries to click again on the toolbar button the overlay - // will close instead of the button will be clicked - var iframe = getPanelFrame(); - - // Register event handlers - registerEventMessages(); - - // Load the iframe - iframe.setAttribute('src', url); - - // Uncomment to leave panel open -- for debugging - // panel.setAttribute('noautohide', true); - // panel.setAttribute('consumeoutsideclicks', false); - // - - // For some reason setting onpopupshown and onpopuphidden on the panel directly didn't work, so - // do it this hacky way for now - _currentPanelDidShow = options.onShow; - _currentPanelDidHide = options.onHide; - - resizePanel({ - width: options.width, - height: options.height - }); - return _panelId; - } - - /** - * Resize the panel - * options = { - * width: , - * height: , - * animate [default false] - * } - */ - function resizePanel(options) { - var iframe = getPanelFrame(); - var subview = getSubview(); - - if (subview) { - // Use the subview's size - iframe.style.width = "100%"; - iframe.style.height = subview.parentNode.clientHeight + "px"; - } else { - // Set an explicit size, panel will adapt. - iframe.style.width = options.width + "px"; - iframe.style.height = options.height + "px"; - } - } - - /** - * Called when the signup and saved panel was hidden - */ - function panelDidHide() { - // clear the onShow and onHide values - _currentPanelDidShow = null; - _currentPanelDidHide = null; - } - - /** - * Register all of the messages needed for the panels - */ - function registerEventMessages() { - var iframe = getPanelFrame(); - - // Only register the messages once - var didInitAttributeKey = 'did_init'; - var didInitMessageListener = iframe.getAttribute(didInitAttributeKey); - if (typeof didInitMessageListener !== "undefined" && didInitMessageListener == 1) { - return; - } - iframe.setAttribute(didInitAttributeKey, 1); - - // When the panel is displayed it generated an event called - // "show": we will listen for that event and when it happens, - // send our own "show" event to the panel's script, so the - // script can prepare the panel for display. - var _showMessageId = "show"; - pktUIMessaging.addMessageListener(iframe, _showMessageId, function(panelId, data) { - // Let panel know that it is ready - pktUIMessaging.sendMessageToPanel(panelId, _showMessageId); - }); - - // Open a new tab with a given url and activate if - var _openTabWithUrlMessageId = "openTabWithUrl"; - pktUIMessaging.addMessageListener(iframe, _openTabWithUrlMessageId, function(panelId, data, contentPrincipal) { - try { - urlSecurityCheck(data.url, contentPrincipal, Services.scriptSecurityManager.DISALLOW_INHERIT_PRINCIPAL); - } catch (ex) { - return; - } - - // Check if the tab should become active after opening - var activate = true; - if (typeof data.activate !== "undefined") { - activate = data.activate; - } - - var url = data.url; - openTabWithUrl(url, activate); - pktUIMessaging.sendResponseMessageToPanel(panelId, _openTabWithUrlMessageId, url); - }); - - // Close the panel - var _closeMessageId = "close"; - pktUIMessaging.addMessageListener(iframe, _closeMessageId, function(panelId, data) { - getPanel().hidePopup(); - }); - - // Send the current url to the panel - var _getCurrentURLMessageId = "getCurrentURL"; - pktUIMessaging.addMessageListener(iframe, _getCurrentURLMessageId, function(panelId, data) { - pktUIMessaging.sendResponseMessageToPanel(panelId, _getCurrentURLMessageId, getCurrentUrl()); - }); - - var _resizePanelMessageId = "resizePanel"; - pktUIMessaging.addMessageListener(iframe, _resizePanelMessageId, function(panelId, data) { - resizePanel(data); - }); - - // Callback post initialization to tell background script that panel is "ready" for communication. - pktUIMessaging.addMessageListener(iframe, "listenerReady", function(panelId, data) { - - }); - - pktUIMessaging.addMessageListener(iframe, "collapseSavePanel", function(panelId, data) { - if (!pktApi.isPremiumUser() && !isInOverflowMenu()) - resizePanel({width:savePanelWidth, height:savePanelHeights.collapsed}); - }); - - pktUIMessaging.addMessageListener(iframe, "expandSavePanel", function(panelId, data) { - if (!isInOverflowMenu()) - resizePanel({width:savePanelWidth, height:savePanelHeights.expanded}); - }); - - // Ask for recently accessed/used tags for auto complete - var _getTagsMessageId = "getTags"; - pktUIMessaging.addMessageListener(iframe, _getTagsMessageId, function(panelId, data) { - pktApi.getTags(function(tags, usedTags) { - pktUIMessaging.sendResponseMessageToPanel(panelId, _getTagsMessageId, { - tags: tags, - usedTags: usedTags - }); - }); - }); - - // Ask for suggested tags based on passed url - var _getSuggestedTagsMessageId = "getSuggestedTags"; - pktUIMessaging.addMessageListener(iframe, _getSuggestedTagsMessageId, function(panelId, data) { - pktApi.getSuggestedTagsForURL(data.url, { - success: function(data, response) { - var suggestedTags = data.suggested_tags; - var successResponse = { - status: "success", - value: { - suggestedTags: suggestedTags - } - } - pktUIMessaging.sendResponseMessageToPanel(panelId, _getSuggestedTagsMessageId, successResponse); - }, - error: function(error, response) { - pktUIMessaging.sendErrorResponseMessageToPanel(panelId, _getSuggestedTagsMessageId, error); - } - }) - }); - - // Pass url and array list of tags, add to existing save item accordingly - var _addTagsMessageId = "addTags"; - pktUIMessaging.addMessageListener(iframe, _addTagsMessageId, function(panelId, data) { - pktApi.addTagsToURL(data.url, data.tags, { - success: function(data, response) { - var successResponse = {status: "success"}; - pktUIMessaging.sendResponseMessageToPanel(panelId, _addTagsMessageId, successResponse); - }, - error: function(error, response) { - pktUIMessaging.sendErrorResponseMessageToPanel(panelId, _addTagsMessageId, error); - } - }); - }); - - // Based on clicking "remove page" CTA, and passed unique item id, remove the item - var _deleteItemMessageId = "deleteItem"; - pktUIMessaging.addMessageListener(iframe, _deleteItemMessageId, function(panelId, data) { - pktApi.deleteItem(data.itemId, { - success: function(data, response) { - var successResponse = {status: "success"}; - pktUIMessaging.sendResponseMessageToPanel(panelId, _deleteItemMessageId, successResponse); - }, - error: function(error, response) { - pktUIMessaging.sendErrorResponseMessageToPanel(panelId, _deleteItemMessageId, error); - } - }) - }); - - var _initL10NMessageId = "initL10N"; - pktUIMessaging.addMessageListener(iframe, _initL10NMessageId, function(panelId, data) { - var strings = {}; - var bundle = Services.strings.createBundle("chrome://pocket/locale/pocket.properties"); - var e = bundle.getSimpleEnumeration(); - while (e.hasMoreElements()) { - var str = e.getNext().QueryInterface(Components.interfaces.nsIPropertyElement); - if (str.key in data) { - strings[str.key] = bundle.formatStringFromName(str.key, data[str.key], data[str.key].length); - } else { - strings[str.key] = str.value; - } - } - pktUIMessaging.sendResponseMessageToPanel(panelId, _initL10NMessageId, { strings: strings }); - }); - - } - - // -- Browser Navigation -- // - - /** - * Open a new tab with a given url and notify the iframe panel that it was opened - */ - - function openTabWithUrl(url) { - let recentWindow = Services.wm.getMostRecentWindow("navigator:browser"); - if (!recentWindow) { - Cu.reportError("Pocket: No open browser windows to openTabWithUrl"); - return; - } - - // If the user is in permanent private browsing than this is not an issue, - // since the current window will always share the same cookie jar as the other - // windows. - if (!PrivateBrowsingUtils.isWindowPrivate(recentWindow) || - PrivateBrowsingUtils.permanentPrivateBrowsing) { - recentWindow.openUILinkIn(url, "tab"); - return; - } - - let windows = Services.wm.getEnumerator("navigator:browser"); - while (windows.hasMoreElements()) { - let win = windows.getNext(); - if (!PrivateBrowsingUtils.isWindowPrivate(win)) { - win.openUILinkIn(url, "tab"); - return; - } - } - - // If there were no non-private windows opened already. - recentWindow.openUILinkIn(url, "window"); - } - - - // -- Helper Functions -- // - - function getCurrentUrl() { - return getBrowser().currentURI.spec; - } - - function getCurrentTitle() { - return getBrowser().contentTitle; - } - - function getPanel() { - var frame = getPanelFrame(); - var panel = frame; - while (panel && panel.localName != "panel") { - panel = panel.parentNode; - } - return panel; - } - - function getPanelFrame() { - var frame = document.getElementById('pocket-panel-iframe'); - if (!frame) { - var frameParent = document.getElementById("PanelUI-pocketView").firstChild; - frame = document.createElement("iframe"); - frame.id = 'pocket-panel-iframe'; - frame.setAttribute("type", "content"); - frameParent.appendChild(frame); - } - return frame; - } - - function getSubview() { - var view = document.getElementById("PanelUI-pocketView"); - if (view && view.getAttribute("current") == "true") - return view; - return null; - } - - function isInOverflowMenu() { - var subview = getSubview(); - return !!subview; - } - - function getFirefoxAccountSignedInUser(callback) { - fxAccounts.getSignedInUser().then(userData => { - callback(userData); - }).then(null, error => { - callback(); - }); - } - - function getUILocale() { - var locale = Cc["@mozilla.org/chrome/chrome-registry;1"]. - getService(Ci.nsIXULChromeRegistry). - getSelectedLocale("browser"); - return locale; - } - - /** - * Public functions - */ - return { - getPanelFrame: getPanelFrame, - - openTabWithUrl: openTabWithUrl, - - pocketPanelDidShow: pocketPanelDidShow, - pocketPanelDidHide: pocketPanelDidHide, - - tryToSaveUrl: tryToSaveUrl, - tryToSaveCurrentPage: tryToSaveCurrentPage - }; -}()); - -// -- Communication to Background -- // -// https://developer.mozilla.org/en-US/Add-ons/Code_snippets/Interaction_between_privileged_and_non-privileged_pages -var pktUIMessaging = (function() { - - /** - * Prefix message id for message listening - */ - function prefixedMessageId(messageId) { - return 'PKT_' + messageId; - } - - /** - * Register a listener and callback for a specific messageId - */ - function addMessageListener(iframe, messageId, callback) { - iframe.addEventListener(prefixedMessageId(messageId), function(e) { - var nodePrincipal = e.target.nodePrincipal; - // ignore to ensure we do not pick up other events in the browser - if (!nodePrincipal || !nodePrincipal.URI || !nodePrincipal.URI.spec.startsWith("about:pocket")) { - return; - } - - // Pass in information to callback - var payload = JSON.parse(e.target.getAttribute("payload"))[0]; - var panelId = payload.panelId; - var data = payload.data; - callback(panelId, data, nodePrincipal); - - // Cleanup the element - e.target.parentNode.removeChild(e.target); - - }, false, true); - } - - /** - * Send a message to the panel's iframe - */ - function sendMessageToPanel(panelId, messageId, payload) { - - if (!isPanelIdValid(panelId)) { return; } - - var panelFrame = pktUI.getPanelFrame(); - if (!isPocketPanelFrameValid(panelFrame)) { return; } - - var doc = panelFrame.contentWindow.document; - var documentElement = doc.documentElement; - - // Send message to panel - var panelMessageId = prefixedMessageId(panelId + '_' + messageId); - - var AnswerEvt = doc.createElement("PKTMessage"); - AnswerEvt.setAttribute("payload", JSON.stringify([payload])); - documentElement.appendChild(AnswerEvt); - - var event = doc.createEvent("HTMLEvents"); - event.initEvent(panelMessageId, true, false); - AnswerEvt.dispatchEvent(event); - } - - function sendResponseMessageToPanel(panelId, messageId, payload) { - var responseMessageId = messageId + "Response"; - sendMessageToPanel(panelId, responseMessageId, payload); - } - - /** - * Helper function to package an error object and send it to the panel - * iframe as a message response - */ - function sendErrorMessageToPanel(panelId, messageId, error) { - var errorResponse = {status: "error", error: error}; - sendMessageToPanel(panelId, messageId, errorResponse); - } - - function sendErrorResponseMessageToPanel(panelId, messageId, error) { - var errorResponse = {status: "error", error: error}; - sendResponseMessageToPanel(panelId, messageId, errorResponse); - } - - /** - * Validation - */ - - function isPanelIdValid(panelId) { - // First check if panelId has a valid value > 0. We set the panelId to - // 0 to start. But if for some reason the message is attempted to be - // sent before the panel has a panelId, then it's going to send out - // a message with panelId 0, which is never going to be heard. If this - // happens, it means some race condition occurred where the panel was - // trying to communicate before it should. - if (panelId === 0) { - console.warn("Tried to send message to panel with id 0.") - return false; - } - - return true - } - - function isPocketPanelFrameValid(panelFrame) { - // Check if panel is available if not throw a warning and bailout. - // We likely try to send to a panel that is not visible anymore - if (typeof panelFrame === "undefined") { - console.warn("Pocket panel frame is undefined"); - return false; - } - - var contentWindow = panelFrame.contentWindow; - if (typeof contentWindow == "undefined") { - console.warn("Pocket panel frame content window is undefined"); - return false; - } - - var doc = contentWindow.document; - if (typeof doc === "undefined") { - console.warn("Pocket panel frame content window document is undefined"); - return false; - } - - var documentElement = doc.documentElement; - if (typeof documentElement === "undefined") { - console.warn("Pocket panel frame content window document document element is undefined"); - return false; - } - - return true; - } - - /** - * Public - */ - return { - addMessageListener: addMessageListener, - sendMessageToPanel: sendMessageToPanel, - sendResponseMessageToPanel: sendResponseMessageToPanel, - sendErrorMessageToPanel: sendErrorMessageToPanel, - sendErrorResponseMessageToPanel: sendErrorResponseMessageToPanel - } -}()); diff --git a/browser/extensions/pocket/content/panels/css/firasans.css b/browser/extensions/pocket/content/panels/css/firasans.css deleted file mode 100644 index 5915345d6..000000000 --- a/browser/extensions/pocket/content/panels/css/firasans.css +++ /dev/null @@ -1,6 +0,0 @@ -@font-face { - font-family: 'FiraSans'; - src: url('../fonts/FiraSans-Regular.woff') format('woff'); - font-weight: normal; - font-style: normal; -}
\ No newline at end of file diff --git a/browser/extensions/pocket/content/panels/css/normalize.css b/browser/extensions/pocket/content/panels/css/normalize.css deleted file mode 100644 index b7b4b746e..000000000 --- a/browser/extensions/pocket/content/panels/css/normalize.css +++ /dev/null @@ -1,424 +0,0 @@ -/*! normalize.css v3.0.2 | MIT License | git.io/normalize */ - -/** - * 1. Set default font family to sans-serif. - * 2. Prevent iOS text size adjust after orientation change, without disabling - * user zoom. - */ - -html { - font-family: sans-serif; /* 1 */ -} - -/** - * Remove default margin. - */ - -body { - margin: 0; -} - -/* HTML5 display definitions - ========================================================================== */ - -/** - * Correct `block` display not defined for any HTML5 element in IE 8/9. - * Correct `block` display not defined for `details` or `summary` in IE 10/11 - * and Firefox. - * Correct `block` display not defined for `main` in IE 11. - */ - -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -main, -menu, -nav, -section, -summary { - display: block; -} - -/** - * 1. Correct `inline-block` display not defined in IE 8/9. - * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. - */ - -audio, -canvas, -progress, -video { - display: inline-block; /* 1 */ - vertical-align: baseline; /* 2 */ -} - -/** - * Prevent modern browsers from displaying `audio` without controls. - * Remove excess height in iOS 5 devices. - */ - -audio:not([controls]) { - display: none; - height: 0; -} - -/** - * Address `[hidden]` styling not present in IE 8/9/10. - * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22. - */ - -[hidden], -template { - display: none; -} - -/* Links - ========================================================================== */ - -/** - * Remove the gray background color from active links in IE 10. - */ - -a { - background-color: transparent; -} - -/** - * Improve readability when focused and also mouse hovered in all browsers. - */ - -a:active, -a:hover { - outline: 0; -} - -/* Text-level semantics - ========================================================================== */ - -/** - * Address styling not present in IE 8/9/10/11, Safari, and Chrome. - */ - -abbr[title] { - border-bottom: 1px dotted; -} - -/** - * Address style set to `bolder` in Firefox 4+, Safari, and Chrome. - */ - -b, -strong { - font-weight: bold; -} - -/** - * Address styling not present in Safari and Chrome. - */ - -dfn { - font-style: italic; -} - -/** - * Address variable `h1` font-size and margin within `section` and `article` - * contexts in Firefox 4+, Safari, and Chrome. - */ - -h1 { - font-size: 2em; - margin: 0.67em 0; -} - -/** - * Address styling not present in IE 8/9. - */ - -mark { - background: #ff0; - color: #000; -} - -/** - * Address inconsistent and variable font size in all browsers. - */ - -small { - font-size: 80%; -} - -/** - * Prevent `sub` and `sup` affecting `line-height` in all browsers. - */ - -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} - -sup { - top: -0.5em; -} - -sub { - bottom: -0.25em; -} - -/* Embedded content - ========================================================================== */ - -/** - * Remove border when inside `a` element in IE 8/9/10. - */ - -img { - border: 0; -} - -/** - * Correct overflow not hidden in IE 9/10/11. - */ - -svg:not(:root) { - overflow: hidden; -} - -/* Grouping content - ========================================================================== */ - -/** - * Address margin not present in IE 8/9 and Safari. - */ - -figure { - margin: 1em 40px; -} - -/** - * Address differences between Firefox and other browsers. - */ - -hr { - -moz-box-sizing: content-box; - box-sizing: content-box; - height: 0; -} - -/** - * Contain overflow in all browsers. - */ - -pre { - overflow: auto; -} - -/** - * Address odd `em`-unit font size rendering in all browsers. - */ - -code, -kbd, -pre, -samp { - font-family: monospace, monospace; - font-size: 1em; -} - -/* Forms - ========================================================================== */ - -/** - * Known limitation: by default, Chrome and Safari on OS X allow very limited - * styling of `select`, unless a `border` property is set. - */ - -/** - * 1. Correct color not being inherited. - * Known issue: affects color of disabled elements. - * 2. Correct font properties not being inherited. - * 3. Address margins set differently in Firefox 4+, Safari, and Chrome. - */ - -button, -input, -optgroup, -select, -textarea { - color: inherit; /* 1 */ - font: inherit; /* 2 */ - margin: 0; /* 3 */ -} - -/** - * Address `overflow` set to `hidden` in IE 8/9/10/11. - */ - -button { - overflow: visible; -} - -/** - * Address inconsistent `text-transform` inheritance for `button` and `select`. - * All other form control elements do not inherit `text-transform` values. - * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. - * Correct `select` style inheritance in Firefox. - */ - -button, -select { - text-transform: none; -} - -/** - * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` - * and `video` controls. - * 2. Correct inability to style clickable `input` types in iOS. - * 3. Improve usability and consistency of cursor style between image-type - * `input` and others. - */ - -button, -html input[type="button"], /* 1 */ -input[type="reset"], -input[type="submit"] { - cursor: pointer; /* 3 */ -} - -/** - * Re-set default cursor for disabled elements. - */ - -button[disabled], -html input[disabled] { - cursor: default; -} - -/** - * Remove inner padding and border in Firefox 4+. - */ - -button::-moz-focus-inner, -input::-moz-focus-inner { - border: 0; - padding: 0; -} - -/** - * Address Firefox 4+ setting `line-height` on `input` using `!important` in - * the UA stylesheet. - */ - -input { - line-height: normal; -} - -/** - * It's recommended that you don't attempt to style these elements. - * Firefox's implementation doesn't respect box-sizing, padding, or width. - * - * 1. Address box sizing set to `content-box` in IE 8/9/10. - * 2. Remove excess padding in IE 8/9/10. - */ - -input[type="checkbox"], -input[type="radio"] { - box-sizing: border-box; /* 1 */ - padding: 0; /* 2 */ -} - -/** - * 1. Address `appearance` set to `searchfield` in Safari and Chrome. - * 2. Address `box-sizing` set to `border-box` in Safari and Chrome - * (include `-moz` to future-proof). - */ - -input[type="search"] { - box-sizing: content-box; -} - -/** - * Define consistent border, margin, and padding. - */ - -fieldset { - border: 1px solid #c0c0c0; - margin: 0 2px; - padding: 0.35em 0.625em 0.75em; -} - -/** - * 1. Correct `color` not being inherited in IE 8/9/10/11. - * 2. Remove padding so people aren't caught out if they zero out fieldsets. - */ - -legend { - border: 0; /* 1 */ - padding: 0; /* 2 */ -} - -/** - * Remove default vertical scrollbar in IE 8/9/10/11. - */ - -textarea { - overflow: auto; -} - -/** - * Don't inherit the `font-weight` (applied by a rule above). - * NOTE: the default cannot safely be changed in Chrome and Safari on OS X. - */ - -optgroup { - font-weight: bold; -} - -/* Tables - ========================================================================== */ - -/** - * Remove most spacing between table cells. - */ - -table { - border-collapse: collapse; - border-spacing: 0; -} - -td, -th { - padding: 0; -} - -/* Normalization for FF panel defauts - ========================================================================== */ -html { - outline: none; - padding: 0; -} - -a { - color: #0095dd; - margin: 0; - outline: none; - padding: 0; - text-decoration: none; -} - -a:hover, -a:active { - color: #008acb; - text-decoration: underline; -} - -a:active { - color: #006b9d; -} diff --git a/browser/extensions/pocket/content/panels/css/saved.css b/browser/extensions/pocket/content/panels/css/saved.css deleted file mode 100644 index d3f88d04c..000000000 --- a/browser/extensions/pocket/content/panels/css/saved.css +++ /dev/null @@ -1,825 +0,0 @@ -/* saved.css - * - * Description: - * With base elements out of the way, this sets all custom styling for the page saved dialog. - * - * Contents: - * Global - * Loading spinner - * Core detail - * Tag entry - * Recent/suggested tags - * Premium upsell - * Token input/autocomplete - * Overflow mode - * Language overrides - */ - -/*=Global ---------------------------------------------------------------------------------------- */ -.pkt_ext_containersaved { - background-color: #fbfbfb; - border-radius: 4px; - display: block; - font-size: 16px; - font-family: "FiraSans", "Helvetica Neue", Helvetica, Arial, sans-serif; - padding: 0; - position: relative; - text-align: center; -} -.pkt_ext_cf:after { - content: " "; - display:table; - clear:both; -} -.pkt_ext_containersaved .pkt_ext_tag_detail, -.pkt_ext_containersaved .pkt_ext_recenttag_detail, -.pkt_ext_containersaved .pkt_ext_suggestedtag_detail { - margin: 0 auto; - padding: 0.25em 1em; - position: relative; - width: auto; -} - -/*=Loading spinner ---------------------------------------------------------------------------------------- */ -@keyframes pkt_ext_spin { - to { - transform: rotate(1turn); - } -} -.pkt_ext_containersaved { - font-size: 16px; -} -.pkt_ext_containersaved .pkt_ext_loadingspinner { - position: relative; - display: inline-block; - height: 2.5em; - left: 50%; - margin: 2em 0 0 -1.25em; - font-size: 10px; - text-indent: 999em; - position: absolute; - top: 4em; - overflow: hidden; - width: 2.5em; - animation: pkt_ext_spin 0.7s infinite steps(8); -} -.pkt_ext_containersaved .pkt_ext_loadingspinner:before, -.pkt_ext_containersaved .pkt_ext_loadingspinner:after, -.pkt_ext_containersaved .pkt_ext_loadingspinner > div:before, -.pkt_ext_containersaved .pkt_ext_loadingspinner > div:after { - content: ''; - position: absolute; - top: 0; - left: 1.125em; - width: 0.25em; - height: 0.75em; - border-radius: .2em; - background: #eee; - box-shadow: 0 1.75em #eee; - transform-origin: 50% 1.25em; -} -.pkt_ext_containersaved .pkt_ext_loadingspinner:before { - background: #555; -} -.pkt_ext_containersaved .pkt_ext_loadingspinner:after { - transform: rotate(-45deg); - background: #777; -} -.pkt_ext_containersaved .pkt_ext_loadingspinner > div:before { - transform: rotate(-90deg); - background: #999; -} -.pkt_ext_containersaved .pkt_ext_loadingspinner > div:after { - transform: rotate(-135deg); - background: #bbb; -} - -/*=Core detail ---------------------------------------------------------------------------------------- */ -.pkt_ext_containersaved .pkt_ext_initload { - left: 0; - position: absolute; - top: 0; - width: 100%; -} -.pkt_ext_containersaved .pkt_ext_detail { - max-height: 0; - opacity: 0; - position: relative; - z-index: 10; -} -.pkt_ext_container_detailactive .pkt_ext_initload { - opacity: 0; -} -.pkt_ext_container_detailactive .pkt_ext_initload .pkt_ext_loadingspinner, -.pkt_ext_container_finalstate .pkt_ext_initload .pkt_ext_loadingspinner { - animation: none; -} -.pkt_ext_container_detailactive .pkt_ext_detail { - max-height: 20em; - opacity: 1; -} -.pkt_ext_container_finalstate .pkt_ext_edit_msg, -.pkt_ext_container_finalstate .pkt_ext_tag_detail, -.pkt_ext_container_finalstate .pkt_ext_suggestedtag_detail, -.pkt_ext_container_finalstate .pkt_ext_item_actions { - opacity: 0; - transition: opacity 0.2s ease-out; -} -.pkt_ext_container_finalerrorstate .pkt_ext_edit_msg, -.pkt_ext_container_finalerrorstate .pkt_ext_tag_detail, -.pkt_ext_container_finalerrorstate .pkt_ext_suggestedtag_detail, -.pkt_ext_container_finalerrorstate .pkt_ext_item_actions { - display: none; - transition: none; -} -.pkt_ext_containersaved h2 { - background: transparent; - border: none; - color: #333; - display: block; - float: none; - font-size: 18px; - font-weight: normal; - letter-spacing: normal; - line-height: 1; - margin: 19px 0 4px; - padding: 0; - position: relative; - text-align: left; - text-transform: none; -} -@keyframes fade_in_out { - 0% { - opacity: 1; - } - 50% { - opacity: 0; - } - 100% { - opacity: 1; - } -} -.pkt_ext_container_finalstate h2 { - animation: fade_in_out 0.4s ease-out; -} -.pkt_ext_container_finalerrorstate h2 { - animation: none; - color: #d74345; -} -.pkt_ext_containersaved .pkt_ext_errordetail { - display: none; - font-size: 12px; - font-weight: normal; - left: 6.4em; - max-width: 21em; - opacity: 0; - position: absolute; - top: 2.7em; - text-align: left; - visibility: hidden; -} -.pkt_ext_container_finalerrorstate .pkt_ext_errordetail { - display: block; - opacity: 1; - visibility: visible; -} -.pkt_ext_containersaved .pkt_ext_logo { - background: url(../img/pocketlogosolo@1x.png) center center no-repeat; - display: block; - float: left; - height: 40px; - padding: 1.25em 1em; - position: relative; - width: 44px; -} -@media (min-resolution: 1.1dppx) { - .pkt_ext_containersaved .pkt_ext_logo { - background-image: url(../img/pocketlogosolo@2x.png); - background-size: 44px 40px; - } -} -.pkt_ext_container_finalerrorstate .pkt_ext_logo { - background-image: url(../img/pocketerror@1x.png); - height: 44px; - width: 44px; -} -@media (min-resolution: 1.1dppx) { - .pkt_ext_container_finalerrorstate .pkt_ext_logo { - background-image: url(../img/pocketerror@2x.png); - background-size: 44px 44px; - } -} -.pkt_ext_containersaved .pkt_ext_topdetail { - float: left; -} -.pkt_ext_containersaved .pkt_ext_edit_msg { - box-sizing: border-box; - display: none; - font-size: 0.75em; - left: auto; - padding: 0 1.4em; - position: absolute; - text-align: left; - top: 8.7em; - width: 100%; -} -.pkt_ext_containersaved .pkt_ext_edit_msg_error { - color: #d74345; -} -.pkt_ext_containersaved .pkt_ext_edit_msg_active { - display: block; -} -.pkt_ext_containersaved .pkt_ext_item_actions { - background: transparent; - float: none; - height: auto; - margin-bottom: 1em; - margin-top: 0; - width: auto; -} -.pkt_ext_containersaved .pkt_ext_item_actions_disabled { - opacity: 0.5; -} -.pkt_ext_container_finalstate .pkt_ext_item_actions_disabled { - opacity: 0; -} -.pkt_ext_containersaved .pkt_ext_item_actions ul { - background: none; - display: block; - float: none; - font-size: 16px; - height: auto; - margin: 0; - padding: 0; - width: 100%; -} -.pkt_ext_containersaved .pkt_ext_item_actions li { - box-sizing: border-box; - background: none; - border: 0; - float: left; - list-style: none; - line-height: 0.8; - height: auto; - padding-right: 0.4em; - width: auto; -} -.pkt_ext_containersaved .pkt_ext_item_actions li:before { - content: none; -} -.pkt_ext_containersaved .pkt_ext_item_actions .pkt_ext_actions_separator { - border-left: 2px solid #777; - height: 0.75em; - margin-top: 0.3em; - padding: 0; - width: 10px; -} -.pkt_ext_containersaved .pkt_ext_item_actions a { - background: transparent; - color: #0095dd; - display: block; - font-feature-settings: normal; - font-size: 12px; - font-weight: normal; - letter-spacing: normal; - line-height: inherit; - height: auto; - margin: 0; - padding: 0.5em; - float: left; - text-align: left; - text-decoration: none; - text-transform: none; -} -.pkt_ext_containersaved .pkt_ext_item_actions a:hover { - color: #008acb; - text-decoration: underline; -} -.pkt_ext_containersaved .pkt_ext_item_actions a:before, -.pkt_ext_containersaved .pkt_ext_item_actions a:after { - background: transparent; - display: none; -} -.pkt_ext_containersaved .pkt_ext_item_actions_disabled a { - cursor: default; -} -.pkt_ext_containersaved .pkt_ext_item_actions .pkt_ext_openpocket { - float: right; - padding-right: 0.7em; - text-align: right; -} -.pkt_ext_containersaved .pkt_ext_item_actions .pkt_ext_removeitem { - padding-left: 0; -} -.pkt_ext_containersaved .pkt_ext_close { - background: url(../img/tag_close@1x.png) center center no-repeat; - color: #333; - display: block; - font-size: 0.8em; - height: 10px; - right: 0.5em; - overflow: hidden; - position: absolute; - text-align: center; - text-indent: -9999px; - top: -1em; - width: 10px; -} -@media (min-resolution: 1.1dppx) { - .pkt_ext_containersaved .pkt_ext_close { - background-image: url(../img/tag_close@2x.png); - background-size: 8px 8px; - } -} -.pkt_ext_containersaved .pkt_ext_close:hover { - color: #000; - text-decoration: none; -} - -/*=Tag entry ---------------------------------------------------------------------------------------- */ -.pkt_ext_containersaved .pkt_ext_tag_detail { - border: 1px solid #c1c1c1; - border-radius: 2px; - font-size: 16px; - clear: both; - margin: 1.25em 1em; - padding: 0; - display: flex; -} -.pkt_ext_containersaved .pkt_ext_tag_error { - border: none; -} -.pkt_ext_containersaved .pkt_ext_tag_input_wrapper { - box-sizing: border-box; - flex: 1; - background-color: #fff; - border-right: 1px solid #c3c3c3; - color: #333; - display: block; - float: none; - font-size: 0.875em; - list-style: none; - margin: 0; - overflow: hidden; - padding: 0.25em 0.5em; - width: 14em; - padding-left: 0.5em; - padding-right: 0.5em; -} -.pkt_ext_containersaved .pkt_ext_tag_error .pkt_ext_tag_input_wrapper { - border: 1px solid #d74345; -} -.pkt_ext_containersaved .pkt_ext_tag_input_wrapper .token-input-list { - display: block; - left: 0; - height: 1.7em; - overflow: hidden; - position: relative; - width: 60em; -} -.pkt_ext_containersaved .pkt_ext_tag_input_wrapper .token-input-list, -.pkt_ext_containersaved .pkt_ext_tag_input_wrapper li { - font-size: 14px; -} -.pkt_ext_containersaved .pkt_ext_tag_input_wrapper li { - height: auto; - width: auto; -} -.pkt_ext_containersaved .pkt_ext_tag_input_wrapper li:before { - content: none; -} -.pkt_ext_containersaved .pkt_ext_tag_input_wrapper input { - border: 0; - box-shadow: none; - background-color: #fff; - color: #333; - font-size: 14px; - float: left; - line-height: normal; - height: auto; - min-height: 0; - min-width: 5em; - padding: 3px 2px 1px; - text-transform: none; -} -.pkt_ext_containersaved .pkt_ext_tag_input_wrapper input::placeholder { - color: #a9a9a9; - letter-spacing: normal; - text-transform: none; -} -.pkt_ext_containersaved .input_disabled { - cursor: default; - opacity: 0.5; -} -.pkt_ext_containersaved .pkt_ext_btn { - box-sizing: border-box; - color: #333; - float: none; - font-size: 0.875em; - font-size: 14px; - letter-spacing: normal; - height: 2.2em; - min-width: 4em; - padding: 0.5em 0; - text-decoration: none; - text-transform: none; - width: auto; -} -.pkt_ext_containersaved .pkt_ext_btn:hover { - background-color: #ebebeb; -} -.pkt_ext_containersaved .pkt_ext_btn:active { - background-color: #dadada; -} -.pkt_ext_containersaved .pkt_ext_btn_disabled, -.pkt_ext_containersaved .pkt_ext_btn_disabled:hover, -.pkt_ext_containersaved .pkt_ext_btn_disabled:active { - background-color: transparent; - cursor: default; - opacity: 0.4; -} -.pkt_ext_containersaved .pkt_ext_tag_error .pkt_ext_btn { - border: 1px solid #c3c3c3; - border-width: 1px 1px 1px 0; - height: 2.35em; -} -.pkt_ext_containersaved .autocomplete-suggestions { - margin-top: 2.2em; -} - -/*=Recent/suggested tags ---------------------------------------------------------------------------------------- */ -.pkt_ext_containersaved .pkt_ext_suggestedtag_detail, -.pkt_ext_containersaved .pkt_ext_suggestedtag_detailshown { - border-top: 1px solid #c1c1c1; - bottom: 0; - box-sizing: border-box; - background: #ebebeb; - clear: both; - left: 0; - opacity: 0; - min-height: 110px; - position: fixed; - visibility: hidden; - width: 100%; -} -.pkt_ext_container_detailactive .pkt_ext_suggestedtag_detail, -.pkt_ext_containersaved .pkt_ext_suggestedtag_detailshown { - opacity: 1; - visibility: visible; -} -.pkt_ext_containersaved .pkt_ext_suggestedtag_detailshown { - padding: 4px 0; -} -.pkt_ext_container_finalstate .pkt_ext_suggestedtag_detail { - opacity: 0; - visibility: hidden; -} -.pkt_ext_containersaved -.pkt_ext_containersaved .pkt_ext_recenttag_detail h4, -.pkt_ext_containersaved .pkt_ext_suggestedtag_detail h4 { - color: #333; - font-size: 0.8125em; - font-size: 13px; - font-weight: normal; - font-style: normal; - letter-spacing: normal; - margin: 0.5em 0; - text-align: left; - text-transform: none; -} -.pkt_ext_containersaved .pkt_ext_recenttag_detail .pkt_ext_loadingspinner, -.pkt_ext_containersaved .pkt_ext_suggestedtag_detail .pkt_ext_loadingspinner { - display: none; - position: absolute; -} -.pkt_ext_containersaved .pkt_ext_recenttag_detail_loading .pkt_ext_loadingspinner, -.pkt_ext_containersaved .pkt_ext_suggestedtag_detail_loading .pkt_ext_loadingspinner { - display: block; - font-size: 6px; - left: 48%; -} -.pkt_ext_containersaved .pkt_ext_recenttag_detail ul, -.pkt_ext_containersaved .pkt_ext_suggestedtag_detail ul { - display: block; - margin: 0; - height: 2em; - overflow: hidden; - padding: 2px 0 0 0; -} -.pkt_ext_containersaved .pkt_ext_suggestedtag_detail ul { - height: auto; - margin: 0; - max-height: 4em; - padding-top: 6px; -} -.pkt_ext_containersaved .pkt_ext_recenttag_detail li, -.pkt_ext_containersaved .pkt_ext_suggestedtag_detail li { - background: none; - float: left; - height: inherit; - line-height: 1.5; - list-style: none; - margin-bottom: 0.5em; - width: inherit; -} -.pkt_ext_containersaved .pkt_ext_recenttag_detail li:before, -.pkt_ext_containersaved .pkt_ext_suggestedtag_detail li:before { - content: none; -} -.pkt_ext_containersaved .pkt_ext_recenttag_detail .recenttag_msg, -.pkt_ext_containersaved .pkt_ext_suggestedtag_detail .suggestedtag_msg { - color: #333; - font-size: 0.8125em; - line-height: 1.2; - left: auto; - position: absolute; - text-align: left; - top: 2em; -} -.pkt_ext_containersaved .pkt_ext_suggestedtag_detail .suggestedtag_msg { - margin-right: 1.3em; -} -.pkt_ext_containersaved .token_tag { - border-radius: 4px; - background: #f7f7f7; - border: 1px solid #c3c3c3; - color: #333; - font-size: 0.875em; - font-size: 14px; - font-weight: normal; - letter-spacing: normal; - margin-right: 0.5em; - padding: 0.125em 0.625em; - text-decoration: none; - text-transform: none; -} -.pkt_ext_containersaved .token_tag:hover { - background-color: #008acb; - border-color: #008acb; - color: #fff; - text-decoration: none; -} -.pkt_ext_containersaved .token_tag:before, -.pkt_ext_containersaved .token_tag:after { - content: none; -} -.pkt_ext_containersaved .token_tag:hover span { - background-image: url(../img/tag_closeactive@1x.png); -} -@media (min-resolution: 1.1dppx) { - .pkt_ext_containersaved .token_tag:hover span { - background-image: url(../img/tag_closeactive@2x.png); - background-size: 8px 8px; - } -} -.pkt_ext_containersaved .pkt_ext_recenttag_detail_disabled .token_tag, -.pkt_ext_containersaved .pkt_ext_recenttag_detail_disabled .token_tag:hover, -.pkt_ext_containersaved .pkt_ext_suggestedtag_detail_disabled .token_tag, -.pkt_ext_containersaved .pkt_ext_suggestedtag_detail_disabled .token_tag:hover { - background-color: #f7f7f7; - cursor: default; - opacity: 0.5; -} -.pkt_ext_containersaved .token_tag_inactive { - display: none; -} - -/*=Premium upsell ---------------------------------------------------------------------------------------- */ -.pkt_ext_detail .pkt_ext_premupsell { - background-color: #50bbb6; - display: block; - padding: 1.5em 0; - text-align: center; -} -.pkt_ext_premupsell h4 { - color: #fff; - font-size: 1em; - margin-bottom: 1em; -} -.pkt_ext_premupsell a { - color: #28605d; - border-bottom: 1px solid #47a7a3; - font-weight: normal; -} -.pkt_ext_premupsell a:hover { - color: #14302f; -} - -/*=Token input/autocomplete ---------------------------------------------------------------------------------------- */ -.token-input-dropdown-tag { - border-radius: 4px; - box-sizing: border-box; - background: #fff; - border: 1px solid #cdcdcd; - margin-top: 0.5em; - left: 0 !important; - overflow-y: auto; - top: 1.9em !important; - z-index: 9000; -} -.token-input-dropdown-tag ul { - height: inherit; - max-height: 115px; - margin: 0; - overflow: auto; - padding: 0.5em 0; -} -.token-input-dropdown-tag ul li { - background: none; - color: #333; - font-weight: normal; - font-size: 1em; - float: none; - height: inherit; - letter-spacing: normal; - list-style: none; - padding: 0.75em; - text-align: left; - text-transform: none; - width: inherit; -} -.token-input-dropdown-tag ul li:before { - content: none; -} -.token-input-dropdown ul li.token-input-selected-dropdown-item { - background-color: #008acb; - color: #fff; -} -.token-input-list { - list-style: none; - margin: 0; - padding: 0; -} -.token-input-list li { - text-align: left; - list-style: none; -} -.token-input-list li input { - border: 0; - background-color: white; -} -.pkt_ext_containersaved .token-input-token { - background: none; - border-radius: 4px; - border: 1px solid #c3c3c3; - overflow: hidden; - margin: 0; - padding: 0 8px; - background-color: #f7f7f7; - color: #000; - font-weight: normal; - cursor: default; - line-height: 1.5; - display: block; - width: auto; - margin: 0 0.2em; - float: left; -} -.pkt_ext_containersaved .pkt_ext_tag_input_wrapper_disabled { - position: relative; -} -.pkt_ext_containersaved .pkt_ext_tag_input_wrapper_disabled input { - opacity: 0.5; -} -.pkt_ext_containersaved .pkt_ext_tag_input_wrapper_disabled .token-input-list { - opacity: 0.5; -} -.pkt_ext_containersaved .pkt_ext_tag_input_wrapper_disabled .pkt_ext_tag_input_blocker { - height: 100%; - left: 0; - position: absolute; - top: 0; - width: 100%; - z-index: 5; -} -.pkt_ext_containersaved .token-input-token p { - display: inline-block; - font-size: 14px; - font-weight: normal; - line-height: inherit; - letter-spacing: normal; - padding: 0; - margin: 0; - text-transform: none; - vertical-align: top; - width: auto; -} -.pkt_ext_containersaved .token-input-token p:before { - content: none; - width: 0; -} -.pkt_ext_containersaved .token-input-token span { - background: url(../img/tag_close@1x.png) center center no-repeat; - cursor: pointer; - display: inline-block; - height: 8px; - margin: 0 0 0 8px; - overflow: hidden; - width: 8px; - text-indent: -99px; -} -@media (min-resolution: 1.1dppx) { - .pkt_ext_containersaved .token-input-token span { - background-image: url(../img/tag_close@2x.png); - background-size: 8px 8px; - } -} -.pkt_ext_containersaved .token-input-selected-token { - background-color: #008acb; - border-color: #008acb; - color: #fff; -} -.pkt_ext_containersaved .token-input-selected-token span { - background-image: url(../img/tag_closeactive@1x.png); -} -@media (min-resolution: 1.1dppx) { - .pkt_ext_containersaved .token-input-selected-token span { - background-image: url(../img/tag_closeactive@2x.png); - background-size: 8px 8px; - } -} -.pkt_ext_containersaved .pkt_ext_tag_input_wrapper_disabled .token-input-selected-token { - background-color: #f7f7f7; -} -.pkt_ext_containersaved .pkt_ext_tag_input_wrapper_disabled .token-input-selected-token span { - color: #bbb; -} - -/*=Overflow mode ---------------------------------------------------------------------------------------- */ -.pkt_ext_saved_overflow .pkt_ext_logo { - float: none; - margin: 0.5em auto 0; -} -.pkt_ext_saved_overflow .pkt_ext_initload { - top: -8px; -} -.pkt_ext_saved_overflow .pkt_ext_loadingspinner { - top: 10em; -} -.pkt_ext_saved_overflow .pkt_ext_topdetail { - float: none; - margin: 0 auto; - padding: 0 1em; -} -.pkt_ext_saved_overflow h2 { - margin-bottom: 0.5em; - margin-top: 0; - text-align: center; -} -.pkt_ext_saved_overflow .pkt_ext_item_actions ul { - display: inline-block; - width: auto; -} -.pkt_ext_saved_overflow .pkt_ext_item_actions li { - float: none; - padding-left: 1em; - padding-right: 1em; - text-align: center; -} -.pkt_ext_saved_overflow .pkt_ext_item_actions .pkt_ext_removeitem, -.pkt_ext_saved_overflow .pkt_ext_item_actions .pkt_ext_openpocket { - float: none; - text-align: center; - padding-left: 0; - padding-right: 0; -} -.pkt_ext_saved_overflow .pkt_ext_item_actions .pkt_ext_actions_separator { - display: none; -} -.pkt_ext_saved_overflow .pkt_ext_tag_detail { - margin-top: 0; -} -.pkt_ext_saved_overflow .pkt_ext_suggestedtag_detail, -.pkt_ext_saved_overflow .pkt_ext_suggestedtag_detailshown { - top: 14.75em; -} -.pkt_ext_saved_overflow .pkt_ext_edit_msg { - top: 16em; -} -.pkt_ext_container_finalerrorstate.pkt_ext_saved_overflow .pkt_ext_errordetail { - box-sizing: border-box; - left: 0; - padding-left: 1em; - padding-right: 1em; - text-align: center; - top: 8.3em; - width: 100%; -} - -/*=Language overrides ---------------------------------------------------------------------------------------- */ -.pkt_ext_saved_es .pkt_ext_btn { - min-width: 5em; -} -.pkt_ext_saved_de .pkt_ext_btn, -.pkt_ext_saved_ru .pkt_ext_btn { - min-width: 6em; -} diff --git a/browser/extensions/pocket/content/panels/css/signup.css b/browser/extensions/pocket/content/panels/css/signup.css deleted file mode 100644 index 5c428a29b..000000000 --- a/browser/extensions/pocket/content/panels/css/signup.css +++ /dev/null @@ -1,424 +0,0 @@ -/* signup.css - * - * Description: - * With base elements out of the way, this sets all custom styling for the extension. - * - * Contents: - * Global - * Core detail - * Core detail - storyboard - * Buttons - * Overflow mode - * Language overrides - */ - -/*=Global ---------------------------------------------------------------------------------------- */ -.pkt_ext_containersignup { - background-color: #ebebeb; - color: #333; - display: block; - font-size: 16px; - font-family: "FiraSans", "Helvetica Neue", Helvetica, Arial, sans-serif; - margin: 0; - padding: 0; - position: relative; - text-align: center; -} -.pkt_ext_containersignup_inactive { - animation: pkt_ext_hide 0.3s ease-out; - opacity: 0; - visibility: hidden; -} -.pkt_ext_cf:after { - content: " "; - display: table; - clear: both; -} -@keyframes pkt_ext_hide { - 0% { - opacity: 1; - visibility: visible; - } - 99% { - opacity: 0; - visibility: visible; - } - 100% { - opacity: 0; - visibility: hidden; - } -} - -/*=Core detail ---------------------------------------------------------------------------------------- */ -.pkt_ext_containersignup p { - font-size: 14px; - color: #333; - font-family: "FiraSans", "Helvetica Neue", Helvetica, Arial, sans-serif; - line-height: 1.3; - margin: 0 auto 1.5em; - max-width: 260px; -} -.pkt_ext_containersignup a { - color: #4c8fd0; -} -.pkt_ext_containersignup a:hover { - color: #3076b9; -} -.pkt_ext_containersignup .pkt_ext_introdetail { - background-color: #fbfbfb; - border: 1px solid #c1c1c1; - border-width: 0 0 1px; -} -.pkt_ext_containersignup .pkt_ext_logo { - background: url(../img/pocketlogo@1x.png) center bottom no-repeat; - display: block; - height: 32px; - margin: 0 auto 15px; - padding-top: 25px; - position: relative; - text-indent: -9999px; - width: 123px; -} -@media (min-resolution: 1.1dppx) { - .pkt_ext_containersignup .pkt_ext_logo { - background-image: url(../img/pocketlogo@2x.png); - background-size: 123px 32px; - } -} -.pkt_ext_containersignup .pkt_ext_introimg { - background: url(../img/pocketsignup_hero@1x.png) center center no-repeat; - display: block; - height: 125px; - margin: 0 auto; - position: relative; - text-indent: -9999px; - width: 255px; -} -@media (min-resolution: 1.1dppx) { - .pkt_ext_containersignup .pkt_ext_introimg { - background-image: url(../img/pocketsignup_hero@2x.png); - background-size: 255px 125px; - } -} -.pkt_ext_containersignup .pkt_ext_tagline { - margin-bottom: 0.5em; -} -.pkt_ext_containersignup .pkt_ext_learnmore { - font-size: 12px; -} -.pkt_ext_containersignup .pkt_ext_learnmoreinactive { - visibility: hidden; -} -.pkt_ext_signupdetail h4 { - font-size: 12px; - font-weight: normal; -} -.pkt_ext_signupdetail .btn-container { - position: relative; - margin-bottom: 0.8em; -} -.pkt_ext_containersignup .ff_signuphelp { - background: url(../img/signup_help@1x.png) center center no-repeat; - display: block; - height: 18px; - margin-top: -9px; - right: -15px; - position: absolute; - text-indent: -9999px; - width: 18px; - top: 50%; -} -@media (min-resolution: 1.1dppx) { - .pkt_ext_containersignup .ff_signuphelp { - background-image: url(../img/signup_help@2x.png); - background-size: 18px 18px; - } -} -.pkt_ext_containersignup .alreadyhave { - font-size: 12px; - max-width: 320px; - margin-top: 15px; -} -.pkt_ext_containersignup .tryitnowspace { - margin-top: 22px; -} -.pkt_ext_signupdetail p.pkt_ext_tos { - color: #777; - font-size: 10px; - line-height: 1.5; - margin-top: 17px; - padding-top: 0; - max-width: 190px; -} - -/*=Core detail - storyboard ---------------------------------------------------------------------------------------- */ -.pkt_ext_introstory { - align-items: center; - display: flex; - padding: 20px; -} -.pkt_ext_introstory:after { - clear: both; - content: ""; - display: table; -} -.pkt_ext_introstory p { - margin-bottom: 0; - text-align: left; -} -.pkt_ext_introstoryone { - padding: 20px 18px 15px 20px; -} -.pkt_ext_introstorytwo { - padding: 3px 0 0 20px; -} -.pkt_ext_introstorytwo .pkt_ext_tagline { - margin-bottom: 1.5em; -} -.pkt_ext_introstory_text { - flex: 1; -} -.pkt_ext_introstoryone_img, -.pkt_ext_introstorytwo_img { - display: block; - overflow: hidden; - position: relative; - text-indent: -999px; -} -.pkt_ext_introstoryone_img { - background: url(../img/pocketsignup_button@1x.png) center right no-repeat; - height: 82px; - padding: 0 0 0 0.7em; - width: 82px; -} -@media (min-resolution: 1.1dppx) { - .pkt_ext_introstoryone_img { - background-image: url(../img/pocketsignup_button@2x.png); - background-size: 82px 82px; - } -} -.pkt_ext_introstorytwo_img { - background: url(../img/pocketsignup_devices@1x.png) bottom right no-repeat; - height: 110px; - padding: 1em 0 0 0.7em; - width: 124px; -} -@media (min-resolution: 1.1dppx) { - .pkt_ext_introstorytwo_img { - background-image: url(../img/pocketsignup_devices@2x.png); - background-size: 124px 110px; - } -} -.pkt_ext_introstorydivider { - border-top: 1px solid #c1c1c1; - height: 1px; - margin: 0 auto; - width: 125px; -} - -/*=Buttons ---------------------------------------------------------------------------------------- */ -.pkt_ext_containersignup .btn { - background-color: #0096dd; - border: 1px solid #0095dd; - border-radius: 2px; - color: #fff; - display: inline-block; - font-family: "FiraSans", "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 16px; - font-weight: normal; - line-height: 1; - margin: 0; - padding: 11px 45px; - text-align: center; - text-decoration: none; - text-shadow: 0 -1px 0 rgba(142,4,17,0.5); - transition: background-color 0.1s linear; - width: auto; -} -.pkt_ext_containersignup .btn-secondary { - background-color: #fbfbfb; - border-color: #c1c1c1; - color: #444; - text-shadow: 0 1px 0 rgba(255,255,255,0.5); -} -.pkt_ext_containersignup .btn-small { - padding: 6px 20px; -} -.pkt_ext_containersignup .btn-mini { - font-size: 14px; - padding: 5px 15px 4px; -} -.pkt_ext_containersignup .btn:hover { - background-color: #008acb; - color: #fff; - text-decoration: none; -} -.pkt_ext_containersignup .btn-secondary:hover, -.pkt_ext_containersignup .btn-important:hover { - background-color: #f6f6f6; - color: #222; -} -.pkt_ext_containersignup .btn-disabled { - background-image: none; - color: #ccc; - color: rgba(255,255,255,0.6); - cursor: default; - opacity: 0.9; -} -.pkt_ext_containersignup .signup-btn-firefox, -.pkt_ext_containersignup .signup-btn-tryitnow, -.pkt_ext_containersignup .signup-btn-email, -.pkt_ext_containersignup .signupinterim-btn-login, -.pkt_ext_containersignup .signupinterim-btn-signup, -.pkt_ext_containersignup .forgot-btn-submit, -.pkt_ext_containersignup .forgotreset-btn-change { - min-width: 12.125em; - padding: 0.8em 1.1875em; - box-sizing: content-box; -} -.pkt_ext_containersignup .signup-btn-email { - position: relative; - z-index: 10; -} -.pkt_ext_containersignup .signup-btn-tryitnow, -.pkt_ext_containersignup .signup-btn-firefox { - min-width: 14.5em; - position: relative; - padding: 0; -} -.pkt_ext_containersignup .signup-btn-tryitnow{ - margin-top: 25px; -} -.pkt_ext_containersignup .signup-btn-firefox .logo { - background: url(../img/signup_firefoxlogo@1x.png) center center no-repeat; - height: 2.6em; - left: 10px; - margin: 0; - padding: 0; - width: 22px; - position: absolute; -} -@media (min-resolution: 1.1dppx) { - .pkt_ext_containersignup .signup-btn-firefox .logo { - background-image: url(../img/signup_firefoxlogo@2x.png); - background-size: 22px 22px; - } -} -.pkt_ext_containersignup .forgotreset-btn-change { - margin-bottom: 2em; -} -.pkt_ext_containersignup .signup-btn-tryitnow .text, -.pkt_ext_containersignup .signup-btn-firefox .text { - display: inline-block; - padding: 0.8em 1.625em; - position: relative; - text-shadow: none; - white-space: nowrap; -} -.pkt_ext_containersignup .signup-btn-tryitnow .text, -.pkt_ext_containersignup .signup-btn-firefox .text { - color: #fff; -} -.pkt_ext_containersignup .btn-disabled .text { - color: #ccc; - color: rgba(255,255,255,0.6); -} - -/*=Overflow mode ---------------------------------------------------------------------------------------- */ -.pkt_ext_signup_overflow .pkt_ext_tagline { - margin-bottom: 1em; - padding: 0 1em; -} -.pkt_ext_signup_overflow .pkt_ext_introimg { - background-size: 200px 98px; - height: 98px; - width: 200px; -} -.pkt_ext_signup_overflow .signup-btn-firefox, -.pkt_ext_containersignup .signup-btn-tryitnow, -.pkt_ext_signup_overflow .signup-btn-email { - font-size: 14px; - min-width: 12.6em; - padding-left: 0.75em; - padding-right: 0.75em; -} -.pkt_ext_signup_overflow .signup-btn-tryitnow .text, -.pkt_ext_signup_overflow .signup-btn-firefox .text { - padding-left: 0; - padding-right: 0; -} - -/*=Language overrides ---------------------------------------------------------------------------------------- */ -.pkt_ext_signup_de .pkt_ext_introstoryone_img { - margin-right: -5px; - padding-left: 0; -} -.pkt_ext_signup_de .pkt_ext_introstorytwo .pkt_ext_tagline, -.pkt_ext_signup_es .pkt_ext_introstorytwo .pkt_ext_tagline, -.pkt_ext_signup_ja .pkt_ext_introstorytwo .pkt_ext_tagline, -.pkt_ext_signup_ru .pkt_ext_introstorytwo .pkt_ext_tagline { - margin-bottom: 0.5em; -} -.pkt_ext_signup_de .signup-btn-firefox .text, -.pkt_ext_signup_de .signup-btn-tryitnow .text, -.pkt_ext_signup_de .signup-btn-email, -.pkt_ext_signup_es .pkt_ext_signupdetail_hero .signup-btn-firefox .text, -.pkt_ext_signup_es .pkt_ext_signupdetail_hero .signup-btn-email, -.pkt_ext_signup_ja .signup-btn-firefox .text, -.pkt_ext_signup_ja .signup-btn-tryitnow .text, -.pkt_ext_signup_ja .signup-btn-email, -.pkt_ext_signup_ru .signup-btn-firefox .text, -.pkt_ext_signup_ru .signup-btn-tryitnow .text, -.pkt_ext_signup_ru .signup-btn-email { - font-size: 15px; -} -.pkt_ext_signup_ja .signup-btn-firefox .text, -.pkt_ext_signup_ja .signup-btn-tryitnow .text, -.pkt_ext_signup_ru .signup-btn-firefox .text, -.pkt_ext_signup_ru .signup-btn-tryitnow .text { - left: 15px; -} -.pkt_ext_signup_de .signup-btn-firefox .logo, -.pkt_ext_signup_es .pkt_ext_signupdetail_hero .signup-btn-firefox .logo, -.pkt_ext_signup_ja .signup-btn-firefox .logo, -.pkt_ext_signup_ru .signup-btn-firefox .logo { - height: 2.4em; -} -@media (min-resolution: 1.1dppx) { - .pkt_ext_signup_de .signup-btn-firefox .logo, - .pkt_ext_signup_es .pkt_ext_signupdetail_hero .signup-btn-firefox .logo, - .pkt_ext_signup_ja .signup-btn-firefox .logo, - .pkt_ext_signup_ru .signup-btn-firefox .logo { - height: 2.5em; - } -} -.pkt_ext_signup_de .signup-btn-email, -.pkt_ext_signup_es .pkt_ext_signupdetail_hero .signup-btn-email, -.pkt_ext_signup_ja .signup-btn-email, -.pkt_ext_signup_ru .signup-btn-email { - min-width: 13em; - padding: 0.8533em 1.2667em; -} -.pkt_ext_signup_de .pkt_ext_logo, -.pkt_ext_signup_es .pkt_ext_logo, -.pkt_ext_signup_ru .pkt_ext_logo { - padding-top: 15px; -} -.pkt_ext_signup_de .pkt_ext_introdetailhero .pkt_ext_tagline, -.pkt_ext_signup_es .pkt_ext_introdetailhero .pkt_ext_tagline, -.pkt_ext_signup_ja .pkt_ext_introdetailhero .pkt_ext_tagline, -.pkt_ext_signup_ru .pkt_ext_introdetailhero .pkt_ext_tagline { - font-size: 13px; -} -.pkt_ext_signup_overflow.pkt_ext_signup_de .signup-btn-firefox .logo, -.pkt_ext_signup_overflow.pkt_ext_signup_es .signup-btn-firefox .logo, -.pkt_ext_signup_overflow.pkt_ext_signup_ja .signup-btn-firefox .logo, -.pkt_ext_signup_overflow.pkt_ext_signup_ru .signup-btn-firefox .logo { - display: none; -} diff --git a/browser/extensions/pocket/content/panels/fonts/FiraSans-Regular.woff b/browser/extensions/pocket/content/panels/fonts/FiraSans-Regular.woff Binary files differdeleted file mode 100644 index f466cdda9..000000000 --- a/browser/extensions/pocket/content/panels/fonts/FiraSans-Regular.woff +++ /dev/null diff --git a/browser/extensions/pocket/content/panels/img/pocket.svg b/browser/extensions/pocket/content/panels/img/pocket.svg deleted file mode 100644 index d93fd6a15..000000000 --- a/browser/extensions/pocket/content/panels/img/pocket.svg +++ /dev/null @@ -1,22 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?>
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 24 24">
- <style>
- use:not(:target) {
- display: none;
- }
- use {
- fill: #808080;
- }
- use[id$="-added"] {
- fill: #ee4056;
- }
- </style>
- <defs>
- <path id="pocket-mark-shape" d="M21.901,4.204C21.642,3.484,20.956,3,20.196,3h-0.01h-1.721H3.814C3.067,3,2.385,3.474,2.119,4.179 C2.04,4.388,2,4.606,2,4.828v6.082l0.069,1.21c0.29,2.751,1.707,5.155,3.899,6.832c0.039,0.03,0.079,0.06,0.119,0.089l0.025,0.018 c1.175,0.866,2.491,1.452,3.91,1.741C10.677,20.932,11.347,21,12.013,21c0.615,0,1.232-0.057,1.839-0.171 c0.073-0.014,0.145-0.028,0.219-0.044c0.02-0.004,0.042-0.012,0.064-0.023c1.359-0.299,2.621-0.87,3.753-1.704l0.025-0.018 c0.04-0.029,0.08-0.059,0.119-0.089c2.192-1.677,3.609-4.08,3.898-6.832L22,10.91V4.828C22,4.618,21.975,4.409,21.901,4.204z M17.667,10.539l-4.704,4.547c-0.266,0.256-0.608,0.385-0.949,0.385c-0.342,0-0.684-0.129-0.949-0.385l-4.705-4.547 c-0.547-0.528-0.565-1.403-0.04-1.954c0.524-0.551,1.392-0.569,1.939-0.041l3.756,3.63l3.755-3.63 c0.547-0.528,1.415-0.51,1.939,0.04C18.231,9.136,18.213,10.011,17.667,10.539z"/>
- </defs>
- <use id="pocket-mark" xlink:href="#pocket-mark-shape"/>
- <use id="pocket-mark-added" xlink:href="#pocket-mark-shape"/>
-</svg>
diff --git a/browser/extensions/pocket/content/panels/img/pocketerror@1x.png b/browser/extensions/pocket/content/panels/img/pocketerror@1x.png Binary files differdeleted file mode 100644 index e2b4d04de..000000000 --- a/browser/extensions/pocket/content/panels/img/pocketerror@1x.png +++ /dev/null diff --git a/browser/extensions/pocket/content/panels/img/pocketerror@2x.png b/browser/extensions/pocket/content/panels/img/pocketerror@2x.png Binary files differdeleted file mode 100644 index d501503b0..000000000 --- a/browser/extensions/pocket/content/panels/img/pocketerror@2x.png +++ /dev/null diff --git a/browser/extensions/pocket/content/panels/img/pocketlogo@1x.png b/browser/extensions/pocket/content/panels/img/pocketlogo@1x.png Binary files differdeleted file mode 100644 index 62b3db310..000000000 --- a/browser/extensions/pocket/content/panels/img/pocketlogo@1x.png +++ /dev/null diff --git a/browser/extensions/pocket/content/panels/img/pocketlogo@2x.png b/browser/extensions/pocket/content/panels/img/pocketlogo@2x.png Binary files differdeleted file mode 100644 index b0e80bff3..000000000 --- a/browser/extensions/pocket/content/panels/img/pocketlogo@2x.png +++ /dev/null diff --git a/browser/extensions/pocket/content/panels/img/pocketlogosolo@1x.png b/browser/extensions/pocket/content/panels/img/pocketlogosolo@1x.png Binary files differdeleted file mode 100644 index 77dc16f8c..000000000 --- a/browser/extensions/pocket/content/panels/img/pocketlogosolo@1x.png +++ /dev/null diff --git a/browser/extensions/pocket/content/panels/img/pocketlogosolo@2x.png b/browser/extensions/pocket/content/panels/img/pocketlogosolo@2x.png Binary files differdeleted file mode 100644 index c467c5a29..000000000 --- a/browser/extensions/pocket/content/panels/img/pocketlogosolo@2x.png +++ /dev/null diff --git a/browser/extensions/pocket/content/panels/img/pocketmenuitem16.png b/browser/extensions/pocket/content/panels/img/pocketmenuitem16.png Binary files differdeleted file mode 100644 index b52db6abf..000000000 --- a/browser/extensions/pocket/content/panels/img/pocketmenuitem16.png +++ /dev/null diff --git a/browser/extensions/pocket/content/panels/img/pocketmenuitem16@2x.png b/browser/extensions/pocket/content/panels/img/pocketmenuitem16@2x.png Binary files differdeleted file mode 100644 index 69aa55b03..000000000 --- a/browser/extensions/pocket/content/panels/img/pocketmenuitem16@2x.png +++ /dev/null diff --git a/browser/extensions/pocket/content/panels/img/pocketsignup_button@1x.png b/browser/extensions/pocket/content/panels/img/pocketsignup_button@1x.png Binary files differdeleted file mode 100644 index 12326fae3..000000000 --- a/browser/extensions/pocket/content/panels/img/pocketsignup_button@1x.png +++ /dev/null diff --git a/browser/extensions/pocket/content/panels/img/pocketsignup_button@2x.png b/browser/extensions/pocket/content/panels/img/pocketsignup_button@2x.png Binary files differdeleted file mode 100644 index 5bdebc5e9..000000000 --- a/browser/extensions/pocket/content/panels/img/pocketsignup_button@2x.png +++ /dev/null diff --git a/browser/extensions/pocket/content/panels/img/pocketsignup_devices@1x.png b/browser/extensions/pocket/content/panels/img/pocketsignup_devices@1x.png Binary files differdeleted file mode 100644 index c4a7ad677..000000000 --- a/browser/extensions/pocket/content/panels/img/pocketsignup_devices@1x.png +++ /dev/null diff --git a/browser/extensions/pocket/content/panels/img/pocketsignup_devices@2x.png b/browser/extensions/pocket/content/panels/img/pocketsignup_devices@2x.png Binary files differdeleted file mode 100644 index 157304c3e..000000000 --- a/browser/extensions/pocket/content/panels/img/pocketsignup_devices@2x.png +++ /dev/null diff --git a/browser/extensions/pocket/content/panels/img/pocketsignup_hero@1x.png b/browser/extensions/pocket/content/panels/img/pocketsignup_hero@1x.png Binary files differdeleted file mode 100644 index 80c5bd486..000000000 --- a/browser/extensions/pocket/content/panels/img/pocketsignup_hero@1x.png +++ /dev/null diff --git a/browser/extensions/pocket/content/panels/img/pocketsignup_hero@2x.png b/browser/extensions/pocket/content/panels/img/pocketsignup_hero@2x.png Binary files differdeleted file mode 100644 index 36d0add61..000000000 --- a/browser/extensions/pocket/content/panels/img/pocketsignup_hero@2x.png +++ /dev/null diff --git a/browser/extensions/pocket/content/panels/img/signup_firefoxlogo@1x.png b/browser/extensions/pocket/content/panels/img/signup_firefoxlogo@1x.png Binary files differdeleted file mode 100644 index 52cbe052c..000000000 --- a/browser/extensions/pocket/content/panels/img/signup_firefoxlogo@1x.png +++ /dev/null diff --git a/browser/extensions/pocket/content/panels/img/signup_firefoxlogo@2x.png b/browser/extensions/pocket/content/panels/img/signup_firefoxlogo@2x.png Binary files differdeleted file mode 100644 index cd218805e..000000000 --- a/browser/extensions/pocket/content/panels/img/signup_firefoxlogo@2x.png +++ /dev/null diff --git a/browser/extensions/pocket/content/panels/img/signup_help@1x.png b/browser/extensions/pocket/content/panels/img/signup_help@1x.png Binary files differdeleted file mode 100644 index 5019025c0..000000000 --- a/browser/extensions/pocket/content/panels/img/signup_help@1x.png +++ /dev/null diff --git a/browser/extensions/pocket/content/panels/img/signup_help@2x.png b/browser/extensions/pocket/content/panels/img/signup_help@2x.png Binary files differdeleted file mode 100644 index 6714bb3bc..000000000 --- a/browser/extensions/pocket/content/panels/img/signup_help@2x.png +++ /dev/null diff --git a/browser/extensions/pocket/content/panels/img/signup_or@1x.png b/browser/extensions/pocket/content/panels/img/signup_or@1x.png Binary files differdeleted file mode 100644 index 318cea0f6..000000000 --- a/browser/extensions/pocket/content/panels/img/signup_or@1x.png +++ /dev/null diff --git a/browser/extensions/pocket/content/panels/img/signup_or@2x.png b/browser/extensions/pocket/content/panels/img/signup_or@2x.png Binary files differdeleted file mode 100644 index 837f1814a..000000000 --- a/browser/extensions/pocket/content/panels/img/signup_or@2x.png +++ /dev/null diff --git a/browser/extensions/pocket/content/panels/img/tag_close@1x.png b/browser/extensions/pocket/content/panels/img/tag_close@1x.png Binary files differdeleted file mode 100644 index 2dd02ba02..000000000 --- a/browser/extensions/pocket/content/panels/img/tag_close@1x.png +++ /dev/null diff --git a/browser/extensions/pocket/content/panels/img/tag_close@2x.png b/browser/extensions/pocket/content/panels/img/tag_close@2x.png Binary files differdeleted file mode 100644 index 8bd0eec57..000000000 --- a/browser/extensions/pocket/content/panels/img/tag_close@2x.png +++ /dev/null diff --git a/browser/extensions/pocket/content/panels/img/tag_closeactive@1x.png b/browser/extensions/pocket/content/panels/img/tag_closeactive@1x.png Binary files differdeleted file mode 100644 index ad4239232..000000000 --- a/browser/extensions/pocket/content/panels/img/tag_closeactive@1x.png +++ /dev/null diff --git a/browser/extensions/pocket/content/panels/img/tag_closeactive@2x.png b/browser/extensions/pocket/content/panels/img/tag_closeactive@2x.png Binary files differdeleted file mode 100644 index 80c35e3aa..000000000 --- a/browser/extensions/pocket/content/panels/img/tag_closeactive@2x.png +++ /dev/null diff --git a/browser/extensions/pocket/content/panels/js/messages.js b/browser/extensions/pocket/content/panels/js/messages.js deleted file mode 100644 index ae08c3e73..000000000 --- a/browser/extensions/pocket/content/panels/js/messages.js +++ /dev/null @@ -1,78 +0,0 @@ -// Documentation of methods used here are at: -// https://developer.mozilla.org/en-US/Add-ons/Code_snippets/Interaction_between_privileged_and_non-privileged_pages - -var pktPanelMessaging = (function() { - - function panelIdFromURL(url) { - var panelId = url.match(/panelId=([\w|\d|\.]*)&?/); - if (panelId && panelId.length > 1) { - return panelId[1]; - } - - return 0; - } - - function prefixedMessageId(messageId) { - return 'PKT_' + messageId; - } - - function panelPrefixedMessageId(panelId, messageId) { - return prefixedMessageId(panelId + '_' + messageId); - } - - function addMessageListener(panelId, messageId, callback) { - document.addEventListener(panelPrefixedMessageId(panelId, messageId), function(e) { - - callback(JSON.parse(e.target.getAttribute("payload"))[0]); - - // TODO: Figure out why e.target.parentNode is null - // e.target.parentNode.removeChild(e.target); - - }, false); - - } - - function removeMessageListener(panelId, messageId, callback) { - document.removeEventListener(panelPrefixedMessageId(panelId, messageId), callback); - } - - function sendMessage(panelId, messageId, payload, callback) { - // Payload needs to be an object in format: - // { panelId: panelId, data: {} } - var messagePayload = { - panelId: panelId, - data: (payload || {}) - }; - - // Create a callback to listen for a response - if (callback) { - var messageResponseId = messageId + "Response"; - var responseListener = function(responsePayload) { - callback(responsePayload); - removeMessageListener(panelId, messageResponseId, responseListener); - } - - addMessageListener(panelId, messageResponseId, responseListener); - } - - // Send message - var element = document.createElement("PKTMessageFromPanelElement"); - element.setAttribute("payload", JSON.stringify([messagePayload])); - document.documentElement.appendChild(element); - - var evt = document.createEvent("Events"); - evt.initEvent(prefixedMessageId(messageId), true, false); - element.dispatchEvent(evt); - } - - - /** - * Public functions - */ - return { - panelIdFromURL: panelIdFromURL, - addMessageListener : addMessageListener, - removeMessageListener : removeMessageListener, - sendMessage: sendMessage - }; -}()); diff --git a/browser/extensions/pocket/content/panels/js/saved.js b/browser/extensions/pocket/content/panels/js/saved.js deleted file mode 100644 index 3abc8889a..000000000 --- a/browser/extensions/pocket/content/panels/js/saved.js +++ /dev/null @@ -1,608 +0,0 @@ -/* -PKT_SAVED_OVERLAY is the view itself and contains all of the methods to manipute the overlay and messaging. -It does not contain any logic for saving or communication with the extension or server. -*/ -var PKT_SAVED_OVERLAY = function (options) -{ - var myself = this; - this.inited = false; - this.active = false; - this.wrapper = null; - this.pockethost = "getpocket.com"; - this.savedItemId = 0; - this.savedUrl = ''; - this.premiumStatus = false; - this.preventCloseTimerCancel = false; - this.closeValid = true; - this.mouseInside = false; - this.autocloseTimer = null; - this.inoverflowmenu = false; - this.dictJSON = {}; - this.autocloseTiming = 3500; - this.autocloseTimingFinalState = 2000; - this.mouseInside = false; - this.userTags = []; - this.cxt_suggested_available = 0; - this.cxt_entered = 0; - this.cxt_suggested = 0; - this.cxt_removed = 0; - this.justaddedsuggested = false; - this.fillTagContainer = function(tags, container, tagclass) { - container.children().remove(); - for (var i = 0; i < tags.length; i++) { - var newtag = $('<li><a href="#" class="token_tag"></a></li>'); - newtag.find('a').text(tags[i]); - newtag.addClass(tagclass); - container.append(newtag); - this.cxt_suggested_available++; - } - }; - this.fillUserTags = function() { - thePKT_SAVED.sendMessage("getTags", {}, function(resp) - { - if (typeof resp == 'object' && typeof resp.tags == 'object') - { - myself.userTags = resp.tags; - } - }); - }; - this.fillSuggestedTags = function() - { - if (!$('.pkt_ext_suggestedtag_detail').length) - { - myself.suggestedTagsLoaded = true; - myself.startCloseTimer(); - return; - } - - thePKT_SAVED.sendMessage("getSuggestedTags", - { - url: myself.savedUrl - }, function(resp) - { - $('.pkt_ext_suggestedtag_detail').removeClass('pkt_ext_suggestedtag_detail_loading'); - if (resp.status == 'success') - { - var newtags = []; - for (var i = 0; i < resp.value.suggestedTags.length; i++) - { - newtags.push(resp.value.suggestedTags[i].tag); - } - myself.suggestedTagsLoaded = true; - if (!myself.mouseInside) { - myself.startCloseTimer(); - } - myself.fillTagContainer(newtags, $('.pkt_ext_suggestedtag_detail ul'), 'token_suggestedtag'); - } - else if (resp.status == 'error') { - var msg = $('<p class="suggestedtag_msg">'); - msg.text(resp.error.message); - $('.pkt_ext_suggestedtag_detail').append(msg); - this.suggestedTagsLoaded = true; - if (!myself.mouseInside) { - myself.startCloseTimer(); - } - } - }); - } - this.initAutoCloseEvents = function() { - this.wrapper.on('mouseenter', function() { - myself.mouseInside = true; - myself.stopCloseTimer(); - }); - this.wrapper.on('mouseleave', function() { - myself.mouseInside = false; - myself.startCloseTimer(); - }); - this.wrapper.on('click', function(e) { - myself.closeValid = false; - }); - }; - this.startCloseTimer = function(manualtime) - { - var settime = manualtime ? manualtime : myself.autocloseTiming; - if (typeof myself.autocloseTimer == 'number') - { - clearTimeout(myself.autocloseTimer); - } - myself.autocloseTimer = setTimeout(function() - { - if (myself.closeValid || myself.preventCloseTimerCancel) - { - myself.preventCloseTimerCancel = false; - myself.closePopup(); - } - }, settime); - }; - this.stopCloseTimer = function() - { - if (myself.preventCloseTimerCancel) - { - return; - } - clearTimeout(myself.autocloseTimer); - }; - this.closePopup = function() { - myself.stopCloseTimer(); - thePKT_SAVED.sendMessage("close"); - }; - this.checkValidTagSubmit = function() { - var inputlength = $.trim($('.pkt_ext_tag_input_wrapper').find('.token-input-input-token').children('input').val()).length; - if ($('.pkt_ext_containersaved').find('.token-input-token').length || (inputlength > 0 && inputlength < 26)) - { - $('.pkt_ext_containersaved').find('.pkt_ext_btn').removeClass('pkt_ext_btn_disabled'); - } - else - { - $('.pkt_ext_containersaved').find('.pkt_ext_btn').addClass('pkt_ext_btn_disabled'); - } - myself.updateSlidingTagList(); - }; - this.updateSlidingTagList = function() { - var inputleft = $('.token-input-input-token input').position().left; - var listleft = $('.token-input-list').position().left; - var listleftmanual = parseInt($('.token-input-list').css('left')); - var listleftnatural = listleft - listleftmanual; - var leftwidth = $('.pkt_ext_tag_input_wrapper').outerWidth(); - - if ((inputleft + listleft + 20) > leftwidth) - { - $('.token-input-list').css('left', Math.min(((inputleft + listleftnatural - leftwidth + 20)*-1), 0) + 'px'); - } - else - { - $('.token-input-list').css('left', '0'); - } - }; - this.checkPlaceholderStatus = function() { - if (this.wrapper.find('.pkt_ext_tag_input_wrapper').find('.token-input-token').length) - { - this.wrapper.find('.token-input-input-token input').attr('placeholder', ''); - } - else - { - this.wrapper.find('.token-input-input-token input').attr('placeholder', $('.pkt_ext_tag_input').attr('placeholder')).css('width', '200px'); - } - }; - this.initTagInput = function() { - var inputwrapper = $('.pkt_ext_tag_input_wrapper'); - inputwrapper.find('.pkt_ext_tag_input').tokenInput([], { - searchDelay: 200, - minChars: 1, - animateDropdown: false, - noResultsHideDropdown: true, - scrollKeyboard: true, - emptyInputLength: 200, - search_function: function(term, cb) { - var returnlist = []; - if (term.length) { - var limit = 15; - var r = new RegExp('^' + term); - for (var i = 0; i < myself.userTags.length; i++) { - if (r.test(myself.userTags[i]) && limit > 0) { - returnlist.push({name:myself.userTags[i]}); - limit--; - } - } - } - if (!$('.token-input-dropdown-tag').data('init')) { - $('.token-input-dropdown-tag').css('width', inputwrapper.outerWidth()).data('init'); - inputwrapper.append($('.token-input-dropdown-tag')); - } - cb(returnlist); - }, - textToData: function(text) { - if ($.trim(text).length > 25 || !$.trim(text).length) { - if (text.length > 25) { - myself.showTagsError(myself.dictJSON.maxtaglength); - changestamp = Date.now(); - setTimeout(function() { - $('.token-input-input-token input').val(text).focus(); - }, 10); - } - return null; - } - myself.hideTagsError(); - return {name:myself.sanitizeText(text.toLowerCase())}; - }, - onReady: function() { - $('.token-input-dropdown').addClass('token-input-dropdown-tag'); - inputwrapper.find('.token-input-input-token input').attr('placeholder', $('.tag-input').attr('placeholder')).css('width', '200px'); - if ($('.pkt_ext_suggestedtag_detail').length) { - myself.wrapper.find('.pkt_ext_suggestedtag_detail').on('click', '.token_tag', function(e) { - e.preventDefault(); - var tag = $(e.target); - if ($(this).parents('.pkt_ext_suggestedtag_detail_disabled').length) { - return; - } - myself.justaddedsuggested = true; - inputwrapper.find('.pkt_ext_tag_input').tokenInput('add', {id:inputwrapper.find('.token-input-token').length, name:tag.text()}); - tag.addClass('token-suggestedtag-inactive'); - $('.token-input-input-token input').focus(); - }); - } - $('.token-input-list').on('keydown', 'input', function(e) { - if (e.which == 37) { - myself.updateSlidingTagList(); - } - }).on('keypress', 'input', function(e) { - if (e.which == 13) { - if (typeof changestamp == 'undefined' || (Date.now() - changestamp > 250)) { - e.preventDefault(); - myself.wrapper.find('.pkt_ext_btn').trigger('click'); - } - } - }).on('keyup', 'input', function(e) { - myself.checkValidTagSubmit(); - }); - myself.checkPlaceholderStatus(); - }, - onAdd: function() { - myself.checkValidTagSubmit(); - changestamp = Date.now(); - myself.hideInactiveTags(); - myself.checkPlaceholderStatus(); - }, - onDelete: function() { - myself.checkValidTagSubmit(); - changestamp = Date.now(); - myself.showActiveTags(); - myself.checkPlaceholderStatus(); - }, - onShowDropdown: function() { - thePKT_SAVED.sendMessage("expandSavePanel"); - }, - onHideDropdown: function() { - thePKT_SAVED.sendMessage("collapseSavePanel"); - } - }); - $('body').on('keydown', function(e) { - var key = e.keyCode || e.which; - if (key == 8) { - var selected = $('.token-input-selected-token'); - if (selected.length) { - e.preventDefault(); - e.stopImmediatePropagation(); - inputwrapper.find('.pkt_ext_tag_input').tokenInput('remove', {name:selected.find('p').text()}); - } - } - else if ($(e.target).parent().hasClass('token-input-input-token')) { - e.stopImmediatePropagation(); - } - }); - }; - this.disableInput = function() { - this.wrapper.find('.pkt_ext_item_actions').addClass('pkt_ext_item_actions_disabled'); - this.wrapper.find('.pkt_ext_btn').addClass('pkt_ext_btn_disabled'); - this.wrapper.find('.pkt_ext_tag_input_wrapper').addClass('pkt_ext_tag_input_wrapper_disabled'); - if (this.wrapper.find('.pkt_ext_suggestedtag_detail').length) { - this.wrapper.find('.pkt_ext_suggestedtag_detail').addClass('pkt_ext_suggestedtag_detail_disabled'); - } - }; - this.enableInput = function() { - this.wrapper.find('.pkt_ext_item_actions').removeClass('pkt_ext_item_actions_disabled'); - this.checkValidTagSubmit(); - this.wrapper.find('.pkt_ext_tag_input_wrapper').removeClass('pkt_ext_tag_input_wrapper_disabled'); - if (this.wrapper.find('.pkt_ext_suggestedtag_detail').length) { - this.wrapper.find('.pkt_ext_suggestedtag_detail').removeClass('pkt_ext_suggestedtag_detail_disabled'); - } - }; - this.initAddTagInput = function() { - $('.pkt_ext_btn').click(function(e) { - e.preventDefault(); - if ($(this).hasClass('pkt_ext_btn_disabled') || $('.pkt_ext_edit_msg_active').filter('.pkt_ext_edit_msg_error').length) - { - return; - } - myself.disableInput(); - $('.pkt_ext_containersaved').find('.pkt_ext_detail h2').text(myself.dictJSON.processingtags); - var originaltags = []; - $('.token-input-token').each(function() - { - var text = $.trim($(this).find('p').text()); - if (text.length) - { - originaltags.push(text); - } - }); - - thePKT_SAVED.sendMessage("addTags", - { - url: myself.savedUrl, - tags: originaltags - }, function(resp) - { - if (resp.status == 'success') - { - myself.showStateFinalMsg(myself.dictJSON.tagssaved); - } - else if (resp.status == 'error') - { - $('.pkt_ext_edit_msg').addClass('pkt_ext_edit_msg_error pkt_ext_edit_msg_active').text(resp.error.message); - } - }); - }); - }; - this.initRemovePageInput = function() { - $('.pkt_ext_removeitem').click(function(e) { - if ($(this).parents('.pkt_ext_item_actions_disabled').length) { - e.preventDefault(); - return; - } - if ($(this).hasClass('pkt_ext_removeitem')) { - e.preventDefault(); - myself.disableInput(); - $('.pkt_ext_containersaved').find('.pkt_ext_detail h2').text(myself.dictJSON.processingremove); - - thePKT_SAVED.sendMessage("deleteItem", - { - itemId: myself.savedItemId - }, function(resp) { - if (resp.status == 'success') { - myself.showStateFinalMsg(myself.dictJSON.pageremoved); - } - else if (resp.status == 'error') { - $('.pkt_ext_edit_msg').addClass('pkt_ext_edit_msg_error pkt_ext_edit_msg_active').text(resp.error.message); - } - }); - } - }); - }; - this.initOpenListInput = function() { - $('.pkt_ext_openpocket').click(function(e) - { - e.preventDefault(); - thePKT_SAVED.sendMessage("openTabWithUrl", - { - url: $(this).attr('href'), - activate: true - }); - myself.closePopup(); - }); - }; - this.showTagsError = function(msg) { - $('.pkt_ext_edit_msg').addClass('pkt_ext_edit_msg_error pkt_ext_edit_msg_active').text(msg); - $('.pkt_ext_tag_detail').addClass('pkt_ext_tag_error'); - }; - this.hideTagsError = function(msg) { - $('.pkt_ext_edit_msg').removeClass('pkt_ext_edit_msg_error pkt_ext_edit_msg_active').text(''); - $('.pkt_ext_tag_detail').removeClass('pkt_ext_tag_error'); - }; - this.showActiveTags = function() { - if (!$('.pkt_ext_suggestedtag_detail').length) { - return; - } - var activetokenstext = '|'; - $('.token-input-token').each(function(index, element) { - activetokenstext += $(element).find('p').text() + '|'; - }); - - var inactivetags = $('.pkt_ext_suggestedtag_detail').find('.token_tag_inactive'); - inactivetags.each(function(index, element) { - if (activetokenstext.indexOf('|' + $(element).text() + '|') == -1) { - $(element).removeClass('token_tag_inactive'); - } - }); - }; - this.hideInactiveTags = function() { - if (!$('.pkt_ext_suggestedtag_detail').length) { - return; - } - var activetokenstext = '|'; - $('.token-input-token').each(function(index, element) { - activetokenstext += $(element).find('p').text() + '|'; - }); - var activesuggestedtags = $('.token_tag').not('.token_tag_inactive'); - activesuggestedtags.each(function(index, element) { - if (activetokenstext.indexOf('|' + $(element).text() + '|') > -1) { - $(element).addClass('token_tag_inactive'); - } - }); - }; - this.showStateSaved = function(initobj) { - this.wrapper.find('.pkt_ext_detail h2').text(this.dictJSON.pagesaved); - this.wrapper.find('.pkt_ext_btn').addClass('pkt_ext_btn_disabled'); - if (typeof initobj.item == 'object') - { - this.savedItemId = initobj.item.item_id; - this.savedUrl = initobj.item.given_url; - } - $('.pkt_ext_containersaved').addClass('pkt_ext_container_detailactive').removeClass('pkt_ext_container_finalstate'); - - myself.fillUserTags(); - if (myself.suggestedTagsLoaded) { - myself.startCloseTimer(); - } - else { - myself.fillSuggestedTags(); - } - }; - this.sanitizeText = function(s) { - var sanitizeMap = { - "&": "&", - "<": "<", - ">": ">", - '"': '"', - "'": ''' - }; - if (typeof s !== 'string') - { - return ''; - } - return String(s).replace(/[&<>"']/g, function (str) { - return sanitizeMap[str]; - }); - }; - this.showStateFinalMsg = function(msg) { - this.wrapper.find('.pkt_ext_tag_detail').one('webkitTransitionEnd transitionend msTransitionEnd oTransitionEnd', function(e) - { - $(this).off('webkitTransitionEnd transitionend msTransitionEnd oTransitionEnd'); - myself.preventCloseTimerCancel = true; - myself.startCloseTimer(myself.autocloseTimingFinalState); - myself.wrapper.find('.pkt_ext_detail h2').text(msg); - }); - this.wrapper.addClass('pkt_ext_container_finalstate'); - }; - this.showStateError = function(headline, detail) { - this.wrapper.find('.pkt_ext_detail h2').text(headline); - this.wrapper.find('.pkt_ext_detail h3').text(detail); - this.wrapper.addClass('pkt_ext_container_detailactive pkt_ext_container_finalstate pkt_ext_container_finalerrorstate'); - this.preventCloseTimerCancel = true; - this.startCloseTimer(myself.autocloseTimingFinalState); - } - this.getTranslations = function() - { - this.dictJSON = window.pocketStrings; - }; -}; - -PKT_SAVED_OVERLAY.prototype = { - create : function() - { - if (this.active) - { - return; - } - this.active = true; - - // set translations - this.getTranslations(); - - // set host - this.dictJSON.pockethost = this.pockethost; - - // extra modifier class for collapsed state - if (this.inoverflowmenu) - { - $('body').addClass('pkt_ext_saved_overflow'); - } - - // extra modifier class for language - if (this.locale) - { - $('body').addClass('pkt_ext_saved_' + this.locale); - } - - // Create actual content - $('body').append(Handlebars.templates.saved_shell(this.dictJSON)); - - // Add in premium content (if applicable based on premium status) - this.createPremiumFunctionality(); - - // Initialize functionality for overlay - this.wrapper = $('.pkt_ext_containersaved'); - this.initTagInput(); - this.initAddTagInput(); - this.initRemovePageInput(); - this.initOpenListInput(); - this.initAutoCloseEvents(); - }, - createPremiumFunctionality: function() - { - if (this.premiumStatus && !$('.pkt_ext_suggestedtag_detail').length) - { - $('body').append(Handlebars.templates.saved_premiumshell(this.dictJSON)); - $('.pkt_ext_initload').append(Handlebars.templates.saved_premiumextras(this.dictJSON)); - } - } -}; - - -// Layer between Bookmarklet and Extensions -var PKT_SAVED = function () {}; - -PKT_SAVED.prototype = { - init: function () { - if (this.inited) { - return; - } - this.panelId = pktPanelMessaging.panelIdFromURL(window.location.href); - this.overlay = new PKT_SAVED_OVERLAY(); - - this.inited = true; - }, - - addMessageListener: function(messageId, callback) { - pktPanelMessaging.addMessageListener(this.panelId, messageId, callback); - }, - - sendMessage: function(messageId, payload, callback) { - pktPanelMessaging.sendMessage(this.panelId, messageId, payload, callback); - }, - - create: function() { - var myself = this; - var url = window.location.href.match(/premiumStatus=([\w|\d|\.]*)&?/); - if (url && url.length > 1) - { - myself.overlay.premiumStatus = (url[1] == '1'); - } - var host = window.location.href.match(/pockethost=([\w|\.]*)&?/); - if (host && host.length > 1) - { - myself.overlay.pockethost = host[1]; - } - var inoverflowmenu = window.location.href.match(/inoverflowmenu=([\w|\.]*)&?/); - if (inoverflowmenu && inoverflowmenu.length > 1) - { - myself.overlay.inoverflowmenu = (inoverflowmenu[1] == 'true'); - } - var locale = window.location.href.match(/locale=([\w|\.]*)&?/); - if (locale && locale.length > 1) - { - myself.overlay.locale = locale[1].toLowerCase(); - } - - myself.overlay.create(); - - // tell back end we're ready - thePKT_SAVED.sendMessage("show"); - - // wait confirmation of save before flipping to final saved state - thePKT_SAVED.addMessageListener("saveLink", function(resp) - { - if (resp.status == 'error') { - if (typeof resp.error == 'object') - { - if (resp.error.localizedKey) - { - myself.overlay.showStateError(myself.overlay.dictJSON.pagenotsaved, myself.overlay.dictJSON[resp.error.localizedKey]); - } - else - { - myself.overlay.showStateError(myself.overlay.dictJSON.pagenotsaved, resp.error.message); - } - } - else - { - myself.overlay.showStateError(myself.overlay.dictJSON.pagenotsaved, myself.overlay.dictJSON.errorgeneric); - } - return; - } - - myself.overlay.showStateSaved(resp); - }); - - } -} - -$(function() -{ - if (!window.thePKT_SAVED) { - var thePKT_SAVED = new PKT_SAVED(); - window.thePKT_SAVED = thePKT_SAVED; - thePKT_SAVED.init(); - } - - var pocketHost = thePKT_SAVED.overlay.pockethost; - // send an async message to get string data - thePKT_SAVED.sendMessage("initL10N", { - tos: [ - 'https://'+ pocketHost +'/tos?s=ffi&t=tos&tv=panel_tryit', - 'https://'+ pocketHost +'/privacy?s=ffi&t=privacypolicy&tv=panel_tryit' - ] - }, function(resp) { - window.pocketStrings = resp.strings; - window.thePKT_SAVED.create(); - }); -}); diff --git a/browser/extensions/pocket/content/panels/js/signup.js b/browser/extensions/pocket/content/panels/js/signup.js deleted file mode 100644 index af55cc2a7..000000000 --- a/browser/extensions/pocket/content/panels/js/signup.js +++ /dev/null @@ -1,193 +0,0 @@ -/* -PKT_SIGNUP_OVERLAY is the view itself and contains all of the methods to manipute the overlay and messaging. -It does not contain any logic for saving or communication with the extension or server. -*/ -var PKT_SIGNUP_OVERLAY = function (options) -{ - var myself = this; - this.inited = false; - this.active = false; - this.delayedStateSaved = false; - this.wrapper = null; - this.variant = window.___PKT__SIGNUP_VARIANT; - this.tagline = window.___PKT__SIGNUP_TAGLINE || ''; - this.preventCloseTimerCancel = false; - this.translations = {}; - this.closeValid = true; - this.mouseInside = false; - this.autocloseTimer = null; - this.variant = ""; - this.inoverflowmenu = false; - this.controlvariant; - this.pockethost = "getpocket.com"; - this.fxasignedin = false; - this.dictJSON = {}; - this.initCloseTabEvents = function() { - $('.btn,.pkt_ext_learnmore,.alreadyhave > a').click(function(e) - { - e.preventDefault(); - thePKT_SIGNUP.sendMessage("openTabWithUrl", - { - url: $(this).attr('href'), - activate: true - }); - myself.closePopup(); - }); - }; - this.closePopup = function() { - thePKT_SIGNUP.sendMessage("close"); - }; - this.sanitizeText = function(s) { - var sanitizeMap = { - "&": "&", - "<": "<", - ">": ">", - '"': '"', - "'": ''' - }; - if (typeof s !== 'string') - { - return ''; - } - return String(s).replace(/[&<>"']/g, function (str) { - return sanitizeMap[str]; - }); - }; - this.getTranslations = function() - { - this.dictJSON = window.pocketStrings; - }; - -}; - -PKT_SIGNUP_OVERLAY.prototype = { - create : function() - { - var controlvariant = window.location.href.match(/controlvariant=([\w|\.]*)&?/); - if (controlvariant && controlvariant.length > 1) - { - this.controlvariant = controlvariant[1]; - } - var variant = window.location.href.match(/variant=([\w|\.]*)&?/); - if (variant && variant.length > 1) - { - this.variant = variant[1]; - } - var fxasignedin = window.location.href.match(/fxasignedin=([\w|\d|\.]*)&?/); - if (fxasignedin && fxasignedin.length > 1) - { - this.fxasignedin = (fxasignedin[1] == '1'); - } - var host = window.location.href.match(/pockethost=([\w|\.]*)&?/); - if (host && host.length > 1) - { - this.pockethost = host[1]; - } - var inoverflowmenu = window.location.href.match(/inoverflowmenu=([\w|\.]*)&?/); - if (inoverflowmenu && inoverflowmenu.length > 1) - { - this.inoverflowmenu = (inoverflowmenu[1] == 'true'); - } - var locale = window.location.href.match(/locale=([\w|\.]*)&?/); - if (locale && locale.length > 1) - { - this.locale = locale[1].toLowerCase(); - } - - if (this.active) - { - return; - } - this.active = true; - - // set translations - this.getTranslations(); - this.dictJSON.fxasignedin = this.fxasignedin ? 1 : 0; - this.dictJSON.controlvariant = this.controlvariant == 'true' ? 1 : 0; - this.dictJSON.variant = (this.variant ? this.variant : 'undefined'); - this.dictJSON.variant += this.fxasignedin ? '_fxa' : '_nonfxa'; - this.dictJSON.pockethost = this.pockethost; - this.dictJSON.showlearnmore = true; - - // extra modifier class for collapsed state - if (this.inoverflowmenu) - { - $('body').addClass('pkt_ext_signup_overflow'); - } - - // extra modifier class for language - if (this.locale) - { - $('body').addClass('pkt_ext_signup_' + this.locale); - } - - // Create actual content - if (this.variant == 'overflow') - { - $('body').append(Handlebars.templates.signup_shell(this.dictJSON)); - } - else - { - $('body').append(Handlebars.templates.signupstoryboard_shell(this.dictJSON)); - } - - - // tell background we're ready - thePKT_SIGNUP.sendMessage("show"); - - // close events - this.initCloseTabEvents(); - } -}; - - -// Layer between Bookmarklet and Extensions -var PKT_SIGNUP = function () {}; - -PKT_SIGNUP.prototype = { - init: function () { - if (this.inited) { - return; - } - this.panelId = pktPanelMessaging.panelIdFromURL(window.location.href); - this.overlay = new PKT_SIGNUP_OVERLAY(); - - this.inited = true; - }, - - addMessageListener: function(messageId, callback) { - pktPanelMessaging.addMessageListener(this.panelId, messageId, callback); - }, - - sendMessage: function(messageId, payload, callback) { - pktPanelMessaging.sendMessage(this.panelId, messageId, payload, callback); - }, - - create: function() { - this.overlay.create(); - - // tell back end we're ready - thePKT_SIGNUP.sendMessage("show"); - } -} - -$(function() -{ - if (!window.thePKT_SIGNUP) { - var thePKT_SIGNUP = new PKT_SIGNUP(); - window.thePKT_SIGNUP = thePKT_SIGNUP; - thePKT_SIGNUP.init(); - } - - var pocketHost = thePKT_SIGNUP.overlay.pockethost; - // send an async message to get string data - thePKT_SIGNUP.sendMessage("initL10N", { - tos: [ - 'https://'+ pocketHost +'/tos?s=ffi&t=tos&tv=panel_tryit', - 'https://'+ pocketHost +'/privacy?s=ffi&t=privacypolicy&tv=panel_tryit' - ] - }, function(resp) { - window.pocketStrings = resp.strings; - window.thePKT_SIGNUP.create(); - }); -}); diff --git a/browser/extensions/pocket/content/panels/js/tmpl.js b/browser/extensions/pocket/content/panels/js/tmpl.js deleted file mode 100644 index a03ffda70..000000000 --- a/browser/extensions/pocket/content/panels/js/tmpl.js +++ /dev/null @@ -1,242 +0,0 @@ -(function() { - var template = Handlebars.template, templates = Handlebars.templates = Handlebars.templates || {}; -templates['saved_premiumextras'] = template({"compiler":[6,">= 2.0.0-beta.1"],"main":function(depth0,helpers,partials,data) { - return "<div class=\"pkt_ext_suggestedtag_detailshown\">\r\n</div> "; - },"useData":true}); -templates['saved_premiumshell'] = template({"compiler":[6,">= 2.0.0-beta.1"],"main":function(depth0,helpers,partials,data) { - var helper, functionType="function", helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression; - return "<div class=\"pkt_ext_suggestedtag_detail pkt_ext_suggestedtag_detail_loading\">\n <h4>" - + escapeExpression(((helper = (helper = helpers.suggestedtags || (depth0 != null ? depth0.suggestedtags : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"suggestedtags","hash":{},"data":data}) : helper))) - + "</h4>\n <div class=\"pkt_ext_loadingspinner\"><div></div></div>\n <ul class=\"pkt_ext_cf\">\n </ul>\n</div>"; -},"useData":true}); -templates['saved_shell'] = template({"compiler":[6,">= 2.0.0-beta.1"],"main":function(depth0,helpers,partials,data) { - var helper, functionType="function", helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression; - return "<div class=\"pkt_ext_initload\">\n <div class=\"pkt_ext_logo\"></div> \n <div class=\"pkt_ext_topdetail\">\n <h2>" - + escapeExpression(((helper = (helper = helpers.saving || (depth0 != null ? depth0.saving : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"saving","hash":{},"data":data}) : helper))) - + "</h2>\n </div> \n <div class=\"pkt_ext_loadingspinner\"><div></div></div>\n</div> \n<div class=\"pkt_ext_detail\"> \n <div class=\"pkt_ext_logo\"></div>\n <div class=\"pkt_ext_topdetail\">\n <h2>" - + escapeExpression(((helper = (helper = helpers.pagesaved || (depth0 != null ? depth0.pagesaved : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"pagesaved","hash":{},"data":data}) : helper))) - + "</h2>\n <h3 class=\"pkt_ext_errordetail\"></h3>\n <nav class=\"pkt_ext_item_actions pkt_ext_cf\">\n <ul>\n <li><a class=\"pkt_ext_removeitem\" href=\"#\">" - + escapeExpression(((helper = (helper = helpers.removepage || (depth0 != null ? depth0.removepage : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"removepage","hash":{},"data":data}) : helper))) - + "</a></li>\n <li class=\"pkt_ext_actions_separator\"></li> \n <li><a class=\"pkt_ext_openpocket\" href=\"https://" - + escapeExpression(((helper = (helper = helpers.pockethost || (depth0 != null ? depth0.pockethost : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"pockethost","hash":{},"data":data}) : helper))) - + "/a?src=ff_ext_saved\" target=\"_blank\">" - + escapeExpression(((helper = (helper = helpers.viewlist || (depth0 != null ? depth0.viewlist : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"viewlist","hash":{},"data":data}) : helper))) - + "</a></li>\n </ul>\n </nav> \n </div>\n <div class=\"pkt_ext_tag_detail pkt_ext_cf\">\n <div class=\"pkt_ext_tag_input_wrapper\">\n <div class=\"pkt_ext_tag_input_blocker\"></div>\n <input class=\"pkt_ext_tag_input\" type=\"text\" placeholder=\"" - + escapeExpression(((helper = (helper = helpers.addtags || (depth0 != null ? depth0.addtags : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"addtags","hash":{},"data":data}) : helper))) - + "\">\n </div>\n <a href=\"#\" class=\"pkt_ext_btn pkt_ext_btn_disabled\">" - + escapeExpression(((helper = (helper = helpers.save || (depth0 != null ? depth0.save : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"save","hash":{},"data":data}) : helper))) - + "</a>\n </div>\n <p class=\"pkt_ext_edit_msg\"></p>\n</div>"; -},"useData":true}); -templates['signup_shell'] = template({"1":function(depth0,helpers,partials,data) { - var stack1, buffer = ""; - stack1 = helpers['if'].call(depth0, (depth0 != null ? depth0.controlvariant : depth0), {"name":"if","hash":{},"fn":this.program(2, data),"inverse":this.program(4, data),"data":data}); - if (stack1 != null) { buffer += stack1; } - return buffer; -},"2":function(depth0,helpers,partials,data) { - var helper, functionType="function", helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression; - return " <p class=\"pkt_ext_learnmorecontainer\"><a class=\"pkt_ext_learnmore\" href=\"https://" - + escapeExpression(((helper = (helper = helpers.pockethost || (depth0 != null ? depth0.pockethost : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"pockethost","hash":{},"data":data}) : helper))) - + "/firefox_learnmore?s=ffi&t=learnmore&tv=panel_control&v=" - + escapeExpression(((helper = (helper = helpers.variant || (depth0 != null ? depth0.variant : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"variant","hash":{},"data":data}) : helper))) - + "\" target=\"_blank\">" - + escapeExpression(((helper = (helper = helpers.learnmore || (depth0 != null ? depth0.learnmore : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"learnmore","hash":{},"data":data}) : helper))) - + "</a></p>\n"; -},"4":function(depth0,helpers,partials,data) { - var helper, functionType="function", helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression; - return " <p class=\"pkt_ext_learnmorecontainer\"><a class=\"pkt_ext_learnmore\" href=\"https://" - + escapeExpression(((helper = (helper = helpers.pockethost || (depth0 != null ? depth0.pockethost : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"pockethost","hash":{},"data":data}) : helper))) - + "/firefox_learnmore?s=ffi&t=learnmore&tv=panel_tryit&v=" - + escapeExpression(((helper = (helper = helpers.variant || (depth0 != null ? depth0.variant : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"variant","hash":{},"data":data}) : helper))) - + "\" target=\"_blank\">" - + escapeExpression(((helper = (helper = helpers.learnmore || (depth0 != null ? depth0.learnmore : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"learnmore","hash":{},"data":data}) : helper))) - + "</a></p>\n"; -},"6":function(depth0,helpers,partials,data) { - var helper, functionType="function", helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression; - return " <p class=\"pkt_ext_learnmorecontainer\"><a class=\"pkt_ext_learnmore pkt_ext_learnmoreinactive\" href=\"#\">" - + escapeExpression(((helper = (helper = helpers.learnmore || (depth0 != null ? depth0.learnmore : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"learnmore","hash":{},"data":data}) : helper))) - + "</a></p>\n"; -},"8":function(depth0,helpers,partials,data) { - var helper, functionType="function", helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression; - return " <h4>" - + escapeExpression(((helper = (helper = helpers.signuptosave || (depth0 != null ? depth0.signuptosave : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"signuptosave","hash":{},"data":data}) : helper))) - + "</h4>\n <p class=\"btn-container\"><a href=\"https://" - + escapeExpression(((helper = (helper = helpers.pockethost || (depth0 != null ? depth0.pockethost : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"pockethost","hash":{},"data":data}) : helper))) - + "/ff_signup?s=ffi&t=signupff&v=" - + escapeExpression(((helper = (helper = helpers.variant || (depth0 != null ? depth0.variant : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"variant","hash":{},"data":data}) : helper))) - + "\" target=\"_blank\" class=\"btn signup-btn-firefox\"><span class=\"logo\"></span><span class=\"text\">" - + escapeExpression(((helper = (helper = helpers.signinfirefox || (depth0 != null ? depth0.signinfirefox : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"signinfirefox","hash":{},"data":data}) : helper))) - + "</span></a></p>\n <p class=\"alreadyhave\">" - + escapeExpression(((helper = (helper = helpers.alreadyhaveacct || (depth0 != null ? depth0.alreadyhaveacct : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"alreadyhaveacct","hash":{},"data":data}) : helper))) - + " <a href=\"https://" - + escapeExpression(((helper = (helper = helpers.pockethost || (depth0 != null ? depth0.pockethost : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"pockethost","hash":{},"data":data}) : helper))) - + "/login?ep=3&src=extension&s=ffi&t=login&v=" - + escapeExpression(((helper = (helper = helpers.variant || (depth0 != null ? depth0.variant : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"variant","hash":{},"data":data}) : helper))) - + "\" target=\"_blank\">" - + escapeExpression(((helper = (helper = helpers.loginnow || (depth0 != null ? depth0.loginnow : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"loginnow","hash":{},"data":data}) : helper))) - + "</a>.</p>\n"; -},"10":function(depth0,helpers,partials,data) { - var stack1, buffer = ""; - stack1 = helpers['if'].call(depth0, (depth0 != null ? depth0.controlvariant : depth0), {"name":"if","hash":{},"fn":this.program(11, data),"inverse":this.program(13, data),"data":data}); - if (stack1 != null) { buffer += stack1; } - return buffer; -},"11":function(depth0,helpers,partials,data) { - var helper, functionType="function", helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression; - return " <h4>" - + escapeExpression(((helper = (helper = helpers.signuptosave || (depth0 != null ? depth0.signuptosave : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"signuptosave","hash":{},"data":data}) : helper))) - + "</h4>\n <p class=\"btn-container\"><a href=\"https://" - + escapeExpression(((helper = (helper = helpers.pockethost || (depth0 != null ? depth0.pockethost : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"pockethost","hash":{},"data":data}) : helper))) - + "/ff_signup?s=ffi&tv=panel_control&t=signupff&v=" - + escapeExpression(((helper = (helper = helpers.variant || (depth0 != null ? depth0.variant : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"variant","hash":{},"data":data}) : helper))) - + "\" target=\"_blank\" class=\"btn signup-btn-firefox\"><span class=\"logo\"></span><span class=\"text\">" - + escapeExpression(((helper = (helper = helpers.signupfirefox || (depth0 != null ? depth0.signupfirefox : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"signupfirefox","hash":{},"data":data}) : helper))) - + "</span></a></p>\n <p class=\"btn-container\"><a href=\"https://" - + escapeExpression(((helper = (helper = helpers.pockethost || (depth0 != null ? depth0.pockethost : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"pockethost","hash":{},"data":data}) : helper))) - + "/signup?force=email&tv=panel_control&src=extension&s=ffi&t=signupemail&v=" - + escapeExpression(((helper = (helper = helpers.variant || (depth0 != null ? depth0.variant : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"variant","hash":{},"data":data}) : helper))) - + "\" target=\"_blank\" class=\"btn btn-secondary signup-btn-email signup-btn-initstate\">" - + escapeExpression(((helper = (helper = helpers.signupemail || (depth0 != null ? depth0.signupemail : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"signupemail","hash":{},"data":data}) : helper))) - + "</a></p>\n <p class=\"alreadyhave\">" - + escapeExpression(((helper = (helper = helpers.alreadyhaveacct || (depth0 != null ? depth0.alreadyhaveacct : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"alreadyhaveacct","hash":{},"data":data}) : helper))) - + " <a href=\"https://" - + escapeExpression(((helper = (helper = helpers.pockethost || (depth0 != null ? depth0.pockethost : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"pockethost","hash":{},"data":data}) : helper))) - + "/login?ep=3&tv=panel_control&src=extension&s=ffi&t=login&v=" - + escapeExpression(((helper = (helper = helpers.variant || (depth0 != null ? depth0.variant : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"variant","hash":{},"data":data}) : helper))) - + "\" target=\"_blank\">" - + escapeExpression(((helper = (helper = helpers.loginnow || (depth0 != null ? depth0.loginnow : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"loginnow","hash":{},"data":data}) : helper))) - + "</a>.</p>\n"; -},"13":function(depth0,helpers,partials,data) { - var stack1, helper, functionType="function", helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, buffer = " <p class=\"btn-container\"><a href=\"https://" - + escapeExpression(((helper = (helper = helpers.pockethost || (depth0 != null ? depth0.pockethost : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"pockethost","hash":{},"data":data}) : helper))) - + "/firefox_tryitnow?s=ffi&tv=panel_tryit&t=tryitnow\" target=\"_blank\" class=\"btn signup-btn-tryitnow\"><span class=\"text\">" - + escapeExpression(((helper = (helper = helpers.tryitnow || (depth0 != null ? depth0.tryitnow : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"tryitnow","hash":{},"data":data}) : helper))) - + "</span></a></p>\n <p class=\"alreadyhave tryitnowspace\">" - + escapeExpression(((helper = (helper = helpers.alreadyhaveacct || (depth0 != null ? depth0.alreadyhaveacct : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"alreadyhaveacct","hash":{},"data":data}) : helper))) - + " <a href=\"https://" - + escapeExpression(((helper = (helper = helpers.pockethost || (depth0 != null ? depth0.pockethost : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"pockethost","hash":{},"data":data}) : helper))) - + "/login?ep=3&s=ffi&tv=panel_tryit&src=extension&t=login&v=" - + escapeExpression(((helper = (helper = helpers.variant || (depth0 != null ? depth0.variant : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"variant","hash":{},"data":data}) : helper))) - + "\" target=\"_blank\">" - + escapeExpression(((helper = (helper = helpers.loginnow || (depth0 != null ? depth0.loginnow : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"loginnow","hash":{},"data":data}) : helper))) - + "</a>.</p>\n <p class=\"pkt_ext_tos\">"; - stack1 = ((helper = (helper = helpers.tos || (depth0 != null ? depth0.tos : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"tos","hash":{},"data":data}) : helper)); - if (stack1 != null) { buffer += stack1; } - return buffer + "</p>\n"; -},"compiler":[6,">= 2.0.0-beta.1"],"main":function(depth0,helpers,partials,data) { - var stack1, helper, functionType="function", helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, buffer = "<div class=\"pkt_ext_introdetail pkt_ext_introdetailhero\">\n <h2 class=\"pkt_ext_logo\">Pocket</h2>\n <p class=\"pkt_ext_tagline\">" - + escapeExpression(((helper = (helper = helpers.tagline || (depth0 != null ? depth0.tagline : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"tagline","hash":{},"data":data}) : helper))) - + "</p>\n"; - stack1 = helpers['if'].call(depth0, (depth0 != null ? depth0.showlearnmore : depth0), {"name":"if","hash":{},"fn":this.program(1, data),"inverse":this.program(6, data),"data":data}); - if (stack1 != null) { buffer += stack1; } - buffer += " <div class=\"pkt_ext_introimg\"></div>\n</div>\n<div class=\"pkt_ext_signupdetail pkt_ext_signupdetail_hero\">\n"; - stack1 = helpers['if'].call(depth0, (depth0 != null ? depth0.fxasignedin : depth0), {"name":"if","hash":{},"fn":this.program(8, data),"inverse":this.program(10, data),"data":data}); - if (stack1 != null) { buffer += stack1; } - return buffer + "</div>\n"; -},"useData":true}); -templates['signupstoryboard_shell'] = template({"1":function(depth0,helpers,partials,data) { - var stack1, buffer = ""; - stack1 = helpers['if'].call(depth0, (depth0 != null ? depth0.controlvariant : depth0), {"name":"if","hash":{},"fn":this.program(2, data),"inverse":this.program(4, data),"data":data}); - if (stack1 != null) { buffer += stack1; } - return buffer; -},"2":function(depth0,helpers,partials,data) { - var helper, functionType="function", helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression; - return " <p><a class=\"pkt_ext_learnmore\" href=\"https://" - + escapeExpression(((helper = (helper = helpers.pockethost || (depth0 != null ? depth0.pockethost : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"pockethost","hash":{},"data":data}) : helper))) - + "/firefox_learnmore?s=ffi&t=learnmore&tv=panel_control&v=" - + escapeExpression(((helper = (helper = helpers.variant || (depth0 != null ? depth0.variant : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"variant","hash":{},"data":data}) : helper))) - + "\" target=\"_blank\">" - + escapeExpression(((helper = (helper = helpers.learnmore || (depth0 != null ? depth0.learnmore : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"learnmore","hash":{},"data":data}) : helper))) - + "</a></p>\n"; -},"4":function(depth0,helpers,partials,data) { - var helper, functionType="function", helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression; - return " <p><a class=\"pkt_ext_learnmore\" href=\"https://" - + escapeExpression(((helper = (helper = helpers.pockethost || (depth0 != null ? depth0.pockethost : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"pockethost","hash":{},"data":data}) : helper))) - + "/firefox_learnmore?s=ffi&t=learnmore&tv=panel_tryit&v=" - + escapeExpression(((helper = (helper = helpers.variant || (depth0 != null ? depth0.variant : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"variant","hash":{},"data":data}) : helper))) - + "\" target=\"_blank\">" - + escapeExpression(((helper = (helper = helpers.learnmore || (depth0 != null ? depth0.learnmore : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"learnmore","hash":{},"data":data}) : helper))) - + "</a></p>\n"; -},"6":function(depth0,helpers,partials,data) { - var helper, functionType="function", helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression; - return " <p><a class=\"pkt_ext_learnmore pkt_ext_learnmoreinactive\" href=\"#\">" - + escapeExpression(((helper = (helper = helpers.learnmore || (depth0 != null ? depth0.learnmore : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"learnmore","hash":{},"data":data}) : helper))) - + "</a></p>\n"; -},"8":function(depth0,helpers,partials,data) { - var helper, functionType="function", helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression; - return " <h4>" - + escapeExpression(((helper = (helper = helpers.signuptosave || (depth0 != null ? depth0.signuptosave : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"signuptosave","hash":{},"data":data}) : helper))) - + "</h4>\n <p class=\"btn-container\"><a href=\"https://" - + escapeExpression(((helper = (helper = helpers.pockethost || (depth0 != null ? depth0.pockethost : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"pockethost","hash":{},"data":data}) : helper))) - + "/ff_signup?s=ffi&t=signupff&v=" - + escapeExpression(((helper = (helper = helpers.variant || (depth0 != null ? depth0.variant : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"variant","hash":{},"data":data}) : helper))) - + "\" target=\"_blank\" class=\"btn signup-btn-firefox\"><span class=\"logo\"></span><span class=\"text\">" - + escapeExpression(((helper = (helper = helpers.signinfirefox || (depth0 != null ? depth0.signinfirefox : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"signinfirefox","hash":{},"data":data}) : helper))) - + "</span></a></p>\n <p class=\"alreadyhave\">" - + escapeExpression(((helper = (helper = helpers.alreadyhaveacct || (depth0 != null ? depth0.alreadyhaveacct : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"alreadyhaveacct","hash":{},"data":data}) : helper))) - + " <a href=\"https://" - + escapeExpression(((helper = (helper = helpers.pockethost || (depth0 != null ? depth0.pockethost : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"pockethost","hash":{},"data":data}) : helper))) - + "/login?ep=3&src=extension&s=ffi&t=login&v=" - + escapeExpression(((helper = (helper = helpers.variant || (depth0 != null ? depth0.variant : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"variant","hash":{},"data":data}) : helper))) - + "\" target=\"_blank\">" - + escapeExpression(((helper = (helper = helpers.loginnow || (depth0 != null ? depth0.loginnow : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"loginnow","hash":{},"data":data}) : helper))) - + "</a>.</p>\n"; -},"10":function(depth0,helpers,partials,data) { - var stack1, buffer = ""; - stack1 = helpers['if'].call(depth0, (depth0 != null ? depth0.controlvariant : depth0), {"name":"if","hash":{},"fn":this.program(11, data),"inverse":this.program(13, data),"data":data}); - if (stack1 != null) { buffer += stack1; } - return buffer; -},"11":function(depth0,helpers,partials,data) { - var helper, functionType="function", helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression; - return " <h4>" - + escapeExpression(((helper = (helper = helpers.signuptosave || (depth0 != null ? depth0.signuptosave : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"signuptosave","hash":{},"data":data}) : helper))) - + "</h4>\n <p class=\"btn-container\"><a href=\"https://" - + escapeExpression(((helper = (helper = helpers.pockethost || (depth0 != null ? depth0.pockethost : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"pockethost","hash":{},"data":data}) : helper))) - + "/ff_signup?s=ffi&tv=panel_control&t=signupff&v=" - + escapeExpression(((helper = (helper = helpers.variant || (depth0 != null ? depth0.variant : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"variant","hash":{},"data":data}) : helper))) - + "\" target=\"_blank\" class=\"btn signup-btn-firefox\"><span class=\"logo\"></span><span class=\"text\">" - + escapeExpression(((helper = (helper = helpers.signupfirefox || (depth0 != null ? depth0.signupfirefox : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"signupfirefox","hash":{},"data":data}) : helper))) - + "</span></a></p>\n <p class=\"btn-container\"><a href=\"https://" - + escapeExpression(((helper = (helper = helpers.pockethost || (depth0 != null ? depth0.pockethost : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"pockethost","hash":{},"data":data}) : helper))) - + "/signup?force=email&tv=panel_control&src=extension&s=ffi&t=signupemail&v=" - + escapeExpression(((helper = (helper = helpers.variant || (depth0 != null ? depth0.variant : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"variant","hash":{},"data":data}) : helper))) - + "\" target=\"_blank\" class=\"btn btn-secondary signup-btn-email signup-btn-initstate\">" - + escapeExpression(((helper = (helper = helpers.signupemail || (depth0 != null ? depth0.signupemail : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"signupemail","hash":{},"data":data}) : helper))) - + "</a></p>\n <p class=\"alreadyhave\">" - + escapeExpression(((helper = (helper = helpers.alreadyhaveacct || (depth0 != null ? depth0.alreadyhaveacct : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"alreadyhaveacct","hash":{},"data":data}) : helper))) - + " <a href=\"https://" - + escapeExpression(((helper = (helper = helpers.pockethost || (depth0 != null ? depth0.pockethost : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"pockethost","hash":{},"data":data}) : helper))) - + "/login?ep=3&tv=panel_control&src=extension&s=ffi&t=login&v=" - + escapeExpression(((helper = (helper = helpers.variant || (depth0 != null ? depth0.variant : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"variant","hash":{},"data":data}) : helper))) - + "\" target=\"_blank\">" - + escapeExpression(((helper = (helper = helpers.loginnow || (depth0 != null ? depth0.loginnow : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"loginnow","hash":{},"data":data}) : helper))) - + "</a>.</p>\n"; -},"13":function(depth0,helpers,partials,data) { - var stack1, helper, functionType="function", helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, buffer = " <p class=\"btn-container\"><a href=\"https://" - + escapeExpression(((helper = (helper = helpers.pockethost || (depth0 != null ? depth0.pockethost : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"pockethost","hash":{},"data":data}) : helper))) - + "/firefox_tryitnow?s=ffi&tv=panel_tryit&t=tryitnow\" target=\"_blank\" class=\"btn signup-btn-tryitnow\"><span class=\"text\">" - + escapeExpression(((helper = (helper = helpers.tryitnow || (depth0 != null ? depth0.tryitnow : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"tryitnow","hash":{},"data":data}) : helper))) - + "</span></a></p>\n <p class=\"alreadyhave tryitnowspace\">" - + escapeExpression(((helper = (helper = helpers.alreadyhaveacct || (depth0 != null ? depth0.alreadyhaveacct : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"alreadyhaveacct","hash":{},"data":data}) : helper))) - + " <a href=\"https://" - + escapeExpression(((helper = (helper = helpers.pockethost || (depth0 != null ? depth0.pockethost : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"pockethost","hash":{},"data":data}) : helper))) - + "/login?ep=3&s=ffi&tv=panel_tryit&src=extension&t=login&v=" - + escapeExpression(((helper = (helper = helpers.variant || (depth0 != null ? depth0.variant : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"variant","hash":{},"data":data}) : helper))) - + "\" target=\"_blank\">" - + escapeExpression(((helper = (helper = helpers.loginnow || (depth0 != null ? depth0.loginnow : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"loginnow","hash":{},"data":data}) : helper))) - + "</a>.</p>\n <p class=\"pkt_ext_tos\">"; - stack1 = ((helper = (helper = helpers.tos || (depth0 != null ? depth0.tos : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"tos","hash":{},"data":data}) : helper)); - if (stack1 != null) { buffer += stack1; } - return buffer + "</p>\n"; -},"compiler":[6,">= 2.0.0-beta.1"],"main":function(depth0,helpers,partials,data) { - var stack1, helper, functionType="function", helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, buffer = "<div class=\"pkt_ext_introdetail pkt_ext_introdetailstoryboard\">\n <div class=\"pkt_ext_introstory pkt_ext_introstoryone\">\n <div class=\"pkt_ext_introstory_text\">\n <p class=\"pkt_ext_tagline\">" - + escapeExpression(((helper = (helper = helpers.taglinestory_one || (depth0 != null ? depth0.taglinestory_one : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"taglinestory_one","hash":{},"data":data}) : helper))) - + "</p>\n </div>\n <div class=\"pkt_ext_introstoryone_img\"></div>\n </div>\n <div class=\"pkt_ext_introstorydivider\"></div>\n <div class=\"pkt_ext_introstory pkt_ext_introstorytwo\">\n <div class=\"pkt_ext_introstory_text\">\n <p class=\"pkt_ext_tagline\">" - + escapeExpression(((helper = (helper = helpers.taglinestory_two || (depth0 != null ? depth0.taglinestory_two : depth0)) != null ? helper : helperMissing),(typeof helper === functionType ? helper.call(depth0, {"name":"taglinestory_two","hash":{},"data":data}) : helper))) - + "</p>\n"; - stack1 = helpers['if'].call(depth0, (depth0 != null ? depth0.showlearnmore : depth0), {"name":"if","hash":{},"fn":this.program(1, data),"inverse":this.program(6, data),"data":data}); - if (stack1 != null) { buffer += stack1; } - buffer += " </div>\n <div class=\"pkt_ext_introstorytwo_img\"></div>\n </div>\n</div>\n<div class=\"pkt_ext_signupdetail\">\n"; - stack1 = helpers['if'].call(depth0, (depth0 != null ? depth0.fxasignedin : depth0), {"name":"if","hash":{},"fn":this.program(8, data),"inverse":this.program(10, data),"data":data}); - if (stack1 != null) { buffer += stack1; } - return buffer + "\n</div>\n"; -},"useData":true}); -})(); diff --git a/browser/extensions/pocket/content/panels/js/vendor/handlebars.runtime.js b/browser/extensions/pocket/content/panels/js/vendor/handlebars.runtime.js deleted file mode 100644 index c8bb1c452..000000000 --- a/browser/extensions/pocket/content/panels/js/vendor/handlebars.runtime.js +++ /dev/null @@ -1,660 +0,0 @@ -/* - - handlebars v2.0.0 - -Copyright (C) 2011-2014 by Yehuda Katz - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -@license -*/ -/* exported Handlebars */ -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - define([], factory); - } else if (typeof exports === 'object') { - module.exports = factory(); - } else { - root.Handlebars = root.Handlebars || factory(); - } -}(this, function () { -// handlebars/safe-string.js -var __module3__ = (function() { - "use strict"; - var __exports__; - // Build out our basic SafeString type - function SafeString(string) { - this.string = string; - } - - SafeString.prototype.toString = function() { - return "" + this.string; - }; - - __exports__ = SafeString; - return __exports__; -})(); - -// handlebars/utils.js -var __module2__ = (function(__dependency1__) { - "use strict"; - var __exports__ = {}; - /*jshint -W004 */ - var SafeString = __dependency1__; - - var escape = { - "&": "&", - "<": "<", - ">": ">", - '"': """, - "'": "'", - "`": "`" - }; - - var badChars = /[&<>"'`]/g; - var possible = /[&<>"'`]/; - - function escapeChar(chr) { - return escape[chr]; - } - - function extend(obj /* , ...source */) { - for (var i = 1; i < arguments.length; i++) { - for (var key in arguments[i]) { - if (Object.prototype.hasOwnProperty.call(arguments[i], key)) { - obj[key] = arguments[i][key]; - } - } - } - - return obj; - } - - __exports__.extend = extend;var toString = Object.prototype.toString; - __exports__.toString = toString; - // Sourced from lodash - // https://github.com/bestiejs/lodash/blob/master/LICENSE.txt - var isFunction = function(value) { - return typeof value === 'function'; - }; - // fallback for older versions of Chrome and Safari - /* istanbul ignore next */ - if (isFunction(/x/)) { - isFunction = function(value) { - return typeof value === 'function' && toString.call(value) === '[object Function]'; - }; - } - var isFunction; - __exports__.isFunction = isFunction; - /* istanbul ignore next */ - var isArray = Array.isArray || function(value) { - return (value && typeof value === 'object') ? toString.call(value) === '[object Array]' : false; - }; - __exports__.isArray = isArray; - - function escapeExpression(string) { - // don't escape SafeStrings, since they're already safe - if (string instanceof SafeString) { - return string.toString(); - } else if (string == null) { - return ""; - } else if (!string) { - return string + ''; - } - - // Force a string conversion as this will be done by the append regardless and - // the regex test will do this transparently behind the scenes, causing issues if - // an object's to string has escaped characters in it. - string = "" + string; - - if(!possible.test(string)) { return string; } - return string.replace(badChars, escapeChar); - } - - __exports__.escapeExpression = escapeExpression;function isEmpty(value) { - if (!value && value !== 0) { - return true; - } else if (isArray(value) && value.length === 0) { - return true; - } else { - return false; - } - } - - __exports__.isEmpty = isEmpty;function appendContextPath(contextPath, id) { - return (contextPath ? contextPath + '.' : '') + id; - } - - __exports__.appendContextPath = appendContextPath; - return __exports__; -})(__module3__); - -// handlebars/exception.js -var __module4__ = (function() { - "use strict"; - var __exports__; - - var errorProps = ['description', 'fileName', 'lineNumber', 'message', 'name', 'number', 'stack']; - - function Exception(message, node) { - var line; - if (node && node.firstLine) { - line = node.firstLine; - - message += ' - ' + line + ':' + node.firstColumn; - } - - var tmp = Error.prototype.constructor.call(this, message); - - // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work. - for (var idx = 0; idx < errorProps.length; idx++) { - this[errorProps[idx]] = tmp[errorProps[idx]]; - } - - if (line) { - this.lineNumber = line; - this.column = node.firstColumn; - } - } - - Exception.prototype = new Error(); - - __exports__ = Exception; - return __exports__; -})(); - -// handlebars/base.js -var __module1__ = (function(__dependency1__, __dependency2__) { - "use strict"; - var __exports__ = {}; - var Utils = __dependency1__; - var Exception = __dependency2__; - - var VERSION = "2.0.0"; - __exports__.VERSION = VERSION;var COMPILER_REVISION = 6; - __exports__.COMPILER_REVISION = COMPILER_REVISION; - var REVISION_CHANGES = { - 1: '<= 1.0.rc.2', // 1.0.rc.2 is actually rev2 but doesn't report it - 2: '== 1.0.0-rc.3', - 3: '== 1.0.0-rc.4', - 4: '== 1.x.x', - 5: '== 2.0.0-alpha.x', - 6: '>= 2.0.0-beta.1' - }; - __exports__.REVISION_CHANGES = REVISION_CHANGES; - var isArray = Utils.isArray, - isFunction = Utils.isFunction, - toString = Utils.toString, - objectType = '[object Object]'; - - function HandlebarsEnvironment(helpers, partials) { - this.helpers = helpers || {}; - this.partials = partials || {}; - - registerDefaultHelpers(this); - } - - __exports__.HandlebarsEnvironment = HandlebarsEnvironment;HandlebarsEnvironment.prototype = { - constructor: HandlebarsEnvironment, - - logger: logger, - log: log, - - registerHelper: function(name, fn) { - if (toString.call(name) === objectType) { - if (fn) { throw new Exception('Arg not supported with multiple helpers'); } - Utils.extend(this.helpers, name); - } else { - this.helpers[name] = fn; - } - }, - unregisterHelper: function(name) { - delete this.helpers[name]; - }, - - registerPartial: function(name, partial) { - if (toString.call(name) === objectType) { - Utils.extend(this.partials, name); - } else { - this.partials[name] = partial; - } - }, - unregisterPartial: function(name) { - delete this.partials[name]; - } - }; - - function registerDefaultHelpers(instance) { - instance.registerHelper('helperMissing', function(/* [args, ]options */) { - if(arguments.length === 1) { - // A missing field in a {{foo}} constuct. - return undefined; - } else { - // Someone is actually trying to call something, blow up. - throw new Exception("Missing helper: '" + arguments[arguments.length-1].name + "'"); - } - }); - - instance.registerHelper('blockHelperMissing', function(context, options) { - var inverse = options.inverse, - fn = options.fn; - - if(context === true) { - return fn(this); - } else if(context === false || context == null) { - return inverse(this); - } else if (isArray(context)) { - if(context.length > 0) { - if (options.ids) { - options.ids = [options.name]; - } - - return instance.helpers.each(context, options); - } else { - return inverse(this); - } - } else { - if (options.data && options.ids) { - var data = createFrame(options.data); - data.contextPath = Utils.appendContextPath(options.data.contextPath, options.name); - options = {data: data}; - } - - return fn(context, options); - } - }); - - instance.registerHelper('each', function(context, options) { - if (!options) { - throw new Exception('Must pass iterator to #each'); - } - - var fn = options.fn, inverse = options.inverse; - var i = 0, ret = "", data; - - var contextPath; - if (options.data && options.ids) { - contextPath = Utils.appendContextPath(options.data.contextPath, options.ids[0]) + '.'; - } - - if (isFunction(context)) { context = context.call(this); } - - if (options.data) { - data = createFrame(options.data); - } - - if(context && typeof context === 'object') { - if (isArray(context)) { - for(var j = context.length; i<j; i++) { - if (data) { - data.index = i; - data.first = (i === 0); - data.last = (i === (context.length-1)); - - if (contextPath) { - data.contextPath = contextPath + i; - } - } - ret = ret + fn(context[i], { data: data }); - } - } else { - for(var key in context) { - if(context.hasOwnProperty(key)) { - if(data) { - data.key = key; - data.index = i; - data.first = (i === 0); - - if (contextPath) { - data.contextPath = contextPath + key; - } - } - ret = ret + fn(context[key], {data: data}); - i++; - } - } - } - } - - if(i === 0){ - ret = inverse(this); - } - - return ret; - }); - - instance.registerHelper('if', function(conditional, options) { - if (isFunction(conditional)) { conditional = conditional.call(this); } - - // Default behavior is to render the positive path if the value is truthy and not empty. - // The `includeZero` option may be set to treat the condtional as purely not empty based on the - // behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative. - if ((!options.hash.includeZero && !conditional) || Utils.isEmpty(conditional)) { - return options.inverse(this); - } else { - return options.fn(this); - } - }); - - instance.registerHelper('unless', function(conditional, options) { - return instance.helpers['if'].call(this, conditional, {fn: options.inverse, inverse: options.fn, hash: options.hash}); - }); - - instance.registerHelper('with', function(context, options) { - if (isFunction(context)) { context = context.call(this); } - - var fn = options.fn; - - if (!Utils.isEmpty(context)) { - if (options.data && options.ids) { - var data = createFrame(options.data); - data.contextPath = Utils.appendContextPath(options.data.contextPath, options.ids[0]); - options = {data:data}; - } - - return fn(context, options); - } else { - return options.inverse(this); - } - }); - - instance.registerHelper('log', function(message, options) { - var level = options.data && options.data.level != null ? parseInt(options.data.level, 10) : 1; - instance.log(level, message); - }); - - instance.registerHelper('lookup', function(obj, field) { - return obj && obj[field]; - }); - } - - var logger = { - methodMap: { 0: 'debug', 1: 'info', 2: 'warn', 3: 'error' }, - - // State enum - DEBUG: 0, - INFO: 1, - WARN: 2, - ERROR: 3, - level: 3, - - // can be overridden in the host environment - log: function(level, message) { - if (logger.level <= level) { - var method = logger.methodMap[level]; - if (typeof console !== 'undefined' && console[method]) { - console[method].call(console, message); - } - } - } - }; - __exports__.logger = logger; - var log = logger.log; - __exports__.log = log; - var createFrame = function(object) { - var frame = Utils.extend({}, object); - frame._parent = object; - return frame; - }; - __exports__.createFrame = createFrame; - return __exports__; -})(__module2__, __module4__); - -// handlebars/runtime.js -var __module5__ = (function(__dependency1__, __dependency2__, __dependency3__) { - "use strict"; - var __exports__ = {}; - var Utils = __dependency1__; - var Exception = __dependency2__; - var COMPILER_REVISION = __dependency3__.COMPILER_REVISION; - var REVISION_CHANGES = __dependency3__.REVISION_CHANGES; - var createFrame = __dependency3__.createFrame; - - function checkRevision(compilerInfo) { - var compilerRevision = compilerInfo && compilerInfo[0] || 1, - currentRevision = COMPILER_REVISION; - - if (compilerRevision !== currentRevision) { - if (compilerRevision < currentRevision) { - var runtimeVersions = REVISION_CHANGES[currentRevision], - compilerVersions = REVISION_CHANGES[compilerRevision]; - throw new Exception("Template was precompiled with an older version of Handlebars than the current runtime. "+ - "Please update your precompiler to a newer version ("+runtimeVersions+") or downgrade your runtime to an older version ("+compilerVersions+")."); - } else { - // Use the embedded version info since the runtime doesn't know about this revision yet - throw new Exception("Template was precompiled with a newer version of Handlebars than the current runtime. "+ - "Please update your runtime to a newer version ("+compilerInfo[1]+")."); - } - } - } - - __exports__.checkRevision = checkRevision;// TODO: Remove this line and break up compilePartial - - function template(templateSpec, env) { - /* istanbul ignore next */ - if (!env) { - throw new Exception("No environment passed to template"); - } - if (!templateSpec || !templateSpec.main) { - throw new Exception('Unknown template object: ' + typeof templateSpec); - } - - // Note: Using env.VM references rather than local var references throughout this section to allow - // for external users to override these as psuedo-supported APIs. - env.VM.checkRevision(templateSpec.compiler); - - var invokePartialWrapper = function(partial, indent, name, context, hash, helpers, partials, data, depths) { - if (hash) { - context = Utils.extend({}, context, hash); - } - - var result = env.VM.invokePartial.call(this, partial, name, context, helpers, partials, data, depths); - - if (result == null && env.compile) { - var options = { helpers: helpers, partials: partials, data: data, depths: depths }; - partials[name] = env.compile(partial, { data: data !== undefined, compat: templateSpec.compat }, env); - result = partials[name](context, options); - } - if (result != null) { - if (indent) { - var lines = result.split('\n'); - for (var i = 0, l = lines.length; i < l; i++) { - if (!lines[i] && i + 1 === l) { - break; - } - - lines[i] = indent + lines[i]; - } - result = lines.join('\n'); - } - return result; - } else { - throw new Exception("The partial " + name + " could not be compiled when running in runtime-only mode"); - } - }; - - // Just add water - var container = { - lookup: function(depths, name) { - var len = depths.length; - for (var i = 0; i < len; i++) { - if (depths[i] && depths[i][name] != null) { - return depths[i][name]; - } - } - }, - lambda: function(current, context) { - return typeof current === 'function' ? current.call(context) : current; - }, - - escapeExpression: Utils.escapeExpression, - invokePartial: invokePartialWrapper, - - fn: function(i) { - return templateSpec[i]; - }, - - programs: [], - program: function(i, data, depths) { - var programWrapper = this.programs[i], - fn = this.fn(i); - if (data || depths) { - programWrapper = program(this, i, fn, data, depths); - } else if (!programWrapper) { - programWrapper = this.programs[i] = program(this, i, fn); - } - return programWrapper; - }, - - data: function(data, depth) { - while (data && depth--) { - data = data._parent; - } - return data; - }, - merge: function(param, common) { - var ret = param || common; - - if (param && common && (param !== common)) { - ret = Utils.extend({}, common, param); - } - - return ret; - }, - - noop: env.VM.noop, - compilerInfo: templateSpec.compiler - }; - - var ret = function(context, options) { - options = options || {}; - var data = options.data; - - ret._setup(options); - if (!options.partial && templateSpec.useData) { - data = initData(context, data); - } - var depths; - if (templateSpec.useDepths) { - depths = options.depths ? [context].concat(options.depths) : [context]; - } - - return templateSpec.main.call(container, context, container.helpers, container.partials, data, depths); - }; - ret.isTop = true; - - ret._setup = function(options) { - if (!options.partial) { - container.helpers = container.merge(options.helpers, env.helpers); - - if (templateSpec.usePartial) { - container.partials = container.merge(options.partials, env.partials); - } - } else { - container.helpers = options.helpers; - container.partials = options.partials; - } - }; - - ret._child = function(i, data, depths) { - if (templateSpec.useDepths && !depths) { - throw new Exception('must pass parent depths'); - } - - return program(container, i, templateSpec[i], data, depths); - }; - return ret; - } - - __exports__.template = template;function program(container, i, fn, data, depths) { - var prog = function(context, options) { - options = options || {}; - - return fn.call(container, context, container.helpers, container.partials, options.data || data, depths && [context].concat(depths)); - }; - prog.program = i; - prog.depth = depths ? depths.length : 0; - return prog; - } - - __exports__.program = program;function invokePartial(partial, name, context, helpers, partials, data, depths) { - var options = { partial: true, helpers: helpers, partials: partials, data: data, depths: depths }; - - if(partial === undefined) { - throw new Exception("The partial " + name + " could not be found"); - } else if(partial instanceof Function) { - return partial(context, options); - } - } - - __exports__.invokePartial = invokePartial;function noop() { return ""; } - - __exports__.noop = noop;function initData(context, data) { - if (!data || !('root' in data)) { - data = data ? createFrame(data) : {}; - data.root = context; - } - return data; - } - return __exports__; -})(__module2__, __module4__, __module1__); - -// handlebars.runtime.js -var __module0__ = (function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__) { - "use strict"; - var __exports__; - /*globals Handlebars: true */ - var base = __dependency1__; - - // Each of these augment the Handlebars object. No need to setup here. - // (This is done to easily share code between commonjs and browse envs) - var SafeString = __dependency2__; - var Exception = __dependency3__; - var Utils = __dependency4__; - var runtime = __dependency5__; - - // For compatibility and usage outside of module systems, make the Handlebars object a namespace - var create = function() { - var hb = new base.HandlebarsEnvironment(); - - Utils.extend(hb, base); - hb.SafeString = SafeString; - hb.Exception = Exception; - hb.Utils = Utils; - hb.escapeExpression = Utils.escapeExpression; - - hb.VM = runtime; - hb.template = function(spec) { - return runtime.template(spec, hb); - }; - - return hb; - }; - - var Handlebars = create(); - Handlebars.create = create; - - Handlebars['default'] = Handlebars; - - __exports__ = Handlebars; - return __exports__; -})(__module1__, __module3__, __module4__, __module2__, __module5__); - - return __module0__; -})); diff --git a/browser/extensions/pocket/content/panels/js/vendor/jquery-2.1.1.min.js b/browser/extensions/pocket/content/panels/js/vendor/jquery-2.1.1.min.js deleted file mode 100644 index 9ed2acc66..000000000 --- a/browser/extensions/pocket/content/panels/js/vendor/jquery-2.1.1.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ -!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,m="2.1.1",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!n.isArray(a)&&a-parseFloat(a)>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=l.createElement("script"),b.text=a,l.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:k}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a)return d;if(1!==(k=b.nodeType)&&9!==k)return[];if(p&&!e){if(f=_.exec(a))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return I.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.innerHTML="<div class='a'></div><div class='a i'></div>",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="<select msallowclip=''><option selected=''></option></select>",a.querySelectorAll("[msallowclip^='']").length&&q.push("[*^$]="+M+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked")}),ib(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",Q)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0>c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=lb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=mb(b);function pb(){}pb.prototype=d.filters=d.pseudos,d.setFilters=new pb,g=fb.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?fb.error(a):z(a,i).slice(0)};function qb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return K.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ib(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:l,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=l.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=l,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};A.prototype=n.fn,y=n(l);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(n(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(C[a]||n.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&n.each(arguments,function(a,b){var c;while((c=n.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(H.resolveWith(l,[n]),n.fn.triggerHandler&&(n(l).triggerHandler("ready"),n(l).off("ready"))))}});function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),n.ready()}n.ready.promise=function(b){return H||(H=n.Deferred(),"complete"===l.readyState?setTimeout(n.ready):(l.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},n.ready.promise();var J=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};n.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+Math.random()}K.uid=1,K.accepts=n.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,n.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(n.isEmptyObject(f))n.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!n.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){return M.access(a,b,c)},removeData:function(a,b){M.remove(a,b) -},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=n.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:n.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=L.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var Q=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,R=["Top","Right","Bottom","Left"],S=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)},T=/^(?:checkbox|radio)$/i;!function(){var a=l.createDocumentFragment(),b=a.appendChild(l.createElement("div")),c=l.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";k.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,m,o,p=[d||l],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||l,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+n.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},e||!o.trigger||o.trigger.apply(d,c)!==!1)){if(!e&&!o.noBubble&&!n.isWindow(d)){for(i=o.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||l)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:o.bindType||q,m=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),m&&m.apply(g,c),m=k&&g[k],m&&m.apply&&n.acceptData(g)&&(b.result=m.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!n.acceptData(d)||k&&n.isFunction(d[q])&&!n.isWindow(d)&&(h=d[k],h&&(d[k]=null),n.event.triggered=q,d[q](),n.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>=0:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button;return null==a.pageX&&null!=b.clientX&&(c=a.target.ownerDocument||l,d=c.documentElement,e=c.body,a.pageX=b.clientX+(d&&d.scrollLeft||e&&e.scrollLeft||0)-(d&&d.clientLeft||e&&e.clientLeft||0),a.pageY=b.clientY+(d&&d.scrollTop||e&&e.scrollTop||0)-(d&&d.clientTop||e&&e.clientTop||0)),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},fix:function(a){if(a[n.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=W.test(e)?this.mouseHooks:V.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new n.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=l),3===a.target.nodeType&&(a.target=a.target.parentNode),g.filter?g.filter(a,f):a},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==_()&&this.focus?(this.focus(),!1):void 0},delegateType:"focusin"},blur:{trigger:function(){return this===_()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&n.nodeName(this,"input")?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=n.extend(new n.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?n.event.trigger(e,null,b):n.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?Z:$):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={isDefaultPrevented:$,isPropagationStopped:$,isImmediatePropagationStopped:$,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=Z,a&&a.preventDefault&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=Z,a&&a.stopPropagation&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=Z,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!n.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.focusinBubbles||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a),!0)};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=L.access(d,b);e||d.addEventListener(a,c,!0),L.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=L.access(d,b)-1;e?L.access(d,b,e):(d.removeEventListener(a,c,!0),L.remove(d,b))}}}),n.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(g in a)this.on(g,b,c,a[g],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=$;else if(!d)return this;return 1===e&&(f=d,d=function(a){return n().off(a),f.apply(this,arguments)},d.guid=f.guid||(f.guid=n.guid++)),this.each(function(){n.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=$),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});var ab=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bb=/<([\w:]+)/,cb=/<|&#?\w+;/,db=/<(?:script|style|link)/i,eb=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/^$|\/(?:java|ecma)script/i,gb=/^true\/(.*)/,hb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,ib={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ib.optgroup=ib.option,ib.tbody=ib.tfoot=ib.colgroup=ib.caption=ib.thead,ib.th=ib.td;function jb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function kb(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function lb(a){var b=gb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function mb(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function nb(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function ob(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pb(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=ob(h),f=ob(a),d=0,e=f.length;e>d;d++)pb(f[d],g[d]);if(b)if(c)for(f=f||ob(a),g=g||ob(h),d=0,e=f.length;e>d;d++)nb(f[d],g[d]);else nb(a,h);return g=ob(h,"script"),g.length>0&&mb(g,!i&&ob(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,o=a.length;o>m;m++)if(e=a[m],e||0===e)if("object"===n.type(e))n.merge(l,e.nodeType?[e]:e);else if(cb.test(e)){f=f||k.appendChild(b.createElement("div")),g=(bb.exec(e)||["",""])[1].toLowerCase(),h=ib[g]||ib._default,f.innerHTML=h[1]+e.replace(ab,"<$1></$2>")+h[2],j=h[0];while(j--)f=f.lastChild;n.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===n.inArray(e,d))&&(i=n.contains(e.ownerDocument,e),f=ob(k.appendChild(e),"script"),i&&mb(f),c)){j=0;while(e=f[j++])fb.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(ob(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&mb(ob(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(ob(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!db.test(a)&&!ib[(bb.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ab,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ob(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(ob(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&eb.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(ob(c,"script"),kb),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,ob(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,lb),j=0;g>j;j++)h=f[j],fb.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(hb,"")))}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qb,rb={};function sb(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function tb(a){var b=l,c=rb[a];return c||(c=sb(a,b),"none"!==c&&c||(qb=(qb||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=qb[0].contentDocument,b.write(),b.close(),c=sb(a,b),qb.detach()),rb[a]=c),c}var ub=/^margin/,vb=new RegExp("^("+Q+")(?!px)[a-z%]+$","i"),wb=function(a){return a.ownerDocument.defaultView.getComputedStyle(a,null)};function xb(a,b,c){var d,e,f,g,h=a.style;return c=c||wb(a),c&&(g=c.getPropertyValue(b)||c[b]),c&&(""!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),vb.test(g)&&ub.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function yb(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d=l.documentElement,e=l.createElement("div"),f=l.createElement("div");if(f.style){f.style.backgroundClip="content-box",f.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===f.style.backgroundClip,e.style.cssText="border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;position:absolute",e.appendChild(f);function g(){f.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",f.innerHTML="",d.appendChild(e);var g=a.getComputedStyle(f,null);b="1%"!==g.top,c="4px"===g.width,d.removeChild(e)}a.getComputedStyle&&n.extend(k,{pixelPosition:function(){return g(),b},boxSizingReliable:function(){return null==c&&g(),c},reliableMarginRight:function(){var b,c=f.appendChild(l.createElement("div"));return c.style.cssText=f.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",c.style.marginRight=c.style.width="0",f.style.width="1px",d.appendChild(e),b=!parseFloat(a.getComputedStyle(c,null).marginRight),d.removeChild(e),b}})}}(),n.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var zb=/^(none|table(?!-c[ea]).+)/,Ab=new RegExp("^("+Q+")(.*)$","i"),Bb=new RegExp("^([+-])=("+Q+")","i"),Cb={position:"absolute",visibility:"hidden",display:"block"},Db={letterSpacing:"0",fontWeight:"400"},Eb=["Webkit","O","Moz","ms"];function Fb(a,b){if(b in a)return b;var c=b[0].toUpperCase()+b.slice(1),d=b,e=Eb.length;while(e--)if(b=Eb[e]+c,b in a)return b;return d}function Gb(a,b,c){var d=Ab.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Hb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+R[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+R[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+R[f]+"Width",!0,e))):(g+=n.css(a,"padding"+R[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+R[f]+"Width",!0,e)));return g}function Ib(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=wb(a),g="border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=xb(a,b,f),(0>e||null==e)&&(e=a.style[b]),vb.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Hb(a,b,c||(g?"border":"content"),d,f)+"px"}function Jb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=L.get(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&S(d)&&(f[g]=L.access(d,"olddisplay",tb(d.nodeName)))):(e=S(d),"none"===c&&e||L.set(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=xb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;return b=n.cssProps[h]||(n.cssProps[h]=Fb(i,h)),g=n.cssHooks[b]||n.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b]:(f=typeof c,"string"===f&&(e=Bb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(n.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||n.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=Fb(a.style,h)),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=xb(a,b,d)),"normal"===e&&b in Db&&(e=Db[b]),""===c||c?(f=parseFloat(e),c===!0||n.isNumeric(f)?f||0:e):e}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?zb.test(n.css(a,"display"))&&0===a.offsetWidth?n.swap(a,Cb,function(){return Ib(a,b,d)}):Ib(a,b,d):void 0},set:function(a,c,d){var e=d&&wb(a);return Gb(a,c,d?Hb(a,b,d,"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),n.cssHooks.marginRight=yb(k.reliableMarginRight,function(a,b){return b?n.swap(a,{display:"inline-block"},xb,[a,"marginRight"]):void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+R[d]+b]=f[d]||f[d-2]||f[0];return e}},ub.test(a)||(n.cssHooks[a+b].set=Gb)}),n.fn.extend({css:function(a,b){return J(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=wb(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return Jb(this,!0)},hide:function(){return Jb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){S(this)?n(this).show():n(this).hide()})}});function Kb(a,b,c,d,e){return new Kb.prototype.init(a,b,c,d,e)}n.Tween=Kb,Kb.prototype={constructor:Kb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=Kb.propHooks[this.prop];return a&&a.get?a.get(this):Kb.propHooks._default.get(this)},run:function(a){var b,c=Kb.propHooks[this.prop];return this.pos=b=this.options.duration?n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Kb.propHooks._default.set(this),this}},Kb.prototype.init.prototype=Kb.prototype,Kb.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[n.cssProps[a.prop]]||n.cssHooks[a.prop])?n.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Kb.propHooks.scrollTop=Kb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},n.fx=Kb.prototype.init,n.fx.step={};var Lb,Mb,Nb=/^(?:toggle|show|hide)$/,Ob=new RegExp("^(?:([+-])=|)("+Q+")([a-z%]*)$","i"),Pb=/queueHooks$/,Qb=[Vb],Rb={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=Ob.exec(b),f=e&&e[3]||(n.cssNumber[a]?"":"px"),g=(n.cssNumber[a]||"px"!==f&&+d)&&Ob.exec(n.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,n.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function Sb(){return setTimeout(function(){Lb=void 0}),Lb=n.now()}function Tb(a,b){var c,d=0,e={height:a};for(b=b?1:0;4>d;d+=2-b)c=R[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function Ub(a,b,c){for(var d,e=(Rb[b]||[]).concat(Rb["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function Vb(a,b,c){var d,e,f,g,h,i,j,k,l=this,m={},o=a.style,p=a.nodeType&&S(a),q=L.get(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,l.always(function(){l.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=n.css(a,"display"),k="none"===j?L.get(a,"olddisplay")||tb(a.nodeName):j,"inline"===k&&"none"===n.css(a,"float")&&(o.display="inline-block")),c.overflow&&(o.overflow="hidden",l.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],Nb.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}m[d]=q&&q[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(m))"inline"===("none"===j?tb(a.nodeName):j)&&(o.display=j);else{q?"hidden"in q&&(p=q.hidden):q=L.access(a,"fxshow",{}),f&&(q.hidden=!p),p?n(a).show():l.done(function(){n(a).hide()}),l.done(function(){var b;L.remove(a,"fxshow");for(b in m)n.style(a,b,m[b])});for(d in m)g=Ub(p?q[d]:0,d,l),d in q||(q[d]=g.start,p&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function Wb(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function Xb(a,b,c){var d,e,f=0,g=Qb.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=Lb||Sb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:Lb||Sb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(Wb(k,j.opts.specialEasing);g>f;f++)if(d=Qb[f].call(j,a,k,j.opts))return d;return n.map(k,Ub,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(Xb,{tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],Rb[c]=Rb[c]||[],Rb[c].unshift(b)},prefilter:function(a,b){b?Qb.unshift(a):Qb.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(S).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=Xb(this,n.extend({},a),f);(e||L.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=L.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&Pb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=L.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(Tb(b,!0),a,d,e)}}),n.each({slideDown:Tb("show"),slideUp:Tb("hide"),slideToggle:Tb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=0,c=n.timers;for(Lb=n.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||n.fx.stop(),Lb=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){Mb||(Mb=setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){clearInterval(Mb),Mb=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(a,b){return a=n.fx?n.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a=l.createElement("input"),b=l.createElement("select"),c=b.appendChild(l.createElement("option"));a.type="checkbox",k.checkOn=""!==a.value,k.optSelected=c.selected,b.disabled=!0,k.optDisabled=!c.disabled,a=l.createElement("input"),a.value="t",a.type="radio",k.radioValue="t"===a.value}();var Yb,Zb,$b=n.expr.attrHandle;n.fn.extend({attr:function(a,b){return J(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===U?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),d=n.attrHooks[b]||(n.expr.match.bool.test(b)?Zb:Yb)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void n.removeAttr(a,b)) -},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)&&(a[d]=!1),a.removeAttribute(c)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),Zb={set:function(a,b,c){return b===!1?n.removeAttr(a,c):a.setAttribute(c,c),c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=$b[b]||n.find.attr;$b[b]=function(a,b,d){var e,f;return d||(f=$b[b],$b[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,$b[b]=f),e}});var _b=/^(?:input|select|textarea|button)$/i;n.fn.extend({prop:function(a,b){return J(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[n.propFix[a]||a]})}}),n.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!n.isXMLDoc(a),f&&(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){return a.hasAttribute("tabindex")||_b.test(a.nodeName)||a.href?a.tabIndex:-1}}}}),k.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this});var ac=/[\t\r\n\f]/g;n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h="string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=n.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0===arguments.length||"string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?n.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(n.isFunction(a)?function(c){n(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=n(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===U||"boolean"===c)&&(this.className&&L.set(this,"__className__",this.className),this.className=this.className||a===!1?"":L.get(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(ac," ").indexOf(b)>=0)return!0;return!1}});var bc=/\r/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(bc,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.trim(n.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=n.inArray(d.value,f)>=0)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>=0:void 0}},k.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var cc=n.now(),dc=/\?/;n.parseJSON=function(a){return JSON.parse(a+"")},n.parseXML=function(a){var b,c;if(!a||"string"!=typeof a)return null;try{c=new DOMParser,b=c.parseFromString(a,"text/xml")}catch(d){b=void 0}return(!b||b.getElementsByTagName("parsererror").length)&&n.error("Invalid XML: "+a),b};var ec,fc,gc=/#.*$/,hc=/([?&])_=[^&]*/,ic=/^(.*?):[ \t]*([^\r\n]*)$/gm,jc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,kc=/^(?:GET|HEAD)$/,lc=/^\/\//,mc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,nc={},oc={},pc="*/".concat("*");try{fc=location.href}catch(qc){fc=l.createElement("a"),fc.href="",fc=fc.href}ec=mc.exec(fc.toLowerCase())||[];function rc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(n.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function sc(a,b,c,d){var e={},f=a===oc;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function tc(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&n.extend(!0,a,d),a}function uc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function vc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:fc,type:"GET",isLocal:jc.test(ec[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":pc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?tc(tc(a,n.ajaxSettings),b):tc(n.ajaxSettings,a)},ajaxPrefilter:rc(nc),ajaxTransport:rc(oc),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=n.ajaxSetup({},b),l=k.context||k,m=k.context&&(l.nodeType||l.jquery)?n(l):n.event,o=n.Deferred(),p=n.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!f){f={};while(b=ic.exec(e))f[b[1].toLowerCase()]=b[2]}b=f[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?e:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return c&&c.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||fc)+"").replace(gc,"").replace(lc,ec[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=n.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(h=mc.exec(k.url.toLowerCase()),k.crossDomain=!(!h||h[1]===ec[1]&&h[2]===ec[2]&&(h[3]||("http:"===h[1]?"80":"443"))===(ec[3]||("http:"===ec[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=n.param(k.data,k.traditional)),sc(nc,k,b,v),2===t)return v;i=k.global,i&&0===n.active++&&n.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!kc.test(k.type),d=k.url,k.hasContent||(k.data&&(d=k.url+=(dc.test(d)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=hc.test(d)?d.replace(hc,"$1_="+cc++):d+(dc.test(d)?"&":"?")+"_="+cc++)),k.ifModified&&(n.lastModified[d]&&v.setRequestHeader("If-Modified-Since",n.lastModified[d]),n.etag[d]&&v.setRequestHeader("If-None-Match",n.etag[d])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+pc+"; q=0.01":""):k.accepts["*"]);for(j in k.headers)v.setRequestHeader(j,k.headers[j]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(j in{success:1,error:1,complete:1})v[j](k[j]);if(c=sc(oc,k,b,v)){v.readyState=1,i&&m.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,c.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,f,h){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),c=void 0,e=h||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,f&&(u=uc(k,v,f)),u=vc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(n.lastModified[d]=w),w=v.getResponseHeader("etag"),w&&(n.etag[d]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,i&&m.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),i&&(m.trigger("ajaxComplete",[v,k]),--n.active||n.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){var b;return n.isFunction(a)?this.each(function(b){n(this).wrapAll(a.call(this,b))}):(this[0]&&(b=n(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this)},wrapInner:function(a){return this.each(n.isFunction(a)?function(b){n(this).wrapInner(a.call(this,b))}:function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}}),n.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var wc=/%20/g,xc=/\[\]$/,yc=/\r?\n/g,zc=/^(?:submit|button|image|reset|file)$/i,Ac=/^(?:input|select|textarea|keygen)/i;function Bc(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||xc.test(a)?d(a,e):Bc(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)Bc(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)Bc(c,a[c],b,e);return d.join("&").replace(wc,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&Ac.test(this.nodeName)&&!zc.test(a)&&(this.checked||!T.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(yc,"\r\n")}}):{name:b.name,value:c.replace(yc,"\r\n")}}).get()}}),n.ajaxSettings.xhr=function(){try{return new XMLHttpRequest}catch(a){}};var Cc=0,Dc={},Ec={0:200,1223:204},Fc=n.ajaxSettings.xhr();a.ActiveXObject&&n(a).on("unload",function(){for(var a in Dc)Dc[a]()}),k.cors=!!Fc&&"withCredentials"in Fc,k.ajax=Fc=!!Fc,n.ajaxTransport(function(a){var b;return k.cors||Fc&&!a.crossDomain?{send:function(c,d){var e,f=a.xhr(),g=++Cc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)f.setRequestHeader(e,c[e]);b=function(a){return function(){b&&(delete Dc[g],b=f.onload=f.onerror=null,"abort"===a?f.abort():"error"===a?d(f.status,f.statusText):d(Ec[f.status]||f.status,f.statusText,"string"==typeof f.responseText?{text:f.responseText}:void 0,f.getAllResponseHeaders()))}},f.onload=b(),f.onerror=b("error"),b=Dc[g]=b("abort");try{f.send(a.hasContent&&a.data||null)}catch(h){if(b)throw h}},abort:function(){b&&b()}}:void 0}),n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(d,e){b=n("<script>").prop({async:!0,charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&e("error"===a.type?404:200,a.type)}),l.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Gc=[],Hc=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Gc.pop()||n.expando+"_"+cc++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Hc.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Hc.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Hc,"$1"+e):b.jsonp!==!1&&(b.url+=(dc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Gc.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||l;var d=v.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=n.buildFragment([a],b,e),e&&e.length&&n(e).remove(),n.merge([],d.childNodes))};var Ic=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&Ic)return Ic.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=n.trim(a.slice(h)),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&n.ajax({url:a,type:e,dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,f||[a.responseText,b,a])}),this},n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};var Jc=a.document.documentElement;function Kc(a){return n.isWindow(a)?a:9===a.nodeType&&a.defaultView}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d=this[0],e={top:0,left:0},f=d&&d.ownerDocument;if(f)return b=f.documentElement,n.contains(b,d)?(typeof d.getBoundingClientRect!==U&&(e=d.getBoundingClientRect()),c=Kc(f),{top:e.top+c.pageYOffset-b.clientTop,left:e.left+c.pageXOffset-b.clientLeft}):e},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===n.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(d=a.offset()),d.top+=n.css(a[0],"borderTopWidth",!0),d.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-d.top-n.css(c,"marginTop",!0),left:b.left-d.left-n.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||Jc;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||Jc})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(b,c){var d="pageYOffset"===c;n.fn[b]=function(e){return J(this,function(b,e,f){var g=Kc(b);return void 0===f?g?g[c]:b[e]:void(g?g.scrollTo(d?a.pageXOffset:f,d?f:a.pageYOffset):b[e]=f)},b,e,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=yb(k.pixelPosition,function(a,c){return c?(c=xb(a,b),vb.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return J(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var Lc=a.jQuery,Mc=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=Mc),b&&a.jQuery===n&&(a.jQuery=Lc),n},typeof b===U&&(a.jQuery=a.$=n),n});
\ No newline at end of file diff --git a/browser/extensions/pocket/content/panels/js/vendor/jquery.tokeninput.min.js b/browser/extensions/pocket/content/panels/js/vendor/jquery.tokeninput.min.js deleted file mode 100644 index 40d323df0..000000000 --- a/browser/extensions/pocket/content/panels/js/vendor/jquery.tokeninput.min.js +++ /dev/null @@ -1,954 +0,0 @@ -/*
- * jQuery Plugin: Tokenizing Autocomplete Text Entry
- * Version 1.6.0
- *
- * Copyright (c) 2009 James Smith (http://loopj.com)
- * Licensed jointly under the GPL and MIT licenses,
- * choose which one suits your project best!
- *
- * Licensed under MIT
- * With modifications
- *
- */
-
-(function ($) {
-// Default settings
-var DEFAULT_SETTINGS = {
- // Search settings
- method: "GET",
- contentType: "json",
- queryParam: "q",
- searchDelay: 300,
- minChars: 1,
- propertyToSearch: "name",
- jsonContainer: null,
- scrollKeyboard: false,
-
- // Display settings
- hintText: null,
- noResultsText: null,
- noResultsHideDropdown: false,
- searchingText: null,
- deleteText: "×",
- animateDropdown: true,
- emptyInputLength: null,
-
- // Tokenization settings
- tokenLimit: null,
- tokenDelimiter: ",",
- preventDuplicates: false,
-
- // Output settings
- tokenValue: "id",
-
- // Prepopulation settings
- prePopulate: null,
- processPrePopulate: false,
-
- // Manipulation settings
- idPrefix: "token-input-",
-
- // Formatters
- resultsFormatter: function(item) {
- let listItem = document.createElement("li");
- listItem.textContent = item[this.propertyToSearch];
- return listItem.outerHTML;
- },
- tokenFormatter: function(item) {
- let listItem = document.createElement("li");
- let p = document.createElement("p");
- p.textContent = item[this.propertyToSearch];
- listItem.appendChild(p);
- return listItem.outerHTML;
- },
-
- // Validations
- validateItem: null,
-
- // Force selections only on mouse click
- noHoverSelect: false,
-
- // Callbacks
- onResult: null,
- onAdd: null,
- onDelete: null,
- onReady: null
-};
-
-// Default classes to use when theming
-var DEFAULT_CLASSES = {
- tokenList: "token-input-list",
- token: "token-input-token",
- tokenDelete: "token-input-delete-token",
- selectedToken: "token-input-selected-token",
- highlightedToken: "token-input-highlighted-token",
- dropdown: "token-input-dropdown",
- dropdownItem: "token-input-dropdown-item",
- dropdownItem2: "token-input-dropdown-item2",
- selectedDropdownItem: "token-input-selected-dropdown-item",
- inputToken: "token-input-input-token"
-};
-
-// Input box position "enum"
-var POSITION = {
- BEFORE: 0,
- AFTER: 1,
- END: 2
-};
-
-// Keys "enum"
-var KEY = {
- BACKSPACE: 8,
- TAB: 9,
- ENTER: 13,
- ESCAPE: 27,
- SPACE: 32,
- PAGE_UP: 33,
- PAGE_DOWN: 34,
- END: 35,
- HOME: 36,
- LEFT: 37,
- UP: 38,
- RIGHT: 39,
- DOWN: 40,
- NUMPAD_ENTER: 108,
- COMMA: 188
-};
-
-// Additional public (exposed) methods
-var methods = {
- init: function(url_or_data_or_function, options) {
- var settings = $.extend({}, DEFAULT_SETTINGS, options || {});
-
- return this.each(function () {
- $(this).data("tokenInputObject", new $.TokenList(this, url_or_data_or_function, settings));
- });
- },
- clear: function() {
- this.data("tokenInputObject").clear();
- return this;
- },
- add: function(item) {
- this.data("tokenInputObject").add(item);
- return this;
- },
- remove: function(item) {
- this.data("tokenInputObject").remove(item);
- return this;
- },
- get: function() {
- return this.data("tokenInputObject").getTokens();
- }
-}
-
-// Expose the .tokenInput function to jQuery as a plugin
-$.fn.tokenInput = function (method) {
- // Method calling and initialization logic
- if(methods[method]) {
- return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
- } else {
- return methods.init.apply(this, arguments);
- }
-};
-
-// TokenList class for each input
-$.TokenList = function (input, url_or_data, settings) {
- //
- // Initialization
- //
-
- // Configure the data source
- if($.type(url_or_data) === "string" || $.type(url_or_data) === "function") {
- // Set the url to query against
- settings.url = url_or_data;
-
- // If the URL is a function, evaluate it here to do our initalization work
- var url = computeURL();
-
- // Make a smart guess about cross-domain if it wasn't explicitly specified
- if(settings.crossDomain === undefined) {
- if(url.indexOf("://") === -1) {
- settings.crossDomain = false;
- } else {
- settings.crossDomain = (location.href.split(/\/+/g)[1] !== url.split(/\/+/g)[1]);
- }
- }
- } else if(typeof(url_or_data) === "object") {
- // Set the local data to search through
- settings.local_data = url_or_data;
- }
-
- // Build class names
- if(settings.classes) {
- // Use custom class names
- settings.classes = $.extend({}, DEFAULT_CLASSES, settings.classes);
- } else if(settings.theme) {
- // Use theme-suffixed default class names
- settings.classes = {};
- $.each(DEFAULT_CLASSES, function(key, value) {
- settings.classes[key] = value + "-" + settings.theme;
- });
- } else {
- settings.classes = DEFAULT_CLASSES;
- }
-
-
- // Save the tokens
- var saved_tokens = [];
-
- // Keep track of the number of tokens in the list
- var token_count = 0;
-
- // Basic cache to save on db hits
- var cache = new $.TokenList.Cache();
-
- // Keep track of the timeout, old vals
- var timeout;
- var input_val;
-
- function tokenize(){
- var item = $(selected_dropdown_item).data("tokeninput");
- if(!item && settings.textToData){
- item = settings.textToData(input_box.val());
- }
-
- if(item) {
- add_token(item);
- hidden_input.change();
- return false;
- }
- }
-
- // Create a new text input an attach keyup events
- var input_box = $("<input type=\"text\" autocomplete=\"off\">")
- .css({
- outline: "none"
- })
- .attr("id", settings.idPrefix + input.id)
- .focus(function () {
- if (settings.minChars == 0) {
- setTimeout(function(){do_search();}, 5);
- }
- if (settings.tokenLimit === null || settings.tokenLimit !== token_count) {
- show_dropdown_hint();
- }
- })
- .blur(function () {
- tokenize();
- hide_dropdown();
- $(this).val("");
- })
- .bind("keyup keydown blur update", resize_input)
- .keydown(function (event) {
- var previous_token;
- var next_token;
-
- switch(event.keyCode) {
- case KEY.LEFT:
- case KEY.RIGHT:
- case KEY.UP:
- case KEY.DOWN:
- if(!$(this).val()) {
- previous_token = input_token.prev();
- next_token = input_token.next();
-
- if((previous_token.length && previous_token.get(0) === selected_token) || (next_token.length && next_token.get(0) === selected_token)) {
- // Check if there is a previous/next token and it is selected
- if(event.keyCode === KEY.LEFT || event.keyCode === KEY.UP) {
- deselect_token($(selected_token), POSITION.BEFORE);
- } else {
- deselect_token($(selected_token), POSITION.AFTER);
- }
- } else if((event.keyCode === KEY.LEFT || event.keyCode === KEY.UP) && previous_token.length) {
- // We are moving left, select the previous token if it exists
- select_token($(previous_token.get(0)));
- } else if((event.keyCode === KEY.RIGHT || event.keyCode === KEY.DOWN) && next_token.length) {
- // We are moving right, select the next token if it exists
- select_token($(next_token.get(0)));
- }
- } else {
- if (event.keyCode === KEY.UP || event.keyCode === KEY.DOWN) {
- var dropdown_item = null;
- if(!selected_dropdown_item && (event.keyCode === KEY.DOWN)) {
- dropdown_item = $('.token-input-dropdown li').first();
- }
- else if(event.keyCode === KEY.DOWN) {
- dropdown_item = $(selected_dropdown_item).next();
- } else {
- dropdown_item = $(selected_dropdown_item).prev();
- }
-
- if(dropdown_item.length) {
- select_dropdown_item(dropdown_item,true);
- }
- else if (!(event.keyCode === KEY.DOWN) && $(selected_dropdown_item).length) {
- deselect_dropdown_item($(selected_dropdown_item));
- }
- return false;
- }
- }
- break;
-
- case KEY.BACKSPACE:
- previous_token = input_token.prev();
-
- if(!$(this).val().length) {
- if(selected_token) {
- delete_token($(selected_token));
- hidden_input.change();
- } else if(previous_token.length) {
- select_token($(previous_token.get(0)));
- }
-
- return false;
- } else if($(this).val().length === 1) {
- hide_dropdown();
- } else {
- // set a timeout just long enough to let this function finish.
- setTimeout(function(){do_search();}, 5);
- }
- break;
-
- case KEY.TAB:
- case KEY.ENTER:
- case KEY.NUMPAD_ENTER:
- case KEY.COMMA:
- if (event.keyCode != KEY.ENTER && event.keyCode != KEY.NUMPAD_ENTER)
- {
- event.preventDefault();
- }
- tokenize();
- break;
-
- case KEY.ESCAPE:
- hide_dropdown();
- return true;
-
- default:
- if(String.fromCharCode(event.which)) {
- // set a timeout just long enough to let this function finish.
- setTimeout(function(){do_search();}, 5);
- }
- break;
- }
- });
-
- // Keep a reference to the original input box
- var hidden_input = $(input)
- .hide()
- .val("")
- .focus(function () {
- input_box.focus();
- })
- .blur(function () {
- input_box.blur();
- });
-
- // Keep a reference to the selected token and dropdown item
- var selected_token = null;
- var selected_token_index = 0;
- var selected_dropdown_item = null;
-
- // The list to store the token items in
- var token_list = $("<ul />")
- .addClass(settings.classes.tokenList)
- .click(function (event) {
- var li = $(event.target).closest("li");
- if(li && li.get(0) && $.data(li.get(0), "tokeninput")) {
- toggle_select_token(li);
- } else {
- // Deselect selected token
- if(selected_token) {
- deselect_token($(selected_token), POSITION.END);
- }
-
- // Focus input box
- input_box.focus();
- }
- })
- .mouseover(function (event) {
- var li = $(event.target).closest("li");
- if(li && selected_token !== this) {
- li.addClass(settings.classes.highlightedToken);
- }
- })
- .mouseout(function (event) {
- var li = $(event.target).closest("li");
- if(li && selected_token !== this) {
- li.removeClass(settings.classes.highlightedToken);
- }
- })
- .insertBefore(hidden_input);
-
- // The token holding the input box
- var input_token = $("<li />")
- .addClass(settings.classes.inputToken)
- .appendTo(token_list)
- .append(input_box);
-
- // The list to store the dropdown items in
- var dropdown = $("<div>")
- .addClass(settings.classes.dropdown)
- .appendTo("body")
- .hide();
-
- // Magic element to help us resize the text input
- var input_resizer = $("<tester/>")
- .insertAfter(input_box)
- .css({
- position: "absolute",
- top: -9999,
- left: -9999,
- width: "auto",
- fontSize: input_box.css("fontSize"),
- fontFamily: input_box.css("fontFamily"),
- fontWeight: input_box.css("fontWeight"),
- letterSpacing: input_box.css("letterSpacing"),
- whiteSpace: "nowrap"
- });
-
- // Pre-populate list if items exist
- hidden_input.val("");
- var li_data = settings.prePopulate || hidden_input.data("pre");
- if(settings.processPrePopulate && $.isFunction(settings.onResult)) {
- li_data = settings.onResult.call(hidden_input, li_data);
- }
- if(li_data && li_data.length) {
- $.each(li_data, function (index, value) {
- insert_token(value);
- checkTokenLimit();
- });
- }
-
- // Initialization is done
- if($.isFunction(settings.onReady)) {
- settings.onReady.call();
- if (settings.minChars == 0)
- {
- setTimeout(function(){do_search();}, 5);
- }
- }
-
- //
- // Public functions
- //
-
- this.clear = function() {
- token_list.children("li").each(function() {
- if ($(this).children("input").length === 0) {
- delete_token($(this));
- }
- });
- }
-
- this.add = function(item) {
- add_token(item);
- }
-
- this.remove = function(item) {
- token_list.children("li").each(function() {
- if ($(this).children("input").length === 0) {
- var currToken = $(this).data("tokeninput");
- var match = true;
- for (var prop in item) {
- if (item[prop] !== currToken[prop]) {
- match = false;
- break;
- }
- }
- if (match) {
- delete_token($(this));
- }
- }
- });
- }
-
- this.getTokens = function() {
- return saved_tokens;
- }
-
- //
- // Private functions
- //
-
- function checkTokenLimit() {
- if(settings.tokenLimit !== null && token_count >= settings.tokenLimit) {
- input_box.hide();
- hide_dropdown();
- return;
- }
- }
-
- function resize_input() {
- if(input_val === (input_val = input_box.val())) {return;}
-
- // Enter new content into resizer and resize input accordingly
- var escaped = input_val.replace(/&/g, '&').replace(/\s/g,' ').replace(/</g, '<').replace(/>/g, '>');
- input_resizer.html(escaped);
- var minwidth = 30;
- if (settings.emptyInputLength && token_list.children().length < 2) {
- minwidth = settings.emptyInputLength;
- }
- input_box.width(input_resizer.width() + minwidth);
- }
-
- function is_printable_character(keycode) {
- return ((keycode >= 48 && keycode <= 90) || // 0-1a-z
- (keycode >= 96 && keycode <= 111) || // numpad 0-9 + - / * .
- (keycode >= 186 && keycode <= 192) || // ; = , - . / ^
- (keycode >= 219 && keycode <= 222)); // ( \ ) '
- }
-
- // Inner function to a token to the list
- function insert_token(item) {
- var this_token = settings.tokenFormatter(item);
- this_token = $(this_token)
- .addClass(settings.classes.token)
- .insertBefore(input_token);
-
- // The 'delete token' button
- $("<span>" + settings.deleteText + "</span>")
- .addClass(settings.classes.tokenDelete)
- .appendTo(this_token)
- .click(function () {
- delete_token($(this).parent());
- hidden_input.change();
- return false;
- });
-
- // Store data on the token
- var token_data = {"id": item.id};
- token_data[settings.propertyToSearch] = item[settings.propertyToSearch];
- token_data.item = item;
- $.data(this_token.get(0), "tokeninput", item);
-
- // Save this token for duplicate checking
- saved_tokens = saved_tokens.slice(0,selected_token_index).concat([token_data]).concat(saved_tokens.slice(selected_token_index));
- selected_token_index++;
-
- // Update the hidden input
- update_hidden_input(saved_tokens, hidden_input);
-
- token_count += 1;
-
- // Check the token limit
- if(settings.tokenLimit !== null && token_count >= settings.tokenLimit) {
- input_box.hide();
- hide_dropdown();
- }
-
- return this_token;
- }
-
- // Add a token to the token list based on user input
- function add_token (item) {
- if(!item) return;
-
- // Check for item validation
- if ($.isFunction(settings.validateItem) && !settings.validateItem(item)) {
- return false;
- }
-
- var callback = settings.onAdd;
-
- // See if the token already exists and select it if we don't want duplicates
- if(token_count > 0 && settings.preventDuplicates) {
- var found_existing_token = null;
- token_list.children().each(function () {
- var existing_token = $(this);
- var existing_data = $.data(existing_token.get(0), "tokeninput");
- if(existing_data && existing_data.id === item.id) {
- found_existing_token = existing_token;
- return false;
- }
- });
-
- if(found_existing_token) {
- select_token(found_existing_token);
- input_token.insertAfter(found_existing_token);
- input_box.focus();
- return;
- }
- }
-
- // Insert the new tokens
- if(settings.tokenLimit == null || token_count < settings.tokenLimit) {
- insert_token(item);
- checkTokenLimit();
- }
-
- // Clear input box
- input_box.val("");
-
- // Don't show the help dropdown, they've got the idea
- hide_dropdown();
-
- // Execute the onAdd callback if defined
- if($.isFunction(callback)) {
- callback.call(hidden_input,item);
- }
- }
-
- // Select a token in the token list
- function select_token (token) {
- token.addClass(settings.classes.selectedToken);
- selected_token = token.get(0);
-
- // Hide input box
- input_box.val("");
-
- // Hide dropdown if it is visible (eg if we clicked to select token)
- hide_dropdown();
- }
-
- // Deselect a token in the token list
- function deselect_token (token, position) {
- token.removeClass(settings.classes.selectedToken);
- selected_token = null;
-
- if(position === POSITION.BEFORE) {
- input_token.insertBefore(token);
- selected_token_index--;
- } else if(position === POSITION.AFTER) {
- input_token.insertAfter(token);
- selected_token_index++;
- } else {
- input_token.appendTo(token_list);
- selected_token_index = token_count;
- }
-
- // Show the input box and give it focus again
- input_box.focus();
- }
-
- // Toggle selection of a token in the token list
- function toggle_select_token(token) {
- var previous_selected_token = selected_token;
-
- if(selected_token) {
- deselect_token($(selected_token), POSITION.END);
- }
-
- if(previous_selected_token === token.get(0)) {
- deselect_token(token, POSITION.END);
- } else {
- select_token(token);
- }
- }
-
- // Delete a token from the token list
- function delete_token (token) {
- // Remove the id from the saved list
- var token_data = $.data(token.get(0), "tokeninput");
- var callback = settings.onDelete;
-
- var index = token.prevAll().length;
- if(index > selected_token_index) index--;
-
- // Delete the token
- token.remove();
- selected_token = null;
-
- // Show the input box and give it focus again
- input_box.focus();
-
- // Remove this token from the saved list
- saved_tokens = saved_tokens.slice(0,index).concat(saved_tokens.slice(index+1));
- if(index < selected_token_index) selected_token_index--;
-
- // Update the hidden input
- update_hidden_input(saved_tokens, hidden_input);
-
- token_count -= 1;
-
- if(settings.tokenLimit !== null) {
- input_box
- .show()
- .val("")
- .focus();
- }
-
- // Execute the onDelete callback if defined
- if($.isFunction(callback)) {
- callback.call(hidden_input,token_data);
- }
- }
-
- // Update the hidden input box value
- function update_hidden_input(saved_tokens, hidden_input) {
- var token_values = $.map(saved_tokens, function (el) {
- return el[settings.tokenValue];
- });
- hidden_input.val(token_values.join(settings.tokenDelimiter));
-
- }
-
- // Hide and clear the results dropdown
- function hide_dropdown () {
- dropdown.hide().empty();
- selected_dropdown_item = null;
- if (settings.onHideDropdown)
- settings.onHideDropdown();
- }
-
- function show_dropdown() {
- dropdown
- .css({
- position: "absolute",
- top: $(token_list).offset().top + $(token_list).outerHeight(),
- left: $(token_list).offset().left,
- zindex: 999
- })
- .show();
- if (settings.onShowDropdown)
- settings.onShowDropdown();
- }
-
- function show_dropdown_searching () {
- if(settings.searchingText) {
- dropdown.html("<p>"+settings.searchingText+"</p>");
- show_dropdown();
- }
- }
-
- function show_dropdown_hint () {
- if(settings.hintText) {
- dropdown.html("<p>"+settings.hintText+"</p>");
- show_dropdown();
- }
- }
-
- // Highlight the query part of the search term
- function highlight_term(value, term) {
- return value.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + term + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "<b>$1</b>");
- }
-
- function find_value_and_highlight_term(template, value, term) {
- return template.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + value + ")(?![^<>]*>)(?![^&;]+;)", "g"), highlight_term(value, term));
- }
-
- // Populate the results dropdown with some results
- function populate_dropdown (query, results) {
- if(results && results.length) {
- dropdown.empty();
- var dropdown_ul = $("<ul>")
- .appendTo(dropdown)
- .mouseover(function (event) {
- select_dropdown_item($(event.target).closest("li"));
- })
- .mousedown(function (event) {
- add_token($(event.target).closest("li").data("tokeninput"));
- hidden_input.change();
- return false;
- })
- .hide();
- if (settings.noHoverSelect) {
- dropdown_ul.off('mouseover');
- dropdown_ul.on('mouseover',function (event) {
- $(this).find("li").removeClass(settings.classes.selectedDropdownItem);
- $(event.target).closest("li").addClass(settings.classes.selectedDropdownItem);
- });
- }
-
- $.each(results, function(index, value) {
- var this_li = settings.resultsFormatter(value);
-
- // this_li = find_value_and_highlight_term(this_li ,value[settings.propertyToSearch], query);
-
- this_li = $(this_li).appendTo(dropdown_ul);
-
- if(index % 2) {
- this_li.addClass(settings.classes.dropdownItem);
- } else {
- this_li.addClass(settings.classes.dropdownItem2);
- }
-
- // if(index === 0) {
- // select_dropdown_item(this_li);
- // }
-
- $.data(this_li.get(0), "tokeninput", value);
- });
-
- show_dropdown();
-
- if(settings.animateDropdown) {
- dropdown_ul.slideDown("fast");
- } else {
- dropdown_ul.show();
- }
- } else {
- if(settings.noResultsText) {
- dropdown.html("<p>"+settings.noResultsText+"</p>");
- show_dropdown();
- }
- if (settings.noResultsHideDropdown) {
- hide_dropdown();
- }
- }
- }
-
- // Highlight an item in the results dropdown
- function select_dropdown_item (item,withkeyboard) {
- if(item) {
- if(selected_dropdown_item) {
- deselect_dropdown_item($(selected_dropdown_item));
- }
- if (settings.scrollKeyboard && withkeyboard) {
- var list = $('.token-input-dropdown-tag ul');
- var listheight = list.height();
- var itemheight = item.outerHeight();
- var itemtop = item.position().top;
- if (itemtop > listheight) {
- var listscroll = list.scrollTop();
- list.scrollTop(listscroll + itemheight);
- }
- else if (itemtop < 0) {
- var listscroll = list.scrollTop();
- list.scrollTop(listscroll - itemheight);
- }
-
- }
- item.addClass(settings.classes.selectedDropdownItem);
- selected_dropdown_item = item.get(0);
- }
- }
-
- // Remove highlighting from an item in the results dropdown
- function deselect_dropdown_item (item) {
- item.removeClass(settings.classes.selectedDropdownItem);
- selected_dropdown_item = null;
- }
-
- // Do a search and show the "searching" dropdown if the input is longer
- // than settings.minChars
- function do_search() {
- var query = input_box.val().toLowerCase();
- if(query && query.length || settings.minChars == 0) {
- if(selected_token) {
- deselect_token($(selected_token), POSITION.AFTER);
- }
-
- if(query.length >= settings.minChars) {
- show_dropdown_searching();
- clearTimeout(timeout);
-
- timeout = setTimeout(function(){
- run_search(query);
- }, settings.searchDelay);
- } else {
- hide_dropdown();
- }
- }
- }
-
- // Do the actual search
- function run_search(query) {
- var cache_key = query + computeURL();
- var cached_results = cache.get(cache_key);
- if(cached_results) {
- populate_dropdown(query, cached_results);
- } else {
- // Are we doing an ajax search or local data search?
- if(settings.url) {
- var url = computeURL();
- // Extract exisiting get params
- var ajax_params = {};
- ajax_params.data = {};
- if(url.indexOf("?") > -1) {
- var parts = url.split("?");
- ajax_params.url = parts[0];
-
- var param_array = parts[1].split("&");
- $.each(param_array, function (index, value) {
- var kv = value.split("=");
- ajax_params.data[kv[0]] = kv[1];
- });
- } else {
- ajax_params.url = url;
- }
-
- // Prepare the request
- ajax_params.data[settings.queryParam] = query;
- ajax_params.type = settings.method;
- ajax_params.dataType = settings.contentType;
- if(settings.crossDomain) {
- ajax_params.dataType = "jsonp";
- }
-
- // Attach the success callback
- ajax_params.success = function(results) {
- if($.isFunction(settings.onResult)) {
- results = settings.onResult.call(hidden_input, results);
- }
- cache.add(cache_key, settings.jsonContainer ? results[settings.jsonContainer] : results);
-
- // only populate the dropdown if the results are associated with the active search query
- if(input_box.val().toLowerCase() === query) {
- populate_dropdown(query, settings.jsonContainer ? results[settings.jsonContainer] : results);
- }
- };
-
- // Make the request
- $.ajax(ajax_params);
- } else if(settings.search_function){
- settings.search_function(query, function(results){
- cache.add(cache_key, results);
- populate_dropdown(query, results);
- });
- } else if(settings.local_data) {
- // Do the search through local data
- var results = $.grep(settings.local_data, function (row) {
- return row[settings.propertyToSearch].toLowerCase().indexOf(query.toLowerCase()) > -1;
- });
-
- if($.isFunction(settings.onResult)) {
- results = settings.onResult.call(hidden_input, results);
- }
- cache.add(cache_key, results);
- populate_dropdown(query, results);
- }
- }
- }
-
- // compute the dynamic URL
- function computeURL() {
- var url = settings.url;
- if(typeof settings.url == 'function') {
- url = settings.url.call();
- }
- return url;
- }
-};
-
-// Really basic cache for the results
-$.TokenList.Cache = function (options) {
- var settings = $.extend({
- max_size: 500
- }, options);
-
- var data = {};
- var size = 0;
-
- var flush = function () {
- data = {};
- size = 0;
- };
-
- this.add = function (query, results) {
- if(size > settings.max_size) {
- flush();
- }
-
- if(!data[query]) {
- size += 1;
- }
-
- data[query] = results;
- };
-
- this.get = function (query) {
- return data[query];
- };
-};
-}(jQuery));
diff --git a/browser/extensions/pocket/content/panels/license.txt b/browser/extensions/pocket/content/panels/license.txt deleted file mode 100644 index 7f3f806ba..000000000 --- a/browser/extensions/pocket/content/panels/license.txt +++ /dev/null @@ -1,35 +0,0 @@ -
-Unless where otherwise noted, the following license applies to the files
-within this directory and descendents of this directory.
-
-POCKET MARKS
-
-Notwithstanding the permitted uses of the Software (as defined below) pursuant
-to the license set forth below, "Pocket," "Read It Later" and the Pocket icon
-and logos (collectively, the “Pocket Marksâ€) are registered and common law
-trademarks of Read It Later, Inc. This means that, while you have considerable
-freedom to redistribute and modify the Software, there are tight restrictions
-on your ability to use the Pocket Marks. This license does not grant you any
-rights to use the Pocket Marks except as they are embodied in the Software.
-
----
-
-SOFTWARE
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
diff --git a/browser/extensions/pocket/content/panels/saved.html b/browser/extensions/pocket/content/panels/saved.html deleted file mode 100644 index 93477d8ee..000000000 --- a/browser/extensions/pocket/content/panels/saved.html +++ /dev/null @@ -1,19 +0,0 @@ -<!DOCTYPE html> -<html> - <head> - <meta charset="utf-8"> - <base href="chrome://pocket/content/panels/"> - <title>Pocket: Page Saved</title> - <link rel="stylesheet" href="css/normalize.css"> - <link rel="stylesheet" href="css/firasans.css"> - <link rel="stylesheet" href="css/saved.css"> - </head> - <body class="pkt_ext_containersaved" aria-live="polite"> - <script type="text/javascript" src="js/vendor/jquery-2.1.1.min.js"></script> - <script type="text/javascript" src="js/vendor/handlebars.runtime.js"></script> - <script type="text/javascript" src="js/vendor/jquery.tokeninput.min.js"></script> - <script type="text/javascript" src="js/tmpl.js"></script> - <script type="text/javascript" src="js/messages.js"></script> - <script type="text/javascript" src="js/saved.js"></script> - </body> -</html> diff --git a/browser/extensions/pocket/content/panels/signup.html b/browser/extensions/pocket/content/panels/signup.html deleted file mode 100644 index bcdf66ed4..000000000 --- a/browser/extensions/pocket/content/panels/signup.html +++ /dev/null @@ -1,18 +0,0 @@ -<!DOCTYPE html> -<html> - <head> - <meta charset="utf-8"> - <base href="chrome://pocket/content/panels/"> - <title>Pocket: Sign Up</title> - <link rel="stylesheet" href="css/normalize.css"> - <link rel="stylesheet" href="css/firasans.css"> - <link rel="stylesheet" href="css/signup.css"> - </head> - <body class="pkt_ext_containersignup" aria-live="polite"> - <script type="text/javascript" src="js/vendor/jquery-2.1.1.min.js"></script> - <script type="text/javascript" src="js/vendor/handlebars.runtime.js"></script> - <script type="text/javascript" src="js/tmpl.js"></script> - <script type="text/javascript" src="js/messages.js"></script> - <script type="text/javascript" src="js/signup.js"></script> - </body> -</html> diff --git a/browser/extensions/pocket/content/panels/tmpl/saved_premiumextras.handlebars b/browser/extensions/pocket/content/panels/tmpl/saved_premiumextras.handlebars deleted file mode 100644 index b224450ec..000000000 --- a/browser/extensions/pocket/content/panels/tmpl/saved_premiumextras.handlebars +++ /dev/null @@ -1,2 +0,0 @@ -<div class="pkt_ext_suggestedtag_detailshown">
-</div>
\ No newline at end of file diff --git a/browser/extensions/pocket/content/panels/tmpl/saved_premiumshell.handlebars b/browser/extensions/pocket/content/panels/tmpl/saved_premiumshell.handlebars deleted file mode 100644 index 5ef042636..000000000 --- a/browser/extensions/pocket/content/panels/tmpl/saved_premiumshell.handlebars +++ /dev/null @@ -1,6 +0,0 @@ -<div class="pkt_ext_suggestedtag_detail pkt_ext_suggestedtag_detail_loading"> - <h4>{{suggestedtags}}</h4> - <div class="pkt_ext_loadingspinner"><div></div></div> - <ul class="pkt_ext_cf"> - </ul> -</div>
\ No newline at end of file diff --git a/browser/extensions/pocket/content/panels/tmpl/saved_shell.handlebars b/browser/extensions/pocket/content/panels/tmpl/saved_shell.handlebars deleted file mode 100644 index 89b7500cd..000000000 --- a/browser/extensions/pocket/content/panels/tmpl/saved_shell.handlebars +++ /dev/null @@ -1,29 +0,0 @@ -<div class="pkt_ext_initload"> - <div class="pkt_ext_logo"></div> - <div class="pkt_ext_topdetail"> - <h2>{{saving}}</h2> - </div> - <div class="pkt_ext_loadingspinner"><div></div></div> -</div> -<div class="pkt_ext_detail"> - <div class="pkt_ext_logo"></div> - <div class="pkt_ext_topdetail"> - <h2>{{pagesaved}}</h2> - <h3 class="pkt_ext_errordetail"></h3> - <nav class="pkt_ext_item_actions pkt_ext_cf"> - <ul> - <li><a class="pkt_ext_removeitem" href="#">{{removepage}}</a></li> - <li class="pkt_ext_actions_separator"></li> - <li><a class="pkt_ext_openpocket" href="https://{{pockethost}}/a?src=ff_ext_saved" target="_blank">{{viewlist}}</a></li> - </ul> - </nav> - </div> - <div class="pkt_ext_tag_detail pkt_ext_cf"> - <div class="pkt_ext_tag_input_wrapper"> - <div class="pkt_ext_tag_input_blocker"></div> - <input class="pkt_ext_tag_input" type="text" placeholder="{{addtags}}"> - </div> - <a href="#" class="pkt_ext_btn pkt_ext_btn_disabled">{{save}}</a> - </div> - <p class="pkt_ext_edit_msg"></p> -</div>
\ No newline at end of file diff --git a/browser/extensions/pocket/content/panels/tmpl/signup_shell.handlebars b/browser/extensions/pocket/content/panels/tmpl/signup_shell.handlebars deleted file mode 100644 index 8dddaef60..000000000 --- a/browser/extensions/pocket/content/panels/tmpl/signup_shell.handlebars +++ /dev/null @@ -1,32 +0,0 @@ -<div class="pkt_ext_introdetail pkt_ext_introdetailhero"> - <h2 class="pkt_ext_logo">Pocket</h2> - <p class="pkt_ext_tagline">{{tagline}}</p> - {{#if showlearnmore}} - {{#if controlvariant}} - <p class="pkt_ext_learnmorecontainer"><a class="pkt_ext_learnmore" href="https://{{pockethost}}/firefox_learnmore?s=ffi&t=learnmore&tv=panel_control&v={{variant}}" target="_blank">{{learnmore}}</a></p> - {{else}} - <p class="pkt_ext_learnmorecontainer"><a class="pkt_ext_learnmore" href="https://{{pockethost}}/firefox_learnmore?s=ffi&t=learnmore&tv=panel_tryit&v={{variant}}" target="_blank">{{learnmore}}</a></p> - {{/if}} - {{else}} - <p class="pkt_ext_learnmorecontainer"><a class="pkt_ext_learnmore pkt_ext_learnmoreinactive" href="#">{{learnmore}}</a></p> - {{/if}} - <div class="pkt_ext_introimg"></div> -</div> -<div class="pkt_ext_signupdetail pkt_ext_signupdetail_hero"> - {{#if fxasignedin}} - <h4>{{signuptosave}}</h4> - <p class="btn-container"><a href="https://{{pockethost}}/ff_signup?s=ffi&t=signupff&v={{variant}}" target="_blank" class="btn signup-btn-firefox"><span class="logo"></span><span class="text">{{signinfirefox}}</span></a></p> - <p class="alreadyhave">{{alreadyhaveacct}} <a href="https://{{pockethost}}/login?ep=3&src=extension&s=ffi&t=login&v={{variant}}" target="_blank">{{loginnow}}</a>.</p> - {{else}} - {{#if controlvariant}} - <h4>{{signuptosave}}</h4> - <p class="btn-container"><a href="https://{{pockethost}}/ff_signup?s=ffi&tv=panel_control&t=signupff&v={{variant}}" target="_blank" class="btn signup-btn-firefox"><span class="logo"></span><span class="text">{{signupfirefox}}</span></a></p> - <p class="btn-container"><a href="https://{{pockethost}}/signup?force=email&tv=panel_control&src=extension&s=ffi&t=signupemail&v={{variant}}" target="_blank" class="btn btn-secondary signup-btn-email signup-btn-initstate">{{signupemail}}</a></p> - <p class="alreadyhave">{{alreadyhaveacct}} <a href="https://{{pockethost}}/login?ep=3&tv=panel_control&src=extension&s=ffi&t=login&v={{variant}}" target="_blank">{{loginnow}}</a>.</p> - {{else}} - <p class="btn-container"><a href="https://{{pockethost}}/firefox_tryitnow?s=ffi&tv=panel_tryit&t=tryitnow" target="_blank" class="btn signup-btn-tryitnow"><span class="text">{{tryitnow}}</span></a></p> - <p class="alreadyhave tryitnowspace">{{alreadyhaveacct}} <a href="https://{{pockethost}}/login?ep=3&s=ffi&tv=panel_tryit&src=extension&t=login&v={{variant}}" target="_blank">{{loginnow}}</a>.</p> - <p class="pkt_ext_tos">{{{tos}}}</p> - {{/if}} - {{/if}} -</div> diff --git a/browser/extensions/pocket/content/panels/tmpl/signupstoryboard_shell.handlebars b/browser/extensions/pocket/content/panels/tmpl/signupstoryboard_shell.handlebars deleted file mode 100644 index 8a181e23d..000000000 --- a/browser/extensions/pocket/content/panels/tmpl/signupstoryboard_shell.handlebars +++ /dev/null @@ -1,43 +0,0 @@ -<div class="pkt_ext_introdetail pkt_ext_introdetailstoryboard"> - <div class="pkt_ext_introstory pkt_ext_introstoryone"> - <div class="pkt_ext_introstory_text"> - <p class="pkt_ext_tagline">{{taglinestory_one}}</p> - </div> - <div class="pkt_ext_introstoryone_img"></div> - </div> - <div class="pkt_ext_introstorydivider"></div> - <div class="pkt_ext_introstory pkt_ext_introstorytwo"> - <div class="pkt_ext_introstory_text"> - <p class="pkt_ext_tagline">{{taglinestory_two}}</p> - {{#if showlearnmore}} - {{#if controlvariant}} - <p><a class="pkt_ext_learnmore" href="https://{{pockethost}}/firefox_learnmore?s=ffi&t=learnmore&tv=panel_control&v={{variant}}" target="_blank">{{learnmore}}</a></p> - {{else}} - <p><a class="pkt_ext_learnmore" href="https://{{pockethost}}/firefox_learnmore?s=ffi&t=learnmore&tv=panel_tryit&v={{variant}}" target="_blank">{{learnmore}}</a></p> - {{/if}} - {{else}} - <p><a class="pkt_ext_learnmore pkt_ext_learnmoreinactive" href="#">{{learnmore}}</a></p> - {{/if}} - </div> - <div class="pkt_ext_introstorytwo_img"></div> - </div> -</div> -<div class="pkt_ext_signupdetail"> - {{#if fxasignedin}} - <h4>{{signuptosave}}</h4> - <p class="btn-container"><a href="https://{{pockethost}}/ff_signup?s=ffi&t=signupff&v={{variant}}" target="_blank" class="btn signup-btn-firefox"><span class="logo"></span><span class="text">{{signinfirefox}}</span></a></p> - <p class="alreadyhave">{{alreadyhaveacct}} <a href="https://{{pockethost}}/login?ep=3&src=extension&s=ffi&t=login&v={{variant}}" target="_blank">{{loginnow}}</a>.</p> - {{else}} - {{#if controlvariant}} - <h4>{{signuptosave}}</h4> - <p class="btn-container"><a href="https://{{pockethost}}/ff_signup?s=ffi&tv=panel_control&t=signupff&v={{variant}}" target="_blank" class="btn signup-btn-firefox"><span class="logo"></span><span class="text">{{signupfirefox}}</span></a></p> - <p class="btn-container"><a href="https://{{pockethost}}/signup?force=email&tv=panel_control&src=extension&s=ffi&t=signupemail&v={{variant}}" target="_blank" class="btn btn-secondary signup-btn-email signup-btn-initstate">{{signupemail}}</a></p> - <p class="alreadyhave">{{alreadyhaveacct}} <a href="https://{{pockethost}}/login?ep=3&tv=panel_control&src=extension&s=ffi&t=login&v={{variant}}" target="_blank">{{loginnow}}</a>.</p> - {{else}} - <p class="btn-container"><a href="https://{{pockethost}}/firefox_tryitnow?s=ffi&tv=panel_tryit&t=tryitnow" target="_blank" class="btn signup-btn-tryitnow"><span class="text">{{tryitnow}}</span></a></p> - <p class="alreadyhave tryitnowspace">{{alreadyhaveacct}} <a href="https://{{pockethost}}/login?ep=3&s=ffi&tv=panel_tryit&src=extension&t=login&v={{variant}}" target="_blank">{{loginnow}}</a>.</p> - <p class="pkt_ext_tos">{{{tos}}}</p> - {{/if}} - {{/if}} - -</div> diff --git a/browser/extensions/pocket/content/pktApi.jsm b/browser/extensions/pocket/content/pktApi.jsm deleted file mode 100644 index 63b6d415c..000000000 --- a/browser/extensions/pocket/content/pktApi.jsm +++ /dev/null @@ -1,657 +0,0 @@ -/* - * LICENSE - * - * POCKET MARKS - * - * Notwithstanding the permitted uses of the Software (as defined below) pursuant to the license set forth below, "Pocket," "Read It Later" and the Pocket icon and logos (collectively, the “Pocket Marksâ€) are registered and common law trademarks of Read It Later, Inc. This means that, while you have considerable freedom to redistribute and modify the Software, there are tight restrictions on your ability to use the Pocket Marks. This license does not grant you any rights to use the Pocket Marks except as they are embodied in the Software. - * - * --- - * - * SOFTWARE - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/* - * Pocket API module - * - * Public API Documentation: http://getpocket.com/developer/ - * - * - * Definition of keys stored in preferences to preserve user state: - * premium_status: Current premium status for logged in user if available - * Can be 0 for no premium and 1 for premium - * latestSince: Last timestamp a save happened - * tags: All tags for logged in user - * usedTags: All used tags from within the extension sorted by recency - */ - -const {classes: Cc, interfaces: Ci, utils: Cu, manager: Cm} = Components; -this.EXPORTED_SYMBOLS = ["pktApi"]; - -Cu.import("resource://gre/modules/XPCOMUtils.jsm"); -Cu.import("resource://gre/modules/Services.jsm"); - - -var pktApi = (function() { - - /** - * Configuration - */ - - // Base url for all api calls - var pocketAPIhost = Services.prefs.getCharPref("extensions.pocket.api"); // api.getpocket.com - var pocketSiteHost = Services.prefs.getCharPref("extensions.pocket.site"); // getpocket.com - var baseAPIUrl = "https://" + pocketAPIhost + "/v3"; - - - /** - * Auth keys for the API requests - */ - var oAuthConsumerKey = Services.prefs.getCharPref("extensions.pocket.oAuthConsumerKey"); - - /** - * - */ - var prefBranch = Services.prefs.getBranch("extensions.pocket.settings."); - - /** - * Helper - */ - - var extend = function(out) { - out = out || {}; - - for (var i = 1; i < arguments.length; i++) { - if (!arguments[i]) - continue; - - for (var key in arguments[i]) { - if (arguments[i].hasOwnProperty(key)) - out[key] = arguments[i][key]; - } - } - return out; - } - - var parseJSON = function(jsonString) { - try { - var o = JSON.parse(jsonString); - - // Handle non-exception-throwing cases: - // Neither JSON.parse(false) or JSON.parse(1234) throw errors, hence the type-checking, - // but... JSON.parse(null) returns 'null', and typeof null === "object", - // so we must check for that, too. - if (o && typeof o === "object" && o !== null) { - return o; - } - } - catch (e) { } - - return undefined; - }; - - /** - * Settings - */ - - /** - * Wrapper for different plattforms to get settings for a given key - * @param {string} key A string containing the name of the key you want to - * retrieve the value of - * @return {string} String containing the value of the key. If the key - * does not exist, null is returned - */ - function getSetting(key) { - // TODO : Move this to sqlite or a local file so it's not editable (and is safer) - // https://developer.mozilla.org/en-US/Add-ons/Overlay_Extensions/XUL_School/Local_Storage - - if (!prefBranch.prefHasUserValue(key)) - return undefined; - - return prefBranch.getComplexValue(key, Components.interfaces.nsISupportsString).data; - } - - /** - * Wrapper for different plattforms to set a value for a given key in settings - * @param {string} key A string containing the name of the key you want - * to create/update. - * @param {string} value String containing the value you want to give - * the key you are creating/updating. - */ - function setSetting(key, value) { - // TODO : Move this to sqlite or a local file so it's not editable (and is safer) - // https://developer.mozilla.org/en-US/Add-ons/Overlay_Extensions/XUL_School/Local_Storage - - if (!value) - prefBranch.clearUserPref(key); - else - { - // We use complexValue as tags can have utf-8 characters in them - var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString); - str.data = value; - prefBranch.setComplexValue(key, Components.interfaces.nsISupportsString, str); - } - } - - /** - * Auth - */ - - /* - * All cookies from the Pocket domain - * The return format: { cookieName:cookieValue, cookieName:cookieValue, ... } - */ - function getCookiesFromPocket() { - - var cookieManager = Cc["@mozilla.org/cookiemanager;1"].getService(Ci.nsICookieManager2); - var pocketCookies = cookieManager.getCookiesFromHost(pocketSiteHost, {}); - var cookies = {}; - while (pocketCookies.hasMoreElements()) { - var cookie = pocketCookies.getNext().QueryInterface(Ci.nsICookie2); - cookies[cookie.name] = cookie.value; - } - return cookies; - } - - /** - * Returns access token or undefined if no logged in user was found - * @return {string | undefined} Access token for logged in user user - */ - function getAccessToken() { - var pocketCookies = getCookiesFromPocket(); - - // If no cookie was found just return undefined - if (typeof pocketCookies['ftv1'] === "undefined") { - return undefined; - } - - // Check if a new user logged in in the meantime and clearUserData if so - var sessionId = pocketCookies['fsv1']; - var lastSessionId = getSetting('fsv1'); - if (sessionId !== lastSessionId) { - clearUserData(); - setSetting("fsv1", sessionId); - } - - // Return access token - return pocketCookies['ftv1']; - } - - /** - * Get the current premium status of the user - * @return {number | undefined} Premium status of user - */ - function getPremiumStatus() { - var premiumStatus = getSetting("premium_status"); - if (typeof premiumStatus === "undefined") { - // Premium status is not in settings try get it from cookie - var pocketCookies = getCookiesFromPocket(); - premiumStatus = pocketCookies['ps']; - } - return premiumStatus; - } - - /** - * Helper method to check if a user is premium or not - * @return {Boolean} Boolean if user is premium or not - */ - function isPremiumUser() { - return getPremiumStatus() == 1; - } - - - /** - * Returns users logged in status - * @return {Boolean} Users logged in status - */ - function isUserLoggedIn() { - return (typeof getAccessToken() !== "undefined"); - } - - /** - * API - */ - - /** - * Helper function for executing api requests. It mainly configures the - * ajax call with default values like type, headers or dataType for an api call. - * This function is for internal usage only. - * @param {Object} options - * Possible keys: - * - {string} path: This should be the Pocket API - * endpoint to call. For example providing the path - * "/get" would result in a call to getpocket.com/v3/get - * - {Object|undefined} data: Gets passed on to the jQuery ajax - * call as data parameter - * - {function(Object data, XMLHttpRequest xhr) | undefined} success: - * A function to be called if the request succeeds. - * - {function(Error errorThrown, XMLHttpRequest xhr) | undefined} error: - * A function to be called if the request fails. - * @return {Boolean} Returns Boolean whether the api call started sucessfully - * - */ - function apiRequest(options) { - if ((typeof options === "undefined") || (typeof options.path === "undefined")) { - return false; - } - - var url = baseAPIUrl + options.path; - var data = options.data || {}; - data.locale_lang = Cc["@mozilla.org/chrome/chrome-registry;1"]. - getService(Ci.nsIXULChromeRegistry). - getSelectedLocale("browser"); - data.consumer_key = oAuthConsumerKey; - - var request = Components.classes["@mozilla.org/xmlextras/xmlhttprequest;1"].createInstance(Components.interfaces.nsIXMLHttpRequest); - request.open("POST", url, true); - request.onreadystatechange = function(e) { - if (request.readyState == 4) { - if (request.status === 200) { - // There could still be an error if the response is no valid json - // or does not have status = 1 - var response = parseJSON(request.response); - if (options.success && response && response.status == 1) { - options.success(response, request); - return; - } - } - - // Handle error case - if (options.error) { - // In case the user did revoke the access token or it's not - // valid anymore clear the user data - if (request.status === 401) { - clearUserData(); - } - - // Handle error message - var errorMessage; - if (request.status !== 200) { - errorMessage = request.getResponseHeader("X-Error") || request.statusText; - errorMessage = JSON.parse('"' + errorMessage + '"'); - } - var error = {message: errorMessage}; - options.error(error, request); - } - } - }; - - // Set headers - request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8'); - request.setRequestHeader('X-Accept', ' application/json'); - - // Serialize and Fire off the request - var str = []; - for (var p in data) { - if (data.hasOwnProperty(p)) { - str.push(encodeURIComponent(p) + "=" + encodeURIComponent(data[p])); - } - } - - request.send(str.join("&")); - - return true; - } - - /** - * Cleans all settings for the previously logged in user - */ - function clearUserData() { - // Clear stored information - setSetting("premium_status", undefined); - setSetting("latestSince", undefined); - setSetting("tags", undefined); - setSetting("usedTags", undefined); - - setSetting("fsv1", undefined); - } - - /** - * Add a new link to Pocket - * @param {string} url URL of the link - * @param {Object | undefined} options Can provide a string-based title, a - * `success` callback and an `error` callback. - * @return {Boolean} Returns Boolean whether the api call started sucessfully - */ - function addLink(url, options) { - - var since = getSetting('latestSince'); - var accessToken = getAccessToken(); - - var sendData = { - access_token: accessToken, - url: url, - since: since ? since : 0 - }; - - if (options.title) { - sendData.title = options.title; - } - - return apiRequest({ - path: "/firefox/save", - data: sendData, - success: function(data) { - - // Update premium status, tags and since - var tags = data.tags; - if ((typeof tags !== "undefined") && Array.isArray(tags)) { - // If a tagslist is in the response replace the tags - setSetting('tags', JSON.stringify(data.tags)); - } - - // Update premium status - var premiumStatus = data.premium_status; - if (typeof premiumStatus !== "undefined") { - // If a premium_status is in the response replace the premium_status - setSetting("premium_status", premiumStatus); - } - - // Save since value for further requests - setSetting('latestSince', data.since); - - if (options.success) { - options.success.apply(options, Array.apply(null, arguments)); - } - }, - error: options.error - }); - } - - /** - * Delete an item identified by item id from the users list - * @param {string} itemId The id from the item we want to remove - * @param {Object | undefined} options Can provide an actionInfo object with - * further data to send to the API. Can - * have success and error callbacks - * @return {Boolean} Returns Boolean whether the api call started sucessfully - */ - function deleteItem(itemId, options) { - var action = { - action: "delete", - item_id: itemId - }; - return sendAction(action, options); - } - - /** - * General function to send all kinds of actions like adding of links or - * removing of items via the API - * @param {Object} action Action object - * @param {Object | undefined} options Can provide an actionInfo object - * with further data to send to the - * API. Can have success and error - * callbacks - * @return {Boolean} Returns Boolean whether the api call started sucessfully - */ - function sendAction(action, options) { - // Options can have an 'actionInfo' object. This actionInfo object gets - // passed through to the action object that will be send to the API endpoint - if (typeof options.actionInfo !== 'undefined') { - action = extend(action, options.actionInfo); - } - return sendActions([action], options); - } - - /** - * General function to send all kinds of actions like adding of links or - * removing of items via the API - * @param {Array} actions Array of action objects - * @param {Object | undefined} options Can have success and error callbacks - * @return {Boolean} Returns Boolean whether the api call started sucessfully - */ - function sendActions(actions, options) { - return apiRequest({ - path: "/send", - data: { - access_token: getAccessToken(), - actions: JSON.stringify(actions) - }, - success: options.success, - error: options.error - }); - } - - /** - * Handling Tags - */ - - /** - * Add tags to the item identified by the url. Also updates the used tags - * list - * @param {string} itemId The item identifier by item id - * @param {Array} tags Tags adding to the item - * @param {Object | undefined} options Can provide an actionInfo object with - * further data to send to the API. Can - * have success and error callbacks - * @return {Boolean} Returns Boolean whether the api call started sucessfully - */ - function addTagsToItem(itemId, tags, options) { - return addTags({item_id: itemId}, tags, options); - } - - /** - * Add tags to the item identified by the url. Also updates the used tags - * list - * @param {string} url The item identifier by url - * @param {Array} tags Tags adding to the item - * @param {Object} options Can provide an actionInfo object with further - * data to send to the API. Can have success and error - * callbacks - * @return {Boolean} Returns Boolean whether the api call started sucessfully - */ - function addTagsToURL(url, tags, options) { - return addTags({url: url}, tags, options); - } - - /** - * Helper function to execute the add tags api call. Will be used from addTagsToURL - * and addTagsToItem but not exposed outside - * @param {string} actionPart Specific action part to add to action - * @param {Array} tags Tags adding to the item - * @param {Object | undefined} options Can provide an actionInfo object with - * further data to send to the API. Can - * have success and error callbacks - * @return {Boolean} Returns Boolean whether the api call started sucessfully - */ - function addTags(actionPart, tags, options) { - // Tags add action - var action = { - action: "tags_add", - tags: tags - }; - action = extend(action, actionPart); - - // Backup the success callback as we need it later - var finalSuccessCallback = options.success; - - // Switch the success callback - options.success = function(data) { - - // Update used tags - var usedTagsJSON = getSetting("usedTags"); - var usedTags = usedTagsJSON ? JSON.parse(usedTagsJSON) : {}; - - // Check for each tag if it's already in the used tags - for (var i = 0; i < tags.length; i++) { - var tagToSave = tags[i].trim(); - var newUsedTagObject = { - "tag": tagToSave, - "timestamp": new Date().getTime() - }; - usedTags[tagToSave] = newUsedTagObject; - } - setSetting("usedTags", JSON.stringify(usedTags)); - - // Let the callback know that we are finished - if (finalSuccessCallback) { - finalSuccessCallback(data); - } - }; - - // Execute the action - return sendAction(action, options); - } - - /** - * Get all cached tags and used tags within the callback - * @param {function(Array, Array, Boolean)} callback - * Function with tags and used tags as parameter. - */ - function getTags(callback) { - - var tagsFromSettings = function() { - var tagsJSON = getSetting("tags"); - if (typeof tagsJSON !== "undefined") { - return JSON.parse(tagsJSON) - } - return []; - } - - var sortedUsedTagsFromSettings = function() { - // Get and Sort used tags - var usedTags = []; - - var usedTagsJSON = getSetting("usedTags"); - if (typeof usedTagsJSON !== "undefined") { - var usedTagsObject = JSON.parse(usedTagsJSON); - var usedTagsObjectArray = []; - for (var tagKey in usedTagsObject) { - usedTagsObjectArray.push(usedTagsObject[tagKey]); - } - - // Sort usedTagsObjectArray based on timestamp - usedTagsObjectArray.sort(function(usedTagA, usedTagB) { - var a = usedTagA.timestamp; - var b = usedTagB.timestamp; - return a - b; - }); - - // Get all keys tags - for (var j = 0; j < usedTagsObjectArray.length; j++) { - usedTags.push(usedTagsObjectArray[j].tag); - } - - // Reverse to set the last recent used tags to the front - usedTags.reverse(); - } - - return usedTags; - } - - if (callback) { - var tags = tagsFromSettings(); - var usedTags = sortedUsedTagsFromSettings(); - callback(tags, usedTags); - } - } - - /** - * Fetch suggested tags for a given item id - * @param {string} itemId Item id of - * @param {Object | undefined} options Can provide an actionInfo object - * with further data to send to the API. - * Can have success and error callbacks - * @return {Boolean} Returns Boolean whether the api call started sucessfully - */ - function getSuggestedTagsForItem(itemId, options) { - return getSuggestedTags({item_id: itemId}, options); - } - - /** - * Fetch suggested tags for a given URL - * @param {string} url (required) The item identifier by url - * @param {Object} options Can provide an actionInfo object with further - * data to send to the API. Can have success and error - * callbacks - * @return {Boolean} Returns Boolean whether the api call started sucessfully - */ - function getSuggestedTagsForURL(url, options) { - return getSuggestedTags({url: url}, options); - } - - /** - * Helper function to get suggested tags - * @return {Boolean} Returns Boolean whether the api call started sucessfully - */ - function getSuggestedTags(data, options) { - - data = data || {}; - options = options || {}; - - data.access_token = getAccessToken(); - - return apiRequest({ - path: "/getSuggestedTags", - data: data, - success: options.success, - error: options.error - }); - } - - /** - * Helper function to get current signup AB group the user is in - */ - function getSignupPanelTabTestVariant() { - return getMultipleTestOption('panelSignUp', {control: 1, v1: 8, v2: 1 }) - } - - function getMultipleTestOption(testName, testOptions) { - // Get the test from preferences if we've already assigned the user to a test - var settingName = 'test.' + testName; - var assignedValue = getSetting(settingName); - var valArray = []; - - // If not assigned yet, pick and store a value - if (!assignedValue) - { - // Get a weighted array of test variants from the testOptions object - Object.keys(testOptions).forEach(function(key) { - for (var i = 0; i < testOptions[key]; i++) { - valArray.push(key); - } - }); - - // Get a random test variant and set the user to it - assignedValue = valArray[Math.floor(Math.random() * valArray.length)]; - setSetting(settingName, assignedValue); - } - - return assignedValue; - - } - - /** - * Public functions - */ - return { - isUserLoggedIn : isUserLoggedIn, - clearUserData: clearUserData, - addLink: addLink, - deleteItem: deleteItem, - addTagsToItem: addTagsToItem, - addTagsToURL: addTagsToURL, - getTags: getTags, - isPremiumUser: isPremiumUser, - getSuggestedTagsForItem: getSuggestedTagsForItem, - getSuggestedTagsForURL: getSuggestedTagsForURL, - getSignupPanelTabTestVariant: getSignupPanelTabTestVariant, - }; -}()); diff --git a/browser/extensions/pocket/content/pocket-content-process.js b/browser/extensions/pocket/content/pocket-content-process.js deleted file mode 100644 index 9b158a0ed..000000000 --- a/browser/extensions/pocket/content/pocket-content-process.js +++ /dev/null @@ -1,54 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -"use strict"; - -// This file is loaded as a process script, it will be loaded in the parent -// process as well as all content processes. - -const { utils: Cu } = Components; -Cu.import("resource://gre/modules/XPCOMUtils.jsm"); -Cu.import("resource://gre/modules/Services.jsm"); -Cu.import("chrome://pocket/content/AboutPocket.jsm"); - -function AboutPocketChildListener() { -} -AboutPocketChildListener.prototype = { - onStartup: function onStartup() { - - // Only do this in content processes since, as the broadcaster of this - // message, the parent process doesn't also receive it. We handlers - // the shutting down separately. - if (Services.appinfo.processType == - Services.appinfo.PROCESS_TYPE_CONTENT) { - - Services.cpmm.addMessageListener("PocketShuttingDown", this, true); - } - - AboutPocket.aboutSaved.register(); - AboutPocket.aboutSignup.register(); - }, - - onShutdown: function onShutdown() { - AboutPocket.aboutSignup.unregister(); - AboutPocket.aboutSaved.unregister(); - - Services.cpmm.removeMessageListener("PocketShuttingDown", this); - Cu.unload("chrome://pocket/content/AboutPocket.jsm"); - }, - - receiveMessage: function receiveMessage(message) { - switch (message.name) { - case "PocketShuttingDown": - this.onShutdown(); - break; - default: - break; - } - - return; - } -}; - -const listener = new AboutPocketChildListener(); -listener.onStartup(); diff --git a/browser/extensions/pocket/install.rdf.in b/browser/extensions/pocket/install.rdf.in deleted file mode 100644 index babccfa5a..000000000 --- a/browser/extensions/pocket/install.rdf.in +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0"?> -<!-- This Source Code Form is subject to the terms of the Mozilla Public - - License, v. 2.0. If a copy of the MPL was not distributed with this - - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - -#filter substitution - -<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:em="http://www.mozilla.org/2004/em-rdf#"> - - <Description about="urn:mozilla:install-manifest"> - <em:id>firefox@getpocket.com</em:id> - <em:version>1.0.5</em:version> - <em:type>2</em:type> - <em:bootstrap>true</em:bootstrap> - <em:multiprocessCompatible>true</em:multiprocessCompatible> - - <!-- Target Application this theme can install into, - with minimum and maximum supported versions. --> - <em:targetApplication> - <Description> - <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id> - <em:minVersion>@MOZ_APP_VERSION@</em:minVersion> - <em:maxVersion>@MOZ_APP_MAXVERSION@</em:maxVersion> - </Description> - </em:targetApplication> - - <!-- Front End MetaData --> - <em:name>Pocket</em:name> - <em:description>When you find something you want to view later, put it in Pocket.</em:description> - </Description> -</RDF> diff --git a/browser/extensions/pocket/jar.mn b/browser/extensions/pocket/jar.mn deleted file mode 100644 index 5fab627fe..000000000 --- a/browser/extensions/pocket/jar.mn +++ /dev/null @@ -1,32 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -[features/firefox@getpocket.com] chrome.jar: -% content pocket %content/ contentaccessible=yes -% skin pocket classic/1.0 %skin/linux/ -% skin pocket classic/1.0 %skin/osx/ os=Darwin -% skin pocket classic/1.0 %skin/windows/ os=WINNT -% skin pocket-shared classic/1.0 %skin/shared/ - content/ (content/*) - skin/ (skin/*) -# windows overrides -% override chrome://pocket/skin/menuPanel.png chrome://pocket/skin/menuPanel-aero.png os=WINNT osversion=6 -% override chrome://pocket/skin/menuPanel.png chrome://pocket/skin/menuPanel-aero.png os=WINNT osversion=6.1 -% override chrome://pocket/skin/menuPanel@2x.png chrome://pocket/skin/menuPanel-aero@2x.png os=WINNT osversion=6 -% override chrome://pocket/skin/menuPanel@2x.png chrome://pocket/skin/menuPanel-aero@2x.png os=WINNT osversion=6.1 -% override chrome://pocket/skin/Toolbar@2x.png chrome://pocket/skin/Toolbar-aero@2x.png os=WINNT osversion=6 -% override chrome://pocket/skin/Toolbar@2x.png chrome://pocket/skin/Toolbar-aero@2x.png os=WINNT osversion=6.1 -% override chrome://pocket/skin/Toolbar@2x.png chrome://pocket/skin/Toolbar-win8@2x.png os=WINNT osversion=6.2 -% override chrome://pocket/skin/Toolbar@2x.png chrome://pocket/skin/Toolbar-win8@2x.png os=WINNT osversion=6.3 -% override chrome://pocket/skin/Toolbar.png chrome://pocket/skin/Toolbar-XP.png os=WINNT osversion<6 -% override chrome://pocket/skin/Toolbar.png chrome://pocket/skin/Toolbar-aero.png os=WINNT osversion=6 -% override chrome://pocket/skin/Toolbar.png chrome://pocket/skin/Toolbar-aero.png os=WINNT osversion=6.1 -% override chrome://pocket/skin/Toolbar.png chrome://pocket/skin/Toolbar-win8.png os=WINNT osversion=6.2 -% override chrome://pocket/skin/Toolbar.png chrome://pocket/skin/Toolbar-win8.png os=WINNT osversion=6.3 -# osx overrides -% override chrome://pocket/skin/Toolbar.png chrome://pocket/skin/Toolbar-yosemite.png os=Darwin osversion>=10.10 -% override chrome://pocket/skin/Toolbar@2x.png chrome://pocket/skin/Toolbar-yosemite@2x.png os=Darwin osversion>=10.10 -% override chrome://pocket/skin/menuPanel.png chrome://pocket/skin/menuPanel-yosemite.png os=Darwin osversion>=10.10 -% override chrome://pocket/skin/menuPanel@2x.png chrome://pocket/skin/menuPanel-yosemite@2x.png os=Darwin osversion>=10.10 - diff --git a/browser/extensions/pocket/locale/ast/pocket.properties b/browser/extensions/pocket/locale/ast/pocket.properties deleted file mode 100644 index c32e53b54..000000000 --- a/browser/extensions/pocket/locale/ast/pocket.properties +++ /dev/null @@ -1,43 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -addtags = Amestar etiquetes -alreadyhaveacct = ¿Yá yes un usuariu de Pocket? -continueff = Siguir con Firefox -errorgeneric = Hebo un fallu tentando de guardar en Pocket. -learnmore = Depriendi más -loginnow = Aniciar sesión -maxtaglength = Les etiquetes lléndense a 25 caráuteres -mustbeconnected = Has tar coneutáu a internet pa guardar en Pocket. Comprueba la to conexón y volvi tentalo, por favor. -onlylinkssaved = Namái puen guardase enllaces -pagenotsaved = Páxina non guardada -pageremoved = Páxina desaniciada -pagesaved = Guardóse en Pocket -processingremove = Desaniciando páxina… -processingtags = Amestando etiquetes… -removepage = Desanicia páxina -save = Guardar -saving = Guardando… -signupemail = Rexistrase con corréu -signuptosave = RexÃstrate en Pocket. Ye de baldre. -suggestedtags = Etiquetes suxerÃes -tagline = Guardar artÃculos y vÃdeos dende Firefox pa ver en Pocket o en cualquier preséu, en cualquier momentu. -taglinestory_one = Fai clic nel botón de Pocket pa guardar cualquier artÃculu, videu o páxina dende Firefox. -taglinestory_two = Ver en Pocker o en cualquier preséu, en cualquier momentu. -tagssaved = Etiquetes amestaes -tos = Sigiuiendo, tas acordies colos <a href="%1$S" target="_blank">Términos de Serviciu</a> y la <a href="%2$S" target="_blank">PolÃtica de privacidá</a> de Pocket -tryitnow = Pruébalu agora -signinfirefox = Anicia sesión con Firefox -signupfirefox = RexÃstrate con Firefox -viewlist = Ver llista - -# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label): -# "Pocket" is a brand name. -pocket-button.label = Pocket -pocket-button.tooltiptext = Guardar en Pocket -saveToPocketCmd.label = Guardar páxina en Pocket -saveToPocketCmd.accesskey = k -saveLinkToPocketCmd.label = Guardar enllaz en Pocket -saveLinkToPocketCmd.accesskey = o -pocketMenuitem.label = Ver la llista de Pocket diff --git a/browser/extensions/pocket/locale/az/pocket.properties b/browser/extensions/pocket/locale/az/pocket.properties deleted file mode 100644 index a228ca026..000000000 --- a/browser/extensions/pocket/locale/az/pocket.properties +++ /dev/null @@ -1,43 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -addtags = Etiket É™lavÉ™ et -alreadyhaveacct = Artıq Pocket istifadəçisisiniz? -continueff = Firefox ilÉ™ davam et -errorgeneric = Pocket-É™ saxlarkÉ™n xÉ™ta baÅŸ verdi. -learnmore = Ætraflı ÖyrÉ™n -loginnow = Daxil ol -maxtaglength = EtiketlÉ™r 25 simvol ilÉ™ limitlidir -mustbeconnected = Pocket-É™ saxlamaq üçün internetÉ™ qoÅŸulu olmalısınız. LütfÉ™n internetÉ™ qoÅŸulu olduÄŸunuza É™min olub tÉ™krar yoxlayın. -onlylinkssaved = Ancaq keçidlÉ™r saxlana bilÉ™r -pagenotsaved = SÉ™hifÉ™ saxlanmadı -pageremoved = SÉ™hifÉ™ silindi -pagesaved = Pocket-É™ saxlandı -processingremove = SÉ™hifÉ™ silinir… -processingtags = EtiketlÉ™r É™lavÉ™ edilir… -removepage = SÉ™hifÉ™ni sil -save = Saxla -saving = Saxlanır… -signupemail = E-poçt ilÉ™ qeyd ol -signuptosave = Pocket üçün qeyd ol. Bu pulsuzdur. -suggestedtags = MÉ™slÉ™hÉ™rli etiketlÉ™r -tagline = Firefoxdan mÉ™qalÉ™ vÉ™ videoları Pocket-É™ saxlayın, istÉ™diyiniz vaxt, istÉ™diyiniz yerdÉ™ baxın. -taglinestory_one = Firefoxda hÉ™r hansı bir mÉ™qalÉ™, video vÉ™ ya sÉ™hifÉ™ni saxlamaq üçün Pocket DüymÉ™sinÉ™ kliklÉ™yin. -taglinestory_two = Ä°stÉ™nilÉ™n cihazda, istÉ™nilÉ™n vaxt Pocket-dÉ™ görün. -tagssaved = EtiketlÉ™r É™lavÉ™ edildi -tos = Davam etmÉ™klÉ™, Pocket-in <a href="%1$S" target="_blank">Ä°stifadÉ™ ŞərtlÉ™ri</a> vÉ™ <a href="%2$S" target="_blank">MÉ™xfilik SiyasÉ™ti</a> ilÉ™ razılaÅŸmış olursunuz -tryitnow = Ä°ndi Yoxlayın -signinfirefox = Firefox ilÉ™ daxil ol -signupfirefox = Firefox ilÉ™ qeyd ol -viewlist = Siyahını gör - -# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label): -# "Pocket" is a brand name. -pocket-button.label = Pocket -pocket-button.tooltiptext = Pocket-É™ Saxla -saveToPocketCmd.label = SÉ™hifÉ™ni Pocket-É™ Saxla -saveToPocketCmd.accesskey = k -saveLinkToPocketCmd.label = Keçidi Pocket-É™ Saxla -saveLinkToPocketCmd.accesskey = o -pocketMenuitem.label = Pocket Siyahısını Gör diff --git a/browser/extensions/pocket/locale/bg/pocket.properties b/browser/extensions/pocket/locale/bg/pocket.properties deleted file mode 100644 index ba86dd7f6..000000000 --- a/browser/extensions/pocket/locale/bg/pocket.properties +++ /dev/null @@ -1,43 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -addtags = ДобавÑне на етикети -alreadyhaveacct = Вече Ñте потребител на Pocket? -continueff = Продължаване Ñ Firefox -errorgeneric = Получи Ñе грешка при опит за Ð·Ð°Ð¿Ð¸Ñ Ð² Pocket. -learnmore = Ðаучете повече -loginnow = ВпиÑване -maxtaglength = Етикетите могат да Ñа до 25 знака -mustbeconnected = ТрÑбва да Ñте Ñвързан към Интернет, за да запазвате в Pocket. МолÑ, проверете ÑвързаноÑтта Ñи Ñ Ð˜Ð½Ñ‚ÐµÑ€Ð½ÐµÑ‚ и пробвайте отново. -onlylinkssaved = Могат да бъдат запазвани Ñамо връзки -pagenotsaved = Страницата не е запазена -pageremoved = Страницата е премахната -pagesaved = Запазена в Pocket -processingremove = Премахване на Ñтраница… -processingtags = ДобавÑне на етикети… -removepage = Премахване на Ñтраница -save = Запазване -saving = Запазване… -signupemail = РегиÑтриране Ñ Ð¼ÐµÐ¹Ð» -signuptosave = РегиÑтрирайте Ñе в Pocket. Безплатно е. -suggestedtags = Предложени етикети -tagline = Запазвайте Ñтатии и видеота от Firefox и можете да ги преглеждате в Pocket на вÑÑко уÑтройÑтво по вÑÑко време. -taglinestory_one = Щракнете на бутона на Pocket за запазване на ÑтатиÑ, видео или Ñтраница от Firefox. -taglinestory_two = Преглеждайте в Pocket на вÑÑко уÑтройÑтво и по вÑÑко време. -tagssaved = Етикетите Ñа добавени -tos = Продължавайки, вие Ñе ÑъглаÑÑвате Ñ <a href="%1$S" target="_blank">УÑловиÑта за ползване</a> и <a href="%2$S" target="_blank">Политиката за поверителноÑÑ‚</a> на Pocket -tryitnow = Опитайте Ñега -signinfirefox = ВпиÑване Ñ Firefox -signupfirefox = РегиÑтриране Ñ Firefox -viewlist = Преглед на ÑпиÑъка - -# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label): -# "Pocket" is a brand name. -pocket-button.label = Pocket -pocket-button.tooltiptext = Запазване в Pocket -saveToPocketCmd.label = Запазване на Ñтраницата в Pocket -saveToPocketCmd.accesskey = Ñ -saveLinkToPocketCmd.label = Запазване на връзката в Pocket -saveLinkToPocketCmd.accesskey = в -pocketMenuitem.label = Преглед ÑпиÑъка на Pocket diff --git a/browser/extensions/pocket/locale/bn-BD/pocket.properties b/browser/extensions/pocket/locale/bn-BD/pocket.properties deleted file mode 100644 index 7a43edad1..000000000 --- a/browser/extensions/pocket/locale/bn-BD/pocket.properties +++ /dev/null @@ -1,43 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -addtags = টà§à¦¯à¦¾à¦— যোগ করà§à¦¨ -alreadyhaveacct = আপনি Pocket বà§à¦¯à¦¬à¦¹à¦¾à¦° করছেন? -continueff = Firefox বà§à¦¯à¦¬à¦¹à¦¾à¦° চালিয়ে যান -errorgeneric = Pocket ঠসংরকà§à¦·à¦£ করতে তà§à¦°à§à¦Ÿà¦¿ ঘটেছে। -learnmore = আরও জানà§à¦¨ -loginnow = লগ ইন -maxtaglength = টà§à¦¯à¦¾à¦— ২৫ অকà§à¦·à¦°à§‡à¦° মধà§à¦¯à§‡ সীমাবদà§à¦§ -mustbeconnected = Pocket ঠকোন কিছৠসংরকà§à¦·à¦£ করে রাখতে চাইলে, ইনà§à¦Ÿà¦¾à¦°à¦¨à§‡à¦Ÿà§‡ সংযà§à¦•à§à¦¤ থাকতে হবে। ইনà§à¦Ÿà¦¾à¦°à¦¨à§‡à¦Ÿ সংযোগ পরীকà§à¦·à¦¾ করà§à¦¨ à¦à¦¬à¦‚ আবার চেষà§à¦Ÿà¦¾ করà§à¦¨à¥¤ -onlylinkssaved = শà§à¦§à§ লিঙà§à¦• সংরকà§à¦·à¦£ করা যাবে -pagenotsaved = পাতা সংরকà§à¦·à¦£ করা হয়নি -pageremoved = পাতা অপসারণ করা হয়েছে -pagesaved = Pocket ঠসংরকà§à¦·à¦¿à¦¤ হয়েছে -processingremove = পাতা অপসারিত হচà§à¦›à§‡â€¦ -processingtags = টà§à¦¯à¦¾à¦— যà§à¦•à§à¦¤ করা হচà§à¦›à§‡â€¦ -removepage = পেজ মà§à¦›à§‡ ফেলà§à¦¨ -save = সংরকà§à¦·à¦£ -saving = সংরকà§à¦·à¦£ করা হচà§à¦›à§‡... -signupemail = ইমেইল দিয়ে সাইন আপ করà§à¦¨ -signuptosave = Pocket সাইন আপ করà§à¦¨à¥¤ à¦à¦Ÿà¦¿ মà§à¦«à¦¤à¥¤ -suggestedtags = পà§à¦°à¦¸à§à¦¤à¦¾à¦¬à¦¿à¦¤ টà§à¦¯à¦¾à¦— -tagline = Pocket à¦à¦° মাধà§à¦¯à¦®à§‡ যেকোন সময়, যেকোন ডিà¦à¦¾à¦‡à¦¸à§‡ নিবনà§à¦§ à¦à¦¬à¦‚ à¦à¦¿à¦¡à¦¿à¦“ দেখতে Firefox থেকে সেগà§à¦²à§‹ সংরকà§à¦·à¦£ করà§à¦¨à¥¤ -taglinestory_one = Firefox থেকে আরà§à¦Ÿà¦¿à¦•à§‡à¦², à¦à¦¿à¦¡à¦¿à¦“ বা পৃষà§à¦ া সংরকà§à¦·à¦£ করার জনà§à¦¯ Pocket বাটন কà§à¦²à¦¿à¦• করà§à¦¨à¥¤ -taglinestory_two = যেকোন সময়ে, যেকোন সà§à¦¥à¦¾à¦¨à§‡ Pocket ঠদেখà§à¦¨à¥¤ -tagssaved = টà§à¦¯à¦¾à¦— যোগ করা হয়েছে -tos = à¦à¦Ÿà¦¿ অবà§à¦¯à¦¹à¦¤ রেখে, আপনি Pocket à¦à¦° <a href="%1$S" target="_blank">সেবার শরà§à¦¤à¦¾à¦¬à¦²à§€</a> à¦à¦¬à¦‚ <a href="%2$S" target="_blank">গোপনীয়তা নীতিমালায়</a> সমà§à¦®à¦¤ হবেন। -tryitnow = à¦à¦–নই বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨ -signinfirefox = ফায়ারফকà§à¦¸ দিয়ে সাইন ইন করà§à¦¨ -signupfirefox = ফায়ারফকà§à¦¸ দিয়ে সাইন আপ করà§à¦¨ -viewlist = তালিকা দেখà§à¦¨ - -# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label): -# "Pocket" is a brand name. -pocket-button.label = Pocket -pocket-button.tooltiptext = Pocket ঠসংরকà§à¦·à¦£ করà§à¦¨ -saveToPocketCmd.label = Pocket ঠপাতাটি সংরকà§à¦·à¦£ করà§à¦¨ k -saveToPocketCmd.accesskey = k -saveLinkToPocketCmd.label = Pocket ঠলিঙà§à¦•à¦Ÿà¦¿ সংরকà§à¦·à¦£ করà§à¦¨ o -saveLinkToPocketCmd.accesskey = o -pocketMenuitem.label = Pocket তালিকা দেখà§à¦¨ diff --git a/browser/extensions/pocket/locale/cs/pocket.properties b/browser/extensions/pocket/locale/cs/pocket.properties deleted file mode 100644 index 619b0a01a..000000000 --- a/browser/extensions/pocket/locale/cs/pocket.properties +++ /dev/null @@ -1,43 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -addtags = PÅ™idat Å¡tÃtky -alreadyhaveacct = Jste již uživatel služby Pocket? -continueff = PokraÄovat pomocà Firefoxu -errorgeneric = PÅ™i pokusu o uloženà do služby Pocket doÅ¡lo k chybÄ›. -learnmore = Zjistit vÃce -loginnow = PÅ™ihlásit se -maxtaglength = Å tÃtky jsou omezeny na 25 znaků -mustbeconnected = Abyste mohli ukládat do služby Pocket, musÃte být pÅ™ipojeni k internetu. Zkontrolujte prosÃm své pÅ™ipojenà a zkuste to znovu. -onlylinkssaved = Pouze odkazy mohou být uloženy -pagenotsaved = Stránka nebyla uložena -pageremoved = Stránka byla odstranÄ›na -pagesaved = Uloženo do služby Pocket -processingremove = Odstraňovánà stránky… -processingtags = PÅ™idávánà štÃtků… -removepage = Odstranit stránku -save = Uložit -saving = UkládánÃ… -signupemail = Registrace e-mailem -signuptosave = Registrujte se do služby Pocket. Je to zdarma. -suggestedtags = DoporuÄené Å¡tÃtky -tagline = Ukládejte si Älánky a videa z Firefoxu pro zobrazenà ve službÄ› Pocket kdykoliv a na jakémkoli zaÅ™ÃzenÃ. -taglinestory_one = KlepnÄ›te na tlaÄÃtko služby Pocket pro uloženà jakéhokoliv Älánku, videa nebo stránky pÅ™Ãmo z Firefoxu. -taglinestory_two = Zobrazenà ve službÄ› Pocket kdykoliv a na jakémkoliv zaÅ™ÃzenÃ. -tagssaved = Å tÃtky pÅ™idány -tos = PokraÄovánà souhlasÃte s <a href="%1$S" target="_blank">PodmÃnkami služby</a> Pocket a <a href="%2$S" target="_blank">Zásadami ochrany osobnÃch údajů</a> -tryitnow = VyzkouÅ¡ejte nynà -signinfirefox = PÅ™ihlášenà ve Firefoxu -signupfirefox = Registrace ve Firefoxu -viewlist = Zobrazit seznam - -# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label): -# "Pocket" is a brand name. -pocket-button.label = Pocket -pocket-button.tooltiptext = Uložà do služby Pocket -saveToPocketCmd.label = Uložit stránku do služby Pocket -saveToPocketCmd.accesskey = k -saveLinkToPocketCmd.label = Uložit odkaz do služby Pocket -saveLinkToPocketCmd.accesskey = o -pocketMenuitem.label = Zobrazit seznam služby Pocket diff --git a/browser/extensions/pocket/locale/da/pocket.properties b/browser/extensions/pocket/locale/da/pocket.properties deleted file mode 100644 index 5e5438359..000000000 --- a/browser/extensions/pocket/locale/da/pocket.properties +++ /dev/null @@ -1,43 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -addtags = Tilføj tags -alreadyhaveacct = Er du allerede Pocket-bruger? -continueff = Fortsæt med Firefox -errorgeneric = Der opstod en fejl ved forsøg pÃ¥ at gemme til Pocket. -learnmore = Læs mere -loginnow = Log ind -maxtaglength = Tags er begrænset til 25 tegn -mustbeconnected = Du skal have forbindelse til internettet for at kunne gemme til Pocket. Kontroller din internetforbindelse og prøv igen. -onlylinkssaved = Kun links kan gemmes -pagenotsaved = Siden blev ikke gemt -pageremoved = Siden er fjernet -pagesaved = Gemt til Pocket -processingremove = Fjerner side… -processingtags = Tilføjer tags… -removepage = Fjern side -save = Gem -saving = Gemmer… -signupemail = Log ind med mailadresse -signuptosave = Meld dig til Pocket. Det er gratis. -suggestedtags = ForeslÃ¥ede tags -tagline = Gemmer artikler og videoer fra Firefox i Pocket, sÃ¥ du senere kan se dem hvor og hvornÃ¥r, du har lyst. -taglinestory_one = Klik pÃ¥ knappen Pocket for at gemme en artikel, video eller webside fra Firefox. -taglinestory_two = Se i Pocket hvor og hvornÃ¥r, du har lyst. -tagssaved = Tags tilføjet -tos = Fortsætter du, accepterer du Pockets <a href="%1$S" target="_blank">tjenestevilkÃ¥r</a> og <a href="%2$S" target="_blank">privatlivspolitik</a> -tryitnow = Prøv det nu -signinfirefox = Log ind med Firefox -signupfirefox = Meld dig til med Firefox -viewlist = Vis liste - -# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label): -# "Pocket" is a brand name. -pocket-button.label = Pocket -pocket-button.tooltiptext = Gem til Pocket -saveToPocketCmd.label = Gem siden til Pocket -saveToPocketCmd.accesskey = k -saveLinkToPocketCmd.label = Gem link til Pocket -saveLinkToPocketCmd.accesskey = o -pocketMenuitem.label = Vis Pocket-liste diff --git a/browser/extensions/pocket/locale/de/pocket.properties b/browser/extensions/pocket/locale/de/pocket.properties deleted file mode 100644 index f02f5da05..000000000 --- a/browser/extensions/pocket/locale/de/pocket.properties +++ /dev/null @@ -1,43 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -addtags = Tags hinzufügen -alreadyhaveacct = Sind Sie bereits Pocket-Nutzer? -continueff = Mit Firefox fortfahren -errorgeneric = Beim Speichern des Links bei Pocket ist ein Fehler aufgetreten. -learnmore = Mehr erfahren -loginnow = Anmelden -maxtaglength = Tags dürfen höchsten 25 Zeichen lang sein. -mustbeconnected = Bitte überprüfen Sie, ob Sie mit dem Internet verbunden sind. -onlylinkssaved = Es können nur Links gespeichert werden -pagenotsaved = Seite nicht gespeichert -pageremoved = Seite entfernt -pagesaved = Bei Pocket gespeichert -processingremove = Seite wird entfernt… -processingtags = Tags werden hinzugefügt… -removepage = Seite entfernen -save = Speichern -saving = Speichern… -signupemail = Mit E-Mail registrieren -signuptosave = Registrieren Sie sich bei Pocket. Das ist kostenlos. -suggestedtags = Vorgeschlagene Tags -tagline = Speichern Sie Artikel und Videos aus Firefox bei Pocket, um sie jederzeit und auf jedem Gerät ansehen zu können. -taglinestory_one = Klicken Sie auf die Pocket-Schaltfläche, um beliebige Artikel, Videos und Seiten aus Firefox zu speichern. -taglinestory_two = Lesen Sie diese mit Pocket, jederzeit und auf jedem Gerät. -tagssaved = Tags hinzugefügt -tos = Indem Sie fortfahren, akzeptieren Sie die <a href="%1$S" target="_blank">Nutzungsbedingungen</a> und die <a href="%2$S" target="_blank">Datenschutzerklärung</a> von Pocket. -tryitnow = Jetzt ausprobieren -signinfirefox = Mit Firefox anmelden -signupfirefox = Mit Firefox registrieren -viewlist = Liste anzeigen - -# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label): -# "Pocket" is a brand name. -pocket-button.label = Pocket -pocket-button.tooltiptext = Bei Pocket speichern -saveToPocketCmd.label = Seite bei Pocket speichern -saveToPocketCmd.accesskey = b -saveLinkToPocketCmd.label = Link bei Pocket speichern -saveLinkToPocketCmd.accesskey = c -pocketMenuitem.label = Pocket-Liste anzeigen diff --git a/browser/extensions/pocket/locale/dsb/pocket.properties b/browser/extensions/pocket/locale/dsb/pocket.properties deleted file mode 100644 index a878de329..000000000 --- a/browser/extensions/pocket/locale/dsb/pocket.properties +++ /dev/null @@ -1,43 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -addtags = Wobznamjenja pÅ›idaÅ› -alreadyhaveacct = Sćo južo wužywaÅ• Pocket? -continueff = Z Firefox pókÅ¡acowaÅ› -errorgeneric = PÅ›i skÅ‚adowanju do Pocket jo zmólka nastaÅ‚a. -learnmore = DalÅ¡ne informacije -loginnow = PÅ›izjawiÅ› -maxtaglength = Wobznamjenja su na 25 znamuÅ¡kow wobgranicowane -mustbeconnected = MusyÅ›o z internetom zwÄ›zany byÅ›, aby do Pocket skÅ‚adowaÅ‚. PÅ¡osym pÅ›eglÄ›dajÅ›o swój zwisk a wopytajÅ›o hyšći raz. -onlylinkssaved = Jano wótkaze daju se skÅ‚adowaÅ› -pagenotsaved = Bok njejo se skÅ‚adÅ‚ -pageremoved = Bok jo se wótwónoźeÅ‚ -pagesaved = Do Pocket skÅ‚aźony -processingremove = Bok se wótwónoźujo… -processingtags = Wobznamjenja se pÅ›idawaju… -removepage = Bok wótwónoźeÅ› -save = SkÅ‚adowaÅ› -saving = SkÅ‚adujo se… -signupemail = RegistrÄ›rujÅ›o se z mejlku -signuptosave = RegistrÄ›rujÅ›o se za Pocket. Jo dermo. -suggestedtags = Naraźone wobznamjenja -tagline = SkÅ‚adujÅ›o nastawki a wideo z Firefox, aby se je kuždy cas w Pocket na kuždem rěźe woglÄ›daÅ‚. -taglinestory_one = KlikniÅ›o na tÅ‚ocaÅ¡k Pocket, aby nastawk, wideo abo bok z Firefox skÅ‚adowaÅ‚. -taglinestory_two = Se w Pocket na kuždem rěźee kuždy cas woglÄ›daÅ›. -tagssaved = Wobznamjenja su se pÅ›idali -tos = Gaž pókÅ¡acujoÅ›o, zwólijoÅ›o do <a href="%1$S" target="_blank">wužywarskich wumÄ›njenjow</a> a <a href="%2$S" target="_blank">pÅ¡awidÅ‚ow priwatnosći</a> Pocket -tryitnow = WopytajÅ›o to nÄ›nto -signinfirefox = Z Firefox pÅ›izjawiÅ› -signupfirefox = Z Firefox registrÄ›rowaÅ› -viewlist = Lisćinu pokazaÅ› - -# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label): -# "Pocket" is a brand name. -pocket-button.label = Pocket -pocket-button.tooltiptext = Do Pocket skÅ‚adowaÅ› -saveToPocketCmd.label = Bok do Pocket skÅ‚adowaÅ› -saveToPocketCmd.accesskey = b -saveLinkToPocketCmd.label = Wótkaz do Pocket skÅ‚adowaÅ› -saveLinkToPocketCmd.accesskey = w -pocketMenuitem.label = Lisćinu Pocket pokazaÅ› diff --git a/browser/extensions/pocket/locale/en-GB/pocket.properties b/browser/extensions/pocket/locale/en-GB/pocket.properties deleted file mode 100644 index bddd825c5..000000000 --- a/browser/extensions/pocket/locale/en-GB/pocket.properties +++ /dev/null @@ -1,43 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -addtags = Add Tags -alreadyhaveacct = Already a Pocket user? -continueff = Continue with Firefox -errorgeneric = There was an error when trying to save to Pocket. -learnmore = Learn More -loginnow = Log in -maxtaglength = Tags are limited to 25 characters -mustbeconnected = You must be connected to the Internet in order to save to Pocket. Please check your connection and try again. -onlylinkssaved = Only links can be saved -pagenotsaved = Page Not Saved -pageremoved = Page Removed -pagesaved = Saved to Pocket -processingremove = Removing Page… -processingtags = Adding tags… -removepage = Remove Page -save = Save -saving = Saving… -signupemail = Sign up with email -signuptosave = Sign up for Pocket. It’s free. -suggestedtags = Suggested Tags -tagline = Save articles and videos from Firefox to view in Pocket on any device, any time. -taglinestory_one = Click the Pocket Button to save any article, video or page from Firefox. -taglinestory_two = View in Pocket on any device, any time. -tagssaved = Tags Added -tos = By continuing, you agree to Pocket’s <a href="%1$S" target="_blank">Terms of Service</a> and <a href="%2$S" target="_blank">Privacy Policy</a> -tryitnow = Try It Now -signinfirefox = Sign in with Firefox -signupfirefox = Sign up with Firefox -viewlist = View List - -# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label): -# "Pocket" is a brand name. -pocket-button.label = Pocket -pocket-button.tooltiptext = Save to Pocket -saveToPocketCmd.label = Save Page to Pocket -saveToPocketCmd.accesskey = k -saveLinkToPocketCmd.label = Save Link to Pocket -saveLinkToPocketCmd.accesskey = o -pocketMenuitem.label = View Pocket List diff --git a/browser/extensions/pocket/locale/en-US/pocket.properties b/browser/extensions/pocket/locale/en-US/pocket.properties deleted file mode 100644 index dee2681dc..000000000 --- a/browser/extensions/pocket/locale/en-US/pocket.properties +++ /dev/null @@ -1,43 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -addtags = Add Tags -alreadyhaveacct = Already a Pocket user? -continueff = Continue with Firefox -errorgeneric = There was an error when trying to save to Pocket. -learnmore = Learn More -loginnow = Log in -maxtaglength = Tags are limited to 25 characters -mustbeconnected = You must be connected to the Internet in order to save to Pocket. Please check your connection and try again. -onlylinkssaved = Only links can be saved -pagenotsaved = Page Not Saved -pageremoved = Page Removed -pagesaved = Saved to Pocket -processingremove = Removing Page… -processingtags = Adding tags… -removepage = Remove Page -save = Save -saving = Saving… -signupemail = Sign up with email -signuptosave = Sign up for Pocket. It’s free. -suggestedtags = Suggested Tags -tagline = Save articles and videos from Firefox to view in Pocket on any device, any time. -taglinestory_one = Click the Pocket Button to save any article, video or page from Firefox. -taglinestory_two = View in Pocket on any device, any time. -tagssaved = Tags Added -tos = By continuing, you agree to Pocket's <a href="%1$S" target="_blank">Terms of Service</a> and <a href="%2$S" target="_blank">Privacy Policy</a> -tryitnow = Try It Now -signinfirefox = Sign in with Firefox -signupfirefox = Sign up with Firefox -viewlist = View List - -# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label): -# "Pocket" is a brand name. -pocket-button.label = Pocket -pocket-button.tooltiptext = Save to Pocket -saveToPocketCmd.label = Save Page to Pocket -saveToPocketCmd.accesskey = k -saveLinkToPocketCmd.label = Save Link to Pocket -saveLinkToPocketCmd.accesskey = o -pocketMenuitem.label = View Pocket List diff --git a/browser/extensions/pocket/locale/es-AR/pocket.properties b/browser/extensions/pocket/locale/es-AR/pocket.properties deleted file mode 100644 index 2782d3ccf..000000000 --- a/browser/extensions/pocket/locale/es-AR/pocket.properties +++ /dev/null @@ -1,43 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -addtags = Agregar etiquetas -alreadyhaveacct = ¿Ya es un usuario de Pocket? -continueff = Continuar con Firefox -errorgeneric = Hubo un error al tratar de guardar en Pocket. -learnmore = Conocer más -loginnow = Ingresar -maxtaglength = Las etiquetas están limitadas a 25 caracteres -mustbeconnected = Debe estar conectado a Internet para poder guardar en Pocket. Verifique la conexión e intente nuevamente. -onlylinkssaved = Solamente pueden guardarle enlaces -pagenotsaved = Página no guardada -pageremoved = Página eliminada -pagesaved = Guardado en Pocket -processingremove = Eliminando página… -processingtags = Agregando etiquetas… -removepage = Eliminar página -save = Guardar -saving = Guardando… -signupemail = Ingresar con correo electrónico -signuptosave = Registrarse en Pocket. En grátis. -suggestedtags = Etiquetas sugeridas -tagline = Guardar artÃculos y videos desde Firefox para ver en Pocket en cualquier dispositivo en cualquier momento. -taglinestory_one = Clic en el botón Pocket para guardar cualquier artÃculo, video o página desde Firefox. -taglinestory_two = Ver en Pocket en cualquier dispositivo en cualquier momento. -tagssaved = Etiquetas agregadas -tos = Al continuar acepta los <a href="%1$S" target="_blank">términos de servicio</a> y la <a href="%2$S" target="_blank">polÃtica de privacidad</a> de Pocket -tryitnow = Probalo ahora -signinfirefox = Ingresar con Firefox -signupfirefox = Registrarse con Firefox -viewlist = Ver lista - -# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label): -# "Pocket" is a brand name. -pocket-button.label = Pocket -pocket-button.tooltiptext = Guardar en Pocket -saveToPocketCmd.label = Guardar página en Pocket -saveToPocketCmd.accesskey = G -saveLinkToPocketCmd.label = Guardar enlace en Pocket -saveLinkToPocketCmd.accesskey = o -pocketMenuitem.label = Ver lista de Pocket diff --git a/browser/extensions/pocket/locale/es-CL/pocket.properties b/browser/extensions/pocket/locale/es-CL/pocket.properties deleted file mode 100644 index 7a4e6872b..000000000 --- a/browser/extensions/pocket/locale/es-CL/pocket.properties +++ /dev/null @@ -1,43 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -addtags = Añadir etiquetas -alreadyhaveacct = ¿Ya eres usuario de Pocket? -continueff = Continuar con Firefox -errorgeneric = Hubo un error al intentar guardarla en Pocket. -learnmore = Aprender más -loginnow = Conectarse -maxtaglength = Las etiquetas están limitadas a 25 caracteres -mustbeconnected = Debes estar conectado a Internet para guardar en Pocket. Por favor, revisa tu conexión y vuelve a intentarlo. -onlylinkssaved = Solo se pueden guardar enlaces -pagenotsaved = Página no guardada -pageremoved = Página eliminada -pagesaved = Guardada en Pocket -processingremove = Eliminando página… -processingtags = Añadiendo etiquetas… -removepage = Eliminar página -save = Guardar -saving = Guardando… -signupemail = Registrarse usando un email -signuptosave = Registrarse en Pocket. Es gratis. -suggestedtags = Etiquetas sugeridas -tagline = Guarda artÃculos y videos desde Firefox para verlos en Pocket en cualquier dispositivo y momento. -taglinestory_one = Aprieta el botón Pocket para guardar cualquier artÃculo, video o página de Firefox. -taglinestory_two = MÃrala en Pocket en cualquier dispositivo y momento -tagssaved = Etiquetas añadidas -tos = Al continuar, aceptas los <a href="%1$S" target="_blank">Términos del servicio</a> y la <a href="%2$S" target="_blank">PolÃtica de privacidad</a> de Pocket. -tryitnow = Probarlo ahora -signinfirefox = Conectarse con Firefox -signupfirefox = Registrarse con Firefox -viewlist = Ver lista - -# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label): -# "Pocket" is a brand name. -pocket-button.label = Pocket -pocket-button.tooltiptext = Guardar en Pocket -saveToPocketCmd.label = Guardar página en Pocket -saveToPocketCmd.accesskey = k -saveLinkToPocketCmd.label = Guardar enlace en Pocket -saveLinkToPocketCmd.accesskey = o -pocketMenuitem.label = Ver lista de Pocket diff --git a/browser/extensions/pocket/locale/es-ES/pocket.properties b/browser/extensions/pocket/locale/es-ES/pocket.properties deleted file mode 100644 index f10a20525..000000000 --- a/browser/extensions/pocket/locale/es-ES/pocket.properties +++ /dev/null @@ -1,43 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -addtags = Añadir etiquetas -alreadyhaveacct = ¿Ya es usuario de Pocket? -continueff = Continuar con Firefox -errorgeneric = Ha sucedido un error al intentar guardar en Pocket. -learnmore = Más información -loginnow = Iniciar sesión -maxtaglength = Las etiquetas están limitadas a 25 caracteres -mustbeconnected = Debe estar conectado a Internet para poder guardar en Pocket. Compruebe su conexión y vuelva a intentarlo. -onlylinkssaved = Solo se pueden guardar enlaces -pagenotsaved = Página no guardada -pageremoved = Página eliminada -pagesaved = Guardado en Pocket -processingremove = Eliminando página… -processingtags = Añadiendo etiquetas… -removepage = Eliminar página -save = Guardar -saving = Guardando… -signupemail = RegÃstrese con su dirección de correo -signuptosave = RegÃstrese en Pocket. Es gratis. -suggestedtags = Etiquetas sugeridas -tagline = Guarde artÃculos y vÃdeos desde Firefox para verlos en Pocket en cualquier dispositivo, en cualquier momento. -taglinestory_one = Pulse el botón Pocket para guardar cualquier artÃculo, vÃdeo o página desde Firefox. -taglinestory_two = Véalo en Pocket en cualquier dispositivo, en cualquier momento. -tagssaved = Etiquetas añadidas -tos = Al continuar, aceptas los <a href="%1$S" target="_blank">Términos del servicio</a> y la <a href="%2$S" target="_blank">PolÃtica de privacidad</a> de Pocket -tryitnow = Pruébalo ahora -signinfirefox = Iniciar sesión con Firefox -signupfirefox = Registrarse con Firefox -viewlist = Ver lista - -# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label): -# "Pocket" is a brand name. -pocket-button.label = Pocket -pocket-button.tooltiptext = Guardar en Pocket -saveToPocketCmd.label = Guardar página en Pocket -saveToPocketCmd.accesskey = G -saveLinkToPocketCmd.label = Guardar enlace en Pocket -saveLinkToPocketCmd.accesskey = P -pocketMenuitem.label = Ver la lista de Pocket diff --git a/browser/extensions/pocket/locale/es-MX/pocket.properties b/browser/extensions/pocket/locale/es-MX/pocket.properties deleted file mode 100644 index 4d2bb9c4f..000000000 --- a/browser/extensions/pocket/locale/es-MX/pocket.properties +++ /dev/null @@ -1,43 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -addtags = Agregar Etiquetas -alreadyhaveacct = ¿Ya eres usuario de Pocket? -continueff = Continúa con Firefox -errorgeneric = Hubo un error cuando se intentaba guardar en Pocket. -learnmore = Aprende más -loginnow = Ingresar -maxtaglength = Las etiquetas están limitadas a 25 caracteres -mustbeconnected = Debes estar conectado a Internet para guardar en Pocket. Por favor, revisa tu conexión e intenta de nuevo. -onlylinkssaved = Sólo los enlaces pueden guardarse -pagenotsaved = Página no guardada -pageremoved = Página eliminada -pagesaved = Guardado en Pocket -processingremove = Eliminando página… -processingtags = Agregando etiquetas… -removepage = Eliminar página -save = Guardar -saving = Guardando… -signupemail = RegÃstrate con un correo electrónico -signuptosave = RegÃstrate en Pocket. Es gratis. -suggestedtags = Etiquetas sugeridas -tagline = Guardar artÃculos y videos desde Firefox para ver en Pocket o en cualquier dispositivo, en cualquier momento. -taglinestory_one = Haz clic en el botón de Pocket para guardar cualquier artÃculo, video o página desde Firefox. -taglinestory_two = Ver en Pocker o en cualquier dispositivo, en cualquier momento. -tagssaved = Etiquetas agregadas -tos = Al continuar, aceptas los <a href="%1$S" target="_blank">Términos del servicio</a> y la <a href="%2$S" target="_blank">PolÃtica de privacidad</a> de Pocket -tryitnow = Pruébalo ahora -signinfirefox = Ingresa con Firefox -signupfirefox = RegÃstrate con Firefox -viewlist = Ver lista - -# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label): -# "Pocket" is a brand name. -pocket-button.label = Pocket -pocket-button.tooltiptext = Guardar en Pocket -saveToPocketCmd.label = Guardar página en Pocket -saveToPocketCmd.accesskey = k -saveLinkToPocketCmd.label = Guardar enlace en Pocket -saveLinkToPocketCmd.accesskey = n -pocketMenuitem.label = Ver la lista de Pocket diff --git a/browser/extensions/pocket/locale/et/pocket.properties b/browser/extensions/pocket/locale/et/pocket.properties deleted file mode 100644 index 5f2d68f9c..000000000 --- a/browser/extensions/pocket/locale/et/pocket.properties +++ /dev/null @@ -1,43 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -addtags = Lisa silte -alreadyhaveacct = Kas oled juba Pocketi kasutaja? -continueff = Jätka Firefoxiga -errorgeneric = Pocketisse salvestamisel esines viga. -learnmore = Rohkem teavet -loginnow = Logi sisse -maxtaglength = Siltide pikkus võib olla kuni 25 tähemärki -mustbeconnected = Pocketisse salvestamiseks on vajalik töötav internetiühendus. Palun kontrolli oma ühendust ja proovi uuesti. -onlylinkssaved = Salvestada saab ainult linke -pagenotsaved = Lehte ei salvestatud -pageremoved = Leht eemaldati -pagesaved = Pocketisse salvestatud -processingremove = Lehe eemaldamine… -processingtags = Siltide lisamine… -removepage = Eemalda leht -save = Salvesta -saving = Salvestamine… -signupemail = Registreeru e-posti teel -signuptosave = Liitu Pocketiga. See on tasuta. -suggestedtags = Soovitatud sildid -tagline = Salvesta Firefoxist artikleid ja videoid, et vaadata neid Pocketist kõigil seadmeil just siis, kui ise soovid. -taglinestory_one = Artikli, video või lehe salvestamiseks klõpsa Pocketi nupul. -taglinestory_two = Vaata Pocketist kõigil seadmeil just siis, kui ise soovid. -tagssaved = Sildid on lisatud -tos = Jätkates nõustud Pocket'i <a href="%1$S" target="_blank">kasutustingimuste</a> ja <a href="%2$S" target="_blank">privaatsuspoliitikaga</a>. -tryitnow = Proovi kohe -signinfirefox = Logi sisse Firefoxiga -signupfirefox = Registreeru Firefoxiga -viewlist = Vaata nimekirja - -# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label): -# "Pocket" is a brand name. -pocket-button.label = Pocket -pocket-button.tooltiptext = Salvesta Pocketisse -saveToPocketCmd.label = Salvesta leht Pocketisse -saveToPocketCmd.accesskey = l -saveLinkToPocketCmd.label = Salvesta link Pocketisse -saveLinkToPocketCmd.accesskey = i -pocketMenuitem.label = Vaata Pocketi nimekirja diff --git a/browser/extensions/pocket/locale/fi/pocket.properties b/browser/extensions/pocket/locale/fi/pocket.properties deleted file mode 100644 index 3cd47e891..000000000 --- a/browser/extensions/pocket/locale/fi/pocket.properties +++ /dev/null @@ -1,43 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -addtags = Lisää tunnisteita -alreadyhaveacct = Oletko jo Pocket-palvelun käyttäjä? -continueff = Jatka Firefoxin parissa -errorgeneric = Tapahtui virhe tallennettaessa Pocket-palveluun. -learnmore = Lue lisää -loginnow = Kirjaudu sisään -maxtaglength = Tunnisteet voivat olla enintään 25 merkkiä pitkiä -mustbeconnected = Tarvitset aktiivisen Internet-yhteyden talllentaaksesi sivuja Pocket-palveluun. Tarkista Internet-yhteytesi ja yritä uudestaan. -onlylinkssaved = Vain linkkejä voidaan tallentaa -pagenotsaved = Sivua ei ole tallennettu -pageremoved = Sivu poistettiin -pagesaved = Tallennettiin Pocket-palveluun -processingremove = Poistetaan sivu… -processingtags = Lisätään tunnisteet… -removepage = Poista sivu -save = Tallenna -saving = Tallennetaan… -signupemail = Rekisteröidy sähköpostiosoitteella -signuptosave = Rekisteröidy Pocket-palveluun. Se on ilmaista. -suggestedtags = Ehdotetut tunnisteet -tagline = Tallenna artikkelit ja videot Firefoxista Pocket-palveluun katseltaviksi millä tahansa laitteella, koska tahansa. -taglinestory_one = Napsauta Pocket-painiketta tallentaaksesi artikkelin, videon tai sivun Firefoxissa. -taglinestory_two = Katsele Pocket-palvelussa millä tahansa laitteella, koska tahansa. -tagssaved = Tunnisteet lisättiin -tos = Jatkamalla hyväksyt Pocketin <a href="%1$S" target="_blank">käyttöehdot</a> ja <a href="%2$S" target="_blank">tietosuojakäytännön</a> -tryitnow = Kokeile nyt -signinfirefox = Kirjaudu sisään Firefox-tilillä -signupfirefox = Rekisteröidy Firefox-tilillä -viewlist = Näytä lista - -# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label): -# "Pocket" is a brand name. -pocket-button.label = Pocket -pocket-button.tooltiptext = Tallenna Pocket-palveluun -saveToPocketCmd.label = Tallenna sivu Pocket-palveluun -saveToPocketCmd.accesskey = c -saveLinkToPocketCmd.label = Tallenna linkki Pocket-palveluun -saveLinkToPocketCmd.accesskey = k -pocketMenuitem.label = Näytä Pocket-palvelun lista diff --git a/browser/extensions/pocket/locale/fr/pocket.properties b/browser/extensions/pocket/locale/fr/pocket.properties deleted file mode 100644 index cb9b0ca8f..000000000 --- a/browser/extensions/pocket/locale/fr/pocket.properties +++ /dev/null @@ -1,43 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -addtags = Ajouter des étiquettes -alreadyhaveacct = Vous utilisez déjà Pocket ? -continueff = Continuer avec Firefox -errorgeneric = Une erreur s’est produite lors de l’enregistrement dans Pocket. -learnmore = En savoir plus -loginnow = Connectez-vous -maxtaglength = Les étiquettes sont limitées à 25 caractères -mustbeconnected = Vous devez être connecté à Internet pour enregistrer des liens dans Pocket. Veuillez vérifier votre connexion puis réessayer. -onlylinkssaved = Seuls les liens peuvent être enregistrés -pagenotsaved = Page non enregistrée -pageremoved = Page supprimée -pagesaved = Page enregistrée dans Pocket -processingremove = Suppression de la page… -processingtags = Ajout des étiquettes… -removepage = Supprimer la page -save = Enregistrer -saving = Enregistrement… -signupemail = S’inscrire avec une adresse électronique -signuptosave = Inscrivez-vous à Pocket, c’est gratuit. -suggestedtags = Étiquettes suggérées -tagline = Enregistrez des articles et des vidéos depuis Firefox pour les visualiser dans Pocket sur n’importe quel appareil, à tout moment. -taglinestory_one = Cliquez sur le bouton Pocket pour enregistrer depuis Firefox n’importe quel article, vidéo ou page. -taglinestory_two = Affichez vos pages dans Pocket sur n’importe quel appareil, à tout moment. -tagssaved = Étiquettes ajoutées -tos = En continuant, vous acceptez les <a href="%1$S" target="_blank">conditions d’utilisation</a> et la <a href="%2$S" target="_blank">politique de confidentialité</a> de Pocket -tryitnow = Essayer -signinfirefox = Connexion via Firefox -signupfirefox = S’inscrire avec Firefox -viewlist = Afficher la liste - -# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label): -# "Pocket" is a brand name. -pocket-button.label = Pocket -pocket-button.tooltiptext = Enregistrer dans Pocket -saveToPocketCmd.label = Enregistrer la page dans Pocket -saveToPocketCmd.accesskey = k -saveLinkToPocketCmd.label = Enregistrer le lien dans Pocket -saveLinkToPocketCmd.accesskey = k -pocketMenuitem.label = Afficher la liste Pocket diff --git a/browser/extensions/pocket/locale/fy-NL/pocket.properties b/browser/extensions/pocket/locale/fy-NL/pocket.properties deleted file mode 100644 index 5b41c652f..000000000 --- a/browser/extensions/pocket/locale/fy-NL/pocket.properties +++ /dev/null @@ -1,43 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -addtags = Labels tafoegje -alreadyhaveacct = Al in Pocket-brûker? -continueff = Trochgean mei Firefox -errorgeneric = Der is in flater bard by it bewarjen nei Pocket. -learnmore = Mear ynfo -loginnow = Meld jo oan -maxtaglength = Labels binne beheint ta 25 tekens -mustbeconnected = Jo moatte mei it ynternet ferbûn wêze om nei Pocket bewarje te kinnen. Kontrolearje jo ferbining en probearje it opnij. -onlylinkssaved = Allinnich keppelingen kinne bewarre wurde -pagenotsaved = Side net bewarre -pageremoved = Side fuortsmiten -pagesaved = Bewarre nei Pocket -processingremove = Side fuortsmite… -processingtags = Labels tafoegje… -removepage = Side fuortsmite -save = Bewarje -saving = Bewarje… -signupemail = Registrearje mei e-mailadres -signuptosave = Registrearje foar Pocket. It is fergees. -suggestedtags = Foarstelde labels -tagline = Bewarje artikelen en fideo’s fan Firefox út foar werjaan yn Pocket op ferskate apparaten, wannear dan ek. -taglinestory_one = Klik op de Pocket-knop om artikelen, fideo’s of siden fan Firefox út te bewarjen. -taglinestory_two = Besjoch se op ferskate apparaten, wannear dan ek. -tagssaved = Labels tafoege -tos = Troch fierder te gean, geane jo akkoard mei de <a href="%1$S" target="_blank">Tsjinstbetingsten</a> en it <a href="%2$S" target="_blank">Privacybelied</a> fan Pocket -tryitnow = No probearje -signinfirefox = Oanmelde mei Firefox -signupfirefox = Registrearje mei Firefox -viewlist = List werjaan - -# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label): -# "Pocket" is a brand name. -pocket-button.label = Pocket -pocket-button.tooltiptext = Bewarje nei Pocket -saveToPocketCmd.label = Side bewarje nei Pocket -saveToPocketCmd.accesskey = k -saveLinkToPocketCmd.label = Keppeling bewarje nei Pocket -saveLinkToPocketCmd.accesskey = e -pocketMenuitem.label = Pocket-list werjaan diff --git a/browser/extensions/pocket/locale/gu-IN/pocket.properties b/browser/extensions/pocket/locale/gu-IN/pocket.properties deleted file mode 100644 index 2261ff5b4..000000000 --- a/browser/extensions/pocket/locale/gu-IN/pocket.properties +++ /dev/null @@ -1,43 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -addtags = ટૅગà«àª¸ ઉમેરો -alreadyhaveacct = પહેલેથી જ àªàª• પોકેટ વપરાશકરà«àª¤àª¾ છો? -continueff = ફાયરફોકà«àª¸ સાથે ચાલૠરાખો -errorgeneric = પોકેટ સાચવી રાખવા માટે પà«àª°àª¯àª¾àª¸ હતો તà«àª¯àª¾àª°à«‡ àªàª• àªà«‚લ હતી. -learnmore = વધૠશીખો -loginnow = પà«àª°àªµà«‡àª¶ કરો -maxtaglength = ટૅગà«àª¸ 25 અકà«àª·àª°à«‹ સà«àª§à«€ મરà«àª¯àª¾àª¦àª¿àª¤ છે -mustbeconnected = તમે પોકેટ પર સેવ કરવા માટે ઇનà«àªŸàª°àª¨à«‡àªŸ સાથે જોડાયેલ હોવા જ જોઈàª. કૃપા કરીને તમારા જોડાણ તપાસ કરો અને ફરીથી પà«àª°àª¯àª¤à«àª¨ કરો. -onlylinkssaved = માતà«àª° લિંકà«àª¸ સાચવી શકાય છે -pagenotsaved = પૃષà«àª સાચવેલા નથી -pageremoved = પૃષà«àª દૂર -pagesaved = પોકેટ પર સાચવà«àª¯à«àª‚ -processingremove = પૃષà«àª દૂર કરી રહà«àª¯àª¾ છીàªâ€¦ -processingtags = ટૅગà«àª¸ ઉમેરી રહà«àª¯à«àª‚ છે… -removepage = પૃષà«àª દૂર -save = સાચવો -saving = સાચવી રહà«àª¯à«àª‚ છે… -signupemail = ઇમેઇલ સાથે સાઇનઅપ -signuptosave = પોકેટ માટે સાઇન અપ કરો. તે મફત છે. -suggestedtags = સૂચવેલ ટૅગà«àª¸ -tagline = કોઈપણ ઉપકરણ, કોઈ પણ સમય પર પોકેટ માં જોવા માટે ફાયરફોકà«àª¸ ના લેખો અને વીડિયો સાચવો. -taglinestory_one = ફાયરફોકà«àª¸ àªàª• લેખ, વિડિઓ અથવા પાનà«àª‚ સેવ કરવા પોકેટ બટન પર કà«àª²àª¿àª• કરો. -taglinestory_two = કોઈપણ ઉપકરણ, કોઈ પણ સમય પર પોકેટ માં જà«àª“. -tagssaved = ટૅગà«àª¸ ઉમેરà«àª¯à«àª‚ -tos = ચાલૠકરવાથી, તમે પોકેટ માટેની <a href="%1$S" target="_blank">સેવાની શરતો</a> અને <a href="%2$S" target="_blank">ગોપનીયતા નીતિ</a>સંમત થશો -tryitnow = અતà«àª¯àª¾àª°à«‡ પà«àª°àª¯àª¾àª¸ કરો -signinfirefox = ફાયરફોકà«àª¸ સાથે ચાલૠરાખો -signupfirefox = ફાયરફોકà«àª¸ સાથે સાઇન અપ કરો -viewlist = યાદી જà«àª“ - -# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label): -# "Pocket" is a brand name. -pocket-button.label = પોકેટ -pocket-button.tooltiptext = પોકેટ પર સાચવો -saveToPocketCmd.label = પોકેટ પર પૃષà«àª સાચવો -saveToPocketCmd.accesskey = k -saveLinkToPocketCmd.label = પોકેટ પર લિંક સાચવો -saveLinkToPocketCmd.accesskey = o -pocketMenuitem.label = જà«àª“ પોકેટની યાદી diff --git a/browser/extensions/pocket/locale/hr/pocket.properties b/browser/extensions/pocket/locale/hr/pocket.properties deleted file mode 100644 index 3b723499f..000000000 --- a/browser/extensions/pocket/locale/hr/pocket.properties +++ /dev/null @@ -1,43 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -addtags = Dodaj oznake -alreadyhaveacct = Postojeći ste Pocket korisnik? -continueff = Nastavite s Firefoxom -errorgeneric = DoÅ¡lo je do greÅ¡ke pri snimanju u Pocket. -learnmore = Saznajte viÅ¡e -loginnow = Prijava -maxtaglength = Oznake su ograniÄene na 25 znakova -mustbeconnected = Morate biti povezani na Internet da bi ste mogli snimiti u Pocket. Molimo vas da provjerite vaÅ¡u vezu i pokuÅ¡ate ponovno. -onlylinkssaved = Mogu se spremiti samo poveznice -pagenotsaved = Stranica nije spremljena -pageremoved = Stranica uklonjena -pagesaved = Spremljeno u Pocket -processingremove = Uklanjanje stranice… -processingtags = Dodavanje oznaka… -removepage = Ukloni stranicu -save = Spremi -saving = Spremanje… -signupemail = Registracija s e-poÅ¡tom -signuptosave = Registrirajte se na Pocket. Besplatno je. -suggestedtags = Predložene oznake -tagline = Spremite Älanke, video snimke iz Firefoxa za prikaz u Pocketu, na bilo kojem ureÄ‘aju, bilo kada. -taglinestory_one = Kliknite na Pocket tipku da biste snimili bilo koji Älanak, video ili stranicu iz Firefoxa. -taglinestory_two = Pregledajte u Pocketu na bilo kojem ureÄ‘aju, bilo kada. -tagssaved = Oznake dodane -tos = Nastavljajući, prihvaćate Pocket <a href="%1$S" target="_blank">Uvjete pružanja usluge</a> i <a href="%2$S" target="_blank">Izjavu o privatnosti</a> -tryitnow = Isprobajte odmah -signinfirefox = Prijava s Firefoxom -signupfirefox = Registracija s Firefoxom -viewlist = Prikaži popis - -# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label): -# "Pocket" is a brand name. -pocket-button.label = Pocket -pocket-button.tooltiptext = Spremi u Pocket -saveToPocketCmd.label = Spremi stranicu u Pocket -saveToPocketCmd.accesskey = k -saveLinkToPocketCmd.label = Spremi poveznicu u Pocket -saveLinkToPocketCmd.accesskey = o -pocketMenuitem.label = Prikaži Pocket popis diff --git a/browser/extensions/pocket/locale/hsb/pocket.properties b/browser/extensions/pocket/locale/hsb/pocket.properties deleted file mode 100644 index a5f5583e7..000000000 --- a/browser/extensions/pocket/locale/hsb/pocket.properties +++ /dev/null @@ -1,43 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -addtags = ZnaÄki pÅ™idać -alreadyhaveacct = Sće hižo wužiwar Pocket? -continueff = Z Firefox pokroÄować -errorgeneric = PÅ™i skÅ‚adowanju do Pocket je zmylk wustupiÅ‚. -learnmore = DalÅ¡e informacije -loginnow = PÅ™izjewić -maxtaglength = ZnaÄki su na 25 znamjeÅ¡kow wobmjezowane -mustbeconnected = Dyrbiće z internetom zwjazany być, zo byšće do Pocket skÅ‚adowaÅ‚. ProÅ¡u pÅ™epruwujće swój zwisk a spytajće hišće raz. -onlylinkssaved = Jenož wotkazy dadźa so skÅ‚adować -pagenotsaved = Strona njeje so skÅ‚adowaÅ‚a -pageremoved = Strona je so wotstroniÅ‚a -pagesaved = Do Pocket skÅ‚adowany -processingremove = Strona so wotstronja… -processingtags = ZnaÄki so pÅ™idawaja… -removepage = Stronu wotstronić -save = SkÅ‚adować -saving = SkÅ‚aduje so… -signupemail = Registrujće so z e-mejlku -signuptosave = Registrujće so za Pocket. Je darmo. -suggestedtags = Namjetowane znaÄki -tagline = SkÅ‚adujće nastawki a wideja z Firefox, zo byšće sej je kóždy Äas w Pocket na kóždym graće wobhladaÅ‚. -taglinestory_one = Klikńće na tłóÄatko Pocket, zo byšće nastawk, widejo abo stronu z Firefox skÅ‚adowaÅ‚. -taglinestory_two = Sej w Pocket na kóždym graće kóždy Äas wobhladać. -tagssaved = ZnaÄki su so pÅ™idali -tos = Hdyž pokroÄujeće, zwoliće do <a href="%1$S" target="_blank">wužiwarskich wumÄ›njenjow</a> a <a href="%2$S" target="_blank">prawidÅ‚ow priwatnosće</a> Pocket -tryitnow = Spytajće to nÄ›tko -signinfirefox = Z Firefox pÅ™izjewić -signupfirefox = Z Firefox registrować -viewlist = Lisćinu pokazać - -# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label): -# "Pocket" is a brand name. -pocket-button.label = Pocket -pocket-button.tooltiptext = Do Pocket skÅ‚adować -saveToPocketCmd.label = Stronu do Pocket skÅ‚adować -saveToPocketCmd.accesskey = d -saveLinkToPocketCmd.label = Wotkaz do Pocket skÅ‚adować -saveLinkToPocketCmd.accesskey = o -pocketMenuitem.label = Lisćinu Pocket pokazać diff --git a/browser/extensions/pocket/locale/hu/pocket.properties b/browser/extensions/pocket/locale/hu/pocket.properties deleted file mode 100644 index 767638e82..000000000 --- a/browser/extensions/pocket/locale/hu/pocket.properties +++ /dev/null @@ -1,43 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -addtags = CÃmkék hozzáadása -alreadyhaveacct = Már Pocket felhasználó? -continueff = Folytatás a Firefoxszal -errorgeneric = Hiba történt a Pocketre mentés közben. -learnmore = Tudjon meg többet -loginnow = Bejelentkezés -maxtaglength = A cÃmkék legfeljebb 25 karakter hosszúak lehetnek -mustbeconnected = Csatlakoznia kell az internethez a Pocketre mentéshez. EllenÅ‘rizze a kapcsolatot, és próbálja újra. -onlylinkssaved = Csak hivatkozások menthetÅ‘k -pagenotsaved = Az oldal nem lett mentve -pageremoved = Oldal eltávolÃtva -pagesaved = Mentve a Pocketbe -processingremove = Oldal eltávolÃtása… -processingtags = CÃmkék hozzáadása… -removepage = Oldal eltávolÃtása -save = Mentés -saving = Mentés… -signupemail = Regisztráció e-maillel -signuptosave = Regisztráljon ingyenesen a Pocketre. -suggestedtags = Javasolt cÃmkék -tagline = Mentsen cikkeket és videókat a Firefoxból a Pocketen való megtekintéshez bármely eszközön, bármikor. -taglinestory_one = Kattintson a Pocket gombra bármely cikk, videó vagy oldal mentéséhez a Firefoxból. -taglinestory_two = Nézze meg a Pocketen bármely eszközön, bármikor. -tagssaved = CÃmkék hozzáadva -tos = A folytatással elfogadja a Pocket <a href="%1$S" target="_blank">Szolgáltatási feltételeit</a> és az <a href="%2$S" target="_blank">Adatvédelmi nyilatkozatot</a> -tryitnow = Próbálja ki most -signinfirefox = Bejelentkezés a Firefoxszal -signupfirefox = Regisztráció a Firefoxszal -viewlist = Lista megjelenÃtése - -# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label): -# "Pocket" is a brand name. -pocket-button.label = Pocket -pocket-button.tooltiptext = Mentés a Pocketbe -saveToPocketCmd.label = Oldal mentése a Pocketbe -saveToPocketCmd.accesskey = c -saveLinkToPocketCmd.label = Hivatkozás mentése a Pocketbe -saveLinkToPocketCmd.accesskey = H -pocketMenuitem.label = Pocket lista megjelenÃtése diff --git a/browser/extensions/pocket/locale/it/pocket.properties b/browser/extensions/pocket/locale/it/pocket.properties deleted file mode 100644 index 2105011eb..000000000 --- a/browser/extensions/pocket/locale/it/pocket.properties +++ /dev/null @@ -1,43 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -addtags = Aggiungi etichette -alreadyhaveacct = Hai già un account registrato su Pocket? -continueff = Prosegui con Firefox -errorgeneric = Si è verificato un errore durante il salvataggio in Pocket. -learnmore = Ulteriori informazioni -loginnow = Accedi -maxtaglength = La lunghezza massima per le etichette è di 25 caratteri -mustbeconnected = È necessario essere connessi a Internet per salvare in Pocket. Verificare la connessione e riprovare. -onlylinkssaved = È possibile salvare solo link -pagenotsaved = Pagina non salvata -pageremoved = Pagina rimossa -pagesaved = Salvata in Pocket -processingremove = Rimozione pagina… -processingtags = Salvataggio etichette… -removepage = Rimuovi pagina -save = Salva -saving = Salvataggio… -signupemail = Accedi con email -signuptosave = Registrati su Pocket. È gratis. -suggestedtags = Etichette suggerite -tagline = Salva articoli e video da Firefox per visualizzarli in Pocket da qualunque dispositivo e in qualunque momento. -taglinestory_one = Fai clic sul pulsante Pocket per salvare qualunque articolo, video o pagina da Firefox. -taglinestory_two = Visualizza in Pocket da qualunque dispositivo e in qualunque momento. -tagssaved = Aggiunte etichette -tos = Proseguendo si accettano i <a href="%1$S" target="_blank">termini di servizio</a> e l’<a href="%2$S" target="_blank">informativa sulla privacy</a> -tryitnow = Provalo subito -signinfirefox = Accedi con Firefox -signupfirefox = Registrati con Firefox -viewlist = Visualizza elenco - -# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label): -# "Pocket" is a brand name. -pocket-button.label = Pocket -pocket-button.tooltiptext = Salva in Pocket -saveToPocketCmd.label = Salva pagina in Pocket -saveToPocketCmd.accesskey = k -saveLinkToPocketCmd.label = Salva link in Pocket -saveLinkToPocketCmd.accesskey = o -pocketMenuitem.label = Visualizza elenco Pocket diff --git a/browser/extensions/pocket/locale/ja/pocket.properties b/browser/extensions/pocket/locale/ja/pocket.properties deleted file mode 100644 index 1aef6bba1..000000000 --- a/browser/extensions/pocket/locale/ja/pocket.properties +++ /dev/null @@ -1,43 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -addtags = ã‚¿ã‚°ã‚’è¿½åŠ -alreadyhaveacct = Pocket ã«ç™»éŒ²æ¸ˆã¿ã§ã™ã‹ï¼Ÿ -continueff = Firefox ã§ç¶šè¡Œ -errorgeneric = Pocket ã¸ã®ä¿å˜ä¸ã«ã‚¨ãƒ©ãƒ¼ãŒã‚ã‚Šã¾ã—ãŸã€‚ -learnmore = 詳細 -loginnow = ãƒã‚°ã‚¤ãƒ³ -maxtaglength = タグ㯠25 æ–‡å—ã¾ã§ã§ã™ -mustbeconnected = Pocket ã«ä¿å˜ã™ã‚‹ã«ã¯ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆæŽ¥ç¶šãŒå¿…è¦ã§ã™ã€‚接続状æ³ã‚’確èªã—ã¦ã‹ã‚‰ã€è©¦ã—ã¦ã¿ãŸãã ã•ã„。 -onlylinkssaved = リンクã®ã¿ä¿å˜ã—ã¾ã—㟠-pagenotsaved = ページをä¿å˜ã—ã¾ã›ã‚“ã§ã—㟠-pageremoved = ページを削除ã—ã¾ã—㟠-pagesaved = Pocket ã«ä¿å˜ã—ã¾ã—㟠-processingremove = ページを削除ã—ã¦ã„ã¾ã™... -processingtags = ã‚¿ã‚°ã‚’è¿½åŠ ã—ã¦ã„ã¾ã™... -removepage = ページを削除 -save = ä¿å˜ -saving = ä¿å˜ã—ã¦ã„ã¾ã™... -signupemail = メールアドレスã§æ–°è¦ç™»éŒ² -signuptosave = Pocket ã«æ–°è¦ç™»éŒ²ã—ã¾ã™ã€‚ç„¡æ–™ã§ã™ã€‚ -suggestedtags = æ案タグ -tagline = Firefox ã§è¨˜äº‹ã‚„動画をä¿å˜ã™ã‚‹ã¨ã€ã„ã¤ã§ã‚‚ã©ã“ã§ã‚‚ Pocket ã§é–²è¦§ã§ãã¾ã™ã€‚ -taglinestory_one = Firefox 㧠Pocket ボタンをクリックã™ã‚‹ã¨ã€æ§˜ã€…ãªè¨˜äº‹ã‚„動画やページをä¿å˜ã§ãã¾ã™ã€‚ -taglinestory_two = Pocket ã§ã„ã¤ã§ã‚‚ã©ã“ã§ã‚‚閲覧ã§ãã¾ã™ã€‚ -tagssaved = ã‚¿ã‚°ã‚’è¿½åŠ ã—ã¾ã—㟠-tos = 続ã‘ã‚‹ã“ã¨ã§ã€Pocket ã® <a href="%1$S" target="_blank">利用è¦ç´„</a> 㨠<a href="%2$S" target="_blank">プライãƒã‚·ãƒ¼ãƒãƒªã‚·ãƒ¼</a> ã«åŒæ„ã—ãŸã“ã¨ã«ãªã‚Šã¾ã™ -tryitnow = 今ã™ã試㙠-signinfirefox = Firefox ã§ãƒã‚°ã‚¤ãƒ³ -signupfirefox = Firefox ã§æ–°è¦ç™»éŒ² -viewlist = リストを表示 - -# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label): -# "Pocket" is a brand name. -pocket-button.label = Pocket -pocket-button.tooltiptext = Pocket ã«ä¿å˜ -saveToPocketCmd.label = ページを Pocket ã«ä¿å˜ -saveToPocketCmd.accesskey = k -saveLinkToPocketCmd.label = リンクを Pocket ã«ä¿å˜ -saveLinkToPocketCmd.accesskey = o -pocketMenuitem.label = Pocket ã®ãƒªã‚¹ãƒˆã‚’表示 diff --git a/browser/extensions/pocket/locale/jar.mn b/browser/extensions/pocket/locale/jar.mn deleted file mode 100644 index f29ca7367..000000000 --- a/browser/extensions/pocket/locale/jar.mn +++ /dev/null @@ -1,33 +0,0 @@ -#filter substitution -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -# These are used for the big if statement, as the preprocessor can't handle -# dashes. -#define bn_BD bn-BD -#define en_GB en-GB -#define en_US en-US -#define es_AR es-AR -#define es_CL es-CL -#define es_ES es-ES -#define es_MX es-MX -#define fy_NL fy-NL -#define gu_IN gu-IN -#define nn_NO nn-NO -#define pt_BR pt-BR -#define pt_PT pt-PT -#define sv_SE sv-SE -#define zh_CN zh-CN -#define zh_TW zh-TW - -[features/firefox@getpocket.com] @AB_CD@.jar: -% locale pocket @AB_CD@ %locale/@AB_CD@/ - # For locales we support, include the file from the locale's directory in the - # source tree. - # For other locales (and en-US) fallback to the en-US directory. -#if AB_CD == ast || AB_CD == az || AB_CD == bg || AB_CD == bn_BD || AB_CD == cs || AB_CD == da || AB_CD == de || AB_CD == dsb || AB_CD == en_GB || AB_CD == en_US || AB_CD == es_AR || AB_CD == es_CL || AB_CD == es_ES || AB_CD == es_MX || AB_CD == et || AB_CD == fi || AB_CD == fr || AB_CD == fy_NL || AB_CD == gu_IN || AB_CD == hr || AB_CD == hsb || AB_CD == hu || AB_CD == it || AB_CD == ja || AB_CD == ka || AB_CD == kab || AB_CD == lt || AB_CD == lv || AB_CD == mr || AB_CD == ms || AB_CD == nl || AB_CD == nn_NO || AB_CD == or || AB_CD == pl || AB_CD == pt_BR || AB_CD == pt_PT || AB_CD == rm || AB_CD == ro || AB_CD == ru || AB_CD == sk || AB_CD == sl || AB_CD == sq || AB_CD == sr || AB_CD == sv_SE || AB_CD == te || AB_CD == th || AB_CD == tr || AB_CD == uk || AB_CD == zh_CN || AB_CD == zh_TW - locale/@AB_CD@/ (@AB_CD@/*) -#else - locale/@AB_CD@/ (en-US/*) -#endif diff --git a/browser/extensions/pocket/locale/ka/pocket.properties b/browser/extensions/pocket/locale/ka/pocket.properties deleted file mode 100644 index 266ded044..000000000 --- a/browser/extensions/pocket/locale/ka/pocket.properties +++ /dev/null @@ -1,43 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -addtags = იáƒáƒ ლიყების დáƒáƒ›áƒáƒ¢áƒ”ბრ-alreadyhaveacct = უკვე იყენებთ Pocket-ს? -continueff = Firefox-ით გáƒáƒ’რძელებრ-errorgeneric = Pocket-ში შენáƒáƒ®áƒ•áƒ˜áƒ¡áƒáƒ¡ დáƒáƒ¤áƒ˜áƒ¥áƒ¡áƒ˜áƒ დრშეცდáƒáƒ›áƒ. -learnmore = დáƒáƒ¬áƒ•áƒ ილებით -loginnow = შესვლრ-maxtaglength = იáƒáƒ ლიყები შეზღუდულირ25 áƒáƒ¡áƒáƒ›áƒ“ე -mustbeconnected = Pocket-ში შესáƒáƒœáƒáƒ®áƒáƒ“ სáƒáƒáƒ˜áƒ áƒáƒ ინტერნეთთáƒáƒœ კáƒáƒ•áƒ¨áƒ˜áƒ ი. გთხáƒáƒ•áƒ— შეáƒáƒ›áƒáƒ¬áƒ›áƒ”თ თქვენი კáƒáƒ•áƒ¨áƒ˜áƒ ი დრხელáƒáƒ®áƒšáƒ ცáƒáƒ“ეთ. -onlylinkssaved = შესáƒáƒ«áƒšáƒ”ბელირმხáƒáƒšáƒáƒ“ ბმულების შენáƒáƒ®áƒ•áƒ -pagenotsaved = გვერდი áƒáƒ შეინáƒáƒ®áƒ -pageremoved = გვერდი წáƒáƒ˜áƒ¨áƒáƒšáƒ -pagesaved = შეინáƒáƒ®áƒ Pocket-ში -processingremove = იშლებრგვერდი… -processingtags = ემáƒáƒ¢áƒ”ბრიáƒáƒ ლიყები… -removepage = გვერდის წáƒáƒ¨áƒšáƒ -save = შენáƒáƒ®áƒ•áƒ -saving = ინáƒáƒ®áƒ”ბáƒâ€¦ -signupemail = რეგისტრáƒáƒªáƒ˜áƒ ელ-ფáƒáƒ¡áƒ¢áƒ˜áƒ— -signuptosave = დáƒáƒ ეგისტრირდით Pocket-ზე. ეს უფáƒáƒ¡áƒáƒ. -suggestedtags = შემáƒáƒ—áƒáƒ•áƒáƒ–ებული იáƒáƒ ლიყები -tagline = შეინáƒáƒ®áƒ”თ სტáƒáƒ¢áƒ˜áƒ”ბი დრვიდეáƒáƒ‘ეი Firefox-იდáƒáƒœ მáƒáƒ— Pocket-ში სáƒáƒœáƒáƒ®áƒáƒ•áƒáƒ“ ნებისმიერმáƒáƒ¬áƒ§áƒáƒ‘ილáƒáƒ‘áƒáƒ–ე, ნებისმიერდრáƒáƒ¡. -taglinestory_one = Firefox-იდáƒáƒœ ნებისმიერი სტáƒáƒ¢áƒ˜áƒ˜áƒ¡, ვიდეáƒáƒ¡ áƒáƒœ გვერდის შესáƒáƒœáƒáƒ®áƒáƒ“ დáƒáƒáƒ¬áƒ™áƒáƒžáƒ”თ Pocket-ის ღილáƒáƒ™áƒ¡. -taglinestory_two = დáƒáƒáƒ—ვáƒáƒšáƒ˜áƒ”რეთ Pocket-ში ნებისმიერმáƒáƒ¬áƒ§áƒáƒ‘ილáƒáƒ‘áƒáƒ–ე, ნებისმიერდრáƒáƒ¡. -tagssaved = იáƒáƒ ლიყები დáƒáƒ”მáƒáƒ¢áƒ -tos = გáƒáƒ’რძელების შემთხვევáƒáƒ¨áƒ˜ თქვენ ეთáƒáƒœáƒ®áƒ›áƒ”ბით Pocket-ის <a href="%1$S" target="_blank">მáƒáƒ›áƒ¡áƒáƒ®áƒ£áƒ ების პირáƒáƒ‘ებს</a> დრ<a href="%2$S" target="_blank">პრივáƒáƒ¢áƒ£áƒšáƒáƒ‘ის პáƒáƒšáƒ˜áƒ¢áƒ˜áƒ™áƒáƒ¡</a> -tryitnow = სცáƒáƒ“ეთ áƒáƒ®áƒšáƒáƒ•áƒ” -signinfirefox = შესვლრFirefox-ით -signupfirefox = რეგისრáƒáƒªáƒ˜áƒ Firefox-ით -viewlist = სიის ნáƒáƒ®áƒ•áƒ - -# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label): -# "Pocket" is a brand name. -pocket-button.label = Pocket -pocket-button.tooltiptext = Pocket-ში შენáƒáƒ®áƒ•áƒ -saveToPocketCmd.label = გვერდის შენáƒáƒ®áƒ•áƒ Pocket-ში -saveToPocketCmd.accesskey = k -saveLinkToPocketCmd.label = ბმულის შენáƒáƒ®áƒ•áƒ Pocket-ში -saveLinkToPocketCmd.accesskey = o -pocketMenuitem.label = Pocket სიის ნáƒáƒ®áƒ•áƒ diff --git a/browser/extensions/pocket/locale/kab/pocket.properties b/browser/extensions/pocket/locale/kab/pocket.properties deleted file mode 100644 index 3f4cc642a..000000000 --- a/browser/extensions/pocket/locale/kab/pocket.properties +++ /dev/null @@ -1,43 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -addtags = Rnu tibzimin -alreadyhaveacct = Aseqdac yakan n Pocket? -continueff = Kemmel s Firefox -errorgeneric = Teá¸ra-d tuccá¸a deg aÉ›raḠn usekles É£er Pocket. -learnmore = Issin ugar -loginnow = Kcem -maxtaglength = Tibzimin É£ur-sent talast n 25 n isekkilen -mustbeconnected = Yessefk ad tiliḠteqqneḠɣer Internet akken ad tizmireḠad teskelseḠɣer Pocket. Ma ulac aÉ£ilif, senqed tuqqna yinek sakin É›reḠtikelt nniá¸en. -onlylinkssaved = Al iseÉ£wan i yezmren ad ttwakelsen -pagenotsaved = Asebter ur yettwakles ara -pageremoved = Asebter yettwakkes -pagesaved = Yettwakles É£er Pocket -processingremove = Tukksa n isebtar… -processingtags = Timerna n tebzimin… -removepage = Kkes asebter -save = Sekles -saving = Asekles… -signupemail = Jerred s yimayl -signuptosave = Jerred É£er Pocket. Baá¹el. -suggestedtags = Tibzimin yettwasumren -tagline = Sekles imagraden akked tvidyutin si Firefox akken ad twaliḠdi Pocket É£ef yal ibenk, melmi tebÉ£iá¸. -taglinestory_one = Sit É£ef tqeffalt Pocket akken ad teskelseḠyal amagrad, tavidyut neÉ£ asebter si Firefox. -taglinestory_two = Sken di Pocket É£ef yal ibenk yellan, melmi tebÉ£iá¸. -tagssaved = Tibzimin yettwarnan -tos = Ma tkemleá¸, ad tqebleḠ<a href="%1$S" target="_blank">tiwtilin n useqdec</a> akked <a href="%2$S" target="_blank">tsertit tabaá¸nit</a> n Pocket -tryitnow = Æreá¸-it tura -signinfirefox = Kcem s Firefox -signupfirefox = Jerred s Firefox -viewlist = Sken tabdart - -# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label): -# "Pocket" is a brand name. -pocket-button.label = Pocket -pocket-button.tooltiptext = Sekles É£er Pocket -saveToPocketCmd.label = Sekles asebter É£er Pocket -saveToPocketCmd.accesskey = k -saveLinkToPocketCmd.label = Sekles aseÉ£wen É£er Pocket -saveLinkToPocketCmd.accesskey = o -pocketMenuitem.label = Sken tabdart n Pocket diff --git a/browser/extensions/pocket/locale/lt/pocket.properties b/browser/extensions/pocket/locale/lt/pocket.properties deleted file mode 100644 index f3e8df077..000000000 --- a/browser/extensions/pocket/locale/lt/pocket.properties +++ /dev/null @@ -1,43 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -addtags = PridÄ—kite gairių -alreadyhaveacct = Jau naudojatÄ—s „Pocket“? -continueff = TÄ™sti su „Firefox“ -errorgeneric = Bandant iÅ¡saugoti į „Pocket“ įvyko klaida. -learnmore = Sužinokite daugiau -loginnow = Prisijungti -maxtaglength = Gaires gali sudaryti iki 25 simbolių -mustbeconnected = NorÄ—dami saugoti į „Pocket“, turite bÅ«ti prisijungÄ™ prie interneto. PraÅ¡ome patikrinti savo ryšį ir bandyti vÄ—l. -onlylinkssaved = IÅ¡saugoti galima tik nuorodas -pagenotsaved = Tinklalapis neiÅ¡saugotas -pageremoved = Tinklalapis paÅ¡alintas -pagesaved = IÅ¡saugota į „Pocket“ -processingremove = Å alinamas tinklalapis… -processingtags = Pridedamos gairÄ—s… -removepage = PaÅ¡alinti tinklalapį -save = IÅ¡saugoti -saving = IÅ¡saugoma… -signupemail = Prisijungti su el. paÅ¡tu -signuptosave = PradÄ—kite naudotis „Pocket“. Tai nemokama. -suggestedtags = SiÅ«lomos gairÄ—s -tagline = IÅ¡saugokite straipsnius bei vaizdo įraÅ¡us iÅ¡ „Firefox“ norÄ—dami juos peržiÅ«rÄ—ti bet kokiame įrenginyje su „Pocket“, bet kuriuo metu. -taglinestory_one = SpustelÄ—kite „Pocket“ mygtukÄ… norÄ—dami iÅ¡saugoti bet kokį straipsnį, vaizdo įraÅ¡Ä… ar tinklalapį iÅ¡ „Firefox“. -taglinestory_two = PeržiÅ«rÄ—kite bet kokiame įrenginyje su „Pocket“, bet kuriuo metu. -tagssaved = GairÄ—s pridÄ—tos -tos = TÄ™sdami sutinkate su „Pocket“ <a href="%1$S" target="_blank">paslaugos teikimo sÄ…lygomis</a> bei <a href="%2$S" target="_blank">privatumo nuostatais</a> -tryitnow = IÅ¡bandykite dabar -signinfirefox = Prisijungti su „Firefox“ -signupfirefox = Prisijungti su „Firefox“ -viewlist = PeržiÅ«rÄ—ti sÄ…raÅ¡Ä… - -# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label): -# "Pocket" is a brand name. -pocket-button.label = Pocket -pocket-button.tooltiptext = IÅ¡saugoti į „Pocket“ -saveToPocketCmd.label = IÅ¡saugoti tinklalapį į „Pocket“ -saveToPocketCmd.accesskey = k -saveLinkToPocketCmd.label = IÅ¡saugoti saitÄ… į „Pocket“ -saveLinkToPocketCmd.accesskey = o -pocketMenuitem.label = PeržiÅ«rÄ—ti „Pocket“ sÄ…raÅ¡Ä… diff --git a/browser/extensions/pocket/locale/lv/pocket.properties b/browser/extensions/pocket/locale/lv/pocket.properties deleted file mode 100644 index 40e3bb367..000000000 --- a/browser/extensions/pocket/locale/lv/pocket.properties +++ /dev/null @@ -1,43 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -addtags = Pievienot birkas -alreadyhaveacct = Jau lietojat Pocket? -continueff = TurpinÄt ar Firefox -errorgeneric = Kļūda saglabÄjot Pocket. -learnmore = UzzinÄt vairÄk -loginnow = PieslÄ“gties -maxtaglength = Birkas nevar bÅ«t garÄkas par 25 simboliem -mustbeconnected = Lai saglabÄtu Pocket, jÄbÅ«t savienojumam ar internetu. LÅ«dzu pÄrbaudiet savienojumu un mÄ“Ä£iniet vÄ“lreiz. -onlylinkssaved = SaglabÄt var tikai saites -pagenotsaved = Lapa nav saglabÄta -pageremoved = Lapa ir aizvÄkta -pagesaved = SaglabÄt Pocket -processingremove = AizvÄc lapu… -processingtags = Pievieno birkas… -removepage = Izņemt lapu -save = SaglabÄt -saving = SaglabÄ… -signupemail = PierakstÄ«ties ar epastu -signuptosave = PierakstÄ«ties Pocket. Tas ir bez maksas. -suggestedtags = IeteiktÄs birkas -tagline = SaglabÄjiet Firefox rakstu vai video, lai skatÄ«tos to ar Pocket jebkurÄ ierÄ«cÄ“ un jebkurÄ laikÄ. -taglinestory_one = KlikÅ¡Ä·iniet uz Pocket pogas, lai saglabÄtu Firefox rakstus, video vai lapas. -taglinestory_two = Skatiet ar Pocket jebkurÄ ierÄ«cÄ“ un jebkurÄ laikÄ. -tagssaved = Birkas pievienotas -tos = Turpinot, tu piekrÄ«ti Pocket <a href="%1$S" target="_blank">Noteikumiem</a> un <a href="%2$S" target="_blank">PrivÄtuma politikai</a> -tryitnow = IzmÄ“Ä£ini tagad -signinfirefox = PieslÄ“gties ar Firefox -signupfirefox = PierakstÄ«ties ar Firefox -viewlist = SkatÄ«jumu saraksts - -# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label): -# "Pocket" is a brand name. -pocket-button.label = Pocket -pocket-button.tooltiptext = SaglabÄt Pocket -saveToPocketCmd.label = SaglabÄt lapu Pocket -saveToPocketCmd.accesskey = k -saveLinkToPocketCmd.label = SaglabÄt saiti Pocket -saveLinkToPocketCmd.accesskey = o -pocketMenuitem.label = AplÅ«kot Pocket sarakstu diff --git a/browser/extensions/pocket/locale/moz.build b/browser/extensions/pocket/locale/moz.build deleted file mode 100644 index aac3a838c..000000000 --- a/browser/extensions/pocket/locale/moz.build +++ /dev/null @@ -1,7 +0,0 @@ -# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*- -# vim: set filetype=python: -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -JAR_MANIFESTS += ['jar.mn'] diff --git a/browser/extensions/pocket/locale/mr/pocket.properties b/browser/extensions/pocket/locale/mr/pocket.properties deleted file mode 100644 index af330ec1e..000000000 --- a/browser/extensions/pocket/locale/mr/pocket.properties +++ /dev/null @@ -1,43 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -addtags = टॅग जोडा -alreadyhaveacct = आधीपासून Pocket वापरताय? -continueff = Firefox सोबत पà¥à¤¢à¥‡ चला -errorgeneric = Pocket मधà¥à¤¯à¥‡ जतन करताना तà¥à¤°à¥à¤Ÿà¥€ आली. -learnmore = अधिक जाणून घà¥à¤¯à¤¾ -loginnow = लॉग इन -maxtaglength = टॅगà¥à¤œ साठी 25 वरà¥à¤£à¤¾à¤‚ची मरà¥à¤¯à¤¾à¤¦à¤¾ आहे -mustbeconnected = Pocket मधà¥à¤¯à¥‡ साठविणà¥à¤¯à¤¾à¤¸à¤¾à¤ ी आपले इंटरनेट चालू असणे आवशà¥à¤¯à¤• आहे. कृपया आपली जोडणी तपासा आणि पà¥à¤¨à¥à¤¹à¤¾ पà¥à¤°à¤¯à¤¤à¥à¤¨ करा. -onlylinkssaved = फकà¥à¤¤ दà¥à¤µà¥‡ जतन केले जाऊ शकतात -pagenotsaved = पृषà¥à¤ जतन à¤à¤¾à¤²à¥‡ नाही -pageremoved = पृषà¥à¤ काढले गेले -pagesaved = Pocket मधà¥à¤¯à¥‡ जतन à¤à¤¾à¤²à¥‡ -processingremove = पृषà¥à¤ काढून टाकत आहे... -processingtags = टॅगà¥à¤œ जोडत आहे… -removepage = पृषà¥à¤ काढून टाका -save = जतन करा -saving = जतन करत आहे... -signupemail = ईमेलसह साईन अप करा -signuptosave = Pocket साठी साईन अप करा. हे मोफत आहे. -suggestedtags = सूचविलेले टॅगà¥à¤¸ -tagline = Firefox मधील नोंदी आणि वà¥à¤¹à¤¿à¤¡à¥€à¤“ कà¥à¤ लà¥à¤¯à¤¾à¤¹à¥€ साधनावर केंवà¥à¤¹à¤¾à¤¹à¥€ Pocket मधà¥à¤¯à¥‡ पाहणà¥à¤¯à¤¾à¤¸à¤¾à¤ ी साठवा. -taglinestory_one = Firefox वरील कोणताही लेख, वà¥à¤¹à¤¿à¤¡à¤¿à¤“ किंवा पृषà¥à¤ जतन करणà¥à¤¯à¤¾à¤¸à¤¾à¤ ी Pocket बटणावर कà¥à¤²à¤¿à¤• करा. -taglinestory_two = कधीही कà¥à¤ लà¥à¤¯à¤¾à¤¹à¥€ साधनावर Pocket मधà¥à¤¯à¥‡ पाहा. -tagssaved = टॅगà¥à¤¸ जोडले -tos = सà¥à¤°à¥ ठेवà¥à¤¨, आपण Pocketचà¥à¤¯à¤¾ <a href="%1$S" target="_blank">सेवेचà¥à¤¯à¤¾ अटी</a> आणि <a href="%2$S" target="_blank">गोपनीयता धोरणांशी</a> सहमत आहात -tryitnow = आतà¥à¤¤à¤¾à¤š वापरà¥à¤¨ पाहा -signinfirefox = Firefox सह साइन इन करा -signupfirefox = Firefox सह साईन अप करा -viewlist = यादी पहा - -# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label): -# "Pocket" is a brand name. -pocket-button.label = Pocket -pocket-button.tooltiptext = Pocket मधà¥à¤¯à¥‡ जतन करा -saveToPocketCmd.label = पृषà¥à¤ Pocket मधà¥à¤¯à¥‡ जतन करा -saveToPocketCmd.accesskey = k -saveLinkToPocketCmd.label = दà¥à¤µà¤¾ Pocket मधà¥à¤¯à¥‡ संकलित करा -saveLinkToPocketCmd.accesskey = o -pocketMenuitem.label = पॉकेट सूची पहा diff --git a/browser/extensions/pocket/locale/ms/pocket.properties b/browser/extensions/pocket/locale/ms/pocket.properties deleted file mode 100644 index 67a935be8..000000000 --- a/browser/extensions/pocket/locale/ms/pocket.properties +++ /dev/null @@ -1,43 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -addtags = Tambah Tag -alreadyhaveacct = Sudah menjadi pengguna Poket? -continueff = Teruskan dengan Firefox -errorgeneric = Ada ralat semasa cuba menyimpan ke Pocket. -learnmore = Ketahui Selanjutnya -loginnow = Log masuk -maxtaglength = Tag dihadkan hanya 25 aksara -mustbeconnected = Anda mesti ada sambungan Internet untuk menyimpan ke Pocket. Sila periksa sambungan anda dan cuba lagi. -onlylinkssaved = Hanya pautan boleh disimpan -pagenotsaved = Halaman Tidak Disimpan -pageremoved = Halaman Dialih keluar -pagesaved = Disimpan ke Pocket -processingremove = Sedang mengalih keluar Halaman… -processingtags = Sedang menambah tag… -removepage = Alih keluar Halaman -save = Simpan -saving = Sedang menyimpan… -signupemail = Daftar dengan e-mel -signuptosave = Daftar masuk ke Pocket. Percuma. -suggestedtags = Tag Disyorkan -tagline = Simpan artikel dan video dari Firefox untuk dilihat dalam Pocket pada apa jua peranti pada bila-bila masa. -taglinestory_one = Klik butang Pocket untuk menyimpan apa jua artikel, video atau halaman daripada Firefox. -taglinestory_two = Papar dalam Pocket dalam mana-mana peranti, bila-bila masa saja. -tagssaved = Tag Ditambah -tos = Dengan meneruskan, anda setuju dengan <a href="%1$S" target="_blank">Terma Perkhidmatan</a> Pocket dan <a href="%2$S" target="_blank">Polisi Privasi</a> -tryitnow = Cubanya Sekarang -signinfirefox = Daftar masuk Firefox -signupfirefox = Daftar dengan Firefox -viewlist = Senarai Paparan - -# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label): -# "Pocket" is a brand name. -pocket-button.label = Pocket -pocket-button.tooltiptext = Simpan ke Pocket -saveToPocketCmd.label = Simpan Halaman ke Pocket -saveToPocketCmd.accesskey = k -saveLinkToPocketCmd.label = Simpan Pautan ke Pocket -saveLinkToPocketCmd.accesskey = o -pocketMenuitem.label = Papar Senarai Pocket diff --git a/browser/extensions/pocket/locale/nl/pocket.properties b/browser/extensions/pocket/locale/nl/pocket.properties deleted file mode 100644 index 3abe14491..000000000 --- a/browser/extensions/pocket/locale/nl/pocket.properties +++ /dev/null @@ -1,43 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -addtags = Labels toevoegen -alreadyhaveacct = Al een Pocket-gebruiker? -continueff = Doorgaan met Firefox -errorgeneric = Er is een fout opgetreden bij het opslaan naar Pocket. -learnmore = Meer info -loginnow = Meld u aan -maxtaglength = Labels zijn beperkt tot 25 tekens -mustbeconnected = U moet met het internet zijn verbonden om naar Pocket te kunnen opslaan. Controleer uw verbinding en probeer het opnieuw. -onlylinkssaved = Alleen koppelingen kunnen worden opgeslagen -pagenotsaved = Pagina niet opgeslagen -pageremoved = Pagina verwijderd -pagesaved = Opgeslagen naar Pocket -processingremove = Pagina verwijderen… -processingtags = Labels toevoegen… -removepage = Pagina verwijderen -save = Opslaan -saving = Opslaan… -signupemail = Registreren met e-mailadres -signuptosave = Registreer voor Pocket. Het is gratis. -suggestedtags = Voorgestelde labels -tagline = Sla artikelen en video’s vanuit Firefox op voor weergeven in Pocket op diverse apparaten, wanneer dan ook. -taglinestory_one = Klik op de Pocket-knop om artikelen, video’s of pagina’s vanuit Firefox op te slaan. -taglinestory_two = Bekijk ze op diverse apparaten, wanneer dan ook. -tagssaved = Labels toegevoegd -tos = Door verder te gaan, gaat u akkoord met de <a href="%1$S" target="_blank">Servicevoorwaarden</a> en het <a href="%2$S" target="_blank">Privacybeleid</a> van Pocket -tryitnow = Nu proberen -signinfirefox = Aanmelden met Firefox -signupfirefox = Registreren met Firefox -viewlist = Lijst weergeven - -# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label): -# "Pocket" is a brand name. -pocket-button.label = Pocket -pocket-button.tooltiptext = Opslaan naar Pocket -saveToPocketCmd.label = Pagina opslaan naar Pocket -saveToPocketCmd.accesskey = k -saveLinkToPocketCmd.label = Koppeling opslaan naar Pocket -saveLinkToPocketCmd.accesskey = o -pocketMenuitem.label = Pocket-lijst weergeven diff --git a/browser/extensions/pocket/locale/nn-NO/pocket.properties b/browser/extensions/pocket/locale/nn-NO/pocket.properties deleted file mode 100644 index 3f3dc971e..000000000 --- a/browser/extensions/pocket/locale/nn-NO/pocket.properties +++ /dev/null @@ -1,43 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -addtags = Legg til merkelapp-stikkord -alreadyhaveacct = Allereie ein Pocket-brukar? -continueff = Hald fram med Firefox -errorgeneric = Eit problem oppstod ved lagring til Pocket. -learnmore = Les meir -loginnow = Logg inn -maxtaglength = Merkelapp-stikkord er avgrensa til 25 teikn -mustbeconnected = Du mÃ¥ vera kopla til nettet for Ã¥ lagra til Pocket. Kontroller tilkoplinga og prøv igjen. -onlylinkssaved = Berre lenker kan lagrast -pagenotsaved = Sida ikkje lagra -pageremoved = Sida fjerna -pagesaved = Lagrar til Pocket -processingremove = Fjernar sida … -processingtags = Legg til merkelapp-stikkord… -removepage = Fjern sida -save = Lagra -saving = Lagrar … -signupemail = Logg inn med e-postadresse -signuptosave = Registrer deg pÃ¥ Pocket. Det er gratis. -suggestedtags = FøreslÃ¥tte merkelapp-stikkord -tagline = Lagra artiklar og videoar frÃ¥ Firefox for Ã¥ visa dei i Pocket pÃ¥ kva som helst eining, nÃ¥r som helst. -taglinestory_one = Trykk pÃ¥ Pocket-knappen for Ã¥ lagra kva som helst artikkel, video eller side frÃ¥ Firefox. -taglinestory_two = Vis i Pocket, pÃ¥ kva som helst eining, nÃ¥r som helst. -tagssaved = Merkelapp-stikkord lagt til -tos = Ved Ã¥ fortsetta godtek du Pocket sine <a href="%1$S" target="_blank">tenestevilkÃ¥r</a> og <a href="%2$S" target="_blank">personvernpraksis</a> -tryitnow = Prøv no -signinfirefox = Logg inn med Firefox -signupfirefox = Registrer deg med Firefox -viewlist = Vis liste - -# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label): -# "Pocket" is a brand name. -pocket-button.label = Pocket -pocket-button.tooltiptext = Lagra til Pocket -saveToPocketCmd.label = Lagra sida i Pocket -saveToPocketCmd.accesskey = k -saveLinkToPocketCmd.label = Lagra lenke til Pocket -saveLinkToPocketCmd.accesskey = l -pocketMenuitem.label = Vis Pocket-liste diff --git a/browser/extensions/pocket/locale/or/pocket.properties b/browser/extensions/pocket/locale/or/pocket.properties deleted file mode 100644 index d2616e484..000000000 --- a/browser/extensions/pocket/locale/or/pocket.properties +++ /dev/null @@ -1,43 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -addtags = ଟààŸà¬¾à¬— ଯà‹à¬¡à¬¼à¬¨àତà -alreadyhaveacct = ଆଗରà Pocket ବààŸà¬¬à¬¹à¬¾à¬° କରàଛନàତି? -continueff = Firefox ଦà‡à¬‡ ଆଗକà à¬¯à¬¿à¬¬à‡ -errorgeneric = Pocketà¬°à‡ à¬¸à¬¾à¬‡à¬¤à¬¿à¬¬à¬¾ ବà‡à¬³à‡ ଅସàବିଧାଟିଠହà‡à¬²à¬¾ । -learnmore = ଅଧିକ ଶିଖନàତà -loginnow = ଲଗ ଇନ -maxtaglength = ଟààŸà¬¾à¬— 25 ଟି ଅକàà¬·à¬°à¬°à‡ à¬¸à€à¬®à¬¿à¬¤ -mustbeconnected = Pocketà¬°à‡ à¬¸à¬¾à¬‡à¬¤à¬¿à¬¬à¬¾ ପାଇଠଆପଣ ଇଣàଟରନà‡à¬Ÿ ସହ ସଂଯàକàତ ହà‹à¬‡à¬¥à¬¿à¬¬à¬¾ ଲà‹à¬¡à¬¼à¬¾ । ଦàŸà¬¾à¬•à¬°à¬¿ ନିଜ ସଂଯà‹à¬— ପରଖି à¬†à¬‰à¬¥à¬°à‡ à¬šà‡à¬·àଟାକରନàତà । -onlylinkssaved = କà‡à¬¬à¬³ ଲିଙàକ ସାଇତାଯାଇପାରିବ -pagenotsaved = ପàƒà¬·àଠା ସାଇତା ଯାଇନାହିଠ-pageremoved = ପàƒà¬·àଠାଟି ହଟାଗଲା -pagesaved = Pocketà¬°à‡ à¬¸à¬¾à¬‡à¬¤à¬¾à¬—à¬²à¬¾ -processingremove = ପàƒà¬·àଠା ହଟାଯାଉଛି… -processingtags = ଟààŸà¬¾à¬— ଯà‹à¬¡à¬¼à¬¾à¬¯à¬¾à¬‰à¬›à¬¿â€¦ -removepage = ପàƒà¬·àଠା ହଟାନàତà -save = à¬¸à¬¾à¬‡à¬¤à¬¿à¬¬à‡ -saving = ସାଇତàଛି… -signupemail = ଇମà‡à¬²à¬°à‡ ସାଇନ ଅପ -signuptosave = Pocket ପାଇଠସାଇନ ଅପ । à¬à¬¹à¬¾ ମାଗଣା । -suggestedtags = ପàରସàତାବିତ ଟààŸà¬¾à¬— -tagline = ଯà‡à¬¤à‡à¬¬à‡à¬³à‡ ଲà‹à¬¡à¬¼à¬¾ କàŒà¬£à¬¸à¬¿ à¬à¬• ଡିà¬à¬¾à¬‡à¬¸à¬°à Pocketà¬°à‡ à¬¦à‡à¬–ିବା ପାଇଠFirefoxରà ପàରସଙàଗ ଓ à¬à¬¿à¬¡à¬¼à¬¿à¬“ à¬¸à¬¾à¬‡à¬¤à¬¿à¬ªà¬¾à¬°à¬¿à¬¬à‡ à¥¤ -taglinestory_one = କàŒà¬£à¬¸à¬¿ ପàରସଙàଗ, à¬à¬¿à¬¡à¬¼à¬¿à¬“ ବା ପàƒà¬·àଠା ସାଇତିବା ପାଇଠPocket Button ଟିପନàତà । -taglinestory_two = ଯà‡à¬¤à‡à¬¬à‡à¬³à‡ ଲà‹à¬¡à¬¼à¬¾ ସବà ଡିà¬à¬¾à¬‡à¬¸à¬°à Pocketà¬°à‡ à¬¦à‡à¬–ନàତà । -tagssaved = ଟààŸà¬¾à¬— ଯà‹à¬¡à¬¼à¬¾à¬—ଲା -tos = ଆଗକà ବଢ଼ିବା ଯà‹à¬—à ଆପଣ Pocketର <a href="%1$S" target="_blank">ନà€à¬¤à¬¿ ନିàŸà¬®</a> ଓ <a href="%2$S" target="_blank">ଗà‹à¬ªà¬¨à€àŸà¬¤à¬¾ ନà€à¬¤à¬¿à¬¬à¬³à€</a> ମାନàଛନàତି ବà‹à¬²à¬¿ à¬œà¬¾à¬£à¬¿à¬°à¬–à¬¿à¬¬à‡ -tryitnow = à¬à¬¬à‡ à¬à¬¹à¬¾ ଚà‡à¬·àଟାକରନàତà -signinfirefox = Firefoxà¬°à‡ à¬¸à¬¾à¬‡à¬¨ ଇନ କରନàତà -signupfirefox = Firefoxà¬°à‡ à¬¸à¬¾à¬‡à¬¨ ଅପ କରନàତà -viewlist = ତାଲିକା ଦà‡à¬–ନàତà - -# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label): -# "Pocket" is a brand name. -pocket-button.label = Pocket -pocket-button.tooltiptext = Pocketà¬°à‡ à¬¸à¬¾à¬‡à¬¤à¬¨àତà -saveToPocketCmd.label = Pocketà¬°à‡ à¬ªàƒà¬·àଠା ସାଇତନàତà -saveToPocketCmd.accesskey = k -saveLinkToPocketCmd.label = Pocketà¬°à‡ à¬²à¬¿à¬™àକ ସାଇତନàତà -saveLinkToPocketCmd.accesskey = o -pocketMenuitem.label = Pocket ତାଲିକା ଦà‡à¬–ନàତà diff --git a/browser/extensions/pocket/locale/pl/pocket.properties b/browser/extensions/pocket/locale/pl/pocket.properties deleted file mode 100644 index 07b5866f1..000000000 --- a/browser/extensions/pocket/locale/pl/pocket.properties +++ /dev/null @@ -1,48 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -taglinestory_one=Kliknij przycisk Pocket, aby wysÅ‚ać dowolny artykuÅ‚, film lub stronÄ™ z Firefoksa. -taglinestory_two=Czytaj z Pocket o dowolnej porze na dowolnym urzÄ…dzeniu. -learnmore=WiÄ™cej informacji - -signuptosave=Utwórz konto w Pocket. Jest darmowe. -signupfirefox=Utwórz konto z Firefoksem -signupemail=Utwórz konto z adresem e-mail -alreadyhaveacct=Masz już konto Pocket? -loginnow=Zaloguj siÄ™ - -tos=KontynuujÄ…c, wyrażasz zgodÄ™ na <a href="%1$S" target="_blank">warunki korzystania z usÅ‚ugi</a> i <a href="%2$S" target="_blank">politykÄ™ prywatnoÅ›ci</a> -tryitnow=Wypróbuj teraz - -continueff=Kontynuuj z kontem Firefoksa -signinfirefox=Zaloguj siÄ™ z Firefoksem -viewlist=Otwórz w Pocket - -removepage=UsuÅ„ stronÄ™ -processingremove=Usuwanie strony… -pageremoved=UsuniÄ™to stronÄ™ - -save=WyÅ›lij -saving=WysyÅ‚anie… -pagesaved=WysÅ‚ano do Pocket - -addtags=Etykiety -processingtags=WysyÅ‚anie etykiet… -tagssaved=WysÅ‚ano etykiety -maxtaglength=Etykiety sÄ… ograniczone do 25 znaków -suggestedtags=Sugerowane etykiety -tagline=WysyÅ‚aj artykuÅ‚y i filmy z Firefoksa do Pocket, aby wyÅ›wietlić je o dowolnej porze na dowolnym urzÄ…dzeniu. - -errorgeneric=WystÄ…piÅ‚ bÅ‚Ä…d podczas wysyÅ‚ania do Pocket. -mustbeconnected=PoÅ‚Ä…czenie z Internetem jest konieczne do przesyÅ‚ania do Pocket. ProszÄ™ sprawdzić poÅ‚Ä…czenie i spróbować ponownie. -onlylinkssaved=Tylko odnoÅ›niki mogÄ… być przesyÅ‚ane -pagenotsaved=Nie przesÅ‚ano strony - -pocket-button.label=Pocket -pocket-button.tooltiptext=WyÅ›lij do Pocket -saveToPocketCmd.label=WyÅ›lij stronÄ™ do Pocket -saveToPocketCmd.accesskey=s -saveLinkToPocketCmd.label=WyÅ›lij odnoÅ›nik do Pocket -saveLinkToPocketCmd.accesskey=o -pocketMenuitem.label=WysÅ‚ane do Pocket diff --git a/browser/extensions/pocket/locale/pt-BR/pocket.properties b/browser/extensions/pocket/locale/pt-BR/pocket.properties deleted file mode 100644 index a637aea29..000000000 --- a/browser/extensions/pocket/locale/pt-BR/pocket.properties +++ /dev/null @@ -1,43 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -addtags = Adicionar etiquetas -alreadyhaveacct = Já é um usuário do Pocket? -continueff = Continuar com o Firefox -errorgeneric = Houve um erro ao tentar salvar no Pocket. -learnmore = Saber mais -loginnow = Entrar -maxtaglength = As etiquetas estão limitadas a 25 caracteres -mustbeconnected = Você deve estar conectado à Internet para salvar no Pocket. Verifique a sua conexão e tente novamente. -onlylinkssaved = Somente links podem ser salvos -pagenotsaved = Página não salva -pageremoved = Página removida -pagesaved = Salva no Pocket -processingremove = Removendo página… -processingtags = Adicionando etiquetas… -removepage = Remover página -save = Salvar -saving = Salvando… -signupemail = Registrar com e-mail -signuptosave = Registre-se no Pocket. É gratuito. -suggestedtags = Etiquetas sugeridas -tagline = Salve os artigos e vÃdeos do Firefox no Pocket para vê-los mais tarde e em qualquer local. -taglinestory_one = Clique no botão Pocket para salvar um artigo, vÃdeo ou página do Firefox. -taglinestory_two = Ver no Pocket em qualquer dispositivo, a qualquer hora. -tagssaved = Etiquetas adicionadas -tos = Continuando, você concorda com os <a href="%1$S" target="_blank">Termos de serviço</a> e <a href="%2$S" target="_blank">PolÃtica de privacidade</a> do Pocket -tryitnow = Experimente-o agora -signinfirefox = Entrar com o Firefox -signupfirefox = Cadastre-se com o Firefox -viewlist = Ver lista - -# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label): -# "Pocket" is a brand name. -pocket-button.label = Pocket -pocket-button.tooltiptext = Salvar no Pocket -saveToPocketCmd.label = Salvar página no Pocket -saveToPocketCmd.accesskey = k -saveLinkToPocketCmd.label = Salvar link no Pocket -saveLinkToPocketCmd.accesskey = o -pocketMenuitem.label = Ver lista do Pocket diff --git a/browser/extensions/pocket/locale/pt-PT/pocket.properties b/browser/extensions/pocket/locale/pt-PT/pocket.properties deleted file mode 100644 index 90eafe77f..000000000 --- a/browser/extensions/pocket/locale/pt-PT/pocket.properties +++ /dev/null @@ -1,43 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -addtags = Adicionar etiquetas -alreadyhaveacct = Já é um utilizador do Pocket? -continueff = Continuar com o Firefox -errorgeneric = Ocorreu um erro ao tentar guardar no Pocket. -learnmore = Saber mais -loginnow = Iniciar sessão -maxtaglength = As etiquetas estão limitadas a 25 caracteres -mustbeconnected = É necessária uma ligação à Internet para poder guardar no Pocket. Por favor, verifique a sua ligação à Internet e tente novamente. -onlylinkssaved = Só podem ser guardadas ligações -pagenotsaved = Página não guardada -pageremoved = Página removida -pagesaved = Guardado no Pocket -processingremove = A remover página… -processingtags = A adicionar etiquetas… -removepage = Remover página -save = Guardar -saving = A guardar… -signupemail = Registar com email -signuptosave = Registe-se no Pocket. É gratuito. -suggestedtags = Etiquetas sugeridas -tagline = Guardar artigos e vÃdeos do Firefox para os ver no Pocket em qualquer dispositivo, em qualquer altura. -taglinestory_one = Clique no botão Pocket para guardar qualquer artigo, vÃdeo ou página a partir Firefox. -taglinestory_two = Ver no Pocket em qualquer dispositivo, a qualquer altura. -tagssaved = Etiquetas adicionadas -tos = Ao continuar, concorda com os <a href="%1$S" target="_blank">termos do serviço</a> e <a href="%2$S" target="_blank">polÃtica de privacidade</a> do Pocket -tryitnow = Experimente-o agora -signinfirefox = Iniciar sessão com Firefox -signupfirefox = Registar com Firefox -viewlist = Ver lista - -# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label): -# "Pocket" is a brand name. -pocket-button.label = Pocket -pocket-button.tooltiptext = Guardar no Pocket -saveToPocketCmd.label = Guardar página no Pocket -saveToPocketCmd.accesskey = k -saveLinkToPocketCmd.label = Guardar ligação no Pocket -saveLinkToPocketCmd.accesskey = o -pocketMenuitem.label = Ver lista do Pocket diff --git a/browser/extensions/pocket/locale/rm/pocket.properties b/browser/extensions/pocket/locale/rm/pocket.properties deleted file mode 100644 index 803277b21..000000000 --- a/browser/extensions/pocket/locale/rm/pocket.properties +++ /dev/null @@ -1,43 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -addtags = Agiuntar tags -alreadyhaveacct = Es ti gia in utilisader da Pocket? -continueff = Cuntinuar cun Firefox -errorgeneric = Ina errur è succedida durant empruvar da memorisar en Pocket. -learnmore = Ulteriuras infurmaziuns -loginnow = S'annunziar -maxtaglength = Tags èn limitads a 25 caracters -mustbeconnected = Ti stos esser connectà cun l'internet per pudair memorisar en Pocket. Controllescha p.pl. tia connexiun ed emprova anc ina giada. -onlylinkssaved = Mo colliaziuns pon vegnir memorisadas -pagenotsaved = Betg memorisà la pagina -pageremoved = Allontanà la pagina -pagesaved = Memorisà en Pocket -processingremove = Allontanar la pagina… -processingtags = Agiuntar tags… -removepage = Allontanar la pagina -save = Memorisar -saving = Memorisar… -signupemail = Sa registrar cun l'adressa dad e-mail -signuptosave = Ta registrescha tar Pocket. Gratuit. -suggestedtags = Tags proponids -tagline = Memorisescha artitgels e videos ord Firefox per als vesair en Pocket, sin mintga apparat, da tut temp. -taglinestory_one = Clicca sin il buttun da Pocket per memorisar directamain ord Firefox tge artitgel, video u pagina ch'i saja. -taglinestory_two = Vesair en Pocket sin mintga apparat, da tut temp. -tagssaved = Tags agiuntads -tos = Cun cuntinuar accepteschas ti il <a href="%1$S" target="_blank">Contract da licenza</a> e las <a href="%2$S" target="_blank">Directivas per la protecziun da datas</a> da Pocket -tryitnow = Emprova ussa -signinfirefox = S'annunziar cun Firefox -signupfirefox = Sa registrar cun Firefox -viewlist = Mussar la glista - -# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label): -# "Pocket" is a brand name. -pocket-button.label = Pocket -pocket-button.tooltiptext = Memorisar en Pocket -saveToPocketCmd.label = Memorisar la pagina en Pocket -saveToPocketCmd.accesskey = k -saveLinkToPocketCmd.label = Memorisar la colliaziun en Pocket -saveLinkToPocketCmd.accesskey = o -pocketMenuitem.label = Mussar la glista da Pocket diff --git a/browser/extensions/pocket/locale/ro/pocket.properties b/browser/extensions/pocket/locale/ro/pocket.properties deleted file mode 100644 index eedb756f9..000000000 --- a/browser/extensions/pocket/locale/ro/pocket.properties +++ /dev/null @@ -1,43 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -addtags = Adaugă etichete -alreadyhaveacct = EÈ™ti deja un utilizator Pocket? -continueff = Continuă cu Firefox -errorgeneric = A apărut o eroare la încercarea de salvare în Pocket. -learnmore = Află mai multe -loginnow = Autentificare -maxtaglength = Etichetele sunt limitate la 25 de caractere -mustbeconnected = Trebuie să fii conectat la internet pentru a salva în Pocket. Te rugăm să verifici conexiunea È™i să încerci din nou. -onlylinkssaved = Doar linkurile pot fi salvate -pagenotsaved = Pagină nesalvată -pageremoved = Pagină eliminată -pagesaved = Salvat în Pocket -processingremove = Se elimină pagina… -processingtags = Se adaugă etichete… -removepage = Elimină pagina -save = Salvează -saving = Se salvează... -signupemail = ÃŽnregistrare cu e-mail -signuptosave = ÃŽnregistrează-te pentru Pocket. Este gratuit. -suggestedtags = Etichete sugerate -tagline = Salvează articole È™i videoclipuri din Firefox pentru a le vedea în Pocket de pe orice dispozitiv, oricând. -taglinestory_one = Clic pe butonul Pocket pentru a salva orice articol, videoclip sau pagină din Firefox. -taglinestory_two = Vezi în Pocket de pe orice dispozitiv, oricând. -tagssaved = Etichete adăugate -tos = Continuând, eÈ™ti de acord cu <a href="%1$S" target="_blank">termenii de utilizare a serviciului</a> È™i <a href="%2$S" target="_blank">politica de confidenÈ›ialitate</a> a Pocket -tryitnow = ÃŽncearcă acum -signinfirefox = Autentificare în Firefox -signupfirefox = ÃŽnregistrare în Firefox -viewlist = Vezi lista - -# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label): -# "Pocket" is a brand name. -pocket-button.label = Pocket -pocket-button.tooltiptext = Salvează în Pocket -saveToPocketCmd.label = Salvează pagina în Pocket -saveToPocketCmd.accesskey = k -saveLinkToPocketCmd.label = Salvează linkul în Pocket -saveLinkToPocketCmd.accesskey = o -pocketMenuitem.label = Vezi lista Pocket diff --git a/browser/extensions/pocket/locale/ru/pocket.properties b/browser/extensions/pocket/locale/ru/pocket.properties deleted file mode 100644 index 0da716e8a..000000000 --- a/browser/extensions/pocket/locale/ru/pocket.properties +++ /dev/null @@ -1,43 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -addtags = Добавить теги -alreadyhaveacct = Уже иÑпользуете Pocket? -continueff = Продолжить через Firefox -errorgeneric = При попытке Ñохранить в Pocket произошла ошибка. -learnmore = Узнайте больше -loginnow = Войдите -maxtaglength = Длина тега не должна превышать 25 Ñимволов -mustbeconnected = Чтобы ÑохранÑÑ‚ÑŒ в Pocket, вы должны быть подключены к Интернету. ПожалуйÑта, проверьте ваше Ñоединение и попробуйте Ñнова. -onlylinkssaved = Можно ÑохранÑÑ‚ÑŒ только ÑÑылки -pagenotsaved = Страница не Ñохранена -pageremoved = Страница удалена -pagesaved = Сохранено в Pocket -processingremove = Удаление Ñтраницы… -processingtags = Добавление тегов… -removepage = Удалить Ñтраницу -save = Сохранить -saving = Сохранение… -signupemail = РегиÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ð¿Ð¾ Ñл. почте -signuptosave = ЗарегиÑтрируйтеÑÑŒ в Pocket. Ðто беÑплатно. -suggestedtags = Рекомендуемые теги -tagline = СохранÑйте Ñтатьи и видео из Firefox Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñмотра в Pocket на любом уÑтройÑтве, в любой момент. -taglinestory_one = Щёлкните по кнопке Pocket, чтобы Ñохранить любую Ñтатью, видео или Ñтраницу из Firefox. -taglinestory_two = ПроÑматривайте их в Pocket на любом уÑтройÑтве, в любой момент. -tagssaved = Теги добавлены -tos = ПродолжаÑ, вы принимаете <a href="%1$S" target="_blank">УÑÐ»Ð¾Ð²Ð¸Ñ Ñлужбы</a> и <a href="%2$S" target="_blank">Политику приватноÑти</a> Pocket -tryitnow = Попробовать ÑÐµÐ¹Ñ‡Ð°Ñ -signinfirefox = Войти через Firefox -signupfirefox = РегиÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ñ‡ÐµÑ€ÐµÐ· Firefox -viewlist = ПроÑмотреть ÑпиÑок - -# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label): -# "Pocket" is a brand name. -pocket-button.label = Pocket -pocket-button.tooltiptext = Сохранить в Pocket -saveToPocketCmd.label = Сохранить Ñтраницу в Pocket -saveToPocketCmd.accesskey = Ñ… -saveLinkToPocketCmd.label = Сохранить ÑÑылку в Pocket -saveLinkToPocketCmd.accesskey = о -pocketMenuitem.label = Показать ÑпиÑок Pocket diff --git a/browser/extensions/pocket/locale/sk/pocket.properties b/browser/extensions/pocket/locale/sk/pocket.properties deleted file mode 100644 index 57327365c..000000000 --- a/browser/extensions/pocket/locale/sk/pocket.properties +++ /dev/null @@ -1,43 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -addtags = PridaÅ¥ znaÄky -alreadyhaveacct = Už ste použÃvateľom služby Pocket? -continueff = PokraÄovaÅ¥ s Firefoxom -errorgeneric = PoÄas ukladania údajov do služby Pocket sa vyskytla chyba. -learnmore = ÄŽalÅ¡ie informácie -loginnow = PrihlásiÅ¥ sa -maxtaglength = ZnaÄky môžu obsahovaÅ¥ najviac 25 znakov -mustbeconnected = Ak chcete ukladaÅ¥ údaje do služby Pocket, musÃte byÅ¥ pripojený k sieti Internet. Skontrolujte svoje pripojenie a skúste to znova. -onlylinkssaved = Uložené môžu byÅ¥ len odkazy -pagenotsaved = Stránka nebola uložená -pageremoved = Stránka bola odstránená -pagesaved = Uložená do služby Pocket -processingremove = Stránka sa odstraňuje… -processingtags = Pridávajú sa znaÄky… -removepage = OdstrániÅ¥ stránku -save = UložiÅ¥ -saving = Ukladá sa… -signupemail = ZaregistrovaÅ¥ sa pomocou e-mailu -signuptosave = Zaregistrujte sa v službe Pocket. Je zadarmo. -suggestedtags = Navrhované znaÄky -tagline = Ukladajte si Älánky a videá z Firefoxu a majte ich dostupné kdekoľvek a na akomkoľvek zariadenà pomocou služby Pocket. -taglinestory_one = KliknutÃm na tlaÄidlo Pocket vo Firefoxe uložÃte akýkoľvek Älánok, video alebo stránku. -taglinestory_two = Tieto sú potom so službou Pocket dostupné kdekoľvek a na akomkoľvek zariadenÃ. -tagssaved = ZnaÄky boli pridané -tos = PokraÄovanÃm vyjadrujete súhlas s <a href="%1$S" target="_blank">podmienkami použÃvania</a> služby Pocket a so <a href="%2$S" target="_blank">zásadami ochrany osobných údajov</a> -tryitnow = Vyskúšajte to hneÄ teraz -signinfirefox = PrihlásiÅ¥ sa pomocou Firefoxu -signupfirefox = ZaregistrovaÅ¥ sa pomocou Firefoxu -viewlist = ZobraziÅ¥ zoznam - -# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label): -# "Pocket" is a brand name. -pocket-button.label = Služba Pocket -pocket-button.tooltiptext = UložiÅ¥ do služby Pocket -saveToPocketCmd.label = UložiÅ¥ stránku do služby Pocket -saveToPocketCmd.accesskey = P -saveLinkToPocketCmd.label = UložiÅ¥ odkaz do služby Pocket -saveLinkToPocketCmd.accesskey = d -pocketMenuitem.label = ZobraziÅ¥ zoznam služby Pocket diff --git a/browser/extensions/pocket/locale/sl/pocket.properties b/browser/extensions/pocket/locale/sl/pocket.properties deleted file mode 100644 index e0451d72b..000000000 --- a/browser/extensions/pocket/locale/sl/pocket.properties +++ /dev/null @@ -1,43 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -addtags = Dodaj oznake -alreadyhaveacct = Že uporabljate Pocket? -continueff = Nadaljuj s Firefoxom -errorgeneric = Med shranjevanjem na Pocket je priÅ¡lo do napake. -learnmore = VeÄ o tem -loginnow = Prijava -maxtaglength = Oznake so omejene na 25 znakov -mustbeconnected = Za shranjevanje na Pocket morate biti povezani na internet. Preverite povezavo in poskusite znova. -onlylinkssaved = Shranite lahko samo povezave -pagenotsaved = Stran ni bila shranjena -pageremoved = Stran odstranjena -pagesaved = Shranjeno na Pocket -processingremove = Odstranjevanje strani … -processingtags = Dodajanje oznak … -removepage = Odstrani stran -save = Shrani -saving = Shranjevanje … -signupemail = Registrirajte se z e-poÅ¡to -signuptosave = BrezplaÄno se registrirajte na Pocketu. -suggestedtags = Predlagane oznake -tagline = Shranite Älanke in videe v Firefoxu in si jih oglejte na Pocketu iz katere koli naprave. -taglinestory_one = Kliknite gumb Pocket v Firefoxu in shranite Älanek, video ali stran. -taglinestory_two = Oglejte si v Pocketu na kateri koli napravi. -tagssaved = Oznake dodane -tos = ÄŒe nadaljujete, sprejemate <a href="%1$S" target="_blank">Pogoje uporabe</a> in <a href="%2$S" target="_blank">Politiko zasebnosti</a> storitve Pocket -tryitnow = Preizkusite ga zdaj -signinfirefox = Prijavite se s Firefoxom -signupfirefox = Registrirajte se s Firefoxom -viewlist = Ogled seznama - -# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label): -# "Pocket" is a brand name. -pocket-button.label = Pocket -pocket-button.tooltiptext = Shrani v Pocket -saveToPocketCmd.label = Shrani stran v Pocket -saveToPocketCmd.accesskey = r -saveLinkToPocketCmd.label = Shrani povezavo v Pocket -saveLinkToPocketCmd.accesskey = o -pocketMenuitem.label = Pokaži seznam Pocket diff --git a/browser/extensions/pocket/locale/sq/pocket.properties b/browser/extensions/pocket/locale/sq/pocket.properties deleted file mode 100644 index b8b17ad22..000000000 --- a/browser/extensions/pocket/locale/sq/pocket.properties +++ /dev/null @@ -1,43 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -addtags = Shtoni Etiketa -alreadyhaveacct = Jeni tashmë përdorues Pocket-i? -continueff = Vazhdoni me Firefox-in -errorgeneric = Pati një gabim teksa përpiqej të ruante te Pocket. -learnmore = Mësoni më tepër -loginnow = Hyni -maxtaglength = Etiketat kufizohen deri në 25 shenja -mustbeconnected = Që të ruani në Pocket, duhet të jeni i lidhur në Internet. Ju lutemi, kontrolloni lidhjen tuaj dhe riprovoni. -onlylinkssaved = Mund të ruhen vetëm lidhje -pagenotsaved = Faqja S’u Ruajt -pageremoved = Faqja u Hoq -pagesaved = U ruajt te Pocket -processingremove = Po hiqet Faqja… -processingtags = Po shtohen etiketa… -removepage = Hiqe Faqen -save = Ruaje -saving = Po ruhet… -signupemail = Regjistrohuni me email -signuptosave = Regjistrohuni në Pocket. Është falas. -suggestedtags = Etiketa të Këshilluara -tagline = Ruani që nga Firefoxc-i artikuj dhe video për t’i parë në Pocket në çfarëdo pajisje, kurdo. -taglinestory_one = Klikoni butonin Pocket që të ruani që nga Firefox-i çfarëdo artikulli, video ose faqe. -taglinestory_two = Shihini në Pocket, në çfarëdo pajisje, kurdo. -tagssaved = Etiketat u Shtuan -tos = Duke vazhduar, pajtoheni me <a href="%1$S" target="_blank">Kushtet e Shërbimit</a> dhe <a href="%2$S" target="_blank">Rregullat e Privatësisë</a> për Pocket-in -tryitnow = Provojeni Që Tani -signinfirefox = Hyni me Firefox -signupfirefox = Regjistrohuni me Firefox -viewlist = Shihni Listën - -# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label): -# "Pocket" is a brand name. -pocket-button.label = Pocket -pocket-button.tooltiptext = Ruajeni te Pocket -saveToPocketCmd.label = Ruajeni Faqen te Pocket -saveToPocketCmd.accesskey = k -saveLinkToPocketCmd.label = Ruajeni lidhjen te Pocket -saveLinkToPocketCmd.accesskey = o -pocketMenuitem.label = Shihni Listën te Pocket diff --git a/browser/extensions/pocket/locale/sr/pocket.properties b/browser/extensions/pocket/locale/sr/pocket.properties deleted file mode 100644 index c3dbf2ece..000000000 --- a/browser/extensions/pocket/locale/sr/pocket.properties +++ /dev/null @@ -1,43 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -addtags = Додај ознаку -alreadyhaveacct = Већ Ñте Pocket кориÑник? -continueff = ÐаÑтави Ñа Firefox-ом -errorgeneric = ДеÑила Ñе грешка при покушају Ñнимања у Pocket. -learnmore = Сазнајте више -loginnow = Пријава -maxtaglength = Ознаке Ñу ограничене на 25 карактера -mustbeconnected = Морате бити повезани на интернет да биÑте Ñнимили у Pocket. Проверити везу и покушајте поново. -onlylinkssaved = Само Ñе везе могу Ñнимити -pagenotsaved = Страница није Ñнимљена -pageremoved = Страница уклоњена -pagesaved = Снимљено у Pocket -processingremove = Уклањам Ñтраницу… -processingtags = Додајем ознаку… -removepage = Уклони Ñтраницу -save = Сними -saving = Снимам… -signupemail = РегиÑтруј Ñе Ñа е-поштом -signuptosave = РегиÑтрујте Ñе да кориÑтите Pocket. БеÑплатно је. -suggestedtags = Предложене ознаке -tagline = Снимите чланке и видео Ñнимке из Firefox-а да биÑте их погледали у Pocket-у на било ком уређају било када. -taglinestory_one = Кликните на Pocket дугме да биÑте Ñнимили чланак, видео или Ñтраницу из Firefox-а. -taglinestory_two = Погледајте Ñадржај у Pocket-у на било ком уређају било када. -tagssaved = Ознаке додате -tos = ÐаÑтављањем прихватате <a href="%1$S" target="_blank">уÑлове коришћења</a> и <a href="%2$S" target="_blank">полиÑу приватноÑти</a> Pocket-а -tryitnow = Покушајте Ñада -signinfirefox = Пријави Ñе -signupfirefox = РегиÑтруј Ñе -viewlist = Прикажи лиÑту - -# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label): -# "Pocket" is a brand name. -pocket-button.label = Pocket -pocket-button.tooltiptext = Сними у Pocket -saveToPocketCmd.label = Сними Ñтраницу у Pocket -saveToPocketCmd.accesskey = С -saveLinkToPocketCmd.label = Сними везу у Pocket -saveLinkToPocketCmd.accesskey = в -pocketMenuitem.label = Прикажи Pocket лиÑту diff --git a/browser/extensions/pocket/locale/sv-SE/pocket.properties b/browser/extensions/pocket/locale/sv-SE/pocket.properties deleted file mode 100644 index e01ac7373..000000000 --- a/browser/extensions/pocket/locale/sv-SE/pocket.properties +++ /dev/null @@ -1,43 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -addtags = Lägg till etiketter -alreadyhaveacct = Redan en Pocket användare? -continueff = Fortsätt med Firefox\u0020 -errorgeneric = Ett fel upptäcktes dÃ¥ du försökte spara till Pocket. -learnmore = Läs mer -loginnow = Logga in -maxtaglength = Etiketter kan max vara 25 tecken -mustbeconnected = Du mÃ¥ste vara ansluten till internet för att kunna spara till Pocket. Kontrollera din anslutning och försök igen. -onlylinkssaved = Bara länkar kan sparas\u0020 -pagenotsaved = Sidan sparades inte\u0020 -pageremoved = Sidan borttagen -pagesaved = Spara till Pocket\u0020 -processingremove = Tar bort sida… -processingtags = Lägger till etiketter… -removepage = Ta bort sida -save = Spara -saving = Sparar… -signupemail = Registrera dig med din E-postadress -signuptosave = Registrera dig för Pocket. Det är gratis. -suggestedtags = Föreslagna etiketter -tagline = Spara artiklar och videor frÃ¥n Firefox för att visa i Pocket pÃ¥ vilken enhet som helst, när som helst. -taglinestory_one = Klicka pÃ¥ Pocket knappen för att spara vilken artikel, video eller sida som helst frÃ¥n Firefox.\u0020 -taglinestory_two = Visa i Pocket pÃ¥ vilken enhet som helst, när som helst.\u0020 -tagssaved = Etiketter Tillagda -tos = Genom att fortsätta godkänner du Pocket's <a href="%1$S" target="_blank">användarvillkor</a> och <a href="%2$S" target="_blank">sekretesspolicy</a> -tryitnow = Prova nu -signinfirefox = Logga in med Firefox\u0020 -signupfirefox = Registrera dig med Firefox\u0020 -viewlist = Visa lista - -# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label): -# "Pocket" is a brand name. -pocket-button.label = Pocket -pocket-button.tooltiptext = Spara till Pocket -saveToPocketCmd.label = Spara sida till Pocket -saveToPocketCmd.accesskey = k -saveLinkToPocketCmd.label = Spara Länk till Pocket -saveLinkToPocketCmd.accesskey = l -pocketMenuitem.label = Visa Pocket Lista\u0020 diff --git a/browser/extensions/pocket/locale/te/pocket.properties b/browser/extensions/pocket/locale/te/pocket.properties deleted file mode 100644 index 2e9552793..000000000 --- a/browser/extensions/pocket/locale/te/pocket.properties +++ /dev/null @@ -1,43 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -addtags = టాగà±â€Œà°²à°¨à± జోడించౠ-alreadyhaveacct = ఇపà±à°ªà°Ÿà°¿à°•à±‡ à°’à°• పాకెటౠయూజరà±? -continueff = ఫైరà±à°«à°¾à°•à±à°¸à± తో కొనసాగించà±à°®à± -errorgeneric = పాకెటౠకౠసేవౠచేయడానికి à°ªà±à°°à°¯à°¤à±à°¨à°¿à°¸à±à°¤à±à°¨à±à°¨à°ªà±à°ªà±à°¡à± లోపం ఉంది. -learnmore = మరింత తెలà±à°¸à±à°•à±‹à°‚à°¡à°¿ -loginnow = లాగౠఇనౠ-maxtaglength = టాగà±à°²à± 25 à°…à°•à±à°·à°°à°¾à°²à°•à± పరిమితం చేయబడà±à°¡à°¾à°¯à°¿ -mustbeconnected = మీరౠపాకెటౠకౠసేవౠచేయడానికి ఇంటరà±à°¨à±†à°Ÿà± కనెకà±à°Ÿà± చేయక తపà±à°ªà°¦à±. మీ కనెకà±à°·à°¨à±à°¨à± తనిఖీ చేసి, మళà±à°³à±€ à°ªà±à°°à°¯à°¤à±à°¨à°¿à°‚à°šà°‚à°¡à°¿. -onlylinkssaved = కేవలం లింకà±à°²à± సేవౠచేయవచà±à°šà± -pagenotsaved = పేజీ సేవౠచేయబడలేదౠ-pageremoved = పేజీ తీసివేయబడెనౠ-pagesaved = పాకెటౠకౠసేవౠచేయబడింది -processingremove = పేజీని తొలగించà±â€¦ -processingtags = టాగà±à°²à± జోడిసà±à°¤à±‹à°‚ది... -removepage = పేజీని తొలగించౠ-save = సేవౠచేయి -saving = సేవౠచేసà±à°¤à±‹à°‚ది... -signupemail = ఇమెయిలౠతో సైనà±à°…పౠఅవà±à°µà°‚à°¡à± -signuptosave = పాకెటౠకోసం సైనౠఅపౠచేయండి. ఇది ఉచితం. -suggestedtags = సూచించిన టాగà±à°²à± -tagline = ఠపరికరం, ఠసమయం లో పాకెటౠవీకà±à°·à°¿à°‚చడానికి Firefox à°¨à±à°‚à°¡à°¿ à°µà±à°¯à°¾à°¸à°¾à°²à± మరియౠవీడియోలనౠసేవౠచేయవచà±à°šà±. -taglinestory_one = ఫైరà±à°«à°¾à°•à±à°¸à± à°¨à±à°‚à°¡à°¿ à°’à°• à°µà±à°¯à°¾à°¸à°‚, వీడియో లేదా పేజీ సేవౠపాకెటౠబటనౠకà±à°²à°¿à°•à± చేయండి. -taglinestory_two = ఠపరికరంలో అయినా, ఠసమయంలో అయినా పాకెటౠలో చూడండి. -tagssaved = టాగà±à°²à± చేరà±à°šà°¬à°¡à°¿à°‚ది -tos = కొనసాగించడం à°¦à±à°µà°¾à°°à°¾, మీరౠపాకెటౠయొకà±à°• <a href="%1$S" target="_blank"> సేవా నిబంధనలà±</a> మరియౠ<a href="%2$S" target="_blank"> గోపà±à°¯à°¤à°¾ విధానమà±</a> నౠఅంగీకరిచబడà±à°¤à°¾à°°à± -tryitnow = దీనà±à°¨à°¿ ఇపà±à°ªà±à°¡à± à°ªà±à°°à°¯à°¤à±à°¨à°¿à°‚à°šà°‚à°¡à°¿ -signinfirefox = ఫైరà±à°«à°¾à°•à±à°¸à±à°•à± à°ªà±à°°à°µà±‡à°¶à°¿à°‚à°šà°‚à°¡à°¿ -signupfirefox = ఫైరà±à°«à°¾à°•à±à°¸à±à°•à± à°ªà±à°°à°µà±‡à°¶à°¿à°‚à°šà°‚à°¡à°¿ -viewlist = జాబితానౠచూడండి - -# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label): -# "Pocket" is a brand name. -pocket-button.label = పాకెటౠ-pocket-button.tooltiptext = పాకెటౠకౠసేవౠచేయండి -saveToPocketCmd.label = పాకెటౠకౠసేవౠచేయండి -saveToPocketCmd.accesskey = k -saveLinkToPocketCmd.label = పాకెటౠకౠలింకౠనౠసేవౠచేయండి -saveLinkToPocketCmd.accesskey = o -pocketMenuitem.label = పాకెటౠజాబితా చూడండి diff --git a/browser/extensions/pocket/locale/th/pocket.properties b/browser/extensions/pocket/locale/th/pocket.properties deleted file mode 100644 index 6cdf1c9ec..000000000 --- a/browser/extensions/pocket/locale/th/pocket.properties +++ /dev/null @@ -1,43 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -addtags = เพิ่มป้ายà¸à¸³à¸à¸±à¸š -alreadyhaveacct = เป็นผู้ใช้ Pocket à¸à¸¢à¸¹à¹ˆà¹à¸¥à¹‰à¸§? -continueff = ดำเนินà¸à¸²à¸£à¸•à¹ˆà¸à¸”้วย Firefox -errorgeneric = เà¸à¸´à¸”ข้à¸à¸œà¸´à¸”พลาดระหว่างà¸à¸²à¸£à¸šà¸±à¸™à¸—ึà¸à¹„ปยัง Pocket -learnmore = เรียนรู้เพิ่มเติม -loginnow = เข้าสู่ระบบ -maxtaglength = ป้ายà¸à¸³à¸à¸±à¸šà¸–ูà¸à¸ˆà¸³à¸à¸±à¸”ไว้ที่ 25 ตัวà¸à¸±à¸à¸©à¸£ -mustbeconnected = คุณต้à¸à¸‡à¹€à¸Šà¸·à¹ˆà¸à¸¡à¸•à¹ˆà¸à¸à¸±à¸šà¸à¸´à¸™à¹€à¸—à¸à¸£à¹Œà¹€à¸™à¹‡à¸•à¸à¹ˆà¸à¸™à¸—ี่จะบันทึภPocket โปรดตรวจสà¸à¸šà¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸à¸¡à¸•à¹ˆà¸à¸‚à¸à¸‡à¸„ุณà¹à¸¥à¸°à¸¥à¸à¸‡à¸à¸µà¸à¸„รั้ง -onlylinkssaved = ลิงà¸à¹Œà¹€à¸—่านั้นที่สามารถถูà¸à¸šà¸±à¸™à¸—ึà¸à¹„ด้ -pagenotsaved = หน้าไม่ถูà¸à¸šà¸±à¸™à¸—ึภ-pageremoved = ลบหน้าà¹à¸¥à¹‰à¸§ -pagesaved = บันทึà¸à¹„ปยัง Pocket -processingremove = à¸à¸³à¸¥à¸±à¸‡à¸¥à¸šà¸«à¸™à¹‰à¸²â€¦ -processingtags = à¸à¸³à¸¥à¸±à¸‡à¹€à¸žà¸´à¹ˆà¸¡à¸›à¹‰à¸²à¸¢à¸à¸³à¸à¸±à¸šâ€¦ -removepage = ลบหน้า -save = บันทึภ-saving = à¸à¸³à¸¥à¸±à¸‡à¸šà¸±à¸™à¸—ึà¸â€¦ -signupemail = ลงทะเบียนด้วยà¸à¸µà¹€à¸¡à¸¥ -signuptosave = ไม่มีค่าใช้จ่ายในà¸à¸²à¸£à¸¥à¸‡à¸—ะเบียน Pocket -suggestedtags = ป้ายà¸à¸³à¸à¸±à¸šà¸—ี่ถูà¸à¹à¸™à¸°à¸™à¸³ -tagline = บันทึà¸à¸šà¸—ความà¹à¸¥à¸°à¸§à¸´à¸”ีโà¸à¸ˆà¸²à¸ Firefox เพื่à¸à¸”ูใน Pocket บนà¸à¸¸à¸›à¸à¸£à¸“์ต่าง ๆ เวลาไหนà¸à¹‡à¹„ด้ -taglinestory_one = คลิà¸à¸›à¸¸à¹ˆà¸¡ Pocket เพื่à¸à¸šà¸±à¸™à¸—ึà¸à¸šà¸—ความ วิดีโภหรืà¸à¸«à¸™à¹‰à¸²à¸ˆà¸²à¸ Firefox -taglinestory_two = ดูใน Pocket บนà¸à¸¸à¸›à¸à¸£à¸“์ต่าง ๆ เวลาไหนà¸à¹‡à¹„ด้ -tagssaved = ป้ายà¸à¸³à¸à¸±à¸šà¸–ูà¸à¹€à¸žà¸´à¹ˆà¸¡à¹à¸¥à¹‰à¸§ -tos = หาà¸à¸•à¸à¸¥à¸‡ หมายความว่า คุณยà¸à¸¡à¸£à¸±à¸š<a href="%1$S" target="_blank">เงื่à¸à¸™à¹„ขà¸à¸²à¸£à¹ƒà¸«à¹‰à¸šà¸£à¸´à¸à¸²à¸£</a> à¹à¸¥à¸°<a href="%2$S" target="_blank">นโยบายความเป็นส่วนตัว</a>ขà¸à¸‡ Pocket -tryitnow = ลà¸à¸‡à¹€à¸¥à¸¢ -signinfirefox = ลงชื่à¸à¹€à¸‚้าด้วย Firefox -signupfirefox = ลงทะเบียนà¸à¸±à¸š Firefox -viewlist = ดูรายà¸à¸²à¸£ - -# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label): -# "Pocket" is a brand name. -pocket-button.label = Pocket -pocket-button.tooltiptext = บันทึà¸à¹„ปยัง Pocket -saveToPocketCmd.label = บันทึà¸à¸«à¸™à¹‰à¸²à¹„ปยัง Pocket -saveToPocketCmd.accesskey = k -saveLinkToPocketCmd.label = บันทึà¸à¸¥à¸´à¸‡à¸à¹Œà¹„ปยัง Pocket -saveLinkToPocketCmd.accesskey = ป -pocketMenuitem.label = ดูรายà¸à¸²à¸£ Pocket diff --git a/browser/extensions/pocket/locale/tr/pocket.properties b/browser/extensions/pocket/locale/tr/pocket.properties deleted file mode 100644 index ea1970a7d..000000000 --- a/browser/extensions/pocket/locale/tr/pocket.properties +++ /dev/null @@ -1,43 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -addtags = Etiket ekle -alreadyhaveacct = Zaten Pocket kullanıcısı mısınız? -continueff = Firefox ile devam et -errorgeneric = Pocket’a kaydetmeye çalışırken bir hata oluÅŸtu. -learnmore = Daha fazla bilgi al -loginnow = GiriÅŸ yapın -maxtaglength = Etiketler en fazla 25 karakter olabilir -mustbeconnected = Pocket’a kaydetmek için internete baÄŸlı olmalısınız. Lütfen baÄŸlantınızı kontrol edip yeniden deneyin. -onlylinkssaved = Yalnızca baÄŸlantılar kaydedilebilir -pagenotsaved = Sayfa kaydedilmedi -pageremoved = Sayfa silindi -pagesaved = Pocket’a kaydedildi -processingremove = Sayfa siliniyor… -processingtags = Etiketler ekleniyor… -removepage = Sayfayı sil -save = Kaydet -saving = Kaydediliyor… -signupemail = E-postayla kaydol -signuptosave = Pocket’a kaydolun. Ãœcretsiz! -suggestedtags = Önerilen etiketler -tagline = Ä°stediÄŸiniz cihazda, istediÄŸiniz zaman görmek istediÄŸiniz yazı ve videoları Firefox’tan Pocket’a kaydedin. -taglinestory_one = Firefox’ta istediÄŸiniz yazıyı, videoyu veya sayfayı kaydetmek için Pocket düğmesine tıklayın. -taglinestory_two = Ä°stediÄŸiniz cihazda, istediÄŸiniz zaman Pocket’tan bakın. -tagssaved = Etiketler eklendi -tos = Devam ederseniz Pocket'ın <a href="%1$S" target="_blank">Kullanım KoÅŸullarını</a> ve <a href="%2$S" target="_blank">Gizlilik Ä°lkelerini</a> kabul etmiÅŸ sayılırsınız -tryitnow = Hemen deneyin -signinfirefox = Firefox ile giriÅŸ yap -signupfirefox = Firefox ile kaydol -viewlist = Listeyi göster - -# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label): -# "Pocket" is a brand name. -pocket-button.label = Pocket -pocket-button.tooltiptext = Pocket’a kaydet -saveToPocketCmd.label = Sayfayı Pocket’a kaydet -saveToPocketCmd.accesskey = k -saveLinkToPocketCmd.label = BaÄŸlantıyı Pocket’a kaydet -saveLinkToPocketCmd.accesskey = o -pocketMenuitem.label = Pocket listesini göster diff --git a/browser/extensions/pocket/locale/uk/pocket.properties b/browser/extensions/pocket/locale/uk/pocket.properties deleted file mode 100644 index d15049b2c..000000000 --- a/browser/extensions/pocket/locale/uk/pocket.properties +++ /dev/null @@ -1,43 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -addtags = Додати мітки -alreadyhaveacct = Вже викориÑтовуєте Pocket? -continueff = Продовжити з Firefox -errorgeneric = При Ñпробі Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð² Pocket ÑталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°. -learnmore = Докладніше -loginnow = Увійти -maxtaglength = Мітки мають Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ð´Ð¾ 25 Ñимволів -mustbeconnected = Ð”Ð»Ñ Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾ÑÑ‚Ñ– Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð² Pocket ви повинні бути підключені до Інтернету. Перевірте Ñвоє з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ñ– Ñпробуйте знову. -onlylinkssaved = Можна зберігати лише поÑÐ¸Ð»Ð°Ð½Ð½Ñ -pagenotsaved = Сторінку не збережено -pageremoved = Сторінку вилучено -pagesaved = Збережено в Pocket -processingremove = Ð’Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ñторінки… -processingtags = Ð”Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð¼Ñ–Ñ‚Ð¾Ðºâ€¦ -removepage = Вилучити Ñторінку -save = Зберегти -saving = ЗбереженнÑ… -signupemail = РеєÑÑ‚Ñ€Ð°Ñ†Ñ–Ñ Ð·Ð° адреÑою електронної пошти -signuptosave = ЗареєÑтруйтеÑÑ Ð² Pocket. Це безплатно. -suggestedtags = Пропоновані мітки -tagline = Зберігайте Ñтатті та відео з Firefox, щоб переглÑдати Ñ—Ñ… в Pocket на будь-Ñкому приÑтрої та в будь-Ñкий чаÑ. -taglinestory_one = ÐатиÑніть кнопку Pocket Ð´Ð»Ñ Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð±ÑƒÐ´ÑŒ-Ñкої Ñтатті, відео чи Ñторінки з Firefox. -taglinestory_two = ПереглÑдайте в Pocket на будь-Ñкому приÑтрої та в будь-Ñкий чаÑ. -tagssaved = Мітки додано -tos = Продовжуючи, ви погоджуєтеÑÑŒ з <a href="%1$S" target="_blank">Умовами викориÑтаннÑ</a> Ñ– <a href="%2$S" target="_blank">Політикою приватноÑÑ‚Ñ–</a> -tryitnow = Спробувати зараз -signinfirefox = Увійти через Firefox -signupfirefox = РеєÑÑ‚Ñ€Ð°Ñ†Ñ–Ñ Ñ‡ÐµÑ€ÐµÐ· Firefox -viewlist = ПереглÑд ÑпиÑку - -# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label): -# "Pocket" is a brand name. -pocket-button.label = Pocket -pocket-button.tooltiptext = Зберегти в Pocket -saveToPocketCmd.label = Зберегти Ñторінку в Pocket -saveToPocketCmd.accesskey = З -saveLinkToPocketCmd.label = Зберегти поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð² Pocket -saveLinkToPocketCmd.accesskey = п -pocketMenuitem.label = ПереглÑд ÑпиÑку Pocket diff --git a/browser/extensions/pocket/locale/zh-CN/pocket.properties b/browser/extensions/pocket/locale/zh-CN/pocket.properties deleted file mode 100644 index e913887b8..000000000 --- a/browser/extensions/pocket/locale/zh-CN/pocket.properties +++ /dev/null @@ -1,43 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -addtags = æ·»åŠ æ ‡ç¾ -alreadyhaveacct = 已有 Pocket è´¦å·ï¼Ÿ -continueff = 使用 Firefox ç»§ç» -errorgeneric = å°è¯•ä¿å˜åˆ° Pocket 时出错。 -learnmore = 详细了解 -loginnow = 登录 -maxtaglength = æ ‡ç¾ä¸èƒ½è¶…过 25 个å—符 -mustbeconnected = 您必须已连接互è”网æ‰èƒ½ä¿å˜åˆ° Pocket。请检查您的连接,然åŽå†è¯•ã€‚ -onlylinkssaved = åªæœ‰é“¾æŽ¥èƒ½è¢«ä¿å˜ -pagenotsaved = 页é¢æœªä¿å˜ -pageremoved = 页é¢å·²ç§»é™¤ -pagesaved = å·²ä¿å˜åˆ° Pocket -processingremove = æ£åœ¨ç§»é™¤é¡µé¢â€¦ -processingtags = æ£åœ¨æ·»åŠ æ ‡ç¾â€¦ -removepage = ç§»é™¤é¡µé¢ -save = ä¿å˜ -saving = æ£åœ¨ä¿å˜â€¦ -signupemail = 通过电å邮件注册 -signuptosave = å…费注册 Pocket。 -suggestedtags = 推èæ ‡ç¾ -tagline = 在 Firefox 上ä¿å˜æ–‡ç« 和视频,以供在任何时间ã€ä»»ä½•è®¾å¤‡ä¸Šç”¨ Pocket 访问。 -taglinestory_one = 点击 Pocket 按钮ä¿å˜ Firefox ä¸Šçš„ä»»ä½•æ–‡ç« ã€è§†é¢‘或页é¢ã€‚ -taglinestory_two = 在任何时间ã€ä»»ä½•è®¾å¤‡ä¸Šçš„ Pocket ä¸æŸ¥çœ‹ã€‚ -tagssaved = æ ‡ç¾å·²æ·»åŠ -tos = 继ç»åˆ™è¡¨ç¤ºæ‚¨åŒæ„ Pocket çš„<a href="%1$S" target="_blank">æœåŠ¡æ¡æ¬¾</a>å’Œ<a href="%2$S" target="_blank">éšç§æ”¿ç–</a> -tryitnow = ç«‹å³å°è¯• -signinfirefox = 使用 Firefox 登录 -signupfirefox = 使用 Firefox 注册 -viewlist = 查看列表 - -# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label): -# "Pocket" is a brand name. -pocket-button.label = Pocket -pocket-button.tooltiptext = ä¿å˜åˆ° Pocket -saveToPocketCmd.label = ä¿å˜é¡µé¢åˆ° Pocket -saveToPocketCmd.accesskey = k -saveLinkToPocketCmd.label = ä¿å˜é“¾æŽ¥åˆ° Pocket -saveLinkToPocketCmd.accesskey = o -pocketMenuitem.label = 查看 Pocket 列表 diff --git a/browser/extensions/pocket/locale/zh-TW/pocket.properties b/browser/extensions/pocket/locale/zh-TW/pocket.properties deleted file mode 100644 index 02cf5223b..000000000 --- a/browser/extensions/pocket/locale/zh-TW/pocket.properties +++ /dev/null @@ -1,43 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -addtags = 新增標籤 -alreadyhaveacct = 已經是 Pocket 使用者了嗎? -continueff = 使用 Firefox 繼續 -errorgeneric = 嘗試儲å˜è‡³ Pocket 時發生錯誤。 -learnmore = 更多資訊 -loginnow = 登入 -maxtaglength = 標籤僅能有 25 å—å…ƒ -mustbeconnected = æ‚¨å¿…é ˆé€£ç·šè‡³ç¶²éš›ç¶²è·¯æ‰èƒ½å„²å˜è‡³ Pocket。請檢查您的連線狀態後å†è©¦ä¸€æ¬¡ã€‚ -onlylinkssaved = 僅能儲å˜éˆçµ -pagenotsaved = 未儲å˜é é¢ -pageremoved = 已移除é é¢ -pagesaved = 已儲å˜è‡³ Pocket -processingremove = æ£åœ¨ç§»é™¤é é¢â€¦ -processingtags = æ£åœ¨æ–°å¢žæ¨™ç±¤â€¦ -removepage = 移除é é¢ -save = å„²å˜ -saving = 儲å˜ä¸â€¦ -signupemail = 使用電å郵件地å€è¨»å†Š -signuptosave = å…費註冊 Pocket 帳號。 -suggestedtags = 建è°çš„標籤 -tagline = 隨時隨地在任何è£ç½®ä¸Šçš„ Firefox 來儲å˜æ–‡ç« 與影片,ç¨å¾Œå†ç”¨ Pocket 開啟。 -taglinestory_one = 在 Firefox ä¸é»žæ“Š Pocket 按鈕來儲å˜ä»»ä½•æ–‡ç« ã€å½±ç‰‡æˆ–網é 。 -taglinestory_two = 隨時隨地在任何è£ç½®ä¸Šç”¨ Pocket 檢視。 -tagssaved = 已新增標籤 -tos = 繼續使用就代表您åŒæ„ Pocket çš„ <a href="%1$S" target="_blank">æœå‹™æ¢æ¬¾</a> åŠ <a href="%2$S" target="_blank">éš±ç§æ¬Šä¿è·æ”¿ç–</a> -tryitnow = 立刻試試 -signinfirefox = 使用 Firefox 登入 -signupfirefox = 使用 Firefox 註冊 -viewlist = 檢視清單 - -# LOCALIZATION NOTE(pocket-button.label, pocket-button.tooltiptext, saveToPocketCmd.label, saveLinkToPocketCmd.label, pocketMenuitem.label): -# "Pocket" is a brand name. -pocket-button.label = Pocket -pocket-button.tooltiptext = 儲å˜è‡³ Pocket -saveToPocketCmd.label = å°‡é é¢å„²å˜è‡³ Pocket -saveToPocketCmd.accesskey = k -saveLinkToPocketCmd.label = å°‡éˆçµå„²å˜è‡³ Pocket -saveLinkToPocketCmd.accesskey = o -pocketMenuitem.label = 檢視 Pocket 清單 diff --git a/browser/extensions/pocket/moz.build b/browser/extensions/pocket/moz.build deleted file mode 100644 index 52227bb8b..000000000 --- a/browser/extensions/pocket/moz.build +++ /dev/null @@ -1,20 +0,0 @@ -# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*- -# vim: set filetype=python: -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -DEFINES['MOZ_APP_VERSION'] = CONFIG['MOZ_APP_VERSION'] -DEFINES['MOZ_APP_MAXVERSION'] = CONFIG['MOZ_APP_MAXVERSION'] - -DIRS += ['locale'] - -FINAL_TARGET_FILES.features['firefox@getpocket.com'] += [ - 'bootstrap.js' -] - -FINAL_TARGET_PP_FILES.features['firefox@getpocket.com'] += [ - 'install.rdf.in' -] - -JAR_MANIFESTS += ['jar.mn'] diff --git a/browser/extensions/pocket/skin/linux/Toolbar-inverted.png b/browser/extensions/pocket/skin/linux/Toolbar-inverted.png Binary files differdeleted file mode 100644 index 68f5125ea..000000000 --- a/browser/extensions/pocket/skin/linux/Toolbar-inverted.png +++ /dev/null diff --git a/browser/extensions/pocket/skin/linux/Toolbar-inverted@2x.png b/browser/extensions/pocket/skin/linux/Toolbar-inverted@2x.png Binary files differdeleted file mode 100644 index 89056295c..000000000 --- a/browser/extensions/pocket/skin/linux/Toolbar-inverted@2x.png +++ /dev/null diff --git a/browser/extensions/pocket/skin/linux/Toolbar.png b/browser/extensions/pocket/skin/linux/Toolbar.png Binary files differdeleted file mode 100644 index be9b0e6d2..000000000 --- a/browser/extensions/pocket/skin/linux/Toolbar.png +++ /dev/null diff --git a/browser/extensions/pocket/skin/linux/Toolbar@2x.png b/browser/extensions/pocket/skin/linux/Toolbar@2x.png Binary files differdeleted file mode 100644 index 5dc4e754a..000000000 --- a/browser/extensions/pocket/skin/linux/Toolbar@2x.png +++ /dev/null diff --git a/browser/extensions/pocket/skin/linux/menuPanel.png b/browser/extensions/pocket/skin/linux/menuPanel.png Binary files differdeleted file mode 100644 index 55bc46cc9..000000000 --- a/browser/extensions/pocket/skin/linux/menuPanel.png +++ /dev/null diff --git a/browser/extensions/pocket/skin/linux/menuPanel@2x.png b/browser/extensions/pocket/skin/linux/menuPanel@2x.png Binary files differdeleted file mode 100644 index ad13ca4ce..000000000 --- a/browser/extensions/pocket/skin/linux/menuPanel@2x.png +++ /dev/null diff --git a/browser/extensions/pocket/skin/linux/pocket.css b/browser/extensions/pocket/skin/linux/pocket.css deleted file mode 100644 index 156964923..000000000 --- a/browser/extensions/pocket/skin/linux/pocket.css +++ /dev/null @@ -1,10 +0,0 @@ -@import url("chrome://pocket-shared/skin/pocket.css"); - -#nav-bar #pocket-button > .toolbarbutton-icon { - padding: 2px 6px; -} - -:-moz-any(#TabsToolbar, .widget-overflow-list) #pocket-button > .toolbarbutton-icon { - max-width: 18px; - padding: 0; -}
\ No newline at end of file diff --git a/browser/extensions/pocket/skin/osx/Toolbar-inverted.png b/browser/extensions/pocket/skin/osx/Toolbar-inverted.png Binary files differdeleted file mode 100644 index 0f4d57b4e..000000000 --- a/browser/extensions/pocket/skin/osx/Toolbar-inverted.png +++ /dev/null diff --git a/browser/extensions/pocket/skin/osx/Toolbar-inverted@2x.png b/browser/extensions/pocket/skin/osx/Toolbar-inverted@2x.png Binary files differdeleted file mode 100644 index 03c3b42d5..000000000 --- a/browser/extensions/pocket/skin/osx/Toolbar-inverted@2x.png +++ /dev/null diff --git a/browser/extensions/pocket/skin/osx/Toolbar-yosemite.png b/browser/extensions/pocket/skin/osx/Toolbar-yosemite.png Binary files differdeleted file mode 100644 index 28602b186..000000000 --- a/browser/extensions/pocket/skin/osx/Toolbar-yosemite.png +++ /dev/null diff --git a/browser/extensions/pocket/skin/osx/Toolbar-yosemite@2x.png b/browser/extensions/pocket/skin/osx/Toolbar-yosemite@2x.png Binary files differdeleted file mode 100644 index 53040cb46..000000000 --- a/browser/extensions/pocket/skin/osx/Toolbar-yosemite@2x.png +++ /dev/null diff --git a/browser/extensions/pocket/skin/osx/Toolbar.png b/browser/extensions/pocket/skin/osx/Toolbar.png Binary files differdeleted file mode 100644 index 1a8d7a51c..000000000 --- a/browser/extensions/pocket/skin/osx/Toolbar.png +++ /dev/null diff --git a/browser/extensions/pocket/skin/osx/Toolbar@2x.png b/browser/extensions/pocket/skin/osx/Toolbar@2x.png Binary files differdeleted file mode 100644 index 91bf3ef6f..000000000 --- a/browser/extensions/pocket/skin/osx/Toolbar@2x.png +++ /dev/null diff --git a/browser/extensions/pocket/skin/osx/menuPanel-yosemite.png b/browser/extensions/pocket/skin/osx/menuPanel-yosemite.png Binary files differdeleted file mode 100644 index 30b475cc0..000000000 --- a/browser/extensions/pocket/skin/osx/menuPanel-yosemite.png +++ /dev/null diff --git a/browser/extensions/pocket/skin/osx/menuPanel-yosemite@2x.png b/browser/extensions/pocket/skin/osx/menuPanel-yosemite@2x.png Binary files differdeleted file mode 100644 index 389d96ec7..000000000 --- a/browser/extensions/pocket/skin/osx/menuPanel-yosemite@2x.png +++ /dev/null diff --git a/browser/extensions/pocket/skin/osx/menuPanel.png b/browser/extensions/pocket/skin/osx/menuPanel.png Binary files differdeleted file mode 100644 index d2bf61888..000000000 --- a/browser/extensions/pocket/skin/osx/menuPanel.png +++ /dev/null diff --git a/browser/extensions/pocket/skin/osx/menuPanel@2x.png b/browser/extensions/pocket/skin/osx/menuPanel@2x.png Binary files differdeleted file mode 100644 index f58afbc4d..000000000 --- a/browser/extensions/pocket/skin/osx/menuPanel@2x.png +++ /dev/null diff --git a/browser/extensions/pocket/skin/osx/pocket.css b/browser/extensions/pocket/skin/osx/pocket.css deleted file mode 100644 index 534a881a5..000000000 --- a/browser/extensions/pocket/skin/osx/pocket.css +++ /dev/null @@ -1,42 +0,0 @@ -@import url("chrome://pocket-shared/skin/pocket.css"); - -#pocket-button[cui-areatype="toolbar"] > .toolbarbutton-icon { - max-width: 18px; - margin: 0; -} - -#pocket-button[cui-areatype="toolbar"][open] { - -moz-image-region: rect(36px, 18px, 54px, 0); -} - -@media (min-resolution: 2dppx) { - #panelMenu_pocket, - #menu_pocket, - #BMB_pocket { - list-style-image: url("chrome://pocket/content/panels/img/pocketmenuitem16@2x.png"); - } - - #panelMenu_pocket > .toolbarbutton-icon { - width: 16px; - } -} - -@media not all and (min-resolution: 1.1dppx) { - #pocket-button:hover:active:not([disabled="true"]):not([cui-areatype="menu-panel"]) { - -moz-image-region: rect(18px, 18px, 36px, 0); - } -} - -@media (min-resolution: 1.1dppx) { - #pocket-button[cui-areatype="toolbar"][open] { - -moz-image-region: rect(72px, 36px, 108px, 0); - } - - #pocket-button:hover:active:not([disabled="true"]):not([cui-areatype="menu-panel"]) { - -moz-image-region: rect(36px, 36px, 72px, 0); - } -} - -#PanelUI-pocketView[mainview=true] > .panel-subview-body > #pocket-panel-iframe { - border-radius: var(--arrowpanel-border-radius); -} diff --git a/browser/extensions/pocket/skin/shared/pocket.css b/browser/extensions/pocket/skin/shared/pocket.css deleted file mode 100644 index ec46e1890..000000000 --- a/browser/extensions/pocket/skin/shared/pocket.css +++ /dev/null @@ -1,79 +0,0 @@ -/* Bug 1164419 - increase Pocket panel size to accomidate wider Russian text. */ -panelmultiview[mainViewId=PanelUI-pocketView] > .panel-viewcontainer > .panel-viewstack > .panel-mainview:not([panelid="PanelUI-popup"]) { - max-width: 33em; /* standaloneSubviewWidth + 3 */ -} - -.cui-widget-panel[viewId="PanelUI-pocketView"] > .panel-arrowcontainer > .panel-arrowcontent { - padding-top: 0; - padding-bottom: 0; -} - -#PanelUI-pocketView > .panel-subview-body, -#PanelUI-pocketView { - overflow: visible; -} - -#pocket-button { - list-style-image: url("chrome://pocket/skin/Toolbar.png"); - -moz-image-region: rect(0, 18px, 18px, 0); -} - -toolbar[brighttext] #pocket-button { - list-style-image: url(chrome://pocket/skin/Toolbar-inverted.png); -} - -@media not all and (min-resolution: 1.1dppx) { - #pocket-button[cui-areatype="menu-panel"], - toolbarpaletteitem[place="palette"] > #pocket-button { - list-style-image: url(chrome://pocket/skin/menuPanel.png); - -moz-image-region: rect(0, 32px, 32px, 0); - } - - #pocket-button[cui-areatype="menu-panel"][panel-multiview-anchor=true] { - -moz-image-region: rect(32px, 32px, 64px, 0); - } -} - -@media (min-resolution: 1.1dppx) { - #pocket-button[cui-areatype="menu-panel"], - toolbarpaletteitem[place="palette"] > #pocket-button { - list-style-image: url(chrome://pocket/skin/menuPanel@2x.png); - -moz-image-region: rect(0px, 64px, 64px, 0); - } - - #pocket-button[cui-areatype="menu-panel"][panel-multiview-anchor=true] { - -moz-image-region: rect(64px, 64px, 128px, 0); - } -} - -#pocket-button[cui-areatype="toolbar"] { - -moz-image-region: rect(0, 18px, 18px, 0); -} - -#pocket-button[cui-areatype="toolbar"][open] { - -moz-image-region: rect(18px, 18px, 36px, 0); -} - -@media (min-resolution: 1.1dppx) { - #pocket-button { - list-style-image: url("chrome://pocket/skin/Toolbar@2x.png"); - } - - toolbar[brighttext] #pocket-button { - list-style-image: url("chrome://pocket/skin/Toolbar-inverted@2x.png"); - } - - #pocket-button[cui-areatype="toolbar"] { - -moz-image-region: rect(0, 36px, 36px, 0px); - } - - #pocket-button[cui-areatype="toolbar"][open] { - -moz-image-region: rect(36px, 36px, 72px, 0px); - } -} - -#panelMenu_pocket, -#menu_pocket, -#BMB_pocket { - list-style-image: url("chrome://pocket/content/panels/img/pocketmenuitem16.png"); -} diff --git a/browser/extensions/pocket/skin/windows/Toolbar-XP.png b/browser/extensions/pocket/skin/windows/Toolbar-XP.png Binary files differdeleted file mode 100644 index 9220a207f..000000000 --- a/browser/extensions/pocket/skin/windows/Toolbar-XP.png +++ /dev/null diff --git a/browser/extensions/pocket/skin/windows/Toolbar-aero.png b/browser/extensions/pocket/skin/windows/Toolbar-aero.png Binary files differdeleted file mode 100644 index 7b373acb9..000000000 --- a/browser/extensions/pocket/skin/windows/Toolbar-aero.png +++ /dev/null diff --git a/browser/extensions/pocket/skin/windows/Toolbar-aero@2x.png b/browser/extensions/pocket/skin/windows/Toolbar-aero@2x.png Binary files differdeleted file mode 100644 index 6e83dcc60..000000000 --- a/browser/extensions/pocket/skin/windows/Toolbar-aero@2x.png +++ /dev/null diff --git a/browser/extensions/pocket/skin/windows/Toolbar-inverted.png b/browser/extensions/pocket/skin/windows/Toolbar-inverted.png Binary files differdeleted file mode 100644 index 70e95f464..000000000 --- a/browser/extensions/pocket/skin/windows/Toolbar-inverted.png +++ /dev/null diff --git a/browser/extensions/pocket/skin/windows/Toolbar-inverted@2x.png b/browser/extensions/pocket/skin/windows/Toolbar-inverted@2x.png Binary files differdeleted file mode 100644 index ba0b7e2af..000000000 --- a/browser/extensions/pocket/skin/windows/Toolbar-inverted@2x.png +++ /dev/null diff --git a/browser/extensions/pocket/skin/windows/Toolbar-lunaSilver.png b/browser/extensions/pocket/skin/windows/Toolbar-lunaSilver.png Binary files differdeleted file mode 100644 index 5afe7ca44..000000000 --- a/browser/extensions/pocket/skin/windows/Toolbar-lunaSilver.png +++ /dev/null diff --git a/browser/extensions/pocket/skin/windows/Toolbar-win8.png b/browser/extensions/pocket/skin/windows/Toolbar-win8.png Binary files differdeleted file mode 100644 index 208dc03ae..000000000 --- a/browser/extensions/pocket/skin/windows/Toolbar-win8.png +++ /dev/null diff --git a/browser/extensions/pocket/skin/windows/Toolbar-win8@2x.png b/browser/extensions/pocket/skin/windows/Toolbar-win8@2x.png Binary files differdeleted file mode 100644 index 3704f0885..000000000 --- a/browser/extensions/pocket/skin/windows/Toolbar-win8@2x.png +++ /dev/null diff --git a/browser/extensions/pocket/skin/windows/Toolbar.png b/browser/extensions/pocket/skin/windows/Toolbar.png Binary files differdeleted file mode 100644 index 4801961f8..000000000 --- a/browser/extensions/pocket/skin/windows/Toolbar.png +++ /dev/null diff --git a/browser/extensions/pocket/skin/windows/Toolbar@2x.png b/browser/extensions/pocket/skin/windows/Toolbar@2x.png Binary files differdeleted file mode 100644 index f3a1cc738..000000000 --- a/browser/extensions/pocket/skin/windows/Toolbar@2x.png +++ /dev/null diff --git a/browser/extensions/pocket/skin/windows/menuPanel-aero.png b/browser/extensions/pocket/skin/windows/menuPanel-aero.png Binary files differdeleted file mode 100644 index 459e82634..000000000 --- a/browser/extensions/pocket/skin/windows/menuPanel-aero.png +++ /dev/null diff --git a/browser/extensions/pocket/skin/windows/menuPanel-aero@2x.png b/browser/extensions/pocket/skin/windows/menuPanel-aero@2x.png Binary files differdeleted file mode 100644 index eef525741..000000000 --- a/browser/extensions/pocket/skin/windows/menuPanel-aero@2x.png +++ /dev/null diff --git a/browser/extensions/pocket/skin/windows/menuPanel.png b/browser/extensions/pocket/skin/windows/menuPanel.png Binary files differdeleted file mode 100644 index 55bc46cc9..000000000 --- a/browser/extensions/pocket/skin/windows/menuPanel.png +++ /dev/null diff --git a/browser/extensions/pocket/skin/windows/menuPanel@2x.png b/browser/extensions/pocket/skin/windows/menuPanel@2x.png Binary files differdeleted file mode 100644 index ad13ca4ce..000000000 --- a/browser/extensions/pocket/skin/windows/menuPanel@2x.png +++ /dev/null diff --git a/browser/extensions/pocket/skin/windows/pocket.css b/browser/extensions/pocket/skin/windows/pocket.css deleted file mode 100644 index 011b821a9..000000000 --- a/browser/extensions/pocket/skin/windows/pocket.css +++ /dev/null @@ -1,16 +0,0 @@ -@import url("chrome://pocket-shared/skin/pocket.css"); - -#nav-bar #pocket-button > .toolbarbutton-icon { - padding: calc(var(--toolbarbutton-vertical-inner-padding)) 6px; -} - -:-moz-any(#TabsToolbar, .widget-overflow-list) #pocket-button > .toolbarbutton-icon { - max-width: 18px; - padding: 0; -} - -@media (-moz-windows-theme: luna-silver) and (max-resolution: 1dppx) { - #pocket-button { - list-style-image: url(Toolbar-lunaSilver.png); - } -} diff --git a/browser/extensions/webcompat/bootstrap.js b/browser/extensions/webcompat/bootstrap.js deleted file mode 100644 index 19141a0f5..000000000 --- a/browser/extensions/webcompat/bootstrap.js +++ /dev/null @@ -1,9 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -"use strict"; -function startup() {} -function shutdown() {} -function install() {} -function uninstall() {} diff --git a/browser/extensions/webcompat/install.rdf.in b/browser/extensions/webcompat/install.rdf.in deleted file mode 100644 index 2c4406f25..000000000 --- a/browser/extensions/webcompat/install.rdf.in +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0"?> -<!-- This Source Code Form is subject to the terms of the Mozilla Public - - License, v. 2.0. If a copy of the MPL was not distributed with this - - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - -#filter substitution - -<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:em="http://www.mozilla.org/2004/em-rdf#"> - - <Description about="urn:mozilla:install-manifest"> - <em:id>webcompat@mozilla.org</em:id> - <em:version>1.0</em:version> - <em:type>2</em:type> - <em:bootstrap>true</em:bootstrap> - <em:multiprocessCompatible>true</em:multiprocessCompatible> - - <!-- Target Application this extension can install into, - with minimum and maximum supported versions. --> - <em:targetApplication> - <Description> - <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id> - <em:minVersion>@MOZ_APP_VERSION@</em:minVersion> - <em:maxVersion>@MOZ_APP_MAXVERSION@</em:maxVersion> - </Description> - </em:targetApplication> - - <!-- Front End MetaData --> - <em:name>Web Compat</em:name> - <em:description>Urgent post-release fixes for web compatibility.</em:description> - </Description> -</RDF> diff --git a/browser/extensions/webcompat/moz.build b/browser/extensions/webcompat/moz.build deleted file mode 100644 index 7d592013b..000000000 --- a/browser/extensions/webcompat/moz.build +++ /dev/null @@ -1,16 +0,0 @@ -# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*- -# vim: set filetype=python: -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -DEFINES['MOZ_APP_VERSION'] = CONFIG['MOZ_APP_VERSION'] -DEFINES['MOZ_APP_MAXVERSION'] = CONFIG['MOZ_APP_MAXVERSION'] - -FINAL_TARGET_FILES.features['webcompat@mozilla.org'] += [ - 'bootstrap.js' -] - -FINAL_TARGET_PP_FILES.features['webcompat@mozilla.org'] += [ - 'install.rdf.in' -] diff --git a/browser/fonts/EmojiOneMozilla.ttf b/browser/fonts/EmojiOneMozilla.ttf Binary files differdeleted file mode 100644 index 50356509d..000000000 --- a/browser/fonts/EmojiOneMozilla.ttf +++ /dev/null diff --git a/browser/fonts/README.txt b/browser/fonts/README.txt index 188ea3fff..ac1f6d9de 100644 --- a/browser/fonts/README.txt +++ b/browser/fonts/README.txt @@ -1,9 +1,9 @@ -EmojiOne Mozilla +Twemoji Mozilla ================ -The upstream repository of EmojiOne Mozilla can be found at +The upstream repository of Twemoji Mozilla can be found at - https://github.com/mozilla/emojione-colr + https://github.com/mozilla/twemoji-colr Please refer commit history for the current version of the font. This file purposely omit the version, so there is no need to update it here. diff --git a/browser/fonts/TwemojiMozilla.ttf b/browser/fonts/TwemojiMozilla.ttf Binary files differnew file mode 100644 index 000000000..1933891d9 --- /dev/null +++ b/browser/fonts/TwemojiMozilla.ttf diff --git a/browser/fonts/moz.build b/browser/fonts/moz.build index b1a43e528..5cb98333b 100644 --- a/browser/fonts/moz.build +++ b/browser/fonts/moz.build @@ -7,5 +7,5 @@ if CONFIG['OS_ARCH'] in ('WINNT', 'Linux'): DIST_SUBDIR = '' FINAL_TARGET_FILES.fonts += [ - 'EmojiOneMozilla.ttf' + 'TwemojiMozilla.ttf' ] diff --git a/browser/installer/Makefile.in b/browser/installer/Makefile.in index 55df797ef..4a934fe45 100644 --- a/browser/installer/Makefile.in +++ b/browser/installer/Makefile.in @@ -13,11 +13,7 @@ MOZ_PKG_MANIFEST = $(srcdir)/package-manifest.in MOZ_PKG_DUPEFLAGS = -f $(srcdir)/allowed-dupes.mn # Some files have been already bundled with xulrunner -ifndef MOZ_MULET MOZ_PKG_FATAL_WARNINGS = 1 -else -DEFINES += -DMOZ_MULET -endif # When packaging an artifact build not all xpt files expected by the # packager will be present. @@ -61,9 +57,6 @@ DEFINES += -DMOZ_ANGLE_RENDERER=$(MOZ_ANGLE_RENDERER) ifdef MOZ_D3DCOMPILER_VISTA_DLL DEFINES += -DMOZ_D3DCOMPILER_VISTA_DLL=$(MOZ_D3DCOMPILER_VISTA_DLL) endif -ifdef MOZ_D3DCOMPILER_XP_DLL -DEFINES += -DMOZ_D3DCOMPILER_XP_DLL=$(MOZ_D3DCOMPILER_XP_DLL) -endif endif DEFINES += -DMOZ_CHILD_PROCESS_NAME=$(MOZ_CHILD_PROCESS_NAME) diff --git a/browser/installer/allowed-dupes.mn b/browser/installer/allowed-dupes.mn index 2ea55aff4..7baa6ebed 100644 --- a/browser/installer/allowed-dupes.mn +++ b/browser/installer/allowed-dupes.mn @@ -171,7 +171,7 @@ chrome/toolkit/skin/classic/global/dialog.css chrome/toolkit/skin/classic/global/dropmarker.css chrome/toolkit/skin/classic/global/global.css chrome/toolkit/skin/classic/global/groupbox.css -chrome/toolkit/skin/classic/global/icons/close-XPVista7.png +chrome/toolkit/skin/classic/global/icons/close-win7.png chrome/toolkit/skin/classic/global/icons/tabprompts-bgtexture.png chrome/toolkit/skin/classic/global/listbox.css chrome/toolkit/skin/classic/global/media/clicktoplay-bgtexture.png @@ -196,15 +196,21 @@ chrome/toolkit/skin/classic/global/toolbarbutton.css chrome/toolkit/skin/classic/global/tree.css chrome/toolkit/skin/classic/global/wizard.css chrome/toolkit/skin/classic/mozapps/downloads/buttons.png -chrome/toolkit/skin/classic/mozapps/downloads/downloadButtons-XP.png chrome/toolkit/skin/classic/mozapps/downloads/downloadButtons.png chrome/toolkit/skin/classic/mozapps/extensions/category-dictionaries.png chrome/toolkit/skin/classic/mozapps/extensions/category-experiments.png chrome/toolkit/skin/classic/mozapps/extensions/dictionaryGeneric.png chrome/toolkit/skin/classic/mozapps/extensions/experimentGeneric.png +chrome/toolkit/skin/classic/mozapps/extensions/category-themes.png +chrome/toolkit/skin/classic/mozapps/extensions/themeGeneric.png +chrome/toolkit/skin/classic/mozapps/extensions/category-languages.png +chrome/toolkit/skin/classic/mozapps/extensions/localeGeneric.png +chrome/toolkit/skin/classic/mozapps/extensions/category-extensions.png +chrome/toolkit/skin/classic/mozapps/extensions/extensionGeneric.png chrome/toolkit/skin/classic/mozapps/update/buttons.png -chrome/toolkit/skin/classic/mozapps/update/downloadButtons-XP.png chrome/toolkit/skin/classic/mozapps/update/downloadButtons.png +chrome/toolkit/skin/classic/mozapps/xpinstall/xpinstallItemGeneric.png + components/FxAccountsPush.js crashreporter.app/Contents/Resources/English.lproj/MainMenu.nib/classes.nib crashreporter.app/Contents/Resources/English.lproj/MainMenuRTL.nib/classes.nib diff --git a/browser/installer/package-manifest.in b/browser/installer/package-manifest.in index b24f828e4..5540feed9 100644 --- a/browser/installer/package-manifest.in +++ b/browser/installer/package-manifest.in @@ -113,7 +113,7 @@ ; [Base Browser Files] #ifndef XP_UNIX @BINPATH@/@MOZ_APP_NAME@.exe -@BINPATH@/firefox.VisualElementsManifest.xml +@BINPATH@/basilisk.VisualElementsManifest.xml @BINPATH@/browser/VisualElements/VisualElements_150.png @BINPATH@/browser/VisualElements/VisualElements_70.png #else @@ -156,6 +156,7 @@ @RESPATH@/browser/components/prebuilt-interfaces.manifest @RESPATH@/browser/components/interfaces.xpt #endif +@RESPATH@/browser/components/components.manifest @RESPATH@/components/alerts.xpt #ifdef ACCESSIBILITY #ifdef XP_WIN32 @@ -373,8 +374,6 @@ @RESPATH@/browser/components/devtools-startup.js @RESPATH@/browser/components/webideCli.js @RESPATH@/browser/components/webideComponents.manifest -@RESPATH@/browser/components/Experiments.manifest -@RESPATH@/browser/components/ExperimentsService.js @RESPATH@/browser/components/browser-newtab.xpt @RESPATH@/browser/components/aboutNewTabService.js @RESPATH@/browser/components/NewTabComponents.manifest @@ -416,10 +415,14 @@ @RESPATH@/components/addonManager.js @RESPATH@/components/amContentHandler.js @RESPATH@/components/amInstallTrigger.js +#ifdef MOZ_WEBEXTENSIONS @RESPATH@/components/amWebAPI.js +#endif @RESPATH@/components/amWebInstallListener.js @RESPATH@/components/nsBlocklistService.js +#ifdef MOZ_WEBEXTENSIONS @RESPATH@/components/nsBlocklistServiceContent.js +#endif #ifdef MOZ_UPDATER @RESPATH@/components/nsUpdateService.manifest @RESPATH@/components/nsUpdateService.js @@ -441,6 +444,7 @@ @RESPATH@/browser/components/nsSessionStore.js @RESPATH@/components/nsURLFormatter.manifest @RESPATH@/components/nsURLFormatter.js +@RESPATH@/browser/components/@DLL_PREFIX@browsercomps@DLL_SUFFIX@ @RESPATH@/components/txEXSLTRegExFunctions.manifest @RESPATH@/components/txEXSLTRegExFunctions.js @RESPATH@/components/toolkitplaces.manifest @@ -567,9 +571,11 @@ @RESPATH@/components/TestInterfaceJSMaplike.js #endif +#ifdef MOZ_WEBEXTENSIONS ; [Extensions] @RESPATH@/components/extensions-toolkit.manifest @RESPATH@/browser/components/extensions-browser.manifest +#endif ; Modules @RESPATH@/browser/modules/* @@ -599,10 +605,6 @@ #ifdef MOZ_D3DCOMPILER_VISTA_DLL @BINPATH@/@MOZ_D3DCOMPILER_VISTA_DLL@ #endif - -#ifdef MOZ_D3DCOMPILER_XP_DLL -@BINPATH@/@MOZ_D3DCOMPILER_XP_DLL@ -#endif #endif # MOZ_ANGLE_RENDERER ; [Browser Chrome Files] @@ -623,7 +625,6 @@ @RESPATH@/browser/chrome/icons/default/default32.png @RESPATH@/browser/chrome/icons/default/default48.png #endif -@RESPATH@/browser/features/* ; [Webide Files] @RESPATH@/browser/chrome/webide@JAREXT@ @@ -778,28 +779,6 @@ bin/libfreebl_32int64_3.so @BINPATH@/maintenanceservice_installer.exe #endif -; [Crash Reporter] -; -#ifdef MOZ_CRASHREPORTER -@RESPATH@/components/CrashService.manifest -@RESPATH@/components/CrashService.js -@RESPATH@/components/toolkit_crashservice.xpt -#ifdef XP_MACOSX -@BINPATH@/crashreporter.app/ -#else -@BINPATH@/crashreporter@BIN_SUFFIX@ -@BINPATH@/minidump-analyzer@BIN_SUFFIX@ -@RESPATH@/crashreporter.ini -#ifdef XP_UNIX -@RESPATH@/Throbber-small.gif -#endif -#endif -@RESPATH@/browser/crashreporter-override.ini -#ifdef MOZ_CRASHREPORTER_INJECTOR -@BINPATH@/breakpadinjector.dll -#endif -#endif - @RESPATH@/components/dom_audiochannel.xpt ; Shutdown Terminator @@ -818,15 +797,13 @@ bin/libfreebl_32int64_3.so ; media +#ifdef MOZ_EME @RESPATH@/gmp-clearkey/0.1/@DLL_PREFIX@clearkey@DLL_SUFFIX@ @RESPATH@/gmp-clearkey/0.1/clearkey.info +#endif ; gfx #ifdef XP_WIN @RESPATH@/components/GfxSanityTest.manifest @RESPATH@/components/SanityTest.js #endif - -#ifdef MOZ_MULET -#include ../../b2g/installer/package-manifest.in -#endif diff --git a/browser/installer/windows/Makefile.in b/browser/installer/windows/Makefile.in index fa6fd5ba9..600bdfeb6 100644 --- a/browser/installer/windows/Makefile.in +++ b/browser/installer/windows/Makefile.in @@ -5,15 +5,13 @@ include $(topsrcdir)/toolkit/mozapps/installer/package-name.mk CONFIG_DIR = instgen -SFX_MODULE = $(topsrcdir)/other-licenses/7zstub/firefox/7zSD.sfx +SFX_MODULE = $(topsrcdir)/other-licenses/7zstub/uxp/7zSD.sfx INSTALLER_FILES = \ app.tag \ nsis/installer.nsi \ nsis/uninstaller.nsi \ - nsis/stub.nsi \ nsis/shared.nsh \ - stub.tag \ $(NULL) ifdef MOZ_MAINTENANCE_SERVICE @@ -25,11 +23,6 @@ endif BRANDING_FILES = \ branding.nsi \ appname.bmp \ - bgintro.bmp \ - clock.bmp \ - particles.bmp \ - pencil.bmp \ - pencil-rtl.bmp \ wizHeader.bmp \ wizHeaderRTL.bmp \ wizWatermark.bmp \ @@ -90,9 +83,6 @@ $(CONFIG_DIR)/setup.exe:: --preprocess-single-file $(topsrcdir) \ $(PPL_LOCALE_ARGS) $(CONFIG_DIR) \ nsisstrings.properties nsisstrings.nlf - $(PYTHON) $(topsrcdir)/toolkit/mozapps/installer/windows/nsis/preprocess-locale.py \ - --convert-utf8-utf16le \ - $(srcdir)/nsis/oneoff_en-US.nsh $(CONFIG_DIR)/oneoff_en-US.nsh GARBARGE_DIRS += instgen diff --git a/browser/installer/windows/app.tag b/browser/installer/windows/app.tag index 479d9f714..7be6d2e42 100644 --- a/browser/installer/windows/app.tag +++ b/browser/installer/windows/app.tag @@ -1,4 +1,4 @@ ;!@Install@!UTF-8! -Title="Mozilla Firefox" +Title="Basilisk" RunProgram="setup.exe" ;!@InstallEnd@!
\ No newline at end of file diff --git a/browser/installer/windows/nsis/defines.nsi.in b/browser/installer/windows/nsis/defines.nsi.in index ffb23ff1c..5ad9b7966 100644 --- a/browser/installer/windows/nsis/defines.nsi.in +++ b/browser/installer/windows/nsis/defines.nsi.in @@ -21,15 +21,15 @@ !endif # These defines should match application.ini settings -!define AppName "Firefox" +!define AppName "Basilisk" !define AppVersion "@APP_VERSION@" !define GREVersion @MOZILLA_VERSION@ !define AB_CD "@AB_CD@" !define FileMainEXE "@MOZ_APP_NAME@.exe" -!define WindowClass "FirefoxMessageWindow" -!define DDEApplication "Firefox" -!define AppRegName "Firefox" +!define WindowClass "BasiliskMessageWindow" +!define DDEApplication "Basilisk" +!define AppRegName "Basilisk" !ifndef DEV_EDITION !define BrandShortName "@MOZ_APP_DISPLAYNAME@" @@ -55,14 +55,6 @@ !define UpdateChannel "@MOZ_UPDATE_CHANNEL@" !endif -# Due to official and beta using the same branding this is needed to -# differentiante between the url used by the stub for downloading. -!if "@MOZ_UPDATE_CHANNEL@" == "beta" -!define BETA_UPDATE_CHANNEL -!endif - -!define BaseURLStubPing "http://download-stats.mozilla.org/stub" - # ARCH is used when it is necessary to differentiate the x64 registry keys from # the x86 registry keys (e.g. the uninstall registry key). #ifdef HAVE_64BIT_BUILD @@ -71,7 +63,7 @@ !define MinSupportedVer "Microsoft Windows 7 x64" #else !define ARCH "x86" -!define MinSupportedVer "Microsoft Windows XP SP2" +!define MinSupportedVer "Microsoft Windows 7" #endif !define MinSupportedCPU "SSE2" @@ -85,7 +77,7 @@ VIProductVersion "1.0.0.0" VIAddVersionKey "ProductName" "${BrandShortName}" VIAddVersionKey "CompanyName" "${CompanyName}" #ifdef MOZ_OFFICIAL_BRANDING -VIAddVersionKey "LegalTrademarks" "${BrandShortName} is a Trademark of The Mozilla Foundation." +VIAddVersionKey "LegalTrademarks" "${BrandShortName} is a Trademark of Moonchild Productions." #endif VIAddVersionKey "LegalCopyright" "${CompanyName}" VIAddVersionKey "FileVersion" "${AppVersion}" @@ -93,12 +85,6 @@ VIAddVersionKey "ProductVersion" "${AppVersion}" # Comments is not used but left below commented out for future reference # VIAddVersionKey "Comments" "Comments" -# It isn't possible to get the size of the installation prior to downloading -# so the stub installer uses an estimate. The size is derived from the size of -# the complete installer, the size of the extracted complete installer, and at -# least 15 MB additional for working room. -!define APPROXIMATE_REQUIRED_SPACE_MB "145" - # Control positions in Dialog Units so they are placed correctly with # non-default DPI settings !define OPTIONS_ITEM_EDGE_DU 90u diff --git a/browser/installer/windows/nsis/installer.nsi b/browser/installer/windows/nsis/installer.nsi index 1f20c01eb..994c09279 100755 --- a/browser/installer/windows/nsis/installer.nsi +++ b/browser/installer/windows/nsis/installer.nsi @@ -253,7 +253,7 @@ Section "-InstallStartCleanup" ${InitHashAppModelId} "$INSTDIR" "Software\Mozilla\${AppName}\TaskBarIDs" ; Remove the updates directory for Vista and above - ${CleanUpdateDirectories} "Mozilla\Firefox" "Mozilla\updates" + ${CleanUpdateDirectories} "Mozilla\Basilisk" "Mozilla\updates" ${RemoveDeprecatedFiles} ${RemovePrecompleteEntries} "false" @@ -374,17 +374,17 @@ Section "-Application" APP_IDX ; it doesn't cause problems always add them. ${SetUninstallKeys} - ; On install always add the FirefoxHTML and FirefoxURL keys. - ; An empty string is used for the 5th param because FirefoxHTML is not a + ; On install always add the BasiliskHTML and BasiliskURL keys. + ; An empty string is used for the 5th param because BasiliskHTML is not a ; protocol handler. ${GetLongPath} "$INSTDIR\${FileMainEXE}" $8 StrCpy $2 "$\"$8$\" -osint -url $\"%1$\"" - ; In Win8, the delegate execute handler picks up the value in FirefoxURL and - ; FirefoxHTML to launch the desktop browser when it needs to. - ${AddDisabledDDEHandlerValues} "FirefoxHTML" "$2" "$8,1" \ + ; In Win8, the delegate execute handler picks up the value in BasiliskURL and + ; BasiliskHTML to launch the desktop browser when it needs to. + ${AddDisabledDDEHandlerValues} "BasiliskHTML" "$2" "$8,1" \ "${AppRegName} Document" "" - ${AddDisabledDDEHandlerValues} "FirefoxURL" "$2" "$8,1" "${AppRegName} URL" \ + ${AddDisabledDDEHandlerValues} "BasiliskURL" "$2" "$8,1" "${AppRegName} URL" \ "true" ; For pre win8, the following keys should only be set if we can write to HKLM. @@ -620,7 +620,7 @@ Section "-InstallEndCleanup" ; If we have something other than empty string now, write the value. ${If} "$0" != "" ClearErrors - WriteRegStr HKCU "Software\Mozilla\Firefox" "OldDefaultBrowserCommand" "$0" + WriteRegStr HKCU "Software\Mozilla\Basilisk" "OldDefaultBrowserCommand" "$0" ${EndIf} ${LogHeader} "Setting as the default browser" @@ -636,7 +636,7 @@ Section "-InstallEndCleanup" ${ElseIfNot} ${Errors} ${LogHeader} "Writing default-browser opt-out" ClearErrors - WriteRegStr HKCU "Software\Mozilla\Firefox" "DefaultBrowserOptOut" "True" + WriteRegStr HKCU "Software\Mozilla\Basilisk" "DefaultBrowserOptOut" "True" ${If} ${Errors} ${LogMsg} "Error writing default-browser opt-out" ${EndIf} @@ -1049,14 +1049,14 @@ Function preSummary WriteRegStr HKLM "Software\Mozilla" "${BrandShortName}InstallerTest" "Write Test" ${Unless} ${Errors} DeleteRegValue HKLM "Software\Mozilla" "${BrandShortName}InstallerTest" - ; Check if Firefox is the http handler for this user. + ; Check if Basilisk is the http handler for this user. SetShellVarContext current ; Set SHCTX to the current user ${IsHandlerForInstallDir} "http" $R9 ${If} $TmpVal == "HKLM" SetShellVarContext all ; Set SHCTX to all users ${EndIf} - ; If Firefox isn't the http handler for this user show the option to set - ; Firefox as the default browser. + ; If Basilisk isn't the http handler for this user show the option to set + ; Basilisk as the default browser. ${If} "$R9" != "true" ${AndIf} ${AtMostWin2008R2} WriteINIStr "$PLUGINSDIR\summary.ini" "Settings" NumFields "4" @@ -1139,13 +1139,11 @@ Function .onInit ; Don't install on systems that don't support SSE2. The parameter value of ; 10 is for PF_XMMI64_INSTRUCTIONS_AVAILABLE which will check whether the - ; SSE2 instruction set is available. + ; SSE2 instruction set is available. Result returned in $R7. System::Call "kernel32::IsProcessorFeaturePresent(i 10)i .R7" -!ifdef HAVE_64BIT_BUILD - ; Restrict x64 builds from being installed on x86 and pre Win7 - ${Unless} ${RunningX64} - ${OrUnless} ${AtLeastWin7} + ; Windows NT 6.0 and lower are not supported on any architecture. + ${Unless} ${AtLeastWin7} ${If} "$R7" == "0" strCpy $R7 "$(WARN_MIN_SUPPORTED_OSVER_CPU_MSG)" ${Else} @@ -1156,59 +1154,28 @@ Function .onInit Quit ${EndUnless} - SetRegView 64 -!else - StrCpy $R8 "0" - ${If} ${AtMostWin2000} - StrCpy $R8 "1" - ${EndIf} - - ${If} ${IsWinXP} - ${AndIf} ${AtMostServicePack} 1 - StrCpy $R8 "1" - ${EndIf} - - ${If} $R8 == "1" - ; XXX-rstrong - some systems failed the AtLeastWin2000 test that we - ; used to use for an unknown reason and likely fail the AtMostWin2000 - ; and possibly the IsWinXP test as well. To work around this also - ; check if the Windows NT registry Key exists and if it does if the - ; first char in CurrentVersion is equal to 3 (Windows NT 3.5 and - ; 3.5.1), 4 (Windows NT 4), or 5 (Windows 2000 and Windows XP). - StrCpy $R8 "" - ClearErrors - ReadRegStr $R8 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" "CurrentVersion" - StrCpy $R8 "$R8" 1 - ${If} ${Errors} - ${OrIf} "$R8" == "3" - ${OrIf} "$R8" == "4" - ${OrIf} "$R8" == "5" - ${If} "$R7" == "0" - strCpy $R7 "$(WARN_MIN_SUPPORTED_OSVER_CPU_MSG)" - ${Else} - strCpy $R7 "$(WARN_MIN_SUPPORTED_OSVER_MSG)" - ${EndIf} - MessageBox MB_OKCANCEL|MB_ICONSTOP "$R7" IDCANCEL +2 - ExecShell "open" "${URLSystemRequirements}" - Quit - ${EndIf} - ${EndUnless} -!endif - + ; SSE2 support ${If} "$R7" == "0" MessageBox MB_OKCANCEL|MB_ICONSTOP "$(WARN_MIN_SUPPORTED_CPU_MSG)" IDCANCEL +2 ExecShell "open" "${URLSystemRequirements}" Quit ${EndIf} +!ifdef HAVE_64BIT_BUILD + ${Unless} ${RunningX64} + MessageBox MB_OKCANCEL|MB_ICONSTOP "$(WARN_MIN_SUPPORTED_OSVER_MSG)" IDCANCEL +2 + ExecShell "open" "${URLSystemRequirements}" + Quit + ${EndUnless} + SetRegView 64 +!endif + ${InstallOnInitCommon} "$(WARN_MIN_SUPPORTED_OSVER_CPU_MSG)" ; The commands inside this ifndef are needed prior to NSIS 3.0a2 and can be ; removed after we require NSIS 3.0a2 or greater. !ifndef NSIS_PACKEDVERSION - ${If} ${AtLeastWinVista} - System::Call 'user32::SetProcessDPIAware()' - ${EndIf} + System::Call 'user32::SetProcessDPIAware()' !endif !insertmacro InitInstallOptionsFile "options.ini" diff --git a/browser/installer/windows/nsis/maintenanceservice_installer.nsi b/browser/installer/windows/nsis/maintenanceservice_installer.nsi index ef30c1360..1f73bac6a 100644 --- a/browser/installer/windows/nsis/maintenanceservice_installer.nsi +++ b/browser/installer/windows/nsis/maintenanceservice_installer.nsi @@ -78,7 +78,7 @@ SetOverwrite on "Software\Microsoft\Windows\CurrentVersion\Uninstall\MozillaMaintenanceService" ; Always install into the 32-bit location even if we have a 64-bit build. -; This is because we use only 1 service for all Firefox channels. +; This is because we use only 1 service for all Basilisk channels. ; Allow either x86 and x64 builds to exist at this location, depending on ; what is the latest build. InstallDir "$PROGRAMFILES32\${MaintFullName}\" @@ -120,10 +120,7 @@ Function .onInit SetSilent silent - ; On Windows 2000 we do not install the maintenance service. - ; We won't run this installer from the parent installer, but just in case - ; someone tries to execute it on Windows 2000... - ${Unless} ${AtLeastWinXP} + ${Unless} ${AtLeastWin7} Abort ${EndUnless} FunctionEnd diff --git a/browser/installer/windows/nsis/oneoff_en-US.nsh b/browser/installer/windows/nsis/oneoff_en-US.nsh deleted file mode 100644 index 62d95ade9..000000000 --- a/browser/installer/windows/nsis/oneoff_en-US.nsh +++ /dev/null @@ -1,12 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -; Custom strings for en-US. This is not in the locale directory so these strings -; aren't translated. -!define INDENT " " -!define INTRO_BLURB "Thanks for choosing $BrandFullName. We’re not just designed to be different, we’re different by design." -!define INSTALL_BLURB1 "You're about to enjoy the very latest in speed, flexibility and security so you're always in control." -!define INSTALL_BLURB2 "And you're joining a global community of users, contributors and developers working to make the best browser in the world." -!define INSTALL_BLURB3 "You even get a haiku:$\n${INDENT}Proudly non-profit$\n${INDENT}Free to innovate for you$\n${INDENT}And a better Web" -!undef INDENT diff --git a/browser/installer/windows/nsis/shared.nsh b/browser/installer/windows/nsis/shared.nsh index 8d7eea618..fb2239d24 100755 --- a/browser/installer/windows/nsis/shared.nsh +++ b/browser/installer/windows/nsis/shared.nsh @@ -10,12 +10,12 @@ System::Call "kernel32::ProcessIdToSessionId(i $0, *i ${NSIS_MAX_STRLEN} r9)" ; Determine if we're the protected UserChoice default or not. If so fix the - ; start menu tile. In case there are 2 Firefox installations, we only do + ; start menu tile. In case there are 2 Basilisk installations, we only do ; this if the application being updated is the default. ReadRegStr $0 HKCU "Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice" "ProgId" - ${If} $0 == "FirefoxURL" + ${If} $0 == "BasiliskURL" ${AndIf} $9 != 0 ; We're not running in session 0 - ReadRegStr $0 HKCU "Software\Classes\FirefoxURL\shell\open\command" "" + ReadRegStr $0 HKCU "Software\Classes\BasiliskURL\shell\open\command" "" ${GetPathFromString} "$0" $0 ${GetParent} "$0" $0 ${If} ${FileExists} "$0" @@ -327,13 +327,13 @@ ClearErrors EnumRegKey $7 HKCR "${FILE_TYPE}" 0 ${If} ${Errors} - WriteRegStr SHCTX "SOFTWARE\Classes\${FILE_TYPE}" "" "FirefoxHTML" + WriteRegStr SHCTX "SOFTWARE\Classes\${FILE_TYPE}" "" "BasiliskHTML" ${EndIf} - WriteRegStr SHCTX "SOFTWARE\Classes\${FILE_TYPE}\OpenWithProgids" "FirefoxHTML" "" + WriteRegStr SHCTX "SOFTWARE\Classes\${FILE_TYPE}\OpenWithProgids" "BasiliskHTML" "" !macroend !define AddAssociationIfNoneExist "!insertmacro AddAssociationIfNoneExist" -; Adds the protocol and file handler registry entries for making Firefox the +; Adds the protocol and file handler registry entries for making Basilisk the ; default handler (uses SHCTX). !macro SetHandlers ${GetLongPath} "$INSTDIR\${FileMainEXE}" $8 @@ -341,30 +341,30 @@ StrCpy $0 "SOFTWARE\Classes" StrCpy $2 "$\"$8$\" -osint -url $\"%1$\"" - ; Associate the file handlers with FirefoxHTML + ; Associate the file handlers with BasiliskHTML ReadRegStr $6 SHCTX "$0\.htm" "" - ${If} "$6" != "FirefoxHTML" - WriteRegStr SHCTX "$0\.htm" "" "FirefoxHTML" + ${If} "$6" != "BasiliskHTML" + WriteRegStr SHCTX "$0\.htm" "" "BasiliskHTML" ${EndIf} ReadRegStr $6 SHCTX "$0\.html" "" - ${If} "$6" != "FirefoxHTML" - WriteRegStr SHCTX "$0\.html" "" "FirefoxHTML" + ${If} "$6" != "BasiliskHTML" + WriteRegStr SHCTX "$0\.html" "" "BasiliskHTML" ${EndIf} ReadRegStr $6 SHCTX "$0\.shtml" "" - ${If} "$6" != "FirefoxHTML" - WriteRegStr SHCTX "$0\.shtml" "" "FirefoxHTML" + ${If} "$6" != "BasiliskHTML" + WriteRegStr SHCTX "$0\.shtml" "" "BasiliskHTML" ${EndIf} ReadRegStr $6 SHCTX "$0\.xht" "" - ${If} "$6" != "FirefoxHTML" - WriteRegStr SHCTX "$0\.xht" "" "FirefoxHTML" + ${If} "$6" != "BasiliskHTML" + WriteRegStr SHCTX "$0\.xht" "" "BasiliskHTML" ${EndIf} ReadRegStr $6 SHCTX "$0\.xhtml" "" - ${If} "$6" != "FirefoxHTML" - WriteRegStr SHCTX "$0\.xhtml" "" "FirefoxHTML" + ${If} "$6" != "BasiliskHTML" + WriteRegStr SHCTX "$0\.xhtml" "" "BasiliskHTML" ${EndIf} ${AddAssociationIfNoneExist} ".pdf" @@ -374,12 +374,12 @@ ${AddAssociationIfNoneExist} ".pdf" ${AddAssociationIfNoneExist} ".webm" - ; An empty string is used for the 5th param because FirefoxHTML is not a + ; An empty string is used for the 5th param because BasiliskHTML is not a ; protocol handler - ${AddDisabledDDEHandlerValues} "FirefoxHTML" "$2" "$8,1" \ + ${AddDisabledDDEHandlerValues} "BasiliskHTML" "$2" "$8,1" \ "${AppRegName} HTML Document" "" - ${AddDisabledDDEHandlerValues} "FirefoxURL" "$2" "$8,1" "${AppRegName} URL" \ + ${AddDisabledDDEHandlerValues} "BasiliskURL" "$2" "$8,1" "${AppRegName} URL" \ "true" ; An empty string is used for the 4th & 5th params because the following ; protocol handlers already have a display name and the additional keys @@ -449,35 +449,35 @@ WriteRegStr ${RegKey} "$0\Capabilities" "ApplicationIcon" "$8,0" WriteRegStr ${RegKey} "$0\Capabilities" "ApplicationName" "${BrandShortName}" - WriteRegStr ${RegKey} "$0\Capabilities\FileAssociations" ".htm" "FirefoxHTML" - WriteRegStr ${RegKey} "$0\Capabilities\FileAssociations" ".html" "FirefoxHTML" - WriteRegStr ${RegKey} "$0\Capabilities\FileAssociations" ".shtml" "FirefoxHTML" - WriteRegStr ${RegKey} "$0\Capabilities\FileAssociations" ".xht" "FirefoxHTML" - WriteRegStr ${RegKey} "$0\Capabilities\FileAssociations" ".xhtml" "FirefoxHTML" + WriteRegStr ${RegKey} "$0\Capabilities\FileAssociations" ".htm" "BasiliskHTML" + WriteRegStr ${RegKey} "$0\Capabilities\FileAssociations" ".html" "BasiliskHTML" + WriteRegStr ${RegKey} "$0\Capabilities\FileAssociations" ".shtml" "BasiliskHTML" + WriteRegStr ${RegKey} "$0\Capabilities\FileAssociations" ".xht" "BasiliskHTML" + WriteRegStr ${RegKey} "$0\Capabilities\FileAssociations" ".xhtml" "BasiliskHTML" WriteRegStr ${RegKey} "$0\Capabilities\StartMenu" "StartMenuInternet" "$R9" - WriteRegStr ${RegKey} "$0\Capabilities\URLAssociations" "ftp" "FirefoxURL" - WriteRegStr ${RegKey} "$0\Capabilities\URLAssociations" "http" "FirefoxURL" - WriteRegStr ${RegKey} "$0\Capabilities\URLAssociations" "https" "FirefoxURL" + WriteRegStr ${RegKey} "$0\Capabilities\URLAssociations" "ftp" "BasiliskURL" + WriteRegStr ${RegKey} "$0\Capabilities\URLAssociations" "http" "BasiliskURL" + WriteRegStr ${RegKey} "$0\Capabilities\URLAssociations" "https" "BasiliskURL" ; Vista Registered Application WriteRegStr ${RegKey} "Software\RegisteredApplications" "${AppRegName}" "$0\Capabilities" !macroend !define SetStartMenuInternet "!insertmacro SetStartMenuInternet" -; The IconHandler reference for FirefoxHTML can end up in an inconsistent state +; The IconHandler reference for BasiliskHTML can end up in an inconsistent state ; due to changes not being detected by the IconHandler for side by side ; installs (see bug 268512). The symptoms can be either an incorrect icon or no -; icon being displayed for files associated with Firefox (does not use SHCTX). +; icon being displayed for files associated with Basilisk (does not use SHCTX). !macro FixShellIconHandler RegKey ClearErrors - ReadRegStr $1 ${RegKey} "Software\Classes\FirefoxHTML\ShellEx\IconHandler" "" + ReadRegStr $1 ${RegKey} "Software\Classes\BasiliskHTML\ShellEx\IconHandler" "" ${Unless} ${Errors} - ReadRegStr $1 ${RegKey} "Software\Classes\FirefoxHTML\DefaultIcon" "" + ReadRegStr $1 ${RegKey} "Software\Classes\BasiliskHTML\DefaultIcon" "" ${GetLongPath} "$INSTDIR\${FileMainEXE}" $2 ${If} "$1" != "$2,1" - WriteRegStr ${RegKey} "Software\Classes\FirefoxHTML\DefaultIcon" "" "$2,1" + WriteRegStr ${RegKey} "Software\Classes\BasiliskHTML\DefaultIcon" "" "$2,1" ${EndIf} ${EndUnless} !macroend @@ -612,7 +612,7 @@ ; HKCU Software\Classes keys when associating handlers. The fix uses the merged ; view in HKCR to check for existance of an existing association. This macro ; cleans affected installations by removing the HKLM and HKCU value if it is set -; to FirefoxHTML when there is a value for PersistentHandler or by removing the +; to BasiliskHTML when there is a value for PersistentHandler or by removing the ; HKCU value when the HKLM value has a value other than an empty string. !macro FixBadFileAssociation FILE_TYPE ; Only delete the default value in case the key has values for OpenWithList, @@ -621,16 +621,16 @@ ReadRegStr $1 HKLM "Software\Classes\${FILE_TYPE}" "" ReadRegStr $2 HKCR "${FILE_TYPE}\PersistentHandler" "" ${If} "$2" != "" - ; Since there is a persistent handler remove FirefoxHTML as the default - ; value from both HKCU and HKLM if it set to FirefoxHTML. - ${If} "$0" == "FirefoxHTML" + ; Since there is a persistent handler remove BasiliskHTML as the default + ; value from both HKCU and HKLM if it set to BasiliskHTML. + ${If} "$0" == "BasiliskHTML" DeleteRegValue HKCU "Software\Classes\${FILE_TYPE}" "" ${EndIf} - ${If} "$1" == "FirefoxHTML" + ${If} "$1" == "BasiliskHTML" DeleteRegValue HKLM "Software\Classes\${FILE_TYPE}" "" ${EndIf} - ${ElseIf} "$0" == "FirefoxHTML" - ; Since KHCU is set to FirefoxHTML remove FirefoxHTML as the default value + ${ElseIf} "$0" == "BasiliskHTML" + ; Since KHCU is set to BasiliskHTML remove BasiliskHTML as the default value ; from HKCU if HKLM is set to a value other than an empty string. ${If} "$1" != "" DeleteRegValue HKCU "Software\Classes\${FILE_TYPE}" "" @@ -686,17 +686,17 @@ ; Only set the file and protocol handlers if the existing one under HKCR is ; for this install location. - ${IsHandlerForInstallDir} "FirefoxHTML" $R9 + ${IsHandlerForInstallDir} "BasiliskHTML" $R9 ${If} "$R9" == "true" - ; An empty string is used for the 5th param because FirefoxHTML is not a + ; An empty string is used for the 5th param because BasiliskHTML is not a ; protocol handler. - ${AddDisabledDDEHandlerValues} "FirefoxHTML" "$2" "$8,1" \ + ${AddDisabledDDEHandlerValues} "BasiliskHTML" "$2" "$8,1" \ "${AppRegName} HTML Document" "" ${EndIf} - ${IsHandlerForInstallDir} "FirefoxURL" $R9 + ${IsHandlerForInstallDir} "BasiliskURL" $R9 ${If} "$R9" == "true" - ${AddDisabledDDEHandlerValues} "FirefoxURL" "$2" "$8,1" \ + ${AddDisabledDDEHandlerValues} "BasiliskURL" "$2" "$8,1" \ "${AppRegName} URL" "true" ${EndIf} @@ -780,8 +780,8 @@ ${RegCleanAppHandler} "chrome" ; Remove protocol handler registry keys added by the MS shim - DeleteRegKey HKLM "Software\Classes\Firefox.URL" - DeleteRegKey HKCU "Software\Classes\Firefox.URL" + DeleteRegKey HKLM "Software\Classes\Basilisk.URL" + DeleteRegKey HKCU "Software\Classes\Basilisk.URL" ; Delete gopher from Capabilities\URLAssociations if it is present. ${StrFilter} "${FileMainEXE}" "+" "" "" $R9 @@ -792,10 +792,10 @@ DeleteRegValue HKLM "$0\Capabilities\URLAssociations" "gopher" ${EndUnless} - ; Delete gopher from the user's UrlAssociations if it points to FirefoxURL. + ; Delete gopher from the user's UrlAssociations if it points to BasiliskURL. StrCpy $0 "Software\Microsoft\Windows\Shell\Associations\UrlAssociations\gopher" ReadRegStr $2 HKCU "$0\UserChoice" "Progid" - ${If} "$2" == "FirefoxURL" + ${If} "$2" == "BasiliskURL" DeleteRegKey HKCU "$0" ${EndIf} !macroend @@ -943,7 +943,7 @@ ${If} $AddTaskbarSC == "" ; No need to check the default on Win8 and later ${If} ${AtMostWin2008R2} - ; Check if the Firefox is the http handler for this user + ; Check if the Basilisk is the http handler for this user SetShellVarContext current ; Set SHCTX to the current user ${IsHandlerForInstallDir} "http" $R9 ${If} $TmpVal == "HKLM" diff --git a/browser/installer/windows/nsis/stub.nsi b/browser/installer/windows/nsis/stub.nsi deleted file mode 100644 index 176f641b3..000000000 --- a/browser/installer/windows/nsis/stub.nsi +++ /dev/null @@ -1,2093 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -# Required Plugins: -# AppAssocReg -# CertCheck -# InetBgDL -# ShellLink -# UAC - -; Set verbosity to 3 (e.g. no script) to lessen the noise in the build logs -!verbose 3 - -SetDatablockOptimize on -SetCompress off -CRCCheck on - -RequestExecutionLevel user - -; The commands inside this ifdef require NSIS 3.0a2 or greater so the ifdef can -; be removed after we require NSIS 3.0a2 or greater. -!ifdef NSIS_PACKEDVERSION - Unicode true - ManifestSupportedOS all - ManifestDPIAware true -!endif - -!addplugindir ./ - -Var Dialog -Var Progressbar -Var ProgressbarMarqueeIntervalMS -Var LabelDownloading -Var LabelInstalling -Var LabelFreeSpace -Var CheckboxSetAsDefault -Var CheckboxShortcutOnBar ; Used for Quicklaunch or Taskbar as appropriate -Var CheckboxShortcutInStartMenu -Var CheckboxShortcutOnDesktop -Var CheckboxSendPing -Var CheckboxInstallMaintSvc -Var DirRequest -Var ButtonBrowse -Var LabelBlurb1 -Var LabelBlurb2 -Var LabelBlurb3 -Var BitmapBlurb1 -Var BitmapBlurb2 -Var BitmapBlurb3 -Var HwndBitmapBlurb1 -Var HwndBitmapBlurb2 -Var HWndBitmapBlurb3 - -Var FontNormal -Var FontItalic -Var FontBlurb - -Var WasOptionsButtonClicked -Var CanWriteToInstallDir -Var HasRequiredSpaceAvailable -Var IsDownloadFinished -Var DownloadSizeBytes -Var HalfOfDownload -Var DownloadReset -Var ExistingTopDir -Var SpaceAvailableBytes -Var InitialInstallDir -Var HandleDownload -Var CanSetAsDefault -Var InstallCounterStep -Var InstallStepSize -Var InstallTotalSteps -Var ProgressCompleted -Var ProgressTotal -Var TmpVal - -Var ExitCode -Var FirefoxLaunchCode - -; The first three tick counts are for the start of a phase and equate equate to -; the display of individual installer pages. -Var StartIntroPhaseTickCount -Var StartOptionsPhaseTickCount -Var StartDownloadPhaseTickCount -; Since the Intro and Options pages can be displayed multiple times the total -; seconds spent on each of these pages is reported. -Var IntroPhaseSeconds -Var OptionsPhaseSeconds -; The tick count for the last download. -Var StartLastDownloadTickCount -; The number of seconds from the start of the download phase until the first -; bytes are received. This is only recorded for first request so it is possible -; to determine connection issues for the first request. -Var DownloadFirstTransferSeconds -; The last four tick counts are for the end of a phase in the installation page. -Var EndDownloadPhaseTickCount -Var EndPreInstallPhaseTickCount -Var EndInstallPhaseTickCount -Var EndFinishPhaseTickCount - -Var InitialInstallRequirementsCode -Var ExistingProfile -Var ExistingVersion -Var ExistingBuildID -Var DownloadedBytes -Var DownloadRetryCount -Var OpenedDownloadPage -Var DownloadServerIP -Var PostSigningData - -Var ControlHeightPX -Var ControlRightPX - -; Uncomment the following to prevent pinging the metrics server when testing -; the stub installer -;!define STUB_DEBUG - -!define StubURLVersion "v7" - -; Successful install exit code -!define ERR_SUCCESS 0 - -/** - * The following errors prefixed with ERR_DOWNLOAD apply to the download phase. - */ -; The download was cancelled by the user -!define ERR_DOWNLOAD_CANCEL 10 - -; Too many attempts to download. The maximum attempts is defined in -; DownloadMaxRetries. -!define ERR_DOWNLOAD_TOO_MANY_RETRIES 11 - -/** - * The following errors prefixed with ERR_PREINSTALL apply to the pre-install - * check phase. - */ -; Unable to acquire a file handle to the downloaded file -!define ERR_PREINSTALL_INVALID_HANDLE 20 - -; The downloaded file's certificate is not trusted by the certificate store. -!define ERR_PREINSTALL_CERT_UNTRUSTED 21 - -; The downloaded file's certificate attribute values were incorrect. -!define ERR_PREINSTALL_CERT_ATTRIBUTES 22 - -; The downloaded file's certificate is not trusted by the certificate store and -; certificate attribute values were incorrect. -!define ERR_PREINSTALL_CERT_UNTRUSTED_AND_ATTRIBUTES 23 - -/** - * The following errors prefixed with ERR_INSTALL apply to the install phase. - */ -; The installation timed out. The installation timeout is defined by the number -; of progress steps defined in InstallTotalSteps and the install timer -; interval defined in InstallIntervalMS -!define ERR_INSTALL_TIMEOUT 30 - -; Maximum times to retry the download before displaying an error -!define DownloadMaxRetries 9 - -; Minimum size expected to download in bytes -!define DownloadMinSizeBytes 15728640 ; 15 MB - -; Maximum size expected to download in bytes -!define DownloadMaxSizeBytes 73400320 ; 70 MB - -; Interval before retrying to download. 3 seconds is used along with 10 -; attempted downloads (the first attempt along with 9 retries) to give a -; minimum of 30 seconds or retrying before giving up. -!define DownloadRetryIntervalMS 3000 - -; Interval for the download timer -!define DownloadIntervalMS 200 - -; Interval for the install timer -!define InstallIntervalMS 100 - -; The first step for the install progress bar. By starting with a large step -; immediate feedback is given to the user. -!define InstallProgressFirstStep 20 - -; The finish step size to quickly increment the progress bar after the -; installation has finished. -!define InstallProgressFinishStep 40 - -; Number of steps for the install progress. -; This might not be enough when installing on a slow network drive so it will -; fallback to downloading the full installer if it reaches this number. The size -; of the install progress step is increased when the full installer finishes -; instead of waiting. - -; Approximately 150 seconds with a 100 millisecond timer and a first step of 20 -; as defined by InstallProgressFirstStep. -!define /math InstallCleanTotalSteps ${InstallProgressFirstStep} + 1500 - -; Approximately 165 seconds (minus 0.2 seconds for each file that is removed) -; with a 100 millisecond timer and a first step of 20 as defined by -; InstallProgressFirstStep . -!define /math InstallPaveOverTotalSteps ${InstallProgressFirstStep} + 1800 - -; On Vista and above attempt to elevate Standard Users in addition to users that -; are a member of the Administrators group. -!define NONADMIN_ELEVATE - -!define CONFIG_INI "config.ini" - -!ifndef FILE_SHARE_READ - !define FILE_SHARE_READ 1 -!endif -!ifndef GENERIC_READ - !define GENERIC_READ 0x80000000 -!endif -!ifndef OPEN_EXISTING - !define OPEN_EXISTING 3 -!endif -!ifndef INVALID_HANDLE_VALUE - !define INVALID_HANDLE_VALUE -1 -!endif - -!include "nsDialogs.nsh" -!include "LogicLib.nsh" -!include "FileFunc.nsh" -!include "TextFunc.nsh" -!include "WinVer.nsh" -!include "WordFunc.nsh" - -!insertmacro GetParameters -!insertmacro GetOptions -!insertmacro LineFind -!insertmacro StrFilter - -!include "locales.nsi" -!include "branding.nsi" - -!include "defines.nsi" - -; Must be included after defines.nsi -!include "locale-fonts.nsh" - -; The OFFICIAL define is a workaround to support different urls for Release and -; Beta since they share the same branding when building with other branches that -; set the update channel to beta. -!ifdef OFFICIAL -!ifdef BETA_UPDATE_CHANNEL -!undef URLStubDownload -!define URLStubDownload "http://download.mozilla.org/?os=win&lang=${AB_CD}&product=firefox-beta-latest" -!undef URLManualDownload -!define URLManualDownload "https://www.mozilla.org/${AB_CD}/firefox/installer-help/?channel=beta&installer_lang=${AB_CD}" -!undef Channel -!define Channel "beta" -!endif -!endif - -!include "common.nsh" - -!insertmacro ElevateUAC -!insertmacro GetLongPath -!insertmacro GetPathFromString -!insertmacro GetParent -!insertmacro GetSingleInstallPath -!insertmacro GetTextWidthHeight -!insertmacro IsUserAdmin -!insertmacro RemovePrecompleteEntries -!insertmacro SetBrandNameVars -!insertmacro ITBL3Create -!insertmacro UnloadUAC - -VIAddVersionKey "FileDescription" "${BrandShortName} Stub Installer" -VIAddVersionKey "OriginalFilename" "setup-stub.exe" - -Name "$BrandFullName" -OutFile "setup-stub.exe" -icon "setup.ico" -XPStyle on -BrandingText " " -ChangeUI all "nsisui.exe" -!ifdef HAVE_64BIT_BUILD - InstallDir "$PROGRAMFILES64\${BrandFullName}\" -!else - InstallDir "$PROGRAMFILES32\${BrandFullName}\" -!endif - -!ifdef ${AB_CD}_rtl - LoadLanguageFile "locale-rtl.nlf" -!else - LoadLanguageFile "locale.nlf" -!endif - -!include "nsisstrings.nlf" - -!if "${AB_CD}" == "en-US" - ; Custom strings for en-US. This is done here so they aren't translated. - !include oneoff_en-US.nsh -!else - !define INTRO_BLURB "$(INTRO_BLURB1)" - !define INSTALL_BLURB1 "$(INSTALL_BLURB1)" - !define INSTALL_BLURB2 "$(INSTALL_BLURB2)" - !define INSTALL_BLURB3 "$(INSTALL_BLURB3)" -!endif - -Caption "$(WIN_CAPTION)" - -Page custom createDummy ; Needed to enable the Intro page's back button -Page custom createIntro leaveIntro ; Introduction page -Page custom createOptions leaveOptions ; Options page -Page custom createInstall ; Download / Installation page - -Function .onInit - ; Remove the current exe directory from the search order. - ; This only effects LoadLibrary calls and not implicitly loaded DLLs. - System::Call 'kernel32::SetDllDirectoryW(w "")' - - StrCpy $LANGUAGE 0 - ; This macro is used to set the brand name variables but the ini file method - ; isn't supported for the stub installer. - ${SetBrandNameVars} "$PLUGINSDIR\ignored.ini" - - ; Don't install on systems that don't support SSE2. The parameter value of - ; 10 is for PF_XMMI64_INSTRUCTIONS_AVAILABLE which will check whether the - ; SSE2 instruction set is available. - System::Call "kernel32::IsProcessorFeaturePresent(i 10)i .R7" - -!ifdef HAVE_64BIT_BUILD - ; Restrict x64 builds from being installed on x86 and pre Win7 - ${Unless} ${RunningX64} - ${OrUnless} ${AtLeastWin7} - ${If} "$R7" == "0" - strCpy $R7 "$(WARN_MIN_SUPPORTED_OSVER_CPU_MSG)" - ${Else} - strCpy $R7 "$(WARN_MIN_SUPPORTED_OSVER_MSG)" - ${EndIf} - MessageBox MB_OKCANCEL|MB_ICONSTOP "$R7" IDCANCEL +2 - ExecShell "open" "${URLSystemRequirements}" - Quit - ${EndUnless} - - SetRegView 64 -!else - StrCpy $R8 "0" - ${If} ${AtMostWin2000} - StrCpy $R8 "1" - ${EndIf} - - ${If} ${IsWinXP} - ${AndIf} ${AtMostServicePack} 1 - StrCpy $R8 "1" - ${EndIf} - - ${If} $R8 == "1" - ; XXX-rstrong - some systems failed the AtLeastWin2000 test that we - ; used to use for an unknown reason and likely fail the AtMostWin2000 - ; and possibly the IsWinXP test as well. To work around this also - ; check if the Windows NT registry Key exists and if it does if the - ; first char in CurrentVersion is equal to 3 (Windows NT 3.5 and - ; 3.5.1), 4 (Windows NT 4), or 5 (Windows 2000 and Windows XP). - StrCpy $R8 "" - ClearErrors - ReadRegStr $R8 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" "CurrentVersion" - StrCpy $R8 "$R8" 1 - ${If} ${Errors} - ${OrIf} "$R8" == "3" - ${OrIf} "$R8" == "4" - ${OrIf} "$R8" == "5" - ${If} "$R7" == "0" - strCpy $R7 "$(WARN_MIN_SUPPORTED_OSVER_CPU_MSG)" - ${Else} - strCpy $R7 "$(WARN_MIN_SUPPORTED_OSVER_MSG)" - ${EndIf} - MessageBox MB_OKCANCEL|MB_ICONSTOP "$R7" IDCANCEL +2 - ExecShell "open" "${URLSystemRequirements}" - Quit - ${EndIf} - ${EndUnless} -!endif - - ${If} "$R7" == "0" - MessageBox MB_OKCANCEL|MB_ICONSTOP "$(WARN_MIN_SUPPORTED_CPU_MSG)" IDCANCEL +2 - ExecShell "open" "${URLSystemRequirements}" - Quit - ${EndIf} - - ; Require elevation if the user can elevate - ${ElevateUAC} - -; The commands inside this ifndef are needed prior to NSIS 3.0a2 and can be -; removed after we require NSIS 3.0a2 or greater. -!ifndef NSIS_PACKEDVERSION - ${If} ${AtLeastWinVista} - System::Call 'user32::SetProcessDPIAware()' - ${EndIf} -!endif - - SetShellVarContext all ; Set SHCTX to HKLM - ${GetSingleInstallPath} "Software\Mozilla\${BrandFullNameInternal}" $R9 - - ${If} "$R9" == "false" - SetShellVarContext current ; Set SHCTX to HKCU - ${GetSingleInstallPath} "Software\Mozilla\${BrandFullNameInternal}" $R9 - - ${If} ${RunningX64} - ; In HKCU there is no WOW64 redirection, which means we may have gotten - ; the path to a 32-bit install even though we're 64-bit, or vice-versa. - ; In that case, just use the default path instead of offering an upgrade. - ; But only do that override if the existing install is in Program Files, - ; because that's the only place we can be sure is specific - ; to either 32 or 64 bit applications. - ; The WordFind syntax below searches for the first occurence of the - ; "delimiter" (the Program Files path) in the install path and returns - ; anything that appears before that. If nothing appears before that, - ; then the install is under Program Files (32 or 64). -!ifdef HAVE_64BIT_BUILD - ${WordFind} $R9 $PROGRAMFILES32 "+1{" $0 -!else - ${WordFind} $R9 $PROGRAMFILES64 "+1{" $0 -!endif - ${If} $0 == "" - StrCpy $R9 "false" - ${EndIf} - ${EndIf} - ${EndIf} - - ${If} "$R9" != "false" - StrCpy $INSTDIR "$R9" - ${EndIf} - - ; Used to determine if the default installation directory was used. - StrCpy $InitialInstallDir "$INSTDIR" - - ClearErrors - WriteRegStr HKLM "Software\Mozilla" "${BrandShortName}InstallerTest" \ - "Write Test" - - ; Only display set as default when there is write access to HKLM and on Win7 - ; and below. - ${If} ${Errors} - ${OrIf} ${AtLeastWin8} - StrCpy $CanSetAsDefault "false" - StrCpy $CheckboxSetAsDefault "0" - ${Else} - DeleteRegValue HKLM "Software\Mozilla" "${BrandShortName}InstallerTest" - StrCpy $CanSetAsDefault "true" - ${EndIf} - - ; The interval in MS used for the progress bars set as marquee. - ${If} ${AtLeastWinVista} - StrCpy $ProgressbarMarqueeIntervalMS "10" - ${Else} - StrCpy $ProgressbarMarqueeIntervalMS "50" - ${EndIf} - - ; Initialize the majority of variables except those that need to be reset - ; when a page is displayed. - StrCpy $IntroPhaseSeconds "0" - StrCpy $OptionsPhaseSeconds "0" - StrCpy $EndPreInstallPhaseTickCount "0" - StrCpy $EndInstallPhaseTickCount "0" - StrCpy $InitialInstallRequirementsCode "" - StrCpy $IsDownloadFinished "" - StrCpy $FirefoxLaunchCode "0" - StrCpy $CheckboxShortcutOnBar "1" - StrCpy $CheckboxShortcutInStartMenu "1" - StrCpy $CheckboxShortcutOnDesktop "1" - StrCpy $CheckboxSendPing "1" -!ifdef MOZ_MAINTENANCE_SERVICE - StrCpy $CheckboxInstallMaintSvc "1" -!else - StrCpy $CheckboxInstallMaintSvc "0" -!endif - StrCpy $WasOptionsButtonClicked "0" - - StrCpy $0 "" -!ifdef FONT_FILE1 - ${If} ${FileExists} "$FONTS\${FONT_FILE1}" - StrCpy $0 "${FONT_NAME1}" - ${EndIf} -!endif - -!ifdef FONT_FILE2 - ${If} $0 == "" - ${AndIf} ${FileExists} "$FONTS\${FONT_FILE2}" - StrCpy $0 "${FONT_NAME2}" - ${EndIf} -!endif - - ${If} $0 == "" - StrCpy $0 "$(^Font)" - ${EndIf} - - CreateFont $FontBlurb "$0" "12" "500" - CreateFont $FontNormal "$0" "11" "500" - CreateFont $FontItalic "$0" "11" "500" /ITALIC - - InitPluginsDir - File /oname=$PLUGINSDIR\bgintro.bmp "bgintro.bmp" - File /oname=$PLUGINSDIR\appname.bmp "appname.bmp" - File /oname=$PLUGINSDIR\clock.bmp "clock.bmp" - File /oname=$PLUGINSDIR\particles.bmp "particles.bmp" -!ifdef ${AB_CD}_rtl - ; The horizontally flipped pencil looks better in RTL - File /oname=$PLUGINSDIR\pencil.bmp "pencil-rtl.bmp" -!else - File /oname=$PLUGINSDIR\pencil.bmp "pencil.bmp" -!endif -FunctionEnd - -; .onGUIInit isn't needed except for RTL locales -!ifdef ${AB_CD}_rtl -Function .onGUIInit - ; Since NSIS RTL support doesn't mirror progress bars use Windows mirroring. - ${NSD_AddExStyle} $HWNDPARENT ${WS_EX_LAYOUTRTL} - ${RemoveExStyle} $HWNDPARENT ${WS_EX_RTLREADING} - ${RemoveExStyle} $HWNDPARENT ${WS_EX_RIGHT} - ${NSD_AddExStyle} $HWNDPARENT ${WS_EX_LEFT}|${WS_EX_LTRREADING} -FunctionEnd -!endif - -Function .onGUIEnd - Delete "$PLUGINSDIR\_temp" - Delete "$PLUGINSDIR\download.exe" - Delete "$PLUGINSDIR\${CONFIG_INI}" - - ${UnloadUAC} -FunctionEnd - -Function .onUserAbort - ${NSD_KillTimer} StartDownload - ${NSD_KillTimer} OnDownload - ${NSD_KillTimer} CheckInstall - ${NSD_KillTimer} FinishInstall - ${NSD_KillTimer} FinishProgressBar - ${NSD_KillTimer} DisplayDownloadError - - ${If} "$IsDownloadFinished" != "" - Call DisplayDownloadError - ; Aborting the abort will allow SendPing which is called by - ; DisplayDownloadError to hide the installer window and close the installer - ; after it sends the metrics ping. - Abort - ${EndIf} -FunctionEnd - -Function SendPing - HideWindow - ; Try to send a ping if a download was attempted - ${If} $CheckboxSendPing == 1 - ${AndIf} $IsDownloadFinished != "" - ; Get the tick count for the completion of all phases. - System::Call "kernel32::GetTickCount()l .s" - Pop $EndFinishPhaseTickCount - - ; When the value of $IsDownloadFinished is false the download was started - ; but didn't finish. In this case the tick count stored in - ; $EndFinishPhaseTickCount is used to determine how long the download was - ; in progress. - ${If} "$IsDownloadFinished" == "false" - ${OrIf} "$EndDownloadPhaseTickCount" == "" - StrCpy $EndDownloadPhaseTickCount "$EndFinishPhaseTickCount" - ; Cancel the download in progress - InetBgDL::Get /RESET /END - ${EndIf} - - - ; When $DownloadFirstTransferSeconds equals an empty string the download - ; never successfully started so set the value to 0. It will be possible to - ; determine that the download didn't successfully start from the seconds for - ; the last download. - ${If} "$DownloadFirstTransferSeconds" == "" - StrCpy $DownloadFirstTransferSeconds "0" - ${EndIf} - - ; When $StartLastDownloadTickCount equals an empty string the download never - ; successfully started so set the value to $EndDownloadPhaseTickCount to - ; compute the correct value. - ${If} $StartLastDownloadTickCount == "" - ; This could happen if the download never successfully starts - StrCpy $StartLastDownloadTickCount "$EndDownloadPhaseTickCount" - ${EndIf} - - ; When $EndPreInstallPhaseTickCount equals 0 the installation phase was - ; never completed so set its value to $EndFinishPhaseTickCount to compute - ; the correct value. - ${If} "$EndPreInstallPhaseTickCount" == "0" - StrCpy $EndPreInstallPhaseTickCount "$EndFinishPhaseTickCount" - ${EndIf} - - ; When $EndInstallPhaseTickCount equals 0 the installation phase was never - ; completed so set its value to $EndFinishPhaseTickCount to compute the - ; correct value. - ${If} "$EndInstallPhaseTickCount" == "0" - StrCpy $EndInstallPhaseTickCount "$EndFinishPhaseTickCount" - ${EndIf} - - ; Get the seconds elapsed from the start of the download phase to the end of - ; the download phase. - ${GetSecondsElapsed} "$StartDownloadPhaseTickCount" "$EndDownloadPhaseTickCount" $0 - - ; Get the seconds elapsed from the start of the last download to the end of - ; the last download. - ${GetSecondsElapsed} "$StartLastDownloadTickCount" "$EndDownloadPhaseTickCount" $1 - - ; Get the seconds elapsed from the end of the download phase to the - ; completion of the pre-installation check phase. - ${GetSecondsElapsed} "$EndDownloadPhaseTickCount" "$EndPreInstallPhaseTickCount" $2 - - ; Get the seconds elapsed from the end of the pre-installation check phase - ; to the completion of the installation phase. - ${GetSecondsElapsed} "$EndPreInstallPhaseTickCount" "$EndInstallPhaseTickCount" $3 - - ; Get the seconds elapsed from the end of the installation phase to the - ; completion of all phases. - ${GetSecondsElapsed} "$EndInstallPhaseTickCount" "$EndFinishPhaseTickCount" $4 - -!ifdef HAVE_64BIT_BUILD - StrCpy $R0 "1" -!else - StrCpy $R0 "0" -!endif - - ${If} ${RunningX64} - StrCpy $R1 "1" - ${Else} - StrCpy $R1 "0" - ${EndIf} - - ; Though these values are sometimes incorrect due to bug 444664 it happens - ; so rarely it isn't worth working around it by reading the registry values. - ${WinVerGetMajor} $5 - ${WinVerGetMinor} $6 - ${WinVerGetBuild} $7 - ${WinVerGetServicePackLevel} $8 - ${If} ${IsServerOS} - StrCpy $9 "1" - ${Else} - StrCpy $9 "0" - ${EndIf} - - ${If} "$ExitCode" == "${ERR_SUCCESS}" - ReadINIStr $R5 "$INSTDIR\application.ini" "App" "Version" - ReadINIStr $R6 "$INSTDIR\application.ini" "App" "BuildID" - ${Else} - StrCpy $R5 "0" - StrCpy $R6 "0" - ${EndIf} - - ; Whether installed into the default installation directory - ${GetLongPath} "$INSTDIR" $R7 - ${GetLongPath} "$InitialInstallDir" $R8 - ${If} "$R7" == "$R8" - StrCpy $R7 "1" - ${Else} - StrCpy $R7 "0" - ${EndIf} - - ClearErrors - WriteRegStr HKLM "Software\Mozilla" "${BrandShortName}InstallerTest" \ - "Write Test" - ${If} ${Errors} - StrCpy $R8 "0" - ${Else} - DeleteRegValue HKLM "Software\Mozilla" "${BrandShortName}InstallerTest" - StrCpy $R8 "1" - ${EndIf} - - ${If} "$DownloadServerIP" == "" - StrCpy $DownloadServerIP "Unknown" - ${EndIf} - - StrCpy $R2 "" - SetShellVarContext current ; Set SHCTX to the current user - ReadRegStr $R2 HKCU "Software\Classes\http\shell\open\command" "" - ${If} $R2 != "" - ${GetPathFromString} "$R2" $R2 - ${GetParent} "$R2" $R3 - ${GetLongPath} "$R3" $R3 - ${If} $R3 == $INSTDIR - StrCpy $R2 "1" ; This Firefox install is set as default. - ${Else} - StrCpy $R2 "$R2" "" -11 # length of firefox.exe - ${If} "$R2" == "${FileMainEXE}" - StrCpy $R2 "2" ; Another Firefox install is set as default. - ${Else} - StrCpy $R2 "0" - ${EndIf} - ${EndIf} - ${Else} - StrCpy $R2 "0" ; Firefox is not set as default. - ${EndIf} - - ${If} "$R2" == "0" - ${AndIf} ${AtLeastWinVista} - ; Check to see if this install location is currently set as the default - ; browser by Default Programs which is only available on Vista and above. - ClearErrors - ReadRegStr $R3 HKLM "Software\RegisteredApplications" "${AppRegName}" - ${Unless} ${Errors} - AppAssocReg::QueryAppIsDefaultAll "${AppRegName}" "effective" - Pop $R3 - ${If} $R3 == "1" - StrCpy $R3 "" - ReadRegStr $R2 HKLM "Software\Classes\http\shell\open\command" "" - ${If} $R2 != "" - ${GetPathFromString} "$R2" $R2 - ${GetParent} "$R2" $R3 - ${GetLongPath} "$R3" $R3 - ${If} $R3 == $INSTDIR - StrCpy $R2 "1" ; This Firefox install is set as default. - ${Else} - StrCpy $R2 "$R2" "" -11 # length of firefox.exe - ${If} "$R2" == "${FileMainEXE}" - StrCpy $R2 "2" ; Another Firefox install is set as default. - ${Else} - StrCpy $R2 "0" - ${EndIf} - ${EndIf} - ${Else} - StrCpy $R2 "0" ; Firefox is not set as default. - ${EndIf} - ${EndIf} - ${EndUnless} - ${EndIf} - - ${If} $CanSetAsDefault == "true" - ${If} $CheckboxSetAsDefault == "1" - StrCpy $R3 "2" - ${Else} - StrCpy $R3 "3" - ${EndIf} - ${Else} - ${If} ${AtLeastWin8} - StrCpy $R3 "1" - ${Else} - StrCpy $R3 "0" - ${EndIf} - ${EndIf} - -!ifdef STUB_DEBUG - MessageBox MB_OK "${BaseURLStubPing} \ - $\nStub URL Version = ${StubURLVersion}${StubURLVersionAppend} \ - $\nBuild Channel = ${Channel} \ - $\nUpdate Channel = ${UpdateChannel} \ - $\nLocale = ${AB_CD} \ - $\nFirefox x64 = $R0 \ - $\nRunning x64 Windows = $R1 \ - $\nMajor = $5 \ - $\nMinor = $6 \ - $\nBuild = $7 \ - $\nServicePack = $8 \ - $\nIsServer = $9 \ - $\nExit Code = $ExitCode \ - $\nFirefox Launch Code = $FirefoxLaunchCode \ - $\nDownload Retry Count = $DownloadRetryCount \ - $\nDownloaded Bytes = $DownloadedBytes \ - $\nDownload Size Bytes = $DownloadSizeBytes \ - $\nIntroduction Phase Seconds = $IntroPhaseSeconds \ - $\nOptions Phase Seconds = $OptionsPhaseSeconds \ - $\nDownload Phase Seconds = $0 \ - $\nLast Download Seconds = $1 \ - $\nDownload First Transfer Seconds = $DownloadFirstTransferSeconds \ - $\nPreinstall Phase Seconds = $2 \ - $\nInstall Phase Seconds = $3 \ - $\nFinish Phase Seconds = $4 \ - $\nInitial Install Requirements Code = $InitialInstallRequirementsCode \ - $\nOpened Download Page = $OpenedDownloadPage \ - $\nExisting Profile = $ExistingProfile \ - $\nExisting Version = $ExistingVersion \ - $\nExisting Build ID = $ExistingBuildID \ - $\nNew Version = $R5 \ - $\nNew Build ID = $R6 \ - $\nDefault Install Dir = $R7 \ - $\nHas Admin = $R8 \ - $\nDefault Status = $R2 \ - $\nSet As Sefault Status = $R3 \ - $\nDownload Server IP = $DownloadServerIP \ - $\nPost-Signing Data = $PostSigningData" - ; The following will exit the installer - SetAutoClose true - StrCpy $R9 "2" - Call RelativeGotoPage -!else - ${NSD_CreateTimer} OnPing ${DownloadIntervalMS} - InetBgDL::Get "${BaseURLStubPing}/${StubURLVersion}${StubURLVersionAppend}/${Channel}/${UpdateChannel}/${AB_CD}/$R0/$R1/$5/$6/$7/$8/$9/$ExitCode/$FirefoxLaunchCode/$DownloadRetryCount/$DownloadedBytes/$DownloadSizeBytes/$IntroPhaseSeconds/$OptionsPhaseSeconds/$0/$1/$DownloadFirstTransferSeconds/$2/$3/$4/$InitialInstallRequirementsCode/$OpenedDownloadPage/$ExistingProfile/$ExistingVersion/$ExistingBuildID/$R5/$R6/$R7/$R8/$R2/$R3/$DownloadServerIP/$PostSigningData" \ - "$PLUGINSDIR\_temp" /END -!endif - ${Else} - ${If} "$IsDownloadFinished" == "false" - ; Cancel the download in progress - InetBgDL::Get /RESET /END - ${EndIf} - ; The following will exit the installer - SetAutoClose true - StrCpy $R9 "2" - Call RelativeGotoPage - ${EndIf} -FunctionEnd - -Function createDummy -FunctionEnd - -Function createIntro - nsDialogs::Create /NOUNLOAD 1018 - Pop $Dialog - - GetFunctionAddress $0 OnBack - nsDialogs::OnBack /NOUNLOAD $0 - -!ifdef ${AB_CD}_rtl - ; For RTL align the text with the top of the F in the Firefox bitmap - StrCpy $0 "${INTRO_BLURB_RTL_TOP_DU}" -!else - ; For LTR align the text with the top of the x in the Firefox bitmap - StrCpy $0 "${INTRO_BLURB_LTR_TOP_DU}" -!endif - ${NSD_CreateLabel} ${INTRO_BLURB_EDGE_DU} $0 ${INTRO_BLURB_WIDTH_DU} 76u "${INTRO_BLURB}" - Pop $0 - SendMessage $0 ${WM_SETFONT} $FontBlurb 0 - SetCtlColors $0 ${INTRO_BLURB_TEXT_COLOR} transparent - - SetCtlColors $HWNDPARENT ${FOOTER_CONTROL_TEXT_COLOR_NORMAL} ${FOOTER_BKGRD_COLOR} - GetDlgItem $0 $HWNDPARENT 10 ; Default browser checkbox - ${If} "$CanSetAsDefault" == "true" - ; The uxtheme must be disabled on checkboxes in order to override the - ; system font color. - System::Call 'uxtheme::SetWindowTheme(i $0 , w " ", w " ")' - SendMessage $0 ${WM_SETFONT} $FontNormal 0 - SendMessage $0 ${WM_SETTEXT} 0 "STR:$(MAKE_DEFAULT)" - SendMessage $0 ${BM_SETCHECK} 1 0 - SetCtlColors $0 ${FOOTER_CONTROL_TEXT_COLOR_NORMAL} ${FOOTER_BKGRD_COLOR} - ${Else} - ShowWindow $0 ${SW_HIDE} - ${EndIf} - GetDlgItem $0 $HWNDPARENT 11 - ShowWindow $0 ${SW_HIDE} - - ${NSD_CreateBitmap} ${APPNAME_BMP_EDGE_DU} ${APPNAME_BMP_TOP_DU} \ - ${APPNAME_BMP_WIDTH_DU} ${APPNAME_BMP_HEIGHT_DU} "" - Pop $2 - ${SetStretchedTransparentImage} $2 $PLUGINSDIR\appname.bmp $0 - - ${NSD_CreateBitmap} 0 0 100% 100% "" - Pop $2 - ${NSD_SetStretchedImage} $2 $PLUGINSDIR\bgintro.bmp $1 - - GetDlgItem $0 $HWNDPARENT 1 ; Install button - ${If} ${FileExists} "$INSTDIR\${FileMainEXE}" - SendMessage $0 ${WM_SETTEXT} 0 "STR:$(UPGRADE_BUTTON)" - ${Else} - SendMessage $0 ${WM_SETTEXT} 0 "STR:$(INSTALL_BUTTON)" - ${EndIf} - ${NSD_SetFocus} $0 - - GetDlgItem $0 $HWNDPARENT 2 ; Cancel button - SendMessage $0 ${WM_SETTEXT} 0 "STR:$(CANCEL_BUTTON)" - - GetDlgItem $0 $HWNDPARENT 3 ; Back button used for Options - SendMessage $0 ${WM_SETTEXT} 0 "STR:$(OPTIONS_BUTTON)" - - System::Call "kernel32::GetTickCount()l .s" - Pop $StartIntroPhaseTickCount - - LockWindow off - nsDialogs::Show - - ${NSD_FreeImage} $0 - ${NSD_FreeImage} $1 -FunctionEnd - -Function leaveIntro - LockWindow on - - System::Call "kernel32::GetTickCount()l .s" - Pop $0 - ${GetSecondsElapsed} "$StartIntroPhaseTickCount" "$0" $IntroPhaseSeconds - ; It is possible for this value to be 0 if the user clicks fast enough so - ; increment the value by 1 if it is 0. - ${If} $IntroPhaseSeconds == 0 - IntOp $IntroPhaseSeconds $IntroPhaseSeconds + 1 - ${EndIf} - - SetShellVarContext all ; Set SHCTX to All Users - ; If the user doesn't have write access to the installation directory set - ; the installation directory to a subdirectory of the All Users application - ; directory and if the user can't write to that location set the installation - ; directory to a subdirectory of the users local application directory - ; (e.g. non-roaming). - Call CanWrite - ${If} "$CanWriteToInstallDir" == "false" - StrCpy $INSTDIR "$APPDATA\${BrandFullName}\" - Call CanWrite - ${If} "$CanWriteToInstallDir" == "false" - ; This should never happen but just in case. - StrCpy $CanWriteToInstallDir "false" - ${Else} - StrCpy $INSTDIR "$LOCALAPPDATA\${BrandFullName}\" - Call CanWrite - ${EndIf} - ${EndIf} - - Call CheckSpace - - ${If} ${FileExists} "$INSTDIR" - ; Always display the long path if the path exists. - ${GetLongPath} "$INSTDIR" $INSTDIR - ${EndIf} - -FunctionEnd - -Function createOptions - ; Check whether the install requirements are satisfied using the default - ; values for metrics. - ${If} "$InitialInstallRequirementsCode" == "" - ${If} "$CanWriteToInstallDir" != "true" - ${AndIf} "$HasRequiredSpaceAvailable" != "true" - StrCpy $InitialInstallRequirementsCode "1" - ${ElseIf} "$CanWriteToInstallDir" != "true" - StrCpy $InitialInstallRequirementsCode "2" - ${ElseIf} "$HasRequiredSpaceAvailable" != "true" - StrCpy $InitialInstallRequirementsCode "3" - ${Else} - StrCpy $InitialInstallRequirementsCode "0" - ${EndIf} - ${EndIf} - - ; Skip the options page unless the Options button was clicked as long as the - ; installation directory can be written to and there is the minimum required - ; space available. - ${If} "$WasOptionsButtonClicked" != "1" - ${If} "$CanWriteToInstallDir" == "true" - ${AndIf} "$HasRequiredSpaceAvailable" == "true" - Abort ; Skip the options page - ${EndIf} - ${EndIf} - - StrCpy $ExistingTopDir "" - - nsDialogs::Create /NOUNLOAD 1018 - Pop $Dialog - ; Since the text color for controls is set in this Dialog the foreground and - ; background colors of the Dialog must also be hardcoded. - SetCtlColors $Dialog ${COMMON_TEXT_COLOR_NORMAL} ${COMMON_BKGRD_COLOR} - - ${NSD_CreateLabel} ${OPTIONS_ITEM_EDGE_DU} 18u ${OPTIONS_ITEM_WIDTH_DU} \ - 12u "$(CREATE_SHORTCUTS)" - Pop $0 - SetCtlColors $0 ${COMMON_TEXT_COLOR_NORMAL} ${COMMON_BKGRD_COLOR} - SendMessage $0 ${WM_SETFONT} $FontNormal 0 - - ${If} ${AtLeastWin7} - StrCpy $0 "$(ADD_SC_TASKBAR)" - ${Else} - StrCpy $0 "$(ADD_SC_QUICKLAUNCHBAR)" - ${EndIf} - ${NSD_CreateCheckbox} ${OPTIONS_SUBITEM_EDGE_DU} 38u \ - ${OPTIONS_SUBITEM_WIDTH_DU} 12u "$0" - Pop $CheckboxShortcutOnBar - ; The uxtheme must be disabled on checkboxes in order to override the system - ; font color. - System::Call 'uxtheme::SetWindowTheme(i $CheckboxShortcutOnBar, w " ", w " ")' - SetCtlColors $CheckboxShortcutOnBar ${COMMON_TEXT_COLOR_NORMAL} ${COMMON_BKGRD_COLOR} - SendMessage $CheckboxShortcutOnBar ${WM_SETFONT} $FontNormal 0 - ${NSD_Check} $CheckboxShortcutOnBar - - ${NSD_CreateCheckbox} ${OPTIONS_SUBITEM_EDGE_DU} 54u ${OPTIONS_SUBITEM_WIDTH_DU} \ - 12u "$(ADD_CheckboxShortcutInStartMenu)" - Pop $CheckboxShortcutInStartMenu - ; The uxtheme must be disabled on checkboxes in order to override the system - ; font color. - System::Call 'uxtheme::SetWindowTheme(i $CheckboxShortcutInStartMenu, w " ", w " ")' - SetCtlColors $CheckboxShortcutInStartMenu ${COMMON_TEXT_COLOR_NORMAL} ${COMMON_BKGRD_COLOR} - SendMessage $CheckboxShortcutInStartMenu ${WM_SETFONT} $FontNormal 0 - ${NSD_Check} $CheckboxShortcutInStartMenu - - ${NSD_CreateCheckbox} ${OPTIONS_SUBITEM_EDGE_DU} 70u ${OPTIONS_SUBITEM_WIDTH_DU} \ - 12u "$(ADD_CheckboxShortcutOnDesktop)" - Pop $CheckboxShortcutOnDesktop - ; The uxtheme must be disabled on checkboxes in order to override the system - ; font color. - System::Call 'uxtheme::SetWindowTheme(i $CheckboxShortcutOnDesktop, w " ", w " ")' - SetCtlColors $CheckboxShortcutOnDesktop ${COMMON_TEXT_COLOR_NORMAL} ${COMMON_BKGRD_COLOR} - SendMessage $CheckboxShortcutOnDesktop ${WM_SETFONT} $FontNormal 0 - ${NSD_Check} $CheckboxShortcutOnDesktop - - ${NSD_CreateLabel} ${OPTIONS_ITEM_EDGE_DU} 100u ${OPTIONS_ITEM_WIDTH_DU} \ - 12u "$(DEST_FOLDER)" - Pop $0 - SetCtlColors $0 ${COMMON_TEXT_COLOR_NORMAL} ${COMMON_BKGRD_COLOR} - SendMessage $0 ${WM_SETFONT} $FontNormal 0 - - ${NSD_CreateDirRequest} ${OPTIONS_SUBITEM_EDGE_DU} 116u 159u 14u "$INSTDIR" - Pop $DirRequest - SetCtlColors $DirRequest ${COMMON_TEXT_COLOR_NORMAL} ${COMMON_BKGRD_COLOR} - SendMessage $DirRequest ${WM_SETFONT} $FontNormal 0 - System::Call shlwapi::SHAutoComplete(i $DirRequest, i ${SHACF_FILESYSTEM}) - ${NSD_OnChange} $DirRequest OnChange_DirRequest - -!ifdef ${AB_CD}_rtl - ; Remove the RTL styling from the directory request text box - ${RemoveStyle} $DirRequest ${SS_RIGHT} - ${RemoveExStyle} $DirRequest ${WS_EX_RIGHT} - ${RemoveExStyle} $DirRequest ${WS_EX_RTLREADING} - ${NSD_AddStyle} $DirRequest ${SS_LEFT} - ${NSD_AddExStyle} $DirRequest ${WS_EX_LTRREADING}|${WS_EX_LEFT} -!endif - - ${NSD_CreateBrowseButton} 280u 116u 50u 14u "$(BROWSE_BUTTON)" - Pop $ButtonBrowse - SetCtlColors $ButtonBrowse "" ${COMMON_BKGRD_COLOR} - ${NSD_OnClick} $ButtonBrowse OnClick_ButtonBrowse - - ; Get the number of pixels from the left of the Dialog to the right side of - ; the "Space Required:" and "Space Available:" labels prior to setting RTL so - ; the correct position of the controls can be set by NSIS for RTL locales. - - ; Get the width and height of both labels and use the tallest for the height - ; and the widest to calculate where to place the labels after these labels. - ${GetTextExtent} "$(SPACE_REQUIRED)" $FontItalic $0 $1 - ${GetTextExtent} "$(SPACE_AVAILABLE)" $FontItalic $2 $3 - ${If} $1 > $3 - StrCpy $ControlHeightPX "$1" - ${Else} - StrCpy $ControlHeightPX "$3" - ${EndIf} - - IntOp $0 $0 + 8 ; Add padding to the control's width - ; Make both controls the same width as the widest control - ${NSD_CreateLabelCenter} ${OPTIONS_SUBITEM_EDGE_DU} 134u $0 $ControlHeightPX "$(SPACE_REQUIRED)" - Pop $5 - SetCtlColors $5 ${COMMON_TEXT_COLOR_FADED} ${COMMON_BKGRD_COLOR} - SendMessage $5 ${WM_SETFONT} $FontItalic 0 - - IntOp $2 $2 + 8 ; Add padding to the control's width - ${NSD_CreateLabelCenter} ${OPTIONS_SUBITEM_EDGE_DU} 145u $2 $ControlHeightPX "$(SPACE_AVAILABLE)" - Pop $6 - SetCtlColors $6 ${COMMON_TEXT_COLOR_FADED} ${COMMON_BKGRD_COLOR} - SendMessage $6 ${WM_SETFONT} $FontItalic 0 - - ; Use the widest label for aligning the labels next to them - ${If} $0 > $2 - StrCpy $6 "$5" - ${EndIf} - FindWindow $1 "#32770" "" $HWNDPARENT - ${GetDlgItemEndPX} $6 $ControlRightPX - - IntOp $ControlRightPX $ControlRightPX + 6 - - ${NSD_CreateLabel} $ControlRightPX 134u 100% $ControlHeightPX \ - "${APPROXIMATE_REQUIRED_SPACE_MB} $(MEGA)$(BYTE)" - Pop $7 - SetCtlColors $7 ${COMMON_TEXT_COLOR_NORMAL} ${COMMON_BKGRD_COLOR} - SendMessage $7 ${WM_SETFONT} $FontNormal 0 - - ; Create the free space label with an empty string and update it by calling - ; UpdateFreeSpaceLabel - ${NSD_CreateLabel} $ControlRightPX 145u 100% $ControlHeightPX " " - Pop $LabelFreeSpace - SetCtlColors $LabelFreeSpace ${COMMON_TEXT_COLOR_NORMAL} ${COMMON_BKGRD_COLOR} - SendMessage $LabelFreeSpace ${WM_SETFONT} $FontNormal 0 - - Call UpdateFreeSpaceLabel - - ${NSD_CreateCheckbox} ${OPTIONS_ITEM_EDGE_DU} 168u ${OPTIONS_SUBITEM_WIDTH_DU} \ - 12u "$(SEND_PING)" - Pop $CheckboxSendPing - ; The uxtheme must be disabled on checkboxes in order to override the system - ; font color. - System::Call 'uxtheme::SetWindowTheme(i $CheckboxSendPing, w " ", w " ")' - SetCtlColors $CheckboxSendPing ${COMMON_TEXT_COLOR_NORMAL} ${COMMON_BKGRD_COLOR} - SendMessage $CheckboxSendPing ${WM_SETFONT} $FontNormal 0 - ${NSD_Check} $CheckboxSendPing - -!ifdef MOZ_MAINTENANCE_SERVICE - ; We can only install the maintenance service if the user is an admin. - Call IsUserAdmin - Pop $0 - - ; Only show the maintenance service checkbox if we're on XP SP3 or higher; - ; we don't ever want to install it on XP without at least SP3 installed. - ${If} $0 == "true" - ${AndIf} ${IsWinXP} - ${AndIf} ${AtMostServicePack} 2 - StrCpy $0 "false" - ${EndIf} - - ; Only show the maintenance service checkbox if we have write access to HKLM - ClearErrors - WriteRegStr HKLM "Software\Mozilla" "${BrandShortName}InstallerTest" \ - "Write Test" - ${If} ${Errors} - ${OrIf} $0 != "true" - StrCpy $CheckboxInstallMaintSvc "0" - ${Else} - DeleteRegValue HKLM "Software\Mozilla" "${BrandShortName}InstallerTest" - ; Read the registry instead of using ServicesHelper::IsInstalled so the - ; plugin isn't included in the stub installer to lessen its size. - ClearErrors - ReadRegStr $0 HKLM "SYSTEM\CurrentControlSet\services\MozillaMaintenance" "ImagePath" - ${If} ${Errors} - ${NSD_CreateCheckbox} ${OPTIONS_ITEM_EDGE_DU} 184u ${OPTIONS_ITEM_WIDTH_DU} \ - 12u "$(INSTALL_MAINT_SERVICE)" - Pop $CheckboxInstallMaintSvc - System::Call 'uxtheme::SetWindowTheme(i $CheckboxInstallMaintSvc, w " ", w " ")' - SetCtlColors $CheckboxInstallMaintSvc ${COMMON_TEXT_COLOR_NORMAL} ${COMMON_BKGRD_COLOR} - SendMessage $CheckboxInstallMaintSvc ${WM_SETFONT} $FontNormal 0 - ${NSD_Check} $CheckboxInstallMaintSvc - ${EndIf} - ${EndIf} -!endif - - GetDlgItem $0 $HWNDPARENT 1 ; Install button - ${If} ${FileExists} "$INSTDIR\${FileMainEXE}" - SendMessage $0 ${WM_SETTEXT} 0 "STR:$(UPGRADE_BUTTON)" - ${Else} - SendMessage $0 ${WM_SETTEXT} 0 "STR:$(INSTALL_BUTTON)" - ${EndIf} - ${NSD_SetFocus} $0 - - GetDlgItem $0 $HWNDPARENT 2 ; Cancel button - SendMessage $0 ${WM_SETTEXT} 0 "STR:$(CANCEL_BUTTON)" - - GetDlgItem $0 $HWNDPARENT 3 ; Back button used for Options - EnableWindow $0 0 - ShowWindow $0 ${SW_HIDE} - - ; If the option button was not clicked display the reason for what needs to be - ; resolved to continue the installation. - ${If} "$WasOptionsButtonClicked" != "1" - ${If} "$CanWriteToInstallDir" == "false" - MessageBox MB_OK|MB_ICONEXCLAMATION "$(WARN_WRITE_ACCESS)" - ${ElseIf} "$HasRequiredSpaceAvailable" == "false" - MessageBox MB_OK|MB_ICONEXCLAMATION "$(WARN_DISK_SPACE)" - ${EndIf} - ${EndIf} - - System::Call "kernel32::GetTickCount()l .s" - Pop $StartOptionsPhaseTickCount - - LockWindow off - nsDialogs::Show -FunctionEnd - -Function leaveOptions - LockWindow on - - ${GetRoot} "$INSTDIR" $0 - ${GetLongPath} "$INSTDIR" $INSTDIR - ${GetLongPath} "$0" $0 - ${If} "$INSTDIR" == "$0" - LockWindow off - MessageBox MB_OK|MB_ICONEXCLAMATION "$(WARN_ROOT_INSTALL)" - Abort ; Stay on the page - ${EndIf} - - Call CanWrite - ${If} "$CanWriteToInstallDir" == "false" - LockWindow off - MessageBox MB_OK|MB_ICONEXCLAMATION "$(WARN_WRITE_ACCESS)" - Abort ; Stay on the page - ${EndIf} - - Call CheckSpace - ${If} "$HasRequiredSpaceAvailable" == "false" - LockWindow off - MessageBox MB_OK|MB_ICONEXCLAMATION "$(WARN_DISK_SPACE)" - Abort ; Stay on the page - ${EndIf} - - System::Call "kernel32::GetTickCount()l .s" - Pop $0 - ${GetSecondsElapsed} "$StartOptionsPhaseTickCount" "$0" $OptionsPhaseSeconds - ; It is possible for this value to be 0 if the user clicks fast enough so - ; increment the value by 1 if it is 0. - ${If} $OptionsPhaseSeconds == 0 - IntOp $OptionsPhaseSeconds $OptionsPhaseSeconds + 1 - ${EndIf} - - ${NSD_GetState} $CheckboxShortcutOnBar $CheckboxShortcutOnBar - ${NSD_GetState} $CheckboxShortcutInStartMenu $CheckboxShortcutInStartMenu - ${NSD_GetState} $CheckboxShortcutOnDesktop $CheckboxShortcutOnDesktop - ${NSD_GetState} $CheckboxSendPing $CheckboxSendPing -!ifdef MOZ_MAINTENANCE_SERVICE - ${NSD_GetState} $CheckboxInstallMaintSvc $CheckboxInstallMaintSvc -!endif - -FunctionEnd - -Function createInstall - nsDialogs::Create /NOUNLOAD 1018 - Pop $Dialog - ; Since the text color for controls is set in this Dialog the foreground and - ; background colors of the Dialog must also be hardcoded. - SetCtlColors $Dialog ${COMMON_TEXT_COLOR_NORMAL} ${COMMON_BKGRD_COLOR} - - ${NSD_CreateLabel} 0 0 49u 64u "" - Pop $0 - ${GetDlgItemWidthHeight} $0 $1 $2 - System::Call 'user32::DestroyWindow(i r0)' - - ${NSD_CreateLabel} 0 0 11u 16u "" - Pop $0 - ${GetDlgItemWidthHeight} $0 $3 $4 - System::Call 'user32::DestroyWindow(i r0)' - - FindWindow $7 "#32770" "" $HWNDPARENT - ${GetDlgItemWidthHeight} $7 $8 $9 - - ; Allow a maximum text width of half of the Dialog's width - IntOp $R0 $8 / 2 - - ${GetTextWidthHeight} "${INSTALL_BLURB1}" $FontBlurb $R0 $5 $6 - IntOp $R1 $1 + $3 - IntOp $R1 $R1 + $5 - IntOp $R1 $8 - $R1 - IntOp $R1 $R1 / 2 - ${NSD_CreateBitmap} $R1 ${INSTALL_BLURB_TOP_DU} 49u 64u "" - Pop $BitmapBlurb1 - ${SetStretchedTransparentImage} $BitmapBlurb1 $PLUGINSDIR\clock.bmp $HwndBitmapBlurb1 - IntOp $R1 $R1 + $1 - IntOp $R1 $R1 + $3 - ${NSD_CreateLabel} $R1 ${INSTALL_BLURB_TOP_DU} $5 $6 "${INSTALL_BLURB1}" - Pop $LabelBlurb1 - SendMessage $LabelBlurb1 ${WM_SETFONT} $FontBlurb 0 - SetCtlColors $LabelBlurb1 ${INSTALL_BLURB_TEXT_COLOR} transparent - - ${GetTextWidthHeight} "${INSTALL_BLURB2}" $FontBlurb $R0 $5 $6 - IntOp $R1 $1 + $3 - IntOp $R1 $R1 + $5 - IntOp $R1 $8 - $R1 - IntOp $R1 $R1 / 2 - ${NSD_CreateBitmap} $R1 ${INSTALL_BLURB_TOP_DU} 49u 64u "" - Pop $BitmapBlurb2 - ${SetStretchedTransparentImage} $BitmapBlurb2 $PLUGINSDIR\particles.bmp $HwndBitmapBlurb2 - IntOp $R1 $R1 + $1 - IntOp $R1 $R1 + $3 - ${NSD_CreateLabel} $R1 ${INSTALL_BLURB_TOP_DU} $5 $6 "${INSTALL_BLURB2}" - Pop $LabelBlurb2 - SendMessage $LabelBlurb2 ${WM_SETFONT} $FontBlurb 0 - SetCtlColors $LabelBlurb2 ${INSTALL_BLURB_TEXT_COLOR} transparent - ShowWindow $BitmapBlurb2 ${SW_HIDE} - ShowWindow $LabelBlurb2 ${SW_HIDE} - - ${GetTextWidthHeight} "${INSTALL_BLURB3}" $FontBlurb $R0 $5 $6 - IntOp $R1 $1 + $3 - IntOp $R1 $R1 + $5 - IntOp $R1 $8 - $R1 - IntOp $R1 $R1 / 2 - ${NSD_CreateBitmap} $R1 ${INSTALL_BLURB_TOP_DU} 49u 64u "" - Pop $BitmapBlurb3 - ${SetStretchedTransparentImage} $BitmapBlurb3 $PLUGINSDIR\pencil.bmp $HWndBitmapBlurb3 - IntOp $R1 $R1 + $1 - IntOp $R1 $R1 + $3 - ${NSD_CreateLabel} $R1 ${INSTALL_BLURB_TOP_DU} $5 $6 "${INSTALL_BLURB3}" - Pop $LabelBlurb3 - SendMessage $LabelBlurb3 ${WM_SETFONT} $FontBlurb 0 - SetCtlColors $LabelBlurb3 ${INSTALL_BLURB_TEXT_COLOR} transparent - ShowWindow $BitmapBlurb3 ${SW_HIDE} - ShowWindow $LabelBlurb3 ${SW_HIDE} - - ${NSD_CreateProgressBar} 103u 166u 241u 9u "" - Pop $Progressbar - ${NSD_AddStyle} $Progressbar ${PBS_MARQUEE} - SendMessage $Progressbar ${PBM_SETMARQUEE} 1 \ - $ProgressbarMarqueeIntervalMS ; start=1|stop=0 interval(ms)=+N - - ${NSD_CreateLabelCenter} 103u 180u 241u 20u "$(DOWNLOADING_LABEL)" - Pop $LabelDownloading - SendMessage $LabelDownloading ${WM_SETFONT} $FontNormal 0 - SetCtlColors $LabelDownloading ${INSTALL_PROGRESS_TEXT_COLOR_NORMAL} transparent - - ${If} ${FileExists} "$INSTDIR\${FileMainEXE}" - ${NSD_CreateLabelCenter} 103u 180u 241u 20u "$(UPGRADING_LABEL)" - ${Else} - ${NSD_CreateLabelCenter} 103u 180u 241u 20u "$(INSTALLING_LABEL)" - ${EndIf} - Pop $LabelInstalling - SendMessage $LabelInstalling ${WM_SETFONT} $FontNormal 0 - SetCtlColors $LabelInstalling ${INSTALL_PROGRESS_TEXT_COLOR_NORMAL} transparent - ShowWindow $LabelInstalling ${SW_HIDE} - - ${NSD_CreateBitmap} ${APPNAME_BMP_EDGE_DU} ${APPNAME_BMP_TOP_DU} \ - ${APPNAME_BMP_WIDTH_DU} ${APPNAME_BMP_HEIGHT_DU} "" - Pop $2 - ${SetStretchedTransparentImage} $2 $PLUGINSDIR\appname.bmp $0 - - GetDlgItem $0 $HWNDPARENT 1 ; Install button - EnableWindow $0 0 - ShowWindow $0 ${SW_HIDE} - - GetDlgItem $0 $HWNDPARENT 3 ; Back button used for Options - EnableWindow $0 0 - ShowWindow $0 ${SW_HIDE} - - GetDlgItem $0 $HWNDPARENT 2 ; Cancel button - SendMessage $0 ${WM_SETTEXT} 0 "STR:$(CANCEL_BUTTON)" - ; Focus the Cancel button otherwise it isn't possible to tab to it since it is - ; the only control that can be tabbed to. - ${NSD_SetFocus} $0 - ; Kill the Cancel button's focus so pressing enter won't cancel the install. - SendMessage $0 ${WM_KILLFOCUS} 0 0 - - ${If} "$CanSetAsDefault" == "true" - GetDlgItem $0 $HWNDPARENT 10 ; Default browser checkbox - SendMessage $0 ${BM_GETCHECK} 0 0 $CheckboxSetAsDefault - EnableWindow $0 0 - ShowWindow $0 ${SW_HIDE} - ${EndIf} - - GetDlgItem $0 $HWNDPARENT 11 - ${If} ${FileExists} "$INSTDIR\${FileMainEXE}" - SendMessage $0 ${WM_SETTEXT} 0 "STR:$(ONE_MOMENT_UPGRADE)" - ${Else} - SendMessage $0 ${WM_SETTEXT} 0 "STR:$(ONE_MOMENT_INSTALL)" - ${EndIf} - SendMessage $0 ${WM_SETFONT} $FontNormal 0 - SetCtlColors $0 ${FOOTER_CONTROL_TEXT_COLOR_FADED} ${FOOTER_BKGRD_COLOR} - ShowWindow $0 ${SW_SHOW} - - ; Set $DownloadReset to true so the first download tick count is measured. - StrCpy $DownloadReset "true" - StrCpy $IsDownloadFinished "false" - StrCpy $DownloadRetryCount "0" - StrCpy $DownloadedBytes "0" - StrCpy $StartLastDownloadTickCount "" - StrCpy $EndDownloadPhaseTickCount "" - StrCpy $DownloadFirstTransferSeconds "" - StrCpy $ExitCode "${ERR_DOWNLOAD_CANCEL}" - StrCpy $OpenedDownloadPage "0" - - ClearErrors - ReadINIStr $ExistingVersion "$INSTDIR\application.ini" "App" "Version" - ${If} ${Errors} - StrCpy $ExistingVersion "0" - ${EndIf} - - ClearErrors - ReadINIStr $ExistingBuildID "$INSTDIR\application.ini" "App" "BuildID" - ${If} ${Errors} - StrCpy $ExistingBuildID "0" - ${EndIf} - - ${If} ${FileExists} "$LOCALAPPDATA\Mozilla\Firefox" - StrCpy $ExistingProfile "1" - ${Else} - StrCpy $ExistingProfile "0" - ${EndIf} - - StrCpy $DownloadServerIP "" - - System::Call "kernel32::GetTickCount()l .s" - Pop $StartDownloadPhaseTickCount - - ${If} ${FileExists} "$INSTDIR\uninstall\uninstall.log" - StrCpy $InstallTotalSteps ${InstallPaveOverTotalSteps} - ${Else} - StrCpy $InstallTotalSteps ${InstallCleanTotalSteps} - ${EndIf} - - ${ITBL3Create} - ${ITBL3SetProgressState} "${TBPF_INDETERMINATE}" - - ${NSD_CreateTimer} StartDownload ${DownloadIntervalMS} - - LockWindow off - nsDialogs::Show - - ${NSD_FreeImage} $0 - ${NSD_FreeImage} $HwndBitmapBlurb1 - ${NSD_FreeImage} $HwndBitmapBlurb2 - ${NSD_FreeImage} $HWndBitmapBlurb3 -FunctionEnd - -Function StartDownload - ${NSD_KillTimer} StartDownload - InetBgDL::Get "${URLStubDownload}${URLStubDownloadAppend}" "$PLUGINSDIR\download.exe" \ - /CONNECTTIMEOUT 120 /RECEIVETIMEOUT 120 /END - StrCpy $4 "" - ${NSD_CreateTimer} OnDownload ${DownloadIntervalMS} - ${If} ${FileExists} "$INSTDIR\${TO_BE_DELETED}" - RmDir /r "$INSTDIR\${TO_BE_DELETED}" - ${EndIf} -FunctionEnd - -Function SetProgressBars - SendMessage $Progressbar ${PBM_SETPOS} $ProgressCompleted 0 - ${ITBL3SetProgressValue} "$ProgressCompleted" "$ProgressTotal" -FunctionEnd - -Function RemoveFileProgressCallback - IntOp $InstallCounterStep $InstallCounterStep + 2 - System::Int64Op $ProgressCompleted + $InstallStepSize - Pop $ProgressCompleted - Call SetProgressBars - System::Int64Op $ProgressCompleted + $InstallStepSize - Pop $ProgressCompleted - Call SetProgressBars -FunctionEnd - -Function OnDownload - InetBgDL::GetStats - # $0 = HTTP status code, 0=Completed - # $1 = Completed files - # $2 = Remaining files - # $3 = Number of downloaded bytes for the current file - # $4 = Size of current file (Empty string if the size is unknown) - # /RESET must be used if status $0 > 299 (e.g. failure) - # When status is $0 =< 299 it is handled by InetBgDL - StrCpy $DownloadServerIP "$5" - ${If} $0 > 299 - ${NSD_KillTimer} OnDownload - IntOp $DownloadRetryCount $DownloadRetryCount + 1 - ${If} "$DownloadReset" != "true" - StrCpy $DownloadedBytes "0" - ${NSD_AddStyle} $Progressbar ${PBS_MARQUEE} - SendMessage $Progressbar ${PBM_SETMARQUEE} 1 \ - $ProgressbarMarqueeIntervalMS ; start=1|stop=0 interval(ms)=+N - ${ITBL3SetProgressState} "${TBPF_INDETERMINATE}" - ${EndIf} - InetBgDL::Get /RESET /END - StrCpy $DownloadSizeBytes "" - StrCpy $DownloadReset "true" - - ${If} $DownloadRetryCount >= ${DownloadMaxRetries} - StrCpy $ExitCode "${ERR_DOWNLOAD_TOO_MANY_RETRIES}" - ; Use a timer so the UI has a chance to update - ${NSD_CreateTimer} DisplayDownloadError ${InstallIntervalMS} - ${Else} - ${NSD_CreateTimer} StartDownload ${DownloadRetryIntervalMS} - ${EndIf} - Return - ${EndIf} - - ${If} "$DownloadReset" == "true" - System::Call "kernel32::GetTickCount()l .s" - Pop $StartLastDownloadTickCount - StrCpy $DownloadReset "false" - ; The seconds elapsed from the start of the download phase until the first - ; bytes are received are only recorded for the first request so it is - ; possible to determine connection issues for the first request. - ${If} "$DownloadFirstTransferSeconds" == "" - ; Get the seconds elapsed from the start of the download phase until the - ; first bytes are received. - ${GetSecondsElapsed} "$StartDownloadPhaseTickCount" "$StartLastDownloadTickCount" $DownloadFirstTransferSeconds - ${EndIf} - ${EndIf} - - ${If} "$DownloadSizeBytes" == "" - ${AndIf} "$4" != "" - ; Handle the case where the size of the file to be downloaded is less than - ; the minimum expected size or greater than the maximum expected size at the - ; beginning of the download. - ${If} $4 < ${DownloadMinSizeBytes} - ${OrIf} $4 > ${DownloadMaxSizeBytes} - ${NSD_KillTimer} OnDownload - InetBgDL::Get /RESET /END - StrCpy $DownloadReset "true" - - ${If} $DownloadRetryCount >= ${DownloadMaxRetries} - ; Use a timer so the UI has a chance to update - ${NSD_CreateTimer} DisplayDownloadError ${InstallIntervalMS} - ${Else} - ${NSD_CreateTimer} StartDownload ${DownloadIntervalMS} - ${EndIf} - Return - ${EndIf} - - StrCpy $DownloadSizeBytes "$4" - System::Int64Op $4 / 2 - Pop $HalfOfDownload - System::Int64Op $HalfOfDownload / $InstallTotalSteps - Pop $InstallStepSize - SendMessage $Progressbar ${PBM_SETMARQUEE} 0 0 ; start=1|stop=0 interval(ms)=+N - ${RemoveStyle} $Progressbar ${PBS_MARQUEE} - System::Int64Op $HalfOfDownload + $DownloadSizeBytes - Pop $ProgressTotal - StrCpy $ProgressCompleted 0 - SendMessage $Progressbar ${PBM_SETRANGE32} $ProgressCompleted $ProgressTotal - ${EndIf} - - ; Don't update the status until after the download starts - ${If} $2 != 0 - ${AndIf} "$4" == "" - Return - ${EndIf} - - ; Handle the case where the downloaded size is greater than the maximum - ; expected size during the download. - ${If} $DownloadedBytes > ${DownloadMaxSizeBytes} - InetBgDL::Get /RESET /END - StrCpy $DownloadReset "true" - - ${If} $DownloadRetryCount >= ${DownloadMaxRetries} - ; Use a timer so the UI has a chance to update - ${NSD_CreateTimer} DisplayDownloadError ${InstallIntervalMS} - ${Else} - ${NSD_CreateTimer} StartDownload ${DownloadIntervalMS} - ${EndIf} - Return - ${EndIf} - - ${If} $IsDownloadFinished != "true" - ${If} $2 == 0 - ${NSD_KillTimer} OnDownload - StrCpy $IsDownloadFinished "true" - ; The first step of the install progress bar is determined by the - ; InstallProgressFirstStep define and provides the user with immediate - ; feedback. - StrCpy $InstallCounterStep "${InstallProgressFirstStep}" - System::Call "kernel32::GetTickCount()l .s" - Pop $EndDownloadPhaseTickCount - - StrCpy $DownloadedBytes "$DownloadSizeBytes" - - ; When a download has finished handle the case where the downloaded size - ; is less than the minimum expected size or greater than the maximum - ; expected size during the download. - ${If} $DownloadedBytes < ${DownloadMinSizeBytes} - ${OrIf} $DownloadedBytes > ${DownloadMaxSizeBytes} - InetBgDL::Get /RESET /END - StrCpy $DownloadReset "true" - - ${If} $DownloadRetryCount >= ${DownloadMaxRetries} - ; Use a timer so the UI has a chance to update - ${NSD_CreateTimer} DisplayDownloadError ${InstallIntervalMS} - ${Else} - ${NSD_CreateTimer} StartDownload ${DownloadIntervalMS} - ${EndIf} - Return - ${EndIf} - - LockWindow on - ; Update the progress bars first in the UI change so they take affect - ; before other UI changes. - StrCpy $ProgressCompleted "$DownloadSizeBytes" - Call SetProgressBars - System::Int64Op $InstallStepSize * ${InstallProgressFirstStep} - Pop $R9 - System::Int64Op $ProgressCompleted + $R9 - Pop $ProgressCompleted - Call SetProgressBars - ShowWindow $LabelDownloading ${SW_HIDE} - ShowWindow $LabelInstalling ${SW_SHOW} - ShowWindow $LabelBlurb2 ${SW_HIDE} - ShowWindow $BitmapBlurb2 ${SW_HIDE} - ShowWindow $LabelBlurb3 ${SW_SHOW} - ShowWindow $BitmapBlurb3 ${SW_SHOW} - ; Disable the Cancel button during the install - GetDlgItem $5 $HWNDPARENT 2 - EnableWindow $5 0 - LockWindow off - - ; Open a handle to prevent modification of the full installer - StrCpy $R9 "${INVALID_HANDLE_VALUE}" - System::Call 'kernel32::CreateFileW(w "$PLUGINSDIR\download.exe", \ - i ${GENERIC_READ}, \ - i ${FILE_SHARE_READ}, i 0, \ - i ${OPEN_EXISTING}, i 0, i 0) i .R9' - StrCpy $HandleDownload "$R9" - - ${If} $HandleDownload == ${INVALID_HANDLE_VALUE} - StrCpy $ExitCode "${ERR_PREINSTALL_INVALID_HANDLE}" - StrCpy $0 "0" - StrCpy $1 "0" - ${Else} - CertCheck::VerifyCertTrust "$PLUGINSDIR\download.exe" - Pop $0 - CertCheck::VerifyCertNameIssuer "$PLUGINSDIR\download.exe" \ - "${CertNameDownload}" "${CertIssuerDownload}" - Pop $1 - ${If} $0 == 0 - ${AndIf} $1 == 0 - StrCpy $ExitCode "${ERR_PREINSTALL_CERT_UNTRUSTED_AND_ATTRIBUTES}" - ${ElseIf} $0 == 0 - StrCpy $ExitCode "${ERR_PREINSTALL_CERT_UNTRUSTED}" - ${ElseIf} $1 == 0 - StrCpy $ExitCode "${ERR_PREINSTALL_CERT_ATTRIBUTES}" - ${EndIf} - ${EndIf} - - System::Call "kernel32::GetTickCount()l .s" - Pop $EndPreInstallPhaseTickCount - - ${If} $0 == 0 - ${OrIf} $1 == 0 - ; Use a timer so the UI has a chance to update - ${NSD_CreateTimer} DisplayDownloadError ${InstallIntervalMS} - Return - ${EndIf} - - ; Instead of extracting the files we use the downloaded installer to - ; install in case it needs to perform operations that the stub doesn't - ; know about. - WriteINIStr "$PLUGINSDIR\${CONFIG_INI}" "Install" "InstallDirectoryPath" "$INSTDIR" - ; Don't create the QuickLaunch or Taskbar shortcut from the launched installer - WriteINIStr "$PLUGINSDIR\${CONFIG_INI}" "Install" "QuickLaunchShortcut" "false" - - ; Either avoid or force adding a taskbar pin based on the checkbox value: - ${If} $CheckboxShortcutOnBar == 0 - WriteINIStr "$PLUGINSDIR\${CONFIG_INI}" "Install" "TaskbarShortcut" "false" - ${Else} - WriteINIStr "$PLUGINSDIR\${CONFIG_INI}" "Install" "TaskbarShortcut" "true" - ${EndIf} - - ${If} $CheckboxShortcutOnDesktop == 1 - WriteINIStr "$PLUGINSDIR\${CONFIG_INI}" "Install" "DesktopShortcut" "true" - ${Else} - WriteINIStr "$PLUGINSDIR\${CONFIG_INI}" "Install" "DesktopShortcut" "false" - ${EndIf} - - ${If} $CheckboxShortcutInStartMenu == 1 - WriteINIStr "$PLUGINSDIR\${CONFIG_INI}" "Install" "StartMenuShortcuts" "true" - ${Else} - WriteINIStr "$PLUGINSDIR\${CONFIG_INI}" "Install" "StartMenuShortcuts" "false" - ${EndIf} - -!ifdef MOZ_MAINTENANCE_SERVICE - ${If} $CheckboxInstallMaintSvc == 1 - WriteINIStr "$PLUGINSDIR\${CONFIG_INI}" "Install" "MaintenanceService" "true" - ${Else} - WriteINIStr "$PLUGINSDIR\${CONFIG_INI}" "Install" "MaintenanceService" "false" - ${EndIf} -!else - WriteINIStr "$PLUGINSDIR\${CONFIG_INI}" "Install" "MaintenanceService" "false" -!endif - - ; Delete the taskbar shortcut history to ensure we do the right thing based on - ; the config file above. - ${GetShortcutsLogPath} $0 - Delete "$0" - - GetFunctionAddress $0 RemoveFileProgressCallback - ${RemovePrecompleteEntries} $0 - - ; Delete the install.log and let the full installer create it. When the - ; installer closes it we can detect that it has completed. - Delete "$INSTDIR\install.log" - - ; Delete firefox.exe.moz-upgrade and firefox.exe.moz-delete if it exists - ; since it being present will require an OS restart for the full - ; installer. - Delete "$INSTDIR\${FileMainEXE}.moz-upgrade" - Delete "$INSTDIR\${FileMainEXE}.moz-delete" - - System::Call "kernel32::GetTickCount()l .s" - Pop $EndPreInstallPhaseTickCount - - Exec "$\"$PLUGINSDIR\download.exe$\" /INI=$PLUGINSDIR\${CONFIG_INI}" - ${NSD_CreateTimer} CheckInstall ${InstallIntervalMS} - ${Else} - ${If} $HalfOfDownload != "true" - ${AndIf} $3 > $HalfOfDownload - StrCpy $HalfOfDownload "true" - LockWindow on - ShowWindow $LabelBlurb1 ${SW_HIDE} - ShowWindow $BitmapBlurb1 ${SW_HIDE} - ShowWindow $LabelBlurb2 ${SW_SHOW} - ShowWindow $BitmapBlurb2 ${SW_SHOW} - LockWindow off - ${EndIf} - StrCpy $DownloadedBytes "$3" - StrCpy $ProgressCompleted "$DownloadedBytes" - Call SetProgressBars - ${EndIf} - ${EndIf} -FunctionEnd - -Function OnPing - InetBgDL::GetStats - # $0 = HTTP status code, 0=Completed - # $1 = Completed files - # $2 = Remaining files - # $3 = Number of downloaded bytes for the current file - # $4 = Size of current file (Empty string if the size is unknown) - # /RESET must be used if status $0 > 299 (e.g. failure) - # When status is $0 =< 299 it is handled by InetBgDL - ${If} $2 == 0 - ${OrIf} $0 > 299 - ${NSD_KillTimer} OnPing - ${If} $0 > 299 - InetBgDL::Get /RESET /END - ${EndIf} - ; The following will exit the installer - SetAutoClose true - StrCpy $R9 "2" - Call RelativeGotoPage - ${EndIf} -FunctionEnd - -Function CheckInstall - IntOp $InstallCounterStep $InstallCounterStep + 1 - ${If} $InstallCounterStep >= $InstallTotalSteps - ${NSD_KillTimer} CheckInstall - ; Close the handle that prevents modification of the full installer - System::Call 'kernel32::CloseHandle(i $HandleDownload)' - StrCpy $ExitCode "${ERR_INSTALL_TIMEOUT}" - ; Use a timer so the UI has a chance to update - ${NSD_CreateTimer} DisplayDownloadError ${InstallIntervalMS} - Return - ${EndIf} - - System::Int64Op $ProgressCompleted + $InstallStepSize - Pop $ProgressCompleted - Call SetProgressBars - - ${If} ${FileExists} "$INSTDIR\install.log" - Delete "$INSTDIR\install.tmp" - CopyFiles /SILENT "$INSTDIR\install.log" "$INSTDIR\install.tmp" - - ; The unfocus and refocus that happens approximately here is caused by the - ; installer calling SHChangeNotify to refresh the shortcut icons. - - ; When the full installer completes the installation the install.log will no - ; longer be in use. - ClearErrors - Delete "$INSTDIR\install.log" - ${Unless} ${Errors} - ${NSD_KillTimer} CheckInstall - ; Close the handle that prevents modification of the full installer - System::Call 'kernel32::CloseHandle(i $HandleDownload)' - Rename "$INSTDIR\install.tmp" "$INSTDIR\install.log" - Delete "$PLUGINSDIR\download.exe" - Delete "$PLUGINSDIR\${CONFIG_INI}" - System::Call "kernel32::GetTickCount()l .s" - Pop $EndInstallPhaseTickCount - System::Int64Op $InstallStepSize * ${InstallProgressFinishStep} - Pop $InstallStepSize - ${NSD_CreateTimer} FinishInstall ${InstallIntervalMS} - ${EndUnless} - ${EndIf} -FunctionEnd - -Function FinishInstall - ; The full installer has completed but the progress bar still needs to finish - ; so increase the size of the step. - IntOp $InstallCounterStep $InstallCounterStep + ${InstallProgressFinishStep} - ${If} $InstallTotalSteps < $InstallCounterStep - StrCpy $InstallCounterStep "$InstallTotalSteps" - ${EndIf} - - ${If} $InstallTotalSteps != $InstallCounterStep - System::Int64Op $ProgressCompleted + $InstallStepSize - Pop $ProgressCompleted - Call SetProgressBars - Return - ${EndIf} - - ${NSD_KillTimer} FinishInstall - - StrCpy $ProgressCompleted "$ProgressTotal" - Call SetProgressBars - - ${If} "$CheckboxSetAsDefault" == "1" - ; NB: this code is duplicated in installer.nsi. Please keep in sync. - ; For data migration in the app, we want to know what the default browser - ; value was before we changed it. To do so, we read it here and store it - ; in our own registry key. - StrCpy $0 "" - ${If} ${AtLeastWinVista} - AppAssocReg::QueryCurrentDefault "http" "protocol" "effective" - Pop $1 - ; If the method hasn't failed, $1 will contain the progid. Check: - ${If} "$1" != "method failed" - ${AndIf} "$1" != "method not available" - ; Read the actual command from the progid - ReadRegStr $0 HKCR "$1\shell\open\command" "" - ${EndIf} - ${EndIf} - ; If using the App Association Registry didn't happen or failed, fall back - ; to the effective http default: - ${If} "$0" == "" - ReadRegStr $0 HKCR "http\shell\open\command" "" - ${EndIf} - ; If we have something other than empty string now, write the value. - ${If} "$0" != "" - ClearErrors - WriteRegStr HKCU "Software\Mozilla\Firefox" "OldDefaultBrowserCommand" "$0" - ${EndIf} - - ${GetParameters} $0 - ClearErrors - ${GetOptions} "$0" "/UAC:" $0 - ${If} ${Errors} ; Not elevated - Call ExecSetAsDefaultAppUser - ${Else} ; Elevated - execute the function in the unelevated process - GetFunctionAddress $0 ExecSetAsDefaultAppUser - UAC::ExecCodeSegment $0 - ${EndIf} - ${EndIf} - - ${If} $CheckboxShortcutOnBar == 1 - ${If} ${AtMostWinVista} - ClearErrors - ${GetParameters} $0 - ClearErrors - ${GetOptions} "$0" "/UAC:" $0 - ${If} ${Errors} - Call AddQuickLaunchShortcut - ${Else} - GetFunctionAddress $0 AddQuickLaunchShortcut - UAC::ExecCodeSegment $0 - ${EndIf} - ${EndIf} - ${EndIf} - - ${If} ${FileExists} "$INSTDIR\${FileMainEXE}.moz-upgrade" - Delete "$INSTDIR\${FileMainEXE}" - Rename "$INSTDIR\${FileMainEXE}.moz-upgrade" "$INSTDIR\${FileMainEXE}" - ${EndIf} - - StrCpy $ExitCode "${ERR_SUCCESS}" - - StrCpy $InstallCounterStep 0 - ${NSD_CreateTimer} FinishProgressBar ${InstallIntervalMS} -FunctionEnd - -Function FinishProgressBar - IntOp $InstallCounterStep $InstallCounterStep + 1 - - ${If} $InstallCounterStep < 10 - Return - ${EndIf} - - ${NSD_KillTimer} FinishProgressBar - - Call CopyPostSigningData - Call LaunchApp - Call SendPing -FunctionEnd - -Function OnBack - StrCpy $WasOptionsButtonClicked "1" - StrCpy $R9 "1" ; Goto the next page - Call RelativeGotoPage - ; The call to Abort prevents NSIS from trying to move to the previous or the - ; next page. - Abort -FunctionEnd - -Function RelativeGotoPage - IntCmp $R9 0 0 Move Move - StrCmp $R9 "X" 0 Move - StrCpy $R9 "120" - - Move: - SendMessage $HWNDPARENT "0x408" "$R9" "" -FunctionEnd - -Function UpdateFreeSpaceLabel - ; Only update when $ExistingTopDir isn't set - ${If} "$ExistingTopDir" != "" - StrLen $5 "$ExistingTopDir" - StrLen $6 "$INSTDIR" - ${If} $5 <= $6 - StrCpy $7 "$INSTDIR" $5 - ${If} "$7" == "$ExistingTopDir" - Return - ${EndIf} - ${EndIf} - ${EndIf} - - Call CheckSpace - - StrCpy $0 "$SpaceAvailableBytes" - - StrCpy $1 "$(BYTE)" - - ${If} $0 > 1024 - ${OrIf} $0 < 0 - System::Int64Op $0 / 1024 - Pop $0 - StrCpy $1 "$(KILO)$(BYTE)" - ${If} $0 > 1024 - ${OrIf} $0 < 0 - System::Int64Op $0 / 1024 - Pop $0 - StrCpy $1 "$(MEGA)$(BYTE)" - ${If} $0 > 1024 - ${OrIf} $0 < 0 - System::Int64Op $0 / 1024 - Pop $0 - StrCpy $1 "$(GIGA)$(BYTE)" - ${EndIf} - ${EndIf} - ${EndIf} - - SendMessage $LabelFreeSpace ${WM_SETTEXT} 0 "STR:$0 $1" -FunctionEnd - -Function OnChange_DirRequest - Pop $0 - System::Call 'user32::GetWindowTextW(i $DirRequest, w .r0, i ${NSIS_MAX_STRLEN})' - StrCpy $1 "$0" 1 ; the first character - ${If} "$1" == "$\"" - StrCpy $1 "$0" "" -1 ; the last character - ${If} "$1" == "$\"" - StrCpy $0 "$0" "" 1 ; all but the first character - StrCpy $0 "$0" -1 ; all but the last character - ${EndIf} - ${EndIf} - - StrCpy $INSTDIR "$0" - Call UpdateFreeSpaceLabel - - GetDlgItem $0 $HWNDPARENT 1 ; Install button - ${If} ${FileExists} "$INSTDIR\${FileMainEXE}" - SendMessage $0 ${WM_SETTEXT} 0 "STR:$(UPGRADE_BUTTON)" - ${Else} - SendMessage $0 ${WM_SETTEXT} 0 "STR:$(INSTALL_BUTTON)" - ${EndIf} -FunctionEnd - -Function OnClick_ButtonBrowse - StrCpy $0 "$INSTDIR" - nsDialogs::SelectFolderDialog /NOUNLOAD "$(SELECT_FOLDER_TEXT)" $0 - Pop $0 - ${If} $0 == "error" ; returns 'error' if 'cancel' was pressed? - Return - ${EndIf} - - ${If} $0 != "" - StrCpy $INSTDIR "$0" - System::Call 'user32::SetWindowTextW(i $DirRequest, w "$INSTDIR")' - ${EndIf} -FunctionEnd - -Function CheckSpace - ${If} "$ExistingTopDir" != "" - StrLen $0 "$ExistingTopDir" - StrLen $1 "$INSTDIR" - ${If} $0 <= $1 - StrCpy $2 "$INSTDIR" $3 - ${If} "$2" == "$ExistingTopDir" - Return - ${EndIf} - ${EndIf} - ${EndIf} - - StrCpy $ExistingTopDir "$INSTDIR" - ${DoUntil} ${FileExists} "$ExistingTopDir" - ${GetParent} "$ExistingTopDir" $ExistingTopDir - ${If} "$ExistingTopDir" == "" - StrCpy $SpaceAvailableBytes "0" - StrCpy $HasRequiredSpaceAvailable "false" - Return - ${EndIf} - ${Loop} - - ${GetLongPath} "$ExistingTopDir" $ExistingTopDir - - ; GetDiskFreeSpaceExW requires a backslash. - StrCpy $0 "$ExistingTopDir" "" -1 ; the last character - ${If} "$0" != "\" - StrCpy $0 "\" - ${Else} - StrCpy $0 "" - ${EndIf} - - System::Call 'kernel32::GetDiskFreeSpaceExW(w, *l, *l, *l) i("$ExistingTopDir$0", .r1, .r2, .r3) .' - StrCpy $SpaceAvailableBytes "$1" - - System::Int64Op $SpaceAvailableBytes / 1048576 - Pop $1 - System::Int64Op $1 > ${APPROXIMATE_REQUIRED_SPACE_MB} - Pop $1 - ${If} $1 == 1 - StrCpy $HasRequiredSpaceAvailable "true" - ${Else} - StrCpy $HasRequiredSpaceAvailable "false" - ${EndIf} -FunctionEnd - -Function CanWrite - StrCpy $CanWriteToInstallDir "false" - - StrCpy $0 "$INSTDIR" - ; Use the existing directory when it exists - ${Unless} ${FileExists} "$INSTDIR" - ; Get the topmost directory that exists for new installs - ${DoUntil} ${FileExists} "$0" - ${GetParent} "$0" $0 - ${If} "$0" == "" - Return - ${EndIf} - ${Loop} - ${EndUnless} - - GetTempFileName $2 "$0" - Delete $2 - CreateDirectory "$2" - ${If} ${FileExists} "$2" - ${If} ${FileExists} "$INSTDIR" - GetTempFileName $3 "$INSTDIR" - ${Else} - GetTempFileName $3 "$2" - ${EndIf} - ${If} ${FileExists} "$3" - Delete "$3" - StrCpy $CanWriteToInstallDir "true" - ${EndIf} - RmDir "$2" - ${EndIf} -FunctionEnd - -Function AddQuickLaunchShortcut - CreateShortCut "$QUICKLAUNCH\${BrandFullName}.lnk" "$INSTDIR\${FileMainEXE}" - ${If} ${FileExists} "$QUICKLAUNCH\${BrandFullName}.lnk" - ShellLink::SetShortCutWorkingDirectory "$QUICKLAUNCH\${BrandFullName}.lnk" \ - "$INSTDIR" - ${EndIf} -FunctionEnd - -Function ExecSetAsDefaultAppUser - ; Using the helper.exe lessens the stub installer size. - ; This could ask for elevatation when the user doesn't install as admin. - Exec "$\"$INSTDIR\uninstall\helper.exe$\" /SetAsDefaultAppUser" -FunctionEnd - -Function LaunchApp -!ifndef DEV_EDITION - FindWindow $0 "${WindowClass}" - ${If} $0 <> 0 ; integer comparison - StrCpy $FirefoxLaunchCode "1" - MessageBox MB_OK|MB_ICONQUESTION "$(WARN_MANUALLY_CLOSE_APP_LAUNCH)" - Return - ${EndIf} -!endif - - StrCpy $FirefoxLaunchCode "2" - - ; Set the current working directory to the installation directory - SetOutPath "$INSTDIR" - ClearErrors - ${GetParameters} $0 - ${GetOptions} "$0" "/UAC:" $1 - ${If} ${Errors} - Exec "$\"$INSTDIR\${FileMainEXE}$\"" - ${Else} - GetFunctionAddress $0 LaunchAppFromElevatedProcess - UAC::ExecCodeSegment $0 - ${EndIf} -FunctionEnd - -Function LaunchAppFromElevatedProcess - ; Find the installation directory when launching using GetFunctionAddress - ; from an elevated installer since $INSTDIR will not be set in this installer - ${StrFilter} "${FileMainEXE}" "+" "" "" $R9 - ReadRegStr $0 HKLM "Software\Clients\StartMenuInternet\$R9\DefaultIcon" "" - ${GetPathFromString} "$0" $0 - ; Set the current working directory to the installation directory - ${GetParent} "$0" $1 - SetOutPath "$1" - Exec "$\"$0$\"" -FunctionEnd - -Function CopyPostSigningData - ${LineRead} "$EXEDIR\postSigningData" "1" $PostSigningData - ${If} ${Errors} - ClearErrors - StrCpy $PostSigningData "0" - ${Else} - CreateDirectory "$LOCALAPPDATA\Mozilla\Firefox" - CopyFiles /SILENT "$EXEDIR\postSigningData" "$LOCALAPPDATA\Mozilla\Firefox" - ${Endif} -FunctionEnd - -Function DisplayDownloadError - ${NSD_KillTimer} DisplayDownloadError - ; To better display the error state on the taskbar set the progress completed - ; value to the total value. - ${ITBL3SetProgressValue} "100" "100" - ${ITBL3SetProgressState} "${TBPF_ERROR}" - MessageBox MB_OKCANCEL|MB_ICONSTOP "$(ERROR_DOWNLOAD)" IDCANCEL +2 IDOK +1 - StrCpy $OpenedDownloadPage "1" ; Already initialized to 0 - - ${If} "$OpenedDownloadPage" == "1" - ClearErrors - ${GetParameters} $0 - ${GetOptions} "$0" "/UAC:" $1 - ${If} ${Errors} - Call OpenManualDownloadURL - ${Else} - GetFunctionAddress $0 OpenManualDownloadURL - UAC::ExecCodeSegment $0 - ${EndIf} - ${EndIf} - - Call SendPing -FunctionEnd - -Function OpenManualDownloadURL - ExecShell "open" "${URLManualDownload}${URLManualDownloadAppend}" -FunctionEnd - -Section -SectionEnd diff --git a/browser/installer/windows/nsis/uninstaller.nsi b/browser/installer/windows/nsis/uninstaller.nsi index c97728b47..87f4d838a 100755 --- a/browser/installer/windows/nsis/uninstaller.nsi +++ b/browser/installer/windows/nsis/uninstaller.nsi @@ -258,7 +258,7 @@ Section "Uninstall" ${EndIf} ; Remove the updates directory for Vista and above - ${un.CleanUpdateDirectories} "Mozilla\Firefox" "Mozilla\updates" + ${un.CleanUpdateDirectories} "Mozilla\Basilisk" "Mozilla\updates" ; Remove any app model id's stored in the registry for this install path DeleteRegValue HKCU "Software\Mozilla\${AppName}\TaskBarIDs" "$INSTDIR" @@ -278,27 +278,27 @@ Section "Uninstall" ${un.SetAppLSPCategories} ${EndIf} - ${un.RegCleanAppHandler} "FirefoxURL" - ${un.RegCleanAppHandler} "FirefoxHTML" + ${un.RegCleanAppHandler} "BasiliskURL" + ${un.RegCleanAppHandler} "BasiliskHTML" ${un.RegCleanProtocolHandler} "ftp" ${un.RegCleanProtocolHandler} "http" ${un.RegCleanProtocolHandler} "https" ClearErrors - ReadRegStr $R9 HKCR "FirefoxHTML" "" - ; Don't clean up the file handlers if the FirefoxHTML key still exists since + ReadRegStr $R9 HKCR "BasiliskHTML" "" + ; Don't clean up the file handlers if the BasiliskHTML key still exists since ; there should be a second installation that may be the default file handler ${If} ${Errors} - ${un.RegCleanFileHandler} ".htm" "FirefoxHTML" - ${un.RegCleanFileHandler} ".html" "FirefoxHTML" - ${un.RegCleanFileHandler} ".shtml" "FirefoxHTML" - ${un.RegCleanFileHandler} ".xht" "FirefoxHTML" - ${un.RegCleanFileHandler} ".xhtml" "FirefoxHTML" - ${un.RegCleanFileHandler} ".oga" "FirefoxHTML" - ${un.RegCleanFileHandler} ".ogg" "FirefoxHTML" - ${un.RegCleanFileHandler} ".ogv" "FirefoxHTML" - ${un.RegCleanFileHandler} ".pdf" "FirefoxHTML" - ${un.RegCleanFileHandler} ".webm" "FirefoxHTML" + ${un.RegCleanFileHandler} ".htm" "BasiliskHTML" + ${un.RegCleanFileHandler} ".html" "BasiliskHTML" + ${un.RegCleanFileHandler} ".shtml" "BasiliskHTML" + ${un.RegCleanFileHandler} ".xht" "BasiliskHTML" + ${un.RegCleanFileHandler} ".xhtml" "BasiliskHTML" + ${un.RegCleanFileHandler} ".oga" "BasiliskHTML" + ${un.RegCleanFileHandler} ".ogg" "BasiliskHTML" + ${un.RegCleanFileHandler} ".ogv" "BasiliskHTML" + ${un.RegCleanFileHandler} ".pdf" "BasiliskHTML" + ${un.RegCleanFileHandler} ".webm" "BasiliskHTML" ${EndIf} SetShellVarContext all ; Set SHCTX to HKLM @@ -317,7 +317,7 @@ Section "Uninstall" ; The StartMenuInternet registry key is independent of the default browser ; settings. The XPInstall base un-installer always removes this key if it is ; uninstalling the default browser and it will always replace the keys when - ; installing even if there is another install of Firefox that is set as the + ; installing even if there is another install of Basilisk that is set as the ; default browser. Now the key is always updated on install but it is only ; removed if it refers to this install location. ${If} "$INSTDIR" == "$R1" @@ -333,7 +333,7 @@ Section "Uninstall" ; The StartMenuInternet registry key is independent of the default browser ; settings. The XPInstall base un-installer always removes this key if it is ; uninstalling the default browser and it will always replace the keys when - ; installing even if there is another install of Firefox that is set as the + ; installing even if there is another install of Basilisk that is set as the ; default browser. Now the key is always updated on install but it is only ; removed if it refers to this install location. ${If} "$INSTDIR" == "$R1" @@ -351,7 +351,7 @@ Section "Uninstall" StrCpy $0 "Software\Microsoft\MediaPlayer\ShimInclusionList\plugin-container.exe" DeleteRegKey HKLM "$0" DeleteRegKey HKCU "$0" - StrCpy $0 "Software\Classes\MIME\Database\Content Type\application/x-xpinstall;app=firefox" + StrCpy $0 "Software\Classes\MIME\Database\Content Type\application/x-xpinstall;app=Basilisk" DeleteRegKey HKLM "$0" DeleteRegKey HKCU "$0" ${Else} @@ -419,8 +419,8 @@ Section "Uninstall" ; Remove the installation directory if it is empty RmDir "$INSTDIR" - ; If firefox.exe was successfully deleted yet we still need to restart to - ; remove other files create a dummy firefox.exe.moz-delete to prevent the + ; If Basilisk.exe was successfully deleted yet we still need to restart to + ; remove other files create a dummy Basilisk.exe.moz-delete to prevent the ; installer from allowing an install without restart when it is required ; to complete an uninstall. ${If} ${RebootFlag} @@ -443,12 +443,12 @@ Section "Uninstall" ; clients registry key by the OS under some conditions. System::Call "shell32::SHChangeNotify(i ${SHCNE_ASSOCCHANGED}, i 0, i 0, i 0)" - ; Users who uninstall then reinstall expecting Firefox to use a clean profile - ; may be surprised during first-run. This key is checked during startup of Firefox and + ; Users who uninstall then reinstall expecting Basilisk to use a clean profile + ; may be surprised during first-run. This key is checked during startup of Basilisk and ; subsequently deleted after checking. If the value is found during startup - ; the browser will offer to Reset Firefox. We use the UpdateChannel to match - ; uninstalls of Firefox-release with reinstalls of Firefox-release, for example. - WriteRegStr HKCU "Software\Mozilla\Firefox" "Uninstalled-${UpdateChannel}" "True" + ; the browser will offer to Reset Basilisk. We use the UpdateChannel to match + ; uninstalls of Basilisk-release with reinstalls of Basilisk-release, for example. + WriteRegStr HKCU "Software\Mozilla\Basilisk" "Uninstalled-${UpdateChannel}" "True" !ifdef MOZ_MAINTENANCE_SERVICE ; Get the path the allowed cert is at and remove it diff --git a/browser/installer/windows/stub.tag b/browser/installer/windows/stub.tag deleted file mode 100644 index f32bef36e..000000000 --- a/browser/installer/windows/stub.tag +++ /dev/null @@ -1,4 +0,0 @@ -;!@Install@!UTF-8! -Title="Mozilla Firefox" -RunProgram="setup-stub.exe" -;!@InstallEnd@!
\ No newline at end of file diff --git a/browser/locales/Makefile.in b/browser/locales/Makefile.in index fac5531a6..b8aee0f14 100644 --- a/browser/locales/Makefile.in +++ b/browser/locales/Makefile.in @@ -61,10 +61,10 @@ STUB_HOOK = $(NSINSTALL) -D '$(ABS_DIST)/$(PKG_INST_PATH)'; \ $(NULL) endif -SEARCHPLUGINS_FILENAMES := $(shell $(call py_action,output_searchplugins_list,$(srcdir)/search/list.json $(AB_CD))) +SEARCHPLUGINS_FILENAMES := $(or $(shell $(call py_action,output_searchplugins_list,$(srcdir)/search/list.json $(AB_CD))), $(error Missing search plugins)) SEARCHPLUGINS_PATH := .deps/generated_$(AB_CD) SEARCHPLUGINS_TARGET := libs searchplugins -SEARCHPLUGINS := $(foreach plugin,$(addsuffix .xml,$(SEARCHPLUGINS_FILENAMES)),$(or $(wildcard $(srcdir)/searchplugins/$(plugin)),$(warning Missing searchplugin: $(plugin)))) +SEARCHPLUGINS := $(foreach plugin,$(addsuffix .xml,$(SEARCHPLUGINS_FILENAMES)),$(or $(wildcard $(srcdir)/searchplugins/$(plugin)),$(error Missing searchplugin: $(plugin)))) # Some locale-specific search plugins may have preprocessor directives, but the # default en-US ones do not. SEARCHPLUGINS_FLAGS := --silence-missing-directive-warnings @@ -96,12 +96,12 @@ DEFINES += -DBOOKMARKS_INCLUDE_DIR=$(dir $(call MERGE_FILE,profile/bookmarks.inc libs-%: $(NSINSTALL) -D $(DIST)/install - @$(MAKE) -C ../../toolkit/locales libs-$* XPI_ROOT_APPID='$(XPI_ROOT_APPID)' - @$(MAKE) -C ../../services/sync/locales AB_CD=$* XPI_NAME=locale-$* - @$(MAKE) -C ../../extensions/spellcheck/locales AB_CD=$* XPI_NAME=locale-$* + @$(MAKE) -C $(DEPTH)/toolkit/locales libs-$* XPI_ROOT_APPID='$(XPI_ROOT_APPID)' + @$(MAKE) -C $(DEPTH)/services/sync/locales AB_CD=$* XPI_NAME=locale-$* + @$(MAKE) -C $(DEPTH)/extensions/spellcheck/locales AB_CD=$* XPI_NAME=locale-$* # @$(MAKE) -C ../extensions/pocket/locale AB_CD=$* XPI_NAME=locale-$* - @$(MAKE) -C ../../intl/locales AB_CD=$* XPI_NAME=locale-$* - @$(MAKE) -C ../../devtools/client/locales AB_CD=$* XPI_NAME=locale-$* XPI_ROOT_APPID='$(XPI_ROOT_APPID)' + @$(MAKE) -C $(DEPTH)/intl/locales AB_CD=$* XPI_NAME=locale-$* + @$(MAKE) -C $(DEPTH)/devtools/client/locales AB_CD=$* XPI_NAME=locale-$* XPI_ROOT_APPID='$(XPI_ROOT_APPID)' @$(MAKE) -B searchplugins AB_CD=$* XPI_NAME=locale-$* @$(MAKE) libs AB_CD=$* XPI_NAME=locale-$* PREF_DIR=$(PREF_DIR) @$(MAKE) -C $(DEPTH)/$(MOZ_BRANDING_DIRECTORY)/locales AB_CD=$* XPI_NAME=locale-$* @@ -165,11 +165,6 @@ else endif endif -ifdef MOZ_CRASHREPORTER -libs:: crashreporter-override.ini - $(SYSINSTALL) $(IFLAGS1) $^ $(FINAL_TARGET) -endif - ident: @printf 'fx_revision ' @$(PYTHON) $(topsrcdir)/config/printconfigsetting.py \ diff --git a/browser/locales/en-US/chrome/browser/aboutHome.dtd b/browser/locales/en-US/chrome/browser/aboutHome.dtd index 7e3b57a79..17b401c6c 100644 --- a/browser/locales/en-US/chrome/browser/aboutHome.dtd +++ b/browser/locales/en-US/chrome/browser/aboutHome.dtd @@ -26,7 +26,7 @@ <!ENTITY abouthome.historyButton.label "History"> <!-- LOCALIZATION NOTE (abouthome.preferencesButtonWin.label): The label for the preferences/options item on about:home on Windows --> -<!ENTITY abouthome.preferencesButtonWin.label "Options"> +<!ENTITY abouthome.preferencesButtonWin.label "Preferences"> <!-- LOCALIZATION NOTE (abouthome.preferencesButtonUnix.label): The label for the preferences/options item on about:home on Linux and OS X --> <!ENTITY abouthome.preferencesButtonUnix.label "Preferences"> diff --git a/browser/locales/en-US/chrome/browser/browser.dtd b/browser/locales/en-US/chrome/browser/browser.dtd index f6fc6e3fd..6de17b64f 100644 --- a/browser/locales/en-US/chrome/browser/browser.dtd +++ b/browser/locales/en-US/chrome/browser/browser.dtd @@ -315,10 +315,8 @@ These should match what Safari and other Apple applications use on OS X Lion. -- <!ENTITY selectAllCmd.label "Select All"> <!ENTITY selectAllCmd.key "A"> <!ENTITY selectAllCmd.accesskey "A"> -<!ENTITY preferencesCmd2.label "Options"> -<!ENTITY preferencesCmd2.accesskey "O"> -<!ENTITY preferencesCmdUnix.label "Preferences"> -<!ENTITY preferencesCmdUnix.accesskey "n"> +<!ENTITY preferencesCmd2.label "Preferences"> +<!ENTITY preferencesCmd2.accesskey "P"> <!ENTITY clearRecentHistory.label "Clear Recent History…"> diff --git a/browser/locales/en-US/chrome/browser/browser.properties b/browser/locales/en-US/chrome/browser/browser.properties index 21e794f08..31f61632b 100644 --- a/browser/locales/en-US/chrome/browser/browser.properties +++ b/browser/locales/en-US/chrome/browser/browser.properties @@ -85,11 +85,14 @@ addonInstallError-2=The add-on could not be installed because it does not match addonInstallError-3=The add-on downloaded from this site could not be installed because it appears to be corrupt. addonInstallError-4=%2$S could not be installed because %1$S cannot modify the needed file. addonInstallError-5=%1$S has prevented this site from installing an unverified add-on. +addonInstallError-9=%2$S could not be installed because %1$S does not support WebExtensions. addonLocalInstallError-1=This add-on could not be installed because of a filesystem error. addonLocalInstallError-2=This add-on could not be installed because it does not match the add-on %1$S expected. addonLocalInstallError-3=This add-on could not be installed because it appears to be corrupt. addonLocalInstallError-4=%2$S could not be installed because %1$S cannot modify the needed file. addonLocalInstallError-5=This add-on could not be installed because it has not been verified. +addonLocalInstallError-9=%2$S could not be installed because %1$S does not support WebExtensions. + # LOCALIZATION NOTE (addonInstallErrorIncompatible): # %1$S is the application name, %2$S is the application version, %3$S is the add-on name @@ -128,10 +131,8 @@ lwthemeNeedsRestart.accesskey=R # See: http://developer.mozilla.org/en/docs/Localization_and_Plurals # #1 is brandShortName and #2 is the number of pop-ups blocked. popupWarning.message=#1 prevented this site from opening a pop-up window.;#1 prevented this site from opening #2 pop-up windows. -popupWarningButton=Options -popupWarningButton.accesskey=O -popupWarningButtonUnix=Preferences -popupWarningButtonUnix.accesskey=P +popupWarningButton=Preferences +popupWarningButton.accesskey=P popupAllow=Allow pop-ups for %S popupBlock=Block pop-ups for %S popupWarningDontShowFromMessage=Don’t show this message when pop-ups are blocked @@ -733,11 +734,8 @@ pendingCrashReports.alwaysSend = Always Send decoder.noCodecs.button = Learn how decoder.noCodecs.accesskey = L decoder.noCodecs.message = To play video, you may need to install Microsoft’s Media Feature Pack. -decoder.noCodecsVista.message = To play video, you may need to install Microsoft’s Platform Update Supplement for Windows Vista. -decoder.noCodecsXP.message = To play video, you may need to enable Adobe’s Primetime Content Decryption Module. decoder.noCodecsLinux.message = To play video, you may need to install the required video codecs. decoder.noHWAcceleration.message = To improve video quality, you may need to install Microsoft’s Media Feature Pack. -decoder.noHWAccelerationVista.message = To improve video quality, you may need to install Microsoft’s Platform Update Supplement for Windows Vista. decoder.noPulseAudio.message = To play audio, you may need to install the required PulseAudio software. decoder.unsupportedLibavcodec.message = libavcodec may be vulnerable or is not supported, and should be updated to play video. diff --git a/browser/locales/en-US/chrome/browser/customizableui/customizableWidgets.properties b/browser/locales/en-US/chrome/browser/customizableui/customizableWidgets.properties index a467aef69..a68f59fe3 100644 --- a/browser/locales/en-US/chrome/browser/customizableui/customizableWidgets.properties +++ b/browser/locales/en-US/chrome/browser/customizableui/customizableWidgets.properties @@ -39,10 +39,6 @@ add-ons-button.tooltiptext3 = Manage your add-ons (%S) preferences-button.label = Preferences preferences-button.tooltiptext2 = Open preferences preferences-button.tooltiptext.withshortcut = Open preferences (%S) -# LOCALIZATION NOTE (preferences-button.labelWin): Windows-only label for Options -preferences-button.labelWin = Options -# LOCALIZATION NOTE (preferences-button.tooltipWin): Windows-only tooltip for Options -preferences-button.tooltipWin2 = Open options zoom-controls.label = Zoom Controls zoom-controls.tooltiptext2 = Zoom controls diff --git a/browser/locales/en-US/chrome/browser/migration/migration.dtd b/browser/locales/en-US/chrome/browser/migration/migration.dtd index df6938c51..ad9293a5d 100644 --- a/browser/locales/en-US/chrome/browser/migration/migration.dtd +++ b/browser/locales/en-US/chrome/browser/migration/migration.dtd @@ -5,8 +5,7 @@ <!ENTITY migrationWizard.title "Import Wizard"> -<!ENTITY importFrom.label "Import Options, Bookmarks, History, Passwords and other data from:"> -<!ENTITY importFromUnix.label "Import Preferences, Bookmarks, History, Passwords and other data from:"> +<!ENTITY importFrom.label "Import Preferences, Bookmarks, History, Passwords and other data from:"> <!ENTITY importFromBookmarks.label "Import Bookmarks from:"> <!ENTITY importFromIE.label "Microsoft Internet Explorer"> diff --git a/browser/locales/en-US/chrome/browser/preferences/cookies.dtd b/browser/locales/en-US/chrome/browser/preferences/cookies.dtd index 9dfafffa5..5e7df9609 100644 --- a/browser/locales/en-US/chrome/browser/preferences/cookies.dtd +++ b/browser/locales/en-US/chrome/browser/preferences/cookies.dtd @@ -7,13 +7,6 @@ <!ENTITY cookiesonsystem.label "The following cookies are stored on your computer:"> <!ENTITY cookiename.label "Cookie Name"> <!ENTITY cookiedomain.label "Site"> -<!-- LOCALIZATION NOTE (button.removeSelectedCookies.accesskey): - The label associated with this accesskey can be found in - preferences.properties as removeSelectedCookies. ---> -<!ENTITY button.removeSelectedCookies.accesskey "R"> -<!ENTITY button.removeAllCookies.label "Remove All"> -<!ENTITY button.removeAllCookies.accesskey "A"> <!ENTITY props.name.label "Name:"> <!ENTITY props.value.label "Content:"> diff --git a/browser/locales/en-US/chrome/browser/preferences/preferences.dtd b/browser/locales/en-US/chrome/browser/preferences/preferences.dtd index 380da7178..7702c8c51 100644 --- a/browser/locales/en-US/chrome/browser/preferences/preferences.dtd +++ b/browser/locales/en-US/chrome/browser/preferences/preferences.dtd @@ -3,7 +3,6 @@ - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> -<!ENTITY prefWindow.titleWin "Options"> <!ENTITY prefWindow.title "Preferences"> <!-- LOCALIZATION NOTE (prefWindow.titleGNOME): This is not used for in-content preferences --> <!ENTITY prefWindow.titleGNOME "&brandShortName; Preferences"> diff --git a/browser/locales/en-US/chrome/browser/preferences/preferences.properties b/browser/locales/en-US/chrome/browser/preferences/preferences.properties index bf9ac602b..da40f40a9 100644 --- a/browser/locales/en-US/chrome/browser/preferences/preferences.properties +++ b/browser/locales/en-US/chrome/browser/preferences/preferences.properties @@ -21,7 +21,7 @@ acceptVeryLargeMinimumFont=Keep my changes anyway trackingprotectionpermissionstext=You have disabled Tracking Protection on these sites. trackingprotectionpermissionstitle=Exceptions - Tracking Protection -cookiepermissionstext=You can specify which websites are always or never allowed to use cookies. Type the exact address of the site you want to manage and then click Block, Allow for Session, or Allow. +cookiepermissionstext=You can specify which websites are always or never allowed to use cookies. Type the exact address of the site you want to manage and then click Block, Allow for Session, or Allow. cookiepermissionstitle=Exceptions - Cookies addonspermissionstext=You can specify which websites are allowed to install add-ons. Type the exact address of the site you want to allow and then click Allow. addons_permissions_title=Allowed Sites - Add-ons Installation @@ -123,6 +123,18 @@ cannot=Block noCookieSelected=<no cookie selected> cookiesAll=The following cookies are stored on your computer: cookiesFiltered=The following cookies match your search: + +# LOCALIZATION NOTE (removeAllCookies, removeAllShownCookies): +# removeAllCookies and removeAllShownCookies are both used on the same one button, +# never displayed together and can share the same accesskey. +# When only partial cookies are shown as a result of keyword search, +# removeAllShownCookies is displayed as button label. +# removeAllCookies is displayed when no keyword search and all cookies are shown. +removeAllCookies.label=Remove All +removeAllCookies.accesskey=A +removeAllShownCookies.label=Remove All Shown +removeAllShownCookies.accesskey=A + # LOCALIZATION NOTE (removeSelectedCookies): # Semicolon-separated list of plural forms. See: # http://developer.mozilla.org/en/docs/Localization_and_Plurals @@ -130,13 +142,15 @@ cookiesFiltered=The following cookies match your search: # you can use #1 in your localization as a placeholder for the number. # For example this is the English string with numbers: # removeSelectedCookied=Remove #1 Selected;Remove #1 Selected -removeSelectedCookies=Remove Selected;Remove Selected +removeSelectedCookies.label=Remove Selected;Remove Selected +removeSelectedCookies.accesskey=R + defaultUserContextLabel=None #### Offline apps offlineAppsList.height=7em offlineAppRemoveTitle=Remove offline website data -offlineAppRemovePrompt=After removing this data, %S will not be available offline. Are you sure you want to remove this offline website? +offlineAppRemovePrompt=After removing this data, %S will not be available offline. Are you sure you want to remove this offline website? offlineAppRemoveConfirm=Remove offline data # LOCALIZATION NOTE: The next string is for the disk usage of the diff --git a/browser/locales/en-US/chrome/browser/preferences/security.dtd b/browser/locales/en-US/chrome/browser/preferences/security.dtd index ca9420401..7ccc9af50 100644 --- a/browser/locales/en-US/chrome/browser/preferences/security.dtd +++ b/browser/locales/en-US/chrome/browser/preferences/security.dtd @@ -31,6 +31,9 @@ <!ENTITY passwordExceptions.label "Exceptions…"> <!ENTITY passwordExceptions.accesskey "x"> +<!ENTITY autofillPasswords.label "Automatically fill in log-in details"> +<!ENTITY autofillPasswords.accesskey "A"> + <!ENTITY useMasterPassword.label "Use a master password"> <!ENTITY useMasterPassword.accesskey "U"> <!ENTITY changeMasterPassword.label "Change Master Password…"> diff --git a/browser/locales/en-US/chrome/browser/syncCustomize.dtd b/browser/locales/en-US/chrome/browser/syncCustomize.dtd index 3375c48ce..e59d1db25 100644 --- a/browser/locales/en-US/chrome/browser/syncCustomize.dtd +++ b/browser/locales/en-US/chrome/browser/syncCustomize.dtd @@ -6,8 +6,7 @@ <!ENTITY syncCustomize.acceptButton.label "Start"> <!ENTITY syncCustomize.title "What would you like to sync?"> -<!ENTITY syncCustomize.description "You can change this selection in Options."> -<!ENTITY syncCustomizeUnix.description "You can change this selection in Preferences."> +<!ENTITY syncCustomize.description "You can change this selection in Preferences."> <!-- These engine names are the same as in browser/preferences/sync.dtd except diff --git a/browser/locales/en-US/chrome/browser/syncSetup.dtd b/browser/locales/en-US/chrome/browser/syncSetup.dtd index 1fd46942d..950a83553 100644 --- a/browser/locales/en-US/chrome/browser/syncSetup.dtd +++ b/browser/locales/en-US/chrome/browser/syncSetup.dtd @@ -72,7 +72,7 @@ <!-- Existing Account Page 2: Manual Login --> <!ENTITY setup.signInPage.title.label "Sign In"> -<!ENTITY existingRecoveryKey.description "You can get a copy of your Recovery Key by going to &syncBrand.shortName.label; Options on your other device, and selecting "My Recovery Key" under "Manage Account"."> +<!ENTITY existingRecoveryKey.description "You can get a copy of your Recovery Key by going to &syncBrand.shortName.label; Preferences on your other device, and selecting "My Recovery Key" under "Manage Account"."> <!ENTITY verifying.label "Verifying…"> <!ENTITY resetPassword.label "Reset Password"> <!ENTITY resetSyncKey.label "I have lost my other device."> diff --git a/browser/locales/en-US/firefox-l10n.js b/browser/locales/en-US/firefox-l10n.js index c1e5510f3..642ad6534 100644 --- a/browser/locales/en-US/firefox-l10n.js +++ b/browser/locales/en-US/firefox-l10n.js @@ -4,8 +4,4 @@ #filter substitution -# LOCALIZATION NOTE: this preference is set to true for en-US specifically, -# locales without this line have the setting set to false by default. -pref("browser.search.geoSpecificDefaults", true); - pref("general.useragent.locale", "@AB_CD@"); diff --git a/browser/locales/search/list.json b/browser/locales/search/list.json index 9f7d82b4e..722f3186f 100644 --- a/browser/locales/search/list.json +++ b/browser/locales/search/list.json @@ -5,36 +5,6 @@ ] }, "regionOverrides": { - "US": { - "google": "google-nocodes" - }, - "CA": { - "google": "google-nocodes" - }, - "KZ": { - "google": "google-nocodes" - }, - "BY": { - "google": "google-nocodes" - }, - "RU": { - "google": "google-nocodes" - }, - "TR": { - "google": "google-nocodes" - }, - "UA": { - "google": "google-nocodes" - }, - "CN": { - "google": "google-nocodes" - }, - "TW": { - "google": "google-nocodes" - }, - "HK": { - "google": "google-nocodes" - } }, "locales": { "en-US": { diff --git a/browser/modules/AboutHome.jsm b/browser/modules/AboutHome.jsm index 01cbafba9..639194c20 100644 --- a/browser/modules/AboutHome.jsm +++ b/browser/modules/AboutHome.jsm @@ -24,17 +24,10 @@ XPCOMUtils.defineLazyModuleGetter(this, "PrivateBrowsingUtils", XPCOMUtils.defineLazyModuleGetter(this, "Promise", "resource://gre/modules/Promise.jsm"); -// Url to fetch snippets, in the urlFormatter service format. -const SNIPPETS_URL_PREF = "browser.aboutHomeSnippets.updateUrl"; - -// Should be bumped up if the snippets content format changes. -const STARTPAGE_VERSION = 4; +// Should be bumped up if any data content format changes. +const STARTPAGE_VERSION = 5; this.AboutHomeUtils = { - get snippetsVersion() { - return STARTPAGE_VERSION; - }, - /* * showKnowYourRights - Determines if the user should be shown the * about:rights notification. The notification should *not* be shown if @@ -54,7 +47,7 @@ this.AboutHomeUtils = { return !Services.prefs.getBoolPref("browser.EULA.override"); } catch (e) { } - if (!AppConstants.MOZILLA_OFFICIAL) { + if (!AppConstants.MC_OFFICIAL) { // Non-official builds shouldn't show the notification. return false; } @@ -77,16 +70,6 @@ this.AboutHomeUtils = { }; /** - * Returns the URL to fetch snippets from, in the urlFormatter service format. - */ -XPCOMUtils.defineLazyGetter(AboutHomeUtils, "snippetsURL", function() { - let updateURL = Services.prefs - .getCharPref(SNIPPETS_URL_PREF) - .replace("%STARTPAGE_VERSION%", STARTPAGE_VERSION); - return Services.urlFormatter.formatURL(updateURL); -}); - -/** * This code provides services to the about:home page. Whenever * about:home needs to do something chrome-privileged, it sends a * message that's handled here. @@ -169,9 +152,7 @@ var AboutHome = { ss.promiseInitialized.then(function() { let data = { showRestoreLastSession: ss.canRestoreLastSession, - snippetsURL: AboutHomeUtils.snippetsURL, - showKnowYourRights: AboutHomeUtils.showKnowYourRights, - snippetsVersion: AboutHomeUtils.snippetsVersion, + showKnowYourRights: AboutHomeUtils.showKnowYourRights }; if (AboutHomeUtils.showKnowYourRights) { diff --git a/browser/modules/ContentCrashHandlers.jsm b/browser/modules/ContentCrashHandlers.jsm index 2f755d142..488cc4f26 100644 --- a/browser/modules/ContentCrashHandlers.jsm +++ b/browser/modules/ContentCrashHandlers.jsm @@ -90,8 +90,6 @@ this.TabCrashHandler = { Services.telemetry .getHistogramById("FX_CONTENT_CRASH_DUMP_UNAVAILABLE") .add(1); - } else if (AppConstants.MOZ_CRASHREPORTER) { - this.childMap.set(childID, dumpID); } if (!this.flushCrashedBrowserQueue(childID)) { @@ -115,15 +113,6 @@ this.TabCrashHandler = { } } - // check for environment affecting crash reporting - let env = Cc["@mozilla.org/process/environment;1"] - .getService(Ci.nsIEnvironment); - let shutdown = env.exists("MOZ_CRASHREPORTER_SHUTDOWN"); - - if (shutdown) { - Services.startup.quit(Ci.nsIAppStartup.eForceQuit); - } - break; } case "oop-frameloader-crashed": { @@ -306,105 +295,10 @@ this.TabCrashHandler = { /** * Submits a crash report from about:tabcrashed, if the crash * reporter is enabled and a crash report can be found. - * - * @param aBrowser - * The <xul:browser> that the report was sent from. - * @param aFormData - * An Object with the following properties: - * - * includeURL (bool): - * Whether to include the URL that the user was on - * in the crashed tab before the crash occurred. - * URL (String) - * The URL that the user was on in the crashed tab - * before the crash occurred. - * emailMe (bool): - * Whether or not to include the user's email address - * in the crash report. - * email (String): - * The email address of the user. - * comments (String): - * Any additional comments from the user. - * - * Note that it is expected that all properties are set, - * even if they are empty. */ maybeSendCrashReport(message) { - if (!AppConstants.MOZ_CRASHREPORTER) { - return; - } - - if (!message.data.hasReport) { - // There was no report, so nothing to do. - return; - } - - let browser = message.target.browser; - - if (message.data.autoSubmit) { - // The user has opted in to autosubmitted backlogged - // crash reports in the future. - UnsubmittedCrashHandler.autoSubmit = true; - } - - let childID = this.browserMap.get(browser.permanentKey); - let dumpID = this.childMap.get(childID); - if (!dumpID) { - return; - } - - if (!message.data.sendReport) { - Services.telemetry.getHistogramById("FX_CONTENT_CRASH_NOT_SUBMITTED").add(1); - this.prefs.setBoolPref("sendReport", false); - return; - } - - let { - includeURL, - comments, - email, - emailMe, - URL, - } = message.data; - - let extraExtraKeyVals = { - "Comments": comments, - "Email": email, - "URL": URL, - }; - - // For the entries in extraExtraKeyVals, we only want to submit the - // extra data values where they are not the empty string. - for (let key in extraExtraKeyVals) { - let val = extraExtraKeyVals[key].trim(); - if (!val) { - delete extraExtraKeyVals[key]; - } - } - - // URL is special, since it's already been written to extra data by - // default. In order to make sure we don't send it, we overwrite it - // with the empty string. - if (!includeURL) { - extraExtraKeyVals["URL"] = ""; - } - - CrashSubmit.submit(dumpID, { - recordSubmission: true, - extraExtraKeyVals, - }).then(null, Cu.reportError); - - this.prefs.setBoolPref("sendReport", true); - this.prefs.setBoolPref("includeURL", includeURL); - this.prefs.setBoolPref("emailMe", emailMe); - if (emailMe) { - this.prefs.setCharPref("email", email); - } else { - this.prefs.setCharPref("email", ""); - } - - this.childMap.set(childID, null); // Avoid resubmission. - this.removeSubmitCheckboxesForSameCrash(childID); + /*** STUB ***/ + return; }, removeSubmitCheckboxesForSameCrash: function(childID) { @@ -518,17 +412,10 @@ this.TabCrashHandler = { /** * For some <xul:browser>, return a crash report dump ID for that browser * if we have been informed of one. Otherwise, return null. - * - * @param browser (<xul:browser) - * The browser to try to get the dump ID for - * @returns dumpID (String) */ getDumpID(browser) { - if (!AppConstants.MOZ_CRASHREPORTER) { - return null; - } - - return this.childMap.get(this.browserMap.get(browser.permanentKey)); + /*** STUB ***/ + return null; }, } diff --git a/browser/modules/ContentWebRTC.jsm b/browser/modules/ContentWebRTC.jsm index bfb98a868..fd50176a0 100644 --- a/browser/modules/ContentWebRTC.jsm +++ b/browser/modules/ContentWebRTC.jsm @@ -208,6 +208,7 @@ function prompt(aContentWindow, aWindowID, aCallID, aConstraints, aDevices, aSec let request = { callID: aCallID, windowID: aWindowID, + origin: aContentWindow.origin, documentURI: aContentWindow.document.documentURI, secure: aSecure, requestTypes: requestTypes, diff --git a/browser/modules/PluginContent.jsm b/browser/modules/PluginContent.jsm index 1bbfa9a50..622d608bc 100644 --- a/browser/modules/PluginContent.jsm +++ b/browser/modules/PluginContent.jsm @@ -660,30 +660,8 @@ PluginContent.prototype = { }, submitReport: function submitReport(plugin) { - if (!AppConstants.MOZ_CRASHREPORTER) { - return; - } - if (!plugin) { - Cu.reportError("Attempted to submit crash report without an associated plugin."); - return; - } - if (!(plugin instanceof Ci.nsIObjectLoadingContent)) { - Cu.reportError("Attempted to submit crash report on plugin that does not" + - "implement nsIObjectLoadingContent."); - return; - } - - let runID = plugin.runID; - let submitURLOptIn = this.getPluginUI(plugin, "submitURLOptIn").checked; - let keyVals = {}; - let userComment = this.getPluginUI(plugin, "submitComment").value.trim(); - if (userComment) - keyVals.PluginUserComment = userComment; - if (submitURLOptIn) - keyVals.PluginContentURL = plugin.ownerDocument.URL; - - this.global.sendAsyncMessage("PluginContent:SubmitReport", - { runID, keyVals, submitURLOptIn }); + /*** STUB ***/ + return; }, reloadPage: function () { diff --git a/browser/modules/webrtcUI.jsm b/browser/modules/webrtcUI.jsm index b24135bfc..08de46bb3 100644 --- a/browser/modules/webrtcUI.jsm +++ b/browser/modules/webrtcUI.jsm @@ -290,7 +290,13 @@ function prompt(aBrowser, aRequest) { let {audioDevices: audioDevices, videoDevices: videoDevices, sharingScreen: sharingScreen, sharingAudio: sharingAudio, requestTypes: requestTypes} = aRequest; - let uri = Services.io.newURI(aRequest.documentURI, null, null); + let uri; + try { + // This fails for principals that serialize to "null", e.g. file URIs. + uri = Services.io.newURI(aRequest.origin, null, null); + } catch (e) { + uri = Services.io.newURI(aRequest.documentURI, null, null); + } let host = getHost(uri); let chromeDoc = aBrowser.ownerDocument; let chromeWin = chromeDoc.defaultView; diff --git a/browser/moz.build b/browser/moz.build index a691aeef2..0985148c0 100644 --- a/browser/moz.build +++ b/browser/moz.build @@ -11,7 +11,6 @@ SPHINX_TREES['browser'] = 'docs' DIRS += [ 'base', 'components', - 'experiments', 'fonts', 'locales', 'modules', diff --git a/browser/moz.configure b/browser/moz.configure index fba4603be..d5e7dba11 100644 --- a/browser/moz.configure +++ b/browser/moz.configure @@ -4,9 +4,4 @@ # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. -imply_option('MOZ_PLACES', True) -imply_option('MOZ_SERVICES_HEALTHREPORT', True) -imply_option('MOZ_SERVICES_SYNC', True) -imply_option('MOZ_SERVICES_CLOUDSYNC', True) - include('../toolkit/moz.configure') diff --git a/browser/themes/linux/jar.mn b/browser/themes/linux/jar.mn index e09029438..0bf023f35 100644 --- a/browser/themes/linux/jar.mn +++ b/browser/themes/linux/jar.mn @@ -129,9 +129,6 @@ browser.jar: skin/classic/browser/syncQuota.css skin/classic/browser/syncProgress-horizontalbar.png skin/classic/browser/syncProgress-horizontalbar@2x.png -#ifdef E10S_TESTING_ONLY - skin/classic/browser/e10s-64@2x.png (../shared/e10s-64@2x.png) -#endif [extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}] chrome.jar: % override chrome://browser/skin/feeds/audioFeedIcon.png chrome://browser/skin/feeds/feedIcon.png diff --git a/browser/themes/osx/jar.mn b/browser/themes/osx/jar.mn index fd9b6127d..98ba4e6ea 100644 --- a/browser/themes/osx/jar.mn +++ b/browser/themes/osx/jar.mn @@ -209,9 +209,6 @@ browser.jar: skin/classic/browser/yosemite/tab-stroke-end-inactive@2x.png (tabbrowser/tab-stroke-end-yosemite-inactive@2x.png) skin/classic/browser/yosemite/tab-stroke-start-inactive.png (tabbrowser/tab-stroke-start-yosemite-inactive.png) skin/classic/browser/yosemite/tab-stroke-start-inactive@2x.png (tabbrowser/tab-stroke-start-yosemite-inactive@2x.png) -#ifdef E10S_TESTING_ONLY - skin/classic/browser/e10s-64@2x.png (../shared/e10s-64@2x.png) -#endif [extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}] chrome.jar: % override chrome://browser/skin/feeds/audioFeedIcon.png chrome://browser/skin/feeds/feedIcon.png diff --git a/browser/themes/osx/shared.inc b/browser/themes/osx/shared.inc index b3ea4e199..3076450e2 100644 --- a/browser/themes/osx/shared.inc +++ b/browser/themes/osx/shared.inc @@ -1,4 +1,4 @@ -%include ../../../toolkit/themes/osx/global/shared.inc
+%include ../../../../toolkit/themes/osx/global/shared.inc
%include ../shared/browser.inc
%filter substitution
diff --git a/browser/themes/shared/incontentprefs/preferences.inc.css b/browser/themes/shared/incontentprefs/preferences.inc.css index 577baa6ed..0e62660de 100644 --- a/browser/themes/shared/incontentprefs/preferences.inc.css +++ b/browser/themes/shared/incontentprefs/preferences.inc.css @@ -173,6 +173,11 @@ treecol { margin-inline-start: 0; } +#browserHomePage:-moz-locale-dir(rtl) input { + unicode-bidi: plaintext; + direction: rtl; +} + /* Content pane */ #playDRMContentLink { /* Line up with the buttons in the other grid bits: */ diff --git a/browser/themes/shared/tabs.inc.css b/browser/themes/shared/tabs.inc.css index 632a6e606..c505416e4 100644 --- a/browser/themes/shared/tabs.inc.css +++ b/browser/themes/shared/tabs.inc.css @@ -55,8 +55,9 @@ .tab-background-middle { -moz-box-flex: 1; background-clip: padding-box; - border-left: @tabCurveHalfWidth@ solid transparent; - border-right: @tabCurveHalfWidth@ solid transparent; + /* Deliberately create a 1px overlap left/right to cover rounding gaps */ + border-left: calc(@tabCurveHalfWidth@ - 1px) solid transparent; + border-right: calc(@tabCurveHalfWidth@ - 1px) solid transparent; margin: 0 -@tabCurveHalfWidth@; } diff --git a/browser/themes/windows/Info-XP.png b/browser/themes/windows/Info-XP.png Binary files differdeleted file mode 100644 index c20f66ce6..000000000 --- a/browser/themes/windows/Info-XP.png +++ /dev/null diff --git a/browser/themes/windows/Privacy-16-XP.png b/browser/themes/windows/Privacy-16-XP.png Binary files differdeleted file mode 100644 index 335febbb3..000000000 --- a/browser/themes/windows/Privacy-16-XP.png +++ /dev/null diff --git a/browser/themes/windows/Toolbar-XP.png b/browser/themes/windows/Toolbar-XP.png Binary files differdeleted file mode 100644 index dff60911f..000000000 --- a/browser/themes/windows/Toolbar-XP.png +++ /dev/null diff --git a/browser/themes/windows/Toolbar-lunaSilver.png b/browser/themes/windows/Toolbar-lunaSilver.png Binary files differdeleted file mode 100644 index 30c425c26..000000000 --- a/browser/themes/windows/Toolbar-lunaSilver.png +++ /dev/null diff --git a/browser/themes/windows/Toolbar-aero.png b/browser/themes/windows/Toolbar-win7.png Binary files differindex b191ce2aa..b191ce2aa 100644 --- a/browser/themes/windows/Toolbar-aero.png +++ b/browser/themes/windows/Toolbar-win7.png diff --git a/browser/themes/windows/Toolbar-aero@2x.png b/browser/themes/windows/Toolbar-win7@2x.png Binary files differindex 033d87dff..033d87dff 100644 --- a/browser/themes/windows/Toolbar-aero@2x.png +++ b/browser/themes/windows/Toolbar-win7@2x.png diff --git a/browser/themes/windows/actionicon-tab-XPVista7.png b/browser/themes/windows/actionicon-tab-win7.png Binary files differindex 8437c7655..8437c7655 100644 --- a/browser/themes/windows/actionicon-tab-XPVista7.png +++ b/browser/themes/windows/actionicon-tab-win7.png diff --git a/browser/themes/windows/browser-aero.css b/browser/themes/windows/browser-aero.css index 5ff9d8250..dbac6bb7a 100644 --- a/browser/themes/windows/browser-aero.css +++ b/browser/themes/windows/browser-aero.css @@ -46,8 +46,7 @@ color: graytext; } - @media (-moz-os-version: windows-vista), - (-moz-os-version: windows-win7) { + @media (-moz-os-version: windows-win7) { .sidebar-header:not(:-moz-lwtheme), #sidebar-header:not(:-moz-lwtheme) { background-color: #EEF3FA; @@ -83,190 +82,353 @@ -moz-appearance: -moz-win-exclude-glass; } - @media not all and (-moz-os-version: windows-vista) { - @media not all and (-moz-os-version: windows-win7) { - @media not all and (-moz-os-version: windows-win8) { - @media (-moz-windows-default-theme) { - #main-window { - background-color: hsl(0, 0%, 78%); - } - - :root[tabsintitlebar] .tab-label:-moz-window-inactive { - /* Calculated to match the opacity change of Windows Explorer - titlebar text change for inactive windows. */ - opacity: .6; - } - } + @media (-moz-os-version: windows-win10) { + /* Draw XUL caption buttons and background on Windows 10 */ + @media (-moz-windows-default-theme) { + #main-window { + background-color: hsl(0, 0%, 78%); + } - @media not all and (-moz-windows-default-theme) { - #main-window { - background-color: transparent; - } - } + :root[tabsintitlebar] .tab-label:-moz-window-inactive { + /* Calculated to match the opacity change of Windows Explorer + titlebar text change for inactive windows. */ + opacity: .6; + } + } - #titlebar-buttonbox, - .titlebar-button { - -moz-appearance: none !important; - } + @media not all and (-moz-windows-accent-color-applies) { + /* Default styling for when no accent color is applied */ + #main-window:not(:-moz-window-inactive):not(:-moz-lwtheme) { + background-color: hsl(235, 33%, 19%); + } + + :root:not(:-moz-window-inactive):not(:-moz-lwtheme) { + --titlebar-text-color: white; + } + + #titlebar-min:not(:-moz-window-inactive):not(:-moz-lwtheme) { + list-style-image: url(chrome://browser/skin/caption-buttons.svg#minimize-highlight); + } - .titlebar-button { - border: none; - margin: 0 !important; - padding: 10px 17px; - } + #titlebar-max:not(:-moz-window-inactive):not(:-moz-lwtheme) { + list-style-image: url(chrome://browser/skin/caption-buttons.svg#maximize-highlight); + } - #main-window[sizemode=maximized] .titlebar-button { - padding-top: 8px; - padding-bottom: 8px; - } + #main-window[sizemode="maximized"] #titlebar-max:not(:-moz-window-inactive):not(:-moz-lwtheme) { + list-style-image: url(chrome://browser/skin/caption-buttons.svg#restore-highlight); + } + + #titlebar-close:not(:-moz-window-inactive):not(:-moz-lwtheme) { + list-style-image: url(chrome://browser/skin/caption-buttons.svg#close-highlight); + } - .titlebar-button > .toolbarbutton-icon { - width: 12px; - height: 12px; - } + .titlebar-button:not(#titlebar-close):not(:-moz-window-inactive):not(:-moz-lwtheme):hover { + background-color: hsla(0, 0%, 100%, .17); + } + + .titlebar-button:not(#titlebar-close):not(:-moz-window-inactive):not(:-moz-lwtheme):hover:active { + background-color: hsla(0, 0%, 100%, .27); + transition: none; + } + + #titlebar-close:not(:-moz-window-inactive):not(:-moz-lwtheme):hover { + background-color: hsla(0, 86%, 49%, 1); + } + + #titlebar-close:not(:-moz-window-inactive):not(:-moz-lwtheme):hover:active { + background-color: hsla(0, 60%, 39%, 1); + transition: none; + } + } + + @media (-moz-windows-accent-color-applies) { + /* Styling for when an accent color is applied to the titlebar */ + #main-window:not(:-moz-window-inactive):not(:-moz-lwtheme) { + background-color: -moz-win-accentcolor; + } + + :root:not(:-moz-window-inactive):not(:-moz-lwtheme) { + --titlebar-text-color: -moz-win-accentcolortext; + } + + #titlebar-min { + list-style-image: url(chrome://browser/skin/caption-buttons.svg#minimize); + } + + #titlebar-max { + list-style-image: url(chrome://browser/skin/caption-buttons.svg#maximize); + } + + #main-window[sizemode="maximized"] #titlebar-max { + list-style-image: url(chrome://browser/skin/caption-buttons.svg#restore); + } + + #titlebar-close { + list-style-image: url(chrome://browser/skin/caption-buttons.svg#close); + } + + .titlebar-button:hover { + background-color: hsla(0, 0%, 0%, .17); + } + .titlebar-button:hover:active { + background-color: hsla(0, 0%, 0%, .27); + transition: none; + } + + @media (-moz-windows-accent-color-is-dark) { + /* dark accent color */ #titlebar-min { - list-style-image: url(chrome://browser/skin/caption-buttons.svg#minimize); + list-style-image: url(chrome://browser/skin/caption-buttons.svg#minimize-highlight); } #titlebar-max { - list-style-image: url(chrome://browser/skin/caption-buttons.svg#maximize); + list-style-image: url(chrome://browser/skin/caption-buttons.svg#maximize-highlight); } #main-window[sizemode="maximized"] #titlebar-max { - list-style-image: url(chrome://browser/skin/caption-buttons.svg#restore); + list-style-image: url(chrome://browser/skin/caption-buttons.svg#restore-highlight); } #titlebar-close { - list-style-image: url(chrome://browser/skin/caption-buttons.svg#close); - } - #titlebar-close:hover { - list-style-image: url(chrome://browser/skin/caption-buttons.svg#close-white); + list-style-image: url(chrome://browser/skin/caption-buttons.svg#close-highlight); } - - #titlebar-min:-moz-lwtheme { - list-style-image: url(chrome://browser/skin/caption-buttons.svg#minimize-themes); + + .titlebar-button:not(#titlebar-close):not(:-moz-window-inactive):not(:-moz-lwtheme):hover { + background-color: hsla(0, 0%, 100%, .17); } - #titlebar-max:-moz-lwtheme { - list-style-image: url(chrome://browser/skin/caption-buttons.svg#maximize-themes); + .titlebar-button:not(#titlebar-close):not(:-moz-window-inactive):not(:-moz-lwtheme):hover:active { + background-color: hsla(0, 0%, 100%, .27); + transition: none; } - #main-window[sizemode="maximized"] #titlebar-max:-moz-lwtheme { - list-style-image: url(chrome://browser/skin/caption-buttons.svg#restore-themes); + + #titlebar-close:not(:-moz-window-inactive):not(:-moz-lwtheme):hover { + background-color: hsla(0, 86%, 49%, 1); } - #titlebar-close:-moz-lwtheme { - list-style-image: url(chrome://browser/skin/caption-buttons.svg#close-themes); + + #titlebar-close:not(:-moz-window-inactive):not(:-moz-lwtheme):hover:active { + background-color: hsla(0, 60%, 39%, 1); + transition: none; } + } + } /* Windows 10 accent color applies */ + @media not all and (-moz-windows-default-theme) { + #main-window { + background-color: transparent; + } + } - /* the 12px image renders a 10px icon, and the 10px upscaled gets rounded to 12.5, which - * rounds up to 13px, which makes the icon one pixel too big on 1.25dppx. Fix: */ - @media (min-resolution: 1.20dppx) and (max-resolution: 1.45dppx) { - .titlebar-button > .toolbarbutton-icon { - width: 11.5px; - height: 11.5px; - } - } + #titlebar-buttonbox, + .titlebar-button { + -moz-appearance: none !important; + } - /* 175% dpi should result in the same device pixel sizes as 150% dpi. */ - @media (min-resolution: 1.70dppx) and (max-resolution: 1.95dppx) { - .titlebar-button { - padding-left: 14.1px; - padding-right: 14.1px; - } - - .titlebar-button > .toolbarbutton-icon { - width: 10.8px; - height: 10.8px; - } - } + .titlebar-button { + border: none; + margin: 0 !important; + padding: 9px 17px; + transition: background-color linear 120ms; + } + + #main-window[sizemode="maximized"][tabsontop=true] #tabbrowser-tabs { + min-height: 28px; + } - /* 225% dpi should result in the same device pixel sizes as 200% dpi. */ - @media (min-resolution: 2.20dppx) and (max-resolution: 2.45dppx) { - .titlebar-button { - padding-left: 15.3333px; - padding-right: 15.3333px; - } - - .titlebar-button > .toolbarbutton-icon { - width: 10.8px; - height: 10.8px; - } - } + #main-window[sizemode=maximized] .titlebar-button { + padding-top: 8px; + padding-bottom: 8px; + } - /* 275% dpi should result in the same device pixel sizes as 250% dpi. */ - @media (min-resolution: 2.70dppx) and (max-resolution: 2.95dppx) { - /* NB: todo: this should also change padding on the buttons - * themselves, but without a device to test this on, it's - * impossible to know by how much. */ - .titlebar-button > .toolbarbutton-icon { - width: 10.8px; - height: 10.8px; - } - } + .titlebar-button > .toolbarbutton-icon { + width: 12px; + height: 12px; + } - @media (-moz-windows-default-theme) { - .titlebar-button:hover { - background-color: hsla(0, 0%, 0%, .12); - } + .titlebar-button:not(:hover) > .toolbarbutton-icon:-moz-window-inactive { + opacity: 0.5; + } - .titlebar-button:hover:active { - background-color: hsla(0, 0%, 0%, .22); - } + #main-window[chromemargin^="0,"][sizemode=normal] #navigator-toolbox { + margin-top: -4px; + } - .titlebar-button:not(:hover) > .toolbarbutton-icon:-moz-window-inactive { - opacity: 0.5; - } + #main-window[sizemode="maximized"] #titlebar-close { + padding-right: 19px; + } + + #titlebar-close:hover { + list-style-image: url(chrome://browser/skin/caption-buttons.svg#close-highlight); + background-color: hsla(0, 86%, 49%, 1); + } - #titlebar-close:hover { - background-color: hsl(355, 86%, 49%); - } + #titlebar-close:hover:active { + background-color: hsla(0, 86%, 49%, 0.6); + transition: none; + } + + /* inactive window */ - #titlebar-close:hover:active { - background-color: hsl(355, 82%, 69%); - } - } - @media not all and (-moz-windows-default-theme) { - .titlebar-button { - background-color: -moz-field; - } - .titlebar-button:hover { - background-color: Highlight; - } - - #titlebar-min { - list-style-image: url(chrome://browser/skin/caption-buttons.svg#minimize-highcontrast); - } - #titlebar-min:hover { - list-style-image: url(chrome://browser/skin/caption-buttons.svg#minimize-highcontrast-hover); - } - - #titlebar-max { - list-style-image: url(chrome://browser/skin/caption-buttons.svg#maximize-highcontrast); - } - #titlebar-max:hover { - list-style-image: url(chrome://browser/skin/caption-buttons.svg#maximize-highcontrast-hover); - } - - #main-window[sizemode="maximized"] #titlebar-max { - list-style-image: url(chrome://browser/skin/caption-buttons.svg#restore-highcontrast); - } - #main-window[sizemode="maximized"] #titlebar-max:hover { - list-style-image: url(chrome://browser/skin/caption-buttons.svg#restore-highcontrast-hover); - } - - #titlebar-close { - list-style-image: url(chrome://browser/skin/caption-buttons.svg#close-highcontrast); - } - #titlebar-close:hover { - list-style-image: url(chrome://browser/skin/caption-buttons.svg#close-highcontrast-hover); - } - } + #titlebar-min:-moz-window-inactive:not(:-moz-lwtheme) { + list-style-image: url(chrome://browser/skin/caption-buttons.svg#minimize); + } + + #titlebar-max:-moz-window-inactive:not(:-moz-lwtheme) { + list-style-image: url(chrome://browser/skin/caption-buttons.svg#maximize); + } + + #main-window[sizemode="maximized"] #titlebar-max:-moz-window-inactive:not(:-moz-lwtheme) { + list-style-image: url(chrome://browser/skin/caption-buttons.svg#restore); + } + + #titlebar-close:-moz-window-inactive:not(:-moz-lwtheme):not(:hover) { + list-style-image: url(chrome://browser/skin/caption-buttons.svg#close); + } + + .titlebar-button:-moz-window-inactive:not(:-moz-lwtheme):hover { + background-color: hsla(0, 0%, 0%, .17); + } + + .titlebar-button:-moz-window-inactive:not(:-moz-lwtheme):hover:active { + background-color: hsla(0, 0%, 0%, .27); + transition: none; + } + + /* light persona */ + + .titlebar-button:-moz-lwtheme-darktext:hover { + background-color: hsla(0, 0%, 0%, .17); + } + + .titlebar-button:-moz-lwtheme-darktext:hover:active { + background-color: hsla(0, 0%, 0%, .27); + transition: none; + } + + #titlebar-min:-moz-lwtheme-darktext { + list-style-image: url(chrome://browser/skin/caption-buttons.svg#minimize-outline); + } + + #titlebar-max:-moz-lwtheme-darktext { + list-style-image: url(chrome://browser/skin/caption-buttons.svg#maximize-outline); + } + + #main-window[sizemode="maximized"]:-moz-lwtheme-darktext #titlebar-max:-moz-lwtheme-darktext { + list-style-image: url(chrome://browser/skin/caption-buttons.svg#restore-outline); + } + + #titlebar-close:-moz-lwtheme-darktext { + list-style-image: url(chrome://browser/skin/caption-buttons.svg#close-outline); + } + #titlebar-close:hover:-moz-lwtheme-darktext { + list-style-image: url(chrome://browser/skin/caption-buttons.svg#close-outline); + } + + /* dark persona */ + + .titlebar-button:-moz-lwtheme-brighttext:hover { + background-color: hsla(0, 0%, 100%, .27); + } + + .titlebar-button:-moz-lwtheme-brighttext:hover:active { + background-color: hsla(0, 0%, 100%, .37); + transition: none; + } + + #titlebar-min:-moz-lwtheme-brighttext { + list-style-image: url(chrome://browser/skin/caption-buttons.svg#minimize-outline-inverted); + } + + #titlebar-max:-moz-lwtheme-brighttext { + list-style-image: url(chrome://browser/skin/caption-buttons.svg#maximize-outline-inverted); + } + + #main-window[sizemode="maximized"]:-moz-lwtheme-brighttext #titlebar-max:-moz-lwtheme-brighttext { + list-style-image: url(chrome://browser/skin/caption-buttons.svg#restore-outline-inverted); + } + + #titlebar-close:-moz-lwtheme-brighttext { + list-style-image: url(chrome://browser/skin/caption-buttons.svg#close-outline-inverted); + } + #titlebar-close:hover:-moz-lwtheme-brighttext { + list-style-image: url(chrome://browser/skin/caption-buttons.svg#close-outline-inverted); + } + + /* the 12px image renders a 10px icon, and the 10px upscaled gets rounded to 12.5, which + * rounds up to 13px, which makes the icon one pixel too big on 1.25dppx. Fix: */ + @media (min-resolution: 1.20dppx) and (max-resolution: 1.45dppx) { + .titlebar-button > .toolbarbutton-icon { + width: 11.5px; + height: 11.5px; } } - } + + /* 175% dpi should result in the same device pixel sizes as 150% dpi. */ + @media (min-resolution: 1.70dppx) and (max-resolution: 1.95dppx) { + .titlebar-button { + padding-left: 14.1px; + padding-right: 14.1px; + } + .titlebar-button > .toolbarbutton-icon { + width: 10.8px; + height: 10.8px; + } + } + + /* 225% dpi should result in the same device pixel sizes as 200% dpi. */ + @media (min-resolution: 2.20dppx) and (max-resolution: 2.45dppx) { + .titlebar-button { + padding-left: 15.3333px; + padding-right: 15.3333px; + } + .titlebar-button > .toolbarbutton-icon { + width: 10.8px; + height: 10.8px; + } + } + + /* 275% dpi should result in the same device pixel sizes as 250% dpi. */ + @media (min-resolution: 2.70dppx) and (max-resolution: 2.95dppx) { + /* NB: todo: this should also change padding on the buttons + * themselves, but without a device to test this on, it's + * impossible to know by how much. */ + .titlebar-button > .toolbarbutton-icon { + width: 10.8px; + height: 10.8px; + } + } + + + @media not all and (-moz-windows-default-theme) { + .titlebar-button { + background-color: -moz-field; + } + .titlebar-button:hover { + background-color: Highlight; + } - @media (-moz-os-version: windows-vista), - (-moz-os-version: windows-win7), + #titlebar-min { + list-style-image: url(chrome://browser/skin/caption-buttons.svg#minimize-outine-inverted); + } + + #titlebar-max { + list-style-image: url(chrome://browser/skin/caption-buttons.svg#maximize-outine-inverted); + } + + #main-window[sizemode="maximized"] #titlebar-max { + list-style-image: url(chrome://browser/skin/caption-buttons.svg#restore-outine-inverted); + } + + #titlebar-close { + list-style-image: url(chrome://browser/skin/caption-buttons.svg#close-outine-inverted); + } + #titlebar-close:hover { + list-style-image: url(chrome://browser/skin/caption-buttons.svg#close-outine-inverted); + } + } + } /* Win 10 styling */ + + @media (-moz-os-version: windows-win7), (-moz-os-version: windows-win8) { #main-window[sizemode="maximized"] #titlebar-buttonbox { margin-inline-end: 3px; @@ -283,7 +445,7 @@ } /* The borders on the glass frame are ours, and inside #browser, and on - * vista and win7 we want to make sure they are "glassy", so we can't use + * win7 we want to make sure they are "glassy", so we can't use * #browser as the exclude-glass container. We use #appcontent instead. */ #browser { -moz-appearance: none; @@ -296,18 +458,13 @@ @media (-moz-os-version: windows-win8) { /* Artificially draw window borders that are covered by lwtheme, see bug 591930. - * Borders for vista/win7 are below, win10 doesn't need them. */ + * Borders for win7 are below, win10 doesn't need them. */ #main-window[sizemode="normal"] > #tab-view-deck > #browser-panel:-moz-lwtheme { border-top: 1px solid @toolbarShadowColor@; } } @media (-moz-windows-default-theme) { - #toolbar-menubar:not(:-moz-lwtheme), - #TabsToolbar:not(:-moz-lwtheme) { - color: black; - } - #main-menubar > menu:not(:-moz-lwtheme) { color: inherit; } @@ -316,11 +473,9 @@ * On aero, the menubar fog disappears for inactive windows, and renders gray * illegible. */ - @media not all and (-moz-os-version: windows-vista) { - @media not all and (-moz-os-version: windows-win7) { - #toolbar-menubar:not(:-moz-lwtheme):-moz-window-inactive { - color: ThreeDShadow; - } + @media not all and (-moz-os-version: windows-win7) { + #toolbar-menubar:not(:-moz-lwtheme):-moz-window-inactive { + color: ThreeDShadow; } } } @@ -330,9 +485,8 @@ color: white; } - /* Show borders on vista through win8, but not on win10 and later: */ - @media (-moz-os-version: windows-vista), - (-moz-os-version: windows-win7), + /* Show borders on win7 and win8, but not on win10 and later: */ + @media (-moz-os-version: windows-win7), (-moz-os-version: windows-win8) { /* Vertical toolbar border */ #main-window:not([customizing])[sizemode=normal] #navigator-toolbox > toolbar:not(#toolbar-menubar):not(#TabsToolbar):not(:-moz-lwtheme), diff --git a/browser/themes/windows/browser.css b/browser/themes/windows/browser.css index 2de5a6545..a0cdabfb2 100644 --- a/browser/themes/windows/browser.css +++ b/browser/themes/windows/browser.css @@ -16,6 +16,8 @@ %define conditionalForwardWithUrlbar window:not([chromehidden~="toolbar"]) #urlbar-wrapper :root { + --titlebar-text-color: currentColor; + --space-above-tabbar: 15px; --backbutton-urlbar-overlap: 6px; @@ -129,8 +131,7 @@ toolbar:-moz-lwtheme { } @media (-moz-windows-default-theme) { - @media (-moz-os-version: windows-vista), - (-moz-os-version: windows-win7) { + @media (-moz-os-version: windows-win7) { #navigator-toolbox::after { border-bottom-color: #aabccf; } @@ -158,9 +159,7 @@ toolbar:-moz-lwtheme { background-image: linear-gradient(@toolbarHighlight@, @toolbarHighlight@); } -@media (-moz-os-version: windows-xp), - (-moz-os-version: windows-vista), - (-moz-os-version: windows-win7) { +@media (-moz-os-version: windows-win7) { #nav-bar { background-image: linear-gradient(@toolbarHighlight@, transparent) !important; } @@ -187,19 +186,22 @@ toolbar:-moz-lwtheme { transition: min-height 170ms ease-out, max-height 170ms ease-out, visibility 170ms linear; } +#toolbar-menubar, +#TabsToolbar { + color: var(--titlebar-text-color); +} + @media not all and (-moz-windows-compositor), not all and (-moz-windows-default-theme) { /* Please keep the menu text colors in this media block in sync with * devedition.css, minus the :not(:-moz-lwtheme) condition - see Bug 1165718. */ - #main-window[tabsintitlebar]:not([inFullscreen]) #toolbar-menubar:not(:-moz-lwtheme), - #main-window[tabsintitlebar]:not([inFullscreen]) #TabsToolbar:not(:-moz-lwtheme) { - color: CaptionText; + :root[tabsintitlebar]:not([inFullscreen]):not(:-moz-lwtheme) { + --titlebar-text-color: CaptionText; } - #main-window[tabsintitlebar]:not([inFullscreen]) #toolbar-menubar:not(:-moz-lwtheme):-moz-window-inactive, - #main-window[tabsintitlebar]:not([inFullscreen]) #TabsToolbar:not(:-moz-lwtheme):-moz-window-inactive { - color: InactiveCaptionText; + :root[tabsintitlebar]:not([inFullscreen]):not(:-moz-lwtheme):-moz-window-inactive { + --titlebar-text-color: InactiveCaptionText; } } @@ -313,64 +315,6 @@ toolbar:-moz-lwtheme { } } -/* Render a window top border for lwthemes on WinXP modern themes: */ -@media (-moz-windows-theme: luna-blue) { - #main-window[tabsintitlebar][sizemode="normal"] > #tab-view-deck > #browser-panel:-moz-lwtheme { - background-image: linear-gradient(to bottom, - rgb(8, 49, 216) 0, rgb(8, 49, 216) 1px, - rgb(15, 77, 227) 1px, rgb(15, 77, 227) 2px, - rgb(22, 106, 238) 2px, rgb(22, 106, 238) 3px, - rgb(8, 85, 221) 3px, rgb(8, 85, 221) 4px, - transparent 4px); - } - - #main-window[tabsintitlebar][sizemode="normal"] > #tab-view-deck > #browser-panel:-moz-lwtheme:-moz-window-inactive { - background-image: linear-gradient(to bottom, - rgb(91, 104, 205) 0, rgb(91, 104, 205) 1px, - rgb(116, 128, 220) 1px, rgb(116, 128, 220) 2px, - rgb(117, 140, 221) 2px, rgb(117, 140, 221) 4px, - transparent 4px); - } -} - -@media (-moz-windows-theme: luna-silver) { - #main-window[tabsintitlebar][sizemode="normal"] > #tab-view-deck > #browser-panel:-moz-lwtheme { - background-image: linear-gradient(to bottom, - rgb(102,102,126) 0, rgb(102,102,126) 1px, - rgb(168,167,191) 1px, rgb(168,167,191) 2px, - white 2px, white 3px, - rgb(188,188,207) 3px, rgb(188,188,207) 4px, - transparent 4px); - } - - #main-window[tabsintitlebar][sizemode="normal"] > #tab-view-deck > #browser-panel:-moz-lwtheme:-moz-window-inactive { - background-image: linear-gradient(to bottom, - rgb(186,186,197) 0, rgb(186,186,197) 1px, - rgb(236,238,245) 1px, rgb(236,238,245) 2px, - white 2px, white 3px, - rgb(215,215,227) 3px, rgb(215,215,227) 4px, - transparent 4px); - } -} - -@media (-moz-windows-theme: luna-olive) { - #main-window[tabsintitlebar][sizemode="normal"] > #tab-view-deck > #browser-panel:-moz-lwtheme { - background-image: linear-gradient(to bottom, - rgb(139,161,105) 0, rgb(139,161,105) 1px, - rgb(171, 189, 133) 1px, rgb(171, 189, 133) 2px, - rgb(164,178,127) 2px, rgb(164,178,127) 3px, - transparent 3px); - } - - #main-window[tabsintitlebar][sizemode="normal"] > #tab-view-deck > #browser-panel:-moz-lwtheme:-moz-window-inactive { - background-image: linear-gradient(to bottom, - rgb(207, 214, 188) 0, rgb(207, 214, 188) 1px, - rgb(224, 226, 200) 1px, rgb(224, 226, 200) 2px, - rgb(214, 216, 190) 2px, rgb(214, 216, 190) 3px, - transparent 3px); - } -} - #TabsToolbar:not([collapsed="true"]) + #nav-bar { /* Move up into the TabsToolbar for the inner highlight at the top of the nav-bar */ margin-top: calc(-1 * var(--navbar-tab-toolbar-highlight-overlap)); @@ -401,12 +345,6 @@ toolbar:-moz-lwtheme { background-color: -moz-dialog; } -@media (-moz-os-version: windows-xp) and (-moz-windows-default-theme) { - #main-window[tabsintitlebar][sizemode="normal"] #toolbar-menubar { - margin-top: 4px; - } -} - /* ::::: titlebar ::::: */ #main-window[sizemode="normal"] > #titlebar { @@ -427,7 +365,7 @@ toolbar:-moz-lwtheme { * click and hover mouse events to work properly for the button in the restored * window state. Otherwise, elements in the navigator-toolbox, like the menubar, * can swallow those events. It will also place the buttons above the fog on - * themes with Aero Glass. + * Windows 7 with Aero Glass. */ #titlebar-buttonbox { z-index: 1; @@ -437,12 +375,6 @@ toolbar:-moz-lwtheme { margin-left: 22px; /* space needed for Aero Snap */ } -@media (-moz-os-version: windows-xp) { - .titlebar-placeholder[type="caption-buttons"] { - margin-left: 10px; /* less space needed on XP because there's no Aero Snap */ - } -} - /* titlebar command buttons */ #titlebar-min { @@ -665,13 +597,6 @@ menuitem.bookmark-item { %include ../shared/toolbarbuttons.inc.css -@media (-moz-windows-theme: luna-silver) and (max-resolution: 1dppx) { - :-moz-any(@primaryToolbarButtons@), - #bookmarks-menu-button.toolbarbutton-1 > .toolbarbutton-menubutton-dropmarker > .dropmarker-icon { - list-style-image: url("chrome://browser/skin/Toolbar-lunaSilver.png"); - } -} - #main-window:not([customizing]) .toolbarbutton-1[disabled=true] > .toolbarbutton-icon, #main-window:not([customizing]) .toolbarbutton-1[disabled=true] > .toolbarbutton-menu-dropmarker, #main-window:not([customizing]) .toolbarbutton-1[disabled=true] > .toolbarbutton-menubutton-dropmarker, @@ -775,10 +700,7 @@ toolbar[brighttext] .toolbarbutton-1 > .toolbarbutton-menubutton-dropmarker { max-width: 32px; } -@media (-moz-os-version: windows-xp), - (-moz-os-version: windows-vista), - (-moz-os-version: windows-win7) { - /* < Win8 */ +@media (-moz-os-version: windows-win7) { :root { --toolbarbutton-hover-background: linear-gradient(hsla(0,0%,100%,.6), hsla(0,0%,100%,.1)); --toolbarbutton-hover-bordercolor: hsla(210,54%,20%,.15) hsla(210,54%,20%,.2) hsla(210,54%,20%,.25); @@ -1096,9 +1018,7 @@ toolbar[brighttext] #close-button { list-style-image: url(chrome://browser/skin/caption-buttons.svg#close-white); } -@media (-moz-os-version: windows-xp), - (-moz-os-version: windows-vista), - (-moz-os-version: windows-win7) { +@media (-moz-os-version: windows-win7) { #window-controls { margin-inline-start: 4px; } @@ -1154,8 +1074,7 @@ toolbar[brighttext] #close-button { } } -@media (-moz-os-version: windows-vista), - (-moz-os-version: windows-win7) { +@media (-moz-os-version: windows-win7) { #window-controls { -moz-box-align: start; } @@ -1199,8 +1118,7 @@ toolbar[brighttext] #close-button { } @media (-moz-windows-default-theme) { - @media (-moz-os-version: windows-vista), - (-moz-os-version: windows-win7), + @media (-moz-os-version: windows-win7), (-moz-os-version: windows-win8) { #main-window:not(:-moz-lwtheme) { --urlbar-border-color: hsla(210,54%,20%,.25) hsla(210,54%,20%,.27) hsla(210,54%,20%,.3); @@ -1237,8 +1155,7 @@ toolbar[brighttext] #close-button { border-radius: 1px; } - @media (-moz-os-version: windows-vista), - (-moz-os-version: windows-win7), + @media (-moz-os-version: windows-win7), (-moz-os-version: windows-win8) { #urlbar:not(:-moz-lwtheme), .searchbar-textbox:not(:-moz-lwtheme) { @@ -1261,11 +1178,9 @@ toolbar[brighttext] #close-button { } } - @media not all and (-moz-os-version: windows-xp) { - #urlbar:not(:-moz-lwtheme)[focused], - .searchbar-textbox:not(:-moz-lwtheme)[focused] { - border-color: Highlight; - } + #urlbar:not(:-moz-lwtheme)[focused], + .searchbar-textbox:not(:-moz-lwtheme)[focused] { + border-color: Highlight; } } @@ -2018,9 +1933,7 @@ html|span.ac-emphasize-text-url { } } -@media (-moz-os-version: windows-xp), - (-moz-os-version: windows-vista), - (-moz-os-version: windows-win7) { +@media (-moz-os-version: windows-win7) { #sidebar-header > .close-icon { padding-top: 4px; padding-bottom: 4px; @@ -2041,39 +1954,28 @@ html|span.ac-emphasize-text-url { margin-bottom: calc(-1 * var(--tab-toolbar-navbar-overlap)); /* overlap the nav-bar's top border */ } -@media (-moz-os-version: windows-xp) and (-moz-windows-default-theme) { - #main-window[sizemode=normal] #TabsToolbar { - padding-left: 2px; - padding-right: 2px; - } -} - %include ../shared/tabs.inc.css /* Remove border between tab strip and navigation toolbar on Windows 10+ */ -@media not all and (-moz-os-version: windows-xp) { - @media not all and (-moz-os-version: windows-vista) { - @media not all and (-moz-os-version: windows-win7) { - @media not all and (-moz-os-version: windows-win8) { - @media (-moz-windows-default-theme) { - .tab-background-end[selected=true]::after, - .tab-background-start[selected=true]::after { - content: none; - } - - #TabsToolbar { - --tab-stroke-background-size: 0 0; - } - - :root { - --tab-toolbar-navbar-overlap: 0px; - } - - #nav-bar { - border-top-style: none !important; - box-shadow: none; - } - } +@media not all and (-moz-os-version: windows-win7) { + @media not all and (-moz-os-version: windows-win8) { + @media (-moz-windows-default-theme) { + .tab-background-end[selected=true]::after, + .tab-background-start[selected=true]::after { + content: none; + } + + #TabsToolbar { + --tab-stroke-background-size: 0 0; + } + + :root { + --tab-toolbar-navbar-overlap: 0px; + } + + #nav-bar { + border-top-style: none !important; + box-shadow: none; } } } @@ -2558,22 +2460,6 @@ notification.pluginVulnerable > .notification-inner > .messageCloseButton { position: relative; } -@media (-moz-os-version: windows-xp) { - @media not all and (-moz-windows-classic) { - #private-browsing-indicator-titlebar > .private-browsing-indicator { - background-image: url("chrome://browser/skin/privatebrowsing-mask-titlebar-XPVista7-tall.png"); - height: 28px; - } - - #main-window[sizemode="maximized"] > #titlebar > #titlebar-content > #titlebar-buttonbox-container > #private-browsing-indicator-titlebar > .private-browsing-indicator { - top: -5px; - } - #main-window[sizemode="normal"] > #titlebar > #titlebar-content > #titlebar-buttonbox-container > #private-browsing-indicator-titlebar > .private-browsing-indicator { - top: -1px; - } - } -} - @media (-moz-windows-classic) { /** * We have to use top instead of background-position in this case, otherwise @@ -2585,8 +2471,7 @@ notification.pluginVulnerable > .notification-inner > .messageCloseButton { } } -@media (-moz-os-version: windows-vista), - (-moz-os-version: windows-win7) { +@media (-moz-os-version: windows-win7) { @media (-moz-windows-glass) { #main-window[sizemode="normal"] > #titlebar > #titlebar-content > #titlebar-buttonbox-container > #private-browsing-indicator-titlebar > .private-browsing-indicator { top: 1px; @@ -2603,7 +2488,7 @@ notification.pluginVulnerable > .notification-inner > .messageCloseButton { @media (-moz-windows-default-theme) { @media not all and (-moz-windows-compositor) { #main-window[sizemode="normal"] > #titlebar > #titlebar-content > #titlebar-buttonbox-container > #private-browsing-indicator-titlebar > .private-browsing-indicator { - background-image: url("chrome://browser/skin/privatebrowsing-mask-titlebar-XPVista7-tall.png"); + background-image: url("chrome://browser/skin/privatebrowsing-mask-titlebar-win7-tall.png"); height: 28px; } } @@ -2636,19 +2521,14 @@ notification.pluginVulnerable > .notification-inner > .messageCloseButton { margin-top: -4px; } - -@media not all and (-moz-os-version: windows-xp) { %include browser-aero.css -} .browser-extension-panel > .panel-arrowcontainer > .panel-arrowcontent { padding: 0; overflow: hidden; } -@media (-moz-os-version: windows-xp), - (-moz-os-version: windows-vista), - (-moz-os-version: windows-win7) { +@media (-moz-os-version: windows-win7) { .cui-widget-panelview[id^=PanelUI-webext-] { border-radius: 4px; } diff --git a/browser/themes/windows/caption-buttons.svg b/browser/themes/windows/caption-buttons.svg index 3ba4f95a1..9cb42d539 100644 --- a/browser/themes/windows/caption-buttons.svg +++ b/browser/themes/windows/caption-buttons.svg @@ -1,49 +1,61 @@ +<svg width="12" height="12" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <!-- This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> -<svg width="12" height="12" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <style> + g { + stroke: ButtonText; + stroke-width: 0.9px; + fill: none; + } + g:not(:target) { display: none; } + use:target > g { display: initial; } - g { - stroke: ButtonText; - stroke-width: 0.9px; - fill: none; - } - g:not([id|="close"]) { - shape-rendering: crispEdges; + .highlight > g { + stroke: HighlightText; } - .highcontrast { - stroke-width: 1.9px; + .inactive > g { + stroke: black; } - .highcontrast-hover > g { - stroke: HighlightText; + + .bolder { + stroke-width: 1.6px; + stroke: black; } - .white > g { - stroke: #fff; + + .outline { + stroke-width: 4px; + stroke: white; + opacity: 0.75; } - .themes { - stroke: #fff; - stroke-width: 1.9px; + + .inverted { + stroke-width: 1.6px; + stroke: white; } - .outer-stroke { - stroke: #000; - stroke-width: 3.6; - opacity: .75; + .outline-inverted { + stroke-width: 4px; + stroke: black; + opacity: 0.75; } - .restore-background-window { - stroke-width: .9; + + .outline-thinner { + stroke-width: 3.6px; } + </style> + <g id="close"> - <path d="M1,1 l 10,10 M1,11 l 10,-10"/> + <line x1="1" y1="1" x2="11" y2="11" stroke-width="1px"/> + <line x1="11" y1="1" x2="1" y2="11" stroke-width="1px"/> </g> <g id="maximize"> <rect x="1.5" y="1.5" width="9" height="9"/> @@ -56,45 +68,54 @@ <polyline points="3.5,3.5 3.5,1.5 10.5,1.5 10.5,8.5 8.5,8.5"/> </g> - <use id="close-white" class="white" xlink:href="#close"/> - <use id="maximize-white" class="white" xlink:href="#maximize"/> - <use id="minimize-white" class="white" xlink:href="#minimize"/> - <use id="restore-white" class="white" xlink:href="#restore"/> - - <g id="close-highcontrast" class="highcontrast"> - <path d="M1,1 l 10,10 M1,11 l 10,-10"/> + <g id="close-outline"> + <line x1="1" y1="1" x2="11" y2="11" stroke-linecap="round" class="outline"/> + <line x1="11" y1="1" x2="1" y2="11" stroke-linecap="round" class="outline"/> + <line x1="1" y1="1" x2="11" y2="11" class="bolder"/> + <line x1="11" y1="1" x2="1" y2="11" class="bolder"/> </g> - <g id="maximize-highcontrast" class="highcontrast"> - <rect x="2" y="2" width="8" height="8"/> + <g id="maximize-outline"> + <rect x="1.2" y="1.2" width="9.6" height="9.6" stroke-linecap="round" class="outline"/> + <rect x="1.5" y="1.5" width="9" height="9" class="bolder"/> </g> - <g id="minimize-highcontrast" class="highcontrast"> - <line x1="1" y1="6" x2="11" y2="6"/> + <g id="minimize-outline"> + <line x1="1" y1="5.5" x2="11" y2="5.5" stroke-linecap="round" class="outline outline-thinner"/> + <line x1="1" y1="5.5" x2="11" y2="5.5" class="bolder"/> </g> - <g id="restore-highcontrast" class="highcontrast"> - <rect x="2" y="4" width="6" height="6"/> - <polyline points="3.5,1.5 10.5,1.5 10.5,8.5" class="restore-background-window"/> + <g id="restore-outline"> + <rect x="1.5" y="3.5" width="7" height="7" stroke-linecap="round" class="outline"/> + <polyline points="3.5,3.5 3.5,1.5 10.5,1.5 10.5,8.5 8.5,8.5" stroke-linecap="round" class="outline"/> + <rect x="1.5" y="3.5" width="7" height="7" class="bolder"/> + <polyline points="3.5,3.5 3.5,1.5 10.5,1.5 10.5,8.5 8.5,8.5" class="bolder"/> </g> - <use id="close-highcontrast-hover" class="highcontrast-hover" xlink:href="#close-highcontrast"/> - <use id="maximize-highcontrast-hover" class="highcontrast-hover" xlink:href="#maximize-highcontrast"/> - <use id="minimize-highcontrast-hover" class="highcontrast-hover" xlink:href="#minimize-highcontrast"/> - <use id="restore-highcontrast-hover" class="highcontrast-hover" xlink:href="#restore-highcontrast"/> - - <g id="close-themes" class="themes"> - <path d="M1,1 l 10,10 M1,11 l 10,-10" class="outer-stroke" /> - <path d="M1.75,1.75 l 8.5,8.5 M1.75,10.25 l 8.5,-8.5"/> + <g id="close-outline-inverted"> + <line x1="1" y1="1" x2="11" y2="11" stroke-linecap="round" class="outline-inverted"/> + <line x1="11" y1="1" x2="1" y2="11" stroke-linecap="round" class="outline-inverted"/> + <line x1="1" y1="1" x2="11" y2="11" class="inverted"/> + <line x1="11" y1="1" x2="1" y2="11" class="inverted"/> </g> - <g id="maximize-themes" class="themes"> - <rect x="2" y="2" width="8" height="8" class="outer-stroke"/> - <rect x="2" y="2" width="8" height="8"/> + <g id="maximize-outline-inverted"> + <rect x="1.2" y="1.2" width="9.6" height="9.6" stroke-linecap="round" class="outline-inverted"/> + <rect x="1.5" y="1.5" width="9" height="9" class="inverted"/> </g> - <g id="minimize-themes" class="themes"> - <line x1="0" y1="6" x2="12" y2="6" class="outer-stroke"/> - <line x1="1" y1="6" x2="11" y2="6"/> + <g id="minimize-outline-inverted"> + <line x1="1" y1="5.5" x2="11" y2="5.5" stroke-linecap="round" class="outline-inverted outline-thinner"/> + <line x1="1" y1="5.5" x2="11" y2="5.5" class="inverted"/> </g> - <g id="restore-themes" class="themes"> - <path d="M2,4 l 6,0 l 0,6 l -6,0z M2.5,1.5 l 8,0 l 0,8" class="outer-stroke"/> - <rect x="2" y="4" width="6" height="6"/> - <polyline points="3.5,1.5 10.5,1.5 10.5,8.5" class="restore-background-window"/> + <g id="restore-outline-inverted"> + <rect x="1.5" y="3.5" width="7" height="7" stroke-linecap="round" class="outline-inverted"/> + <polyline points="3.5,3.5 3.5,1.5 10.5,1.5 10.5,8.5 8.5,8.5" stroke-linecap="round" class="outline-inverted"/> + <rect x="1.5" y="3.5" width="7" height="7" class="inverted"/> + <polyline points="3.5,3.5 3.5,1.5 10.5,1.5 10.5,8.5 8.5,8.5" class="inverted"/> </g> + + <use id="close-highlight" class="highlight" xlink:href="#close"/> + <use id="maximize-highlight" class="highlight" xlink:href="#maximize"/> + <use id="minimize-highlight" class="highlight" xlink:href="#minimize"/> + <use id="restore-highlight" class="highlight" xlink:href="#restore"/> + <use id="close-inactive" class="inactive" xlink:href="#close"/> + <use id="maximize-inactive" class="inactive" xlink:href="#maximize"/> + <use id="minimize-inactive" class="inactive" xlink:href="#minimize"/> + <use id="restore-inactive" class="inactive" xlink:href="#restore"/> </svg> diff --git a/browser/themes/windows/customizableui/panelUI.css b/browser/themes/windows/customizableui/panelUI.css index 92080d599..189a163f3 100644 --- a/browser/themes/windows/customizableui/panelUI.css +++ b/browser/themes/windows/customizableui/panelUI.css @@ -131,21 +131,17 @@ menu.subviewbutton > .menu-right:-moz-locale-dir(rtl) { } /* Win8 and beyond. */ -@media not all and (-moz-os-version: windows-xp) { - @media not all and (-moz-os-version: windows-vista) { - @media not all and (-moz-os-version: windows-win7) { - panelview .toolbarbutton-1, - .subviewbutton, - .widget-overflow-list .toolbarbutton-1, - .panelUI-grid .toolbarbutton-1 > .toolbarbutton-menubutton-button, - #BMB_bookmarksPopup menupopup[placespopup=true] > hbox, - #edit-controls@inAnyPanel@, - #zoom-controls@inAnyPanel@, - #edit-controls@inAnyPanel@ > toolbarbutton, - #zoom-controls@inAnyPanel@ > toolbarbutton { - border-radius: 0; - } - } +@media not all and (-moz-os-version: windows-win7) { + panelview .toolbarbutton-1, + .subviewbutton, + .widget-overflow-list .toolbarbutton-1, + .panelUI-grid .toolbarbutton-1 > .toolbarbutton-menubutton-button, + #BMB_bookmarksPopup menupopup[placespopup=true] > hbox, + #edit-controls@inAnyPanel@, + #zoom-controls@inAnyPanel@, + #edit-controls@inAnyPanel@ > toolbarbutton, + #zoom-controls@inAnyPanel@ > toolbarbutton { + border-radius: 0; } } diff --git a/browser/themes/windows/devedition.css b/browser/themes/windows/devedition.css index 4c25f33a1..bdf4bb80e 100644 --- a/browser/themes/windows/devedition.css +++ b/browser/themes/windows/devedition.css @@ -16,7 +16,7 @@ /* The window background is white due to no accentcolor in the lightweight theme. It can't be changed to transparent when there is no compositor - (Win XP or 7 in classic / basic theme), or else dragging and focus become + (Win 7 in classic / basic theme), or else dragging and focus become broken. So instead just show the normal titlebar in that case, and override the window color as transparent when the compositor is available. */ @media not all and (-moz-windows-compositor) { @@ -116,9 +116,7 @@ } } -@media (-moz-os-version: windows-xp), - (-moz-os-version: windows-vista), - (-moz-os-version: windows-win7), +@media (-moz-os-version: windows-win7), (-moz-os-version: windows-win8) { :root { --space-above-tabbar: 15px; @@ -193,14 +191,12 @@ /* Use proper menu text styling in Win7 classic mode (copied from browser.css) */ @media not all and (-moz-windows-compositor), not all and (-moz-windows-default-theme) { - #main-window[tabsintitlebar]:not([inFullscreen]) #toolbar-menubar, - #main-window[tabsintitlebar]:not([inFullscreen]) #TabsToolbar { - color: CaptionText; + :root[tabsintitlebar]:not([inFullscreen]) { + --titlebar-text-color: CaptionText; } - #main-window[tabsintitlebar]:not([inFullscreen]) #toolbar-menubar:-moz-window-inactive, - #main-window[tabsintitlebar]:not([inFullscreen]) #TabsToolbar:-moz-window-inactive { - color: InactiveCaptionText; + :root[tabsintitlebar]:not([inFullscreen]):-moz-window-inactive { + --titlebar-text-color: InactiveCaptionText; } #main-window[tabsintitlebar] #main-menubar > menu { @@ -263,8 +259,7 @@ color: var(--chrome-color); } -@media (-moz-os-version: windows-vista), - (-moz-os-version: windows-win7), +@media (-moz-os-version: windows-win7), (-moz-os-version: windows-win8) { /* And then we add them back on toolbars so that they don't look borderless: */ #main-window:not([customizing])[sizemode=normal] #navigator-toolbox::after, diff --git a/browser/themes/windows/downloads/allDownloadsViewOverlay.css b/browser/themes/windows/downloads/allDownloadsViewOverlay.css index e288f1e90..0ee83f669 100644 --- a/browser/themes/windows/downloads/allDownloadsViewOverlay.css +++ b/browser/themes/windows/downloads/allDownloadsViewOverlay.css @@ -18,32 +18,30 @@ /*** Highlighted list items ***/ -@media not all and (-moz-os-version: windows-xp) { - @media (-moz-windows-default-theme) { - /* - -moz-appearance: menuitem is almost right, but the hover effect is not - transparent and is lighter than desired. - - Copied from the autocomplete richlistbox styling in - toolkit/themes/windows/global/autocomplete.css - - This styling should be kept in sync with the style from the above file. - */ - @itemFocused@ { - color: inherit; - background-color: transparent; - /* four gradients for the bevel highlights on each edge, one for blue background */ - background-image: - linear-gradient(to bottom, rgba(255,255,255,0.9) 3px, transparent 3px), - linear-gradient(to right, rgba(255,255,255,0.5) 3px, transparent 3px), - linear-gradient(to left, rgba(255,255,255,0.5) 3px, transparent 3px), - linear-gradient(to top, rgba(255,255,255,0.4) 3px, transparent 3px), - linear-gradient(to bottom, rgba(163,196,247,0.3), rgba(122,180,246,0.3)); - background-clip: content-box; - border-radius: 6px; - outline: 1px solid rgb(124,163,206); - -moz-outline-radius: 3px; - outline-offset: -2px; - } +@media (-moz-windows-default-theme) { + /* + -moz-appearance: menuitem is almost right, but the hover effect is not + transparent and is lighter than desired. + + Copied from the autocomplete richlistbox styling in + toolkit/themes/windows/global/autocomplete.css + + This styling should be kept in sync with the style from the above file. + */ + @itemFocused@ { + color: inherit; + background-color: transparent; + /* four gradients for the bevel highlights on each edge, one for blue background */ + background-image: + linear-gradient(to bottom, rgba(255,255,255,0.9) 3px, transparent 3px), + linear-gradient(to right, rgba(255,255,255,0.5) 3px, transparent 3px), + linear-gradient(to left, rgba(255,255,255,0.5) 3px, transparent 3px), + linear-gradient(to top, rgba(255,255,255,0.4) 3px, transparent 3px), + linear-gradient(to bottom, rgba(163,196,247,0.3), rgba(122,180,246,0.3)); + background-clip: content-box; + border-radius: 6px; + outline: 1px solid rgb(124,163,206); + -moz-outline-radius: 3px; + outline-offset: -2px; } } diff --git a/browser/themes/windows/downloads/download-glow-menuPanel-XPVista7.png b/browser/themes/windows/downloads/download-glow-menuPanel-win7.png Binary files differindex 7ff7e6a03..7ff7e6a03 100644 --- a/browser/themes/windows/downloads/download-glow-menuPanel-XPVista7.png +++ b/browser/themes/windows/downloads/download-glow-menuPanel-win7.png diff --git a/browser/themes/windows/downloads/download-glow-XPVista7.png b/browser/themes/windows/downloads/download-glow-win7.png Binary files differindex e7415e83d..e7415e83d 100644 --- a/browser/themes/windows/downloads/download-glow-XPVista7.png +++ b/browser/themes/windows/downloads/download-glow-win7.png diff --git a/browser/themes/windows/downloads/indicator.css b/browser/themes/windows/downloads/indicator.css index 627265088..7f921f8de 100644 --- a/browser/themes/windows/downloads/indicator.css +++ b/browser/themes/windows/downloads/indicator.css @@ -166,13 +166,9 @@ toolbar[brighttext] #downloads-button:not([counter])[attention="success"] > #dow font-size: 9px; line-height: 9px; text-align: center; -} -@media not all and (-moz-os-version: windows-xp) { - #downloads-indicator-counter { - /* Bug 812345 added this... */ - margin-bottom: -1px; - } + /* Bug 812345 added this... */ + margin-bottom: -1px; } toolbar[brighttext] #downloads-indicator-counter { diff --git a/browser/themes/windows/feeds/feedIcon-XP.png b/browser/themes/windows/feeds/feedIcon-XP.png Binary files differdeleted file mode 100644 index d0cafb1d4..000000000 --- a/browser/themes/windows/feeds/feedIcon-XP.png +++ /dev/null diff --git a/browser/themes/windows/feeds/feedIcon16-XP.png b/browser/themes/windows/feeds/feedIcon16-XP.png Binary files differdeleted file mode 100644 index dd7821f8d..000000000 --- a/browser/themes/windows/feeds/feedIcon16-XP.png +++ /dev/null diff --git a/browser/themes/windows/jar.mn b/browser/themes/windows/jar.mn index 89c589aba..410148645 100644 --- a/browser/themes/windows/jar.mn +++ b/browser/themes/windows/jar.mn @@ -11,21 +11,17 @@ browser.jar: * skin/classic/browser/syncedtabs/sidebar.css (syncedtabs/sidebar.css) skin/classic/browser/actionicon-tab.png skin/classic/browser/actionicon-tab@2x.png - skin/classic/browser/actionicon-tab-XPVista7.png + skin/classic/browser/actionicon-tab-win7.png * skin/classic/browser/browser.css * skin/classic/browser/devedition.css * skin/classic/browser/browser-lightweightTheme.css skin/classic/browser/caption-buttons.svg skin/classic/browser/click-to-play-warning-stripes.png skin/classic/browser/Info.png - skin/classic/browser/Info-XP.png skin/classic/browser/keyhole-forward-mask.svg skin/classic/browser/livemark-folder.png - skin/classic/browser/livemark-folder-XP.png skin/classic/browser/menu-back.png - skin/classic/browser/menu-back-XP.png skin/classic/browser/menu-forward.png - skin/classic/browser/menu-forward-XP.png skin/classic/browser/menuPanel-customize.png skin/classic/browser/menuPanel-customize@2x.png skin/classic/browser/menuPanel-exit.png @@ -36,36 +32,33 @@ browser.jar: skin/classic/browser/monitor_16-10.png skin/classic/browser/pageInfo.css skin/classic/browser/pageInfo.png - skin/classic/browser/pageInfo-XP.png skin/classic/browser/privatebrowsing-mask-tabstrip.png - skin/classic/browser/privatebrowsing-mask-tabstrip-XPVista7.png + skin/classic/browser/privatebrowsing-mask-tabstrip-win7.png skin/classic/browser/privatebrowsing-mask-titlebar.png - skin/classic/browser/privatebrowsing-mask-titlebar-XPVista7.png - skin/classic/browser/privatebrowsing-mask-titlebar-XPVista7-tall.png + skin/classic/browser/privatebrowsing-mask-titlebar-win7.png + skin/classic/browser/privatebrowsing-mask-titlebar-win7-tall.png skin/classic/browser/reload-stop-go.png skin/classic/browser/reload-stop-go@2x.png - skin/classic/browser/reload-stop-go-XPVista7.png - skin/classic/browser/reload-stop-go-XPVista7@2x.png + skin/classic/browser/reload-stop-go-win7.png + skin/classic/browser/reload-stop-go-win7@2x.png skin/classic/browser/searchbar.css skin/classic/browser/setDesktopBackground.css skin/classic/browser/slowStartup-16.png skin/classic/browser/Toolbar.png skin/classic/browser/Toolbar@2x.png - skin/classic/browser/Toolbar-aero.png - skin/classic/browser/Toolbar-aero@2x.png + skin/classic/browser/Toolbar-win7.png + skin/classic/browser/Toolbar-win7@2x.png skin/classic/browser/Toolbar-inverted.png skin/classic/browser/Toolbar-inverted@2x.png - skin/classic/browser/Toolbar-lunaSilver.png skin/classic/browser/Toolbar-win8.png skin/classic/browser/Toolbar-win8@2x.png - skin/classic/browser/Toolbar-XP.png - skin/classic/browser/toolbarbutton-dropdown-arrow-XPVista7.png + skin/classic/browser/toolbarbutton-dropdown-arrow-win7.png skin/classic/browser/toolbarbutton-dropdown-arrow-inverted.png skin/classic/browser/urlbar-popup-blocked.png skin/classic/browser/urlbar-history-dropmarker.png skin/classic/browser/urlbar-history-dropmarker@2x.png - skin/classic/browser/urlbar-history-dropmarker-XPVista7.png - skin/classic/browser/urlbar-history-dropmarker-XPVista7@2x.png + skin/classic/browser/urlbar-history-dropmarker-win7.png + skin/classic/browser/urlbar-history-dropmarker-win7@2x.png skin/classic/browser/webRTC-indicator.css * skin/classic/browser/controlcenter/panel.css (controlcenter/panel.css) skin/classic/browser/customizableui/background-noise-toolbar.png (customizableui/background-noise-toolbar.png) @@ -78,57 +71,40 @@ browser.jar: * skin/classic/browser/customizableui/panelUI.css (customizableui/panelUI.css) * skin/classic/browser/downloads/allDownloadsViewOverlay.css (downloads/allDownloadsViewOverlay.css) skin/classic/browser/downloads/download-glow-menuPanel.png (downloads/download-glow-menuPanel.png) - skin/classic/browser/downloads/download-glow-menuPanel-XPVista7.png (downloads/download-glow-menuPanel-XPVista7.png) + skin/classic/browser/downloads/download-glow-menuPanel-win7.png (downloads/download-glow-menuPanel-win7.png) skin/classic/browser/downloads/download-notification-finish.png (downloads/download-notification-finish.png) skin/classic/browser/downloads/download-notification-start.png (downloads/download-notification-start.png) * skin/classic/browser/downloads/downloads.css (downloads/downloads.css) skin/classic/browser/feeds/feedIcon.png (feeds/feedIcon.png) skin/classic/browser/feeds/feedIcon16.png (feeds/feedIcon16.png) - skin/classic/browser/feeds/feedIcon-XP.png (feeds/feedIcon-XP.png) - skin/classic/browser/feeds/feedIcon16-XP.png (feeds/feedIcon16-XP.png) skin/classic/browser/feeds/subscribe.css (feeds/subscribe.css) skin/classic/browser/feeds/subscribe-ui.css (feeds/subscribe-ui.css) * skin/classic/browser/newtab/newTab.css (newtab/newTab.css) skin/classic/browser/places/autocomplete-star.png (places/autocomplete-star.png) skin/classic/browser/places/autocomplete-star@2x.png (places/autocomplete-star@2x.png) - skin/classic/browser/places/autocomplete-star-XPVista7.png (places/autocomplete-star-XPVista7.png) + skin/classic/browser/places/autocomplete-star-win7.png (places/autocomplete-star-win7.png) skin/classic/browser/places/places.css (places/places.css) * skin/classic/browser/places/organizer.css (places/organizer.css) skin/classic/browser/places/query.png (places/query.png) - skin/classic/browser/places/query-XP.png (places/query-XP.png) skin/classic/browser/places/bookmarksMenu.png (places/bookmarksMenu.png) - skin/classic/browser/places/bookmarksMenu-XP.png (places/bookmarksMenu-XP.png) skin/classic/browser/places/bookmarksToolbar.png (places/bookmarksToolbar.png) - skin/classic/browser/places/bookmarksToolbar-XP.png (places/bookmarksToolbar-XP.png) skin/classic/browser/places/bookmarksToolbar-menuPanel.png (places/bookmarksToolbar-menuPanel.png) - skin/classic/browser/places/bookmarksToolbar-menuPanel-XP.png (places/bookmarksToolbar-menuPanel-XP.png) skin/classic/browser/places/bookmarks-notification-finish.png (places/bookmarks-notification-finish.png) skin/classic/browser/places/calendar.png (places/calendar.png) - skin/classic/browser/places/calendar-XP.png (places/calendar-XP.png) skin/classic/browser/places/toolbarDropMarker.png (places/toolbarDropMarker.png) - skin/classic/browser/places/toolbarDropMarker-XP.png (places/toolbarDropMarker-XP.png) skin/classic/browser/places/editBookmarkOverlay.css (places/editBookmarkOverlay.css) skin/classic/browser/places/libraryToolbar.png (places/libraryToolbar.png) - skin/classic/browser/places/libraryToolbar-XP.png (places/libraryToolbar-XP.png) skin/classic/browser/places/starred48.png (places/starred48.png) - skin/classic/browser/places/starred48-XP.png (places/starred48-XP.png) skin/classic/browser/places/unstarred48.png (places/unstarred48.png) skin/classic/browser/places/tag.png (places/tag.png) - skin/classic/browser/places/tag-XP.png (places/tag-XP.png) skin/classic/browser/places/history.png (places/history.png) - skin/classic/browser/places/history-XP.png (places/history-XP.png) skin/classic/browser/places/allBookmarks.png (places/allBookmarks.png) - skin/classic/browser/places/allBookmarks-XP.png (places/allBookmarks-XP.png) skin/classic/browser/places/unsortedBookmarks.png (places/unsortedBookmarks.png) - skin/classic/browser/places/unsortedBookmarks-XP.png (places/unsortedBookmarks-XP.png) skin/classic/browser/places/downloads.png (places/downloads.png) skin/classic/browser/places/livemark-item.png (places/livemark-item.png) skin/classic/browser/preferences/alwaysAsk.png (preferences/alwaysAsk.png) - skin/classic/browser/preferences/alwaysAsk-XP.png (preferences/alwaysAsk-XP.png) skin/classic/browser/preferences/application.png (preferences/application.png) - skin/classic/browser/preferences/application-XP.png (preferences/application-XP.png) skin/classic/browser/preferences/saveFile.png (preferences/saveFile.png) - skin/classic/browser/preferences/saveFile-XP.png (preferences/saveFile-XP.png) skin/classic/browser/preferences/preferences.css (preferences/preferences.css) * skin/classic/browser/preferences/in-content/preferences.css (preferences/in-content/preferences.css) * skin/classic/browser/preferences/in-content/dialog.css (preferences/in-content/dialog.css) @@ -136,13 +112,13 @@ browser.jar: skin/classic/browser/social/services-16.png (social/services-16.png) skin/classic/browser/social/services-64.png (social/services-64.png) skin/classic/browser/tabbrowser/newtab.svg (tabbrowser/newtab.svg) - skin/classic/browser/tabbrowser/newtab-XPVista7.svg (tabbrowser/newtab-XPVista7.svg) + skin/classic/browser/tabbrowser/newtab-win7.svg (tabbrowser/newtab-win7.svg) skin/classic/browser/tabbrowser/newtab-inverted.svg (tabbrowser/newtab-inverted.svg) - skin/classic/browser/tabbrowser/newtab-inverted-XPVista7.svg (tabbrowser/newtab-inverted-XPVista7.svg) + skin/classic/browser/tabbrowser/newtab-inverted-win7.svg (tabbrowser/newtab-inverted-win7.svg) skin/classic/browser/tabbrowser/tab-active-middle.png (tabbrowser/tab-active-middle.png) skin/classic/browser/tabbrowser/tab-active-middle@2x.png (tabbrowser/tab-active-middle@2x.png) skin/classic/browser/tabbrowser/tab-arrow-left.svg (tabbrowser/tab-arrow-left.svg) - skin/classic/browser/tabbrowser/tab-arrow-left-XPVista7.svg (tabbrowser/tab-arrow-left-XPVista7.svg) + skin/classic/browser/tabbrowser/tab-arrow-left-win7.svg (tabbrowser/tab-arrow-left-win7.svg) skin/classic/browser/tabbrowser/tab-arrow-left-inverted.svg (tabbrowser/tab-arrow-left-inverted.svg) skin/classic/browser/tabbrowser/tab-background-start.png (tabbrowser/tab-background-start.png) skin/classic/browser/tabbrowser/tab-background-start@2x.png (tabbrowser/tab-background-start@2x.png) @@ -174,8 +150,8 @@ browser.jar: skin/classic/browser/sync-desktopIcon.svg (../shared/sync-desktopIcon.svg) skin/classic/browser/sync-horizontalbar.png skin/classic/browser/sync-horizontalbar@2x.png - skin/classic/browser/sync-horizontalbar-XPVista7.png - skin/classic/browser/sync-horizontalbar-XPVista7@2x.png + skin/classic/browser/sync-horizontalbar-win7.png + skin/classic/browser/sync-horizontalbar-win7@2x.png skin/classic/browser/sync-mobileIcon.svg (../shared/sync-mobileIcon.svg) skin/classic/browser/sync-notification-24.png skin/classic/browser/syncSetup.css @@ -183,19 +159,16 @@ browser.jar: skin/classic/browser/syncQuota.css skin/classic/browser/syncProgress-horizontalbar.png skin/classic/browser/syncProgress-horizontalbar@2x.png - skin/classic/browser/syncProgress-horizontalbar-XPVista7.png - skin/classic/browser/syncProgress-horizontalbar-XPVista7@2x.png + skin/classic/browser/syncProgress-horizontalbar-win7.png + skin/classic/browser/syncProgress-horizontalbar-win7@2x.png skin/classic/browser/syncProgress-menuPanel.png skin/classic/browser/syncProgress-menuPanel@2x.png skin/classic/browser/syncProgress-toolbar.png skin/classic/browser/syncProgress-toolbar@2x.png skin/classic/browser/syncProgress-toolbar-inverted.png skin/classic/browser/syncProgress-toolbar-inverted@2x.png - skin/classic/browser/syncProgress-toolbar-XPVista7.png - skin/classic/browser/syncProgress-toolbar-XPVista7@2x.png -#ifdef E10S_TESTING_ONLY - skin/classic/browser/e10s-64@2x.png (../shared/e10s-64@2x.png) -#endif + skin/classic/browser/syncProgress-toolbar-win7.png + skin/classic/browser/syncProgress-toolbar-win7@2x.png [extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}] chrome.jar: % override chrome://browser/skin/page-livemarks.png chrome://browser/skin/feeds/feedIcon16.png @@ -205,58 +178,31 @@ browser.jar: % override chrome://browser/skin/feeds/videoFeedIcon16.png chrome://browser/skin/feeds/feedIcon16.png % override chrome://browser/skin/aboutSessionRestore-window-icon.png chrome://browser/skin/preferences/application.png os!=WINNT -% override chrome://browser/skin/aboutSessionRestore-window-icon.png chrome://browser/skin/preferences/application.png os=WINNT osversion<6 -% override chrome://browser/skin/Info.png chrome://browser/skin/Info-XP.png os=WINNT osversion<6 -% override chrome://browser/skin/livemark-folder.png chrome://browser/skin/livemark-folder-XP.png os=WINNT osversion<6 -% override chrome://browser/skin/menu-back.png chrome://browser/skin/menu-back-XP.png os=WINNT osversion<6 -% override chrome://browser/skin/menu-forward.png chrome://browser/skin/menu-forward-XP.png os=WINNT osversion<6 -% override chrome://browser/skin/pageInfo.png chrome://browser/skin/pageInfo-XP.png os=WINNT osversion<6 -% override chrome://browser/skin/feeds/feedIcon.png chrome://browser/skin/feeds/feedIcon-XP.png os=WINNT osversion<6 -% override chrome://browser/skin/feeds/feedIcon16.png chrome://browser/skin/feeds/feedIcon16-XP.png os=WINNT osversion<6 -% override chrome://browser/skin/places/query.png chrome://browser/skin/places/query-XP.png os=WINNT osversion<6 -% override chrome://browser/skin/places/bookmarksMenu.png chrome://browser/skin/places/bookmarksMenu-XP.png os=WINNT osversion<6 -% override chrome://browser/skin/places/bookmarksToolbar.png chrome://browser/skin/places/bookmarksToolbar-XP.png os=WINNT osversion<6 -% override chrome://browser/skin/places/bookmarksToolbar-menuPanel.png chrome://browser/skin/places/bookmarksToolbar-menuPanel-XP.png os=WINNT osversion<6 -% override chrome://browser/skin/places/calendar.png chrome://browser/skin/places/calendar-XP.png os=WINNT osversion<6 -% override chrome://browser/skin/places/toolbarDropMarker.png chrome://browser/skin/places/toolbarDropMarker-XP.png os=WINNT osversion<6 -% override chrome://browser/skin/places/libraryToolbar.png chrome://browser/skin/places/libraryToolbar-XP.png os=WINNT osversion<6 -% override chrome://browser/skin/places/starred48.png chrome://browser/skin/places/starred48-XP.png os=WINNT osversion<6 -% override chrome://browser/skin/places/tag.png chrome://browser/skin/places/tag-XP.png os=WINNT osversion<6 -% override chrome://browser/skin/places/history.png chrome://browser/skin/places/history-XP.png os=WINNT osversion<6 -% override chrome://browser/skin/places/allBookmarks.png chrome://browser/skin/places/allBookmarks-XP.png os=WINNT osversion<6 -% override chrome://browser/skin/places/unsortedBookmarks.png chrome://browser/skin/places/unsortedBookmarks-XP.png os=WINNT osversion<6 -% override chrome://browser/skin/preferences/alwaysAsk.png chrome://browser/skin/preferences/alwaysAsk-XP.png os=WINNT osversion<6 -% override chrome://browser/skin/preferences/application.png chrome://browser/skin/preferences/application-XP.png os=WINNT osversion<6 -% override chrome://browser/skin/preferences/saveFile.png chrome://browser/skin/preferences/saveFile-XP.png os=WINNT osversion<6 +% override chrome://browser/skin/actionicon-tab.png chrome://browser/skin/actionicon-tab-win7.png os=WINNT osversion<=6.1 +% override chrome://browser/skin/privatebrowsing-mask-tabstrip.png chrome://browser/skin/privatebrowsing-mask-tabstrip-win7.png os=WINNT osversion<=6.1 +% override chrome://browser/skin/privatebrowsing-mask-titlebar.png chrome://browser/skin/privatebrowsing-mask-titlebar-win7.png os=WINNT osversion<=6.1 +% override chrome://browser/skin/reload-stop-go.png chrome://browser/skin/reload-stop-go-win7.png os=WINNT osversion<=6.1 +% override chrome://browser/skin/reload-stop-go@2x.png chrome://browser/skin/reload-stop-go-win7@2x.png os=WINNT osversion<=6.1 +% override chrome://browser/skin/sync-horizontalbar.png chrome://browser/skin/sync-horizontalbar-win7.png os=WINNT osversion<=6.1 +% override chrome://browser/skin/sync-horizontalbar@2x.png chrome://browser/skin/sync-horizontalbar-win7@2x.png os=WINNT osversion<=6.1 +% override chrome://browser/skin/syncProgress-horizontalbar.png chrome://browser/skin/syncProgress-horizontalbar-win7.png os=WINNT osversion<=6.1 +% override chrome://browser/skin/syncProgress-horizontalbar@2x.png chrome://browser/skin/syncProgress-horizontalbar-win7@2x.png os=WINNT osversion<=6.1 +% override chrome://browser/skin/syncProgress-toolbar.png chrome://browser/skin/syncProgress-toolbar-win7.png os=WINNT osversion<=6.1 +% override chrome://browser/skin/syncProgress-toolbar@2x.png chrome://browser/skin/syncProgress-toolbar-win7@2x.png os=WINNT osversion<=6.1 +% override chrome://browser/skin/toolbarbutton-dropdown-arrow.png chrome://browser/skin/toolbarbutton-dropdown-arrow-win7.png os=WINNT osversion<=6.1 +% override chrome://browser/skin/urlbar-history-dropmarker.png chrome://browser/skin/urlbar-history-dropmarker-win7.png os=WINNT osversion<=6.1 +% override chrome://browser/skin/urlbar-history-dropmarker@2x.png chrome://browser/skin/urlbar-history-dropmarker-win7@2x.png os=WINNT osversion<=6.1 +% override chrome://browser/skin/downloads/download-glow-menuPanel.png chrome://browser/skin/downloads/download-glow-menuPanel-win7.png os=WINNT osversion<=6.1 +% override chrome://browser/skin/places/autocomplete-star.png chrome://browser/skin/places/autocomplete-star-win7.png os=WINNT osversion<=6.1 +% override chrome://browser/skin/tabbrowser/newtab.svg chrome://browser/skin/tabbrowser/newtab-win7.svg os=WINNT osversion<=6.1 +% override chrome://browser/skin/tabbrowser/newtab-inverted.svg chrome://browser/skin/tabbrowser/newtab-inverted-win7.svg os=WINNT osversion<=6.1 +% override chrome://browser/skin/tabbrowser/tab-arrow-left.svg chrome://browser/skin/tabbrowser/tab-arrow-left-win7.svg os=WINNT osversion<=6.1 -% override chrome://browser/skin/actionicon-tab.png chrome://browser/skin/actionicon-tab-XPVista7.png os=WINNT osversion<=6.1 -% override chrome://browser/skin/privatebrowsing-mask-tabstrip.png chrome://browser/skin/privatebrowsing-mask-tabstrip-XPVista7.png os=WINNT osversion<=6.1 -% override chrome://browser/skin/privatebrowsing-mask-titlebar.png chrome://browser/skin/privatebrowsing-mask-titlebar-XPVista7.png os=WINNT osversion<=6.1 -% override chrome://browser/skin/reload-stop-go.png chrome://browser/skin/reload-stop-go-XPVista7.png os=WINNT osversion<=6.1 -% override chrome://browser/skin/reload-stop-go@2x.png chrome://browser/skin/reload-stop-go-XPVista7@2x.png os=WINNT osversion<=6.1 -% override chrome://browser/skin/sync-horizontalbar.png chrome://browser/skin/sync-horizontalbar-XPVista7.png os=WINNT osversion<=6.1 -% override chrome://browser/skin/sync-horizontalbar@2x.png chrome://browser/skin/sync-horizontalbar-XPVista7@2x.png os=WINNT osversion<=6.1 -% override chrome://browser/skin/syncProgress-horizontalbar.png chrome://browser/skin/syncProgress-horizontalbar-XPVista7.png os=WINNT osversion<=6.1 -% override chrome://browser/skin/syncProgress-horizontalbar@2x.png chrome://browser/skin/syncProgress-horizontalbar-XPVista7@2x.png os=WINNT osversion<=6.1 -% override chrome://browser/skin/syncProgress-toolbar.png chrome://browser/skin/syncProgress-toolbar-XPVista7.png os=WINNT osversion<=6.1 -% override chrome://browser/skin/syncProgress-toolbar@2x.png chrome://browser/skin/syncProgress-toolbar-XPVista7@2x.png os=WINNT osversion<=6.1 -% override chrome://browser/skin/toolbarbutton-dropdown-arrow.png chrome://browser/skin/toolbarbutton-dropdown-arrow-XPVista7.png os=WINNT osversion<=6.1 -% override chrome://browser/skin/urlbar-history-dropmarker.png chrome://browser/skin/urlbar-history-dropmarker-XPVista7.png os=WINNT osversion<=6.1 -% override chrome://browser/skin/urlbar-history-dropmarker@2x.png chrome://browser/skin/urlbar-history-dropmarker-XPVista7@2x.png os=WINNT osversion<=6.1 -% override chrome://browser/skin/downloads/download-glow-menuPanel.png chrome://browser/skin/downloads/download-glow-menuPanel-XPVista7.png os=WINNT osversion<=6.1 -% override chrome://browser/skin/places/autocomplete-star.png chrome://browser/skin/places/autocomplete-star-XPVista7.png os=WINNT osversion<=6.1 -% override chrome://browser/skin/tabbrowser/newtab.svg chrome://browser/skin/tabbrowser/newtab-XPVista7.svg os=WINNT osversion<=6.1 -% override chrome://browser/skin/tabbrowser/newtab-inverted.svg chrome://browser/skin/tabbrowser/newtab-inverted-XPVista7.svg os=WINNT osversion<=6.1 -% override chrome://browser/skin/tabbrowser/tab-arrow-left.svg chrome://browser/skin/tabbrowser/tab-arrow-left-XPVista7.svg os=WINNT osversion<=6.1 - -% override chrome://browser/skin/Toolbar@2x.png chrome://browser/skin/Toolbar-aero@2x.png os=WINNT osversion=6 -% override chrome://browser/skin/Toolbar@2x.png chrome://browser/skin/Toolbar-aero@2x.png os=WINNT osversion=6.1 +% override chrome://browser/skin/Toolbar@2x.png chrome://browser/skin/Toolbar-win7@2x.png os=WINNT osversion=6.1 % override chrome://browser/skin/Toolbar@2x.png chrome://browser/skin/Toolbar-win8@2x.png os=WINNT osversion=6.2 % override chrome://browser/skin/Toolbar@2x.png chrome://browser/skin/Toolbar-win8@2x.png os=WINNT osversion=6.3 -% override chrome://browser/skin/Toolbar.png chrome://browser/skin/Toolbar-XP.png os=WINNT osversion<6 -% override chrome://browser/skin/Toolbar.png chrome://browser/skin/Toolbar-aero.png os=WINNT osversion=6 -% override chrome://browser/skin/Toolbar.png chrome://browser/skin/Toolbar-aero.png os=WINNT osversion=6.1 +% override chrome://browser/skin/Toolbar.png chrome://browser/skin/Toolbar-win7.png os=WINNT osversion=6.1 % override chrome://browser/skin/Toolbar.png chrome://browser/skin/Toolbar-win8.png os=WINNT osversion=6.2 % override chrome://browser/skin/Toolbar.png chrome://browser/skin/Toolbar-win8.png os=WINNT osversion=6.3 diff --git a/browser/themes/windows/livemark-folder-XP.png b/browser/themes/windows/livemark-folder-XP.png Binary files differdeleted file mode 100644 index 00aa0364d..000000000 --- a/browser/themes/windows/livemark-folder-XP.png +++ /dev/null diff --git a/browser/themes/windows/menu-back-XP.png b/browser/themes/windows/menu-back-XP.png Binary files differdeleted file mode 100644 index ecb8ccd1a..000000000 --- a/browser/themes/windows/menu-back-XP.png +++ /dev/null diff --git a/browser/themes/windows/menu-forward-XP.png b/browser/themes/windows/menu-forward-XP.png Binary files differdeleted file mode 100644 index a7460dc27..000000000 --- a/browser/themes/windows/menu-forward-XP.png +++ /dev/null diff --git a/browser/themes/windows/pageInfo-XP.png b/browser/themes/windows/pageInfo-XP.png Binary files differdeleted file mode 100644 index bbf257237..000000000 --- a/browser/themes/windows/pageInfo-XP.png +++ /dev/null diff --git a/browser/themes/windows/places/allBookmarks-XP.png b/browser/themes/windows/places/allBookmarks-XP.png Binary files differdeleted file mode 100644 index f7903cc5f..000000000 --- a/browser/themes/windows/places/allBookmarks-XP.png +++ /dev/null diff --git a/browser/themes/windows/places/autocomplete-star-XPVista7.png b/browser/themes/windows/places/autocomplete-star-win7.png Binary files differindex af694e91c..af694e91c 100644 --- a/browser/themes/windows/places/autocomplete-star-XPVista7.png +++ b/browser/themes/windows/places/autocomplete-star-win7.png diff --git a/browser/themes/windows/places/bookmarksMenu-XP.png b/browser/themes/windows/places/bookmarksMenu-XP.png Binary files differdeleted file mode 100644 index 8f0c8bf58..000000000 --- a/browser/themes/windows/places/bookmarksMenu-XP.png +++ /dev/null diff --git a/browser/themes/windows/places/bookmarksToolbar-XP.png b/browser/themes/windows/places/bookmarksToolbar-XP.png Binary files differdeleted file mode 100644 index 9e988de20..000000000 --- a/browser/themes/windows/places/bookmarksToolbar-XP.png +++ /dev/null diff --git a/browser/themes/windows/places/bookmarksToolbar-menuPanel-XP.png b/browser/themes/windows/places/bookmarksToolbar-menuPanel-XP.png Binary files differdeleted file mode 100644 index 0e4247adb..000000000 --- a/browser/themes/windows/places/bookmarksToolbar-menuPanel-XP.png +++ /dev/null diff --git a/browser/themes/windows/places/calendar-XP.png b/browser/themes/windows/places/calendar-XP.png Binary files differdeleted file mode 100644 index 7645af5cd..000000000 --- a/browser/themes/windows/places/calendar-XP.png +++ /dev/null diff --git a/browser/themes/windows/places/history-XP.png b/browser/themes/windows/places/history-XP.png Binary files differdeleted file mode 100644 index fcc89bbbf..000000000 --- a/browser/themes/windows/places/history-XP.png +++ /dev/null diff --git a/browser/themes/windows/places/libraryToolbar-XP.png b/browser/themes/windows/places/libraryToolbar-XP.png Binary files differdeleted file mode 100644 index 75b390ff6..000000000 --- a/browser/themes/windows/places/libraryToolbar-XP.png +++ /dev/null diff --git a/browser/themes/windows/places/organizer.css b/browser/themes/windows/places/organizer.css index 4de603b9f..9ae4c8370 100644 --- a/browser/themes/windows/places/organizer.css +++ b/browser/themes/windows/places/organizer.css @@ -20,13 +20,6 @@ list-style-image: url("chrome://browser/skin/Toolbar.png"); } -@media (-moz-windows-theme: luna-silver) { - #back-button, - #forward-button { - list-style-image: url("chrome://browser/skin/Toolbar-lunaSilver.png"); - } -} - #back-button { -moz-image-region: rect(0, 54px, 18px, 36px); } @@ -119,11 +112,6 @@ -moz-image-region: rect(16px, 48px, 32px, 32px); } -/* Root View */ -#placesView { - border-top: 1px solid ThreeDDarkShadow; -} - /* Info box */ #detailsDeck { border-top: 1px solid ThreeDShadow; @@ -151,35 +139,28 @@ padding-inline-end: 9px; } - -@media not all and (-moz-os-version: windows-xp) { - #placesView { - border-top: none; +@media not all and (-moz-windows-classic) { + #placesToolbox { + -moz-appearance: none; + background-color: transparent; } - @media not all and (-moz-windows-classic) { - #placesToolbox { - -moz-appearance: none; - background-color: transparent; - } - - #placesToolbar { - -moz-appearance: none; - background-color: -moz-Dialog; - color: -moz-dialogText; - } + #placesToolbar { + -moz-appearance: none; + background-color: -moz-Dialog; + color: -moz-dialogText; } +} - @media (-moz-windows-default-theme) { - #placesView > splitter { - border: 0; - border-inline-end: 1px solid #A9B7C9; - min-width: 0; - width: 3px; - background-color: transparent; - margin-inline-start: -3px; - position: relative; - } +@media (-moz-windows-default-theme) { + #placesView > splitter { + border: 0; + border-inline-end: 1px solid #A9B7C9; + min-width: 0; + width: 3px; + background-color: transparent; + margin-inline-start: -3px; + position: relative; } } @@ -193,8 +174,7 @@ } } -@media (-moz-windows-default-theme) and (-moz-os-version: windows-vista), - (-moz-windows-default-theme) and (-moz-os-version: windows-win7) { +@media (-moz-windows-default-theme) and (-moz-os-version: windows-win7) { #placesView, #infoPane, #placesList, diff --git a/browser/themes/windows/places/places.css b/browser/themes/windows/places/places.css index 4ec8f6555..769cfcc25 100644 --- a/browser/themes/windows/places/places.css +++ b/browser/themes/windows/places/places.css @@ -24,21 +24,17 @@ cursor: default; } -/* Style Places sidebars as Vista media collection */ @media (-moz-windows-default-theme) { - @media not all and (-moz-os-version: windows-xp) { - .sidebar-placesTree { - background-color: transparent; - border-top: none; - } + .sidebar-placesTree { + background-color: transparent; + border-top: none; + } - .sidebar-placesTreechildren::-moz-tree-cell-text(leaf, hover) { - text-decoration: none; - } + .sidebar-placesTreechildren::-moz-tree-cell-text(leaf, hover) { + text-decoration: none; } - @media (-moz-os-version: windows-vista), - (-moz-os-version: windows-win7) { + @media (-moz-os-version: windows-win7) { #bookmarksPanel, #history-panel, #tabs-panel { diff --git a/browser/themes/windows/places/query-XP.png b/browser/themes/windows/places/query-XP.png Binary files differdeleted file mode 100644 index 9e79fc791..000000000 --- a/browser/themes/windows/places/query-XP.png +++ /dev/null diff --git a/browser/themes/windows/places/starred48-XP.png b/browser/themes/windows/places/starred48-XP.png Binary files differdeleted file mode 100644 index 1cb7bc57d..000000000 --- a/browser/themes/windows/places/starred48-XP.png +++ /dev/null diff --git a/browser/themes/windows/places/tag-XP.png b/browser/themes/windows/places/tag-XP.png Binary files differdeleted file mode 100644 index 4b4a13e66..000000000 --- a/browser/themes/windows/places/tag-XP.png +++ /dev/null diff --git a/browser/themes/windows/places/toolbarDropMarker-XP.png b/browser/themes/windows/places/toolbarDropMarker-XP.png Binary files differdeleted file mode 100644 index 9173b7a7a..000000000 --- a/browser/themes/windows/places/toolbarDropMarker-XP.png +++ /dev/null diff --git a/browser/themes/windows/places/unsortedBookmarks-XP.png b/browser/themes/windows/places/unsortedBookmarks-XP.png Binary files differdeleted file mode 100644 index cf73f9464..000000000 --- a/browser/themes/windows/places/unsortedBookmarks-XP.png +++ /dev/null diff --git a/browser/themes/windows/preferences/alwaysAsk-XP.png b/browser/themes/windows/preferences/alwaysAsk-XP.png Binary files differdeleted file mode 100644 index 8693211ac..000000000 --- a/browser/themes/windows/preferences/alwaysAsk-XP.png +++ /dev/null diff --git a/browser/themes/windows/preferences/application-XP.png b/browser/themes/windows/preferences/application-XP.png Binary files differdeleted file mode 100644 index 7d279ff84..000000000 --- a/browser/themes/windows/preferences/application-XP.png +++ /dev/null diff --git a/browser/themes/windows/preferences/saveFile-XP.png b/browser/themes/windows/preferences/saveFile-XP.png Binary files differdeleted file mode 100644 index e115eaa9f..000000000 --- a/browser/themes/windows/preferences/saveFile-XP.png +++ /dev/null diff --git a/browser/themes/windows/privatebrowsing-mask-tabstrip-XPVista7.png b/browser/themes/windows/privatebrowsing-mask-tabstrip-win7.png Binary files differindex bd5d46a76..bd5d46a76 100644 --- a/browser/themes/windows/privatebrowsing-mask-tabstrip-XPVista7.png +++ b/browser/themes/windows/privatebrowsing-mask-tabstrip-win7.png diff --git a/browser/themes/windows/privatebrowsing-mask-titlebar-XPVista7-tall.png b/browser/themes/windows/privatebrowsing-mask-titlebar-win7-tall.png Binary files differindex 4a723c54e..4a723c54e 100644 --- a/browser/themes/windows/privatebrowsing-mask-titlebar-XPVista7-tall.png +++ b/browser/themes/windows/privatebrowsing-mask-titlebar-win7-tall.png diff --git a/browser/themes/windows/privatebrowsing-mask-titlebar-XPVista7.png b/browser/themes/windows/privatebrowsing-mask-titlebar-win7.png Binary files differindex 835912b53..835912b53 100644 --- a/browser/themes/windows/privatebrowsing-mask-titlebar-XPVista7.png +++ b/browser/themes/windows/privatebrowsing-mask-titlebar-win7.png diff --git a/browser/themes/windows/reload-stop-go-XPVista7.png b/browser/themes/windows/reload-stop-go-win7.png Binary files differindex 3ef32c3ce..3ef32c3ce 100644 --- a/browser/themes/windows/reload-stop-go-XPVista7.png +++ b/browser/themes/windows/reload-stop-go-win7.png diff --git a/browser/themes/windows/reload-stop-go-XPVista7@2x.png b/browser/themes/windows/reload-stop-go-win7@2x.png Binary files differindex 38b27bf0c..38b27bf0c 100644 --- a/browser/themes/windows/reload-stop-go-XPVista7@2x.png +++ b/browser/themes/windows/reload-stop-go-win7@2x.png diff --git a/browser/themes/windows/sync-horizontalbar-XPVista7.png b/browser/themes/windows/sync-horizontalbar-win7.png Binary files differindex 2c97ce6db..2c97ce6db 100644 --- a/browser/themes/windows/sync-horizontalbar-XPVista7.png +++ b/browser/themes/windows/sync-horizontalbar-win7.png diff --git a/browser/themes/windows/sync-horizontalbar-XPVista7@2x.png b/browser/themes/windows/sync-horizontalbar-win7@2x.png Binary files differindex ee117ab73..ee117ab73 100644 --- a/browser/themes/windows/sync-horizontalbar-XPVista7@2x.png +++ b/browser/themes/windows/sync-horizontalbar-win7@2x.png diff --git a/browser/themes/windows/syncProgress-horizontalbar-XPVista7.png b/browser/themes/windows/syncProgress-horizontalbar-win7.png Binary files differindex 48cd11055..48cd11055 100644 --- a/browser/themes/windows/syncProgress-horizontalbar-XPVista7.png +++ b/browser/themes/windows/syncProgress-horizontalbar-win7.png diff --git a/browser/themes/windows/syncProgress-horizontalbar-XPVista7@2x.png b/browser/themes/windows/syncProgress-horizontalbar-win7@2x.png Binary files differindex 741dd2ed4..741dd2ed4 100644 --- a/browser/themes/windows/syncProgress-horizontalbar-XPVista7@2x.png +++ b/browser/themes/windows/syncProgress-horizontalbar-win7@2x.png diff --git a/browser/themes/windows/syncProgress-toolbar-XPVista7.png b/browser/themes/windows/syncProgress-toolbar-win7.png Binary files differindex 49e224f0d..49e224f0d 100644 --- a/browser/themes/windows/syncProgress-toolbar-XPVista7.png +++ b/browser/themes/windows/syncProgress-toolbar-win7.png diff --git a/browser/themes/windows/syncProgress-toolbar-XPVista7@2x.png b/browser/themes/windows/syncProgress-toolbar-win7@2x.png Binary files differindex fd2038725..fd2038725 100644 --- a/browser/themes/windows/syncProgress-toolbar-XPVista7@2x.png +++ b/browser/themes/windows/syncProgress-toolbar-win7@2x.png diff --git a/browser/themes/windows/tabbrowser/newtab-inverted-XPVista7.svg b/browser/themes/windows/tabbrowser/newtab-inverted-win7.svg index 10ffbc745..10ffbc745 100644 --- a/browser/themes/windows/tabbrowser/newtab-inverted-XPVista7.svg +++ b/browser/themes/windows/tabbrowser/newtab-inverted-win7.svg diff --git a/browser/themes/windows/tabbrowser/newtab-XPVista7.svg b/browser/themes/windows/tabbrowser/newtab-win7.svg index 3f431c9db..3f431c9db 100644 --- a/browser/themes/windows/tabbrowser/newtab-XPVista7.svg +++ b/browser/themes/windows/tabbrowser/newtab-win7.svg diff --git a/browser/themes/windows/tabbrowser/tab-arrow-left-XPVista7.svg b/browser/themes/windows/tabbrowser/tab-arrow-left-win7.svg index 41bb5ab13..41bb5ab13 100644 --- a/browser/themes/windows/tabbrowser/tab-arrow-left-XPVista7.svg +++ b/browser/themes/windows/tabbrowser/tab-arrow-left-win7.svg diff --git a/browser/themes/windows/toolbarbutton-dropdown-arrow-XPVista7.png b/browser/themes/windows/toolbarbutton-dropdown-arrow-win7.png Binary files differindex 5f892f532..5f892f532 100644 --- a/browser/themes/windows/toolbarbutton-dropdown-arrow-XPVista7.png +++ b/browser/themes/windows/toolbarbutton-dropdown-arrow-win7.png diff --git a/browser/themes/windows/urlbar-history-dropmarker-XPVista7.png b/browser/themes/windows/urlbar-history-dropmarker-win7.png Binary files differindex b03338822..b03338822 100644 --- a/browser/themes/windows/urlbar-history-dropmarker-XPVista7.png +++ b/browser/themes/windows/urlbar-history-dropmarker-win7.png diff --git a/browser/themes/windows/urlbar-history-dropmarker-XPVista7@2x.png b/browser/themes/windows/urlbar-history-dropmarker-win7@2x.png Binary files differindex bff2997f8..bff2997f8 100644 --- a/browser/themes/windows/urlbar-history-dropmarker-XPVista7@2x.png +++ b/browser/themes/windows/urlbar-history-dropmarker-win7@2x.png diff --git a/browser/themes/windows/windowsShared.inc b/browser/themes/windows/windowsShared.inc index 0cb2ab163..199a62292 100644 --- a/browser/themes/windows/windowsShared.inc +++ b/browser/themes/windows/windowsShared.inc @@ -8,6 +8,4 @@ %define fgTabTexture linear-gradient(transparent 2px, @toolbarHighlight@ 2px, @toolbarHighlight@) %define fgTabBackgroundColor -moz-dialog %define fgTabTextureLWT @fgTabTexture@ - -% Aero-only defines %define customToolbarColor hsl(210,75%,92%) |