Bug 1498410 - Part 3 - Export Screenshots 35.0.0 (code excluding translations and Raven upgrade); r=aswan,ianbicking
authorJared Hirsch <ohai@6a68.net>
Mon, 15 Oct 2018 20:10:31 +0000
changeset 489697 3fab2169b6a001d1f8e03342c2866c88a7d1beb0
parent 489696 f3f88bdd7e389137b3d96d4501f6e349055b23ce
child 489698 9ea94e903beb6a372923f1238d9828968774db67
push id247
push userfmarier@mozilla.com
push dateSat, 27 Oct 2018 01:06:44 +0000
reviewersaswan, ianbicking
bugs1498410
milestone64.0a1
Bug 1498410 - Part 3 - Export Screenshots 35.0.0 (code excluding translations and Raven upgrade); r=aswan,ianbicking MozReview-Commit-ID: IF010Y5ERks Differential Revision: https://phabricator.services.mozilla.com/D8505
browser/extensions/screenshots/assertIsBlankDocument.js
browser/extensions/screenshots/assertIsTrusted.js
browser/extensions/screenshots/background/analytics.js
browser/extensions/screenshots/background/auth.js
browser/extensions/screenshots/background/communication.js
browser/extensions/screenshots/background/deviceInfo.js
browser/extensions/screenshots/background/main.js
browser/extensions/screenshots/background/selectorLoader.js
browser/extensions/screenshots/background/senderror.js
browser/extensions/screenshots/background/startBackground.js
browser/extensions/screenshots/background/takeshot.js
browser/extensions/screenshots/blank.html
browser/extensions/screenshots/blobConverters.js
browser/extensions/screenshots/bootstrap.js
browser/extensions/screenshots/build/buildSettings.js
browser/extensions/screenshots/build/inlineSelectionCss.js
browser/extensions/screenshots/build/onboardingCss.js
browser/extensions/screenshots/build/onboardingHtml.js
browser/extensions/screenshots/build/selection.js
browser/extensions/screenshots/build/shot.js
browser/extensions/screenshots/build/thumbnailGenerator.js
browser/extensions/screenshots/catcher.js
browser/extensions/screenshots/clipboard.js
browser/extensions/screenshots/domainFromUrl.js
browser/extensions/screenshots/experiments/screenshots/api.js
browser/extensions/screenshots/experiments/screenshots/schema.json
browser/extensions/screenshots/icons/back-highlight.svg
browser/extensions/screenshots/icons/back.svg
browser/extensions/screenshots/icons/cancel.svg
browser/extensions/screenshots/icons/cloud.svg
browser/extensions/screenshots/icons/copied-notification.svg
browser/extensions/screenshots/icons/copy.svg
browser/extensions/screenshots/icons/done.svg
browser/extensions/screenshots/icons/download.svg
browser/extensions/screenshots/icons/help-16.svg
browser/extensions/screenshots/icons/icon-highlight-32-v2.svg
browser/extensions/screenshots/icons/icon-v2.svg
browser/extensions/screenshots/icons/icon-welcome-face-without-eyes.svg
browser/extensions/screenshots/icons/menu-fullpage.svg
browser/extensions/screenshots/icons/menu-myshot-white.svg
browser/extensions/screenshots/icons/menu-myshot.svg
browser/extensions/screenshots/icons/menu-visible.svg
browser/extensions/screenshots/icons/onboarding-1.png
browser/extensions/screenshots/icons/onboarding-2.png
browser/extensions/screenshots/icons/onboarding-3.png
browser/extensions/screenshots/icons/onboarding-4.png
browser/extensions/screenshots/icons/onboarding-5.png
browser/extensions/screenshots/icons/onboarding-6.png
browser/extensions/screenshots/install.rdf
browser/extensions/screenshots/log.js
browser/extensions/screenshots/makeUuid.js
browser/extensions/screenshots/manifest.json
browser/extensions/screenshots/moz.build
browser/extensions/screenshots/onboarding/slides.html
browser/extensions/screenshots/onboarding/slides.js
browser/extensions/screenshots/randomString.js
browser/extensions/screenshots/selector/callBackground.js
browser/extensions/screenshots/selector/documentMetadata.js
browser/extensions/screenshots/selector/shooter.js
browser/extensions/screenshots/selector/ui.js
browser/extensions/screenshots/selector/uicontrol.js
browser/extensions/screenshots/selector/util.js
browser/extensions/screenshots/sitehelper.js
browser/extensions/screenshots/test/browser/browser.ini
browser/extensions/screenshots/test/browser/browser_screenshots_ui_check.js
browser/extensions/screenshots/test/browser/head.js
browser/extensions/screenshots/webextension/assertIsBlankDocument.js
browser/extensions/screenshots/webextension/assertIsTrusted.js
browser/extensions/screenshots/webextension/background/analytics.js
browser/extensions/screenshots/webextension/background/auth.js
browser/extensions/screenshots/webextension/background/communication.js
browser/extensions/screenshots/webextension/background/deviceInfo.js
browser/extensions/screenshots/webextension/background/main.js
browser/extensions/screenshots/webextension/background/selectorLoader.js
browser/extensions/screenshots/webextension/background/senderror.js
browser/extensions/screenshots/webextension/background/startBackground.js
browser/extensions/screenshots/webextension/background/takeshot.js
browser/extensions/screenshots/webextension/blank.html
browser/extensions/screenshots/webextension/blobConverters.js
browser/extensions/screenshots/webextension/build/buildSettings.js
browser/extensions/screenshots/webextension/build/inlineSelectionCss.js
browser/extensions/screenshots/webextension/build/onboardingCss.js
browser/extensions/screenshots/webextension/build/onboardingHtml.js
browser/extensions/screenshots/webextension/build/selection.js
browser/extensions/screenshots/webextension/build/shot.js
browser/extensions/screenshots/webextension/build/thumbnailGenerator.js
browser/extensions/screenshots/webextension/catcher.js
browser/extensions/screenshots/webextension/clipboard.js
browser/extensions/screenshots/webextension/domainFromUrl.js
browser/extensions/screenshots/webextension/icons/back-highlight.svg
browser/extensions/screenshots/webextension/icons/back.svg
browser/extensions/screenshots/webextension/icons/cancel.svg
browser/extensions/screenshots/webextension/icons/cloud.svg
browser/extensions/screenshots/webextension/icons/copied-notification.svg
browser/extensions/screenshots/webextension/icons/copy.svg
browser/extensions/screenshots/webextension/icons/done.svg
browser/extensions/screenshots/webextension/icons/download.svg
browser/extensions/screenshots/webextension/icons/help-16.svg
browser/extensions/screenshots/webextension/icons/icon-highlight-32-v2.svg
browser/extensions/screenshots/webextension/icons/icon-v2.svg
browser/extensions/screenshots/webextension/icons/icon-welcome-face-without-eyes.svg
browser/extensions/screenshots/webextension/icons/menu-fullpage.svg
browser/extensions/screenshots/webextension/icons/menu-myshot-white.svg
browser/extensions/screenshots/webextension/icons/menu-myshot.svg
browser/extensions/screenshots/webextension/icons/menu-visible.svg
browser/extensions/screenshots/webextension/icons/onboarding-1.png
browser/extensions/screenshots/webextension/icons/onboarding-2.png
browser/extensions/screenshots/webextension/icons/onboarding-3.png
browser/extensions/screenshots/webextension/icons/onboarding-4.png
browser/extensions/screenshots/webextension/icons/onboarding-5.png
browser/extensions/screenshots/webextension/log.js
browser/extensions/screenshots/webextension/makeUuid.js
browser/extensions/screenshots/webextension/manifest.json
browser/extensions/screenshots/webextension/onboarding/slides.html
browser/extensions/screenshots/webextension/onboarding/slides.js
browser/extensions/screenshots/webextension/randomString.js
browser/extensions/screenshots/webextension/selector/callBackground.js
browser/extensions/screenshots/webextension/selector/documentMetadata.js
browser/extensions/screenshots/webextension/selector/shooter.js
browser/extensions/screenshots/webextension/selector/ui.js
browser/extensions/screenshots/webextension/selector/uicontrol.js
browser/extensions/screenshots/webextension/selector/util.js
browser/extensions/screenshots/webextension/sitehelper.js
rename from browser/extensions/screenshots/webextension/assertIsBlankDocument.js
rename to browser/extensions/screenshots/assertIsBlankDocument.js
rename from browser/extensions/screenshots/webextension/assertIsTrusted.js
rename to browser/extensions/screenshots/assertIsTrusted.js
rename from browser/extensions/screenshots/webextension/background/analytics.js
rename to browser/extensions/screenshots/background/analytics.js
--- a/browser/extensions/screenshots/webextension/background/analytics.js
+++ b/browser/extensions/screenshots/background/analytics.js
@@ -1,9 +1,9 @@
-/* globals main, auth, catcher, deviceInfo, communication, log */
+/* globals main, auth, browser, catcher, deviceInfo, communication, log */
 
 "use strict";
 
 this.analytics = (function() {
   const exports = {};
 
   let telemetryPrefKnown = false;
   let telemetryEnabled;
@@ -123,24 +123,32 @@ this.analytics = (function() {
         flushEvents();
       }, EVENT_BATCH_DURATION);
     }
     // This function used to return a Promise that was not used at any of the
     // call sites; doing this simply maintains that interface.
     return Promise.resolve();
   };
 
+  exports.incrementCount = function(scalar) {
+    const allowedScalars = ["download", "upload", "copy"];
+    if (!allowedScalars.includes(scalar)) {
+      const err = `incrementCount passed an unrecognized scalar ${scalar}`;
+      log.warn(err);
+      return Promise.resolve();
+    }
+    return browser.telemetry.scalarAdd(`screenshots.${scalar}`, 1).catch(err => {
+      log.warn(`incrementCount failed with error: ${err}`);
+    });
+  };
+
   exports.refreshTelemetryPref = function() {
-    return communication.sendToBootstrap("isTelemetryEnabled").then((result) => {
+    return browser.telemetry.canUpload().then((result) => {
       telemetryPrefKnown = true;
-      if (result === communication.NO_BOOTSTRAP) {
-        telemetryEnabled = true;
-      } else {
-        telemetryEnabled = result;
-      }
+      telemetryEnabled = result;
     }, (error) => {
       // If there's an error reading the pref, we should assume that we shouldn't send data
       telemetryPrefKnown = true;
       telemetryEnabled = false;
       throw error;
     });
   };
 
rename from browser/extensions/screenshots/webextension/background/auth.js
rename to browser/extensions/screenshots/background/auth.js
--- a/browser/extensions/screenshots/webextension/background/auth.js
+++ b/browser/extensions/screenshots/background/auth.js
@@ -6,29 +6,36 @@
 this.auth = (function() {
   const exports = {};
 
   let registrationInfo;
   let initialized = false;
   let authHeader = null;
   let sentryPublicDSN = null;
   let abTests = {};
+  let accountId = null;
 
-  const registrationInfoFetched = catcher.watchPromise(browser.storage.local.get(["registrationInfo", "abTests"]).then((result) => {
-    if (result.abTests) {
-      abTests = result.abTests;
-    }
-    if (result.registrationInfo) {
-      registrationInfo = result.registrationInfo;
-    } else {
+  const fetchStoredInfo = catcher.watchPromise(
+    browser.storage.local.get(["registrationInfo", "abTests"]).then((result) => {
+      if (result.abTests) {
+        abTests = result.abTests;
+      }
+      if (result.registrationInfo) {
+        registrationInfo = result.registrationInfo;
+      }
+  }));
+
+  function getRegistrationInfo() {
+    if (!registrationInfo) {
       registrationInfo = generateRegistrationInfo();
       log.info("Generating new device authentication ID", registrationInfo);
       browser.storage.local.set({registrationInfo});
     }
-  }));
+    return registrationInfo;
+  }
 
   exports.getDeviceId = function() {
     return registrationInfo && registrationInfo.deviceId;
   };
 
   function generateRegistrationInfo() {
     const info = {
       deviceId: `anon${makeUuid()}`,
@@ -72,87 +79,95 @@ this.auth = (function() {
         deviceInfo: JSON.stringify(deviceInfo())
       }));
     });
   }
 
   function login(options) {
     const { ownershipCheck, noRegister } = options || {};
     return new Promise((resolve, reject) => {
-      const loginUrl = main.getBackend() + "/api/login";
-      // TODO: replace xhr with Fetch #2261
-      const req = new XMLHttpRequest();
-      req.open("POST", loginUrl);
-      req.onload = catcher.watchFunction(() => {
-        if (req.status === 404) {
-          if (noRegister) {
-            resolve(false);
+      return fetchStoredInfo.then(() => {
+        const registrationInfo = getRegistrationInfo();
+        const loginUrl = main.getBackend() + "/api/login";
+        // TODO: replace xhr with Fetch #2261
+        const req = new XMLHttpRequest();
+        req.open("POST", loginUrl);
+        req.onload = catcher.watchFunction(() => {
+          if (req.status === 404) {
+            if (noRegister) {
+              resolve(false);
+            } else {
+              resolve(register());
+            }
+          } else if (req.status >= 300) {
+            log.warn("Error in response:", req.responseText);
+            const exc = new Error("Could not log in: " + req.status);
+            exc.popupMessage = "LOGIN_ERROR";
+            analytics.sendEvent("login-failed", `bad-response-${req.status}`);
+            reject(exc);
+          } else if (req.status === 0) {
+            const error = new Error("Could not log in, server unavailable");
+            error.popupMessage = "LOGIN_CONNECTION_ERROR";
+            analytics.sendEvent("login-failed", "connection-error");
+            reject(error);
           } else {
-            resolve(register());
+            initialized = true;
+            const jsonResponse = JSON.parse(req.responseText);
+            log.info("Screenshots logged in");
+            analytics.sendEvent("login");
+            saveAuthInfo(jsonResponse);
+            if (ownershipCheck) {
+              resolve({isOwner: jsonResponse.isOwner});
+            } else {
+              resolve(true);
+            }
           }
-        } else if (req.status >= 300) {
-          log.warn("Error in response:", req.responseText);
-          const exc = new Error("Could not log in: " + req.status);
-          exc.popupMessage = "LOGIN_ERROR";
-          analytics.sendEvent("login-failed", `bad-response-${req.status}`);
-          reject(exc);
-        } else if (req.status === 0) {
-          const error = new Error("Could not log in, server unavailable");
-          error.popupMessage = "LOGIN_CONNECTION_ERROR";
+        });
+        req.onerror = catcher.watchFunction(() => {
           analytics.sendEvent("login-failed", "connection-error");
-          reject(error);
-        } else {
-          initialized = true;
-          const jsonResponse = JSON.parse(req.responseText);
-          log.info("Screenshots logged in");
-          analytics.sendEvent("login");
-          saveAuthInfo(jsonResponse);
-          if (ownershipCheck) {
-            resolve({isOwner: jsonResponse.isOwner});
-          } else {
-            resolve(true);
-          }
-        }
+          const exc = new Error("Connection failed");
+          exc.url = loginUrl;
+          exc.popupMessage = "CONNECTION_ERROR";
+          reject(exc);
+        });
+        req.setRequestHeader("content-type", "application/json");
+        req.send(JSON.stringify({
+          deviceId: registrationInfo.deviceId,
+          secret: registrationInfo.secret,
+          deviceInfo: JSON.stringify(deviceInfo()),
+          ownershipCheck,
+        }));
       });
-      req.onerror = catcher.watchFunction(() => {
-        analytics.sendEvent("login-failed", "connection-error");
-        const exc = new Error("Connection failed");
-        exc.url = loginUrl;
-        exc.popupMessage = "CONNECTION_ERROR";
-        reject(exc);
-      });
-      req.setRequestHeader("content-type", "application/json");
-      req.send(JSON.stringify({
-        deviceId: registrationInfo.deviceId,
-        secret: registrationInfo.secret,
-        deviceInfo: JSON.stringify(deviceInfo()),
-        ownershipCheck
-      }));
     });
   }
 
   function saveAuthInfo(responseJson) {
+    accountId = responseJson.accountId;
     if (responseJson.sentryPublicDSN) {
       sentryPublicDSN = responseJson.sentryPublicDSN;
     }
     if (responseJson.authHeader) {
       authHeader = responseJson.authHeader;
       if (!registrationInfo.registered) {
         registrationInfo.registered = true;
         catcher.watchPromise(browser.storage.local.set({registrationInfo}));
       }
     }
     if (responseJson.abTests) {
       abTests = responseJson.abTests;
       catcher.watchPromise(browser.storage.local.set({abTests}));
     }
   }
 
-  exports.getDeviceId = function() {
-    return registrationInfo.deviceId;
+  exports.maybeLogin = function() {
+    if (!registrationInfo) {
+      return Promise.resolve();
+    }
+
+    return exports.authHeaders();
   };
 
   exports.authHeaders = function() {
     let initPromise = Promise.resolve();
     if (!initialized) {
       initPromise = login();
     }
     return initPromise.then(() => {
@@ -168,32 +183,38 @@ this.auth = (function() {
     return sentryPublicDSN || buildSettings.defaultSentryDsn;
   };
 
   exports.getAbTests = function() {
     return abTests;
   };
 
   exports.isRegistered = function() {
-    return registrationInfo.registered;
+    return registrationInfo && registrationInfo.registered;
   };
 
   communication.register("getAuthInfo", (sender, ownershipCheck) => {
-    return registrationInfoFetched.then(() => {
-      return exports.authHeaders();
-    }).then((authHeaders) => {
-      let info = registrationInfo;
-      if (info.registered) {
-        return login({ownershipCheck}).then((result) => {
-          return {
-            isOwner: result && result.isOwner,
-            deviceId: registrationInfo.deviceId,
-            authHeaders
-          };
-        });
+    return fetchStoredInfo.then(() => {
+      // If a device id was never generated, report back accordingly.
+      if (!registrationInfo) {
+        return null;
       }
-      info = Object.assign({authHeaders}, info);
-      return info;
-    });
+
+      return exports.authHeaders().then((authHeaders) => {
+        let info = registrationInfo;
+        if (info.registered) {
+          return login({ownershipCheck}).then((result) => {
+            return {
+              isOwner: result && result.isOwner,
+              deviceId: registrationInfo.deviceId,
+              accountId,
+              authHeaders,
+            };
+          });
+        }
+        info = Object.assign({authHeaders}, info);
+        return info;
+      });
   });
+});
 
   return exports;
 })();
rename from browser/extensions/screenshots/webextension/background/communication.js
rename to browser/extensions/screenshots/background/communication.js
--- a/browser/extensions/screenshots/webextension/background/communication.js
+++ b/browser/extensions/screenshots/background/communication.js
@@ -40,39 +40,10 @@ this.communication = (function() {
     }
     sendResponse({type: "success", value: result});
   });
 
   exports.register = function(name, func) {
     registeredFunctions[name] = func;
   };
 
-  /** Send a message to bootstrap.js
-      Technically any worker can listen to this.  If the bootstrap wrapper is not in place, then this
-      will *not* fail, and will return a value of exports.NO_BOOTSTRAP  */
-  exports.sendToBootstrap = function(funcName, ...args) {
-    return browser.runtime.sendMessage({funcName, args}).then((result) => {
-      if (result.type === "success") {
-        return result.value;
-      }
-      throw new Error(`Error in ${funcName}: ${result.name || "unknown"}`);
-    }, (error) => {
-      if (isBootstrapMissingError(error)) {
-        return exports.NO_BOOTSTRAP;
-      }
-      throw error;
-    });
-  };
-
-  function isBootstrapMissingError(error) {
-    if (!error) {
-      return false;
-    }
-    return ("errorCode" in error && error.errorCode === "NO_RECEIVING_END") ||
-      (!error.errorCode && error.message === "Could not establish connection. Receiving end does not exist.");
-  }
-
-
-  // A singleton/sentinel (with a name):
-  exports.NO_BOOTSTRAP = {name: "communication.NO_BOOTSTRAP"};
-
   return exports;
 })();
rename from browser/extensions/screenshots/webextension/background/deviceInfo.js
rename to browser/extensions/screenshots/background/deviceInfo.js
rename from browser/extensions/screenshots/webextension/background/main.js
rename to browser/extensions/screenshots/background/main.js
--- a/browser/extensions/screenshots/webextension/background/main.js
+++ b/browser/extensions/screenshots/background/main.js
@@ -1,17 +1,17 @@
 /* globals selectorLoader, analytics, communication, catcher, log, makeUuid, auth, senderror, startBackground, blobConverters buildSettings */
 
 "use strict";
 
 this.main = (function() {
   const exports = {};
 
   const pasteSymbol = (window.navigator.platform.match(/Mac/i)) ? "\u2318" : "Ctrl";
-  const { sendEvent } = analytics;
+  const { sendEvent, incrementCount } = analytics;
 
   const manifest = browser.runtime.getManifest();
   let backend;
 
   let hasSeenOnboarding = browser.storage.local.get(["hasSeenOnboarding"]).then((result) => {
     const onboarded = !!result.hasSeenOnboarding;
     hasSeenOnboarding = Promise.resolve(onboarded);
     return hasSeenOnboarding;
@@ -66,17 +66,17 @@ this.main = (function() {
 
   function startSelectionWithOnboarding(tab) {
     return analytics.refreshTelemetryPref().then(() => {
       return selectorLoader.testIfLoaded(tab.id);
     }).then((isLoaded) => {
       if (!isLoaded) {
         sendEvent("start-shot", "site-request", {incognito: tab.incognito});
         setIconActive(true, tab.id);
-        selectorLoader.toggle(tab.id, false);
+        selectorLoader.toggle(tab.id, Promise.resolve(false));
       }
     });
   }
 
   function shouldOpenMyShots(url) {
     return /^about:(?:newtab|blank|home)/i.test(url) || /^resource:\/\/activity-streams\//i.test(url);
   }
 
@@ -91,17 +91,17 @@ this.main = (function() {
             return forceOnboarding();
           }));
           return;
         }
         catcher.watchPromise(analytics.refreshTelemetryPref().then(() => {
           sendEvent("goto-myshots", "about-newtab", {incognito: tab.incognito});
         }));
         catcher.watchPromise(
-          auth.authHeaders()
+          auth.maybeLogin()
           .then(() => browser.tabs.update({url: backend + "/shots"})));
       } else {
         catcher.watchPromise(
           toggleSelector(tab)
             .then(active => {
               const event = active ? "start-shot" : "cancel-shot";
               sendEvent(event, "toolbar-button", {incognito: tab.incognito});
             }, (error) => {
@@ -184,17 +184,17 @@ this.main = (function() {
   communication.register("sendEvent", (sender, ...args) => {
     catcher.watchPromise(sendEvent(...args));
     // We don't wait for it to complete:
     return null;
   });
 
   communication.register("openMyShots", (sender) => {
     return catcher.watchPromise(
-      auth.authHeaders()
+      auth.maybeLogin()
       .then(() => browser.tabs.create({url: backend + "/shots"})));
   });
 
   communication.register("openShot", (sender, {url, copied}) => {
     if (copied) {
       const id = makeUuid();
       return browser.notifications.create(id, {
         type: "basic",
@@ -224,17 +224,17 @@ this.main = (function() {
     }
     return dataUrl;
   });
 
   communication.register("copyShotToClipboard", (sender, blob) => {
     return blobConverters.blobToArray(blob).then(buffer => {
       return browser.clipboard.setImageData(
         buffer, blob.type.split("/", 2)[1]).then(() => {
-          catcher.watchPromise(communication.sendToBootstrap("incrementCount", {scalar: "copy"}));
+          catcher.watchPromise(incrementCount("copy"));
           return browser.notifications.create({
             type: "basic",
             iconUrl: "../icons/copied-notification.svg",
             title: browser.i18n.getMessage("notificationImageCopiedTitle"),
             message: browser.i18n.getMessage("notificationImageCopiedDetails", pasteSymbol)
           });
         });
     });
@@ -251,17 +251,17 @@ this.main = (function() {
         return;
       }
       if (change.state && change.state.current !== "in_progress") {
         URL.revokeObjectURL(url);
         browser.downloads.onChanged.removeListener(onChangedCallback);
       }
     });
     browser.downloads.onChanged.addListener(onChangedCallback);
-    catcher.watchPromise(communication.sendToBootstrap("incrementCount", {scalar: "download"}));
+    catcher.watchPromise(incrementCount("download"));
     return browser.windows.getLastFocused().then(windowInfo => {
       return browser.downloads.download({
         url,
         incognito: windowInfo.incognito,
         filename: info.filename
       }).catch((error) => {
         // We are not logging error message when user cancels download
         if (error && error.message && !error.message.includes("canceled")) {
@@ -296,10 +296,15 @@ this.main = (function() {
   });
 
   communication.register("getPlatformOs", () => {
     return catcher.watchPromise(browser.runtime.getPlatformInfo().then(platformInfo => {
       return platformInfo.os;
     }));
   });
 
+  // This allows the web site show notifications through sitehelper.js
+  communication.register("showNotification", (sender, notification) => {
+    return browser.notifications.create(notification);
+  });
+
   return exports;
 })();
rename from browser/extensions/screenshots/webextension/background/selectorLoader.js
rename to browser/extensions/screenshots/background/selectorLoader.js
--- a/browser/extensions/screenshots/webextension/background/selectorLoader.js
+++ b/browser/extensions/screenshots/background/selectorLoader.js
@@ -84,29 +84,29 @@ this.selectorLoader = (function() {
         return result;
       }, (error) => {
         loadingTabs.delete(tabId);
         throw error;
       });
     }));
   };
 
-  // TODO: since bootstrap communication is now required, would this function
-  // make more sense inside background/main?
   function downloadOnlyCheck(tabId) {
-    return communication.sendToBootstrap("isHistoryEnabled").then((historyEnabled) => {
-      return communication.sendToBootstrap("isUploadDisabled").then((uploadDisabled) => {
-        return browser.tabs.get(tabId).then(tab => {
-          const downloadOnly = !historyEnabled || uploadDisabled || tab.incognito;
-          return browser.tabs.executeScript(tabId, {
-            // Note: `window` here refers to a global accessible to content
-            // scripts, but not the scripts in the underlying page. For more
-            // details, see https://mdn.io/WebExtensions/Content_scripts#Content_script_environment
-            code: `window.downloadOnly = ${downloadOnly}`,
-            runAt: "document_start"
+    return browser.experiments.screenshots.isHistoryEnabled().then((historyEnabled) => {
+      return browser.experiments.screenshots.isUploadDisabled().then((uploadDisabled) => {
+        return browser.experiments.screenshots.getUpdateChannel().then((channel) => {
+          return browser.tabs.get(tabId).then(tab => {
+            const downloadOnly = !historyEnabled || uploadDisabled || channel === "esr" || tab.incognito;
+            return browser.tabs.executeScript(tabId, {
+              // Note: `window` here refers to a global accessible to content
+              // scripts, but not the scripts in the underlying page. For more
+              // details, see https://mdn.io/WebExtensions/Content_scripts#Content_script_environment
+              code: `window.downloadOnly = ${downloadOnly}`,
+              runAt: "document_start"
+            });
           });
         });
       });
     });
   }
 
   function executeModules(tabId, scripts) {
     let lastPromise = Promise.resolve(null);
rename from browser/extensions/screenshots/webextension/background/senderror.js
rename to browser/extensions/screenshots/background/senderror.js
rename from browser/extensions/screenshots/webextension/background/startBackground.js
rename to browser/extensions/screenshots/background/startBackground.js
--- a/browser/extensions/screenshots/webextension/background/startBackground.js
+++ b/browser/extensions/screenshots/background/startBackground.js
@@ -47,16 +47,18 @@ this.startBackground = (function() {
   browser.contextMenus.onClicked.addListener((info, tab) => {
     loadIfNecessary().then(() => {
       main.onClickedContextMenu(info, tab);
     }).catch((error) => {
       console.error("Error loading Screenshots:", error);
     });
   });
 
+  browser.experiments.screenshots.initLibraryButton();
+
   browser.runtime.onMessage.addListener((req, sender, sendResponse) => {
     loadIfNecessary().then(() => {
       return communication.onMessage(req, sender, sendResponse);
     }).catch((error) => {
       console.error("Error loading Screenshots:", error);
     });
     return true;
   });
rename from browser/extensions/screenshots/webextension/background/takeshot.js
rename to browser/extensions/screenshots/background/takeshot.js
--- a/browser/extensions/screenshots/webextension/background/takeshot.js
+++ b/browser/extensions/screenshots/background/takeshot.js
@@ -1,21 +1,20 @@
 /* globals communication, shot, main, auth, catcher, analytics, buildSettings, blobConverters, thumbnailGenerator */
 
 "use strict";
 
 this.takeshot = (function() {
   const exports = {};
   const Shot = shot.AbstractShot;
-  const { sendEvent } = analytics;
+  const { sendEvent, incrementCount } = analytics;
 
   communication.register("takeShot", catcher.watchFunction((sender, options) => {
     const { captureType, captureText, scroll, selectedPos, shotId } = options;
     const shot = new Shot(main.getBackend(), shotId, options.shot);
-    shot.favicon = sender.tab.favIconUrl;
     let imageBlob = options.imageBlob;
     let capturePromise = Promise.resolve();
     let openedTab;
     let thumbnailBlob;
     if (!shot.clipNames().length) {
       // canvas.drawWindow isn't available, so we fall back to captureVisibleTab
       capturePromise = screenshotPage(selectedPos, scroll).then((dataUrl) => {
         imageBlob = buildSettings.uploadBinary ? blobConverters.dataUrlToBlob(dataUrl) : null;
@@ -51,17 +50,19 @@ this.takeshot = (function() {
       }
       return thumbnailGenerator.createThumbnailUrl(shot);
     }).then((thumbnailImage) => {
       if (buildSettings.uploadBinary) {
         thumbnailBlob = thumbnailImage;
       } else {
         shot.thumbnail = thumbnailImage;
       }
-    }).then(() => {
+      return browser.experiments.screenshots.getUpdateChannel();
+    }).then((firefoxChannel) => {
+      shot.firefoxChannel = firefoxChannel;
       return browser.tabs.create({url: shot.creatingUrl});
     }).then((tab) => {
       openedTab = tab;
       sendEvent("internal", "open-shot-tab");
       return uploadShot(shot, imageBlob, thumbnailBlob);
     }).then(() => {
       return browser.tabs.update(openedTab.id, {url: shot.viewUrl, loadReplace: true}).then(
         null,
@@ -71,17 +72,17 @@ this.takeshot = (function() {
           if ((/invalid tab id/i).test(error)) {
             // This happens if the tab was closed before the upload completed
             return browser.tabs.create({url: shot.viewUrl});
           }
           throw error;
         }
       );
     }).then(() => {
-      catcher.watchPromise(communication.sendToBootstrap("incrementCount", {scalar: "upload"}));
+      catcher.watchPromise(incrementCount("upload"));
       return shot.viewUrl;
     }).catch((error) => {
       browser.tabs.remove(openedTab.id);
       throw error;
     }));
   }));
 
   communication.register("screenshotPage", (sender, selectedPos, scroll) => {
rename from browser/extensions/screenshots/webextension/blank.html
rename to browser/extensions/screenshots/blank.html
rename from browser/extensions/screenshots/webextension/blobConverters.js
rename to browser/extensions/screenshots/blobConverters.js
deleted file mode 100644
--- a/browser/extensions/screenshots/bootstrap.js
+++ /dev/null
@@ -1,215 +0,0 @@
-/* globals ADDON_DISABLE Services CustomizableUI LegacyExtensionsUtils AppConstants PageActions */
-const ADDON_ID = "screenshots@mozilla.org";
-const TELEMETRY_ENABLED_PREF = "datareporting.healthreport.uploadEnabled";
-const PREF_BRANCH = "extensions.screenshots.";
-const USER_DISABLE_PREF = "extensions.screenshots.disabled";
-const UPLOAD_DISABLED_PREF = "extensions.screenshots.upload-disabled";
-const HISTORY_ENABLED_PREF = "places.history.enabled";
-
-ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
-ChromeUtils.defineModuleGetter(this, "AddonManager",
-                               "resource://gre/modules/AddonManager.jsm");
-ChromeUtils.defineModuleGetter(this, "AddonManagerPrivate",
-                               "resource://gre/modules/AddonManager.jsm");
-ChromeUtils.defineModuleGetter(this, "AppConstants",
-                               "resource://gre/modules/AppConstants.jsm");
-ChromeUtils.defineModuleGetter(this, "CustomizableUI",
-                               "resource:///modules/CustomizableUI.jsm");
-ChromeUtils.defineModuleGetter(this, "LegacyExtensionsUtils",
-                               "resource://gre/modules/LegacyExtensionsUtils.jsm");
-ChromeUtils.defineModuleGetter(this, "Services",
-                               "resource://gre/modules/Services.jsm");
-
-let addonResourceURI;
-let appStartupDone;
-let appStartupPromise = new Promise((resolve, reject) => {
-  appStartupDone = resolve;
-});
-
-const prefs = Services.prefs;
-
-const appStartupObserver = {
-  register() {
-    Services.obs.addObserver(this, "sessionstore-windows-restored", false); // eslint-disable-line mozilla/no-useless-parameters
-  },
-
-  unregister() {
-    Services.obs.removeObserver(this, "sessionstore-windows-restored", false); // eslint-disable-line mozilla/no-useless-parameters
-  },
-
-  observe() {
-    appStartupDone();
-    this.unregister();
-  }
-};
-
-const LibraryButton = {
-  ITEM_ID: "appMenu-library-screenshots",
-
-  init(webExtension) {
-    this._initialized = true;
-    const permissionPages = [...webExtension.extension.permissions].filter(p => (/^https?:\/\//i).test(p));
-    if (permissionPages.length > 1) {
-      Cu.reportError(new Error("Should not have more than 1 permission page, but got: " + JSON.stringify(permissionPages)));
-    }
-    this.PAGE_TO_OPEN = permissionPages.length === 1 ? permissionPages[0].replace(/\*$/, "") : "https://screenshots.firefox.com/";
-    this.PAGE_TO_OPEN += "shots";
-    this.ICON_URL = webExtension.extension.getURL("icons/icon-v2.svg");
-    this.LABEL = webExtension.extension.localizeMessage("libraryLabel");
-    CustomizableUI.addListener(this);
-    for (const win of CustomizableUI.windows) {
-      this.onWindowOpened(win);
-    }
-  },
-
-  uninit() {
-    if (!this._initialized) {
-      return;
-    }
-    for (const win of CustomizableUI.windows) {
-      const item = win.document.getElementById(this.ITEM_ID);
-      if (item) {
-        item.remove();
-      }
-    }
-    CustomizableUI.removeListener(this);
-    this._initialized = false;
-  },
-
-  onWindowOpened(win) {
-    const libraryViewInsertionPoint = win.document.getElementById("appMenu-library-remotetabs-button");
-    // If the library view doesn't exist (on non-photon builds, for instance),
-    // this will be null, and we bail out early.
-    if (!libraryViewInsertionPoint) {
-      return;
-    }
-    const parent = libraryViewInsertionPoint.parentNode;
-    const {nextSibling} = libraryViewInsertionPoint;
-    const item = win.document.createXULElement("toolbarbutton");
-    item.className = "subviewbutton subviewbutton-iconic";
-    item.addEventListener("command", () => win.openWebLinkIn(this.PAGE_TO_OPEN, "tab"));
-    item.id = this.ITEM_ID;
-    const iconURL = this.ICON_URL;
-    item.setAttribute("image", iconURL);
-    item.setAttribute("label", this.LABEL);
-
-    parent.insertBefore(item, nextSibling);
-  },
-};
-
-let addonData, startupReason;
-
-function startup(data, reason) { // eslint-disable-line no-unused-vars
-  addonResourceURI = data.resourceURI;
-
-  if (Services.prefs.getBoolPref(USER_DISABLE_PREF, false)) {
-    AddonManager.getActiveAddons().then(result => {
-      let addon = result.addons.find(a => a.id == ADDON_ID);
-      if (addon) {
-        addon.disable({allowSystemAddons: true});
-      }
-    });
-    return;
-  }
-
-  addonData = data;
-  startupReason = reason;
-  if (reason === AddonManagerPrivate.BOOTSTRAP_REASONS.APP_STARTUP) {
-    appStartupObserver.register();
-  } else {
-    appStartupDone();
-  }
-  // eslint-disable-next-line promise/catch-or-return
-  appStartupPromise = appStartupPromise.then(handleStartup);
-}
-
-function shutdown(data, reason) { // eslint-disable-line no-unused-vars
-  const webExtension = LegacyExtensionsUtils.getEmbeddedExtensionFor({
-    id: ADDON_ID,
-    resourceURI: addonResourceURI
-  });
-  // Immediately exit if Firefox is exiting, #3323
-  if (reason === AddonManagerPrivate.BOOTSTRAP_REASONS.APP_SHUTDOWN) {
-    stop(webExtension, reason);
-    return;
-  }
-  // Because the prefObserver is unregistered above, this _should_ terminate the promise chain.
-  appStartupPromise = appStartupPromise.then(() => { stop(webExtension, reason); });
-}
-
-function install(data, reason) {} // eslint-disable-line no-unused-vars
-
-function uninstall(data, reason) {} // eslint-disable-line no-unused-vars
-
-function getBoolPref(pref) {
-  return prefs.getPrefType(pref) && prefs.getBoolPref(pref);
-}
-
-function handleStartup() {
-  const webExtension = LegacyExtensionsUtils.getEmbeddedExtensionFor({
-    id: ADDON_ID,
-    resourceURI: addonResourceURI
-  });
-
-  if (!webExtension.started) {
-    start(webExtension);
-  }
-}
-
-function start(webExtension) {
-  let reasonStr = stringReasonFromNumericReason(startupReason);
-  return webExtension.startup(reasonStr, addonData).then((api) => {
-    api.browser.runtime.onMessage.addListener(handleMessage);
-    LibraryButton.init(webExtension);
-  }).catch((err) => {
-    // The startup() promise will be rejected if the webExtension was
-    // already started (a harmless error), or if initializing the
-    // WebExtension failed and threw (an important error).
-    console.error(err);
-    if (err.message !== "This embedded extension has already been started") {
-      // TODO: Should we send these errors to Sentry? #2420
-    }
-  });
-}
-
-function stop(webExtension, reason) {
-  if (reason !== AddonManagerPrivate.BOOTSTRAP_REASONS.APP_SHUTDOWN) {
-    LibraryButton.uninit();
-  }
-  let reasonStr = stringReasonFromNumericReason(reason);
-  return Promise.resolve(webExtension.shutdown(reasonStr));
-}
-
-function stringReasonFromNumericReason(numericReason) {
-  let { BOOTSTRAP_REASONS } = AddonManagerPrivate;
-  return Object.keys(BOOTSTRAP_REASONS).find(
-    key => BOOTSTRAP_REASONS[key] == numericReason
-  );
-}
-
-function handleMessage(msg, sender, sendReply) {
-  if (!msg) {
-    return;
-  }
-
-  if (msg.funcName === "isTelemetryEnabled") {
-    const telemetryEnabled = getBoolPref(TELEMETRY_ENABLED_PREF);
-    sendReply({type: "success", value: telemetryEnabled});
-  } else if (msg.funcName === "isUploadDisabled") {
-    const isESR = AppConstants.MOZ_UPDATE_CHANNEL === "esr";
-    const uploadDisabled = getBoolPref(UPLOAD_DISABLED_PREF);
-    sendReply({type: "success", value: uploadDisabled || isESR});
-  } else if (msg.funcName === "isHistoryEnabled") {
-    const historyEnabled = getBoolPref(HISTORY_ENABLED_PREF);
-    sendReply({type: "success", value: historyEnabled});
-  } else if (msg.funcName === "incrementCount") {
-    const allowedScalars = ["download", "upload", "copy"];
-    const scalar = msg.args && msg.args[0] && msg.args[0].scalar;
-    if (!allowedScalars.includes(scalar)) {
-      sendReply({type: "error", name: `incrementCount passed an unrecognized scalar ${scalar}`});
-    } else {
-      Services.telemetry.scalarAdd(`screenshots.${scalar}`, 1);
-      sendReply({type: "success", value: true});
-    }
-  }
-}
rename from browser/extensions/screenshots/webextension/build/buildSettings.js
rename to browser/extensions/screenshots/build/buildSettings.js
rename from browser/extensions/screenshots/webextension/build/inlineSelectionCss.js
rename to browser/extensions/screenshots/build/inlineSelectionCss.js
--- a/browser/extensions/screenshots/webextension/build/inlineSelectionCss.js
+++ b/browser/extensions/screenshots/build/inlineSelectionCss.js
@@ -14,16 +14,18 @@ window.inlineSelectionCss = `
   outline: none;
   padding: 0 10px;
   position: relative;
   text-align: center;
   text-decoration: none;
   transition: background 150ms cubic-bezier(0.07, 0.95, 0, 1), border 150ms cubic-bezier(0.07, 0.95, 0, 1);
   user-select: none;
   white-space: nowrap; }
+  .button.hidden, .hidden.highlight-button-cancel, .hidden.highlight-button-save, .hidden.highlight-button-download, .hidden.highlight-button-copy, .hidden.preview-button-save {
+    display: none; }
   .button.small, .small.highlight-button-cancel, .small.highlight-button-save, .small.highlight-button-download, .small.highlight-button-copy, .small.preview-button-save {
     height: 32px;
     line-height: 32px;
     padding: 0 8px; }
   .button.active, .active.highlight-button-cancel, .active.highlight-button-save, .active.highlight-button-download, .active.highlight-button-copy, .active.preview-button-save {
     background-color: #dedede; }
   .button.tiny, .tiny.highlight-button-cancel, .tiny.highlight-button-save, .tiny.highlight-button-download, .tiny.highlight-button-copy, .tiny.preview-button-save {
     font-size: 14px;
@@ -87,58 +89,46 @@ window.inlineSelectionCss = `
     .button.trash:active, .trash.highlight-button-cancel:active, .trash.highlight-button-save:active, .trash.highlight-button-download:active, .trash.highlight-button-copy:active, .trash.preview-button-save:active {
       background-color: #dedede; }
   .button.edit, .edit.highlight-button-cancel, .edit.highlight-button-save, .edit.highlight-button-download, .edit.highlight-button-copy, .edit.preview-button-save {
     background-image: url("../img/icon-edit.svg"); }
     .button.edit:hover, .edit.highlight-button-cancel:hover, .edit.highlight-button-save:hover, .edit.highlight-button-download:hover, .edit.highlight-button-copy:hover, .edit.preview-button-save:hover {
       background-color: #ededf0; }
     .button.edit:active, .edit.highlight-button-cancel:active, .edit.highlight-button-save:active, .edit.highlight-button-download:active, .edit.highlight-button-copy:active, .edit.preview-button-save:active {
       background-color: #dedede; }
-  .button.flag, .flag.highlight-button-cancel, .flag.highlight-button-save, .flag.highlight-button-download, .flag.highlight-button-copy, .flag.preview-button-save {
-    background-image: url("../img/icon-flag.svg"); }
-    .button.flag:hover, .flag.highlight-button-cancel:hover, .flag.highlight-button-save:hover, .flag.highlight-button-download:hover, .flag.highlight-button-copy:hover, .flag.preview-button-save:hover {
-      background-color: #ededf0; }
-    .button.flag:active, .flag.highlight-button-cancel:active, .flag.highlight-button-save:active, .flag.highlight-button-download:active, .flag.highlight-button-copy:active, .flag.preview-button-save:active {
-      background-color: #dedede; }
 
-.inverse-color-scheme {
-  background: #38383d;
-  color: #f9f9fa; }
-  .inverse-color-scheme a {
-    color: #e1e1e6; }
-
-.default-color-scheme {
+.app-body {
   background: #f9f9fa;
   color: #38383d; }
-  .default-color-scheme a {
-    color: #009ec0; }
+  .app-body a {
+    color: #0a84ff; }
 
 .highlight-color-scheme {
-  background: #009ec0;
+  background: #0a84ff;
   color: #fff; }
   .highlight-color-scheme a {
     color: #fff;
     text-decoration: underline; }
 
 .alt-color-scheme {
   background: #38383d;
   color: #f9f9fa; }
   .alt-color-scheme h1 {
     color: #6f7fb6; }
   .alt-color-scheme a {
     color: #e1e1e6;
     text-decoration: underline; }
 
 .button.primary, .primary.highlight-button-cancel, .highlight-button-save, .primary.highlight-button-download, .primary.highlight-button-copy, .preview-button-save {
-  background-color: #009ec0;
+  background-color: #0a84ff;
   color: #fff; }
   .button.primary:hover, .primary.highlight-button-cancel:hover, .highlight-button-save:hover, .primary.highlight-button-download:hover, .primary.highlight-button-copy:hover, .preview-button-save:hover, .button.primary:focus, .primary.highlight-button-cancel:focus, .highlight-button-save:focus, .primary.highlight-button-download:focus, .primary.highlight-button-copy:focus, .preview-button-save:focus {
-    background-color: #00819c; }
+    background-color: #0072e5; }
   .button.primary:active, .primary.highlight-button-cancel:active, .highlight-button-save:active, .primary.highlight-button-download:active, .primary.highlight-button-copy:active, .preview-button-save:active {
-    background-color: #006c83; }
+    background-color: #0065cc; }
 
 .button.secondary, .highlight-button-cancel, .secondary.highlight-button-save, .highlight-button-download, .highlight-button-copy, .secondary.preview-button-save {
   background-color: #f9f9fa;
   color: #38383d; }
   .button.secondary:hover, .highlight-button-cancel:hover, .secondary.highlight-button-save:hover, .highlight-button-download:hover, .highlight-button-copy:hover, .secondary.preview-button-save:hover {
     background-color: #ededf0; }
   .button.secondary:active, .highlight-button-cancel:active, .secondary.highlight-button-save:active, .highlight-button-download:active, .highlight-button-copy:active, .secondary.preview-button-save:active {
     background-color: #dedede; }
@@ -155,31 +145,29 @@ window.inlineSelectionCss = `
   color: #fff;
   background: #d92215; }
   .button.warning:hover, .warning.highlight-button-cancel:hover, .warning.highlight-button-save:hover, .warning.highlight-button-download:hover, .warning.highlight-button-copy:hover, .warning.preview-button-save:hover, .button.warning:focus, .warning.highlight-button-cancel:focus, .warning.highlight-button-save:focus, .warning.highlight-button-download:focus, .warning.highlight-button-copy:focus, .warning.preview-button-save:focus {
     background: #b81d12; }
   .button.warning:active, .warning.highlight-button-cancel:active, .warning.highlight-button-save:active, .warning.highlight-button-download:active, .warning.highlight-button-copy:active, .warning.preview-button-save:active {
     background: #a11910; }
 
 .subtitle-link {
-  color: #009ec0; }
+  color: #0a84ff; }
 
 .loader {
-  background: #2e2d30;
+  background: rgba(12, 12, 13, 0.2);
   border-radius: 2px;
   height: 4px;
   overflow: hidden;
   position: relative;
   width: 200px; }
-  #shot-index .loader {
-    background-color: #dedede; }
 
 .loader-inner {
   animation: bounce infinite alternate 1250ms cubic-bezier(0.7, 0, 0.3, 1);
-  background: #04d1e6;
+  background: #45a1ff;
   border-radius: 2px;
   height: 4px;
   transform: translateX(-40px);
   width: 50px; }
 
 @keyframes bounce {
   0% {
     transform: translateX(-40px); }
@@ -395,16 +383,24 @@ window.inlineSelectionCss = `
     font-weight: bold;
     white-space: nowrap; }
   .notice .notice-help {
     background-image: url("MOZ_EXTENSION/icons/help-16.svg");
     background-position: center center;
     background-repeat: no-repeat;
     height: 16px;
     width: 16px; }
+  .notice.middle {
+    display: none;
+    top: calc(50% - 21px); }
+
+.preview-button-save:active ~ .notice.middle,
+.preview-button-save:focus ~ .notice.middle,
+.preview-button-save:hover ~ .notice.middle {
+  display: block; }
 
 .notice-tooltip {
   background: #fff;
   border-radius: 3px;
   border: 1px solid #9d9d9e;
   bottom: 60px;
   color: #000;
   cursor: default;
rename from browser/extensions/screenshots/webextension/build/onboardingCss.js
rename to browser/extensions/screenshots/build/onboardingCss.js
--- a/browser/extensions/screenshots/webextension/build/onboardingCss.js
+++ b/browser/extensions/screenshots/build/onboardingCss.js
@@ -1,23 +1,21 @@
 /* Created from build/server/static/css/onboarding.css */
 window.onboardingCss = `
 .loader {
-  background: #2e2d30;
+  background: rgba(12, 12, 13, 0.2);
   border-radius: 2px;
   height: 4px;
   overflow: hidden;
   position: relative;
   width: 200px; }
-  #shot-index .loader {
-    background-color: #dedede; }
 
 .loader-inner {
   animation: bounce infinite alternate 1250ms cubic-bezier(0.7, 0, 0.3, 1);
-  background: #04d1e6;
+  background: #45a1ff;
   border-radius: 2px;
   height: 4px;
   transform: translateX(-40px);
   width: 50px; }
 
 @keyframes bounce {
   0% {
     transform: translateX(-40px); }
@@ -157,24 +155,26 @@ body {
     .slide.slide-1 .slide-content {
       justify-content: space-between;
       width: 100%; }
 
 .slide-1,
 .slide-2,
 .slide-3,
 .slide-4,
-.slide-5 {
+.slide-5,
+.slide-6 {
   display: none; }
 
 .active-slide-1 .slide-1,
 .active-slide-2 .slide-2,
 .active-slide-3 .slide-3,
 .active-slide-4 .slide-4,
-.active-slide-5 .slide-5 {
+.active-slide-5 .slide-5,
+.active-slide-6 .slide-6 {
   display: flex; }
 
 #slide-status-container {
   display: flex;
   align-items: center;
   justify-content: center;
   padding-top: 15px; }
 
@@ -192,17 +192,18 @@ body {
 
 .goto-slide:hover {
   opacity: 1; }
 
 .active-slide-1 .goto-slide-1,
 .active-slide-2 .goto-slide-2,
 .active-slide-3 .goto-slide-3,
 .active-slide-4 .goto-slide-4,
-.active-slide-5 .goto-slide-5 {
+.active-slide-5 .goto-slide-5,
+.active-slide-6 .goto-slide-6 {
   opacity: 1;
   transform: scale(1.1); }
 
 #prev, #next,
 #done {
   background-color: #f0f0f0;
   border-radius: 50%;
   border: 0;
@@ -276,24 +277,24 @@ body {
   top: 50%;
   transition: opacity 100ms cubic-bezier(0.07, 0.95, 0, 1);
   z-index: 10; }
 
 #skip:hover {
   opacity: 1; }
 
 .active-slide-1 #prev,
-.active-slide-5 #next {
+.active-slide-6 #next {
   display: none; }
 
 #done {
   background-image: url("MOZ_EXTENSION/icons/done.svg");
   display: none; }
 
-.active-slide-5 #done {
+.active-slide-6 #done {
   display: inline-block; }
 
 /* for smaller screen sizes */
 @media screen and (max-width: 768px) {
   .slide {
     height: 360px;
     width: 450px; }
     .slide .slide-image {
rename from browser/extensions/screenshots/webextension/build/onboardingHtml.js
rename to browser/extensions/screenshots/build/onboardingHtml.js
--- a/browser/extensions/screenshots/webextension/build/onboardingHtml.js
+++ b/browser/extensions/screenshots/build/onboardingHtml.js
@@ -1,21 +1,21 @@
-/* Created from addon/webextension/onboarding/slides.html */
+/* Created from webextension/onboarding/slides.html */
 window.onboardingHtml = `
 <!DOCTYPE html>
 <html>
   <head>
     <!-- onboarding.scss is automatically inserted here: -->
     <style></style>
     <!-- Here and in onboarding.scss use MOZ_EXTENSION/path to refer to local files -->
   </head>
   <body>
     <div id="slide-overlay">
       <!-- The current slide is set by having .active-slide-1, .active-slide-2, etc on #slide element: -->
-      <div id="slide-container" data-number-of-slides="5" class="active-slide-1">
+      <div id="slide-container" data-number-of-slides="6" class="active-slide-1">
         <div class="slide slide-1">
           <!-- Note: all images must be listed in manifest.json.template under web_accessible_resources -->
           <div class="slide-image" style="background-image: url('MOZ_EXTENSION/icons/onboarding-1.png');"></div>
           <div class="slide-content">
             <div class="slide-content-aligner">
               <h1><span><strong>Firefox</strong> Screenshots</span><sup>Beta</sup></h1>
               <p data-l10n-id="tourBodyIntro"></p>
             </div>
@@ -45,28 +45,36 @@ window.onboardingHtml = `
         </div>
         <div class="slide slide-5">
           <div class="slide-image" style="background-image: url('MOZ_EXTENSION/icons/onboarding-5.png');"></div>
           <div class="slide-content">
             <h1 data-l10n-id="tourHeaderDownloadUpload"></h1>
             <p data-l10n-id="tourBodyDownloadUpload"></p>
           </div>
         </div>
+        <div class="slide slide-6">
+          <div class="slide-image" style="background-image: url('MOZ_EXTENSION/icons/onboarding-6.png');"></div>
+          <div class="slide-content">
+            <h1 data-l10n-id="tourHeaderAccounts"></h1>
+            <p data-l10n-id="tourBodyAccounts"></p>
+          </div>
+        </div>
 
         <!-- Clickable elements should be buttons for accessibility -->
         <button id="skip" data-l10n-id="tourSkip" tabindex=1>Skip</button>
         <button id="prev" tabindex=2 data-l10n-label-id="tourPrevious"></button>
         <button id="next" tabindex=3 data-l10n-label-id="tourNext"></button>
         <button id="done" tabindex=4 data-l10n-label-id="tourDone"></button>
         <div id="slide-status-container">
           <button class="goto-slide goto-slide-1" data-number="1" tabindex=4></button>
           <button class="goto-slide goto-slide-2" data-number="2" tabindex=5></button>
           <button class="goto-slide goto-slide-3" data-number="3" tabindex=6></button>
           <button class="goto-slide goto-slide-4" data-number="4" tabindex=7></button>
           <button class="goto-slide goto-slide-5" data-number="5" tabindex=8></button>
+          <button class="goto-slide goto-slide-6" data-number="6" tabindex=9></button>
         </div>
         <!-- FIXME: Need to put in privacy / etc links -->
       </div>
     </div>
   </body>
 </html>
 
 `;
rename from browser/extensions/screenshots/webextension/build/selection.js
rename to browser/extensions/screenshots/build/selection.js
rename from browser/extensions/screenshots/webextension/build/shot.js
rename to browser/extensions/screenshots/build/shot.js
--- a/browser/extensions/screenshots/webextension/build/shot.js
+++ b/browser/extensions/screenshots/build/shot.js
@@ -186,28 +186,28 @@ class AbstractShot {
       this.origin = "";
     }
     if (this.fullUrl && !isSecureWebUri(this.fullUrl)) {
       this.fullUrl = "";
     }
     this.docTitle = attrs.docTitle || null;
     this.userTitle = attrs.userTitle || null;
     this.createdDate = attrs.createdDate || Date.now();
-    this.favicon = attrs.favicon || null;
     this.siteName = attrs.siteName || null;
     this.images = [];
     if (attrs.images) {
       this.images = attrs.images.map(
         (json) => new this.Image(json));
     }
     this.openGraph = attrs.openGraph || null;
     this.twitterCard = attrs.twitterCard || null;
     this.documentSize = attrs.documentSize || null;
     this.thumbnail = attrs.thumbnail || null;
     this.abTests = attrs.abTests || null;
+    this.firefoxChannel = attrs.firefoxChannel || null;
     this._clips = {};
     if (attrs.clips) {
       for (const clipId in attrs.clips) {
         const clip = attrs.clips[clipId];
         this._clips[clipId] = new this.Clip(this, clipId, clip);
       }
     }
 
@@ -453,25 +453,16 @@ class AbstractShot {
   get createdDate() {
     return this._createdDate;
   }
   set createdDate(val) {
     assert(val === null || typeof val === "number", "Bad createdDate:", val);
     this._createdDate = val;
   }
 
-  get favicon() {
-    return this._favicon;
-  }
-  set favicon(val) {
-    // We set the favicon with tabs.Tab.faviConUrl, which is a full URL.
-    val = val || null;
-    this._favicon = val;
-  }
-
   clipNames() {
     const names = Object.getOwnPropertyNames(this._clips);
     names.sort(function(a, b) {
       return a.sortOrder < b.sortOrder ? 1 : 0;
     });
     return names;
   }
   getClip(name) {
@@ -558,34 +549,45 @@ class AbstractShot {
     assert(typeof val === "object", "abTests should be an object, not:", typeof val);
     assert(!Array.isArray(val), "abTests should not be an Array");
     for (const name in val) {
       assert(val[name] && typeof val[name] === "string", `abTests.${name} should be a string:`, typeof val[name]);
     }
     this._abTests = val;
   }
 
+  get firefoxChannel() {
+    return this._firefoxChannel;
+  }
+  set firefoxChannel(val) {
+    if (val === null || val === undefined) {
+      this._firefoxChannel = null;
+      return;
+    }
+    assert(typeof val === "string", "firefoxChannel should be a string, not:", typeof val);
+    this._firefoxChannel = val;
+  }
+
 }
 
 AbstractShot.prototype.REGULAR_ATTRS = (`
-origin fullUrl docTitle userTitle createdDate favicon images
+origin fullUrl docTitle userTitle createdDate images
 siteName openGraph twitterCard documentSize
-thumbnail abTests
+thumbnail abTests firefoxChannel
 `).split(/\s+/g);
 
 // Attributes that will be accepted in the constructor, but ignored/dropped
 AbstractShot.prototype.DEPRECATED_ATTRS = (`
 microdata history ogTitle createdDevice head body htmlAttrs bodyAttrs headAttrs
 readable hashtags comments showPage isPublic resources deviceId url
-fullScreenThumbnail
+fullScreenThumbnail favicon
 `).split(/\s+/g);
 
 AbstractShot.prototype.RECALL_ATTRS = (`
-url docTitle userTitle createdDate favicon
-openGraph twitterCard images thumbnail
+url docTitle userTitle createdDate openGraph twitterCard images thumbnail
 `).split(/\s+/g);
 
 AbstractShot.prototype._OPENGRAPH_PROPERTIES = (`
 title type url image audio description determiner locale site_name video
 image:secure_url image:type image:width image:height
 video:secure_url video:type video:width image:height
 audio:secure_url audio:type
 article:published_time article:modified_time article:expiration_time article:author article:section article:tag
rename from browser/extensions/screenshots/webextension/build/thumbnailGenerator.js
rename to browser/extensions/screenshots/build/thumbnailGenerator.js
--- a/browser/extensions/screenshots/webextension/build/thumbnailGenerator.js
+++ b/browser/extensions/screenshots/build/thumbnailGenerator.js
@@ -1,9 +1,9 @@
-this.thumbnailGenerator = (function () {let exports={}; // This is used in addon/webextension/background/takeshot.js,
+this.thumbnailGenerator = (function () {let exports={}; // This is used in webextension/background/takeshot.js,
 // server/src/pages/shot/controller.js, and
 // server/scr/pages/shotindex/view.js. It is used in a browser
 // environment.
 
 // Resize down 1/2 at a time produces better image quality.
 // Not quite as good as using a third-party filter (which will be
 // slower), but good enough.
 const maxResizeScaleFactor = 0.5;
rename from browser/extensions/screenshots/webextension/catcher.js
rename to browser/extensions/screenshots/catcher.js
rename from browser/extensions/screenshots/webextension/clipboard.js
rename to browser/extensions/screenshots/clipboard.js
rename from browser/extensions/screenshots/webextension/domainFromUrl.js
rename to browser/extensions/screenshots/domainFromUrl.js
new file mode 100644
--- /dev/null
+++ b/browser/extensions/screenshots/experiments/screenshots/api.js
@@ -0,0 +1,115 @@
+/* globals browser, AppConstants, CustomizableUI, ExtensionCommon, Services, ExtensionAPI */
+
+"use strict";
+
+ChromeUtils.defineModuleGetter(this, "AppConstants",
+                               "resource://gre/modules/AppConstants.jsm");
+ChromeUtils.defineModuleGetter(this, "CustomizableUI",
+                               "resource:///modules/CustomizableUI.jsm");
+ChromeUtils.defineModuleGetter(this, "ExtensionCommon",
+                               "resource://gre/modules/ExtensionCommon.jsm");
+ChromeUtils.defineModuleGetter(this, "PageActions",
+                               "resource:///modules/PageActions.jsm");
+ChromeUtils.defineModuleGetter(this, "Services",
+                               "resource://gre/modules/Services.jsm");
+
+const LibraryButton = {
+  ITEM_ID: "appMenu-library-screenshots",
+
+  init(webExtension) {
+    this._initialized = true;
+    const permissionPages = [...webExtension.permissions].filter(p => (/^https?:\/\//i).test(p));
+    if (permissionPages.length > 1) {
+      Cu.reportError(new Error("Should not have more than 1 permission page, but got: " + JSON.stringify(permissionPages)));
+    }
+    this.PAGE_TO_OPEN = permissionPages.length === 1 ? permissionPages[0].replace(/\*$/, "") : "https://screenshots.firefox.com/";
+    this.PAGE_TO_OPEN += "shots";
+    this.ICON_URL = webExtension.getURL("icons/icon-v2.svg");
+    this.LABEL = webExtension.localizeMessage("libraryLabel");
+    CustomizableUI.addListener(this);
+    for (const win of CustomizableUI.windows) {
+      this.onWindowOpened(win);
+    }
+  },
+
+  uninit() {
+    if (!this._initialized) {
+      return;
+    }
+    for (const win of CustomizableUI.windows) {
+      const item = win.document.getElementById(this.ITEM_ID);
+      if (item) {
+        item.remove();
+      }
+    }
+    CustomizableUI.removeListener(this);
+    this._initialized = false;
+  },
+
+  onWindowOpened(win) {
+    const libraryViewInsertionPoint = win.document.getElementById("appMenu-library-remotetabs-button");
+    // If the library view doesn't exist (on non-photon builds, for instance),
+    // this will be null, and we bail out early.
+    if (!libraryViewInsertionPoint) {
+      return;
+    }
+    const parent = libraryViewInsertionPoint.parentNode;
+    const {nextSibling} = libraryViewInsertionPoint;
+    const item = win.document.createElement("toolbarbutton");
+    item.className = "subviewbutton subviewbutton-iconic";
+    item.addEventListener("command", () => win.openWebLinkIn(this.PAGE_TO_OPEN, "tab"));
+    item.id = this.ITEM_ID;
+    const iconURL = this.ICON_URL;
+    item.setAttribute("image", iconURL);
+    item.setAttribute("label", this.LABEL);
+
+    parent.insertBefore(item, nextSibling);
+  },
+};
+
+this.screenshots = class extends ExtensionAPI {
+  getAPI(context) {
+    const {extension} = context;
+    return {
+      experiments: {
+        screenshots: {
+          // If you are checking for 'nightly', also check for 'nightly-try'.
+          //
+          // Otherwise, just use the standard builds, but be aware of the many
+          // non-standard options that also exist (as of August 2018).
+          //
+          // Standard builds:
+          //   'esr' - ESR channel
+          //   'release' - release channel
+          //   'beta' - beta channel
+          //   'nightly' - nightly channel
+          // Non-standard / deprecated builds:
+          //   'aurora' - deprecated aurora channel (still observed in dxr)
+          //   'default' - local builds from source
+          //   'nightly-try' - nightly Try builds (QA may occasionally need to test with these)
+          getUpdateChannel() {
+            return AppConstants.MOZ_UPDATE_CHANNEL;
+          },
+          isHistoryEnabled() {
+            return Services.prefs.getBoolPref("places.history.enabled", true);
+          },
+          isUploadDisabled() {
+            return Services.prefs.getBoolPref("extensions.screenshots.upload-disabled", false);
+          },
+          initLibraryButton() {
+            context.callOnClose({
+              close: () => {
+                try {
+                  LibraryButton.uninit();
+                } catch (ex) {
+                  Services.console.logStringMessage("Firefox Screenshots LibraryButton shutdown error: ", ex);
+                }
+              },
+            });
+            return LibraryButton.init(extension);
+          },
+        },
+      },
+    };
+  }
+};
new file mode 100644
--- /dev/null
+++ b/browser/extensions/screenshots/experiments/screenshots/schema.json
@@ -0,0 +1,36 @@
+[
+  {
+    "namespace": "experiments.screenshots",
+    "description": "Firefox Screenshots internal API",
+    "functions": [
+      {
+        "name": "getUpdateChannel",
+        "type": "function",
+        "description": "Returns the Firefox channel (AppConstants.MOZ_UPDATE_CHANNEL)",
+        "parameters": [],
+        "async": true
+      },
+      {
+        "name": "isHistoryEnabled",
+        "type": "function",
+        "description": "Returns the value of the 'places.history.enabled' preference",
+        "parameters": [],
+        "async": true
+      },
+      {
+        "name": "isUploadDisabled",
+        "type": "function",
+        "description": "Returns the value of the 'extensions.screenshots.upload-disabled' preference",
+        "parameters": [],
+        "async": true
+      },
+      {
+        "name": "initLibraryButton",
+        "type": "function",
+        "description": "Initializes the Photon-based Library menu item for Screenshots",
+        "parameters": [],
+        "async": true
+      }
+    ]
+  }
+]
rename from browser/extensions/screenshots/webextension/icons/back-highlight.svg
rename to browser/extensions/screenshots/icons/back-highlight.svg
rename from browser/extensions/screenshots/webextension/icons/back.svg
rename to browser/extensions/screenshots/icons/back.svg
rename from browser/extensions/screenshots/webextension/icons/cancel.svg
rename to browser/extensions/screenshots/icons/cancel.svg
rename from browser/extensions/screenshots/webextension/icons/cloud.svg
rename to browser/extensions/screenshots/icons/cloud.svg
rename from browser/extensions/screenshots/webextension/icons/copied-notification.svg
rename to browser/extensions/screenshots/icons/copied-notification.svg
rename from browser/extensions/screenshots/webextension/icons/copy.svg
rename to browser/extensions/screenshots/icons/copy.svg
rename from browser/extensions/screenshots/webextension/icons/done.svg
rename to browser/extensions/screenshots/icons/done.svg
rename from browser/extensions/screenshots/webextension/icons/download.svg
rename to browser/extensions/screenshots/icons/download.svg
rename from browser/extensions/screenshots/webextension/icons/help-16.svg
rename to browser/extensions/screenshots/icons/help-16.svg
rename from browser/extensions/screenshots/webextension/icons/icon-highlight-32-v2.svg
rename to browser/extensions/screenshots/icons/icon-highlight-32-v2.svg
rename from browser/extensions/screenshots/webextension/icons/icon-v2.svg
rename to browser/extensions/screenshots/icons/icon-v2.svg
rename from browser/extensions/screenshots/webextension/icons/icon-welcome-face-without-eyes.svg
rename to browser/extensions/screenshots/icons/icon-welcome-face-without-eyes.svg
rename from browser/extensions/screenshots/webextension/icons/menu-fullpage.svg
rename to browser/extensions/screenshots/icons/menu-fullpage.svg
rename from browser/extensions/screenshots/webextension/icons/menu-myshot-white.svg
rename to browser/extensions/screenshots/icons/menu-myshot-white.svg
rename from browser/extensions/screenshots/webextension/icons/menu-myshot.svg
rename to browser/extensions/screenshots/icons/menu-myshot.svg
rename from browser/extensions/screenshots/webextension/icons/menu-visible.svg
rename to browser/extensions/screenshots/icons/menu-visible.svg
rename from browser/extensions/screenshots/webextension/icons/onboarding-1.png
rename to browser/extensions/screenshots/icons/onboarding-1.png
rename from browser/extensions/screenshots/webextension/icons/onboarding-2.png
rename to browser/extensions/screenshots/icons/onboarding-2.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..d6dd2e1a08b7033efd0e461ce170e60c5f6913a1
GIT binary patch
literal 71575
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%0AgiDf>gJD~oOnwj
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
F{69I6s7L?+
rename from browser/extensions/screenshots/webextension/icons/onboarding-4.png
rename to browser/extensions/screenshots/icons/onboarding-4.png
rename from browser/extensions/screenshots/webextension/icons/onboarding-5.png
rename to browser/extensions/screenshots/icons/onboarding-5.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..b018b22c3b4ff89ec909c4732320eac4f33d2331
GIT binary patch
literal 22964
zc${2%byQSQ7cU{5lG3Pz<R}6|NQsI{sdNpYbPOOdG)jYnG>m|VfKr1XQkU*-h8$oh
z0byo9y58XTeQ&Mz_-D9h@BKT!o#))OZqy4cH5y8GN&*4`nrBZRy&@nWfe{c80p!H^
z6)P%1Ap!!z^cNbskEj1!4*foDnfcSbayYPlg8zSH<1`Bae9SEkj7|3lj&$(~^m-R*
z>Ef=apxm~!_xPy>?0r<<+DXau@6dLvar30&&tbmep17Iip9?z;OUG~f7YMSOg$<z`
zUh&ehMpR$hd)7{v;!4w}mOoFg>+0%xrsnwNe6vf2y97l9xA&*D^d`)$MmKjw^o;he
zpAZyv6I2co){hgmP7!p@=8PVc%^dqQVIzBw{9ABQeaC@qd%+!lC$>(1@1LJtT;l%@
z&n{Q@&c`-SmvCoun6vPn!;r26%;Ck>!TIsYQAF=i6ry`<yk}_>w|9Ke*xa(Vwsvr|
z_oJe6?*N0tVgJ<5EyQ(=z5a2yfUP13>X6JFUcrXeqGoo^JR%YXCug^|wx*`07O-ba
z=s6e9$uiXuG$F9Odyd>beHR`T9UUDR6^&sXzGR;ci;NBmi)!zRy=>Q9YIn%*F3If~
z^(?CP4~aVLG)+oMDkv!YoSTCkdcXZk^0J8F<OiG2`>5Z@f^pO`&_8Jkv8)?i{*GML
zb%2HrZbI>?BKCNtr9*6Wv42rgOF&@I{p^v7E{yQc)H~<7yYvJqn;sS4`Ote~K|kIt
zu|GVD%(%tU{0pS^iK02kt8=80>mz}vYk+^@VK=}KEY;Y{LD4KRGULWi&}XU^bIl?v
z-p-b&e0Z86INw-+pp}XjARq??V~Oy;tyIeD1fi_TFhY6=!4e7nH<UHli2^Sq2mSw=
z|Ifpf2GsxH6bZevJT$L#JJ$)8r<BJF^X1c}#%yKh-AO+b$u)(Ya)!11p{Q#0YgBW?
zDl$@rfwNz7Klu1U09e0oK|GZ4f*-&Tn!p6d$uSdTPG1C*$uW+!Q|<ozy5txI3l8sx
z@35Vm<*{rON{T?xDM1?RlG!F(`A0Rqzz0hWR?YgiE`NBZnYe7d;OtOZNoIRPqO~Tx
zYB{!esx;-9+D9+TrDp4ZF|Va7M+Wtb&le-b_hS1sZHZdp{SAf9pXZX|)~FB*JrHd^
z8hX@hU^|uQ;biLNzF)Vzn@SJ^iwNNo*Xh8U=Dh~+$pqXw2%Oxof5LH*!bi}0dL-oP
zS6z1T26H@?-j%ghcG2?Ci!StVWXyzeYHT6045h{(by##;6hsc9|KXq4w7+(&*>)=a
zn^a3Q7&}9pIuo7ZeTo(Ls0<6nGC+psa~?FQzzno*w`ynvV;e8AbiPc7*xSZD+#L!>
z7Hdf^e>YT@&lf_yv+Z>S1e9TibQda&QF0F+ZW*GrXiH?~`*|b}s_8IU-VpipXc~Hm
zd}tchH?~_k!doh5ND+=$f!hzWB&A^mRAJf_7?!05M;4SuULYfC)&2a#EF65XUKhR?
zkSbf<{WC8konT3-4Q-8c_;ksFTHji198r|LN7(8Z*3pL^_!%MqY_0w3*oLz*@&fvX
zfG7mP^=4-vd#C^Tm2Vcf3RrxW7o&$aB#ML{a$6L_0xdWwup$mk!<$PjO`sfq5VSgm
z;ve)_@ZpI`>wxPPh(f4^0Z~+1(h#rPZCZ@U1{pbMDK_LBO;dERW<`ki2L0xz8ldv$
z9X?zvm~UF_5_m@HFiQr=kR}Z;fCravO$txJQ|AZD$q{4oORI1GEjtFa_o*TAX#9Bm
z&j&14BzUk2SeGoUQs*8K9^#`kAih_`DS4F$7U-?nN8lBomrT}1`lS^kXKLAG+bS?Y
z8)X;;NXx~<6OK;RYfxca5@`1DW~7I-_Mtr?^7fe~-g;8UG#;$~po6+1;E%zt%;ytx
zVx<1*R4G|?_Z3|@&UPS6-!xxg#ULHYaw84Ejs78C6$xn)y8pOt$;Hjr@#vLt0ZF+;
z{|JlPk!??HKVz2cMZ8J)ui?xeFP;V}Htzpy&ob@2$}W}kj_^t!!s=8pOUa%TC4?8o
zFec@h4HWx=h074JRR7>K>V-D5grqwAUi|YGVIY-NU-}7A8hh=Z`1N|o{+zR$`n26Y
zYz0UY6dbcwUF2PIV@AySA4QHROxoF#I5tr_j@C!vSFzk(nZfZuR|mGPJr}?%{xgi_
zIh^6d1b%$mD=+>pBv}TtJCiA$KxzxYKbq@OD6`WZ5&eH*O?(3$H4EuE)ek55ukzl`
zujr+wAB6uNXaCH2SL@+A!;|qz43Je)-FmQ!_EZ7)Z2fePbsgoQ$JfI#iE)|`D<a+-
zod4=|_A_%lE+(roW{?~+pCkzlE!iA*4~e*=3^M{`l4>Mbk-c)YiSoS+w}4ML1{4Uw
zG1mppFgHBCW!H{x`faM1w7l?@7_d8<-hrwk7=(C-bsukLgTC2Mt)hq}7ippY=cTjE
ztUP;Tw@yG55uT{lAcCEBD`(4`b=zF+7~=@<@cUDOv9r_L$c7LvS>qsP{sS-aN{8=U
z1_X$(Kwp~lNLh*V0t!oI;UYgt6z>}WH0KcKf<=9l2fit)NkTeiE4YDAQo-1ZA(W4+
zVA&^28RvoT-)lniyXVHnboJ#Zx9aaZeQY2HPwvZAFI--7v<h~@LPKrtj7F{m@X`6V
z+l}tLg#=OOv4t~YW-q&D4AD~buo1_*RP8bCrw7|64BETA*&1DDW#3Jg&(|11B#@9A
zy?u6qE3wzdAdJ&IwSCeL3%StZrUg@U)d!G0z2R>uWnki6JACa8>sG<S$qCmoQD+23
z>E~HeN|~)F&iKR;MiT^tpJ&}fiM?<4OPq=bPfFq{AuEmlu->d#MS6m~p9-Uk^=7{Y
zdAyKIKo4TTP^fImW}HiU7b{YjV0;L9LZ0sVHhypSvuhmVEic}XB8X&-I(+n=`lpWP
zTdaI1Gj$NhrYS=9ZZ=FT(LBqKX0nO*+cp927H;S61zD$*#U=ZvZ})Ow&SU8PqPl(d
zVAxHRj@-t2GPhS@Twq^~K#6A&kbTUJ*z1(^;-~5*Xs5ynTs#Y(uDS2&+G(&@iKxpy
zZa0a8H3U{;HbJYUUwWu`A(3fcZ-)yg{CUE)jboOD1S+(i6@|Ndp*`grgzC1Jqgj#(
zBU#a!V{>738$oL#du}ga0eex^OgJw;iXAUs8uOMH`~<j%K)p)y5&MU;F{1vUx24Gw
zZ?Yf{4es+8xDoSSNk=y9nX*Rj$$RIz;Px$4TJ~f4QC`RB2^VQt%AC^;Wq=+t=yqb#
zC|<%W)@F(pGXMf^qT&J(xn}~PD?i6pzP{t$H0Rl)u@h^!xU@s>XWxdJHz8jHCb235
zPXXND&ty2Ay}Ax?Fpl@|gp?5z*n@UHyjF%nq%EwF(1Y4Jx}yAlzl-~}<Jk-jAyF@b
zD&iW2B3z&;L&!h7aDV_E25Xa{UB1h<5$R~srBcj%q&TY!s488aG~(*1{Z=E9Mnb!C
zH8dpcCWQ3R8?+B^6$rW+BI~49K0w2~kN376;te!|Qp6Dk2a^d`Xyzm#t_jNVe}86s
z`uA6N6$8hu2rr<k_`+Wkk!G2Ox?;tEu>f26$Go{zjptZrt<Qu_7%F_ZU51(drE@n$
z=fA!sAM<S*VQ|jwvI%x^90tgwo|PmVH{!HF^kl_MZIj<H`wKF-^yW<nzMRr<rS1>B
zchdIYJu5a69sX!BO(5Al%R@vZ*~ifO@LvmX^im{6%T0Fq*WV3Vo8xfb@!*wgudl8|
zr`QQjg|lAeJIY|vOl<4sf<*P#nVy0BeCB&m$nRKj#)A`c$SIX53C@Mq7ua7<hjK{Q
ze!L5Zl|Jv-`nE27+2=@revGDBrK@U{n^aACg4x0F>|malqH%E$-xc*6^W-iYd>{BB
z#iM>@-)Go2At6=APh_ubN(1sN<5?x@E}vlU9{!n6f^BTLL={6_3L|6~FJ3>u%`l_%
zoRdHZsa&B*Zw_8u_~?sD<EpPJGWxDVQEJEe5!Z*7=?0)<5y$c`4E3bgnapSqqw)y6
zFA69*@r`rcKW2%=CDZ-t+O=y69HJIS*^ZB7EA~w>#~G#IB)y$ikgG;}RhA4dt||_2
z#!wE}n4^7;sP@>@0kX&Fs=E1$wVOyUQ>3TU{63==|3`dkriyR+U(7ao?X!V`pJ|e)
z956d5znNAaVue2kE@ccavMdpZ+MH#Fm^P<XKc;K+%<c6;hFu(##3R=yOI>iccA7@4
z+ABYa_2cIYi@)uZ7F1-db}J}Tz|wCspKkTZKT6^5-clt-rH0R+;G|>pSF8ga6z@kF
z;Ao-)LAlF=T$?W9kl8Vq&W8CH{LJwMbh3$U2R1RV>+#Q5Sv-6~#{D}P5PT4MZQ#*i
z{@$j`jDxG>X>0x!_LnY>-Wc00Ju?42E#j89M{)}0Gz^H8A2!;`&nNc^T7lG^EadZs
z4gO%*N7(lsp)AiLvNRJ0jM&hwxI)gm_F{<kBr|&ZjkM8l7aU|;?lccLRWWmNx9Kqx
z-~xkwhMcJ&x<rEB-Yn5;=!)?fX2#qelF%3^<VPXmdOuqjg~&I_)>|c!kccmpF0ggR
z(S!%XE*tSyj(Q>FfvrlOMFE}F$uPACWJ*#waj^Ic2<a)wIWkataYk>4>)Cl!V(P!y
z6u?ZrKtVX79k6+Sbxj8T7gh@zveg3A5HT!MgSQcLvEQurx*6a!S7oNjBzPWXo^!&y
z{9e;Q>H+q_`*Hs@2F%NkFs_l6l%PDK5-*<t(yO@BepULrao4<%o#sR3M(w#L@JKxy
zB+UnD6|P&bHh>vigl&3_3B9%^zKV{mqs{v6?Y~<#%bS};_h|PQ5ax7)Q&iEV>`V`S
zSff+c?%zR$oMFmpwO)DoW|eV94S;<}Ce4>bBE2;eV2@Qjx#jk^pa_>I6v)^gJE!|w
zbQ(5!-F{tf?eo`)!(dq*DI~v~`-&LfAw7}|TqDIsZlbDG&|K7Z^o3sM+i5+&!+1K4
zF-Qb)s#TIWrY#ZD;pPw+f*v^c7_hf>ThI-kpIlrtzsu5I&+-&_l@qKrAm?&+Ct3db
zvi9rP!!2Z*FM2h8ONu=*RWfIU4jDJ|mU3WyW;?J6KJ5Jg?1Q`vrn#C#Q9gD|@y7c{
zroYNyzWb${=O_C^q5~)Dz1dIvDa3pNU!(bHS2f@uRABYkM*i==3T>K@bXK$(BOj{P
zzn$ld-E-=bCtIRQp!--P69!po;?$ea@L|R;cgru0Z1jv&U+PXKP;p$B1>w$;7?>3w
z0<LnF-`EnfYZY7PrjVH4-Emy)i_{svNEo?EV~PY$P^&5qfl283p;^JMDymZTzcgT<
zC}hGUyE1S@L~<{I^s&N)eR2X#gCrz=0;z+{5!xuAErUYLFcL~qP0w)8H6gO?zGY*W
zzm&h(SuiJS_^GTf6&l(d813sX&M9*588glPzV1FZ2W^rL=h(Wx*q);1k$XD+wFbwa
zf8j;*)l3KNIb)rHp9jBjW#~?uWz%#oFRe#6vtufAf$T4|Hs@is8v;YfnV(A=sjOI8
zsURm^fXs)gcP1<QeWMSK;nYy?m)uqFT0T$+eV>Y423053TIGj4Z5V%Hs{Qgbt?gRs
zStJ>rv?gX3GrGsYj0qfkU*V$txa<DB13hO+jV0~X87aeJpESq1jvT4MG0IAlEkQD#
z;P#pJ{XTlx-=OK}IqH>vq^Pj_(0JoGHrl{pw{8ZN-|T1%ybob+Y9r-^{Dmd83x?k{
z0e8g~^9UBZ$`6`qHw8**Xoz&$-avv8+1|A|*$dxb`6<A!pCTFGX+a~9s5X{465M78
zH`EGfF;&hrO?umOCTWyq-Z)^YT}>MvQ~qY<WNl(^=SB8{2YTRu{bch=h@)>MDVzFb
zXWLbBvup=o($Ok1hc*r)aQMcv7mtUM-VLriy>xuPXNU96tg^$t3Q~CxnYjTs=&L`g
z4?7-+KCGH^9A-o~Ux>6xOcvEYBDxy#=~_6|L4~Gg_iINY0;_MDf!HLsyrZn&TKMzt
zDY`SO_~NUCza$J2GOuI7hT<dZ>zyRSpVG^BZ*31>@5puCSvxy&c5k?wia?YpQG+&W
zJ}G>#V~S|>*$3n~yZ7L%m=-I9%8%3%XIGQ%fhI+2UWk7Ui`tUz!|Sq#2R4IZTz{3H
zYOf%n9r0%(?~9KYu;>#xPe)-xxyRM-vd5@y`;K1+)g$-C7fe1al)x$*NY#Q=LXNdU
zEO`2Qc_Es^%bM4iq`FKBGJg6b-PGWosLFX{R#C$HtU;G{zrAldq`<qjNv6pX$8D71
zNt0E&Vm9QdzA0&8G<|}<J%PRp1|DcTm2>+G^hDp5HK#4@R-aQ)_zgP@unBBKr})ui
z--UYHqpGB`wx%YHIlk3zOUX7@NJJVCM}jE}yF^b$RPD+y_zLGmRm+H%jjv@KYsMUU
z%GaBRB-P(HiU@o>R{P$a71zt@aF#=>3>bFFn{+ZqDb=XH-N*6Yv^6dI8Ul?Un#N}b
zTwkVQVLdm?>^|6ad)0=WWKa(5tyZ1;h!^sc{mY#KrP{(}kGuM0Q8xS%`w7rkUil_B
z9Jgpgb>{8)z%OG%-a-^<AK>viErO0yHH7F1GIZ>nJ%vM~<!;^W95a@O3^xAiXP>eb
z{LulW*f&;_ze1g72buh$g}>-e*aiFCgoyE?GW@>0`TWQBTLIl9lM`rHLg{`JPLIZ_
ziL}LwmBY{_>>cYCUXg|u^)$5UsefLJ#`#`8sV)8@XMp!W5T%P~nSQcYb!mPum?!JT
zPu>jDQ3O$va;>z6#Z!@X5hsJO3Aqk?FRNZUB{WkFg3b>L*@~ybKX$TT`#qXN>f<~7
zyW_m5c%BG)7wb^v`&yy&4SCWdfv|RUwDoQVi&@)8?K9WG@*xJpXrI~A<@BbUvku2E
zoSsYKpu0Qk<irPMI>3QIh6Zg^ngr^F{M<vJtvE@|AK)qa)z?*7Pl)w|#dG!1V=8yj
zmN(3s-hSSw^BUh;0YOY1r&5G|K-4WwKY#y_!li1w#{U%HL$z@ud6a(eD()C8GzQfF
z(9wV?nE+j-y`(o%x$cs&RUS+90vfC4O9;gDM<Lo>R?vl0cV@{E`=EpS@-0%w<8)Ht
zy+oKEFYd|3YmiHOdd<3i)A0vha#UUGsnK%VvOX(8TR2%}L^&g!1pF{`!7b);|8o4J
z@Go~}(9c~WnwODMrUYx-b<(rVA4F8myL23h=(?@>AhP3Hla^|CRHT_-d*8-h=O{b#
z-9LKGY8n%H%P^$+KK$^jpIX%Uz9*HX)0zn67=dKp=M&`U8RVjk$Q$8h#ci%gFd&#5
z1YeV0<2qPd*4ppyy4ErsE>a6oxZvtx;WG2+taK`++1_wIknhTr3Nafr0tzzbd>vz+
zlal`E<<i7W;#%H}Pb;JK-an^N;_T}*ox9wj3iieA$8_b3ld8)^c?n>&rnjchYQPE{
zm-*yXuL<kqb;FvQOYtMrCvtFhf{-^)&?(AnAVyxl#}C`x5bQ^8*Dg#9fWTZ>Q?Zu3
zP8OjZm(i`&Qqy)SyJuY1Qq$0R>TkkxI3E-c@}S+(IcdN>xE)Ts?3Vfg%zj6_ai5U_
zAJ%=Uc0VnH=66Yvdmj)vZ+68kjPKpB5l55!35~0$``beq5PE%JtF#FIp$OoEFd$@Q
z4OpRHmAxM7xI8_CgNVmt4n;a6y5b+UJs}?WGMtf(O>W2*n^aq~sPgWkXoV%D!T5!s
zAsn@ncAfWcScZ!dLu6K~QXdO>!|C}@Qm*$hOod~-XDpj7ueTf6UMO6fu+pAGFet@-
z=*^F&*=m;ibvJsv4<FgUBgb1f%FO|FpdewF$aABzN!6!!*6^hcalkQuR9d^AV#bG*
z4k~A}7X;~@@`03Pr|7`2BX6>=eWdW*+m8%aL$vk!XaupyCGZ=M>e5Glw;#0k4X@I@
zB#7=H4Uj_T8xvol$WnY4edS>B_X}gYo)T7v-iayf{QGiZ2!V+EPJwAfrK5l79f1bt
zDY9yt(<WmE>iaynOcpJlvE^qmG$@C<o^O-NXntI__QTFiG|k4l>naHmdP-a>*ajX5
zhJ`X<Dt<>W{;==~$@+U;m2ytkyGp!k57fV-4(_k3g%Rc&Nqle@ig*?BeOVal%RVZB
zs7@>(by(%cCBnKG2gAO=3dKVyE?@5JFn-!*qJnB^Yv&wVDt%hPL8y+Il^w!3S*;A)
z-j+b3ycmxLey#joo1AH<O72Jo`~7G!=|El#lSwDQo&jk|@-E^j9WhjdFKk~d9gGRB
zd-5E#o%6X(4KH>R9CnIX?f8Wrtz;zi|MKMd^{YV~M-*<=O9f-t+Z3^L_-uRUs@MDA
z6zSDp1Rx2PUmvj)uhdruHNa%^n-7*x`MV-`vaE3>rJw!~!GEQ+Hl&n#Mpu^{nb{|1
zSJ;==PYwwX{}E#_rcHqDVa3x86qdK&ae&W~&(1f;w%8ywTuXrzxYug2ET614vdMRy
zb3AnB{uXEV^41v{!(p1QTR`fw%)Y%Aa^1P#-~G^jXhO_~;*^Ko1E)Cz0Fe-x(S!T_
z;T!?sv)3`K9MJDFtfX*t@y!Z^H5EmWM_U++dDwYW`mYp9)%)taC{7(nm{psrkS2}P
z$+j^kzQ&=e{t{g^Us7>sHBPUy4%n7eQ$-q|_&`y4N1SVU25j;0hG^>cI`1}mYu!rv
ze4>2R>bJ4%P_jYpR4|*ggrwB?#&t>tP?W)n`-AJXYzD8Qy%hx;-s|dTKm+XKVwTVK
z$s-wpZy?%CEiz7dQuH=c4;;1~Q>6wBC0CuP)!bl4+&579zrua4qKrG{dlw`=Y6GMP
zE`pxBdQCj*Lgl5hYe`NK{#Y?iUzF8&eRx@95*>Ol(Yv<m(dS>h74A$SnHh7COc<iE
za60zY7I}rUVqQcsr<>d{`?l#ghVk0OplHL?(Gf*A6p|D7sD9L1t<gN4vU>hkDM>kv
z8L~Hqa!ND};~{dQFS|+t+`vdz_@6&2HOdQ=xN;0)uUr+b9>xyZb)hdeR;53GQ!Y!4
zcx@5efMSuCh<0guapx{ZcsH`)lUm%Lb3d+~?w!l}f-;EH;)|BL0{dKb%`uIq4s4k$
zwbJ|MWw|a8PYjVK9yqNX9^EUG+g>b+LQ5qU^DcZnO!yRVIkU~T#FE{lNJAlZc!#s!
z>x{s;RgQS_UU{mGQa|C8(6qU*y}tCH41(9zxs$pNdE)3*wVk~+HEOo_P-i!BYwaCP
zX^AD?Wy5}hRmI|{YF<5pu0*Lb6d2r6m!pM=3_Y@Y65({+DRQo7a>;k<-JzNztx4<Y
z63MBh<5?iL;>mJ#1pJF{Wxb4iy`~hfM7J%S$<|R1&#y!Z<XT6x!v!xdyv5ahFEe;M
z%S-N{9LlL1%{;H244G#?;Vpbp&X%|(*_k0k*27v#amr>m<MegvQs%50SI)=6xm!4?
z+kpjIn)m(|NZbpH3*T4rvuz!hW)NKze$Z*E{@#li_30q-Pfw~0#5oH^H8pFp0`n9;
zl;?by5*r)x>_dx;Pt)o5>)Rdzuj3O|Kk}a>S@=HLY&a|~n>3`QjsZ)T!&1ggN^j4L
zxF<B^Tc87~7-?4#Z?;)3AMTtBQN`<4JYTw1BmMKtjUJ(pxM_Awr&AL6Rm=Nh2i)Hf
zaPTrIoy=C++Yu*W#I)^d8Tx;p6pu`stZ{wyRjAZ-l|MjH{CJRu)%I(d*oRD?*eLJE
zdd{FqSQ1@~!Q+ErW~k;VPU^1<0q)|wyn>NsHLI(sxXA2KH1{moraidCey2^(Q?avV
z6dYvAyYYAXy0G8NpeHXLn5dV**jNzZ4XJ%EC%gP^a>Nj}Q$3*7talv@cv3ZMy^I{O
zHl;7QF5-uzjxsp5fbuV)t?_Its#wa4?bR$oz>%<~If}I2wuOre+ZbuKxtv6;Kum|}
z`=mKKMhQ?@7AOkIVvi%PJ47b~j?b47yIvJ5ZD>6u<FOP#InTIM4DWBTdo7@&pMpTu
zN%kTMgqkFNJWlqD7EwC9rhtA)#2dU%qbt}yIQd&n;oiAu!meBNarRp<V3<Nz9ZSWg
z?yo4ZV-~eD&Ayr50e@o%Y`#a@_SCaJ1)7xR#3TAuu9wC%VQRDY2&6`D5S-`UQegH~
zd}NW;$rtJ*#8bGlG*4Ekc<dS*nfA@Vv_V>l;T-iXyOgjez<{_7J>da+m-kpRt@;Pk
zQy^zMt!<Si(D*&}HN~_mon#Ie<TFtyUxzGb&#!K-3Ov3mcwA<CZ^Znf6G4gl;<s0g
z7%=~k2rj(%^CYeV4l@KKraRhLUXA@__X>$RbgStQciy%d@k4BxA!z46>x(T>rhacv
z`u$|!eR4b!e70WrSi1yBF$O9U)X(;+xPwNm1I6AXTH=bnSJBTyP`(NYF!M0``BUxs
zim>ZiG8dxGpO#4YF|OK?xlcN9e?*t&Z7WhgA7@utChw^$?pZPg{Mh!8yWB|ed9AQ8
zhP)6@4`}=~lh^X26|MO|6k?r6DEqK#6DNkkvIEdx+%<^}-UTKEL`VB%-)IBNrNh#@
z_mMlvq$t9h8Sfu6AD4%I_OK6pmX^aJ=OpiU@@4nfa<Y-?uVxc+#U|vK1yr^Ne!<7i
zg3vhs_E@$*Tnx1k-*>b8t?T8^cYE!j`^Ub`HMyTdnFR@L$tkCl8?h>fJc_@;8kcJi
z7QVQqxqbrAI2rDY7(!Mtrs{Zl-&<l(k7?UjFlnnQKF2m&LUKrAHPe~78)ok#S$nb@
zd;D)EynA~@Yd-GG;;G&<ax!)#j?x3@6SN<5THs@UWD)y<$^bx+I!bZ^;&oO5t_aYO
zLY2Y-Y$uz;b@Y16mgE!a6|(D~1pWm9w+^X|R-sxtqwW^;gUHEM_B#FeIj6e|Xp;BQ
zheeST)G=wV3Q><8rtfx`2ocY&Iv<LPv^dI)J~R+93+|>@KE0036xHI?T$v?o=Ljx2
zTuv()|7Xr{8f6*YQH;UdiilZ?s=mm5J+x9cuhv=qTkcT&&fz=1)~UnKuO3}*1yMGL
zBiMQm&2jAfj%Cxsei*EKg;GstIZViJygs?j*AQK`nQcM%LYOj*sdh!KoeWW(tq3C+
z%tvn%v%8E(#=sCyg(c_FB&kUk#}wfmF`|>k4bwCT^tOJLLeYHLd+)ixogl^EgmpC>
z%MUkvG|JU9f$sMiHX&AHHyYY!VM)|62If0fBOKu{vErSc)YKYo>x#wztj$&v_cb(f
zecgKR*uqIb6F`3bRs3V%O`k3Rz(rfiVILdXQsayjlB2!h${%8Y2Q`?K+Fs){(--E)
z1_z4;LHE!Nmg`*_z^Dz1c~1=0%;6J6|0CEE_iCHA45c22h)(NH{e8&q@m3+I^_@hA
zZ0DP-Gr48+WUk=Bytk2-&7Plz^@xx2#86Iy%9ScNkyR=ka0a(`mbjgXIO9Osx$P~K
zO;u?rEXwuS-`&{0EiiG#V-mp_x?JR{qrl#I3^-#ToVlYO_E8Eop5SB%^iH}2+kgVu
z67mqRdfndWvXE<LFHQ5(L=fQ9JyWSXswaDUc_OHiC>vF+3H0MH)8ozMuqGo()lyH0
z7pvcot?24+rLc(3_S;ok<E>wBT1hU%!=RuiZ4m?EdT-%933k#_cSTY5mhU};CtQ9G
zw!ADYG}`uPV}_2|c5o<?{hlZIOs~1N-qCGkg#5}K{C(ifQ~bctFa)0Vy3b6cDmB;H
zkHjPif8LN9k64>;%~ONB`WlDau(?~fb)#4<>DcF9Z@;=Gfoc}%n+!kTD%T6%FPx4>
zcA|bq%$E^$*tMHL$l$p<bHnm>8k$cL%j6Ls&u&B_>*Q8!+KewT?8a-}D|~D$AS)$#
z>JqcBMkJZ+IDO&S6z68HyE|kkq>{LNJgV|po2GS1-Rm)@K*$FPFa4PfslQrnGmGd3
z0W?WWT8Bu<!OJF;%Sc1MlAs=)+SsyQPf{HDV7}jk<8L!DcqSF;?(3Tnky5C1=!|`L
z4`j`mCJIm0P_Q8em3jN8WHGn%NW2`gXy=L4K*Q^J$b<Jf161z&VQ7YM*UY}5n31(M
zo3`k8TB@$NTRzvRZm@v(%^bhmQ;8is+y4+gR*f$G#42nob*lZsAEtaq)BMHulBe*a
zPno?uKF{V-rTy5pB(JezzC@DYn>W$r(C)rrASL8$=>{%bt7|W_#PpDlEX%+AB=9-%
zw`N-pj}Ok+;M<tHBdI*inQz6{Hgvw>@vqkUq0r0stm=>u^gM?C`v|co**Crqhl}H`
z7u_*PEivlif%>8i$<Hvx`rHrrivHtovSeoR+umSdOj;OK%G#Z=P5<HBHKCe<!9r?&
zCH^Pbvxyw4uZ_m+mG284NXg<`uE+<T2#aZ@6V!Xyc25wst&uyN!u<lK>w5cB>(@nY
z^2slc62i(js8CFa*uk+gwcNGWUXTwDCaZ2%`5^jMbQKl}=2$dDEpX2b^#?BBO3f_g
zOAbVVbzpzV`$;1TWyoLty8C6@Rg3nE#wXu<4TZst)L<oAW<)nAv=MGlI>Fq*^$gY1
zR}SMJrJdK)XN){hbxi(Zj@vOfm}gY;F$(~h^#TMhD!xHJd99i>o1^4*As;=Si0Env
zg{H-`?ppo*p*Zx+8A6;z$^>=y-jxuAkUSn;^gIKzdkl~=fykK>LW?1Vw|P4lE$#;=
zXLvMAq(hXc5;^+?tCv0dDa95#>eE^8H8--j!wu$}&Gg6HDFW;8bC20@faMkSs2xG3
zLPtH%Ek?6il|?S{5({N3kK0*{`3K!954*cMA5jZKcold8;oet4#qFxyNu-J~co)LM
z?Luz;vpBMGn!W%=NBR80^@D50gD#>W8>+o(R$n5Em#Te~CRdH^(B~?5-GV!cKi3!j
z$-uV2eiWgn%SBMNA^Q(M7^&ep9kq>IZp2Tf>OFS*(qxxzi4%UxmBkGF8r~}@`syaJ
z67B7NMjX#PIiFPa8*$uZd*j&WI%8Q+B6Y)9dC}1ulP}fyVE`f7(47rx@f-bCWG~ZJ
z0uxD!6TN>)RDko<Jr=sox|Sd4G!;MTUgYxV)jxIo6=bt;(UT9ukU2;%f~r`4)_+c7
zq0#ZQtavi7KRykHSd-khPmiB`G1!BeY`(gS`UiTo+UsAB^-(Q_#f!u}iGCD*?N+zl
zUWa#5&Rp#SKf>DmAEIQZ>&>Q(dp&OiI?$T$VY$e~YrpT?4RFN4%rKod1n&p9nZ4bs
z>mM)@xOS>#E8bxSh(h}09JnaOhQ4_RC|Fi*c9|W-9};>88_E*#JrRDrb<YMp`1qi0
zKfdN32W5X2g?c+F3nDW!UQ6{yQ9e$i3>L3y;pFch;Lqizn!fyW@~a;K0IE3apEaUn
z1<d=yN%o`}-{LA@Szi`dCGGC?GGm(m#0!NLvhZ9NxLM(E>)-`*ZRyh}3{^1%)@1GV
z&qq8SmcbTc{pf#uU-yWG#E1t`_nC>q>ifef_PjoHz%6j2?gr}j9^rQKykAHDp37K$
zpT<*4lh(&|T~QR3o>Fi4H{1Z{^&l$0Yivh$his$l_wEAQR9`a*2!6;F1OAAv(w>=k
zJ8CDt6zN?++<R&mcw<qHK%L%uU9!dh;wZnmlJ%2`DK>L)o1X<r)Dbg7^A$pmnZteZ
z<Idse-ug;HSt?KD5&Qi5(9S;jUZE{W&Kw&dNNu6aEeaW%ntDUt{M~o!EqOQVo98W3
z`~Egfaqm@`7`~Dp<=($;)R>;$@Oy6YJ(8YL6!j?T@GF-_{nN_r&oJU2{O#Y*M^WT=
ztgi71l|D{a>a5~o1qx~&bfPt*VcRVwF_N^sZ(C$gm$doou>_rOG=Ids^f-Q~F_`(D
z3SyJk0cXNV7hC?22aj31*u<f=EH$}o+iQ4X0_``t%I@$Fe+u7KLUS2dB5N0=y5z4@
zvmg|VWhRDY_+EuwCn+(^b9=J;*?d&yQAQ3bXSMVVJ_4`Juf6X$9jLzD=^`acYvW6$
zFJ{RbQbDC9*Lo&DXNUKK*E^KZ5D+*Dtk&oHG@}ysd=kuNIeTQ~Wy07-uKZ!@<J!9X
z*_&7@NS;UNO+$cmt{$B32Y+0s$Qb#-dfM!TL#nGmgQs`%4Q0Z_(=P)#D^G}7fiqZa
zhrIH<$zvk_&|6uGjF|EMWWT|`A*iGu6nEs5S$OcLP~KorUo2@Jg8wy&GOrv)^R4<`
zw;*!dJ;iDxn>xCTikVwEUk#ZMxu-K{clV4N(#g<bi4%C#@XgH9v!JfKHUD-nZZ0%v
z>3X;E`0;n|D`(Qc$v<FZ`p|6vDp=|4_MEI^hDUfY3P|zR?tA|+*ipt|CrYAeFqTvt
zMx(<@YJtnNK`b@RiA9SGmB0e-lcDse=xmu*6<)5Ju(?Ry2(0MDzr8$T!W=fnpbAvM
z&DkaZqmMj~pKnyPB9X^m|H4JTOVK-kJVp>#|1oblq|VY1V0{F1mt7)q$W3vB8Y}0C
zuez?UZFQVF|MeGkqB;JN|1Q0$jJKXiU3}xx{(PZ2+!Du551pH#iM2J{AuWapzIgMT
zwcziq4|kQs(GwEsFvK^&&swMqJ<*D`#yxRCbw()@=>hHy#riiXbZ*>g*}XZOaO;^X
z`dhDdhcR%VjBZHPfq7dBk(R@ZfP3@v!ycg@#-=yzv^it<R*qe3f-Ld(rr!Em(U_}m
z>bO#U;ON)VffvVxIVahY8k8oiztCop26^xB!q^5M_(L%itOd>d`f{j|%fgVF*zHEd
z^ld&0Hh>u5%m?3@68ZDx&fhgE{alWzg3kUl)ieK#F_gbyA9RrfvUt9*HEVvlLkWz;
zfQv(N31RP$=u_^wiHB|KIDrP=Z5p7N3V6FRugEV0FhO4#s1jp|5a&ulEEKe$4)}P>
zFagl)co;xK>qxki4<p+_NlFrcutZQE&Pl6QJjA{fmI#EM;o)G3qQM*JnFX{^;Vpuk
zrdEkzw^^YBa_8lwS9=89l_Y@vM3+7WnSaMWHp@FY$y~eA5IJclqq$m{CBvKMMprkC
zuUgXJd3x+}69MmHz#GSF+>^nquy@rtcm=nZYUZIG{GOSbDAiUxg#u*K)#EFmsi*!)
zSQ@(2D4_m|!oCU0OrY(w4aId@FyQIN$zvt3Iad5FK>)_<;1c|l`L&)kHtS;oLHi_0
zyRNWj{dKH3;!RZ0DWUu-0pG9J?rtlmr;2nGgQMGdd2JosbuB<r{a2Ur=61gqr4SEq
zLeS#*xBBohOIX^^ooB1FpC-=_?%_I}ykmZgFOmQ}`^#14;Y&1jW4yNBZQ1@BfSXA;
z^$rolpiB}khR#c!4c((geAYY%=4nK{OM(yg4%>?$8WWhX9vL8U(!QArwov2vn}r9(
zcD>J$7<e`xSi1{BTucbP2w!p@EnvPvnUgvbmIE%JXhVqKQp5L&hV)HutxW=GjP$cB
z`_ao|dg#lg{Tw@xw*?qLrqr<_C#r~Hc<xd&wuNS{F!`Lw*FIulhr1>dF$mwKbQ&xX
zq}gvtrX##sry%eB$1LnGjIbvt_xbEIa;!A_59}r>eqa5zzMbgc$!9&g#w4I(4)caJ
zzH6{5UWOA-n8Bm*Yd|p421X_x)?+VwCPixqfiJFhxQzN%UxP6wJ`%;;0}`dL+}jST
zuJklWQH4(Eqkd>&QImkAo=etO0)&8-Py7<ioe~NdA)*00D5P;Pp#+<_^SQj@F&3rY
zz+^Tr%ij#=-0qz<eVOcJpM8~!Dt6RjPCYe7AF{v>1L+LZr%(xM277nx{<5o1xd3Al
z%VAwqFhc0pZP=;)F3Mo$J`Up7GtnfM77R8^%x3gRut>UsVMR6axp&Ev7QaAAeEdC4
z4DC=aabM;mgBhWYJh;1h2tbQmbP;*TrR~4rI-c32^JR#GMVhUH&R%X90thWaYEfXb
z#X&>$vdvf9X=9)IP-7l3j6BTZSF%c5S}l2ZD1EFdMT=KL1a=cc@LK%N?2Xh=a2@CB
zkDV0hR=?#Ay~|OrnP6}w(At2cGp>FE)CaR-*&~pJ-&XGd)H9E=gfxKt8(xmATHyqU
z&v(+GbV7HE2w|GnU`c*ozD?f)RHG^Vo8hN%heclS4N>An=LT0(19i%z<112_?)-1s
zS;Vlkc5{0fo#5)V2E%=m$@p;sgoU@P*quMz*h~s+K_h><{8Sk7QuQp%tkSZpZ+^TX
zZ!^V_%sQ<48A#C!oqb6Sqrqo%@6sj88kVvAQO-OarfweZO${Ejo>gI6@-&x~W_c7u
z29Oc~8<~5rme^1q`{)+#<t&(ZEiYw>hKD?C>zg>3=qQI@M@<Sp2V|yq`8X#=gAbDl
zpam>U`~vT#HHo4#kJnwj^UiLOqFzi|Sdakuqw~zg@cli>W)XXY&6jWZ(E%Hx295C_
z1dhC7i@S7N>iPpCw#uZU1R1#R2v0b8=7~=YP(npA^i=$wHTyjb2ER5_>7q%&!B9K+
z_wAqdE)>9EzRnDG*6W20%;0B^R%jYN%L+=s#iLP`FNKOsK;^^cn7cT9XY}pUtuUKe
zD>ldU|ACQs0kYR%_a!Oq1Z7{=w#essmL2O6FLrznw_sjF>$cewqW;kI{uKLNe72ZH
zd27=W{WxQ3RbQsdFO>j#Ag68OttPAnoA6M~xzikjB1E0e%dfc7_`e-c4hEZCd}{3_
zPGJQ&^=UfW8rU;~k;=h`17h~`Q1ewfkO1UwwznW-jeG_U4<%69q>%3(?9E<DL<s!;
zdx}eSQ$p>Lz?1@GzCwHU%N>+4yVs(_17XdKcL+daunw!Q5U0CL>9E*P+cF9oe3>d@
zwbJ&cQq8Puxbq#1$YIyBC8+Vum-DcpR>CCb)r8m`fYm%(wHiYQRmT0ZaM5OqgF0Pw
zuJ@2+eQ7;imi>EyeICt#erlS^ip}PNXaMgM;lh=%{QLp}Md{dIga}!fnXgs^v{t#Y
z=gJvyu2Qn$XAN-Rm(aOJ^j%y56?R9fs*deNveU-AeGR_%G1E)iqQtdYzzL<zZR^ID
z-ZylhB{CX-5HWDFIBw{8X~M{WWhciL3>o;Wp9<@w<7sKUuda!}RsihSY|h0hQ4Js%
zTo7*IO}9v6g1f4He22TB&)FKk@EkxmWV9xM^+RfmbO3Z!_No)_;Vw)MZ=dB<?#&PY
zb2kA_{H!}@iHSNS_>8q)mcl>T(qOI7kMZ3|gyL*%kI`tGom2EAx*D2zEw^*?BN2Zi
zKW7GrqEZ2VFA^Xf#>2y->dVd3mZP-YAWe(#S}np6;C&1F^N9>vJjD{mKmUGa>zk3M
zZ_dlgu$pI68Z8v`OEq1o2$x<*rPn75flg33S-LAPjx(fE5&O=Qf3VRZNB`+N*a&Qa
zlSaQ9>4O{aE<`N&jcj-hfUAaYqOL`<qQmgw+4$-0v#xwe+N_)dr+;g3a&}A){7B~G
zzUG;|`Oe`Er?7x8!X!ZHpL9RC^Ats~XY+Qq(Cql@X_l(BsYl7U&ejky8(w-7V)hyL
zi*YY>!~0V8`KQA_NtDU}Jwl5YA_+N2A6BwgW2v*%rC8@E{_QhJ4{9&wz=NKj`ibTQ
zUWO_KNWYYq2>PQ_^kKG70lKq8hI<HP2IEO0XO{Rqr4=h9<i#hJX3HM*#K0b8O}AYE
zP(-rE8kBUV2NaNG{6M`@;4Dl-#Vg73LL#fP&;jb(#IXi<XWv@edfhG>azx~`JRrq`
z(qlx@jLF!c92>HKZw&sqAbokaoeK900`v!QIk4FQ5T~1nAu<r8iKbRHeg!b8P`VPo
z1p2owO&@><)wW##$SEwIJBHD-f$SaZCh8!P^#*=%sJmWc{3;5Ohvmw^LOF~WME>9c
ztGWC(BD=lzeE8yjjKSnYFNZo+HHQ>@Z?Sse{;gBt*O8P&F%*+zpn?9$-WxQeovgG9
zDb;lSA$UklWxx(d<>I+_ur@aCbo3}r_4Koj3>`k`o`kqBxS3Qj!>utFJ6ii7nfdoV
zHb+EP$s)LtY%g+cf25L+VP+4(VLAR~QR-c1Ul!=`{kKp3@?Q&<SZ$!F+5QP`LL^a4
zN@EbWI+Jx2UBvQH@Rc_Px9tG^I!kvuD_Z-ZPi0y1HtQ8I<khz}?Zu3esN@~?46>il
zPNQ)A0u^ra8U_Z}e(Kl7v;OX%H4mP6Lkn7)agRUctpXgB)_3fb$gq`sX)l|TYJj51
z;XsA_Pmv~QgkJckytz|`IrOKziIWjaF|w9@#fR`JZHOnsFfm2ZT1QA@zC=Ncq~ibt
z#42Q?8|nx>pd*^4l==KmD-au3ovSqJsCyuOU*xQi$oJUiA2A1#pyHeR96vSt)@V{(
z8@lhq#dkHn2lMRi;md^;JwbJ$A5tR-VNX-j?R0-hlH=v}Kgl(A#M7?lo=rBZDLVU)
zRVnTZe@=sw{o70$PYHhgcuK#m;xMi^9VGnYD-o)1;6Dz@ANc{da>K1do*U_|WO~W|
zZ=DC$<(MA?`(@-Kl`A0-6OCsv2OPxw%K!>Nr=8!~H~8a~ZQgG1^IC}Rn<pe5m3u{z
zhmHfv!2Z?uZ6La#h!l3{8kn`@$!fxLT#f(=;tS!&1s>(w@Ipw@Bx0;k9JI{n`vQ~W
zD{1KOcqbt1&x8M^z8;rF9%=uAJ3%#Q4vhRQDX%Stg5n+Z23^(Imj`~1pGjBC=j!|Y
zU(yJpoxQl(|D}}(1Jg18z4sCfM~!6%$sk+|0a{sFb1FCC3!;us(MO8+>0<G*B59B5
z6ft)a+<jfN?&`66TAepsatX-MePYr+O<AH~#yQ(u0T$C;b?(ok<iSl@U>~eOYPr46
zEPMBpFgk1Ua?-f<vBW<#YCIbJrTHqresnR+ir%U(U)zfYGQYKp^gA@!J*|1VmU}fN
z-obEhfmc#Vm9L~@OFbA5QQ;Fg1~yx^g2W0aKs_h=SX!Rv3hvq!xwR#|vI%z>hV`zY
zUH~NH_;HBIGhh&C^bW(jEQwDKD?NxE^F*<Sb#7A>%H|a%f{lH-;p0gg5aG70dRBav
zQE`IGzqDD;``>_?mT$RCVf|KV|ABFAH*@aZZJmZ3Ik=K@mPnz=0^oodE&g)_j2}to
zUC5!2@g^5>VESeLm|O5p&Ca@q?(2}U@zd`W;Dlcy>nEwtGmwAFhI<Cpmcw8s!l<E~
z+d04LanYVcA{&AE(~@OpT;V+_L#HXeN{?x|z+z^K8!y+)XupR-ycGXs3Qvk1$^{P3
zgFh;FcfzbdQcqJHlpaGgO;y@Oz<lE;w6pH7PBg&(3CX{FjZ*!h^u3GtU?RQa>bHB-
zK$Z{d&b*d`NEz@hF;--_+?9ur?A4+8!QlUE<4EF2h_l)YczN(}*}Xf`C~QSMr)F>M
zusD1BBm7m_V!gN!*1NwRD0mgvJ#gj9zr#U-kOv^o04QTy2JUvizO9V*V+<4`tc-t^
z4S_kHhBcL}n{BSF<^5|dfngZ25d3{8U*%iGuV1UGWr?e)Npo+;AM|1jWCcO6^A%xs
z0scN?RKCl9J>MjXHRx}PDS?M&`6&gaFV%3~uFlaD>Z3y4@=r^avELJJ;ILl*54sID
z&fxEDo|LyDZdK0@`u-rgQO&VYrb^MQjk_IYps$_gMW-&Ue$&Tx|K=QxB&vD$>uv}5
z+0Z=kZ4^k_-X_Re+Vq~dw`rpbZR6X`bc1cPO`CO|mv~o$j^Ex4I&TQ`|GJj8kaN4~
zX9LbyrG$IPgspS+oSTC9`ixCbquv_U^o@wRJL9o`?(?<M&H0$Kvt@hy;iMKs+NC|a
zfGZ<e`4LFe$bA>C^!R0aruERSbK=owVd}K!7|N`<|L88@$4NCV)*vv!aVuvrc=}W}
zF|J<WY$c90t!PohmhlziwEW%(zC_>Qqp2XG`1J(WA!i}|g~{b7@%G2T9ei0zLOxSS
zqLc$a^d%A90Fm`st`x+jdw9r>p<K7;@!s13%8YhE2@n2_UOae?h%UA58IzDOqOz&g
z1beBntdQAxsy?<#fQ>^g4^{^ZvB4sGi*s&~>|6+A!W!=L#2$VN{8TbcAPI4cuZGl|
zatU8@3QgIrZnK;R4a4Fe0|<5yB-k7H!z~_^efFfyvcmaM%IAPZQ|5~+`EM{XlSX;j
z`j`)7w!C-uIOtDii%Z^9rpIaABD-<s%@-uatX>ad9LU>cvU)0#+jku(dn%(RGR*$a
z@$|+6*x(zz70;iqasPg=9=&PIWp=aBDEV<mhEaRKaj@0Tnn+ls%52~;zBr+HhWQMR
zH&4RS<UWQN>!<Z9ji%2TQzu69^{2(8R~t$@Pt)P6Y>O%w3Xte4Noph=lyt=htqWY*
zmejA;+nzt6slIXJm6#F;ly=l#e}^S@Z0#SiHXeCbdxMuF^Vs&pE?sT@-h%8U`N0U;
z8>5@(63)2k5rD3K-fX@;HQ(hA8NR>vNtBnxnmmN_fB*V8mi0Z6ZolVv$A{j!sxAAG
z0Ag^hfv&C1*f%XTXte75>d0#(umf~Y4V9jW6<gRjtjy-R3@XWsY?(dN7fyw)bVWFl
zUC`wFtYc0F4^*6$@b!!U5d==WNJx%Qa6Gnlyzw1%aJ(ZMdt1#^4nYy-!#YAHQp<y%
zS4bWL{FNl3$*agA`+{@5Aoc+`zD{;QK|2NVWalp!Bh9xb-N2zn{NsPhX-&ezMm@f^
zih_ds(TDSIu}o5tCfx0|ncl34KHyitqux^$e0u~C4Z}+P?LL1bOK}-^_Di)Gf@^%8
zP3pI$E4T3w>@ggBmZw0;f;_LGbX;2v`(tK2|1a<q!JU0gcX<=z&l2IZyW4!<8!+i)
zVMJmj5801aOyoPB^x-o1SwL<zxA#Wb^V`$xt^fHdNWc#2Nud0uAfv4T_Guj3Kjf0|
z0i#29j@iOCRg&!f82GALwgF##jj@_zf!M3~Q#E5?-=kC8{J7zBe{bfDFJN-U3?GhG
z5w{erHjOa$HU!SQl4rcMhny-R{xV_zZ<ZNu#qzXyIQhDt1*j&LNf-azRgC2_0_9sw
z*Z6n6TYp;Nql9C~TOS4V^Z_186!bPqsq9+b$h#W>DzpkW&Us}0w>$g9MK4FJoj9i&
z=N1h0jg8uU1uFt$ID}KQS4y24ndBxo7+L`%Q%mU=6zmu<BWCw_mUyShYdOV51J!iD
z27BVF>g4h2?e@A4`=4d1VO;5<z#mCy^62ChNdnx710br(o-%OW0KW`uIPW;CqR^f7
zE%l){|KN15$z}a!@&|5XIq37*hxkM_5D&u`<qt6RwZ{QL^<@=C2(qGDh@aQNPKkPB
zYvbNyo8`BL%S9c4dTb{Z&X?pfE|G?U;~S>#zE6<(JwbQ&q0r~Hv8IsY#kT_MkxX2<
zWcq;jQsLU_giWPjDdiQTMMg=8@Yi-eu<Z}7BI6c?k7G)<B(I94EA5YK^ZQqyO+TbN
z`ZfS+mtP3Y$@JDgRyrUI?4rUE1%1X%%5TKTrunn}-3EM(m<4a{ZrDCTp8mp>siI#<
zVGxe$x>-ufcrV^*55q_{CO-{n6+?bk=kc>;Sjln3t;RHXHEPEmN+&<vlW=>`494Hu
zmAnQQ3*GprmPadIX%~}K{X|Q2DSSPh3L<PbjN)aZ7kI~!w8O{wfl)}-lc}bJ<=_&P
z#u}u1EaVn1xYNrU&?MYDwCdZxU8rp{)55C(Jc(kvaF<T8-(o1J>u<bd!*DB@m>B<3
zjO(MlaqFhNlhugl8VRcgz=VO|wbj_JnFyOcP|a1%@E4Za>8KBMmwm1!TE6MhzKRwD
zL$}^XrJ?7EL!%CzZjy#QVxBuaUHc%kkmKyvgcWD=GT^i7mPsWsnENvPPSb3z{mAW7
z8YgVz0{N8Y=H1+`jth^ti)*ZIJs0s;nE5&%^A$d3FfFtdlTzSW632Yd2$*-wLX+Xu
z%jd1c0+49141S}%pDc4ZQ_UmwFIo9&m92?%A=#c$ECx`zJiPYl6agsq7NZpOz897Y
z)WN~t+J1U^Xs;<M{=q9^-XQUwB*n2@Em1vLxdAHPmMfBV&@)WJ{shGFW*4un{;;k6
zR86`x%IIJox#NkvSEnPgX{Br>wOFp@#OBl_E{rPd^vb@qlzini2cC@Gz0&wUl_M_D
z21wBC;soWVWQ+_i$~rG}3tdl&XPkEJ|I~5i;ZXMP-jXG2vP@;IpC!8@L?}{;Hj+2X
zsD$jhc^F$5y-ZTXgyK!vV@kHn!!XF6$PzMUY-5QT27|GjXL|oR=Q`)iT-Q9`<@5b~
z@B4G#_xG8(p6i-~M8;y}b+_E1(Rw>Fp}v_?`&5U>H5R>RwgSHt>*Y3?4_MrM1@szI
z<woYM3P!S`jDkj&LejG-x0imV9v97dDcL$yeBE3!m|xExvtFn|^k^pGSEM^1yB#Y$
zoe3zz4@)T$(IfUb75cy7TSuARVZ!s1sYR34wc4_aDm{w>xEG1sT+#+z+v|5)v(Hqo
z<~?TUM4})M6xi=i?(U{+eQ?W3_~ILKYrEJ?ATclhdI-bQp&l4putgMnFzJboOJbP0
z@XK!3KQdPuk~pd?$`T6FHRO(J*G1RGIdM=`C|!1-R3U^Bs}Y{)TG05$qK4s>B2&BC
z%Cr{1-C(?kZR~=Ao!Y3ik`tLV*uJ(>hkN{f25C1_e9u95XfGnN?;oz5gP#^L6Ze=a
zhAz7=-X=2qn-|CL_9q8sefn&`+L8m>GV+dOTARq}^6vG#|9I4#Ur;Z(<y~kX?mhW5
zr%gx$;2zQoPiZMFIU_GpYi;-L4a>)-dy{30T-1k|zcwyb7=#2&tqN7Qd^hjw$Ds$`
z=*Pb+?GaO&TG#O3tt*MHK{GfjC2>)I0vDfHlLG^PxbD~0<dv#kb-cXqbN8v%_)xA=
z)vnOrh((jve}7w<aA(EO{}o`e^g1{<^>}JI$@XM9zRJ`^l-l(JWY3W!o`7me^WXtd
zs=2O1+Wd$13X_H1=j0%-Uxyz`r#M^w=3Vx65&T#vI$XB9x8G)HQP=0n2?ozt*f87X
z{;;1sNsQh_o}zcSWm-9?Zgj7%Si|Rub80iX%AR+IC0aak?k3tF#Rl|@F%4h%tG{4;
zG<h07dw*quFZbskSK=QhGR~`)bU)lAw8m13f+)l_-veJB4UQRatLW!SRC;LP6p(dZ
zr`)qk#`?56!@Ohe$~%tuvI<TB%JD|U5dlQ4X-l~F-3?8@l0I2#BE6_RWGa2^%9Wll
z7V1!ZBFsWUc{tzUGd|+#vcky1uPeO+NV-OCQj*%Se`F6zLnwsFAw{CVD?I@NvE(n!
zlC&Rm-!b3Y)SB7){<UnK#{2R*P%;yZF1!LFJM0U(+NQTJ)z*&?d;%^c8hE4#F7Z7W
z{ES;Gq!jkd+7?ztk;fuEVs6Q|uudu&IWa1R6N6ai>0axJ4OHc{d$UE8ScE@6cRnLY
ztf(G|xZC?Fwyq$Ges?W@_8vYLN(@1s`;+Q7Bic&s)Y<mh-4NY|5B%NZ=NGOHe3!jU
zXy3zvKC&#|<m0J8X<D|fs!NoeZAxhA*S#N;l(4ibbCr>=pyFHIXl0J=ZT)4mGSt44
zZIjpC`7>jD+wjGA%_wC`rRU`Cro+9HM9-U$l_rc{%=TfwklEfPyy(=G+B43b9=2js
znAqEYSVXfei@do2rQ^JZ@Mx0Q&+q+9UeH%`uYFs2t8Pr-4*ihdF2thw7BG`1ju>us
zAN?LCGB*1-rf}|3y$zn&dSbMIk^g#jK}JvvI{3s0Erz|br?t7N#y?lNSmFWLd6dNO
zjJS6=MyZE$l5?j8k5Ce%0@wXXl$N;i)fq2r<C;5OU@s~dn#{at`UFb7X0ulSrBRfU
z!Av!x|Ar;M5<ac_kMP>v1~%`v<zJ#5cdWnNmw#;oiunP&qSPIwkMWzgqYQ$LYmqTm
z^*+s&t9mU&>nF!MA17iQL1C6zGK3ZfJ*r*O0Q<GcZvwx?Z%h_D5B1AlHnolzjIlYb
z3<=H~Ke=m-2R<{NKfI8!mlHE8^m}*&8)UnP2{hiE=&%S#V3oDsK}EP(=nm=TwPSKu
zoK!xW?UT+OUKSo#3d`PeNn!zb6ya^AQOodTLw%WZQk0p+L(f9&PGR|jw|9&7P4OAq
zmd^s-OPAF~I_}hg!xeGP7gnsnX~CuzufK{AgU?=}-cGBCt@=>ojm_{H>CACXwYjB>
zT-O7hvxG5y1;FU2?l9NyPfC{~Z=>g92eospZpTVIi@o2ccA~5wD{Q%eJ(1!jNm)DI
zYPrH4tF@xRCcp3zxk3CGPD@EA$e9mBMc7sj6>i6UuHEb23(}+ttto%AhQvGxiJ5nO
z4*{k>Nj)acccjYR<Rn$rd1f@(N0P;rptUm87@bq2Z+AIlVL@*xZf#oL*J~>}beYr|
zAel6!@BOe>{y;))p-iNp*e(~c^K5>-q{OQ1ZI7d}jyJr2?&JDvQyvYtca0=$dN3GH
z+8N^bMV=SZ+%yjOOSc%zXeus|8(`PGs?ccZw6`5mtKv4ygGBZ2xWoCoIpK}jfAP|+
z$0h)QuxWh(Ob!ni1Irg7<!jvFd?2I^!wE4Q_x392F)&)54hJ}36JsBIt&g}$zXhl^
z@&nW(93W;GT@P2vLu^tC&9=?SJ_f9D2@ddpvMXk-8(WWC%%pXCT=3GE)jmiU0Ydza
zu>c~_Lc_I)_MnN12%x}l2}P})Gh(ObXO(Lgux#kyr5V#nE3|-nov$<p9@gm=a6+Sr
z&?rUh{?~IhzuZk{(LWy#4{;I?kkr|z3>i|S6J=hHlUSl#%}twZ!A0=W%IRudpMSxd
zjfibEr<I}2CFw*FTIUlx*~Wf`G|4IG?^9kd_AT<=?j3osPJ4f-6o^60H>T3qsJ@61
zr{5v<%sx0!*gItWD7er_!W6MZP0GxTXFMv}j_%?IR-8CFK&x|vZbL8gm|IPsF~_26
zyKa1o5HX?FEr^oDg{khfFYRLxQO+-|<6N7^XNHm{D2$fw6oNy@SFCXf^8gSqZ61Tb
zjg5Ng;fK@nPKT(!i(bC`*T-CSL#iGhwOIGUHDLhNjAXM~<pkr)akxi4%YEBj3*$B9
zyb6)Iiv1{kZ#VQecb(kiCZxB(nOt}y?&hW~ypdTEQF@dXSk#|o{;KYSv77`t%&swF
zy2as4)zRW*HtanhJpnX12{LDx9^ByZ+IQc#58>bgkL*2=#X#QdQGogNsjZ%giCiPI
z$Mw0Le++_o&F2Gd+bAFV-NUc9b%}|rnB{LBKvdl~*#8oJB?h+Nl)y%<f;l}xif{D4
z+_&=5-L@J!$AcC9QtIapqw!sdz8(iZ0O*Y+*T<gu!H>?ggwX@Uw4HUAI-0tENJf!q
zZN@SragjN3Nm58-ovD94u4`;8;>6qzuR*l*MB1tSp&ayyRZK_GR-03!DgnNROx-nb
z8l_1bP(6dvC^Jbv2iPE8Z)MaCY^ZdZj_!Q&nFyBHwGk{2Z@|UaT}0h62``i{9e8-d
zqPbL8kMc{J7Kp(6`z=V{qEo7UQZloOaJwKs@ZxESP3n4#o<E{4@2QgaUJn8JZQyo~
zS;GVu$jbvS;Q&PtqEBkPeEib0O7zO<GEkjK0kTokT%dE;$H8Q;FnV-N`K6UDXZl|1
zF(_x(3vY9R<S@icxybmP06EtlM44*nbeX41)~*=`i;~*T58y8uxxlPewl?+YolEq5
zBiddwQTn&yv*`dSOnA3v{@=$`{XX(Mdm-DjUw`85DK<UX)Wd~K#%d@9E4k|5$LYUB
z>$KhkJm@@t^LE5*KDlx>V0#Wz;nH<@W=v!M0Axj+o%3~f^6s$zW?S!#4eiCx6Z>zO
z+FMwMXp3OA>*9qV*%_+w$^NW{on?Y$+ppi0dHM=NA#lFVv433cS%vAMW4#vpA0ihI
z2KkJxNXN@3g4Y+I69nmUcBg>O?swVpMCRnj3#`LNqikM{3zSCKNibQg@8242#nhmC
z@*FjdNnGF&uuK`6^_IB2Wy*Ts1&oQ3mf&a*7f9zImN%j|dngDg_-m?L{d;Kj16s90
z<JhOrTNhS%A*}_78Pl9ZjWeRR0#s$8zN5XDdGSHogXPXik$<_{c|a!**yR%VrGHod
zBSs6&dz<PsVwo4K#|F888S)gS5u?&BUd%@~x0rBJud1<Yl3Gb+I0(sjWEc4}`-xr=
zBUvm4cAwTM)rg!z_2r8<<32FnG{?Zm{aM{SV6G0?%oD6|eo&2mw^}dnv2x4oFM5|I
zyC#8@&Q476Ir6!1z`s}bvysZM+S9AzRO`jPhC{^jptvy`ym72E95maC(aUWU3h=BH
zG@QQGp@=*DTX87*br9l=TI*Z3KaQ0`_C)y-E5i_)+Y)IvJIbYSt+a&6?|jhgYn?~A
zU<||1aLr0k5l=wvDFxhid}aS^(qx$9_=2$)8^{}Hmr*SQ9R+c_p7tHmLWv>NzxV(<
z)9OFzP_tprtw{>mZ>!MQJz=<BhC|V~O$SWE{y4Bz77L@*d3|kA^RuSu6LXFc)7$N<
z1>ue8*Dn!ex=sAR6NK7CMrX~<hL}7y;(6Y6DEo_w0m>@7Ul2{@SGrI62>5B$6*EE_
zJjJ54h*KLB)+E{1dilMt9qy7W%s31`3#?l~j9P$elqD3nG-Kw-y;H7FYTF)8;3H5z
z57Qqrj*C$p*da`l1H!`)!Yp?<84xUUBDZG6`>>&RlmX0SE*C4o;1zXV&|L!&9*nS3
z0z86WVr=H!`ifzT4Fcffb_N@ilH7hh`DGB+R~s?Wv?w#P-Vpq=QQbUxM)=r*u{TRD
zy;5;V*l)y9lRhMnxOoB2Ow>4OEUlyON^(j};VOF!qn#l3?dU=&>tXP5IH<G9671!c
zak9>9NK=cmlc6o7K?nh&jazfq@b1$4L&U;s`)#juFionG{ixQqCI@cf`3U<Xm8=J~
zQpAynIC990^X3!>Fyp*ErASV9G7j54O`9Dr+wz4F{vJ!WJy$2wh4YWnZjg=OW1~bd
zFmN@Y{xFUE?McsdmQ&Y{dG_cXfh((jzAQ@)F;YY}C<8O1&`)OYTW-IT`YH!JzA0Pv
z%n>50=OK{?$j$WD!k+@tP9|9hQm@pN&R4Rt40gQa?ASH^W|lPmaQWH%S5m${Upmbo
z@unE}p8^_s<);N!9?=@vFaiseQmK^SAX-A7=|OC;-8(3i$QQsbRtcD#4Xcf2qb6jy
z>C||<uP{981qVD@sk74iFysr+M!%MTnccM-A&U@y_zjtr;5*!++j<F$>x^Cvr`y<_
zmGT@*Z;0&uaXU{P5WnFQ-6Q0)VO4!xdb}f=Un72a#<{k*tS|?cby<^Segymy@s8Z{
zEtKwKaalC<k-Y$RCzM%2N)M_DE@fl+6n<6k38wnDi%oxj+Bu>=Cv|_sA@mGw^-b+Z
ze@Hr!Wrb3OcjWZZnF=FMaWGDWB>m>+AU>Rx{yms1A<eK2lku4WF;K>^vM6{(<)<x{
z_=k6)+2#0U>Ws8n(J26C@<#d&2wcY9bhN1zV8ebrq<2ELcWQ<+qbfRYmXu$1Zm!68
zW#jt7LKQ19;O6-8Y$45LhSgB6O&YBq&`~P!UrER-$@n9p?Z)=@_R<*jQnO`{GIjiU
z77F8-#|Oh|s;C|SkD20ka{|r6BaGJk-jVakS*NN4iah|=bakS<*kC0eo8NfTFTV+*
zeE4+10YF$CJT<>$v2`PGR~3eJxeLac5eH8<wpJZ8WBAQA$V`1*;{{x|$wvDsWD#88
z%GHRl!@30;B=e-@neRQ})3XC|U<^jEnn>~atwO4ja+WzeXYzmzypp)=rQv%sMG=Y{
z4+S@MJ4jd6W?u!Ec^vnj`N3X@z%y7-3Or3Gg<Q7Etp6t*=Tf4AG{~INw<t<>YAoe-
zuRB`j2Aw08i`LVFlI{w}y0Iv`*|iUE5)2XSn%2Q}&$$8Fo;XDFfRRnlHJ^e`nOh3z
z8jAk2R<q-4CI_WyIi_EVy_PNFy3YY^oCTgHZ|fXB@KEps##vi-zYP2j69l`Tv6L1Y
z+=ZOK6&%zs|2$YH6Q+c}fT9`Hzj*Eu*=$Hkzu;sG{$Ph^B4>k;%B1w&aia8x>SXf(
zDeif=oAP(iym3w>i_k6FeFr`1TVOe*W`)tnqR32~e0<_{LEbluC1&LDuHS@|=82?K
z`o<w0ZC<LXngD@0e~HkgN|sKDI0p`m<19sqCF|q2d9mo4ewu`t4C6k%oYsHlhbc-D
zOXH(H-~ZJXVh2d$2&y0fxjHd!T!|xOtKkTXXW`^=DZ+*mIenba4oy0AGDFA3;ej>X
z<!QsY0{ql*vlcpp8x2_vHyqI>N4^Cya}afI2Q<$FP&GgC9XwtHOTGH@VY`d65ZME6
zIJxTd2Wwjds-~PKA$;5{j%I)u2i>g*4lV#XvirLnIOH_rw5fB@uL{DOCUBDno#vg~
z>;P3kzfVjJP?()84j*?CnQ%BGPH+eS^iJ_$X$u;b1P2cQJ)SQFCo3%ahLC$0=PbMk
zxGw`us$iv!PrP2_?O!8pw&eOTr#X^1JgeA%z`Psio;&OW-cX{FebvdW5ORJ(nDHxm
zQ?-oO?-RaV8-z@^y#m<mts>SNrYm(poULUX?SaQ3qQadg2+@x^ynd@zoRDnjvinLP
z!OQdS|9}J>uBBfNto+ey3ZM}51ZaWA(J&D>Sv{2LYyzM#4R7Fakm`H{bebIijj!K>
zx=<W6zhobR$J+reRiXqmjnD5xL*}2p+06BD6pSoReAKTB@?vS179HlrSrb0>EAg!H
zzs{aTvH<WjvvXu~0Hp^X`x{F;0TLw3sFi=V5X@-(b4|tsO_X41Uq#{MeCmK5Fm(`1
zv-Wk~5-0jYPE@X{g4BxuYIxmYTNONH2HgFHPo~Av8bo3K3S7QfCc!cH2wh!)6U0Zc
z*#+};<x9+$Kjgr85%`_<`A<zwLG|LkNjBb;(Wo0hq9XX=MHk}RZUi6V+6od={l0q1
z<|>*9Hvr|p1MOepYok8|C<lza(YaBe`0=9+y(nATaH8_8u(G<1DtJ*8&M}=jWj%G*
zIVqyQCu?ibJpU~vB*-p%`IaH2D!OxDEw}3f?T#fR=T3w?#q|Vpzy#?T@*-nawnvo%
zIRaT7%TfUSe>DD|VOFE!zx4>f&cTU>97ZoT7E6gVZ14n!XoLXdoAZ#6hv0uA^FJE#
zuzwpw4l)<?hT;H&E~pE@K}Ar@7c2T+RZvraV5vn$f%RAY#o!Tj+@CIyTif{w`~-A9
z*}fTF#x4bIod)Z-eFCdC;m+VDw|4Mb0H0P(i*5k{tASktf&}y`;UpNMr5m%%r`d^S
zeeknCvjDz`yj#t~5iE6PTEEGG7bR={!BHjPFJavR1oRj7ukzp(O}(q3DA+v8B_b4s
zIp17dKZ#yQcmn&nvMCu8pf*@04{A-XeY<x>iGZF6BZ<NP*B|Nbv)fCBPrJCy8L&Yw
N3-jw2%T4da{ujHUvwr{p
deleted file mode 100644
--- a/browser/extensions/screenshots/install.rdf
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<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>screenshots@mozilla.org</em:id>
-    <em:name>Firefox Screenshots</em:name>
-    <em:targetApplication>
-      <Description>
-        <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id> <!--Firefox-->
-        <em:minVersion>57.0a1</em:minVersion>
-        <em:maxVersion>*</em:maxVersion>
-      </Description>
-    </em:targetApplication>
-    <em:type>2</em:type>
-    <em:version>33.0.0</em:version>
-    <em:bootstrap>true</em:bootstrap>
-    <em:homepageURL>https://screenshots.firefox.com/</em:homepageURL>
-    <em:multiprocessCompatible>true</em:multiprocessCompatible>
-  </Description>
-</RDF>
rename from browser/extensions/screenshots/webextension/log.js
rename to browser/extensions/screenshots/log.js
rename from browser/extensions/screenshots/webextension/makeUuid.js
rename to browser/extensions/screenshots/makeUuid.js
rename from browser/extensions/screenshots/webextension/manifest.json
rename to browser/extensions/screenshots/manifest.json
--- a/browser/extensions/screenshots/webextension/manifest.json
+++ b/browser/extensions/screenshots/manifest.json
@@ -1,12 +1,12 @@
 {
   "manifest_version": 2,
   "name": "Firefox Screenshots",
-  "version": "33.0.0",
+  "version": "35.0.0",
   "description": "__MSG_addonDescription__",
   "author": "__MSG_addonAuthorsList__",
   "homepage_url": "https://github.com/mozilla-services/screenshots",
   "applications": {
     "gecko": {
       "id": "screenshots@mozilla.org",
       "strict_min_version": "57.0a1"
     }
@@ -54,26 +54,38 @@
     "icons/menu-fullpage.svg",
     "icons/menu-visible.svg",
     "icons/menu-myshot.svg",
     "icons/onboarding-1.png",
     "icons/onboarding-2.png",
     "icons/onboarding-3.png",
     "icons/onboarding-4.png",
     "icons/onboarding-5.png",
+    "icons/onboarding-6.png",
     "icons/done.svg",
     "icons/icon-welcome-face-without-eyes.svg"
   ],
   "permissions": [
     "activeTab",
     "downloads",
     "tabs",
     "storage",
     "notifications",
     "clipboardWrite",
     "contextMenus",
     "mozillaAddons",
+    "telemetry",
     "<all_urls>",
     "https://screenshots.firefox.com/",
     "resource://pdf.js/",
     "about:reader*"
-  ]
+  ],
+  "experiment_apis": {
+    "screenshots": {
+      "schema": "experiments/screenshots/schema.json",
+      "parent": {
+        "scopes": ["addon_parent"],
+        "script": "experiments/screenshots/api.js",
+        "paths": [["experiments", "screenshots"]]
+      }
+    }
+  }
 }
--- a/browser/extensions/screenshots/moz.build
+++ b/browser/extensions/screenshots/moz.build
@@ -1,457 +1,473 @@
 # -*- 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/.
 
 with Files("**"):
-    BUG_COMPONENT = ("Cloud Services", "Screenshots")
-
-FINAL_TARGET_FILES.features['screenshots@mozilla.org'] += [
-  'bootstrap.js',
-  'install.rdf'
-]
+    BUG_COMPONENT = ("Firefox", "Screenshots")
 
 # This file list is automatically generated by Screenshots' export scripts.
 # AUTOMATIC INSERTION START
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"] += [
-  'webextension/assertIsBlankDocument.js',
-  'webextension/assertIsTrusted.js',
-  'webextension/blank.html',
-  'webextension/blobConverters.js',
-  'webextension/catcher.js',
-  'webextension/clipboard.js',
-  'webextension/domainFromUrl.js',
-  'webextension/log.js',
-  'webextension/makeUuid.js',
-  'webextension/manifest.json',
-  'webextension/randomString.js',
-  'webextension/sitehelper.js'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org'] += [
+  'assertIsBlankDocument.js',
+  'assertIsTrusted.js',
+  'blank.html',
+  'blobConverters.js',
+  'catcher.js',
+  'clipboard.js',
+  'domainFromUrl.js',
+  'log.js',
+  'makeUuid.js',
+  'manifest.json',
+  'moz.build',
+  'randomString.js',
+  'sitehelper.js'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["ach"] += [
-  'webextension/_locales/ach/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["ach"] += [
+  '_locales/ach/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["ar"] += [
-  'webextension/_locales/ar/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["ar"] += [
+  '_locales/ar/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["ast"] += [
-  'webextension/_locales/ast/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["ast"] += [
+  '_locales/ast/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["az"] += [
-  'webextension/_locales/az/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["az"] += [
+  '_locales/az/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["be"] += [
-  'webextension/_locales/be/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["be"] += [
+  '_locales/be/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["bg"] += [
-  'webextension/_locales/bg/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["bg"] += [
+  '_locales/bg/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["bn_BD"] += [
-  'webextension/_locales/bn_BD/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["bn_BD"] += [
+  '_locales/bn_BD/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["br"] += [
-  'webextension/_locales/br/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["br"] += [
+  '_locales/br/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["bs"] += [
-  'webextension/_locales/bs/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["bs"] += [
+  '_locales/bs/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["ca"] += [
-  'webextension/_locales/ca/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["ca"] += [
+  '_locales/ca/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["cak"] += [
-  'webextension/_locales/cak/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["cak"] += [
+  '_locales/cak/messages.json'
+]
+
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["crh"] += [
+  '_locales/crh/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["crh"] += [
-  'webextension/_locales/crh/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["cs"] += [
+  '_locales/cs/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["cs"] += [
-  'webextension/_locales/cs/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["cy"] += [
+  '_locales/cy/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["cy"] += [
-  'webextension/_locales/cy/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["da"] += [
+  '_locales/da/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["da"] += [
-  'webextension/_locales/da/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["de"] += [
+  '_locales/de/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["de"] += [
-  'webextension/_locales/de/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["dsb"] += [
+  '_locales/dsb/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["dsb"] += [
-  'webextension/_locales/dsb/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["el"] += [
+  '_locales/el/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["el"] += [
-  'webextension/_locales/el/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["en_CA"] += [
+  '_locales/en_CA/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["en_GB"] += [
-  'webextension/_locales/en_GB/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["en_GB"] += [
+  '_locales/en_GB/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["en_US"] += [
-  'webextension/_locales/en_US/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["en_US"] += [
+  '_locales/en_US/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["eo"] += [
-  'webextension/_locales/eo/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["eo"] += [
+  '_locales/eo/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["es_AR"] += [
-  'webextension/_locales/es_AR/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["es_AR"] += [
+  '_locales/es_AR/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["es_CL"] += [
-  'webextension/_locales/es_CL/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["es_CL"] += [
+  '_locales/es_CL/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["es_ES"] += [
-  'webextension/_locales/es_ES/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["es_ES"] += [
+  '_locales/es_ES/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["es_MX"] += [
-  'webextension/_locales/es_MX/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["es_MX"] += [
+  '_locales/es_MX/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["et"] += [
-  'webextension/_locales/et/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["et"] += [
+  '_locales/et/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["eu"] += [
-  'webextension/_locales/eu/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["eu"] += [
+  '_locales/eu/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["fa"] += [
-  'webextension/_locales/fa/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["fa"] += [
+  '_locales/fa/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["ff"] += [
-  'webextension/_locales/ff/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["ff"] += [
+  '_locales/ff/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["fi"] += [
-  'webextension/_locales/fi/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["fi"] += [
+  '_locales/fi/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["fr"] += [
-  'webextension/_locales/fr/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["fr"] += [
+  '_locales/fr/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["fy_NL"] += [
-  'webextension/_locales/fy_NL/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["fy_NL"] += [
+  '_locales/fy_NL/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["ga_IE"] += [
-  'webextension/_locales/ga_IE/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["ga_IE"] += [
+  '_locales/ga_IE/messages.json'
+]
+
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["gd"] += [
+  '_locales/gd/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["gd"] += [
-  'webextension/_locales/gd/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["gl"] += [
+  '_locales/gl/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["gl"] += [
-  'webextension/_locales/gl/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["gn"] += [
+  '_locales/gn/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["gn"] += [
-  'webextension/_locales/gn/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["gu_IN"] += [
+  '_locales/gu_IN/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["gu_IN"] += [
-  'webextension/_locales/gu_IN/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["he"] += [
+  '_locales/he/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["he"] += [
-  'webextension/_locales/he/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["hi_IN"] += [
+  '_locales/hi_IN/messages.json'
+]
+
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["hr"] += [
+  '_locales/hr/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["hi_IN"] += [
-  'webextension/_locales/hi_IN/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["hsb"] += [
+  '_locales/hsb/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["hr"] += [
-  'webextension/_locales/hr/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["hu"] += [
+  '_locales/hu/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["hsb"] += [
-  'webextension/_locales/hsb/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["hy_AM"] += [
+  '_locales/hy_AM/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["hu"] += [
-  'webextension/_locales/hu/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["ia"] += [
+  '_locales/ia/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["hy_AM"] += [
-  'webextension/_locales/hy_AM/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["id"] += [
+  '_locales/id/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["ia"] += [
-  'webextension/_locales/ia/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["it"] += [
+  '_locales/it/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["id"] += [
-  'webextension/_locales/id/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["ja"] += [
+  '_locales/ja/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["it"] += [
-  'webextension/_locales/it/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["ka"] += [
+  '_locales/ka/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["ja"] += [
-  'webextension/_locales/ja/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["kab"] += [
+  '_locales/kab/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["ka"] += [
-  'webextension/_locales/ka/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["kk"] += [
+  '_locales/kk/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["kab"] += [
-  'webextension/_locales/kab/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["km"] += [
+  '_locales/km/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["kk"] += [
-  'webextension/_locales/kk/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["kn"] += [
+  '_locales/kn/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["km"] += [
-  'webextension/_locales/km/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["ko"] += [
+  '_locales/ko/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["kn"] += [
-  'webextension/_locales/kn/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["lij"] += [
+  '_locales/lij/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["ko"] += [
-  'webextension/_locales/ko/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["lo"] += [
+  '_locales/lo/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["lij"] += [
-  'webextension/_locales/lij/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["lt"] += [
+  '_locales/lt/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["lo"] += [
-  'webextension/_locales/lo/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["mai"] += [
+  '_locales/mai/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["lt"] += [
-  'webextension/_locales/lt/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["mk"] += [
+  '_locales/mk/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["mai"] += [
-  'webextension/_locales/mai/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["ml"] += [
+  '_locales/ml/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["mk"] += [
-  'webextension/_locales/mk/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["mn"] += [
+  '_locales/mn/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["ml"] += [
-  'webextension/_locales/ml/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["mr"] += [
+  '_locales/mr/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["mn"] += [
-  'webextension/_locales/mn/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["ms"] += [
+  '_locales/ms/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["mr"] += [
-  'webextension/_locales/mr/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["my"] += [
+  '_locales/my/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["ms"] += [
-  'webextension/_locales/ms/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["nb_NO"] += [
+  '_locales/nb_NO/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["my"] += [
-  'webextension/_locales/my/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["ne_NP"] += [
+  '_locales/ne_NP/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["nb_NO"] += [
-  'webextension/_locales/nb_NO/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["nl"] += [
+  '_locales/nl/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["ne_NP"] += [
-  'webextension/_locales/ne_NP/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["nn_NO"] += [
+  '_locales/nn_NO/messages.json'
+]
+
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["pa_IN"] += [
+  '_locales/pa_IN/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["nl"] += [
-  'webextension/_locales/nl/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["pl"] += [
+  '_locales/pl/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["nn_NO"] += [
-  'webextension/_locales/nn_NO/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["pt_BR"] += [
+  '_locales/pt_BR/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["pa_IN"] += [
-  'webextension/_locales/pa_IN/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["pt_PT"] += [
+  '_locales/pt_PT/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["pl"] += [
-  'webextension/_locales/pl/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["rm"] += [
+  '_locales/rm/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["pt_BR"] += [
-  'webextension/_locales/pt_BR/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["ro"] += [
+  '_locales/ro/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["pt_PT"] += [
-  'webextension/_locales/pt_PT/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["ru"] += [
+  '_locales/ru/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["rm"] += [
-  'webextension/_locales/rm/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["si"] += [
+  '_locales/si/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["ro"] += [
-  'webextension/_locales/ro/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["sk"] += [
+  '_locales/sk/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["ru"] += [
-  'webextension/_locales/ru/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["sl"] += [
+  '_locales/sl/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["sk"] += [
-  'webextension/_locales/sk/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["sq"] += [
+  '_locales/sq/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["sl"] += [
-  'webextension/_locales/sl/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["sr"] += [
+  '_locales/sr/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["sq"] += [
-  'webextension/_locales/sq/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["sv_SE"] += [
+  '_locales/sv_SE/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["sr"] += [
-  'webextension/_locales/sr/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["ta"] += [
+  '_locales/ta/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["sv_SE"] += [
-  'webextension/_locales/sv_SE/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["te"] += [
+  '_locales/te/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["ta"] += [
-  'webextension/_locales/ta/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["th"] += [
+  '_locales/th/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["te"] += [
-  'webextension/_locales/te/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["tl"] += [
+  '_locales/tl/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["th"] += [
-  'webextension/_locales/th/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["tr"] += [
+  '_locales/tr/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["tl"] += [
-  'webextension/_locales/tl/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["uk"] += [
+  '_locales/uk/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["tr"] += [
-  'webextension/_locales/tr/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["ur"] += [
+  '_locales/ur/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["uk"] += [
-  'webextension/_locales/uk/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["uz"] += [
+  '_locales/uz/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["ur"] += [
-  'webextension/_locales/ur/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["vi"] += [
+  '_locales/vi/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["uz"] += [
-  'webextension/_locales/uz/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["zh_CN"] += [
+  '_locales/zh_CN/messages.json'
+]
+
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["_locales"]["zh_TW"] += [
+  '_locales/zh_TW/messages.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["vi"] += [
-  'webextension/_locales/vi/messages.json'
-]
-
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["zh_CN"] += [
-  'webextension/_locales/zh_CN/messages.json'
-]
-
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["_locales"]["zh_TW"] += [
-  'webextension/_locales/zh_TW/messages.json'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["background"] += [
+  'background/analytics.js',
+  'background/auth.js',
+  'background/communication.js',
+  'background/deviceInfo.js',
+  'background/main.js',
+  'background/selectorLoader.js',
+  'background/senderror.js',
+  'background/startBackground.js',
+  'background/takeshot.js'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["background"] += [
-  'webextension/background/analytics.js',
-  'webextension/background/auth.js',
-  'webextension/background/communication.js',
-  'webextension/background/deviceInfo.js',
-  'webextension/background/main.js',
-  'webextension/background/selectorLoader.js',
-  'webextension/background/senderror.js',
-  'webextension/background/startBackground.js',
-  'webextension/background/takeshot.js'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["build"] += [
+  'build/buildSettings.js',
+  'build/inlineSelectionCss.js',
+  'build/onboardingCss.js',
+  'build/onboardingHtml.js',
+  'build/raven.js',
+  'build/selection.js',
+  'build/shot.js',
+  'build/thumbnailGenerator.js'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["build"] += [
-  'webextension/build/buildSettings.js',
-  'webextension/build/inlineSelectionCss.js',
-  'webextension/build/onboardingCss.js',
-  'webextension/build/onboardingHtml.js',
-  'webextension/build/raven.js',
-  'webextension/build/selection.js',
-  'webextension/build/shot.js',
-  'webextension/build/thumbnailGenerator.js'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["experiments"]["screenshots"] += [
+  'experiments/screenshots/api.js',
+  'experiments/screenshots/schema.json'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["icons"] += [
-  'webextension/icons/back-highlight.svg',
-  'webextension/icons/back.svg',
-  'webextension/icons/cancel.svg',
-  'webextension/icons/cloud.svg',
-  'webextension/icons/copied-notification.svg',
-  'webextension/icons/copy.svg',
-  'webextension/icons/done.svg',
-  'webextension/icons/download.svg',
-  'webextension/icons/help-16.svg',
-  'webextension/icons/icon-highlight-32-v2.svg',
-  'webextension/icons/icon-v2.svg',
-  'webextension/icons/icon-welcome-face-without-eyes.svg',
-  'webextension/icons/menu-fullpage.svg',
-  'webextension/icons/menu-myshot-white.svg',
-  'webextension/icons/menu-myshot.svg',
-  'webextension/icons/menu-visible.svg',
-  'webextension/icons/onboarding-1.png',
-  'webextension/icons/onboarding-2.png',
-  'webextension/icons/onboarding-3.png',
-  'webextension/icons/onboarding-4.png',
-  'webextension/icons/onboarding-5.png'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["icons"] += [
+  'icons/back-highlight.svg',
+  'icons/back.svg',
+  'icons/cancel.svg',
+  'icons/cloud.svg',
+  'icons/copied-notification.svg',
+  'icons/copy.svg',
+  'icons/done.svg',
+  'icons/download.svg',
+  'icons/help-16.svg',
+  'icons/icon-highlight-32-v2.svg',
+  'icons/icon-v2.svg',
+  'icons/icon-welcome-face-without-eyes.svg',
+  'icons/menu-fullpage.svg',
+  'icons/menu-myshot-white.svg',
+  'icons/menu-myshot.svg',
+  'icons/menu-visible.svg',
+  'icons/onboarding-1.png',
+  'icons/onboarding-2.png',
+  'icons/onboarding-3.png',
+  'icons/onboarding-4.png',
+  'icons/onboarding-5.png',
+  'icons/onboarding-6.png'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["onboarding"] += [
-  'webextension/onboarding/slides.html',
-  'webextension/onboarding/slides.js'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["onboarding"] += [
+  'onboarding/slides.html',
+  'onboarding/slides.js'
 ]
 
-FINAL_TARGET_FILES.features['screenshots@mozilla.org']["webextension"]["selector"] += [
-  'webextension/selector/callBackground.js',
-  'webextension/selector/documentMetadata.js',
-  'webextension/selector/shooter.js',
-  'webextension/selector/ui.js',
-  'webextension/selector/uicontrol.js',
-  'webextension/selector/util.js'
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["selector"] += [
+  'selector/callBackground.js',
+  'selector/documentMetadata.js',
+  'selector/shooter.js',
+  'selector/ui.js',
+  'selector/uicontrol.js',
+  'selector/util.js'
+]
+
+FINAL_TARGET_FILES.features['screenshots@mozilla.org']["test"]["browser"] += [
+  'test/browser/.eslintrc.yml',
+  'test/browser/browser.ini',
+  'test/browser/browser_screenshots_ui_check.js'
 ]
 
 # AUTOMATIC INSERTION END
 
 BROWSER_CHROME_MANIFESTS += [
     'test/browser/browser.ini'
 ]
rename from browser/extensions/screenshots/webextension/onboarding/slides.html
rename to browser/extensions/screenshots/onboarding/slides.html
--- a/browser/extensions/screenshots/webextension/onboarding/slides.html
+++ b/browser/extensions/screenshots/onboarding/slides.html
@@ -3,17 +3,17 @@
   <head>
     <!-- onboarding.scss is automatically inserted here: -->
     <style></style>
     <!-- Here and in onboarding.scss use MOZ_EXTENSION/path to refer to local files -->
   </head>
   <body>
     <div id="slide-overlay">
       <!-- The current slide is set by having .active-slide-1, .active-slide-2, etc on #slide element: -->
-      <div id="slide-container" data-number-of-slides="5" class="active-slide-1">
+      <div id="slide-container" data-number-of-slides="6" class="active-slide-1">
         <div class="slide slide-1">
           <!-- Note: all images must be listed in manifest.json.template under web_accessible_resources -->
           <div class="slide-image" style="background-image: url('MOZ_EXTENSION/icons/onboarding-1.png');"></div>
           <div class="slide-content">
             <div class="slide-content-aligner">
               <h1><span><strong>Firefox</strong> Screenshots</span><sup>Beta</sup></h1>
               <p data-l10n-id="tourBodyIntro"></p>
             </div>
@@ -43,26 +43,34 @@
         </div>
         <div class="slide slide-5">
           <div class="slide-image" style="background-image: url('MOZ_EXTENSION/icons/onboarding-5.png');"></div>
           <div class="slide-content">
             <h1 data-l10n-id="tourHeaderDownloadUpload"></h1>
             <p data-l10n-id="tourBodyDownloadUpload"></p>
           </div>
         </div>
+        <div class="slide slide-6">
+          <div class="slide-image" style="background-image: url('MOZ_EXTENSION/icons/onboarding-6.png');"></div>
+          <div class="slide-content">
+            <h1 data-l10n-id="tourHeaderAccounts"></h1>
+            <p data-l10n-id="tourBodyAccounts"></p>
+          </div>
+        </div>
 
         <!-- Clickable elements should be buttons for accessibility -->
         <button id="skip" data-l10n-id="tourSkip" tabindex=1>Skip</button>
         <button id="prev" tabindex=2 data-l10n-label-id="tourPrevious"></button>
         <button id="next" tabindex=3 data-l10n-label-id="tourNext"></button>
         <button id="done" tabindex=4 data-l10n-label-id="tourDone"></button>
         <div id="slide-status-container">
           <button class="goto-slide goto-slide-1" data-number="1" tabindex=4></button>
           <button class="goto-slide goto-slide-2" data-number="2" tabindex=5></button>
           <button class="goto-slide goto-slide-3" data-number="3" tabindex=6></button>
           <button class="goto-slide goto-slide-4" data-number="4" tabindex=7></button>
           <button class="goto-slide goto-slide-5" data-number="5" tabindex=8></button>
+          <button class="goto-slide goto-slide-6" data-number="6" tabindex=9></button>
         </div>
         <!-- FIXME: Need to put in privacy / etc links -->
       </div>
     </div>
   </body>
 </html>
rename from browser/extensions/screenshots/webextension/onboarding/slides.js
rename to browser/extensions/screenshots/onboarding/slides.js
--- a/browser/extensions/screenshots/webextension/onboarding/slides.js
+++ b/browser/extensions/screenshots/onboarding/slides.js
@@ -25,16 +25,17 @@ this.slides = (function() {
       iframe.id = "firefox-screenshots-onboarding-iframe";
       iframe.style.zIndex = "99999999999";
       iframe.style.display = "block";
       iframe.style.border = "none";
       iframe.style.position = "fixed";
       iframe.style.top = "0";
       iframe.style.left = "0";
       iframe.style.margin = "0";
+      iframe.style.backgroundColor = "transparent";
       iframe.scrolling = "no";
       updateIframeSize();
       let html = onboardingHtml.replace("<style></style>", `<style>${onboardingCss}</style>`);
       html = html.replace(/MOZ_EXTENSION([^"]+)/g, (match, filename) => {
         return browser.extension.getURL(filename);
       });
       iframe.addEventListener("load", catcher.watchFunction(() => {
         doc = iframe.contentDocument;
rename from browser/extensions/screenshots/webextension/randomString.js
rename to browser/extensions/screenshots/randomString.js
rename from browser/extensions/screenshots/webextension/selector/callBackground.js
rename to browser/extensions/screenshots/selector/callBackground.js
rename from browser/extensions/screenshots/webextension/selector/documentMetadata.js
rename to browser/extensions/screenshots/selector/documentMetadata.js
--- a/browser/extensions/screenshots/webextension/selector/documentMetadata.js
+++ b/browser/extensions/screenshots/selector/documentMetadata.js
@@ -1,19 +1,19 @@
 "use strict";
 
 this.documentMetadata = (function() {
 
   function findSiteName() {
-    let el = document.querySelector("meta[property='og:site_name']");
+    let el = document.querySelector("meta[property~='og:site_name'][content]");
     if (el) {
       return el.getAttribute("content");
     }
     // nytimes.com uses this property:
-    el = document.querySelector("meta[name='cre']");
+    el = document.querySelector("meta[name='cre'][content]");
     if (el) {
       return el.getAttribute("content");
     }
     return null;
   }
 
   function getOpenGraph() {
     const openGraph = {};
@@ -24,17 +24,17 @@ this.documentMetadata = (function() {
     image:secure_url image:type image:width image:height
     video:secure_url video:type video:width image:height
     audio:secure_url audio:type
     article:published_time article:modified_time article:expiration_time article:author article:section article:tag
     book:author book:isbn book:release_date book:tag
     profile:first_name profile:last_name profile:username profile:gender
     `.split(/\s+/g);
     for (const prop of openGraphProperties) {
-      let elems = document.querySelectorAll(`meta[property='og:${prop}']`);
+      let elems = document.querySelectorAll(`meta[property~='og:${prop}'][content]`);
       if (forceSingle.includes(prop) && elems.length > 1) {
         elems = [elems[0]];
       }
       let value;
       if (elems.length > 1) {
         value = [];
         for (const elem of elems) {
           const v = elem.getAttribute("content");
@@ -58,17 +58,17 @@ this.documentMetadata = (function() {
   function getTwitterCard() {
     const twitterCard = {};
     // If you update this, also update _TWITTERCARD_PROPERTIES in shot.js:
     const properties = `
     card site title description image
     player player:width player:height player:stream player:stream:content_type
     `.split(/\s+/g);
     for (const prop of properties) {
-      const elem = document.querySelector(`meta[name='twitter:${prop}']`);
+      const elem = document.querySelector(`meta[name='twitter:${prop}'][content]`);
       if (elem) {
         const value = elem.getAttribute("content");
         if (value) {
           twitterCard[prop] = value;
         }
       }
     }
     return twitterCard;
rename from browser/extensions/screenshots/webextension/selector/shooter.js
rename to browser/extensions/screenshots/selector/shooter.js
--- a/browser/extensions/screenshots/webextension/selector/shooter.js
+++ b/browser/extensions/screenshots/selector/shooter.js
@@ -3,16 +3,17 @@
 
 "use strict";
 
 this.shooter = (function() { // eslint-disable-line no-unused-vars
   const exports = {};
   const { AbstractShot } = shot;
 
   const RANDOM_STRING_LENGTH = 16;
+  const MAX_CANVAS_DIMENSION = 32767;
   let backend;
   let shotObject;
   let supportsDrawWindow;
   const callBackground = global.callBackground;
   const clipboard = global.clipboard;
 
   function regexpEscape(str) {
     // http://stackoverflow.com/questions/3115150/how-to-escape-regular-expression-special-characters-using-javascript
@@ -35,32 +36,47 @@ this.shooter = (function() { // eslint-d
 
   catcher.watchFunction(() => {
     const canvas = document.createElementNS("http://www.w3.org/1999/xhtml", "canvas");
     const ctx = canvas.getContext("2d");
     supportsDrawWindow = !!ctx.drawWindow;
   })();
 
   function captureToCanvas(selectedPos, captureType) {
-    const height = selectedPos.bottom - selectedPos.top;
-    const width = selectedPos.right - selectedPos.left;
+    let height = selectedPos.bottom - selectedPos.top;
+    let width = selectedPos.right - selectedPos.left;
     const canvas = document.createElementNS("http://www.w3.org/1999/xhtml", "canvas");
     const ctx = canvas.getContext("2d");
+
+    // Scale the canvas for high-density displays, except for full-page shots.
     let expand = window.devicePixelRatio !== 1;
     if (captureType === "fullPage" || captureType === "fullPageTruncated") {
       expand = false;
       canvas.width = width;
       canvas.height = height;
     } else {
       canvas.width = width * window.devicePixelRatio;
       canvas.height = height * window.devicePixelRatio;
     }
     if (expand) {
       ctx.scale(window.devicePixelRatio, window.devicePixelRatio);
     }
+
+    // Double-check canvas width and height are within the canvas pixel limit.
+    // If the canvas dimensions are too great, crop the canvas and also crop
+    // the selection by a devicePixelRatio-scaled amount.
+    if (canvas.width > MAX_CANVAS_DIMENSION) {
+      canvas.width = MAX_CANVAS_DIMENSION;
+      width = expand ? Math.floor(canvas.width / window.devicePixelRatio) : canvas.width;
+    }
+    if (canvas.height > MAX_CANVAS_DIMENSION) {
+      canvas.height = MAX_CANVAS_DIMENSION;
+      height = expand ? Math.floor(canvas.height / window.devicePixelRatio) : canvas.height;
+    }
+
     ui.iframe.hide();
     ctx.drawWindow(window, selectedPos.left, selectedPos.top, width, height, "#fff");
     return canvas;
   }
 
   const screenshotPage = exports.screenshotPage = function(selectedPos, captureType) {
     if (!supportsDrawWindow) {
       return null;
rename from browser/extensions/screenshots/webextension/selector/ui.js
rename to browser/extensions/screenshots/selector/ui.js
--- a/browser/extensions/screenshots/webextension/selector/ui.js
+++ b/browser/extensions/screenshots/selector/ui.js
@@ -135,16 +135,18 @@ this.ui = (function() { // eslint-disabl
     document: null,
     display(installHandlerOnDocument) {
       return new Promise((resolve, reject) => {
         if (!this.element) {
           this.element = initializeIframe();
           this.element.id = "firefox-screenshots-selection-iframe";
           this.element.style.display = "none";
           this.element.style.setProperty("position", "absolute", "important");
+          this.element.style.setProperty("background-color", "transparent");
+          this.element.setAttribute("role", "dialog");
           this.updateElementSize();
           this.element.addEventListener("load", watchFunction(() => {
             this.document = this.element.contentDocument;
             assertIsBlankDocument(this.document);
             // eslint-disable-next-line no-unsanitized/property
             this.document.documentElement.innerHTML = `
                <head>
                 <style>${substitutedCss}</style>
@@ -269,18 +271,20 @@ this.ui = (function() { // eslint-disabl
     element: null,
     document: null,
     display(installHandlerOnDocument, standardOverlayCallbacks) {
       return new Promise((resolve, reject) => {
         if (!this.element) {
           this.element = initializeIframe();
           this.element.id = "firefox-screenshots-preselection-iframe";
           this.element.style.setProperty("position", "fixed", "important");
+          this.element.style.setProperty("background-color", "transparent");
           this.element.style.width = "100%";
           this.element.style.height = "100%";
+          this.element.setAttribute("role", "dialog");
           this.element.addEventListener("load", watchFunction(() => {
             this.document = this.element.contentDocument;
             assertIsBlankDocument(this.document);
             // eslint-disable-next-line no-unsanitized/property
             this.document.documentElement.innerHTML = `
                <head>
                 <style>${substitutedCss}</style>
                 <title></title>
@@ -292,21 +296,21 @@ this.ui = (function() { // eslint-disabl
                        <div class="eye left"><div class="eyeball"></div></div>
                        <div class="eye right"><div class="eyeball"></div></div>
                        <div class="face"></div>
                      </div>
                      <div class="preview-instructions" data-l10n-id="screenshotInstructions"></div>
                      <button class="cancel-shot">${browser.i18n.getMessage("cancelScreenshot")}</button>
                      <div class="myshots-all-buttons-container">
                        ${isDownloadOnly() ? "" : `
-                         <button class="myshots-button" tabindex="1" data-l10n-id="myShotsLink"></button>
+                         <button class="myshots-button" tabindex="3" data-l10n-id="myShotsLink"></button>
                          <div class="spacer"></div>
                        `}
                        <button class="visible" tabindex="2" data-l10n-id="saveScreenshotVisibleArea"></button>
-                       <button class="full-page" tabindex="3" data-l10n-id="saveScreenshotFullPage"></button>
+                       <button class="full-page" tabindex="1" data-l10n-id="saveScreenshotFullPage"></button>
                      </div>
                    </div>
                  </div>
                </body>`;
             installHandlerOnDocument(this.document);
             if (this.addClassName) {
               this.document.body.className = this.addClassName;
             }
@@ -380,18 +384,20 @@ this.ui = (function() { // eslint-disabl
     document: null,
     display(installHandlerOnDocument, standardOverlayCallbacks) {
       return new Promise((resolve, reject) => {
         if (!this.element) {
           this.element = initializeIframe();
           this.element.id = "firefox-screenshots-preview-iframe";
           this.element.style.display = "none";
           this.element.style.setProperty("position", "fixed", "important");
+          this.element.style.setProperty("background-color", "transparent");
           this.element.style.height = "100%";
           this.element.style.width = "100%";
+          this.element.setAttribute("role", "dialog");
           this.element.onload = watchFunction(() => {
             this.document = this.element.contentDocument;
             // eslint-disable-next-line no-unsanitized/property
             this.document.documentElement.innerHTML = `
               <head>
                 <style>${substitutedCss}</style>
                 <title></title>
               </head>
@@ -620,27 +626,27 @@ this.ui = (function() { // eslint-disabl
       this.el.style.left = `${pos.left}px`;
       this.el.style.height = `${pos.bottom - pos.top}px`;
       this.el.style.width = `${pos.right - pos.left}px`;
       this.bgTop.style.top = "0px";
       this.bgTop.style.height = `${pos.top}px`;
       this.bgTop.style.left = "0px";
       this.bgTop.style.width = "100%";
       this.bgBottom.style.top = `${pos.bottom}px`;
-      this.bgBottom.style.height = "100vh";
+      this.bgBottom.style.height = `calc(100vh - ${pos.bottom}px)`;
       this.bgBottom.style.left = "0px";
       this.bgBottom.style.width = "100%";
       this.bgLeft.style.top = `${pos.top}px`;
       this.bgLeft.style.height = `${pos.bottom - pos.top}px`;
       this.bgLeft.style.left = "0px";
       this.bgLeft.style.width = `${pos.left}px`;
       this.bgRight.style.top = `${pos.top}px`;
       this.bgRight.style.height = `${pos.bottom - pos.top}px`;
       this.bgRight.style.left = `${pos.right}px`;
-      this.bgRight.style.width = `${document.body.scrollWidth - pos.right}px`;
+      this.bgRight.style.width = `calc(100% - ${pos.right}px)`;
       // the download notice is injected into an iframe that matches the document size
       // in order to reposition it on scroll we need to bind an updated positioning
       // function to some window events.
       this.repositionDownloadNotice = () => {
         if (this.downloadNotice) {
           const currentYOffset = window.pageYOffset;
           const currentWinBottom = window.innerHeight;
           this.downloadNotice.style.top = (currentYOffset + currentWinBottom - 60) + "px";
@@ -851,44 +857,43 @@ this.ui = (function() { // eslint-disabl
       if (!this.el) {
         this.el = makeEl("div", "pixel-dimensions");
         this.xEl = makeEl("div");
         this.el.appendChild(this.xEl);
         this.yEl = makeEl("div");
         this.el.appendChild(this.yEl);
         iframe.document().body.appendChild(this.el);
       }
-      this.xEl.textContent = x;
-      this.yEl.textContent = y;
+      this.xEl.textContent = Math.round(x);
+      this.yEl.textContent = Math.round(y);
       this.el.style.top = (yPos + 12) + "px";
       this.el.style.left = (xPos + 12) + "px";
     },
     remove() {
       util.removeNode(this.el);
       this.el = this.xEl = this.yEl = null;
     }
   };
 
   exports.Preview = {
     display(dataUrl, showCropWarning) {
       const img = makeEl("IMG");
       const imgBlob = blobConverters.dataUrlToBlob(dataUrl);
       img.src = URL.createObjectURL(imgBlob);
       iframe.document().querySelector(".preview-image").appendChild(img);
       if (showCropWarning && !(isDownloadOnly())) {
-        const imageCroppedEl = makeEl("table", "notice");
-        imageCroppedEl.style.bottom = "10px";
+        const imageCroppedEl = makeEl("table", "notice middle");
         imageCroppedEl.innerHTML = `<tbody>
           <tr class="notice-wrapper">
             <td class="notice-content"></td>
           </tr>
         </tbody>`;
         const contentCell = imageCroppedEl.getElementsByTagName("td");
-        contentCell[0].textContent = browser.i18n.getMessage("imageCroppedWarning", buildSettings.maxImageHeight);
-        iframe.document().querySelector(".preview-overlay").appendChild(imageCroppedEl);
+        contentCell[0].textContent = browser.i18n.getMessage("imageCropPopupWarning", buildSettings.maxImageHeight);
+        iframe.document().querySelector(".preview-buttons").appendChild(imageCroppedEl);
       }
     }
   };
 
   /** Removes every UI this module creates */
   exports.remove = function() {
     for (const name in exports) {
       if (name.startsWith("iframe")) {
rename from browser/extensions/screenshots/webextension/selector/uicontrol.js
rename to browser/extensions/screenshots/selector/uicontrol.js
--- a/browser/extensions/screenshots/webextension/selector/uicontrol.js
+++ b/browser/extensions/screenshots/selector/uicontrol.js
@@ -189,33 +189,38 @@ this.uicontrol = (function() {
         window.scrollX, window.scrollY,
         window.scrollX + document.documentElement.clientWidth, window.scrollY + window.innerHeight);
       captureType = "visible";
       setState("previewing");
     },
     onClickFullPage: () => {
       sendEvent("capture-full-page", "selection-button");
       captureType = "fullPage";
-      let width = getDocumentWidth();
+      const width = getDocumentWidth();
       if (width > MAX_PAGE_WIDTH) {
         captureType = "fullPageTruncated";
       }
-      width = Math.min(width, MAX_PAGE_WIDTH);
-      let height = getDocumentHeight();
+      const height = getDocumentHeight();
       if (height > MAX_PAGE_HEIGHT) {
         captureType = "fullPageTruncated";
       }
-      height = Math.min(height, MAX_PAGE_HEIGHT);
       selectedPos = new Selection(
         0, 0,
         width, height);
       setState("previewing");
     },
     onSavePreview: () => {
       sendEvent(`save-${captureType.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase()}`, "save-preview-button");
+      if (captureType === "fullPageTruncated") {
+        selectedPos = new Selection(
+          0, 0,
+          Math.min(selectedPos.right, MAX_PAGE_WIDTH),
+          Math.min(selectedPos.bottom, MAX_PAGE_HEIGHT));
+        dataUrl = null;
+      }
       shooter.takeShot(captureType, selectedPos, dataUrl);
     },
     onDownloadPreview: () => {
       sendEvent(`download-${captureType.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase()}`, "download-preview-button");
       downloadShot();
     },
     onCopyPreview: () => {
       sendEvent(`copy-${captureType.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase()}`, "copy-preview-button");
@@ -663,16 +668,19 @@ this.uicontrol = (function() {
       resizeStartPos = new Pos(event.pageX, event.pageY);
       resizeStartSelected = selectedPos.clone();
       resizeHasMoved = false;
       setState("resizing");
     },
 
     mousemove(event) {
       this._resize(event);
+      if (resizeDirection !== "move") {
+        ui.PixelDimensions.display(event.pageX, event.pageY, selectedPos.width, selectedPos.height);
+      }
       return false;
     },
 
     mouseup(event) {
       this._resize(event);
       sendEvent("selection-resized");
       ui.Box.display(selectedPos, standardDisplayCallbacks);
       if (resizeHasMoved) {
@@ -718,16 +726,17 @@ this.uicontrol = (function() {
       }
       scrollIfByEdge(event.pageX, event.pageY);
       ui.Box.display(selectedPos);
     },
 
     end() {
       resizeDirection = resizeStartPos = resizeStartSelected = null;
       selectedPos.sortCoords();
+      ui.PixelDimensions.remove();
     }
   };
 
   stateHandlers.cancel = {
     start() {
       ui.iframe.hide();
       ui.Box.remove();
     }
rename from browser/extensions/screenshots/webextension/selector/util.js
rename to browser/extensions/screenshots/selector/util.js
rename from browser/extensions/screenshots/webextension/sitehelper.js
rename to browser/extensions/screenshots/sitehelper.js
--- a/browser/extensions/screenshots/webextension/sitehelper.js
+++ b/browser/extensions/screenshots/sitehelper.js
@@ -10,16 +10,22 @@ this.sitehelper = (function() {
   // copy that this content script gets:
   const ContentXMLHttpRequest = content.XMLHttpRequest;
 
   catcher.registerHandler((errorObj) => {
     callBackground("reportError", errorObj);
   });
 
 
+  const capabilities = {};
+  function registerListener(name, func) {
+    capabilities[name] = name;
+    document.addEventListener(name, func);
+  }
+
   function sendCustomEvent(name, detail) {
     if (typeof detail === "object") {
       // Note sending an object can lead to security problems, while a string
       // is safe to transfer:
       detail = JSON.stringify(detail);
     }
     document.dispatchEvent(new CustomEvent(name, {detail}));
   }
@@ -45,34 +51,44 @@ this.sitehelper = (function() {
     req.send("");
     req.onload = () => {
       if (req.status !== 200) {
         console.warn("Attempt to set Screenshots cookie via /api/set-login-cookie failed:", req.status, req.statusText, req.responseText);
       }
     };
   }
 
-  document.addEventListener("delete-everything", catcher.watchFunction((event) => {
+  registerListener("delete-everything", catcher.watchFunction((event) => {
     // FIXME: reset some data in the add-on
   }, false));
 
-  document.addEventListener("request-login", catcher.watchFunction((event) => {
+  registerListener("request-login", catcher.watchFunction((event) => {
     const shotId = event.detail;
     catcher.watchPromise(callBackground("getAuthInfo", shotId || null).then((info) => {
-      sendBackupCookieRequest(info.authHeaders);
-      sendCustomEvent("login-successful", {deviceId: info.deviceId, isOwner: info.isOwner, backupCookieRequest: true});
+      if (info) {
+        sendBackupCookieRequest(info.authHeaders);
+        sendCustomEvent("login-successful", {deviceId: info.deviceId, accountId: info.accountId, isOwner: info.isOwner, backupCookieRequest: true});
+      }
     }));
   }));
 
-  document.addEventListener("request-onboarding", catcher.watchFunction((event) => {
+  registerListener("request-onboarding", catcher.watchFunction((event) => {
     callBackground("requestOnboarding");
   }));
 
+  registerListener("copy-to-clipboard", catcher.watchFunction(event => {
+    catcher.watchPromise(callBackground("copyShotToClipboard", event.detail));
+  }));
+
+  registerListener("show-notification", catcher.watchFunction(event => {
+    catcher.watchPromise(callBackground("showNotification", event.detail));
+  }));
+
   // Depending on the script loading order, the site might get the addon-present event,
   // but probably won't - instead the site will ask for that event after it has loaded
-  document.addEventListener("request-addon-present", catcher.watchFunction(() => {
-    sendCustomEvent("addon-present");
+  registerListener("request-addon-present", catcher.watchFunction(() => {
+    sendCustomEvent("addon-present", capabilities);
   }));
 
-  sendCustomEvent("addon-present");
+  sendCustomEvent("addon-present", capabilities);
 
 })();
 null;
--- a/browser/extensions/screenshots/test/browser/browser.ini
+++ b/browser/extensions/screenshots/test/browser/browser.ini
@@ -1,6 +1,2 @@
-[DEFAULT]
-support-files =
-  head.js
-
 [browser_screenshots_ui_check.js]
 skip-if = os == 'win' && debug # Bug 1394967
--- a/browser/extensions/screenshots/test/browser/browser_screenshots_ui_check.js
+++ b/browser/extensions/screenshots/test/browser/browser_screenshots_ui_check.js
@@ -1,32 +1,34 @@
 "use strict";
 
+ChromeUtils.defineModuleGetter(this, "AddonManager",
+                               "resource://gre/modules/AddonManager.jsm");
+
 const BUTTON_ID = "pageAction-panel-screenshots_mozilla_org";
 
 function checkElements(expectPresent, l) {
   for (const id of l) {
     is(!!document.getElementById(id), expectPresent, "element " + id + (expectPresent ? " is" : " is not") + " present");
   }
 }
 
 async function togglePageActionPanel() {
   await promiseOpenPageActionPanel();
   EventUtils.synthesizeMouseAtCenter(BrowserPageActions.mainButtonNode, {});
   await promisePageActionPanelEvent("popuphidden");
 }
 
 function promiseOpenPageActionPanel() {
-  const dwu = window.windowUtils;
   return BrowserTestUtils.waitForCondition(() => {
     // Wait for the main page action button to become visible.  It's hidden for
     // some URIs, so depending on when this is called, it may not yet be quite
     // visible.  It's up to the caller to make sure it will be visible.
     info("Waiting for main page action button to have non-0 size");
-    const bounds = dwu.getBoundsWithoutFlushing(BrowserPageActions.mainButtonNode);
+    const bounds = window.windowUtils.getBoundsWithoutFlushing(BrowserPageActions.mainButtonNode);
     return bounds.width > 0 && bounds.height > 0;
   }).then(() => {
     // Wait for the panel to become open, by clicking the button if necessary.
     info("Waiting for main page action panel to be open");
     if (BrowserPageActions.panelNode.state === "open") {
       return Promise.resolve();
     }
     const shownPromise = promisePageActionPanelEvent("popupshown");
@@ -49,35 +51,38 @@ function promisePageActionPanelEvent(eve
     panel.addEventListener(eventType, () => {
       executeSoon(resolve);
     }, { once: true });
   });
 }
 
 function promisePageActionViewChildrenVisible(panelViewNode) {
   info("promisePageActionViewChildrenVisible waiting for a child node to be visible");
-  const dwu = window.windowUtils;
   return BrowserTestUtils.waitForCondition(() => {
-    const bodyNode = panelViewNode.firstElementChild;
-    for (const childNode of bodyNode.children) {
-      const bounds = dwu.getBoundsWithoutFlushing(childNode);
+    const bodyNode = panelViewNode.firstChild;
+    for (const childNode of bodyNode.childNodes) {
+      const bounds = window.windowUtils.getBoundsWithoutFlushing(childNode);
       if (bounds.width > 0 && bounds.height > 0) {
         return true;
       }
     }
     return false;
   });
 }
 
 add_task(async function() {
-  await promiseScreenshotsEnabled();
-
-  registerCleanupFunction(async function() {
-    await promiseScreenshotsReset();
-  });
+  // If Screenshots was disabled, enable it just for this test.
+  const addon = await AddonManager.getAddonByID("screenshots@mozilla.org");
+  const isEnabled = addon.enabled;
+  if (!isEnabled) {
+    await addon.enable({allowSystemAddons: true});
+    registerCleanupFunction(async () => {
+      await addon.disable({allowSystemAddons: true});
+    });
+  }
 
   // Toggle the page action panel to get it to rebuild itself.  An actionable
   // page must be opened first.
   const url = "http://example.com/browser_screenshots_ui_check";
   await BrowserTestUtils.withNewTab(url, async () => { // eslint-disable-line space-before-function-paren
     await togglePageActionPanel();
 
     await BrowserTestUtils.waitForCondition(
deleted file mode 100644
--- a/browser/extensions/screenshots/test/browser/head.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/* globals PageActions */
-
-// Currently Screenshots is disabled in tests.  We want these tests to work under
-// either case that Screenshots is disabled or enabled on startup of the browser,
-// and that at the end we're reset to the correct state.
-let enabledOnStartup = false;
-
-// ScreenshotsEnabled/Disabled promises return true if it was already
-// Enabled/Disabled, and false if it need to Enable/Disable.
-function promiseScreenshotsEnabled() {
-  if (!Services.prefs.getBoolPref("extensions.screenshots.disabled", false)) {
-    info("Screenshots was already enabled, assuming enabled by default for tests");
-    enabledOnStartup = true;
-    return Promise.resolve(true);
-  }
-  info("Screenshots is not enabled");
-  return new Promise((resolve, reject) => {
-    const interval = setInterval(() => {
-      const action = PageActions.actionForID("screenshots_mozilla_org");
-      if (action) {
-        info("screenshots page action created");
-        clearInterval(interval);
-        resolve(false);
-      }
-    }, 100);
-    info("Set Screenshots disabled pref to false.");
-    Services.prefs.setBoolPref("extensions.screenshots.disabled", false);
-  });
-}
-
-function promiseScreenshotsDisabled() {
-  if (Services.prefs.getBoolPref("extensions.screenshots.disabled", false)) {
-    info("Screenshots already disabled");
-    return Promise.resolve(true);
-  }
-  return new Promise((resolve, reject) => {
-    const interval = setInterval(() => {
-      const action = PageActions.actionForID("screenshots");
-      if (!action) {
-        info("screenshots page action removed");
-        clearInterval(interval);
-        resolve(false);
-      }
-    }, 100);
-    info("Set Screenshots disabled pref to true.");
-    Services.prefs.setBoolPref("extensions.screenshots.disabled", true);
-  });
-}
-
-function promiseScreenshotsReset() { // eslint-disable-line no-unused-vars
-  if (enabledOnStartup) {
-    info("Reset is enabling Screenshots addon");
-    return promiseScreenshotsEnabled();
-  }
-  info("Reset is disabling Screenshots addon");
-  return promiseScreenshotsDisabled();
-}
deleted file mode 100644
index 903ee9ae180a6718fe071a86f199990a789f81c2..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001