Merge mozilla-central to fx-team
authorCarsten "Tomcat" Book <cbook@mozilla.com>
Thu, 06 Mar 2014 13:38:06 +0100
changeset 189473 3e04ea03716e09e54b0163083300d2ff65886ca5
parent 189472 29b248b0fb475b626e4612ccaccab2327aca8743 (current diff)
parent 189407 d2dac18d0562d7901957cc73eb8ccc26aad337ec (diff)
child 189474 32b670ea20d5c1c95e9469c4e20cac9d553e1918
push id3503
push userraliiev@mozilla.com
push dateMon, 28 Apr 2014 18:51:11 +0000
treeherdermozilla-beta@c95ac01e332e [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
milestone30.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Merge mozilla-central to fx-team
content/media/webaudio/test/test_bug938022.html
gfx/gl/GLContextSkia.cpp
gfx/gl/GLContextSkia.h
gfx/qcms/Makefile.in
--- a/accessible/src/base/FocusManager.cpp
+++ b/accessible/src/base/FocusManager.cpp
@@ -2,21 +2,19 @@
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #include "FocusManager.h"
 
 #include "Accessible-inl.h"
 #include "AccIterator.h"
 #include "DocAccessible-inl.h"
-#include "HTMLImageMapAccessible.h"
 #include "nsAccessibilityService.h"
 #include "nsAccUtils.h"
 #include "nsEventShell.h"
-#include "nsImageFrame.h"
 #include "Role.h"
 
 #include "nsEventStateManager.h"
 #include "nsFocusManager.h"
 #include "mozilla/dom/Element.h"
 
 namespace dom = mozilla::dom;
 using namespace mozilla::a11y;
@@ -34,17 +32,17 @@ FocusManager::FocusedAccessible() const
 {
   if (mActiveItem)
     return mActiveItem;
 
   nsINode* focusedNode = FocusedDOMNode();
   if (focusedNode) {
     DocAccessible* doc = 
       GetAccService()->GetDocAccessible(focusedNode->OwnerDoc());
-    return doc ? GetFocusableAccessibleFor(focusedNode, doc) : nullptr;
+    return doc ? doc->GetAccessibleEvenIfNotInMapOrContainer(focusedNode) : nullptr;
   }
 
   return nullptr;
 }
 
 bool
 FocusManager::IsFocused(const Accessible* aAccessible) const
 {
@@ -58,17 +56,17 @@ FocusManager::IsFocused(const Accessible
     // accessible creation for temporary about:blank document. Without this
     // peculiarity we would end up with plain implementation based on
     // FocusedAccessible() method call. Make sure this issue is fixed in
     // bug 638465.
     if (focusedNode->OwnerDoc() == aAccessible->GetNode()->OwnerDoc()) {
       DocAccessible* doc = 
         GetAccService()->GetDocAccessible(focusedNode->OwnerDoc());
       return aAccessible ==
-        (doc ? GetFocusableAccessibleFor(focusedNode, doc) : nullptr);
+        (doc ? doc->GetAccessibleEvenIfNotInMapOrContainer(focusedNode) : nullptr);
     }
   }
   return false;
 }
 
 bool
 FocusManager::IsFocusWithin(const Accessible* aContainer) const
 {
@@ -238,25 +236,26 @@ FocusManager::ProcessDOMFocus(nsINode* a
 #ifdef A11Y_LOG
   if (logging::IsEnabled(logging::eFocus))
     logging::FocusNotificationTarget("process DOM focus", "Target", aTarget);
 #endif
 
   DocAccessible* document =
     GetAccService()->GetDocAccessible(aTarget->OwnerDoc());
 
-  Accessible* target = GetFocusableAccessibleFor(aTarget, document);
+  Accessible* target = document->GetAccessibleEvenIfNotInMapOrContainer(aTarget);
   if (target && document) {
     // Check if still focused. Otherwise we can end up with storing the active
     // item for control that isn't focused anymore.
     nsINode* focusedNode = FocusedDOMNode();
     if (!focusedNode)
       return;
 
-    Accessible* DOMFocus = GetFocusableAccessibleFor(focusedNode, document);
+    Accessible* DOMFocus =
+      document->GetAccessibleEvenIfNotInMapOrContainer(focusedNode);
     if (target != DOMFocus)
       return;
 
     Accessible* activeItem = target->CurrentItem();
     if (activeItem) {
       mActiveItem = activeItem;
       target = activeItem;
     }
@@ -278,17 +277,18 @@ FocusManager::ProcessFocusEvent(AccEvent
 
     // Check if still focused. Otherwise we can end up with storing the active
     // item for control that isn't focused anymore.
     DocAccessible* document = aEvent->GetDocAccessible();
     nsINode* focusedNode = FocusedDOMNode();
     if (!focusedNode)
       return;
 
-    Accessible* DOMFocus = GetFocusableAccessibleFor(focusedNode, document);
+    Accessible* DOMFocus =
+      document->GetAccessibleEvenIfNotInMapOrContainer(focusedNode);
     if (target != DOMFocus)
       return;
 
     Accessible* activeItem = target->CurrentItem();
     if (activeItem) {
       mActiveItem = activeItem;
       target = activeItem;
     }
@@ -403,33 +403,8 @@ FocusManager::FocusedDOMNode() const
 }
 
 nsIDocument*
 FocusManager::FocusedDOMDocument() const
 {
   nsINode* focusedNode = FocusedDOMNode();
   return focusedNode ? focusedNode->OwnerDoc() : nullptr;
 }
-
-Accessible*
-FocusManager::GetFocusableAccessibleFor(nsINode* aNode,
-                                        DocAccessible* aDoc) const
-{
-  if (!aNode->IsContent() || !aNode->AsContent()->IsHTML(nsGkAtoms::area))
-    return aDoc->GetAccessibleOrContainer(aNode);
-
-  // XXX Bug 135040, incorrect when multiple images use the same map.
-  nsIFrame* frame = aNode->AsContent()->GetPrimaryFrame();
-  nsImageFrame* imageFrame = do_QueryFrame(frame);
-  if (imageFrame) {
-    Accessible* parent = aDoc->GetAccessible(imageFrame->GetContent());
-    if (parent) {
-      Accessible* area =
-        parent->AsImageMap()->GetChildAccessibleFor(aNode);
-      if (area)
-        return area;
-
-      return nullptr;
-    }
-  }
-
-  return aDoc->GetAccessibleOrContainer(aNode);
-}
--- a/accessible/src/base/FocusManager.h
+++ b/accessible/src/base/FocusManager.h
@@ -118,22 +118,16 @@ private:
    */
   nsINode* FocusedDOMNode() const;
 
   /**
    * Return DOM document having DOM focus.
    */
   nsIDocument* FocusedDOMDocument() const;
 
-  /**
-   * Return accessible for a focusable node.
-   */
-  Accessible* GetFocusableAccessibleFor(nsINode* aNode,
-                                        DocAccessible* aDoc) const;
-
 private:
   nsRefPtr<Accessible> mActiveItem;
   nsRefPtr<Accessible> mActiveARIAMenubar;
 };
 
 } // namespace a11y
 } // namespace mozilla
 
--- a/accessible/src/generic/DocAccessible-inl.h
+++ b/accessible/src/generic/DocAccessible-inl.h
@@ -111,12 +111,19 @@ DocAccessible::NotifyOfLoad(uint32_t aLo
 inline void
 DocAccessible::MaybeNotifyOfValueChange(Accessible* aAccessible)
 {
   a11y::role role = aAccessible->Role();
   if (role == roles::ENTRY || role == roles::COMBOBOX)
     FireDelayedEvent(nsIAccessibleEvent::EVENT_VALUE_CHANGE, aAccessible);
 }
 
+inline Accessible*
+DocAccessible::GetAccessibleEvenIfNotInMapOrContainer(nsINode* aNode) const
+{
+  Accessible* acc = GetAccessibleEvenIfNotInMap(aNode);
+  return acc ? acc : GetContainerAccessible(aNode);
+}
+
 } // namespace a11y
 } // namespace mozilla
 
 #endif
--- a/accessible/src/generic/DocAccessible.cpp
+++ b/accessible/src/generic/DocAccessible.cpp
@@ -1,16 +1,17 @@
 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #include "Accessible-inl.h"
 #include "AccIterator.h"
 #include "DocAccessible-inl.h"
+#include "HTMLImageMapAccessible.h"
 #include "nsAccCache.h"
 #include "nsAccessiblePivot.h"
 #include "nsAccUtils.h"
 #include "nsEventShell.h"
 #include "nsTextEquivUtils.h"
 #include "Role.h"
 #include "RootAccessible.h"
 #include "TreeWalker.h"
@@ -25,16 +26,17 @@
 #include "nsIDOMXULDocument.h"
 #include "nsIDOMMutationEvent.h"
 #include "nsPIDOMWindow.h"
 #include "nsIDOMXULPopupElement.h"
 #include "nsIEditingSession.h"
 #include "nsEventStateManager.h"
 #include "nsIFrame.h"
 #include "nsIInterfaceRequestorUtils.h"
+#include "nsImageFrame.h"
 #include "nsIPersistentProperties2.h"
 #include "nsIPresShell.h"
 #include "nsIServiceManager.h"
 #include "nsViewManager.h"
 #include "nsIScrollableFrame.h"
 #include "nsUnicharUtils.h"
 #include "nsIURI.h"
 #include "nsIWebNavigation.h"
@@ -1430,16 +1432,40 @@ DocAccessible::ProcessInvalidationList()
     // Make sure the subtree is created.
     if (accessible)
       CacheChildrenInSubtree(accessible);
   }
 
   mInvalidationList.Clear();
 }
 
+Accessible*
+DocAccessible::GetAccessibleEvenIfNotInMap(nsINode* aNode) const
+{
+if (!aNode->IsContent() || !aNode->AsContent()->IsHTML(nsGkAtoms::area))
+    return GetAccessible(aNode);
+
+  // XXX Bug 135040, incorrect when multiple images use the same map.
+  nsIFrame* frame = aNode->AsContent()->GetPrimaryFrame();
+  nsImageFrame* imageFrame = do_QueryFrame(frame);
+  if (imageFrame) {
+    Accessible* parent = GetAccessible(imageFrame->GetContent());
+    if (parent) {
+      Accessible* area =
+        parent->AsImageMap()->GetChildAccessibleFor(aNode);
+      if (area)
+        return area;
+
+      return nullptr;
+    }
+  }
+
+  return GetAccessible(aNode);
+}
+
 ////////////////////////////////////////////////////////////////////////////////
 // Accessible protected
 
 void
 DocAccessible::CacheChildren()
 {
   // Search for accessible children starting from the document element since
   // some web pages tend to insert elements under it rather than document body.
--- a/accessible/src/generic/DocAccessible.h
+++ b/accessible/src/generic/DocAccessible.h
@@ -207,16 +207,25 @@ public:
    * Return the cached accessible by the given DOM node if it's in subtree of
    * this document accessible or the document accessible itself, otherwise null.
    *
    * @return the accessible object
    */
   Accessible* GetAccessible(nsINode* aNode) const;
 
   /**
+   * Return an accessible for the given node even if the node is not in
+   * document's node map cache (like HTML area element).
+   *
+   * XXX: it should be really merged with GetAccessible().
+   */
+  Accessible* GetAccessibleEvenIfNotInMap(nsINode* aNode) const;
+  Accessible* GetAccessibleEvenIfNotInMapOrContainer(nsINode* aNode) const;
+
+  /**
    * Return whether the given DOM node has an accessible or not.
    */
   bool HasAccessible(nsINode* aNode) const
     { return GetAccessible(aNode); }
 
   /**
    * Return the cached accessible by the given unique ID within this document.
    *
--- a/accessible/src/generic/moz.build
+++ b/accessible/src/generic/moz.build
@@ -35,16 +35,17 @@ LOCAL_INCLUDES += [
 ]
 
 if CONFIG['MOZ_ENABLE_GTK']:
     LOCAL_INCLUDES += [
         '../atk',
     ]
 elif CONFIG['MOZ_WIDGET_TOOLKIT'] == 'windows':
     LOCAL_INCLUDES += [
+        '../windows/ia2',
         '../windows/msaa',
     ]
 elif CONFIG['MOZ_WIDGET_TOOLKIT'] == 'cocoa':
     LOCAL_INCLUDES += [
         '../mac',
     ]
 else:
     LOCAL_INCLUDES += [
--- a/accessible/src/windows/sdn/sdnAccessible-inl.h
+++ b/accessible/src/windows/sdn/sdnAccessible-inl.h
@@ -20,15 +20,15 @@ sdnAccessible::GetDocument() const
 {
   return GetExistingDocAccessible(mNode->OwnerDoc());
 }
 
 inline Accessible*
 sdnAccessible::GetAccessible() const
 {
   DocAccessible* document = GetDocument();
-  return document ? document->GetAccessible(mNode) : nullptr;
+  return document ? document->GetAccessibleEvenIfNotInMap(mNode) : nullptr;
 }
 
 } // namespace a11y
 } // namespace mozilla
 
 #endif // mozilla_a11y_sdnAccessible_inl_h_
--- a/b2g/config/emulator-ics/sources.xml
+++ b/b2g/config/emulator-ics/sources.xml
@@ -14,17 +14,17 @@
   <!--original fetch url was git://github.com/apitrace/-->
   <remote fetch="https://git.mozilla.org/external/apitrace" name="apitrace"/>
   <default remote="caf" revision="refs/tags/android-4.0.4_r2.1" sync-j="4"/>
   <!-- Gonk specific things and forks -->
   <project name="platform_build" path="build" remote="b2g" revision="1ad48c4be51b279f7f63c1a13025b52fe087d231">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
   <project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
-  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="9cb35e701df44766d9b3560b0defe0a401a0ecdd"/>
+  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="d68074a17d9510623ae4dd3b9f50902af2b36dab"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="15e8982284c4560f9c74c2b9fe8bb361ebfe0cb6"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
   <project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="d11f524d00cacf5ba0dfbf25e4aa2158b1c3a036"/>
   <project name="platform_external_qemu" path="external/qemu" remote="b2g" revision="456499c44d1ef39b602ea02e9ed460b6aab85b44"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="3d5c964015967ca8c86abe6dbbebee3cb82b1609"/>
   <project name="apitrace" path="external/apitrace" remote="apitrace" revision="b2f773d8320d30648b89767dfe5b25ef94bc7e62"/>
   <!-- Stock Android things -->
   <project name="platform/abi/cpp" path="abi/cpp" revision="dd924f92906085b831bf1cbbc7484d3c043d613c"/>
@@ -92,17 +92,17 @@
   <project name="platform/prebuilt" path="prebuilt" revision="a4062cc40fcaa0776dc880ce591b4c515d36f420"/>
   <project name="platform/system/bluetooth" path="system/bluetooth" revision="507e46e553586bec971551322f20d066c80a0788"/>
   <project name="platform/system/core" path="system/core" revision="91e5551f88aea5aa64e1b4f8b4b52d7be2b28b64"/>
   <project name="platform/system/extras" path="system/extras" revision="0205c49fedf29620165c6b4e6db3d13739c93396"/>
   <project name="platform/system/media" path="system/media" revision="7f17e3995d1588cfcc309b56525652794b6513ef"/>
   <project name="platform/system/netd" path="system/netd" revision="3d298fde142bee3fc4f07f63f16f2d8ce42339c0"/>
   <project name="platform/system/vold" path="system/vold" revision="919829940468066a32f403980b43f6ebfee5d314"/>
   <!-- Emulator specific things -->
-  <project name="android-development" path="development" remote="b2g" revision="4e236e65a5d652a66ac32590f69f2123d17cb4ad"/>
+  <project name="android-development" path="development" remote="b2g" revision="9abf0ab68376afae3e1c7beefa3e9cbee2fde202"/>
   <project name="device_generic_goldfish" path="device/generic/goldfish" remote="b2g" revision="e7e8734fdd8bf41e48a56c1c85e0f7dac60aaa9f"/>
   <project name="platform/external/iproute2" path="external/iproute2" revision="c66c5716d5335e450f7a7b71ccc6a604fb2f41d2"/>
   <project name="platform/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" revision="d2685281e2e54ca14d1df304867aa82c37b27162"/>
   <project name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" revision="627f9b20fc518937b93747a7ff1ed4f5ed46e06f"/>
   <project name="platform/prebuilts/tools" path="prebuilts/tools" revision="c16df012d9649be75d6590f93aeacbdc24b29d53"/>
   <project name="platform_prebuilts_qemu-kernel" path="prebuilts/qemu-kernel" remote="b2g" revision="431afac2ebfdd9c1c8402b413ff5914ed448e961"/>
   <project name="android-sdk" path="sdk" remote="b2g" revision="4f46930827957afbce500a4a920755a218bf3155"/>
 </manifest>
--- a/b2g/config/emulator-jb/sources.xml
+++ b/b2g/config/emulator-jb/sources.xml
@@ -12,22 +12,22 @@
   <!--original fetch url was https://git.mozilla.org/releases-->
   <remote fetch="https://git.mozilla.org/releases" name="mozillaorg"/>
   <!-- B2G specific things. -->
   <project name="platform_build" path="build" remote="b2g" revision="97a5b461686757dbb8ecab2aac5903e41d2e1afe">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="9cb35e701df44766d9b3560b0defe0a401a0ecdd"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="d68074a17d9510623ae4dd3b9f50902af2b36dab"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="15e8982284c4560f9c74c2b9fe8bb361ebfe0cb6"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="3d5c964015967ca8c86abe6dbbebee3cb82b1609"/>
   <project name="apitrace" path="external/apitrace" remote="apitrace" revision="b2f773d8320d30648b89767dfe5b25ef94bc7e62"/>
-  <project name="valgrind" path="external/valgrind" remote="b2g" revision="905bfa3548eb75cf1792d0d8412b92113bbd4318"/>
-  <project name="vex" path="external/VEX" remote="b2g" revision="c3d7efc45414f1b44cd9c479bb2758c91c4707c0"/>
+  <project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
+  <project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
   <!-- Stock Android things -->
   <project groups="linux" name="platform/prebuilts/clang/linux-x86/3.1" path="prebuilts/clang/linux-x86/3.1" revision="5c45f43419d5582949284eee9cef0c43d866e03b"/>
   <project groups="linux" name="platform/prebuilts/clang/linux-x86/3.2" path="prebuilts/clang/linux-x86/3.2" revision="3748b4168e7bd8d46457d4b6786003bc6a5223ce"/>
   <project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" revision="9025e50b9d29b3cabbbb21e1dd94d0d13121a17e"/>
   <project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" revision="b89fda71fcd0fa0cf969310e75be3ea33e048b44"/>
   <project groups="linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.7" path="prebuilts/gcc/linux-x86/arm/arm-eabi-4.7" revision="2e7d5348f35575870b3c7e567a9a9f6d66f8d6c5"/>
   <project groups="linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7" path="prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7" revision="1342fd7b4b000ac3e76a5dfe111a0de9d710b4c8"/>
   <project groups="linux,x86" name="platform/prebuilts/gcc/linux-x86/x86/i686-linux-android-4.7" path="prebuilts/gcc/linux-x86/x86/i686-linux-android-4.7" revision="1b26ad444462ccbd97f6319565b4735f7bd779e5"/>
--- a/b2g/config/emulator/sources.xml
+++ b/b2g/config/emulator/sources.xml
@@ -14,17 +14,17 @@
   <!--original fetch url was git://github.com/apitrace/-->
   <remote fetch="https://git.mozilla.org/external/apitrace" name="apitrace"/>
   <default remote="caf" revision="refs/tags/android-4.0.4_r2.1" sync-j="4"/>
   <!-- Gonk specific things and forks -->
   <project name="platform_build" path="build" remote="b2g" revision="1ad48c4be51b279f7f63c1a13025b52fe087d231">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
   <project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
-  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="9cb35e701df44766d9b3560b0defe0a401a0ecdd"/>
+  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="d68074a17d9510623ae4dd3b9f50902af2b36dab"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="15e8982284c4560f9c74c2b9fe8bb361ebfe0cb6"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
   <project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="d11f524d00cacf5ba0dfbf25e4aa2158b1c3a036"/>
   <project name="platform_external_qemu" path="external/qemu" remote="b2g" revision="456499c44d1ef39b602ea02e9ed460b6aab85b44"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="3d5c964015967ca8c86abe6dbbebee3cb82b1609"/>
   <project name="apitrace" path="external/apitrace" remote="apitrace" revision="b2f773d8320d30648b89767dfe5b25ef94bc7e62"/>
   <!-- Stock Android things -->
   <project name="platform/abi/cpp" path="abi/cpp" revision="dd924f92906085b831bf1cbbc7484d3c043d613c"/>
@@ -92,17 +92,17 @@
   <project name="platform/prebuilt" path="prebuilt" revision="a4062cc40fcaa0776dc880ce591b4c515d36f420"/>
   <project name="platform/system/bluetooth" path="system/bluetooth" revision="507e46e553586bec971551322f20d066c80a0788"/>
   <project name="platform/system/core" path="system/core" revision="91e5551f88aea5aa64e1b4f8b4b52d7be2b28b64"/>
   <project name="platform/system/extras" path="system/extras" revision="0205c49fedf29620165c6b4e6db3d13739c93396"/>
   <project name="platform/system/media" path="system/media" revision="7f17e3995d1588cfcc309b56525652794b6513ef"/>
   <project name="platform/system/netd" path="system/netd" revision="3d298fde142bee3fc4f07f63f16f2d8ce42339c0"/>
   <project name="platform/system/vold" path="system/vold" revision="919829940468066a32f403980b43f6ebfee5d314"/>
   <!-- Emulator specific things -->
-  <project name="android-development" path="development" remote="b2g" revision="4e236e65a5d652a66ac32590f69f2123d17cb4ad"/>
+  <project name="android-development" path="development" remote="b2g" revision="9abf0ab68376afae3e1c7beefa3e9cbee2fde202"/>
   <project name="device_generic_goldfish" path="device/generic/goldfish" remote="b2g" revision="e7e8734fdd8bf41e48a56c1c85e0f7dac60aaa9f"/>
   <project name="platform/external/iproute2" path="external/iproute2" revision="c66c5716d5335e450f7a7b71ccc6a604fb2f41d2"/>
   <project name="platform/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" revision="d2685281e2e54ca14d1df304867aa82c37b27162"/>
   <project name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" revision="627f9b20fc518937b93747a7ff1ed4f5ed46e06f"/>
   <project name="platform/prebuilts/tools" path="prebuilts/tools" revision="c16df012d9649be75d6590f93aeacbdc24b29d53"/>
   <project name="platform_prebuilts_qemu-kernel" path="prebuilts/qemu-kernel" remote="b2g" revision="431afac2ebfdd9c1c8402b413ff5914ed448e961"/>
   <project name="android-sdk" path="sdk" remote="b2g" revision="4f46930827957afbce500a4a920755a218bf3155"/>
 </manifest>
--- a/b2g/config/gaia.json
+++ b/b2g/config/gaia.json
@@ -1,9 +1,9 @@
 {
     "git": {
         "remote": "", 
         "branch": "", 
         "revision": ""
     }, 
-    "revision": "5d470e57a89125a55663058050b2cd147630a948", 
+    "revision": "67e75b4310bc04e26b0e065aa16b71a21b456705", 
     "repo_path": "/integration/gaia-central"
 }
--- a/b2g/config/hamachi/sources.xml
+++ b/b2g/config/hamachi/sources.xml
@@ -12,17 +12,17 @@
   <!--original fetch url was git://github.com/apitrace/-->
   <remote fetch="https://git.mozilla.org/external/apitrace" name="apitrace"/>
   <default remote="caf" revision="b2g/ics_strawberry" sync-j="4"/>
   <!-- Gonk specific things and forks -->
   <project name="platform_build" path="build" remote="b2g" revision="1ad48c4be51b279f7f63c1a13025b52fe087d231">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
   <project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
-  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="9cb35e701df44766d9b3560b0defe0a401a0ecdd"/>
+  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="d68074a17d9510623ae4dd3b9f50902af2b36dab"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="15e8982284c4560f9c74c2b9fe8bb361ebfe0cb6"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
   <project name="librecovery" path="librecovery" remote="b2g" revision="1f6a1fe07f81c5bc5e1d079c9b60f7f78ca2bf4f"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="3d5c964015967ca8c86abe6dbbebee3cb82b1609"/>
   <project name="apitrace" path="external/apitrace" remote="apitrace" revision="b2f773d8320d30648b89767dfe5b25ef94bc7e62"/>
   <!-- Stock Android things -->
   <project name="platform/abi/cpp" path="abi/cpp" revision="6426040f1be4a844082c9769171ce7f5341a5528"/>
   <project name="platform/bionic" path="bionic" revision="d2eb6c7b6e1bc7643c17df2d9d9bcb1704d0b9ab"/>
--- a/b2g/config/helix/sources.xml
+++ b/b2g/config/helix/sources.xml
@@ -10,17 +10,17 @@
   <!--original fetch url was https://git.mozilla.org/releases-->
   <remote fetch="https://git.mozilla.org/releases" name="mozillaorg"/>
   <default remote="caf" revision="b2g/ics_strawberry" sync-j="4"/>
   <!-- Gonk specific things and forks -->
   <project name="platform_build" path="build" remote="b2g" revision="1ad48c4be51b279f7f63c1a13025b52fe087d231">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
   <project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
-  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="9cb35e701df44766d9b3560b0defe0a401a0ecdd"/>
+  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="d68074a17d9510623ae4dd3b9f50902af2b36dab"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="15e8982284c4560f9c74c2b9fe8bb361ebfe0cb6"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
   <project name="librecovery" path="librecovery" remote="b2g" revision="1f6a1fe07f81c5bc5e1d079c9b60f7f78ca2bf4f"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="3d5c964015967ca8c86abe6dbbebee3cb82b1609"/>
   <project name="gonk-patches" path="patches" remote="b2g" revision="223a2421006e8f5da33f516f6891c87cae86b0f6"/>
   <!-- Stock Android things -->
   <project name="platform/abi/cpp" path="abi/cpp" revision="6426040f1be4a844082c9769171ce7f5341a5528"/>
   <project name="platform/bionic" path="bionic" revision="d2eb6c7b6e1bc7643c17df2d9d9bcb1704d0b9ab"/>
--- a/b2g/config/inari/sources.xml
+++ b/b2g/config/inari/sources.xml
@@ -14,17 +14,17 @@
   <!--original fetch url was git://github.com/apitrace/-->
   <remote fetch="https://git.mozilla.org/external/apitrace" name="apitrace"/>
   <default remote="caf" revision="ics_chocolate_rb4.2" sync-j="4"/>
   <!-- Gonk specific things and forks -->
   <project name="platform_build" path="build" remote="b2g" revision="1ad48c4be51b279f7f63c1a13025b52fe087d231">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
   <project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
-  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="9cb35e701df44766d9b3560b0defe0a401a0ecdd"/>
+  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="d68074a17d9510623ae4dd3b9f50902af2b36dab"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="15e8982284c4560f9c74c2b9fe8bb361ebfe0cb6"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
   <project name="librecovery" path="librecovery" remote="b2g" revision="1f6a1fe07f81c5bc5e1d079c9b60f7f78ca2bf4f"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="3d5c964015967ca8c86abe6dbbebee3cb82b1609"/>
   <project name="apitrace" path="external/apitrace" remote="apitrace" revision="b2f773d8320d30648b89767dfe5b25ef94bc7e62"/>
   <!-- Stock Android things -->
   <project name="platform/abi/cpp" path="abi/cpp" revision="6426040f1be4a844082c9769171ce7f5341a5528"/>
   <project name="platform/bionic" path="bionic" revision="cd5dfce80bc3f0139a56b58aca633202ccaee7f8"/>
--- a/b2g/config/leo/sources.xml
+++ b/b2g/config/leo/sources.xml
@@ -12,17 +12,17 @@
   <!--original fetch url was git://github.com/apitrace/-->
   <remote fetch="https://git.mozilla.org/external/apitrace" name="apitrace"/>
   <default remote="caf" revision="b2g/ics_strawberry" sync-j="4"/>
   <!-- Gonk specific things and forks -->
   <project name="platform_build" path="build" remote="b2g" revision="1ad48c4be51b279f7f63c1a13025b52fe087d231">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
   <project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
-  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="9cb35e701df44766d9b3560b0defe0a401a0ecdd"/>
+  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="d68074a17d9510623ae4dd3b9f50902af2b36dab"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="15e8982284c4560f9c74c2b9fe8bb361ebfe0cb6"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
   <project name="librecovery" path="librecovery" remote="b2g" revision="1f6a1fe07f81c5bc5e1d079c9b60f7f78ca2bf4f"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="3d5c964015967ca8c86abe6dbbebee3cb82b1609"/>
   <project name="apitrace" path="external/apitrace" remote="apitrace" revision="b2f773d8320d30648b89767dfe5b25ef94bc7e62"/>
   <project name="gonk-patches" path="patches" remote="b2g" revision="223a2421006e8f5da33f516f6891c87cae86b0f6"/>
   <!-- Stock Android things -->
   <project name="platform/abi/cpp" path="abi/cpp" revision="6426040f1be4a844082c9769171ce7f5341a5528"/>
--- a/b2g/config/mako/sources.xml
+++ b/b2g/config/mako/sources.xml
@@ -12,22 +12,22 @@
   <!--original fetch url was https://git.mozilla.org/releases-->
   <remote fetch="https://git.mozilla.org/releases" name="mozillaorg"/>
   <!-- B2G specific things. -->
   <project name="platform_build" path="build" remote="b2g" revision="97a5b461686757dbb8ecab2aac5903e41d2e1afe">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="9cb35e701df44766d9b3560b0defe0a401a0ecdd"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="d68074a17d9510623ae4dd3b9f50902af2b36dab"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="15e8982284c4560f9c74c2b9fe8bb361ebfe0cb6"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="3d5c964015967ca8c86abe6dbbebee3cb82b1609"/>
   <project name="apitrace" path="external/apitrace" remote="apitrace" revision="b2f773d8320d30648b89767dfe5b25ef94bc7e62"/>
-  <project name="valgrind" path="external/valgrind" remote="b2g" revision="905bfa3548eb75cf1792d0d8412b92113bbd4318"/>
-  <project name="vex" path="external/VEX" remote="b2g" revision="c3d7efc45414f1b44cd9c479bb2758c91c4707c0"/>
+  <project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
+  <project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
   <!-- Stock Android things -->
   <project groups="linux" name="platform/prebuilts/clang/linux-x86/3.1" path="prebuilts/clang/linux-x86/3.1" revision="5c45f43419d5582949284eee9cef0c43d866e03b"/>
   <project groups="linux" name="platform/prebuilts/clang/linux-x86/3.2" path="prebuilts/clang/linux-x86/3.2" revision="3748b4168e7bd8d46457d4b6786003bc6a5223ce"/>
   <project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" revision="9025e50b9d29b3cabbbb21e1dd94d0d13121a17e"/>
   <project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" revision="b89fda71fcd0fa0cf969310e75be3ea33e048b44"/>
   <project groups="linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.7" path="prebuilts/gcc/linux-x86/arm/arm-eabi-4.7" revision="2e7d5348f35575870b3c7e567a9a9f6d66f8d6c5"/>
   <project groups="linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7" path="prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7" revision="1342fd7b4b000ac3e76a5dfe111a0de9d710b4c8"/>
   <project groups="linux,x86" name="platform/prebuilts/gcc/linux-x86/x86/i686-linux-android-4.7" path="prebuilts/gcc/linux-x86/x86/i686-linux-android-4.7" revision="1b26ad444462ccbd97f6319565b4735f7bd779e5"/>
--- a/b2g/config/wasabi/sources.xml
+++ b/b2g/config/wasabi/sources.xml
@@ -12,17 +12,17 @@
   <!--original fetch url was git://github.com/apitrace/-->
   <remote fetch="https://git.mozilla.org/external/apitrace" name="apitrace"/>
   <default remote="caf" revision="ics_chocolate_rb4.2" sync-j="4"/>
   <!-- Gonk specific things and forks -->
   <project name="platform_build" path="build" remote="b2g" revision="1ad48c4be51b279f7f63c1a13025b52fe087d231">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
   <project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
-  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="9cb35e701df44766d9b3560b0defe0a401a0ecdd"/>
+  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="d68074a17d9510623ae4dd3b9f50902af2b36dab"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="15e8982284c4560f9c74c2b9fe8bb361ebfe0cb6"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
   <project name="librecovery" path="librecovery" remote="b2g" revision="1f6a1fe07f81c5bc5e1d079c9b60f7f78ca2bf4f"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="3d5c964015967ca8c86abe6dbbebee3cb82b1609"/>
   <project name="apitrace" path="external/apitrace" remote="apitrace" revision="b2f773d8320d30648b89767dfe5b25ef94bc7e62"/>
   <project name="gonk-patches" path="patches" remote="b2g" revision="223a2421006e8f5da33f516f6891c87cae86b0f6"/>
   <!-- Stock Android things -->
   <project name="platform/abi/cpp" path="abi/cpp" revision="6426040f1be4a844082c9769171ce7f5341a5528"/>
new file mode 100644
--- /dev/null
+++ b/build/docs/cppeclipse.rst
@@ -0,0 +1,54 @@
+.. _build_cppeclipse:
+
+=====================
+Cpp Eclipse Projects
+=====================
+
+For additional information on using Eclipse CDT see
+`the MDN page
+<https://developer.mozilla.org/en-US/docs/Eclipse_CDT>`_.
+
+The build system contains alpha support for generating C++ Eclipse
+project files to aid with development.
+
+Please report bugs to bugzilla and make them depend on bug 973770.
+
+To generate a C++ Eclipse project files, you'll need to have a fully
+built tree::
+
+   mach build
+
+Then, simply generate the Android Eclipse build backend::
+
+   mach build-backend -b CppEclipse
+
+If all goes well, the path to the generated workspace should be
+printed (currently, ``$OBJDIR/android_eclipse``).
+
+To use the generated Android Eclipse project files, you'll need to
+have a Eclipse CDT 8.3 (We plan to follow the latest Eclipse release)
+`Eclipse CDT plugin
+<https://www.eclipse.org/cdt/>`_
+installed. You can then import all the projects into Eclipse using
+*File > Import ... > General > Existing Projects into Workspace*
+-only- if you have not ran the background indexer.
+
+Updating Project Files
+======================
+
+As you pull and update the source tree, your C++ Eclipse files may
+fall out of sync with the build configuration. The tree should still
+build fine from within Eclipse, but source files may be missing and in
+rare circumstances Eclipse's index may not have the proper build
+configuration.
+
+To account for this, you'll want to periodically regenerate the
+Android Eclipse project files. You can do this by running ``mach build
+&& mach build-backend -b CppEclipse`` from the
+command line.
+
+Currently, regeneration rewrites the original project files. **If
+you've made any customizations to the projects, they will likely get
+overwritten.** We would like to improve this user experience in the
+future.
+
--- a/build/docs/index.rst
+++ b/build/docs/index.rst
@@ -17,18 +17,25 @@ Important Concepts
    slow
    environment-variables
    build-targets
    python
    test_manifests
    mozinfo
    preprocessor
    jar-manifests
+
+integrated development environment (IDE)
+========================================
+.. toctree::
+   :maxdepth: 1
+
+   androideclipse
+   cppeclipse
    visualstudio
-   androideclipse
 
 mozbuild
 ========
 
 mozbuild is a Python package containing a lot of the code for the
 Mozilla build system.
 
 .. toctree::
--- a/content/canvas/src/CanvasRenderingContext2D.cpp
+++ b/content/canvas/src/CanvasRenderingContext2D.cpp
@@ -89,24 +89,24 @@
 #include "mozilla/dom/HTMLImageElement.h"
 #include "mozilla/dom/HTMLVideoElement.h"
 #include "mozilla/dom/TextMetrics.h"
 #include "mozilla/dom/UnionTypes.h"
 #include "nsGlobalWindow.h"
 #include "GLContext.h"
 #include "GLContextProvider.h"
 
-#ifdef USE_SKIA_GPU
 #undef free // apparently defined by some windows header, clashing with a free()
             // method in SkTypes.h
-#include "GLContextSkia.h"
+#include "SkiaGLGlue.h"
+#include "SurfaceStream.h"
 #include "SurfaceTypes.h"
-#include "nsIGfxInfo.h"
-#endif
+
 using mozilla::gl::GLContext;
+using mozilla::gl::SkiaGLGlue;
 using mozilla::gl::GLContextProvider;
 
 #ifdef XP_WIN
 #include "gfxWindowsPlatform.h"
 #endif
 
 #ifdef MOZ_WIDGET_GONK
 #include "mozilla/layers/ShadowLayers.h"
@@ -425,38 +425,28 @@ public:
   }
   ~CanvasRenderingContext2DUserData()
   {
     if (mContext) {
       mContext->mUserDatas.RemoveElement(this);
     }
   }
 
-#ifdef USE_SKIA_GPU
   static void PreTransactionCallback(void* aData)
   {
     CanvasRenderingContext2DUserData* self =
       static_cast<CanvasRenderingContext2DUserData*>(aData);
     CanvasRenderingContext2D* context = self->mContext;
-    if (!context)
-      return;
-
-    GLContext* glContext = static_cast<GLContext*>(context->mTarget->GetGLContext());
-    if (!glContext)
+    if (!context || !context->mStream || !context->mTarget)
       return;
 
-    if (context->mTarget) {
-      // Since SkiaGL default to store drawing command until flush
-      // We will have to flush it before present.
-      context->mTarget->Flush();
-    }
-    glContext->MakeCurrent();
-    glContext->PublishFrame();
+    // Since SkiaGL default to store drawing command until flush
+    // We will have to flush it before present.
+    context->mTarget->Flush();
   }
-#endif
 
   static void DidTransactionCallback(void* aData)
   {
     CanvasRenderingContext2DUserData* self =
       static_cast<CanvasRenderingContext2DUserData*>(aData);
     if (self->mContext) {
       self->mContext->MarkContextClean();
     }
@@ -537,45 +527,40 @@ NS_INTERFACE_MAP_END
 
 // Initialize our static variables.
 uint32_t CanvasRenderingContext2D::sNumLivingContexts = 0;
 DrawTarget* CanvasRenderingContext2D::sErrorTarget = nullptr;
 
 
 
 CanvasRenderingContext2D::CanvasRenderingContext2D()
-  : mZero(false), mOpaque(false), mResetLayer(true)
+  : mForceSoftware(false), mZero(false), mOpaque(false), mResetLayer(true)
   , mIPC(false)
+  , mStream(nullptr)
   , mIsEntireFrameInvalid(false)
   , mPredictManyRedrawCalls(false), mPathTransformWillUpdate(false)
   , mInvalidateCount(0)
 {
   sNumLivingContexts++;
   SetIsDOMBinding();
-
-#ifdef USE_SKIA_GPU
-  mForceSoftware = false;
-#endif
 }
 
 CanvasRenderingContext2D::~CanvasRenderingContext2D()
 {
   Reset();
   // Drop references from all CanvasRenderingContext2DUserData to this context
   for (uint32_t i = 0; i < mUserDatas.Length(); ++i) {
     mUserDatas[i]->Forget();
   }
   sNumLivingContexts--;
   if (!sNumLivingContexts) {
     NS_IF_RELEASE(sErrorTarget);
   }
 
-#ifdef USE_SKIA_GPU
   RemoveDemotableContext(this);
-#endif
 }
 
 JSObject*
 CanvasRenderingContext2D::WrapObject(JSContext *cx, JS::Handle<JSObject*> scope)
 {
   return CanvasRenderingContext2DBinding::Wrap(cx, scope, this);
 }
 
@@ -633,16 +618,17 @@ CanvasRenderingContext2D::Reset()
 
   // only do this for non-docshell created contexts,
   // since those are the ones that we created a surface for
   if (mTarget && IsTargetValid() && !mDocShell) {
     gCanvasAzureMemoryUsed -= mWidth * mHeight * 4;
   }
 
   mTarget = nullptr;
+  mStream = nullptr;
 
   // reset hit regions
 #ifdef ACCESSIBILITY
   mHitRegionsOptions.EnumerateEntries(RemoveHitRegionProperty, nullptr);
 #endif
   mHitRegionsOptions.Clear();
 
   // Since the target changes the backing texture will change, and this will
@@ -760,25 +746,25 @@ CanvasRenderingContext2D::RedrawUser(con
 
   mgfx::Rect newr =
     mTarget->GetTransform().TransformBounds(ToRect(r));
   Redraw(newr);
 }
 
 void CanvasRenderingContext2D::Demote()
 {
-#ifdef  USE_SKIA_GPU
-  if (!IsTargetValid() || mForceSoftware || !mTarget->GetGLContext())
+  if (!IsTargetValid() || mForceSoftware || !mStream)
     return;
 
   RemoveDemotableContext(this);
 
   RefPtr<SourceSurface> snapshot = mTarget->Snapshot();
   RefPtr<DrawTarget> oldTarget = mTarget;
   mTarget = nullptr;
+  mStream = nullptr;
   mResetLayer = true;
   mForceSoftware = true;
 
   // Recreate target, now demoted to software only
   EnsureTarget();
   if (!IsTargetValid())
     return;
 
@@ -787,36 +773,29 @@ void CanvasRenderingContext2D::Demote()
   mTarget->DrawSurface(snapshot, r, r);
 
   // Restore the clips and transform
   for (uint32_t i = 0; i < CurrentState().clipsPushed.size(); i++) {
     mTarget->PushClip(CurrentState().clipsPushed[i]);
   }
 
   mTarget->SetTransform(oldTarget->GetTransform());
-#endif
 }
 
-#ifdef USE_SKIA_GPU
-
 std::vector<CanvasRenderingContext2D*>&
 CanvasRenderingContext2D::DemotableContexts()
 {
   static std::vector<CanvasRenderingContext2D*> contexts;
   return contexts;
 }
 
 void
 CanvasRenderingContext2D::DemoteOldestContextIfNecessary()
 {
-#ifdef MOZ_GFX_OPTIMIZE_MOBILE
-  const size_t kMaxContexts = 2;
-#else
-  const size_t kMaxContexts = 16;
-#endif
+  const size_t kMaxContexts = 64;
 
   std::vector<CanvasRenderingContext2D*>& contexts = DemotableContexts();
   if (contexts.size() < kMaxContexts)
     return;
 
   CanvasRenderingContext2D* oldest = contexts.front();
   oldest->Demote();
 }
@@ -840,18 +819,16 @@ CanvasRenderingContext2D::RemoveDemotabl
 }
 
 bool
 CheckSizeForSkiaGL(IntSize size) {
   int minsize = Preferences::GetInt("gfx.canvas.min-size-for-skia-gl", 128);
   return size.width >= minsize && size.height >= minsize;
 }
 
-#endif
-
 void
 CanvasRenderingContext2D::EnsureTarget()
 {
   if (mTarget) {
     return;
   }
 
    // Check that the dimensions are sane
@@ -867,52 +844,39 @@ CanvasRenderingContext2D::EnsureTarget()
     nsRefPtr<LayerManager> layerManager = nullptr;
 
     if (ownerDoc) {
       layerManager =
         nsContentUtils::PersistentLayerManagerForDocument(ownerDoc);
     }
 
      if (layerManager) {
-#ifdef USE_SKIA_GPU
-      if (gfxPlatform::GetPlatform()->UseAcceleratedSkiaCanvas()) {
-        SurfaceCaps caps = SurfaceCaps::ForRGBA();
-        caps.preserve = true;
-
-#ifdef MOZ_WIDGET_GONK
-        layers::ShadowLayerForwarder *forwarder = layerManager->AsShadowForwarder();
-        if (forwarder) {
-          caps.surfaceAllocator = static_cast<layers::ISurfaceAllocator*>(forwarder);
-        }
-#endif
-
+      if (gfxPlatform::GetPlatform()->UseAcceleratedSkiaCanvas() &&
+          !mForceSoftware &&
+          CheckSizeForSkiaGL(size)) {
         DemoteOldestContextIfNecessary();
 
-        nsRefPtr<GLContext> glContext;
-        nsCOMPtr<nsIGfxInfo> gfxInfo = do_GetService("@mozilla.org/gfx/info;1");
-        nsString vendor;
-
-        if (!mForceSoftware && CheckSizeForSkiaGL(size))
-        {
-          glContext = GLContextProvider::CreateOffscreen(gfxIntSize(size.width, size.height),
-                                                         caps);
+        SkiaGLGlue* glue = gfxPlatform::GetPlatform()->GetSkiaGLGlue();
+
+        if (glue) {
+          mTarget = Factory::CreateDrawTargetSkiaWithGrContext(glue->GetGrContext(), size, format);
+          if (mTarget) {
+            mStream = gfx::SurfaceStream::CreateForType(SurfaceStreamType::TripleBuffer, glue->GetGLContext());
+            AddDemotableContext(this);
+          } else {
+            printf_stderr("Failed to create a SkiaGL DrawTarget, falling back to software\n");
+          }
         }
-
-        if (glContext) {
-          SkAutoTUnref<GrGLInterface> i(CreateGrGLInterfaceFromGLContext(glContext));
-          mTarget = Factory::CreateDrawTargetSkiaWithGLContextAndGrGLInterface(glContext, i, size, format);
-          AddDemotableContext(this);
-        } else {
+        if (!mTarget) {
           mTarget = layerManager->CreateDrawTarget(size, format);
         }
       } else
-#endif
-       mTarget = layerManager->CreateDrawTarget(size, format);
+        mTarget = layerManager->CreateDrawTarget(size, format);
      } else {
-       mTarget = gfxPlatform::GetPlatform()->CreateOffscreenCanvasDrawTarget(size, format);
+        mTarget = gfxPlatform::GetPlatform()->CreateOffscreenCanvasDrawTarget(size, format);
      }
   }
 
   if (mTarget) {
     static bool registered = false;
     if (!registered) {
       registered = true;
       RegisterStrongMemoryReporter(new Canvas2dPixelsReporter());
@@ -1087,22 +1051,20 @@ CanvasRenderingContext2D::SetContextOpti
 {
   if (aOptions.isNullOrUndefined()) {
     return NS_OK;
   }
 
   ContextAttributes2D attributes;
   NS_ENSURE_TRUE(attributes.Init(aCx, aOptions), NS_ERROR_UNEXPECTED);
 
-#ifdef USE_SKIA_GPU
   if (Preferences::GetBool("gfx.canvas.willReadFrequently.enable", false)) {
     // Use software when there is going to be a lot of readback
     mForceSoftware = attributes.mWillReadFrequently;
   }
-#endif
 
   return NS_OK;
 }
 
 void
 CanvasRenderingContext2D::GetImageBuffer(uint8_t** aImageBuffer,
                                          int32_t* aFormat)
 {
@@ -3335,33 +3297,31 @@ CanvasRenderingContext2D::DrawDirectlyTo
          gfxRect(gfxPoint(dx, dy), gfxIntSize(dw, dh)),
          nsIntRect(nsIntPoint(0, 0), gfxIntSize(imgSize.width, imgSize.height)),
          gfxIntSize(imgSize.width, imgSize.height), nullptr, image.mWhichFrame,
          modifiedFlags);
 
   NS_ENSURE_SUCCESS_VOID(rv);
 }
 
-#ifdef USE_SKIA_GPU
 static bool
 IsStandardCompositeOp(CompositionOp op)
 {
     return (op == CompositionOp::OP_SOURCE ||
             op == CompositionOp::OP_ATOP ||
             op == CompositionOp::OP_IN ||
             op == CompositionOp::OP_OUT ||
             op == CompositionOp::OP_OVER ||
             op == CompositionOp::OP_DEST_IN ||
             op == CompositionOp::OP_DEST_OUT ||
             op == CompositionOp::OP_DEST_OVER ||
             op == CompositionOp::OP_DEST_ATOP ||
             op == CompositionOp::OP_ADD ||
             op == CompositionOp::OP_XOR);
 }
-#endif
 
 void
 CanvasRenderingContext2D::SetGlobalCompositeOperation(const nsAString& op,
                                                       ErrorResult& error)
 {
   CompositionOp comp_op;
 
 #define CANVAS_OP_TO_GFX_OP(cvsop, op2d) \
@@ -3392,21 +3352,19 @@ CanvasRenderingContext2D::SetGlobalCompo
   else CANVAS_OP_TO_GFX_OP("exclusion", EXCLUSION)
   else CANVAS_OP_TO_GFX_OP("hue", HUE)
   else CANVAS_OP_TO_GFX_OP("saturation", SATURATION)
   else CANVAS_OP_TO_GFX_OP("color", COLOR)
   else CANVAS_OP_TO_GFX_OP("luminosity", LUMINOSITY)
   // XXX ERRMSG we need to report an error to developers here! (bug 329026)
   else return;
 
-#ifdef USE_SKIA_GPU
   if (!IsStandardCompositeOp(comp_op)) {
     Demote();
   }
-#endif
 
 #undef CANVAS_OP_TO_GFX_OP
   CurrentState().op = comp_op;
 }
 
 void
 CanvasRenderingContext2D::GetGlobalCompositeOperation(nsAString& op,
                                                       ErrorResult& error)
@@ -3442,21 +3400,19 @@ CanvasRenderingContext2D::GetGlobalCompo
   else CANVAS_OP_TO_GFX_OP("hue", HUE)
   else CANVAS_OP_TO_GFX_OP("saturation", SATURATION)
   else CANVAS_OP_TO_GFX_OP("color", COLOR)
   else CANVAS_OP_TO_GFX_OP("luminosity", LUMINOSITY)
   else {
     error.Throw(NS_ERROR_FAILURE);
   }
 
-#ifdef USE_SKIA_GPU
   if (!IsStandardCompositeOp(comp_op)) {
     Demote();
   }
-#endif
 
 #undef CANVAS_OP_TO_GFX_OP
 }
 
 void
 CanvasRenderingContext2D::DrawWindow(nsGlobalWindow& window, double x,
                                      double y, double w, double h,
                                      const nsAString& bgColor,
@@ -4146,17 +4102,27 @@ CanvasRenderingContext2D::GetCanvasLayer
   mTarget->Flush();
 
   if (!mResetLayer && aOldLayer) {
     CanvasRenderingContext2DUserData* userData =
       static_cast<CanvasRenderingContext2DUserData*>(
         aOldLayer->GetUserData(&g2DContextLayerUserData));
 
     CanvasLayer::Data data;
-    data.mGLContext = static_cast<GLContext*>(mTarget->GetGLContext());
+    if (mStream) {
+      SkiaGLGlue* glue = gfxPlatform::GetPlatform()->GetSkiaGLGlue();
+
+      if (glue) {
+        data.mGLContext = glue->GetGLContext();
+        data.mStream = mStream.get();
+      }
+    } else {
+      data.mDrawTarget = mTarget;
+    }
+
     if (userData && userData->IsForContext(this) && aOldLayer->IsDataValid(data)) {
       nsRefPtr<CanvasLayer> ret = aOldLayer;
       return ret.forget();
     }
   }
 
   nsRefPtr<CanvasLayer> canvasLayer = aManager->CreateCanvasLayer();
   if (!canvasLayer) {
@@ -4179,25 +4145,27 @@ CanvasRenderingContext2D::GetCanvasLayer
   // The userData will receive DidTransactionCallbacks, which flush the
   // the invalidation state to indicate that the canvas is up to date.
   userData = new CanvasRenderingContext2DUserData(this);
   canvasLayer->SetDidTransactionCallback(
           CanvasRenderingContext2DUserData::DidTransactionCallback, userData);
   canvasLayer->SetUserData(&g2DContextLayerUserData, userData);
 
   CanvasLayer::Data data;
-#ifdef USE_SKIA_GPU
-  GLContext* glContext = static_cast<GLContext*>(mTarget->GetGLContext());
-  if (glContext) {
-    canvasLayer->SetPreTransactionCallback(
-            CanvasRenderingContext2DUserData::PreTransactionCallback, userData);
-    data.mGLContext = glContext;
-  } else
-#endif
-  {
+  if (mStream) {
+    SkiaGLGlue* glue = gfxPlatform::GetPlatform()->GetSkiaGLGlue();
+
+    if (glue) {
+      canvasLayer->SetPreTransactionCallback(
+              CanvasRenderingContext2DUserData::PreTransactionCallback, userData);
+      data.mGLContext = glue->GetGLContext();
+      data.mStream = mStream.get();
+      data.mTexID = (uint32_t)((uintptr_t)mTarget->GetNativeSurface(NativeSurfaceType::OPENGL_TEXTURE));
+    }
+  } else {
     data.mDrawTarget = mTarget;
   }
 
   data.mSize = nsIntSize(mWidth, mHeight);
 
   canvasLayer->Initialize(data);
   uint32_t flags = mOpaque ? Layer::CONTENT_OPAQUE : 0;
   canvasLayer->SetContentFlags(flags);
--- a/content/canvas/src/CanvasRenderingContext2D.h
+++ b/content/canvas/src/CanvasRenderingContext2D.h
@@ -26,16 +26,17 @@
 #include "nsLayoutUtils.h"
 
 class nsGlobalWindow;
 class nsXULElement;
 
 namespace mozilla {
 namespace gfx {
 class SourceSurface;
+class SurfaceStream;
 }
 
 namespace dom {
 class HTMLImageElementOrHTMLCanvasElementOrHTMLVideoElement;
 class ImageData;
 class StringOrCanvasGradientOrCanvasPattern;
 class OwningStringOrCanvasGradientOrCanvasPattern;
 class TextMetrics;
@@ -591,26 +592,24 @@ protected:
   nsString& GetFont()
   {
     /* will initilize the value if not set, else does nothing */
     GetCurrentFontStyle();
 
     return CurrentState().font;
   }
 
-#if USE_SKIA_GPU
   static std::vector<CanvasRenderingContext2D*>& DemotableContexts();
   static void DemoteOldestContextIfNecessary();
 
   static void AddDemotableContext(CanvasRenderingContext2D* context);
   static void RemoveDemotableContext(CanvasRenderingContext2D* context);
 
   // Do not use GL
   bool mForceSoftware;
-#endif
 
   // Member vars
   int32_t mWidth, mHeight;
 
   // This is true when the canvas is valid, but of zero size, this requires
   // specific behavior on some operations.
   bool mZero;
 
@@ -627,16 +626,18 @@ protected:
   // If mCanvasElement is not provided, then a docshell is
   nsCOMPtr<nsIDocShell> mDocShell;
 
   // This is created lazily so it is necessary to call EnsureTarget before
   // accessing it. In the event of an error it will be equal to
   // sErrorTarget.
   mozilla::RefPtr<mozilla::gfx::DrawTarget> mTarget;
 
+  RefPtr<gfx::SurfaceStream> mStream;
+
   /**
     * Flag to avoid duplicate calls to InvalidateFrame. Set to true whenever
     * Redraw is called, reset to false when Render is called.
     */
   bool mIsEntireFrameInvalid;
   /**
     * When this is set, the first call to Redraw(gfxRect) should set
     * mIsEntireFrameInvalid since we expect it will be followed by
--- a/content/canvas/src/WebGLContextGL.cpp
+++ b/content/canvas/src/WebGLContextGL.cpp
@@ -1338,16 +1338,21 @@ WebGLContext::GetFramebufferAttachmentPa
     if (IsContextLost())
         return JS::NullValue();
 
     if (target != LOCAL_GL_FRAMEBUFFER) {
         ErrorInvalidEnumInfo("getFramebufferAttachmentParameter: target", target);
         return JS::NullValue();
     }
 
+    if (!mBoundFramebuffer) {
+        ErrorInvalidOperation("getFramebufferAttachmentParameter: cannot query framebuffer 0");
+        return JS::NullValue();
+    }
+
     if (attachment != LOCAL_GL_DEPTH_ATTACHMENT &&
         attachment != LOCAL_GL_STENCIL_ATTACHMENT &&
         attachment != LOCAL_GL_DEPTH_STENCIL_ATTACHMENT)
     {
         if (IsExtensionEnabled(WEBGL_draw_buffers))
         {
             if (attachment < LOCAL_GL_COLOR_ATTACHMENT0 ||
                 attachment >= GLenum(LOCAL_GL_COLOR_ATTACHMENT0 + mGLMaxColorAttachments))
@@ -1360,21 +1365,16 @@ WebGLContext::GetFramebufferAttachmentPa
         }
         else if (attachment != LOCAL_GL_COLOR_ATTACHMENT0)
         {
             ErrorInvalidEnumInfo("getFramebufferAttachmentParameter: attachment", attachment);
             return JS::NullValue();
         }
     }
 
-    if (!mBoundFramebuffer) {
-        ErrorInvalidOperation("getFramebufferAttachmentParameter: cannot query framebuffer 0");
-        return JS::NullValue();
-    }
-
     MakeContextCurrent();
 
     const WebGLFramebuffer::Attachment& fba = mBoundFramebuffer->GetAttachment(attachment);
 
     if (fba.Renderbuffer()) {
         switch (pname) {
             case LOCAL_GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT:
                 if (IsExtensionEnabled(EXT_sRGB)) {
--- a/content/canvas/test/webgl/non-conf-tests/mochitest.ini
+++ b/content/canvas/test/webgl/non-conf-tests/mochitest.ini
@@ -1,14 +1,16 @@
 [DEFAULT]
 support-files =
   driver-info.js
   webgl-util.js
 
 [test_depth_readpixels.html]
+[test_fb_param.html]
+[test_fb_param_crash.html]
 [test_highp_fs.html]
 [test_no_arr_points.html]
 [test_privileged_exts.html]
 [test_webgl_available.html]
 [test_webgl_conformance.html]
 [test_webgl_request_context.html]
 [test_webgl_request_mismatch.html]
 [test_webgl2_not_exposed.html]
new file mode 100644
--- /dev/null
+++ b/content/canvas/test/webgl/non-conf-tests/test_fb_param.html
@@ -0,0 +1,55 @@
+<!DOCTYPE HTML>
+<title>WebGL test: bug 958491</title>
+<script src="/MochiKit/MochiKit.js"></script>
+<script src="/tests/SimpleTest/SimpleTest.js"></script>
+<link rel="stylesheet" href="/tests/SimpleTest/test.css">
+<script src="driver-info.js"></script>
+<script src="webgl-util.js"></script>
+<body>
+<canvas id="c"></canvas>
+<script>
+
+// Give ourselves a scope to return early from:
+(function() {
+  var gl = WebGLUtil.getWebGL('c');
+  if (!gl) {
+    todo(false, 'WebGL is unavailable.');
+    return;
+  }
+
+  // Catch actual WebGLUtil errors, not GL errors.
+  function errorFunc(str) {
+    ok(false, 'Error: ' + str);
+  }
+  WebGLUtil.setErrorFunc(errorFunc);
+
+  function checkGLError(func, info, reference) {
+    var error = gl.getError();
+    var prefix = info ? ('[' + info + '] ') : '';
+    var text = 'gl.getError should be 0x' + reference.toString(16) +
+               ', was 0x' + error.toString(16) + '.';
+    func(error == reference, prefix + text);
+  }
+
+  // Begin test:
+  var rb = gl.createRenderbuffer();
+  gl.bindRenderbuffer(gl.RENDERBUFFER, rb);
+  gl.renderbufferStorage(gl.RENDERBUFFER, gl.RGBA4, 4, 4);
+
+  var fb = gl.createFramebuffer();
+  gl.bindFramebuffer(gl.FRAMEBUFFER, fb);
+  gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0,
+                             gl.RENDERBUFFER, rb);
+
+  checkGLError(ok, 'before bad param query', 0);
+
+  var GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING = 0x8210;
+  var result = gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER,
+                                                    gl.COLOR_ATTACHMENT0,
+                                                    GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING);
+
+  checkGLError(ok, 'after bad param query', gl.INVALID_ENUM);
+})();
+
+</script>
+
new file mode 100644
--- /dev/null
+++ b/content/canvas/test/webgl/non-conf-tests/test_fb_param_crash.html
@@ -0,0 +1,49 @@
+<!DOCTYPE HTML>
+<title>WebGL test: bug 958723</title>
+<script src="/MochiKit/MochiKit.js"></script>
+<script src="/tests/SimpleTest/SimpleTest.js"></script>
+<link rel="stylesheet" href="/tests/SimpleTest/test.css">
+<script src="driver-info.js"></script>
+<script src="webgl-util.js"></script>
+<body>
+<canvas id="c"></canvas>
+<script>
+
+// Give ourselves a scope to return early from:
+(function() {
+  var gl = WebGLUtil.getWebGL('c');
+  if (!gl) {
+    todo(false, 'WebGL is unavailable.');
+    return;
+  }
+
+  // Catch actual WebGLUtil errors, not GL errors.
+  function errorFunc(str) {
+    ok(false, 'Error: ' + str);
+  }
+  WebGLUtil.setErrorFunc(errorFunc);
+
+  function checkGLError(func, info, reference) {
+    var error = gl.getError();
+    var prefix = info ? ('[' + info + '] ') : '';
+    var text = 'gl.getError should be 0x' + reference.toString(16) +
+               ', was 0x' + error.toString(16) + '.';
+    func(error == reference, prefix + text);
+  }
+
+  // Begin test:
+  if (!gl.getExtension('WEBGL_draw_buffers')) {
+    todo(false, 'Not having this extension is fine.');
+    return;
+  }
+  checkGLError(ok, 'before bad param query', 0);
+
+  var result = gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER,
+                                                    gl.COLOR_ATTACHMENT0,
+                                                    gl.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME);
+
+  checkGLError(ok, 'after bad param query', gl.INVALID_OPERATION);
+})();
+
+</script>
+
--- a/content/html/content/src/HTMLInputElement.cpp
+++ b/content/html/content/src/HTMLInputElement.cpp
@@ -6112,17 +6112,17 @@ HTMLInputElement::GetValueMode() const
       return VALUE_MODE_VALUE;
 #endif // DEBUG
   }
 }
 
 bool
 HTMLInputElement::IsMutable() const
 {
-  return !IsDisabled() && GetCurrentDoc() &&
+  return !IsDisabled() &&
          !(DoesReadOnlyApply() &&
            HasAttr(kNameSpaceID_None, nsGkAtoms::readonly));
 }
 
 bool
 HTMLInputElement::DoesReadOnlyApply() const
 {
   switch (mType)
--- a/content/html/content/test/forms/mochitest.ini
+++ b/content/html/content/test/forms/mochitest.ini
@@ -68,8 +68,9 @@ skip-if = os == "android" || appname == 
 [test_step_attribute.html]
 [test_stepup_stepdown.html]
 [test_submit_invalid_file.html]
 [test_textarea_attributes_reflection.html]
 [test_validation.html]
 [test_valueAsDate_pref.html]
 [test_valueasdate_attribute.html]
 [test_valueasnumber_attribute.html]
+[test_validation_not_in_doc.html]
--- a/content/html/content/test/forms/test_required_attribute.html
+++ b/content/html/content/test/forms/test_required_attribute.html
@@ -180,18 +180,20 @@ function checkInputRequiredValidity(type
   element.required = true;
   SpecialPowers.wrap(element).value = 'foobar';
   element.blur();
   element.form.reset();
   checkSufferingFromBeingMissing(element, false);
 
   element.required = true;
   SpecialPowers.wrap(element).value = ''; // To make :-moz-ui-valid apply.
+  checkSufferingFromBeingMissing(element, true);
   document.forms[0].removeChild(element);
-  checkNotSufferingFromBeingMissing(element);
+  // Removing the child changes nothing about whether it's valid
+  checkSufferingFromBeingMissing(element, true);
 }
 
 function checkInputRequiredValidityForCheckbox()
 {
   var element = document.createElement('input');
   element.type = 'checkbox';
   document.forms[0].appendChild(element);
 
@@ -216,17 +218,17 @@ function checkInputRequiredValidityForCh
   element.checked = true;
   element.blur();
   element.form.reset();
   checkSufferingFromBeingMissing(element, false);
 
   element.required = true;
   element.checked = false;
   document.forms[0].removeChild(element);
-  checkNotSufferingFromBeingMissing(element);
+  checkSufferingFromBeingMissing(element, true);
 }
 
 function checkInputRequiredValidityForRadio()
 {
   var element = document.createElement('input');
   element.type = 'radio';
   element.name = 'test'
   document.forms[0].appendChild(element);
@@ -292,17 +294,17 @@ function checkInputRequiredValidityForRa
   element2.checked = true;
   element2.blur();
   element2.form.reset();
   checkSufferingFromBeingMissing(element2, false);
 
   element2.required = true;
   element2.checked = false;
   document.forms[0].removeChild(element2);
-  checkNotSufferingFromBeingMissing(element2);
+  checkSufferingFromBeingMissing(element2, true);
 }
 
 function checkInputRequiredValidityForFile()
 {
   var element = document.createElement('input');
   element.type = 'file'
   document.forms[0].appendChild(element);
 
@@ -345,17 +347,17 @@ function checkInputRequiredValidityForFi
   element.blur();
   element.form.reset();
   checkSufferingFromBeingMissing(element, false);
 
   element.required = true;
   SpecialPowers.wrap(element).value = '';
   file.remove(false);
   document.forms[0].removeChild(element);
-  checkNotSufferingFromBeingMissing(element);
+  checkSufferingFromBeingMissing(element, true);
 }
 
 checkTextareaRequiredValidity();
 
 // The require attribute behavior depend of the input type.
 // First of all, checks for types that make the element barred from
 // constraint validation.
 var typeBarredFromConstraintValidation = ["hidden", "button", "reset", "submit", "image"];
new file mode 100644
--- /dev/null
+++ b/content/html/content/test/forms/test_validation_not_in_doc.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>Test for constraint validation of form controls not in documents</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+test(function() {
+  var input = document.createElement('input');
+  input.required = true;
+  assert_false(input.checkValidity());
+}, "Should validate input not in document");
+
+test(function() {
+  var textarea = document.createElement('textarea');
+  textarea.required = true;
+  assert_false(textarea.checkValidity());
+}, "Should validate textarea not in document");
+</script>
--- a/content/html/content/test/test_bug610687.html
+++ b/content/html/content/test/test_bug610687.html
@@ -124,17 +124,17 @@ function checkRadios(r1, r2, r3, form)
   r2.required = true;
   r1.checked = r2.checked = false;
   checkPseudoClasses(r1, false, false, true);
   checkPseudoClasses(r2, false, false, true);
 
   var p = r2.parentNode;
   p.removeChild(r2);
   checkPseudoClasses(r1, true, true, false);
-  checkPseudoClasses(r2, true, true, false);
+  checkPseudoClasses(r2, false, false, true);
 
   p.appendChild(r2);
   checkPseudoClasses(r1, false, false, true);
   checkPseudoClasses(r2, false, false, true);
 
   // Adding a radio element to an invalid group should make it invalid.
   p.removeChild(r1);
   checkPseudoClasses(r1, true, true, false);
--- a/content/media/webaudio/test/mochitest.ini
+++ b/content/media/webaudio/test/mochitest.ini
@@ -58,17 +58,16 @@ support-files =
 [test_bug866737.html]
 [test_bug867089.html]
 [test_bug867104.html]
 [test_bug867174.html]
 [test_bug867203.html]
 [test_bug875221.html]
 [test_bug875402.html]
 [test_bug894150.html]
-[test_bug938022.html]
 [test_bug956489.html]
 [test_bug964376.html]
 [test_bug972678.html]
 [test_channelMergerNode.html]
 [test_channelMergerNodeWithVolume.html]
 [test_channelSplitterNode.html]
 [test_channelSplitterNodeWithVolume.html]
 [test_convolverNode.html]
@@ -103,16 +102,17 @@ support-files =
 [test_offlineDestinationChannelCountMore.html]
 [test_oscillatorNode.html]
 [test_oscillatorNode2.html]
 [test_oscillatorNodeStart.html]
 [test_oscillatorTypeChange.html]
 [test_pannerNode.html]
 [test_pannerNodeAbove.html]
 [test_pannerNodeChannelCount.html]
+[test_pannerNodeHRTFSymmetry.html]
 [test_pannerNodeTail.html]
 [test_pannerNode_equalPower.html]
 [test_periodicWave.html]
 [test_scriptProcessorNode.html]
 [test_scriptProcessorNodeChannelCount.html]
 [test_scriptProcessorNodeZeroInputOutput.html]
 [test_scriptProcessorNodeNotConnected.html]
 [test_stereoPanningWithGain.html]
deleted file mode 100644
--- a/content/media/webaudio/test/test_bug938022.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<head>
-  <title>Test audio element currentTime is correct when used as media source</title>
-  <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
-  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
-</head>
-<body>
-<pre id="test">
-<script class="testbody" type="text/javascript">
-SimpleTest.waitForExplicitFinish();
-addLoadEvent(function() {
-  var context = new AudioContext();
-  var audio = new Audio("small-shot.ogg");
-  audio.load();
-  audio.addEventListener("loadeddata", function (e) {
-    is(this.currentTime, 0, "currentTime must be 0");
-    SimpleTest.finish();
-  });
-  audio.play();
-
-  var source = context.createMediaElementSource(audio);
-  source.connect(context.destination);
-});
-</script>
-</pre>
-</body>
-</html>
new file mode 100644
--- /dev/null
+++ b/content/media/webaudio/test/test_pannerNodeHRTFSymmetry.html
@@ -0,0 +1,104 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <title>Test left/right symmetry and block-offset invariance of HRTF panner</title>
+  <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
+  <script type="text/javascript" src="webaudio.js"></script>
+  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
+</head>
+<body>
+<pre id="test">
+<script class="testbody" type="text/javascript">
+
+SimpleTest.waitForExplicitFinish();
+
+const blockSize = 128;
+const bufferSize = 4096; // > HRTF panner latency
+
+var ctx = new AudioContext();
+
+function isChannelSilent(channel) {
+  for (var i = 0; i < channel.length; ++i) {
+    if (channel[i] != 0.0) {
+      return false;
+    }
+  }
+  return true;
+}
+
+function startTest() {
+  var leftPanner = ctx.createPanner();
+  var rightPanner = ctx.createPanner();
+  leftPanner.setPosition(-1,0,0);
+  rightPanner.setPosition(1,0,0);
+
+  // Test that PannerNode processes the signal consistently irrespective of
+  // the offset in the processing block.  This is done by inserting a delay of
+  // less than a block size before one panner.
+  const delayTime = 0.7 * blockSize / ctx.sampleRate;
+  var leftDelay = ctx.createDelay(delayTime);
+  leftDelay.delayTime.value = delayTime;
+  leftDelay.connect(leftPanner);
+  // and compensating for the delay after the other.
+  var rightDelay = ctx.createDelay(delayTime);
+  rightDelay.delayTime.value = delayTime;
+  rightPanner.connect(rightDelay);
+
+  // Feed the panners with a signal having some harmonics to fill the spectrum.
+  var oscillator = ctx.createOscillator();
+  oscillator.frequency.value = 110;
+  oscillator.type = "sawtooth";
+  oscillator.connect(leftDelay);
+  oscillator.connect(rightPanner);
+  oscillator.start(0);
+
+  // Switch the channels on one panner output, and it should match the other.
+  var splitter = ctx.createChannelSplitter();
+  leftPanner.connect(splitter);
+  var merger = ctx.createChannelMerger();
+  splitter.connect(merger, 0, 1);
+  splitter.connect(merger, 1, 0);
+
+  // Invert one signal so that mixing with the other will find the difference.
+  var gain = ctx.createGain();
+  gain.gain.value = -1.0;
+  merger.connect(gain);
+
+  var processor = ctx.createScriptProcessor(bufferSize, 2, 0);
+  gain.connect(processor);
+  rightDelay.connect(processor);
+  processor.onaudioprocess =
+    function(e) {
+      compareBuffers(e.inputBuffer,
+                     ctx.createBuffer(2, bufferSize, ctx.sampleRate));
+      e.target.onaudioprocess = null;
+      SimpleTest.finish();
+    }
+}
+
+function prepareTest() {
+  // A PannerNode will produce no output until it has loaded its HRIR
+  // database.  Wait for this to load before starting the test.
+  var processor = ctx.createScriptProcessor(bufferSize, 2, 0);
+  var panner = ctx.createPanner();
+  panner.connect(processor);
+  var oscillator = ctx.createOscillator();
+  oscillator.connect(panner);
+  oscillator.start(0);
+
+  processor.onaudioprocess =
+    function(e) {
+      if (isChannelSilent(e.inputBuffer.getChannelData(0)))
+        return;
+
+      oscillator.stop(0);
+      panner.disconnect();
+      e.target.onaudioprocess = null;
+      startTest();
+    };
+}
+prepareTest();
+</script>
+</pre>
+</body>
+</html>
--- a/content/media/webrtc/LoadMonitor.cpp
+++ b/content/media/webrtc/LoadMonitor.cpp
@@ -4,16 +4,17 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #include "LoadMonitor.h"
 #include "nsString.h"
 #include "prlog.h"
 #include "prtime.h"
 #include "prinrval.h"
 #include "prsystem.h"
+#include "prprf.h"
 
 #include "nsString.h"
 #include "nsThreadUtils.h"
 #include "nsReadableUtils.h"
 #include "nsNetUtil.h"
 #include "nsILineInputStream.h"
 #include "nsIObserverService.h"
 #include "nsIServiceManager.h"
@@ -209,19 +210,19 @@ nsresult LoadInfo::UpdateSystemLoad()
   nsAutoCString buffer;
   bool isMore = true;
   lineInputStream->ReadLine(buffer, &isMore);
 
   uint64_t user;
   uint64_t nice;
   uint64_t system;
   uint64_t idle;
-  if (sscanf(buffer.get(), "cpu %Lu %Lu %Lu %Lu",
-             &user, &nice,
-             &system, &idle) != 4) {
+  if (PR_sscanf(buffer.get(), "cpu %llu %llu %llu %llu",
+                &user, &nice,
+                &system, &idle) != 4) {
     LOG(("Error parsing /proc/stat"));
     return NS_ERROR_FAILURE;
   }
 
   const uint64_t cpu_times = nice + system + user;
   const uint64_t total_times = cpu_times + idle;
 
   UpdateCpuLoad(total_times,
--- a/dom/bindings/Codegen.py
+++ b/dom/bindings/Codegen.py
@@ -265,26 +265,35 @@ class CGDOMProxyJSClass(CGThing):
     Generate a DOMJSClass for a given proxy descriptor
     """
     def __init__(self, descriptor):
         CGThing.__init__(self)
         self.descriptor = descriptor
     def declare(self):
         return ""
     def define(self):
+        flags = ["JSCLASS_IS_DOMJSCLASS"]
+        # We don't use an IDL annotation for JSCLASS_EMULATES_UNDEFINED because
+        # we don't want people ever adding that to any interface other than
+        # HTMLAllCollection.  So just hardcode it here.
+        if self.descriptor.interface.identifier.name == "HTMLAllCollection":
+            flags.append("JSCLASS_EMULATES_UNDEFINED")
+        callHook = LEGACYCALLER_HOOK_NAME if self.descriptor.operations["LegacyCaller"] else 'nullptr'
         return """
 static const DOMJSClass Class = {
   PROXY_CLASS_DEF("%s",
                   0, /* extra slots */
-                  JSCLASS_IS_DOMJSCLASS,
-                  nullptr, /* call */
+                  %s,
+                  %s, /* call */
                   nullptr  /* construct */),
 %s
 };
 """ % (self.descriptor.interface.identifier.name,
+       " | ".join(flags),
+       callHook,
        CGIndenter(CGGeneric(DOMClass(self.descriptor))).define())
 
 def PrototypeIDAndDepth(descriptor):
     prototypeID = "prototypes::id::"
     if descriptor.interface.hasInterfacePrototypeObject():
         prototypeID += descriptor.interface.identifier.name
         if descriptor.workers:
             prototypeID += "_workers"
--- a/dom/bindings/Configuration.py
+++ b/dom/bindings/Configuration.py
@@ -348,20 +348,16 @@ class Descriptor(DescriptorProvider):
                                       (self.interface, self.interface.location))
                 if (not operations['NamedGetter'] and
                     (operations['NamedSetter'] or
                      operations['NamedDeleter'] or
                      operations['NamedCreator'])):
                     raise SyntaxError("%s supports named properties but does "
                                       "not have a named getter.\n%s" %
                                       (self.interface, self.interface.location))
-                if operations['LegacyCaller']:
-                    raise SyntaxError("%s has a legacy caller but is a proxy; "
-                                      "we don't support that yet.\n%s" %
-                                      (self.interface, self.interface.location))
                 iface = self.interface
                 while iface:
                     iface.setUserData('hasProxyDescendant', True)
                     iface = iface.parent
         self.operations = operations
 
         self.nativeOwnership = desc.get('nativeOwnership', 'refcounted')
         if not self.nativeOwnership in ('owned', 'refcounted'):
--- a/dom/bindings/test/TestBindingHeader.h
+++ b/dom/bindings/test/TestBindingHeader.h
@@ -962,16 +962,17 @@ public:
   // We need a GetParentObject to make binding codegen happy
   virtual nsISupports* GetParentObject();
 
   uint32_t IndexedGetter(uint32_t, bool&);
   uint32_t IndexedGetter(uint32_t&) MOZ_DELETE;
   uint32_t Item(uint32_t&);
   uint32_t Item(uint32_t, bool&) MOZ_DELETE;
   uint32_t Length();
+  void LegacyCall(JS::Handle<JS::Value>);
 };
 
 class TestNamedGetterInterface : public nsISupports,
                                  public nsWrapperCache
 {
 public:
   NS_DECL_ISUPPORTS
 
--- a/dom/bindings/test/TestCodeGen.webidl
+++ b/dom/bindings/test/TestCodeGen.webidl
@@ -871,16 +871,17 @@ dictionary DictForConstructor {
   object obj1;
   object? obj2;
   any any1 = null;
 };
 
 interface TestIndexedGetterInterface {
   getter long item(unsigned long idx);
   readonly attribute unsigned long length;
+  legacycaller void();
 };
 
 interface TestNamedGetterInterface {
   getter DOMString (DOMString name);
 };
 
 interface TestIndexedGetterAndSetterAndNamedGetterInterface {
   getter DOMString (DOMString myName);
--- a/dom/media/MediaManager.cpp
+++ b/dom/media/MediaManager.cpp
@@ -1,8 +1,10 @@
+/* -*- Mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; tab-width: 40 -*- */
+/* vim: set ts=2 et sw=2 tw=80: */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
  * You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #include "MediaManager.h"
 
 #include "MediaStreamGraph.h"
 #include "GetUserMediaRequest.h"
@@ -220,70 +222,69 @@ private:
  * so that it may be called on the main thread. The error callback is also
  * passed so it can be released correctly.
  */
 class DeviceSuccessCallbackRunnable: public nsRunnable
 {
 public:
   DeviceSuccessCallbackRunnable(
     uint64_t aWindowID,
-    already_AddRefed<nsIGetUserMediaDevicesSuccessCallback> aSuccess,
-    already_AddRefed<nsIDOMGetUserMediaErrorCallback> aError,
+    nsCOMPtr<nsIGetUserMediaDevicesSuccessCallback>& aSuccess,
+    nsCOMPtr<nsIDOMGetUserMediaErrorCallback>& aError,
     nsTArray<nsCOMPtr<nsIMediaDevice> >* aDevices)
-    : mSuccess(aSuccess)
-    , mError(aError)
-    , mDevices(aDevices)
+    : mDevices(aDevices)
     , mWindowID(aWindowID)
-    , mManager(MediaManager::GetInstance()) {}
+    , mManager(MediaManager::GetInstance())
+  {
+    mSuccess.swap(aSuccess);
+    mError.swap(aError);
+  }
 
   NS_IMETHOD
   Run()
   {
     NS_ASSERTION(NS_IsMainThread(), "Only call on main thread");
 
-    nsCOMPtr<nsIGetUserMediaDevicesSuccessCallback> success(mSuccess);
-    nsCOMPtr<nsIDOMGetUserMediaErrorCallback> error(mError);
-
     // Only run if window is still on our active list.
     if (!mManager->IsWindowStillActive(mWindowID)) {
       return NS_OK;
     }
 
     nsCOMPtr<nsIWritableVariant> devices =
       do_CreateInstance("@mozilla.org/variant;1");
 
     int32_t len = mDevices->Length();
     if (len == 0) {
       // XXX
       // We should in the future return an empty array, and dynamically add
       // devices to the dropdowns if things are hotplugged while the
       // requester is up.
-      error->OnError(NS_LITERAL_STRING("NO_DEVICES_FOUND"));
+      mError->OnError(NS_LITERAL_STRING("NO_DEVICES_FOUND"));
       return NS_OK;
     }
 
     nsTArray<nsIMediaDevice*> tmp(len);
     for (int32_t i = 0; i < len; i++) {
       tmp.AppendElement(mDevices->ElementAt(i));
     }
 
     devices->SetAsArray(nsIDataType::VTYPE_INTERFACE,
                         &NS_GET_IID(nsIMediaDevice),
                         mDevices->Length(),
                         const_cast<void*>(
                           static_cast<const void*>(tmp.Elements())
                         ));
 
-    success->OnSuccess(devices);
+    mSuccess->OnSuccess(devices);
     return NS_OK;
   }
 
 private:
-  already_AddRefed<nsIGetUserMediaDevicesSuccessCallback> mSuccess;
-  already_AddRefed<nsIDOMGetUserMediaErrorCallback> mError;
+  nsCOMPtr<nsIGetUserMediaDevicesSuccessCallback> mSuccess;
+  nsCOMPtr<nsIDOMGetUserMediaErrorCallback> mError;
   nsAutoPtr<nsTArray<nsCOMPtr<nsIMediaDevice> > > mDevices;
   uint64_t mWindowID;
   nsRefPtr<MediaManager> mManager;
 };
 
 // Handle removing GetUserMediaCallbackMediaStreamListener from main thread
 class GetUserMediaListenerRemove: public nsRunnable
 {
@@ -1094,23 +1095,25 @@ public:
       ScopedDeletePtr<SourceSet> s (GetSources(backend, mConstraints.mAudiom,
                                         &MediaEngine::EnumerateAudioDevices,
                                         mLoopbackAudioDevice));
       final->MoveElementsFrom(*s);
     }
     NS_DispatchToMainThread(new DeviceSuccessCallbackRunnable(mWindowId,
                                                               mSuccess, mError,
                                                               final.forget()));
+    // DeviceSuccessCallbackRunnable should have taken these.
+    MOZ_ASSERT(!mSuccess && !mError);
     return NS_OK;
   }
 
 private:
   MediaStreamConstraintsInternal mConstraints;
-  already_AddRefed<nsIGetUserMediaDevicesSuccessCallback> mSuccess;
-  already_AddRefed<nsIDOMGetUserMediaErrorCallback> mError;
+  nsCOMPtr<nsIGetUserMediaDevicesSuccessCallback> mSuccess;
+  nsCOMPtr<nsIDOMGetUserMediaErrorCallback> mError;
   nsRefPtr<MediaManager> mManager;
   uint64_t mWindowId;
   const nsString mCallId;
   // Audio & Video loopback devices to be used based on
   // the preference settings. This is currently used for
   // automated media tests only.
   char* mLoopbackAudioDevice;
   char* mLoopbackVideoDevice;
--- a/dom/workers/WorkerPrivate.cpp
+++ b/dom/workers/WorkerPrivate.cpp
@@ -2137,17 +2137,25 @@ JSObject*
 WorkerPrivateParent<Derived>::WrapObject(JSContext* aCx,
                                          JS::Handle<JSObject*> aScope)
 {
   MOZ_ASSERT(!IsSharedWorker(),
              "We should never wrap a WorkerPrivate for a SharedWorker");
 
   AssertIsOnParentThread();
 
-  return WorkerBinding::Wrap(aCx, aScope, ParentAsWorkerPrivate());
+  // XXXkhuey this should not need to be rooted, the analysis is dumb.
+  // See bug 980181.
+  JS::Rooted<JSObject*> wrapper(aCx,
+    WorkerBinding::Wrap(aCx, aScope, ParentAsWorkerPrivate()));
+  if (wrapper) {
+    MOZ_ALWAYS_TRUE(TryPreserveWrapper(wrapper));
+  }
+
+  return wrapper;
 }
 
 template <class Derived>
 nsresult
 WorkerPrivateParent<Derived>::DispatchPrivate(WorkerRunnable* aRunnable,
                                               nsIEventTarget* aSyncLoopTarget)
 {
   // May be called on any thread!
--- a/gfx/2d/2D.h
+++ b/gfx/2d/2D.h
@@ -966,25 +966,20 @@ public:
   virtual void SetPermitSubpixelAA(bool aPermitSubpixelAA) {
     mPermitSubpixelAA = aPermitSubpixelAA;
   }
 
   bool GetPermitSubpixelAA() {
     return mPermitSubpixelAA;
   }
 
-  virtual GenericRefCountedBase* GetGLContext() const {
-    return nullptr;
-  }
-
 #ifdef USE_SKIA_GPU
-  virtual void InitWithGLContextAndGrGLInterface(GenericRefCountedBase* aGLContext,
-                                            GrGLInterface* aGrGLInterface,
-                                            const IntSize &aSize,
-                                            SurfaceFormat aFormat)
+  virtual void InitWithGrContext(GrContext* aGrContext,
+                                 const IntSize &aSize,
+                                 SurfaceFormat aFormat)
   {
     MOZ_CRASH();
   }
 #endif
 
 protected:
   UserData mUserData;
   Matrix mTransform;
@@ -1080,23 +1075,19 @@ public:
 
   static TemporaryRef<DrawEventRecorder>
     CreateEventRecorderForFile(const char *aFilename);
 
   static void SetGlobalEventRecorder(DrawEventRecorder *aRecorder);
 
 #ifdef USE_SKIA_GPU
   static TemporaryRef<DrawTarget>
-    CreateDrawTargetSkiaWithGLContextAndGrGLInterface(GenericRefCountedBase* aGLContext,
-                                                      GrGLInterface* aGrGLInterface,
-                                                      const IntSize &aSize,
-                                                      SurfaceFormat aFormat);
-
-  static void
-    SetGlobalSkiaCacheLimits(int aCount, int aSizeInBytes);
+    CreateDrawTargetSkiaWithGrContext(GrContext* aGrContext,
+                                      const IntSize &aSize,
+                                      SurfaceFormat aFormat);
 #endif
 
   static void PurgeAllCaches();
 
 #if defined(USE_SKIA) && defined(MOZ_ENABLE_FREETYPE)
   static TemporaryRef<GlyphRenderingOptions>
     CreateCairoGlyphRenderingOptions(FontHinting aHinting, bool aAutoHinting);
 #endif
--- a/gfx/2d/DrawTargetSkia.cpp
+++ b/gfx/2d/DrawTargetSkia.cpp
@@ -74,90 +74,16 @@ public:
   BackendType GetBackendType() const { return BackendType::SKIA; }
 
   std::vector<SkColor> mColors;
   std::vector<SkScalar> mPositions;
   int mCount;
   ExtendMode mExtendMode;
 };
 
-#ifdef USE_SKIA_GPU
-int DrawTargetSkia::sTextureCacheCount = 256;
-int DrawTargetSkia::sTextureCacheSizeInBytes = 96*1024*1024;
-
-static std::vector<DrawTargetSkia*>&
-GLDrawTargets()
-{
-  static std::vector<DrawTargetSkia*> targets;
-  return targets;
-}
-
-void
-DrawTargetSkia::RebalanceCacheLimits()
-{
-  // Divide the global cache limits equally between all currently active GL-backed
-  // Skia DrawTargets.
-  std::vector<DrawTargetSkia*>& targets = GLDrawTargets();
-  uint32_t targetCount = targets.size();
-  if (targetCount == 0)
-    return;
-
-  int individualCacheSize = sTextureCacheSizeInBytes / targetCount;
-  for (uint32_t i = 0; i < targetCount; i++) {
-    targets[i]->SetCacheLimits(sTextureCacheCount, individualCacheSize);
-  }
-}
-
-static void
-AddGLDrawTarget(DrawTargetSkia* target)
-{
-  GLDrawTargets().push_back(target);
-  DrawTargetSkia::RebalanceCacheLimits();
-}
-
-static void
-RemoveGLDrawTarget(DrawTargetSkia* target)
-{
-  std::vector<DrawTargetSkia*>& targets = GLDrawTargets();
-  std::vector<DrawTargetSkia*>::iterator it = std::find(targets.begin(), targets.end(), target);
-  if (it != targets.end()) {
-    targets.erase(it);
-    DrawTargetSkia::RebalanceCacheLimits();
-  }
-}
-
-void
-DrawTargetSkia::SetGlobalCacheLimits(int aCount, int aSizeInBytes)
-{
-  sTextureCacheCount = aCount;
-  sTextureCacheSizeInBytes = aSizeInBytes;
-
-  DrawTargetSkia::RebalanceCacheLimits();
-}
-
-void
-DrawTargetSkia::PurgeCaches()
-{
-  if (mGrContext) {
-    mGrContext->freeGpuResources();
-  }
-}
-
-/* static */ void
-DrawTargetSkia::PurgeAllCaches()
-{
-  std::vector<DrawTargetSkia*>& targets = GLDrawTargets();
-  uint32_t targetCount = targets.size();
-  for (uint32_t i = 0; i < targetCount; i++) {
-    targets[i]->PurgeCaches();
-  }
-}
-
-#endif
-
 /**
  * When constructing a temporary SkBitmap via GetBitmapForSurface, we may also
  * have to construct a temporary DataSourceSurface, which must live as long as
  * the SkBitmap. So we return a pair of the SkBitmap and the (optional)
  * temporary surface.
  */
 struct TempBitmap
 {
@@ -184,25 +110,22 @@ GetBitmapForSurface(SourceSurface* aSurf
                                  surf->GetSize().width, surf->GetSize().height,
                                  surf->Stride());
   result.mBitmap.setPixels(surf->GetData());
   result.mTmpSurface = surf.forget();
   return result;
 }
 
 DrawTargetSkia::DrawTargetSkia()
-  : mSnapshot(nullptr)
+  : mTexture(0), mSnapshot(nullptr)
 {
 }
 
 DrawTargetSkia::~DrawTargetSkia()
 {
-#ifdef USE_SKIA_GPU
-  RemoveGLDrawTarget(this);
-#endif
 }
 
 TemporaryRef<SourceSurface>
 DrawTargetSkia::Snapshot()
 {
   RefPtr<SourceSurfaceSkia> snapshot = mSnapshot;
   if (!snapshot) {
     snapshot = new SourceSurfaceSkia();
@@ -765,55 +688,43 @@ DrawTargetSkia::Init(const IntSize &aSiz
 
   mCanvas = canvas.get();
   mFormat = aFormat;
   return true;
 }
 
 #ifdef USE_SKIA_GPU
 void
-DrawTargetSkia::InitWithGLContextAndGrGLInterface(GenericRefCountedBase* aGLContext,
-                                                  GrGLInterface* aGrGLInterface,
-                                                  const IntSize &aSize,
-                                                  SurfaceFormat aFormat)
+DrawTargetSkia::InitWithGrContext(GrContext* aGrContext,
+                                  const IntSize &aSize,
+                                  SurfaceFormat aFormat)
 {
-  mGLContext = aGLContext;
+  mGrContext = aGrContext;
+
   mSize = aSize;
   mFormat = aFormat;
 
-  mGrGLInterface = aGrGLInterface;
-  mGrGLInterface->fCallbackData = reinterpret_cast<GrGLInterfaceCallbackData>(this);
+  GrTextureDesc targetDescriptor;
 
-  GrBackendContext backendContext = reinterpret_cast<GrBackendContext>(aGrGLInterface);
-  SkAutoTUnref<GrContext> gr(GrContext::Create(kOpenGL_GrBackend, backendContext));
-  mGrContext = gr.get();
-
-  GrBackendRenderTargetDesc targetDescriptor;
-
+  targetDescriptor.fFlags = kRenderTarget_GrTextureFlagBit;
   targetDescriptor.fWidth = mSize.width;
   targetDescriptor.fHeight = mSize.height;
   targetDescriptor.fConfig = GfxFormatToGrConfig(mFormat);
   targetDescriptor.fOrigin = kBottomLeft_GrSurfaceOrigin;
   targetDescriptor.fSampleCnt = 0;
-  targetDescriptor.fRenderTargetHandle = 0; // GLContext always exposes the right framebuffer as id 0
+
+  SkAutoTUnref<GrTexture> skiaTexture(mGrContext->createUncachedTexture(targetDescriptor, NULL, 0));
 
-  SkAutoTUnref<GrRenderTarget> target(mGrContext->wrapBackendRenderTarget(targetDescriptor));
-  SkAutoTUnref<SkBaseDevice> device(new SkGpuDevice(mGrContext.get(), target.get()));
+  mTexture = (uint32_t)skiaTexture->getTextureHandle();
+
+  SkAutoTUnref<SkBaseDevice> device(new SkGpuDevice(mGrContext.get(), skiaTexture->asRenderTarget()));
   SkAutoTUnref<SkCanvas> canvas(new SkCanvas(device.get()));
   mCanvas = canvas.get();
-
-  AddGLDrawTarget(this);
 }
 
-void
-DrawTargetSkia::SetCacheLimits(int aCount, int aSizeInBytes)
-{
-  MOZ_ASSERT(mGrContext, "No GrContext!");
-  mGrContext->setTextureCacheLimits(aCount, aSizeInBytes);
-}
 #endif
 
 void
 DrawTargetSkia::Init(unsigned char* aData, const IntSize &aSize, int32_t aStride, SurfaceFormat aFormat)
 {
   SkAlphaType alphaType = kPremul_SkAlphaType;
   if (aFormat == SurfaceFormat::B8G8R8X8) {
     // We have to manually set the A channel to be 255 as Skia doesn't understand BGRX
@@ -835,16 +746,27 @@ void
 DrawTargetSkia::SetTransform(const Matrix& aTransform)
 {
   SkMatrix mat;
   GfxMatrixToSkiaMatrix(aTransform, mat);
   mCanvas->setMatrix(mat);
   mTransform = aTransform;
 }
 
+void*
+DrawTargetSkia::GetNativeSurface(NativeSurfaceType aType)
+{
+  if (aType == NativeSurfaceType::OPENGL_TEXTURE) {
+    return (void*)((uintptr_t)mTexture);
+  }
+
+  return nullptr;  
+}
+
+
 TemporaryRef<PathBuilder> 
 DrawTargetSkia::CreatePathBuilder(FillRule aFillRule) const
 {
   RefPtr<PathBuilderSkia> pb = new PathBuilderSkia(aFillRule);
   return pb;
 }
 
 void
--- a/gfx/2d/DrawTargetSkia.h
+++ b/gfx/2d/DrawTargetSkia.h
@@ -95,33 +95,25 @@ public:
   virtual TemporaryRef<SourceSurface>
     CreateSourceSurfaceFromNativeSurface(const NativeSurface &aSurface) const;
   virtual TemporaryRef<DrawTarget>
     CreateSimilarDrawTarget(const IntSize &aSize, SurfaceFormat aFormat) const;
   virtual TemporaryRef<PathBuilder> CreatePathBuilder(FillRule aFillRule = FillRule::FILL_WINDING) const;
   virtual TemporaryRef<GradientStops> CreateGradientStops(GradientStop *aStops, uint32_t aNumStops, ExtendMode aExtendMode = ExtendMode::CLAMP) const;
   virtual TemporaryRef<FilterNode> CreateFilter(FilterType aType);
   virtual void SetTransform(const Matrix &aTransform);
+  virtual void *GetNativeSurface(NativeSurfaceType aType);
 
   bool Init(const IntSize &aSize, SurfaceFormat aFormat);
   void Init(unsigned char* aData, const IntSize &aSize, int32_t aStride, SurfaceFormat aFormat);
 
 #ifdef USE_SKIA_GPU
-  virtual GenericRefCountedBase* GetGLContext() const MOZ_OVERRIDE { return mGLContext; }
-  void InitWithGLContextAndGrGLInterface(GenericRefCountedBase* aGLContext,
-                                         GrGLInterface* aGrGLInterface,
-                                         const IntSize &aSize,
-                                         SurfaceFormat aFormat) MOZ_OVERRIDE;
-
-  void SetCacheLimits(int aCount, int aSizeInBytes);
-  void PurgeCaches();
-
-  static void SetGlobalCacheLimits(int aCount, int aSizeInBytes);
-  static void RebalanceCacheLimits();
-  static void PurgeAllCaches();
+  void InitWithGrContext(GrContext* aGrContext,
+                         const IntSize &aSize,
+                         SurfaceFormat aFormat) MOZ_OVERRIDE;
 #endif
 
   operator std::string() const {
     std::stringstream stream;
     stream << "DrawTargetSkia(" << this << ")";
     return stream.str();
   }
 
@@ -129,28 +121,18 @@ private:
   friend class SourceSurfaceSkia;
   void SnapshotDestroyed();
 
   void MarkChanged();
 
   SkRect SkRectCoveringWholeSurface() const;
 
 #ifdef USE_SKIA_GPU
-  /*
-   * These members have inter-dependencies, but do not keep each other alive, so
-   * destruction order is very important here: mGrContext uses mGrGLInterface, and
-   * through it, uses mGLContext, so it is important that they be declared in the
-   * present order.
-   */
-  RefPtr<GenericRefCountedBase> mGLContext;
-  SkRefPtr<GrGLInterface> mGrGLInterface;
   SkRefPtr<GrContext> mGrContext;
-
-  static int sTextureCacheCount;
-  static int sTextureCacheSizeInBytes;
+  uint32_t mTexture;
 #endif
 
   IntSize mSize;
   SkRefPtr<SkCanvas> mCanvas;
   SourceSurfaceSkia* mSnapshot;
 };
 
 }
--- a/gfx/2d/Factory.cpp
+++ b/gfx/2d/Factory.cpp
@@ -581,40 +581,31 @@ Factory::D2DCleanup()
 {
   DrawTargetD2D::CleanupD2D();
 }
 
 #endif // XP_WIN
 
 #ifdef USE_SKIA_GPU
 TemporaryRef<DrawTarget>
-Factory::CreateDrawTargetSkiaWithGLContextAndGrGLInterface(GenericRefCountedBase* aGLContext,
-                                                           GrGLInterface* aGrGLInterface,
-                                                           const IntSize &aSize,
-                                                           SurfaceFormat aFormat)
+Factory::CreateDrawTargetSkiaWithGrContext(GrContext* aGrContext,
+                                           const IntSize &aSize,
+                                           SurfaceFormat aFormat)
 {
   DrawTargetSkia* newDrawTargetSkia = new DrawTargetSkia();
-  newDrawTargetSkia->InitWithGLContextAndGrGLInterface(aGLContext, aGrGLInterface, aSize, aFormat);
+  newDrawTargetSkia->InitWithGrContext(aGrContext, aSize, aFormat);
   RefPtr<DrawTarget> newTarget = newDrawTargetSkia;
   return newTarget;
 }
 
-void
-Factory::SetGlobalSkiaCacheLimits(int aCount, int aSizeInBytes)
-{
-    DrawTargetSkia::SetGlobalCacheLimits(aCount, aSizeInBytes);
-}
 #endif // USE_SKIA_GPU
 
 void
 Factory::PurgeAllCaches()
 {
-#ifdef USE_SKIA_GPU
-  DrawTargetSkia::PurgeAllCaches();
-#endif
 }
 
 #ifdef USE_SKIA_FREETYPE
 TemporaryRef<GlyphRenderingOptions>
 Factory::CreateCairoGlyphRenderingOptions(FontHinting aHinting, bool aAutoHinting)
 {
   RefPtr<GlyphRenderingOptionsCairo> options =
     new GlyphRenderingOptionsCairo();
--- a/gfx/2d/Types.h
+++ b/gfx/2d/Types.h
@@ -91,17 +91,18 @@ MOZ_BEGIN_ENUM_CLASS(FontType, int8_t)
   COREGRAPHICS
 MOZ_END_ENUM_CLASS(FontType)
 
 MOZ_BEGIN_ENUM_CLASS(NativeSurfaceType, int8_t)
   D3D10_TEXTURE,
   CAIRO_SURFACE,
   CAIRO_CONTEXT,
   CGCONTEXT,
-  CGCONTEXT_ACCELERATED
+  CGCONTEXT_ACCELERATED,
+  OPENGL_TEXTURE
 MOZ_END_ENUM_CLASS(NativeSurfaceType)
 
 MOZ_BEGIN_ENUM_CLASS(NativeFontType, int8_t)
   DWRITE_FONT_FACE,
   GDI_FONT_FACE,
   MAC_FONT_FACE,
   SKIA_FONT_FACE,
   CAIRO_FONT_FACE
--- a/gfx/gl/GLContext.cpp
+++ b/gfx/gl/GLContext.cpp
@@ -623,16 +623,22 @@ GLContext::InitWithPrefix(const char *pr
                 MarkUnsupported(GLFeature::standard_derivatives);
             }
 
             if (Vendor() == GLVendor::Vivante) {
                 // bug 958256
                 MarkUnsupported(GLFeature::standard_derivatives);
             }
 
+            if (Vendor() == GLVendor::Imagination &&
+                Renderer() == GLRenderer::SGX540) {
+                // Bug 980048
+                MarkExtensionUnsupported(OES_EGL_sync);
+            }
+
 #ifdef XP_MACOSX
             // The Mac Nvidia driver, for versions up to and including 10.8, don't seem
             // to properly support this.  See 814839
             // this has been fixed in Mac OS X 10.9. See 907946
             if (Vendor() == gl::GLVendor::NVIDIA &&
                 !nsCocoaFeatures::OnMavericksOrLater())
             {
                 MarkUnsupported(GLFeature::depth_texture);
--- a/gfx/gl/GLContext.h
+++ b/gfx/gl/GLContext.h
@@ -1933,49 +1933,49 @@ public:
         ASSERT_SYMBOL_PRESENT(fUnmapBuffer);
         realGLboolean ret = mSymbols.fUnmapBuffer(target);
         AFTER_GL_CALL;
         return ret;
     }
 
 
 private:
-    GLuint GLAPIENTRY raw_fCreateProgram() {
+    GLuint raw_fCreateProgram() {
         BEFORE_GL_CALL;
         GLuint ret = mSymbols.fCreateProgram();
         AFTER_GL_CALL;
         return ret;
     }
 
-    GLuint GLAPIENTRY raw_fCreateShader(GLenum t) {
+    GLuint raw_fCreateShader(GLenum t) {
         BEFORE_GL_CALL;
         GLuint ret = mSymbols.fCreateShader(t);
         AFTER_GL_CALL;
         return ret;
     }
 
-    void GLAPIENTRY raw_fGenBuffers(GLsizei n, GLuint* names) {
+    void raw_fGenBuffers(GLsizei n, GLuint* names) {
         BEFORE_GL_CALL;
         mSymbols.fGenBuffers(n, names);
         AFTER_GL_CALL;
     }
 
-    void GLAPIENTRY raw_fGenFramebuffers(GLsizei n, GLuint* names) {
+    void raw_fGenFramebuffers(GLsizei n, GLuint* names) {
         BEFORE_GL_CALL;
         mSymbols.fGenFramebuffers(n, names);
         AFTER_GL_CALL;
     }
 
-    void GLAPIENTRY raw_fGenRenderbuffers(GLsizei n, GLuint* names) {
+    void raw_fGenRenderbuffers(GLsizei n, GLuint* names) {
         BEFORE_GL_CALL;
         mSymbols.fGenRenderbuffers(n, names);
         AFTER_GL_CALL;
     }
 
-    void GLAPIENTRY raw_fGenTextures(GLsizei n, GLuint* names) {
+    void raw_fGenTextures(GLsizei n, GLuint* names) {
         BEFORE_GL_CALL;
         mSymbols.fGenTextures(n, names);
         AFTER_GL_CALL;
     }
 
 public:
     GLuint fCreateProgram() {
         GLuint ret = raw_fCreateProgram();
@@ -2005,47 +2005,47 @@ public:
     }
 
     void fGenTextures(GLsizei n, GLuint* names) {
         raw_fGenTextures(n, names);
         TRACKING_CONTEXT(CreatedTextures(this, n, names));
     }
 
 private:
-    void GLAPIENTRY raw_fDeleteProgram(GLuint program) {
+    void raw_fDeleteProgram(GLuint program) {
         BEFORE_GL_CALL;
         mSymbols.fDeleteProgram(program);
         AFTER_GL_CALL;
     }
 
-    void GLAPIENTRY raw_fDeleteShader(GLuint shader) {
+    void raw_fDeleteShader(GLuint shader) {
         BEFORE_GL_CALL;
         mSymbols.fDeleteShader(shader);
         AFTER_GL_CALL;
     }
 
-    void GLAPIENTRY raw_fDeleteBuffers(GLsizei n, const GLuint* names) {
+    void raw_fDeleteBuffers(GLsizei n, const GLuint* names) {
         BEFORE_GL_CALL;
         mSymbols.fDeleteBuffers(n, names);
         AFTER_GL_CALL;
     }
 
-    void GLAPIENTRY raw_fDeleteFramebuffers(GLsizei n, const GLuint* names) {
+    void raw_fDeleteFramebuffers(GLsizei n, const GLuint* names) {
         BEFORE_GL_CALL;
         mSymbols.fDeleteFramebuffers(n, names);
         AFTER_GL_CALL;
     }
 
-    void GLAPIENTRY raw_fDeleteRenderbuffers(GLsizei n, const GLuint* names) {
+    void raw_fDeleteRenderbuffers(GLsizei n, const GLuint* names) {
         BEFORE_GL_CALL;
         mSymbols.fDeleteRenderbuffers(n, names);
         AFTER_GL_CALL;
     }
 
-    void GLAPIENTRY raw_fDeleteTextures(GLsizei n, const GLuint* names) {
+    void raw_fDeleteTextures(GLsizei n, const GLuint* names) {
         BEFORE_GL_CALL;
         mSymbols.fDeleteTextures(n, names);
         AFTER_GL_CALL;
     }
 
 public:
 
     void fDeleteProgram(GLuint program) {
@@ -2085,76 +2085,76 @@ public:
         TRACKING_CONTEXT(DeletedRenderbuffers(this, n, names));
     }
 
     void fDeleteTextures(GLsizei n, const GLuint* names) {
         raw_fDeleteTextures(n, names);
         TRACKING_CONTEXT(DeletedTextures(this, n, names));
     }
 
-    GLenum GLAPIENTRY fGetGraphicsResetStatus() {
+    GLenum fGetGraphicsResetStatus() {
         MOZ_ASSERT(mHasRobustness);
 
         BEFORE_GL_CALL;
         ASSERT_SYMBOL_PRESENT(fGetGraphicsResetStatus);
         GLenum ret = mSymbols.fGetGraphicsResetStatus();
         AFTER_GL_CALL;
         return ret;
     }
 
 
 // -----------------------------------------------------------------------------
 // Extension ARB_sync (GL)
 public:
-    GLsync GLAPIENTRY fFenceSync(GLenum condition, GLbitfield flags) {
+    GLsync fFenceSync(GLenum condition, GLbitfield flags) {
         BEFORE_GL_CALL;
         ASSERT_SYMBOL_PRESENT(fFenceSync);
         GLsync ret = mSymbols.fFenceSync(condition, flags);
         AFTER_GL_CALL;
         return ret;
     }
 
-    realGLboolean GLAPIENTRY fIsSync(GLsync sync) {
+    realGLboolean fIsSync(GLsync sync) {
         BEFORE_GL_CALL;
         ASSERT_SYMBOL_PRESENT(fIsSync);
         realGLboolean ret = mSymbols.fIsSync(sync);
         AFTER_GL_CALL;
         return ret;
     }
 
-    void GLAPIENTRY fDeleteSync(GLsync sync) {
+    void fDeleteSync(GLsync sync) {
         BEFORE_GL_CALL;
         ASSERT_SYMBOL_PRESENT(fDeleteSync);
         mSymbols.fDeleteSync(sync);
         AFTER_GL_CALL;
     }
 
-    GLenum GLAPIENTRY fClientWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout) {
+    GLenum fClientWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout) {
         BEFORE_GL_CALL;
         ASSERT_SYMBOL_PRESENT(fClientWaitSync);
         GLenum ret = mSymbols.fClientWaitSync(sync, flags, timeout);
         AFTER_GL_CALL;
         return ret;
     }
 
-    void GLAPIENTRY fWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout) {
+    void fWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout) {
         BEFORE_GL_CALL;
         ASSERT_SYMBOL_PRESENT(fWaitSync);
         mSymbols.fWaitSync(sync, flags, timeout);
         AFTER_GL_CALL;
     }
 
-    void GLAPIENTRY fGetInteger64v(GLenum pname, GLint64 *params) {
+    void fGetInteger64v(GLenum pname, GLint64 *params) {
         BEFORE_GL_CALL;
         ASSERT_SYMBOL_PRESENT(fGetInteger64v);
         mSymbols.fGetInteger64v(pname, params);
         AFTER_GL_CALL;
     }
 
-    void GLAPIENTRY fGetSynciv(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values) {
+    void fGetSynciv(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values) {
         BEFORE_GL_CALL;
         ASSERT_SYMBOL_PRESENT(fGetSynciv);
         mSymbols.fGetSynciv(sync, pname, bufSize, length, values);
         AFTER_GL_CALL;
     }
 
 
 // -----------------------------------------------------------------------------
@@ -2399,41 +2399,41 @@ public:
         mSymbols.fGetIntegeri_v(param, index, values);
         AFTER_GL_CALL;
     }
 
 
 // -----------------------------------------------------------------------------
 // Package XXX_vertex_array_object
 public:
-    void GLAPIENTRY fBindVertexArray(GLuint array)
+    void fBindVertexArray(GLuint array)
     {
         BEFORE_GL_CALL;
         ASSERT_SYMBOL_PRESENT(fBindVertexArray);
         mSymbols.fBindVertexArray(array);
         AFTER_GL_CALL;
     }
 
-    void GLAPIENTRY fDeleteVertexArrays(GLsizei n, const GLuint *arrays)
+    void fDeleteVertexArrays(GLsizei n, const GLuint *arrays)
     {
         BEFORE_GL_CALL;
         ASSERT_SYMBOL_PRESENT(fDeleteVertexArrays);
         mSymbols.fDeleteVertexArrays(n, arrays);
         AFTER_GL_CALL;
     }
 
-    void GLAPIENTRY fGenVertexArrays(GLsizei n, GLuint *arrays)
+    void fGenVertexArrays(GLsizei n, GLuint *arrays)
     {
         BEFORE_GL_CALL;
         ASSERT_SYMBOL_PRESENT(fGenVertexArrays);
         mSymbols.fGenVertexArrays(n, arrays);
         AFTER_GL_CALL;
     }
 
-    realGLboolean GLAPIENTRY fIsVertexArray(GLuint array)
+    realGLboolean fIsVertexArray(GLuint array)
     {
         BEFORE_GL_CALL;
         ASSERT_SYMBOL_PRESENT(fIsVertexArray);
         realGLboolean ret = mSymbols.fIsVertexArray(array);
         AFTER_GL_CALL;
         return ret;
     }
 
deleted file mode 100644
--- a/gfx/gl/GLContextSkia.h
+++ /dev/null
@@ -1,8 +0,0 @@
-/* -*- Mode: c++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40; -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "skia/GrGLInterface.h"
-
-GrGLInterface* CreateGrGLInterfaceFromGLContext(mozilla::gl::GLContext* context);
--- a/gfx/gl/GLScreenBuffer.cpp
+++ b/gfx/gl/GLScreenBuffer.cpp
@@ -38,16 +38,17 @@ GLScreenBuffer::Create(GLContext* gl,
         return nullptr;
     }
 
     SurfaceFactory_GL* factory = nullptr;
 
 #ifdef MOZ_WIDGET_GONK
     /* On B2G, we want a Gralloc factory, and we want one right at the start */
     if (!factory &&
+        caps.surfaceAllocator &&
         XRE_GetProcessType() != GeckoProcessType_Default)
     {
         factory = new SurfaceFactory_Gralloc(gl, caps);
     }
 #endif
 #ifdef XP_MACOSX
     /* On OSX, we want an IOSurface factory, and we want one right at the start */
     if (!factory)
@@ -65,17 +66,16 @@ GLScreenBuffer::Create(GLContext* gl,
         gl,
         nullptr);
 
     return new GLScreenBuffer(gl, caps, factory, stream);
 }
 
 GLScreenBuffer::~GLScreenBuffer()
 {
-    delete mStream;
     delete mDraw;
     delete mRead;
 
     // bug 914823: it is crucial to destroy the Factory _after_ we destroy
     // the SharedSurfaces around here! Reason: the shared surfaces will want
     // to ask the Allocator (e.g. the ClientLayerManager) to destroy their
     // buffers, but that Allocator may be kept alive by the Factory,
     // as it currently the case in SurfaceFactory_Gralloc holding a nsRefPtr
@@ -373,17 +373,16 @@ GLScreenBuffer::Morph(SurfaceFactory_GL*
     }
 
     if (mStream->mType == streamType)
         return;
 
     SurfaceStream* newStream = SurfaceStream::CreateForType(streamType, mGL, mStream);
     MOZ_ASSERT(newStream);
 
-    delete mStream;
     mStream = newStream;
 }
 
 void
 GLScreenBuffer::Attach(SharedSurface* surface, const gfx::IntSize& size)
 {
     ScopedBindFramebuffer autoFB(mGL);
 
--- a/gfx/gl/GLScreenBuffer.h
+++ b/gfx/gl/GLScreenBuffer.h
@@ -11,16 +11,17 @@
  * actually the screen, just draw to 0. This GLScreenBuffer class takes the
  * logic handling out of GLContext.
 */
 
 #ifndef SCREEN_BUFFER_H_
 #define SCREEN_BUFFER_H_
 
 #include "SurfaceTypes.h"
+#include "SurfaceStream.h"
 #include "GLContextTypes.h"
 #include "GLDefs.h"
 #include "mozilla/gfx/2D.h"
 #include "mozilla/gfx/Point.h"
 
 // Forwards:
 class gfxImageSurface;
 
@@ -151,17 +152,17 @@ public:
     static GLScreenBuffer* Create(GLContext* gl,
                                   const gfx::IntSize& size,
                                   const SurfaceCaps& caps);
 
 protected:
     GLContext* const mGL;         // Owns us.
     SurfaceCaps mCaps;
     SurfaceFactory_GL* mFactory;  // Owned by us.
-    SurfaceStream* mStream;       // Owned by us.
+    RefPtr<SurfaceStream> mStream;
 
     DrawBuffer* mDraw;            // Owned by us.
     ReadBuffer* mRead;            // Owned by us.
 
     bool mNeedsBlit;
 
     // Below are the parts that help us pretend to be framebuffer 0:
     GLuint mUserDrawFB;
--- a/gfx/gl/ScopedGLHelpers.cpp
+++ b/gfx/gl/ScopedGLHelpers.cpp
@@ -119,16 +119,17 @@ ScopedTexture::UnwrapImpl()
 void
 ScopedBindTexture::Init(GLenum aTarget)
 {
     mTarget = aTarget;
     mOldTex = 0;
     GLenum bindingTarget = (aTarget == LOCAL_GL_TEXTURE_2D) ? LOCAL_GL_TEXTURE_BINDING_2D
                          : (aTarget == LOCAL_GL_TEXTURE_RECTANGLE_ARB) ? LOCAL_GL_TEXTURE_BINDING_RECTANGLE_ARB
                          : (aTarget == LOCAL_GL_TEXTURE_CUBE_MAP) ? LOCAL_GL_TEXTURE_BINDING_CUBE_MAP
+                         : (aTarget == LOCAL_GL_TEXTURE_EXTERNAL) ? LOCAL_GL_TEXTURE_EXTERNAL
                          : LOCAL_GL_NONE;
     MOZ_ASSERT(bindingTarget != LOCAL_GL_NONE);
     mGL->GetUIntegerv(bindingTarget, &mOldTex);
 }
 
 ScopedBindTexture::ScopedBindTexture(GLContext* aGL, GLuint aNewTex, GLenum aTarget)
         : ScopedGLWrapper<ScopedBindTexture>(aGL)
     {
--- a/gfx/gl/SharedSurfaceEGL.cpp
+++ b/gfx/gl/SharedSurfaceEGL.cpp
@@ -22,180 +22,102 @@ SharedSurface_EGLImage*
 SharedSurface_EGLImage::Create(GLContext* prodGL,
                                const GLFormats& formats,
                                const gfx::IntSize& size,
                                bool hasAlpha,
                                EGLContext context)
 {
     GLLibraryEGL* egl = &sEGLLibrary;
     MOZ_ASSERT(egl);
+    MOZ_ASSERT(context);
 
-    if (!HasExtensions(egl, prodGL))
+    if (!HasExtensions(egl, prodGL)) {
         return nullptr;
+    }
 
     MOZ_ALWAYS_TRUE(prodGL->MakeCurrent());
     GLuint prodTex = CreateTextureForOffscreen(prodGL, formats, size);
-    if (!prodTex)
+    if (!prodTex) {
         return nullptr;
+    }
+
+    EGLClientBuffer buffer = reinterpret_cast<EGLClientBuffer>(prodTex);
+    EGLImage image = egl->fCreateImage(egl->Display(), context,
+                                       LOCAL_EGL_GL_TEXTURE_2D, buffer,
+                                       nullptr);
+    if (!image) {
+        prodGL->fDeleteTextures(1, &prodTex);
+        return nullptr;
+    }
 
     return new SharedSurface_EGLImage(prodGL, egl,
                                       size, hasAlpha,
-                                      formats, prodTex);
+                                      formats, prodTex, image);
 }
 
 
 bool
 SharedSurface_EGLImage::HasExtensions(GLLibraryEGL* egl, GLContext* gl)
 {
     return egl->HasKHRImageBase() &&
            egl->IsExtensionSupported(GLLibraryEGL::KHR_gl_texture_2D_image) &&
-           gl->IsExtensionSupported(GLContext::OES_EGL_image);
+           gl->IsExtensionSupported(GLContext::OES_EGL_image_external);
 }
 
 SharedSurface_EGLImage::SharedSurface_EGLImage(GLContext* gl,
                                                GLLibraryEGL* egl,
                                                const gfx::IntSize& size,
                                                bool hasAlpha,
                                                const GLFormats& formats,
-                                               GLuint prodTex)
+                                               GLuint prodTex,
+                                               EGLImage image)
     : SharedSurface_GL(SharedSurfaceType::EGLImageShare,
                         AttachmentType::GLTexture,
                         gl,
                         size,
                         hasAlpha)
     , mMutex("SharedSurface_EGLImage mutex")
     , mEGL(egl)
     , mFormats(formats)
     , mProdTex(prodTex)
-    , mProdTexForPipe(0)
-    , mImage(0)
+    , mImage(image)
     , mCurConsGL(nullptr)
     , mConsTex(0)
     , mSync(0)
-    , mPipeFailed(false)
-    , mPipeComplete(false)
-    , mPipeActive(false)
 {}
 
 SharedSurface_EGLImage::~SharedSurface_EGLImage()
 {
     mEGL->fDestroyImage(Display(), mImage);
     mImage = 0;
 
     mGL->MakeCurrent();
     mGL->fDeleteTextures(1, &mProdTex);
     mProdTex = 0;
 
-    if (mProdTexForPipe) {
-        mGL->fDeleteTextures(1, &mProdTexForPipe);
-        mProdTexForPipe = 0;
-    }
-
     if (mConsTex) {
         MOZ_ASSERT(mGarbageBin);
         mGarbageBin->Trash(mConsTex);
         mConsTex = 0;
     }
 
     if (mSync) {
         // We can't call this unless we have the ext, but we will always have
         // the ext if we have something to destroy.
         mEGL->fDestroySync(Display(), mSync);
         mSync = 0;
     }
 }
 
 void
-SharedSurface_EGLImage::LockProdImpl()
-{
-    MutexAutoLock lock(mMutex);
-
-    if (!mPipeComplete)
-        return;
-
-    if (mPipeActive)
-        return;
-
-    mGL->BlitHelper()->BlitTextureToTexture(mProdTex, mProdTexForPipe, Size(), Size());
-    mGL->fDeleteTextures(1, &mProdTex);
-    mProdTex = mProdTexForPipe;
-    mProdTexForPipe = 0;
-    mPipeActive = true;
-}
-
-static bool
-CreateTexturePipe(GLLibraryEGL* const egl, GLContext* const gl,
-                  const GLFormats& formats, const gfx::IntSize& size,
-                  GLuint* const out_tex, EGLImage* const out_image)
-{
-    MOZ_ASSERT(out_tex && out_image);
-    *out_tex = 0;
-    *out_image = 0;
-
-    GLuint tex = CreateTextureForOffscreen(gl, formats, size);
-    if (!tex)
-        return false;
-
-    EGLContext context = GLContextEGL::Cast(gl)->GetEGLContext();
-    MOZ_ASSERT(context);
-    EGLClientBuffer buffer = reinterpret_cast<EGLClientBuffer>(tex);
-    EGLImage image = egl->fCreateImage(egl->Display(), context,
-                                       LOCAL_EGL_GL_TEXTURE_2D, buffer,
-                                       nullptr);
-    if (!image) {
-        gl->fDeleteTextures(1, &tex);
-        return false;
-    }
-
-    // Success.
-    *out_tex = tex;
-    *out_image = image;
-    return true;
-}
-
-void
 SharedSurface_EGLImage::Fence()
 {
     MutexAutoLock lock(mMutex);
     mGL->MakeCurrent();
 
-    if (!mPipeActive) {
-        MOZ_ASSERT(!mSync);
-        MOZ_ASSERT(!mPipeComplete);
-
-        if (!mPipeFailed) {
-            if (!CreateTexturePipe(mEGL, mGL, mFormats, Size(),
-                                   &mProdTexForPipe, &mImage))
-            {
-                mPipeFailed = true;
-            }
-        }
-
-        if (!mPixels) {
-            SurfaceFormat format =
-                  HasAlpha() ? SurfaceFormat::B8G8R8A8
-                             : SurfaceFormat::B8G8R8X8;
-            mPixels = Factory::CreateDataSourceSurface(Size(), format);
-        }
-
-        DataSourceSurface::MappedSurface map;
-        mPixels->Map(DataSourceSurface::MapType::WRITE, &map);
-
-        nsRefPtr<gfxImageSurface> wrappedData =
-            new gfxImageSurface(map.mData,
-                                ThebesIntSize(mPixels->GetSize()),
-                                map.mStride,
-                                SurfaceFormatToImageFormat(mPixels->GetFormat()));
-        ReadScreenIntoImageSurface(mGL, wrappedData);
-        mPixels->Unmap();
-        return;
-    }
-    MOZ_ASSERT(mPipeActive);
-    MOZ_ASSERT(mCurConsGL);
-
     if (mEGL->IsExtensionSupported(GLLibraryEGL::KHR_fence_sync) &&
         mGL->IsExtensionSupported(GLContext::OES_EGL_sync))
     {
         if (mSync) {
             MOZ_ALWAYS_TRUE( mEGL->fDestroySync(Display(), mSync) );
             mSync = 0;
         }
 
@@ -244,56 +166,47 @@ SharedSurface_EGLImage::WaitSync()
 
 
 EGLDisplay
 SharedSurface_EGLImage::Display() const
 {
     return mEGL->Display();
 }
 
-GLuint
-SharedSurface_EGLImage::AcquireConsumerTexture(GLContext* consGL)
+void
+SharedSurface_EGLImage::AcquireConsumerTexture(GLContext* consGL, GLuint* out_texture, GLuint* out_target)
 {
     MutexAutoLock lock(mMutex);
     MOZ_ASSERT(!mCurConsGL || consGL == mCurConsGL);
-    if (mPipeFailed)
-        return 0;
-
-    if (mPipeActive) {
-        MOZ_ASSERT(mConsTex);
-
-        return mConsTex;
-    }
 
     if (!mConsTex) {
         consGL->fGenTextures(1, &mConsTex);
-        ScopedBindTexture autoTex(consGL, mConsTex);
-        consGL->fEGLImageTargetTexture2D(LOCAL_GL_TEXTURE_2D, mImage);
+        MOZ_ASSERT(mConsTex);
 
-        mPipeComplete = true;
+        ScopedBindTexture autoTex(consGL, mConsTex, LOCAL_GL_TEXTURE_EXTERNAL);
+        consGL->fEGLImageTargetTexture2D(LOCAL_GL_TEXTURE_EXTERNAL, mImage);
+
         mCurConsGL = consGL;
         mGarbageBin = consGL->TexGarbageBin();
     }
 
     MOZ_ASSERT(consGL == mCurConsGL);
-    return 0;
+    *out_texture = mConsTex;
+    *out_target = LOCAL_GL_TEXTURE_EXTERNAL;
 }
 
-DataSourceSurface*
-SharedSurface_EGLImage::GetPixels() const
-{
-    MutexAutoLock lock(mMutex);
-    return mPixels;
-}
-
-
 
 SurfaceFactory_EGLImage*
 SurfaceFactory_EGLImage::Create(GLContext* prodGL,
                                         const SurfaceCaps& caps)
 {
     EGLContext context = GLContextEGL::Cast(prodGL)->GetEGLContext();
 
+    GLLibraryEGL* egl = &sEGLLibrary;
+    if (!SharedSurface_EGLImage::HasExtensions(egl, prodGL)) {
+        return nullptr;
+    }
+
     return new SurfaceFactory_EGLImage(prodGL, context, caps);
 }
 
 } /* namespace gfx */
 } /* namespace mozilla */
--- a/gfx/gl/SharedSurfaceEGL.h
+++ b/gfx/gl/SharedSurfaceEGL.h
@@ -30,73 +30,67 @@ public:
                                           EGLContext context);
 
     static SharedSurface_EGLImage* Cast(SharedSurface* surf) {
         MOZ_ASSERT(surf->Type() == SharedSurfaceType::EGLImageShare);
 
         return (SharedSurface_EGLImage*)surf;
     }
 
+    static bool HasExtensions(GLLibraryEGL* egl, GLContext* gl);
+
 protected:
     mutable Mutex mMutex;
     GLLibraryEGL* const mEGL;
     const GLFormats mFormats;
     GLuint mProdTex;
-    RefPtr<gfx::DataSourceSurface> mPixels;
-    GLuint mProdTexForPipe; // Moves to mProdTex when mPipeActive becomes true.
     EGLImage mImage;
     GLContext* mCurConsGL;
     GLuint mConsTex;
     nsRefPtr<TextureGarbageBin> mGarbageBin;
     EGLSync mSync;
-    bool mPipeFailed;   // Pipe creation failed, and has been abandoned.
-    bool mPipeComplete; // Pipe connects (mPipeActive ? mProdTex : mProdTexForPipe) to mConsTex.
-    bool mPipeActive;   // Pipe is complete and in use for production.
 
     SharedSurface_EGLImage(GLContext* gl,
                            GLLibraryEGL* egl,
                            const gfx::IntSize& size,
                            bool hasAlpha,
                            const GLFormats& formats,
-                           GLuint prodTex);
+                           GLuint prodTex,
+                           EGLImage image);
 
     EGLDisplay Display() const;
 
-    static bool HasExtensions(GLLibraryEGL* egl, GLContext* gl);
 
 public:
     virtual ~SharedSurface_EGLImage();
 
-    virtual void LockProdImpl();
+    virtual void LockProdImpl() {}
     virtual void UnlockProdImpl() {}
 
 
     virtual void Fence();
     virtual bool WaitSync();
 
 
     virtual GLuint Texture() const {
         return mProdTex;
     }
 
     // Implementation-specific functions below:
-    // Returns 0 if the pipe isn't ready. If 0, use GetPixels below.
-    GLuint AcquireConsumerTexture(GLContext* consGL);
-
-    // Will be void if AcquireConsumerTexture returns non-zero.
-    gfx::DataSourceSurface* GetPixels() const;
+    // Returns texture and target
+    void AcquireConsumerTexture(GLContext* consGL, GLuint* out_texture, GLuint* out_target);
 };
 
 
 
 class SurfaceFactory_EGLImage
     : public SurfaceFactory_GL
 {
 public:
-    // Infallible:
+    // Fallible:
     static SurfaceFactory_EGLImage* Create(GLContext* prodGL,
                                            const SurfaceCaps& caps);
 
 protected:
     const EGLContext mContext;
 
     SurfaceFactory_EGLImage(GLContext* prodGL,
                             EGLContext context,
--- a/gfx/gl/SharedSurfaceGL.cpp
+++ b/gfx/gl/SharedSurfaceGL.cpp
@@ -278,72 +278,102 @@ SharedSurface_Basic::SharedSurface_Basic
                                          bool hasAlpha,
                                          SurfaceFormat format,
                                          GLuint tex)
     : SharedSurface_GL(SharedSurfaceType::Basic,
                        AttachmentType::GLTexture,
                        gl,
                        size,
                        hasAlpha)
-    , mTex(tex)
+    , mTex(tex), mFB(0)
 {
+    mGL->MakeCurrent();
+    mGL->fGenFramebuffers(1, &mFB);
+
+    ScopedBindFramebuffer autoFB(mGL, mFB);
+    mGL->fFramebufferTexture2D(LOCAL_GL_FRAMEBUFFER,
+                              LOCAL_GL_COLOR_ATTACHMENT0,
+                              LOCAL_GL_TEXTURE_2D,
+                              mTex,
+                              0);
+
+    GLenum status = mGL->fCheckFramebufferStatus(LOCAL_GL_FRAMEBUFFER);
+    if (status != LOCAL_GL_FRAMEBUFFER_COMPLETE) {
+        mGL->fDeleteFramebuffers(1, &mFB);
+        mFB = 0;
+    }
+
     mData = Factory::CreateDataSourceSurfaceWithStride(size, format,
               GetAlignedStride<4>(size.width * BytesPerPixel(format)));
 }
 
 SharedSurface_Basic::~SharedSurface_Basic()
 {
     if (!mGL->MakeCurrent())
         return;
 
+    if (mFB)
+        mGL->fDeleteFramebuffers(1, &mFB);
+
     mGL->fDeleteTextures(1, &mTex);
 }
 
 void
 SharedSurface_Basic::Fence()
 {
-    MOZ_ASSERT(mData->GetSize() == mGL->OffscreenSize());
+    mGL->MakeCurrent();
 
-    mGL->MakeCurrent();
+    ScopedBindFramebuffer autoFB(mGL, mFB);
 
     DataSourceSurface::MappedSurface map;
     mData->Map(DataSourceSurface::MapType::WRITE, &map);
     nsRefPtr<gfxImageSurface> wrappedData =
       new gfxImageSurface(map.mData,
                           ThebesIntSize(mData->GetSize()),
                           map.mStride,
                           SurfaceFormatToImageFormat(mData->GetFormat()));
-    ReadScreenIntoImageSurface(mGL, wrappedData);
+    ReadPixelsIntoImageSurface(mGL, wrappedData);
     mData->Unmap();
 }
 
 
 
 SharedSurface_GLTexture*
 SharedSurface_GLTexture::Create(GLContext* prodGL,
                                 GLContext* consGL,
                                 const GLFormats& formats,
                                 const gfx::IntSize& size,
-                                bool hasAlpha)
+                                bool hasAlpha,
+                                GLuint texture)
 {
     MOZ_ASSERT(prodGL);
     MOZ_ASSERT(!consGL || prodGL->SharesWith(consGL));
 
     prodGL->MakeCurrent();
-    GLuint tex = CreateTextureForOffscreen(prodGL, formats, size);
+
+    GLuint tex = texture;
+
+    bool ownsTex = false;
 
-    return new SharedSurface_GLTexture(prodGL, consGL, size, hasAlpha, tex);
+    if (!tex) {
+      tex = CreateTextureForOffscreen(prodGL, formats, size);
+      ownsTex = true;
+    }
+
+    return new SharedSurface_GLTexture(prodGL, consGL, size, hasAlpha, tex, ownsTex);
 }
 
 SharedSurface_GLTexture::~SharedSurface_GLTexture()
 {
     if (!mGL->MakeCurrent())
         return;
 
-    mGL->fDeleteTextures(1, &mTex);
+    if (mOwnsTex) {
+        mGL->fDeleteTextures(1, &mTex);
+    }
 
     if (mSync) {
         mGL->fDeleteSync(mSync);
     }
 }
 
 void
 SharedSurface_GLTexture::Fence()
--- a/gfx/gl/SharedSurfaceGL.h
+++ b/gfx/gl/SharedSurfaceGL.h
@@ -1,16 +1,17 @@
 /* -*- Mode: c++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40; -*- */
 /* 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/. */
 
 #ifndef SHARED_SURFACE_GL_H_
 #define SHARED_SURFACE_GL_H_
 
+#include "ScopedGLHelpers.h"
 #include "SharedSurface.h"
 #include "SurfaceFactory.h"
 #include "SurfaceTypes.h"
 #include "GLContextTypes.h"
 #include "nsAutoPtr.h"
 #include "gfxTypes.h"
 #include "mozilla/Mutex.h"
 
@@ -130,16 +131,18 @@ public:
     static SharedSurface_Basic* Cast(SharedSurface* surf) {
         MOZ_ASSERT(surf->Type() == SharedSurfaceType::Basic);
 
         return (SharedSurface_Basic*)surf;
     }
 
 protected:
     const GLuint mTex;
+    GLuint mFB;
+
     RefPtr<gfx::DataSourceSurface> mData;
 
     SharedSurface_Basic(GLContext* gl,
                         const gfx::IntSize& size,
                         bool hasAlpha,
                         gfx::SurfaceFormat format,
                         GLuint tex);
 
@@ -187,42 +190,46 @@ public:
 class SharedSurface_GLTexture
     : public SharedSurface_GL
 {
 public:
     static SharedSurface_GLTexture* Create(GLContext* prodGL,
                                            GLContext* consGL,
                                            const GLFormats& formats,
                                            const gfx::IntSize& size,
-                                           bool hasAlpha);
+                                           bool hasAlpha,
+                                           GLuint texture = 0);
 
     static SharedSurface_GLTexture* Cast(SharedSurface* surf) {
         MOZ_ASSERT(surf->Type() == SharedSurfaceType::GLTextureShare);
 
         return (SharedSurface_GLTexture*)surf;
     }
 
 protected:
     GLContext* mConsGL;
     const GLuint mTex;
+    const bool mOwnsTex;
     GLsync mSync;
     mutable Mutex mMutex;
 
     SharedSurface_GLTexture(GLContext* prodGL,
                             GLContext* consGL,
                             const gfx::IntSize& size,
                             bool hasAlpha,
-                            GLuint tex)
+                            GLuint tex,
+                            bool ownsTex)
         : SharedSurface_GL(SharedSurfaceType::GLTextureShare,
                            AttachmentType::GLTexture,
                            prodGL,
                            size,
                            hasAlpha)
         , mConsGL(consGL)
         , mTex(tex)
+        , mOwnsTex(ownsTex)
         , mSync(0)
         , mMutex("SharedSurface_GLTexture mutex")
     {
     }
 
 public:
     virtual ~SharedSurface_GLTexture();
 
rename from gfx/gl/GLContextSkia.cpp
rename to gfx/gl/SkiaGLGlue.cpp
--- a/gfx/gl/GLContextSkia.cpp
+++ b/gfx/gl/SkiaGLGlue.cpp
@@ -1,39 +1,42 @@
 /* -*- Mode: c++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40; -*- */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
+#include "skia/GrContext.h"
 #include "skia/GrGLInterface.h"
 #include "mozilla/gfx/2D.h"
 #include "mozilla/ThreadLocal.h"
 #include "mozilla/DebugOnly.h"
 
 /* SkPostConfig.h includes windows.h, which includes windef.h
  * which redefines min/max. We don't want that. */
 #ifdef _WIN32
 #undef min
 #undef max
 #endif
 
 #include "GLContext.h"
+#include "SkiaGLGlue.h"
 
 using mozilla::gl::GLContext;
 using mozilla::gl::GLFeature;
+using mozilla::gl::SkiaGLGlue;
 using mozilla::gfx::DrawTarget;
 
 static mozilla::ThreadLocal<GLContext*> sGLContext;
 
 extern "C" {
 
 void EnsureGLContext(const GrGLInterface* i)
 {
-    const DrawTarget* drawTarget = reinterpret_cast<const DrawTarget*>(i->fCallbackData);
-    GLContext* gl = static_cast<GLContext*>(drawTarget->GetGLContext());
+    const SkiaGLGlue* contextSkia = reinterpret_cast<const SkiaGLGlue*>(i->fCallbackData);
+    GLContext* gl = contextSkia->GetGLContext();
     gl->MakeCurrent();
 
     if (!sGLContext.initialized()) {
       mozilla::DebugOnly<bool> success = sGLContext.init();
       MOZ_ASSERT(success);
     }
     sGLContext.set(gl);
 }
@@ -770,17 +773,17 @@ GrGLvoid glTexGenfv_mozilla(GrGLenum coo
 
 GrGLvoid glVertexPointer_mozilla(GrGLint size, GrGLenum type, GrGLsizei stride, const GrGLvoid* pointer)
 {
     return sGLContext.get()->fVertexPointer(size, type, stride, pointer);
 }
 
 } // extern "C"
 
-GrGLInterface* CreateGrGLInterfaceFromGLContext(GLContext* context)
+static GrGLInterface* CreateGrGLInterfaceFromGLContext(GLContext* context)
 {
     GrGLInterface* i = new GrGLInterface();
     i->fCallback = EnsureGLContext;
     i->fCallbackData = 0; // must be later initialized to be a valid DrawTargetSkia* pointer
 
     // Core GL functions required by Ganesh
     i->fActiveTexture = glActiveTexture_mozilla;
     i->fAttachShader = glAttachShader_mozilla;
@@ -929,8 +932,19 @@ GrGLInterface* CreateGrGLInterfaceFromGL
     if (context->IsGLES2()) {
         i->fBindingsExported = kES2_GrGLBinding;
     } else {
         i->fBindingsExported = kDesktop_GrGLBinding;
     }
 
     return i;
 }
+
+SkiaGLGlue::SkiaGLGlue(GLContext* context)
+    : mGLContext(context)
+{
+    SkAutoTUnref<GrGLInterface> i(CreateGrGLInterfaceFromGLContext(mGLContext));
+    i->fCallbackData = reinterpret_cast<GrGLInterfaceCallbackData>(this);
+    mGrGLInterface = i;
+    SkAutoTUnref<GrContext> gr(GrContext::Create(kOpenGL_GrBackend, (GrBackendContext)mGrGLInterface.get()));
+
+    mGrContext = gr;
+}
new file mode 100755
--- /dev/null
+++ b/gfx/gl/SkiaGLGlue.h
@@ -0,0 +1,64 @@
+/* -*- Mode: c++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40; -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+* License, v. 2.0. If a copy of the MPL was not distributed with this
+* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include "mozilla/RefPtr.h"
+
+#ifdef USE_SKIA_GPU
+
+#include "GLContext.h"
+#include "skia/GrGLInterface.h"
+#include "skia/GrContext.h"
+
+namespace mozilla {
+namespace gl {
+
+class SkiaGLGlue : public GenericAtomicRefCounted
+{
+public:
+  SkiaGLGlue(GLContext* context);
+  GLContext* GetGLContext() const { return mGLContext.get(); }
+  GrContext* GetGrContext() const { return mGrContext.get(); }
+
+protected:
+  virtual ~SkiaGLGlue() {
+    /*
+     * These members have inter-dependencies, but do not keep each other alive, so
+     * destruction order is very important here: mGrContext uses mGrGLInterface, and
+     * through it, uses mGLContext
+     */
+    mGrContext = nullptr;
+    mGrGLInterface = nullptr;
+    mGLContext = nullptr;
+  }
+
+private:
+  RefPtr<GLContext> mGLContext;
+  SkRefPtr<GrGLInterface> mGrGLInterface;
+  SkRefPtr<GrContext> mGrContext;
+};
+
+}
+}
+
+#else
+
+class GrContext;
+
+namespace mozilla {
+namespace gl {
+
+class GLContext;
+
+class SkiaGLGlue : public GenericAtomicRefCounted
+{
+public:
+  SkiaGLGlue(GLContext* context);
+  GLContext* GetGLContext() const { return nullptr; }
+  GrContext* GetGrContext() const { return nullptr; }
+};
+}
+}
+
+#endif
\ No newline at end of file
--- a/gfx/gl/SurfaceStream.cpp
+++ b/gfx/gl/SurfaceStream.cpp
@@ -2,16 +2,17 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #include "SurfaceStream.h"
 
 #include "gfxPoint.h"
 #include "SharedSurface.h"
+#include "SharedSurfaceGL.h"
 #include "SurfaceFactory.h"
 #include "GeckoProfiler.h"
 
 namespace mozilla {
 namespace gfx {
 
 SurfaceStreamType
 SurfaceStream::ChooseGLStreamType(SurfaceStream::OMTC omtc,
@@ -48,16 +49,32 @@ SurfaceStream::CreateForType(SurfaceStre
         default:
             MOZ_CRASH("Invalid Type.");
     }
 
     result->mGLContext = glContext;
     return result;
 }
 
+bool
+SurfaceStream_TripleBuffer::CopySurfaceToProducer(SharedSurface* src, SurfaceFactory* factory)
+{
+    if (!mProducer) {
+        New(factory, src->Size(), mProducer);
+        if (!mProducer) {
+            return false;
+        }
+    }
+
+    MOZ_ASSERT(src->Size() == mProducer->Size(), "Size mismatch");
+
+    SharedSurface::Copy(src, mProducer, factory);
+    return true;
+}
+
 void
 SurfaceStream::New(SurfaceFactory* factory, const gfx::IntSize& size,
                    SharedSurface*& surf)
 {
     MOZ_ASSERT(!surf);
     surf = factory->NewSharedSurface(size);
 
     if (surf)
--- a/gfx/gl/SurfaceStream.h
+++ b/gfx/gl/SurfaceStream.h
@@ -6,30 +6,31 @@
 #ifndef SURFACESTREAM_H_
 #define SURFACESTREAM_H_
 
 #include <stack>
 #include <set>
 #include "mozilla/Monitor.h"
 #include "mozilla/Attributes.h"
 #include "mozilla/gfx/Point.h"
+#include "mozilla/GenericRefCounted.h"
 #include "SurfaceTypes.h"
 
 namespace mozilla {
 
 namespace gl {
 class GLContext;
 }
 
 namespace gfx {
 class SharedSurface;
 class SurfaceFactory;
 
 // Owned by: ScreenBuffer
-class SurfaceStream
+class SurfaceStream : public GenericAtomicRefCounted
 {
 public:
     typedef enum {
         MainThread,
         OffMainThread
     } OMTC;
 
     static SurfaceStreamType ChooseGLStreamType(OMTC omtc,
@@ -45,16 +46,18 @@ public:
 
     static SurfaceStream* FromHandle(SurfaceStreamHandle handle) {
         return (SurfaceStream*)handle;
     }
 
     const SurfaceStreamType mType;
 
     mozilla::gl::GLContext* GLContext() const { return mGLContext; }
+
+
 protected:
     // |mProd| is owned by us, but can be ripped away when
     // creating a new GLStream from this one.
     SharedSurface* mProducer;
     std::set<SharedSurface*> mSurfaces;
     std::stack<SharedSurface*> mScraps;
     mutable Monitor mMonitor;
     bool mIsAlive;
@@ -116,16 +119,18 @@ public:
      * and have everything work again.
      * One common failure is asking for a too-large |size|.
      */
     virtual SharedSurface* SwapProducer(SurfaceFactory* factory,
                                         const gfx::IntSize& size) = 0;
 
     virtual SharedSurface* Resize(SurfaceFactory* factory, const gfx::IntSize& size);
 
+    virtual bool CopySurfaceToProducer(SharedSurface* src, SurfaceFactory* factory) { MOZ_ASSERT(0); return false; }
+
 protected:
     // SwapCons will return the same surface more than once,
     // if nothing new has been published.
     virtual SharedSurface* SwapConsumer_NoWait() = 0;
 
 public:
     virtual SharedSurface* SwapConsumer();
 
@@ -184,16 +189,17 @@ protected:
     SharedSurface* mConsumer;
 
     // To support subclasses initializing the mType.
     SurfaceStream_TripleBuffer(SurfaceStreamType type, SurfaceStream* prevStream);
 
 public:
     SurfaceStream_TripleBuffer(SurfaceStream* prevStream);
     virtual ~SurfaceStream_TripleBuffer();
+    virtual bool CopySurfaceToProducer(SharedSurface* src, SurfaceFactory* factory);
 
 private:
     // Common constructor code.
     void Init(SurfaceStream* prevStream);
 
 public:
     // Done writing to prod, swap prod and staging
     virtual SharedSurface* SwapProducer(SurfaceFactory* factory,
--- a/gfx/gl/moz.build
+++ b/gfx/gl/moz.build
@@ -70,19 +70,19 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'wind
         'SharedSurfaceANGLE.h',
         'WGLLibrary.h',
     ]
     UNIFIED_SOURCES += [
         'GLContextProviderEGL.cpp',
         'SharedSurfaceANGLE.cpp',
     ]
 if CONFIG['MOZ_ENABLE_SKIA_GPU']:
-    EXPORTS += ['GLContextSkia.h']
+    EXPORTS += ['SkiaGLGlue.h']
     UNIFIED_SOURCES += [
-        'GLContextSkia.cpp',
+        'SkiaGLGlue.cpp',
     ]
 
 if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gonk':
     UNIFIED_SOURCES += ['SharedSurfaceGralloc.cpp']
     EXPORTS += ['SharedSurfaceGralloc.h']
     LOCAL_INCLUDES += ['/widget/gonk']
 
 if gl_provider == 'CGL':
--- a/gfx/layers/CopyableCanvasLayer.cpp
+++ b/gfx/layers/CopyableCanvasLayer.cpp
@@ -27,32 +27,34 @@
 using namespace mozilla::gfx;
 using namespace mozilla::gl;
 
 namespace mozilla {
 namespace layers {
 
 CopyableCanvasLayer::CopyableCanvasLayer(LayerManager* aLayerManager, void *aImplData) :
   CanvasLayer(aLayerManager, aImplData)
+  , mStream(nullptr)
 {
   MOZ_COUNT_CTOR(CopyableCanvasLayer);
 }
 
 CopyableCanvasLayer::~CopyableCanvasLayer()
 {
   MOZ_COUNT_DTOR(CopyableCanvasLayer);
 }
 
 void
 CopyableCanvasLayer::Initialize(const Data& aData)
 {
   NS_ASSERTION(mSurface == nullptr, "BasicCanvasLayer::Initialize called twice!");
 
   if (aData.mGLContext) {
     mGLContext = aData.mGLContext;
+    mStream = aData.mStream;
     mIsGLAlphaPremult = aData.mIsGLAlphaPremult;
     mNeedsYFlip = true;
     MOZ_ASSERT(mGLContext->IsOffscreen(), "canvas gl context isn't offscreen");
 
     // [Basic Layers, non-OMTC] WebGL layer init.
     // `GLScreenBuffer::Morph`ing is only needed in BasicShadowableCanvasLayer.
   } else if (aData.mDrawTarget) {
     mDrawTarget = aData.mDrawTarget;
@@ -65,17 +67,17 @@ CopyableCanvasLayer::Initialize(const Da
   }
 
   mBounds.SetRect(0, 0, aData.mSize.width, aData.mSize.height);
 }
 
 bool
 CopyableCanvasLayer::IsDataValid(const Data& aData)
 {
-  return mGLContext == aData.mGLContext;
+  return mGLContext == aData.mGLContext && mStream == aData.mStream;
 }
 
 void
 CopyableCanvasLayer::UpdateTarget(DrawTarget* aDestTarget,
                                   SourceSurface* aMaskSurface)
 {
   if (!IsDirty())
     return;
--- a/gfx/layers/CopyableCanvasLayer.h
+++ b/gfx/layers/CopyableCanvasLayer.h
@@ -17,16 +17,23 @@
 #include "mozilla/Preferences.h"        // for Preferences
 #include "mozilla/RefPtr.h"             // for RefPtr
 #include "mozilla/gfx/2D.h"             // for DrawTarget
 #include "mozilla/mozalloc.h"           // for operator delete, etc
 #include "nsAutoPtr.h"                  // for nsRefPtr
 #include "nsISupportsImpl.h"            // for MOZ_COUNT_CTOR, etc
 
 namespace mozilla {
+
+namespace gfx {
+class SurfaceStream;
+class SharedSurface;
+class SurfaceFactory;
+}
+
 namespace layers {
 
 class CanvasClientWebGL;
 
 /**
  * A shared CanvasLayer implementation that supports copying
  * its contents into a gfxASurface using UpdateSurface.
  */
@@ -49,16 +56,18 @@ protected:
   void UpdateTarget(gfx::DrawTarget* aDestTarget = nullptr,
                     gfx::SourceSurface* aMaskSurface = nullptr);
 
   RefPtr<gfx::SourceSurface> mSurface;
   nsRefPtr<gfxASurface> mDeprecatedSurface;
   nsRefPtr<mozilla::gl::GLContext> mGLContext;
   mozilla::RefPtr<mozilla::gfx::DrawTarget> mDrawTarget;
 
+  RefPtr<gfx::SurfaceStream> mStream;
+
   uint32_t mCanvasFramebuffer;
 
   bool mIsGLAlphaPremult;
   bool mNeedsYFlip;
 
   RefPtr<gfx::DataSourceSurface> mCachedTempSurface;
   nsRefPtr<gfxImageSurface> mDeprecatedCachedTempSurface;
   gfx::IntSize mCachedSize;
--- a/gfx/layers/Layers.h
+++ b/gfx/layers/Layers.h
@@ -58,16 +58,17 @@ class FrameLayerBuilder;
 class WebGLContext;
 
 namespace gl {
 class GLContext;
 }
 
 namespace gfx {
 class DrawTarget;
+class SurfaceStream;
 }
 
 namespace css {
 class ComputedTimingFunction;
 }
 
 namespace layers {
 
@@ -590,22 +591,29 @@ public:
     // avoid loading the compositor!
     return LayersBackend::LAYERS_BASIC != aBackend && LayersBackend::LAYERS_NONE != aBackend;
   }
 
   virtual bool IsCompositingCheap() { return true; }
 
   bool IsInTransaction() const { return mInTransaction; }
 
+  virtual void AddRegionToClear(const nsIntRegion& aRegion)
+  {
+    mRegionToClear.Or(mRegionToClear, aRegion);
+  }
+
 protected:
   nsRefPtr<Layer> mRoot;
   gfx::UserData mUserData;
   bool mDestroyed;
   bool mSnapEffectiveTransforms;
 
+  nsIntRegion mRegionToClear;
+
   // Print interesting information about this into aTo.  Internally
   // used to implement Dump*() and Log*().
   virtual nsACString& PrintInfo(nsACString& aTo, const char* aPrefix);
 
   static void InitLog();
   static PRLogModuleInfo* sLog;
   uint64_t mId;
   bool mInTransaction;
@@ -1329,16 +1337,17 @@ public:
 
 #ifdef DEBUG
   void SetDebugColorIndex(uint32_t aIndex) { mDebugColorIndex = aIndex; }
   uint32_t GetDebugColorIndex() { return mDebugColorIndex; }
 #endif
 
   virtual LayerRenderState GetRenderState() { return LayerRenderState(); }
 
+
   void Mutated()
   {
     mManager->Mutated(this);
   }
 
 protected:
   Layer(LayerManager* aManager, void* aImplData);
 
@@ -1791,24 +1800,32 @@ protected:
  * must not be modified during a layer transaction.
  */
 class CanvasLayer : public Layer {
 public:
   struct Data {
     Data()
       : mDrawTarget(nullptr)
       , mGLContext(nullptr)
+      , mStream(nullptr)
+      , mTexID(0)
       , mSize(0,0)
       , mIsGLAlphaPremult(false)
     { }
 
     // One of these two must be specified for Canvas2D, but never both
     mozilla::gfx::DrawTarget *mDrawTarget; // a DrawTarget for the canvas contents
     mozilla::gl::GLContext* mGLContext; // or this, for GL.
 
+    // Canvas/SkiaGL uses this
+    mozilla::gfx::SurfaceStream* mStream;
+
+    // ID of the texture backing the canvas layer (defaults to 0)
+    uint32_t mTexID;
+
     // The size of the canvas content
     nsIntSize mSize;
 
     // Whether mGLContext contains data that is alpha-premultiplied.
     bool mIsGLAlphaPremult;
   };
 
   /**
--- a/gfx/layers/basic/BasicLayerManager.cpp
+++ b/gfx/layers/basic/BasicLayerManager.cpp
@@ -620,16 +620,26 @@ BasicLayerManager::EndTransactionInterna
       nsIntRegion region;
       MarkLayersHidden(mRoot, clipRect, clipRect, region, ALLOW_OPAQUE);
       if (mUsingDefaultTarget && mDoubleBuffering != BufferMode::BUFFER_NONE) {
         ApplyDoubleBuffering(mRoot, clipRect);
       }
     }
 
     PaintLayer(mTarget, mRoot, aCallback, aCallbackData, nullptr);
+    if (!mRegionToClear.IsEmpty()) {
+      AutoSetOperator op(mTarget, gfxContext::OPERATOR_CLEAR);
+      nsIntRegionRectIterator iter(mRegionToClear);
+      const nsIntRect *r;
+      while ((r = iter.Next())) {
+        mTarget->NewPath();
+        mTarget->Rectangle(gfxRect(r->x, r->y, r->width, r->height));
+        mTarget->Fill();
+      }
+    }
     if (mWidget) {
       FlashWidgetUpdateArea(mTarget);
     }
     RenderDebugOverlay();
     RecordFrame();
     PostPresent();
 
     if (!mTransactionIncomplete) {
--- a/gfx/layers/client/CanvasClient.cpp
+++ b/gfx/layers/client/CanvasClient.cpp
@@ -111,17 +111,28 @@ CanvasClientSurfaceStream::CanvasClientS
   : CanvasClient(aLayerForwarder, aFlags)
 {
 }
 
 void
 CanvasClientSurfaceStream::Update(gfx::IntSize aSize, ClientCanvasLayer* aLayer)
 {
   GLScreenBuffer* screen = aLayer->mGLContext->Screen();
-  SurfaceStream* stream = screen->Stream();
+  SurfaceStream* stream = nullptr;
+
+  if (aLayer->mStream) {
+    stream = aLayer->mStream;
+
+    // Copy our current surface to the current producer surface in our stream, then
+    // call SwapProducer to make a new buffer ready.
+    stream->CopySurfaceToProducer(aLayer->mTextureSurface, aLayer->mFactory);
+    stream->SwapProducer(aLayer->mFactory, gfx::IntSize(aSize.width, aSize.height));
+  } else {
+    stream = screen->Stream();
+  }
 
   bool isCrossProcess = !(XRE_GetProcessType() == GeckoProcessType_Default);
   bool bufferCreated = false;
   if (isCrossProcess) {
 #ifdef MOZ_WIDGET_GONK
     SharedSurface* surf = stream->SwapConsumer();
     if (!surf) {
       printf_stderr("surf is null post-SwapConsumer!\n");
@@ -250,17 +261,25 @@ DeprecatedCanvasClientSurfaceStream::Upd
   }
 
   NS_ASSERTION(aLayer->mGLContext, "CanvasClientSurfaceStream should only be used with GL canvases");
 
   // the content type won't be used
   mDeprecatedTextureClient->EnsureAllocated(aSize, gfxContentType::COLOR);
 
   GLScreenBuffer* screen = aLayer->mGLContext->Screen();
-  SurfaceStream* stream = screen->Stream();
+  SurfaceStream* stream = nullptr;
+
+  if (aLayer->mStream) {
+    stream = aLayer->mStream;
+    stream->CopySurfaceToProducer(aLayer->mTextureSurface, aLayer->mFactory);
+    stream->SwapProducer(aLayer->mFactory, gfx::IntSize(aSize.width, aSize.height));
+  } else {
+    stream = screen->Stream();
+  }
 
   bool isCrossProcess = !(XRE_GetProcessType() == GeckoProcessType_Default);
   if (isCrossProcess) {
     // swap staging -> consumer so we can send it to the compositor
     SharedSurface* surf = stream->SwapConsumer();
     if (!surf) {
       printf_stderr("surf is null post-SwapConsumer!\n");
       return;
--- a/gfx/layers/client/ClientCanvasLayer.cpp
+++ b/gfx/layers/client/ClientCanvasLayer.cpp
@@ -28,59 +28,98 @@
 #include "gfxPrefs.h"                   // for WebGLForceLayersReadback
 
 using namespace mozilla::gfx;
 using namespace mozilla::gl;
 
 namespace mozilla {
 namespace layers {
 
+ClientCanvasLayer::~ClientCanvasLayer()
+{
+  MOZ_COUNT_DTOR(ClientCanvasLayer);
+  if (mCanvasClient) {
+    mCanvasClient->OnDetach();
+    mCanvasClient = nullptr;
+  }
+  if (mTextureSurface) {
+    delete mTextureSurface;
+  }
+}
+
 void
 ClientCanvasLayer::Initialize(const Data& aData)
 {
   CopyableCanvasLayer::Initialize(aData);
- 
+
   mCanvasClient = nullptr;
 
   if (mGLContext) {
     GLScreenBuffer* screen = mGLContext->Screen();
+
+    SurfaceCaps caps = screen->Caps();
+    if (mStream) {
+      // The screen caps are irrelevant if we're using a separate stream
+      caps = GetContentFlags() & CONTENT_OPAQUE ? SurfaceCaps::ForRGB() : SurfaceCaps::ForRGBA();
+    }
+
     SurfaceStreamType streamType =
         SurfaceStream::ChooseGLStreamType(SurfaceStream::OffMainThread,
                                           screen->PreserveBuffer());
     SurfaceFactory_GL* factory = nullptr;
     if (!gfxPrefs::WebGLForceLayersReadback()) {
       if (ClientManager()->AsShadowForwarder()->GetCompositorBackendType() == mozilla::layers::LayersBackend::LAYERS_OPENGL) {
         if (mGLContext->GetContextType() == GLContextType::EGL) {
           bool isCrossProcess = !(XRE_GetProcessType() == GeckoProcessType_Default);
 
           if (!isCrossProcess) {
             // [Basic/OGL Layers, OMTC] WebGL layer init.
-            factory = SurfaceFactory_EGLImage::Create(mGLContext, screen->Caps());
+            factory = SurfaceFactory_EGLImage::Create(mGLContext, caps);
           } else {
             // [Basic/OGL Layers, OOPC] WebGL layer init. (Out Of Process Compositing)
 #ifdef MOZ_WIDGET_GONK
-            factory = new SurfaceFactory_Gralloc(mGLContext, screen->Caps(), ClientManager()->AsShadowForwarder());
+            factory = new SurfaceFactory_Gralloc(mGLContext, caps, ClientManager()->AsShadowForwarder());
 #else
             // we could do readback here maybe
             NS_NOTREACHED("isCrossProcess but not on native B2G!");
 #endif
           }
         } else {
           // [Basic Layers, OMTC] WebGL layer init.
           // Well, this *should* work...
 #ifdef XP_MACOSX
-          factory = new SurfaceFactory_IOSurface(mGLContext, screen->Caps());
+          factory = new SurfaceFactory_IOSurface(mGLContext, caps);
 #else
-          factory = new SurfaceFactory_GLTexture(mGLContext, nullptr, screen->Caps());
+          factory = new SurfaceFactory_GLTexture(mGLContext, nullptr, caps);
 #endif
         }
       }
     }
 
-    if (factory) {
+    if (mStream) {
+      // We're using a stream other than the one in the default screen
+      mFactory = factory;
+      if (!mFactory) {
+        // Absolutely must have a factory here, so create a basic one
+        mFactory = new SurfaceFactory_Basic(mGLContext, caps);
+      }
+
+      gfx::IntSize size = gfx::IntSize(aData.mSize.width, aData.mSize.height);
+      mTextureSurface = SharedSurface_GLTexture::Create(mGLContext, mGLContext,
+                                                        mGLContext->GetGLFormats(),
+                                                        size, caps.alpha, aData.mTexID);
+      SharedSurface* producer = mStream->SwapProducer(mFactory, size);
+      if (!producer) {
+        // Fallback to basic factory
+        delete mFactory;
+        mFactory = new SurfaceFactory_Basic(mGLContext, caps);
+        producer = mStream->SwapProducer(mFactory, size);
+        MOZ_ASSERT(producer, "Failed to create initial canvas surface with basic factory");
+      }
+    } else if (factory) {
       screen->Morph(factory, streamType);
     }
   }
 }
 
 void
 ClientCanvasLayer::RenderLayer()
 {
--- a/gfx/layers/client/ClientCanvasLayer.h
+++ b/gfx/layers/client/ClientCanvasLayer.h
@@ -28,27 +28,22 @@ class ShadowableLayer;
 class ClientCanvasLayer : public CopyableCanvasLayer,
                           public ClientLayer
 {
   typedef CanvasClient::CanvasClientType CanvasClientType;
 public:
   ClientCanvasLayer(ClientLayerManager* aLayerManager) :
     CopyableCanvasLayer(aLayerManager,
                         static_cast<ClientLayer*>(MOZ_THIS_IN_INITIALIZER_LIST()))
+    , mTextureSurface(nullptr)
+    , mFactory(nullptr)
   {
     MOZ_COUNT_CTOR(ClientCanvasLayer);
   }
-  virtual ~ClientCanvasLayer()
-  {
-    MOZ_COUNT_DTOR(ClientCanvasLayer);
-    if (mCanvasClient) {
-      mCanvasClient->OnDetach();
-      mCanvasClient = nullptr;
-    }
-  }
+  virtual ~ClientCanvasLayer();
 
   virtual void SetVisibleRegion(const nsIntRegion& aRegion)
   {
     NS_ASSERTION(ClientManager()->InConstruction(),
                  "Can only set properties in construction phase");
     CanvasLayer::SetVisibleRegion(aRegion);
   }
 
@@ -92,16 +87,19 @@ protected:
     if (mGLContext) {
       return CanvasClient::CanvasClientGLContext;
     }
     return CanvasClient::CanvasClientSurface;
   }
 
   RefPtr<CanvasClient> mCanvasClient;
 
+  gfx::SharedSurface* mTextureSurface;
+  gfx::SurfaceFactory* mFactory;
+
   friend class DeprecatedCanvasClient2D;
   friend class CanvasClient2D;
   friend class DeprecatedCanvasClientSurfaceStream;
   friend class CanvasClientSurfaceStream;
 };
 }
 }
 
--- a/gfx/layers/d3d10/LayerManagerD3D10.cpp
+++ b/gfx/layers/d3d10/LayerManagerD3D10.cpp
@@ -704,16 +704,40 @@ LayerManagerD3D10::Render(EndTransaction
     r.left = r.top = 0;
     r.right = rect.width;
     r.bottom = rect.height;
   }
   device()->RSSetScissorRects(1, &r);
 
   static_cast<LayerD3D10*>(mRoot->ImplData())->RenderLayer();
 
+  if (!mRegionToClear.IsEmpty()) {
+    float color[4] = { 0.0f, 0.0f, 0.0f, 0.0f };
+    gfx::Matrix4x4 transform;
+    effect()->GetVariableByName("mLayerTransform")->SetRawValue(&transform, 0, 64);
+    effect()->GetVariableByName("fLayerColor")->AsVector()->SetFloatVector(color);
+
+    ID3D10EffectTechnique *technique = effect()->GetTechniqueByName("RenderClearLayer");
+
+    nsIntRegionRectIterator iter(mRegionToClear);
+    const nsIntRect *r;
+    while ((r = iter.Next())) {
+      effect()->GetVariableByName("vLayerQuad")->AsVector()->SetFloatVector(
+        ShaderConstantRectD3D10(
+        (float)r->x,
+        (float)r->y,
+        (float)r->width,
+        (float)r->height)
+        );
+
+      technique->GetPassByIndex(0)->Apply(0);
+      device()->Draw(4, 0);
+    }
+  }
+
   // See bug 630197 - we have some reasons to believe if an earlier call
   // returned an error, the upcoming present call may raise an exception.
   // This will check if any of the calls done recently has returned an error
   // and bails on composition. On the -next- frame we will then abandon
   // hardware acceleration from gfxWindowsPlatform::VerifyD2DDevice.
   // This might not be the 'optimal' solution but it will help us assert
   // whether our thoughts of the causes of the issues are correct.
   if (FAILED(mDevice->GetDeviceRemovedReason())) {
--- a/gfx/layers/d3d10/LayerManagerD3D10.fx
+++ b/gfx/layers/d3d10/LayerManagerD3D10.fx
@@ -443,16 +443,28 @@ technique10 RenderSolidColorLayer
     SetRasterizerState( LayerRast );
     SetBlendState( Premul, float4( 0.0f, 0.0f, 0.0f, 0.0f ), 0xFFFFFFFF );
     SetVertexShader( CompileShader( vs_4_0_level_9_3, LayerQuadVS() ) );
     SetGeometryShader( NULL );
     SetPixelShader( CompileShader( ps_4_0_level_9_3, SolidColorShader() ) );
   }
 }
 
+technique10 RenderClearLayer
+{
+  pass P0
+  {
+    SetRasterizerState( LayerRast );
+    SetBlendState( NoBlendDual, float4( 0.0f, 0.0f, 0.0f, 0.0f ), 0xFFFFFFFF );
+    SetVertexShader( CompileShader( vs_4_0_level_9_3, LayerQuadVS() ) );
+    SetGeometryShader( NULL );
+    SetPixelShader( CompileShader( ps_4_0_level_9_3, SolidColorShader() ) );
+  }
+}
+
 technique10 PrepareAlphaExtractionTextures
 {
     pass P0
     {
         SetRasterizerState( LayerRast );
         SetBlendState( NoBlendDual, float4( 0.0f, 0.0f, 0.0f, 0.0f ), 0xFFFFFFFF );
         SetVertexShader( CompileShader( vs_4_0_level_9_3, LayerQuadVS() ) );
         SetGeometryShader( NULL );
--- a/gfx/layers/d3d10/LayerManagerD3D10Effect.h
+++ b/gfx/layers/d3d10/LayerManagerD3D10Effect.h
@@ -92,17 +92,17 @@ SamplerState LayerTextureSamplerLinear
 SamplerState LayerTextureSamplerPoint
 {
     Filter   = uint(MIN_MAG_MIP_POINT /* 0 */);
     AddressU = uint(CLAMP /* 3 */);
     AddressV = uint(CLAMP /* 3 */);
 };
 
 //
-// 20 technique(s)
+// 21 technique(s)
 //
 technique10 RenderRGBLayerPremul
 {
     pass P0
     {
         RasterizerState = LayerRast;
         AB_BlendFactor = float4(0, 0, 0, 0);
         AB_SampleMask = uint(0xffffffff);
@@ -2073,16 +2073,211 @@ technique10 RenderSolidColorLayer
             ret 
             // Approximately 2 instruction slots used
                     
         };
     }
 
 }
 
+technique10 RenderClearLayer
+{
+    pass P0
+    {
+        RasterizerState = LayerRast;
+        AB_BlendFactor = float4(0, 0, 0, 0);
+        AB_SampleMask = uint(0xffffffff);
+        BlendState = NoBlendDual;
+        VertexShader = asm {
+            //
+            // Generated by Microsoft (R) HLSL Shader Compiler 9.29.952.3111
+            //
+            //
+            // Buffer Definitions: 
+            //
+            // cbuffer PerLayer
+            // {
+            //
+            //   float4 vTextureCoords;             // Offset:    0 Size:    16
+            //   float4 vLayerQuad;                 // Offset:   16 Size:    16
+            //   float4 vMaskQuad;                  // Offset:   32 Size:    16 [unused]
+            //   float fLayerOpacity;               // Offset:   48 Size:     4 [unused]
+            //   float4x4 mLayerTransform;          // Offset:   64 Size:    64
+            //
+            // }
+            //
+            // cbuffer PerOccasionalLayer
+            // {
+            //
+            //   float4 vRenderTargetOffset;        // Offset:    0 Size:    16
+            //   float4 fLayerColor;                // Offset:   16 Size:    16 [unused]
+            //
+            // }
+            //
+            // cbuffer PerLayerManager
+            // {
+            //
+            //   float4x4 mProjection;              // Offset:    0 Size:    64
+            //
+            // }
+            //
+            //
+            // Resource Bindings:
+            //
+            // Name                                 Type  Format         Dim Slot Elements
+            // ------------------------------ ---------- ------- ----------- ---- --------
+            // PerLayer                          cbuffer      NA          NA    0        1
+            // PerOccasionalLayer                cbuffer      NA          NA    1        1
+            // PerLayerManager                   cbuffer      NA          NA    2        1
+            //
+            //
+            //
+            // Input signature:
+            //
+            // Name                 Index   Mask Register SysValue Format   Used
+            // -------------------- ----- ------ -------- -------- ------ ------
+            // POSITION                 0   xy          0     NONE  float   xy  
+            //
+            //
+            // Output signature:
+            //
+            // Name                 Index   Mask Register SysValue Format   Used
+            // -------------------- ----- ------ -------- -------- ------ ------
+            // SV_Position              0   xyzw        0      POS  float   xyzw
+            // TEXCOORD                 0   xy          1     NONE  float   xy  
+            //
+            //
+            // Constant buffer to DX9 shader constant mappings:
+            //
+            // Target Reg Buffer  Start Reg # of Regs        Data Conversion
+            // ---------- ------- --------- --------- ----------------------
+            // c1         cb0             0         2  ( FLT, FLT, FLT, FLT)
+            // c3         cb0             4         2  ( FLT, FLT, FLT, FLT)
+            // c5         cb0             7         1  ( FLT, FLT, FLT, FLT)
+            // c6         cb1             0         1  ( FLT, FLT, FLT, FLT)
+            // c7         cb2             0         4  ( FLT, FLT, FLT, FLT)
+            //
+            //
+            // Runtime generated constant mappings:
+            //
+            // Target Reg                               Constant Description
+            // ---------- --------------------------------------------------
+            // c0                              Vertex Shader position offset
+            //
+            //
+            // Level9 shader bytecode:
+            //
+                vs_2_x
+                dcl_texcoord v0
+                mad oT0.xy, v0, c1.zwzw, c1
+                mad r0.xy, v0, c2.zwzw, c2
+                mul r1, r0.y, c4
+                mad r0, c3, r0.x, r1
+                add r0, r0, c5
+                rcp r1.x, r0.w
+                mul r0.xyz, r0, r1.x
+                add r0, r0, -c6
+                mul r0.xyz, r0.w, r0
+                mul r1, r0.y, c8
+                mad r1, c7, r0.x, r1
+                mad r1, c9, r0.z, r1
+                mad r0, c10, r0.w, r1
+                mad oPos.xy, r0.w, c0, r0
+                mov oPos.zw, r0
+            
+            // approximately 15 instruction slots used
+            vs_4_0
+            dcl_constantbuffer cb0[8], immediateIndexed
+            dcl_constantbuffer cb1[1], immediateIndexed
+            dcl_constantbuffer cb2[4], immediateIndexed
+            dcl_input v0.xy
+            dcl_output_siv o0.xyzw, position
+            dcl_output o1.xy
+            dcl_temps 2
+            mad r0.xy, v0.xyxx, cb0[1].zwzz, cb0[1].xyxx
+            mul r1.xyzw, r0.yyyy, cb0[5].xyzw
+            mad r0.xyzw, cb0[4].xyzw, r0.xxxx, r1.xyzw
+            add r0.xyzw, r0.xyzw, cb0[7].xyzw
+            div r0.xyz, r0.xyzx, r0.wwww
+            add r0.xyzw, r0.xyzw, -cb1[0].xyzw
+            mul r0.xyz, r0.wwww, r0.xyzx
+            mul r1.xyzw, r0.yyyy, cb2[1].xyzw
+            mad r1.xyzw, cb2[0].xyzw, r0.xxxx, r1.xyzw
+            mad r1.xyzw, cb2[2].xyzw, r0.zzzz, r1.xyzw
+            mad o0.xyzw, cb2[3].xyzw, r0.wwww, r1.xyzw
+            mad o1.xy, v0.xyxx, cb0[0].zwzz, cb0[0].xyxx
+            ret 
+            // Approximately 13 instruction slots used
+                    
+        };
+        GeometryShader = NULL;
+        PixelShader = asm {
+            //
+            // Generated by Microsoft (R) HLSL Shader Compiler 9.29.952.3111
+            //
+            //
+            // Buffer Definitions: 
+            //
+            // cbuffer PerOccasionalLayer
+            // {
+            //
+            //   float4 vRenderTargetOffset;        // Offset:    0 Size:    16 [unused]
+            //   float4 fLayerColor;                // Offset:   16 Size:    16
+            //
+            // }
+            //
+            //
+            // Resource Bindings:
+            //
+            // Name                                 Type  Format         Dim Slot Elements
+            // ------------------------------ ---------- ------- ----------- ---- --------
+            // PerOccasionalLayer                cbuffer      NA          NA    0        1
+            //
+            //
+            //
+            // Input signature:
+            //
+            // Name                 Index   Mask Register SysValue Format   Used
+            // -------------------- ----- ------ -------- -------- ------ ------
+            // SV_Position              0   xyzw        0      POS  float       
+            // TEXCOORD                 0   xy          1     NONE  float       
+            //
+            //
+            // Output signature:
+            //
+            // Name                 Index   Mask Register SysValue Format   Used
+            // -------------------- ----- ------ -------- -------- ------ ------
+            // SV_Target                0   xyzw        0   TARGET  float   xyzw
+            //
+            //
+            // Constant buffer to DX9 shader constant mappings:
+            //
+            // Target Reg Buffer  Start Reg # of Regs        Data Conversion
+            // ---------- ------- --------- --------- ----------------------
+            // c0         cb0             1         1  ( FLT, FLT, FLT, FLT)
+            //
+            //
+            // Level9 shader bytecode:
+            //
+                ps_2_x
+                mov oC0, c0
+            
+            // approximately 1 instruction slot used
+            ps_4_0
+            dcl_constantbuffer cb0[2], immediateIndexed
+            dcl_output o0.xyzw
+            mov o0.xyzw, cb0[1].xyzw
+            ret 
+            // Approximately 2 instruction slots used
+                    
+        };
+    }
+
+}
+
 technique10 PrepareAlphaExtractionTextures
 {
     pass P0
     {
         RasterizerState = LayerRast;
         AB_BlendFactor = float4(0, 0, 0, 0);
         AB_SampleMask = uint(0xffffffff);
         BlendState = NoBlendDual;
@@ -4679,36 +4874,36 @@ technique10 RenderSolidColorLayerMask
     }
 
 }
 
 #endif
 
 const BYTE g_main[] =
 {
-     68,  88,  66,  67, 218, 142, 
-     35, 224, 179, 182, 169,  21, 
-     79, 128, 135,  14, 250, 174, 
-     44, 181,   1,   0,   0,   0, 
-     30,  32,   1,   0,   1,   0, 
+     68,  88,  66,  67, 238,  59, 
+     90, 147, 223,  50, 250, 186, 
+    190, 133, 137,  53, 139,  30, 
+     68, 141,   1,   0,   0,   0, 
+    107,  43,   1,   0,   1,   0, 
       0,   0,  36,   0,   0,   0, 
-     70,  88,  49,  48, 242,  31, 
+     70,  88,  49,  48,  63,  43, 
       1,   0,   1,  16, 255, 254, 
       3,   0,   0,   0,   8,   0, 
       0,   0,  13,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-     20,   0,   0,   0,  62,  16, 
+     21,   0,   0,   0,   3,  27, 
       1,   0,   0,   0,   0,   0, 
       6,   0,   0,   0,   0,   0, 
       0,   0,   4,   0,   0,   0, 
       1,   0,   0,   0,   2,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,  40,   0, 
-      0,   0,  40,   0,   0,   0, 
+      0,   0,   0,   0,  42,   0, 
+      0,   0,  42,   0,   0,   0, 
       0,   0,   0,   0,  80, 101, 
     114,  76,  97, 121, 101, 114, 
       0, 102, 108, 111,  97, 116, 
      52,   0,  13,   0,   0,   0, 
       1,   0,   0,   0,   0,   0, 
       0,   0,  16,   0,   0,   0, 
      16,   0,   0,   0,  16,   0, 
       0,   0,  10,  33,   0,   0, 
@@ -9728,155 +9923,2300 @@ const BYTE g_main[] =
       0,   8,   0,   0,   0,  32, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   3, 
       0,   0,   0,   0,   0,   0, 
       0,  15,   0,   0,   0,  83, 
      86,  95,  84,  97, 114, 103, 
     101, 116,   0, 171, 171, 251, 
     114,   0,   0,   0,   0,   0, 
-      0,  80, 114, 101, 112,  97, 
-    114, 101,  65, 108, 112, 104, 
-     97,  69, 120, 116, 114,  97, 
-     99, 116, 105, 111, 110,  84, 
+      0,  82, 101, 110, 100, 101, 
+    114,  67, 108, 101,  97, 114, 
+     76,  97, 121, 101, 114,   0, 
+      4,   0,   0,   0,   1,   0, 
+      0,   0,   0,   0,   0,   0, 
+      1,   0,   0,   0,   0,   0, 
+      0,   0,   1,   0,   0,   0, 
+      0,   0,   0,   0,   1,   0, 
+      0,   0,   0,   0,   0,   0, 
+      1,   0,   0,   0,   3,   0, 
+      0,   0, 255, 255, 255, 255, 
+    136,   7,   0,   0,  68,  88, 
+     66,  67, 249,  28, 197, 252, 
+    166, 119,  59, 228, 111, 222, 
+    205, 192, 170, 128, 255,  70, 
+      1,   0,   0,   0, 136,   7, 
+      0,   0,   6,   0,   0,   0, 
+     56,   0,   0,   0, 188,   1, 
+      0,   0, 228,   3,   0,   0, 
+     96,   4,   0,   0, 252,   6, 
+      0,   0,  48,   7,   0,   0, 
+     65, 111, 110,  57, 124,   1, 
+      0,   0, 124,   1,   0,   0, 
+      0,   2, 254, 255,  24,   1, 
+      0,   0, 100,   0,   0,   0, 
+      5,   0,  36,   0,   0,   0, 
+     96,   0,   0,   0,  96,   0, 
+      0,   0,  36,   0,   1,   0, 
+     96,   0,   0,   0,   0,   0, 
+      2,   0,   1,   0,   0,   0, 
+      0,   0,   0,   0,   4,   0, 
+      2,   0,   3,   0,   0,   0, 
+      0,   0,   0,   0,   7,   0, 
+      1,   0,   5,   0,   0,   0, 
+      0,   0,   1,   0,   0,   0, 
+      1,   0,   6,   0,   0,   0, 
+      0,   0,   2,   0,   0,   0, 
+      4,   0,   7,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      1,   2, 254, 255,  31,   0, 
+      0,   2,   5,   0,   0, 128, 
+      0,   0,  15, 144,   4,   0, 
+      0,   4,   0,   0,   3, 224, 
+      0,   0, 228, 144,   1,   0, 
+    238, 160,   1,   0, 228, 160, 
+      4,   0,   0,   4,   0,   0, 
+      3, 128,   0,   0, 228, 144, 
+      2,   0, 238, 160,   2,   0, 
+    228, 160,   5,   0,   0,   3, 
+      1,   0,  15, 128,   0,   0, 
+     85, 128,   4,   0, 228, 160, 
+      4,   0,   0,   4,   0,   0, 
+     15, 128,   3,   0, 228, 160, 
+      0,   0,   0, 128,   1,   0, 
+    228, 128,   2,   0,   0,   3, 
+      0,   0,  15, 128,   0,   0, 
+    228, 128,   5,   0, 228, 160, 
+      6,   0,   0,   2,   1,   0, 
+      1, 128,   0,   0, 255, 128, 
+      5,   0,   0,   3,   0,   0, 
+      7, 128,   0,   0, 228, 128, 
+      1,   0,   0, 128,   2,   0, 
+      0,   3,   0,   0,  15, 128, 
+      0,   0, 228, 128,   6,   0, 
+    228, 161,   5,   0,   0,   3, 
+      0,   0,   7, 128,   0,   0, 
+    255, 128,   0,   0, 228, 128, 
+      5,   0,   0,   3,   1,   0, 
+     15, 128,   0,   0,  85, 128, 
+      8,   0, 228, 160,   4,   0, 
+      0,   4,   1,   0,  15, 128, 
+      7,   0, 228, 160,   0,   0, 
+      0, 128,   1,   0, 228, 128, 
+      4,   0,   0,   4,   1,   0, 
+     15, 128,   9,   0, 228, 160, 
+      0,   0, 170, 128,   1,   0, 
+    228, 128,   4,   0,   0,   4, 
+      0,   0,  15, 128,  10,   0, 
+    228, 160,   0,   0, 255, 128, 
+      1,   0, 228, 128,   4,   0, 
+      0,   4,   0,   0,   3, 192, 
+      0,   0, 255, 128,   0,   0, 
+    228, 160,   0,   0, 228, 128, 
+      1,   0,   0,   2,   0,   0, 
+     12, 192,   0,   0, 228, 128, 
+    255, 255,   0,   0,  83,  72, 
+     68,  82,  32,   2,   0,   0, 
+     64,   0,   1,   0, 136,   0, 
+      0,   0,  89,   0,   0,   4, 
+     70, 142,  32,   0,   0,   0, 
+      0,   0,   8,   0,   0,   0, 
+     89,   0,   0,   4,  70, 142, 
+     32,   0,   1,   0,   0,   0, 
+      1,   0,   0,   0,  89,   0, 
+      0,   4,  70, 142,  32,   0, 
+      2,   0,   0,   0,   4,   0, 
+      0,   0,  95,   0,   0,   3, 
+     50,  16,  16,   0,   0,   0, 
+      0,   0, 103,   0,   0,   4, 
+    242,  32,  16,   0,   0,   0, 
+      0,   0,   1,   0,   0,   0, 
+    101,   0,   0,   3,  50,  32, 
+     16,   0,   1,   0,   0,   0, 
+    104,   0,   0,   2,   2,   0, 
+      0,   0,  50,   0,   0,  11, 
+     50,   0,  16,   0,   0,   0, 
+      0,   0,  70,  16,  16,   0, 
+      0,   0,   0,   0, 230, 138, 
+     32,   0,   0,   0,   0,   0, 
+      1,   0,   0,   0,  70, 128, 
+     32,   0,   0,   0,   0,   0, 
+      1,   0,   0,   0,  56,   0, 
+      0,   8, 242,   0,  16,   0, 
+      1,   0,   0,   0,  86,   5, 
+     16,   0,   0,   0,   0,   0, 
+     70, 142,  32,   0,   0,   0, 
+      0,   0,   5,   0,   0,   0, 
+     50,   0,   0,  10, 242,   0, 
+     16,   0,   0,   0,   0,   0, 
+     70, 142,  32,   0,   0,   0, 
+      0,   0,   4,   0,   0,   0, 
+      6,   0,  16,   0,   0,   0, 
+      0,   0,  70,  14,  16,   0, 
+      1,   0,   0,   0,   0,   0, 
+      0,   8, 242,   0,  16,   0, 
+      0,   0,   0,   0,  70,  14, 
+     16,   0,   0,   0,   0,   0, 
+     70, 142,  32,   0,   0,   0, 
+      0,   0,   7,   0,   0,   0, 
+     14,   0,   0,   7, 114,   0, 
+     16,   0,   0,   0,   0,   0, 
+     70,   2,  16,   0,   0,   0, 
+      0,   0, 246,  15,  16,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   9, 242,   0,  16,   0, 
+      0,   0,   0,   0,  70,  14, 
+     16,   0,   0,   0,   0,   0, 
+     70, 142,  32, 128,  65,   0, 
+      0,   0,   1,   0,   0,   0, 
+      0,   0,   0,   0,  56,   0, 
+      0,   7, 114,   0,  16,   0, 
+      0,   0,   0,   0, 246,  15, 
+     16,   0,   0,   0,   0,   0, 
+     70,   2,  16,   0,   0,   0, 
+      0,   0,  56,   0,   0,   8, 
+    242,   0,  16,   0,   1,   0, 
+      0,   0,  86,   5,  16,   0, 
+      0,   0,   0,   0,  70, 142, 
+     32,   0,   2,   0,   0,   0, 
+      1,   0,   0,   0,  50,   0, 
+      0,  10, 242,   0,  16,   0, 
+      1,   0,   0,   0,  70, 142, 
+     32,   0,   2,   0,   0,   0, 
+      0,   0,   0,   0,   6,   0, 
+     16,   0,   0,   0,   0,   0, 
+     70,  14,  16,   0,   1,   0, 
+      0,   0,  50,   0,   0,  10, 
+    242,   0,  16,   0,   1,   0, 
+      0,   0,  70, 142,  32,   0, 
+      2,   0,   0,   0,   2,   0, 
+      0,   0, 166,  10,  16,   0, 
+      0,   0,   0,   0,  70,  14, 
+     16,   0,   1,   0,   0,   0, 
+     50,   0,   0,  10, 242,  32, 
+     16,   0,   0,   0,   0,   0, 
+     70, 142,  32,   0,   2,   0, 
+      0,   0,   3,   0,   0,   0, 
+    246,  15,  16,   0,   0,   0, 
+      0,   0,  70,  14,  16,   0, 
+      1,   0,   0,   0,  50,   0, 
+      0,  11,  50,  32,  16,   0, 
+      1,   0,   0,   0,  70,  16, 
+     16,   0,   0,   0,   0,   0, 
+    230, 138,  32,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+     70, 128,  32,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+     62,   0,   0,   1,  83,  84, 
+     65,  84, 116,   0,   0,   0, 
+     13,   0,   0,   0,   2,   0, 
+      0,   0,   0,   0,   0,   0, 
+      3,   0,   0,   0,   6,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   1,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   1,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,  82,  68,  69,  70, 
+    148,   2,   0,   0,   3,   0, 
+      0,   0, 168,   0,   0,   0, 
+      3,   0,   0,   0,  28,   0, 
+      0,   0,   0,   4, 254, 255, 
+      0,   1,   0,   0,  96,   2, 
+      0,   0, 124,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   1,   0,   0,   0, 
+      0,   0,   0,   0, 133,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      1,   0,   0,   0,   1,   0, 
+      0,   0,   0,   0,   0,   0, 
+    152,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   2,   0,   0,   0, 
+      1,   0,   0,   0,   0,   0, 
+      0,   0,  80, 101, 114,  76, 
+     97, 121, 101, 114,   0,  80, 
+    101, 114,  79,  99,  99,  97, 
+    115, 105, 111, 110,  97, 108, 
+     76,  97, 121, 101, 114,   0, 
+     80, 101, 114,  76,  97, 121, 
+    101, 114,  77,  97, 110,  97, 
+    103, 101, 114,   0, 124,   0, 
+      0,   0,   5,   0,   0,   0, 
+    240,   0,   0,   0, 128,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0, 133,   0, 
+      0,   0,   2,   0,   0,   0, 
+    220,   1,   0,   0,  32,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0, 152,   0, 
+      0,   0,   1,   0,   0,   0, 
+     60,   2,   0,   0,  64,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0, 104,   1, 
+      0,   0,   0,   0,   0,   0, 
+     16,   0,   0,   0,   2,   0, 
+      0,   0, 120,   1,   0,   0, 
+      0,   0,   0,   0, 136,   1, 
+      0,   0,  16,   0,   0,   0, 
+     16,   0,   0,   0,   2,   0, 
+      0,   0, 120,   1,   0,   0, 
+      0,   0,   0,   0, 147,   1, 
+      0,   0,  32,   0,   0,   0, 
+     16,   0,   0,   0,   0,   0, 
+      0,   0, 120,   1,   0,   0, 
+      0,   0,   0,   0, 157,   1, 
+      0,   0,  48,   0,   0,   0, 
+      4,   0,   0,   0,   0,   0, 
+      0,   0, 172,   1,   0,   0, 
+      0,   0,   0,   0, 188,   1, 
+      0,   0,  64,   0,   0,   0, 
+     64,   0,   0,   0,   2,   0, 
+      0,   0, 204,   1,   0,   0, 
+      0,   0,   0,   0, 118,  84, 
     101, 120, 116, 117, 114, 101, 
-    115,   0,   4,   0,   0,   0, 
-      1,   0,   0,   0,   0,   0, 
-      0,   0,   1,   0,   0,   0, 
-      0,   0,   0,   0,   1,   0, 
-      0,   0,   0,   0,   0,   0, 
-      1,   0,   0,   0,   0,   0, 
-      0,   0,   1,   0,   0,   0, 
-      3,   0,   0,   0, 255, 255, 
-    255, 255, 136,   7,   0,   0, 
-     68,  88,  66,  67, 249,  28, 
-    197, 252, 166, 119,  59, 228, 
-    111, 222, 205, 192, 170, 128, 
-    255,  70,   1,   0,   0,   0, 
-    136,   7,   0,   0,   6,   0, 
+     67, 111, 111, 114, 100, 115, 
+      0, 171,   1,   0,   3,   0, 
+      1,   0,   4,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+    118,  76,  97, 121, 101, 114, 
+     81, 117,  97, 100,   0, 118, 
+     77,  97, 115, 107,  81, 117, 
+     97, 100,   0, 102,  76,  97, 
+    121, 101, 114,  79, 112,  97, 
+     99, 105, 116, 121,   0, 171, 
+      0,   0,   3,   0,   1,   0, 
+      1,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0, 109,  76, 
+     97, 121, 101, 114,  84, 114, 
+     97, 110, 115, 102, 111, 114, 
+    109,   0,   3,   0,   3,   0, 
+      4,   0,   4,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+     12,   2,   0,   0,   0,   0, 
+      0,   0,  16,   0,   0,   0, 
+      2,   0,   0,   0,  32,   2, 
+      0,   0,   0,   0,   0,   0, 
+     48,   2,   0,   0,  16,   0, 
+      0,   0,  16,   0,   0,   0, 
+      0,   0,   0,   0,  32,   2, 
+      0,   0,   0,   0,   0,   0, 
+    118,  82, 101, 110, 100, 101, 
+    114,  84,  97, 114, 103, 101, 
+    116,  79, 102, 102, 115, 101, 
+    116,   0,   1,   0,   3,   0, 
+      1,   0,   4,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+    102,  76,  97, 121, 101, 114, 
+     67, 111, 108, 111, 114,   0, 
+     84,   2,   0,   0,   0,   0, 
+      0,   0,  64,   0,   0,   0, 
+      2,   0,   0,   0, 204,   1, 
+      0,   0,   0,   0,   0,   0, 
+    109,  80, 114, 111, 106, 101, 
+     99, 116, 105, 111, 110,   0, 
+     77, 105,  99, 114, 111, 115, 
+    111, 102, 116,  32,  40,  82, 
+     41,  32,  72,  76,  83,  76, 
+     32,  83, 104,  97, 100, 101, 
+    114,  32,  67, 111, 109, 112, 
+    105, 108, 101, 114,  32,  57, 
+     46,  50,  57,  46,  57,  53, 
+     50,  46,  51,  49,  49,  49, 
+      0, 171, 171, 171,  73,  83, 
+     71,  78,  44,   0,   0,   0, 
+      1,   0,   0,   0,   8,   0, 
+      0,   0,  32,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   3,   0,   0,   0, 
+      0,   0,   0,   0,   3,   3, 
+      0,   0,  80,  79,  83,  73, 
+     84,  73,  79,  78,   0, 171, 
+    171, 171,  79,  83,  71,  78, 
+     80,   0,   0,   0,   2,   0, 
+      0,   0,   8,   0,   0,   0, 
+     56,   0,   0,   0,   0,   0, 
+      0,   0,   1,   0,   0,   0, 
+      3,   0,   0,   0,   0,   0, 
+      0,   0,  15,   0,   0,   0, 
+     68,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      3,   0,   0,   0,   1,   0, 
+      0,   0,   3,  12,   0,   0, 
+     83,  86,  95,  80, 111, 115, 
+    105, 116, 105, 111, 110,   0, 
+     84,  69,  88,  67,  79,  79, 
+     82,  68,   0, 171, 171, 171, 
+     32, 118,   0,   0,   0,   0, 
+      0,   0,   1,   0,   0,   0, 
+      2,   0,   0,   0,   0,   0, 
+      0,   0, 216,   2,   0,   0, 
+     68,  88,  66,  67, 136, 106, 
+     87,  29, 239,  32, 100, 138, 
+    218,   2, 105,  91, 143, 165, 
+    252,  49,   1,   0,   0,   0, 
+    216,   2,   0,   0,   6,   0, 
       0,   0,  56,   0,   0,   0, 
-    188,   1,   0,   0, 228,   3, 
-      0,   0,  96,   4,   0,   0, 
-    252,   6,   0,   0,  48,   7, 
+    132,   0,   0,   0, 204,   0, 
+      0,   0,  72,   1,   0,   0, 
+     76,   2,   0,   0, 164,   2, 
       0,   0,  65, 111, 110,  57, 
-    124,   1,   0,   0, 124,   1, 
-      0,   0,   0,   2, 254, 255, 
-     24,   1,   0,   0, 100,   0, 
-      0,   0,   5,   0,  36,   0, 
-      0,   0,  96,   0,   0,   0, 
-     96,   0,   0,   0,  36,   0, 
-      1,   0,  96,   0,   0,   0, 
-      0,   0,   2,   0,   1,   0, 
-      0,   0,   0,   0,   0,   0, 
-      4,   0,   2,   0,   3,   0, 
-      0,   0,   0,   0,   0,   0, 
-      7,   0,   1,   0,   5,   0, 
-      0,   0,   0,   0,   1,   0, 
-      0,   0,   1,   0,   6,   0, 
+     68,   0,   0,   0,  68,   0, 
+      0,   0,   0,   2, 255, 255, 
+     20,   0,   0,   0,  48,   0, 
+      0,   0,   1,   0,  36,   0, 
+      0,   0,  48,   0,   0,   0, 
+     48,   0,   0,   0,  36,   0, 
+      0,   0,  48,   0,   0,   0, 
+      1,   0,   1,   0,   0,   0, 
+      0,   0,   0,   0,   1,   2, 
+    255, 255,   1,   0,   0,   2, 
+      0,   8,  15, 128,   0,   0, 
+    228, 160, 255, 255,   0,   0, 
+     83,  72,  68,  82,  64,   0, 
+      0,   0,  64,   0,   0,   0, 
+     16,   0,   0,   0,  89,   0, 
+      0,   4,  70, 142,  32,   0, 
       0,   0,   0,   0,   2,   0, 
-      0,   0,   4,   0,   7,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   1,   2, 254, 255, 
-     31,   0,   0,   2,   5,   0, 
-      0, 128,   0,   0,  15, 144, 
-      4,   0,   0,   4,   0,   0, 
-      3, 224,   0,   0, 228, 144, 
-      1,   0, 238, 160,   1,   0, 
-    228, 160,   4,   0,   0,   4, 
-      0,   0,   3, 128,   0,   0, 
-    228, 144,   2,   0, 238, 160, 
-      2,   0, 228, 160,   5,   0, 
-      0,   3,   1,   0,  15, 128, 
-      0,   0,  85, 128,   4,   0, 
-    228, 160,   4,   0,   0,   4, 
-      0,   0,  15, 128,   3,   0, 
-    228, 160,   0,   0,   0, 128, 
+      0,   0, 101,   0,   0,   3, 
+    242,  32,  16,   0,   0,   0, 
+      0,   0,  54,   0,   0,   6, 
+    242,  32,  16,   0,   0,   0, 
+      0,   0,  70, 142,  32,   0, 
+      0,   0,   0,   0,   1,   0, 
+      0,   0,  62,   0,   0,   1, 
+     83,  84,  65,  84, 116,   0, 
+      0,   0,   2,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   1,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      1,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      1,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,  82,  68, 
+     69,  70, 252,   0,   0,   0, 
+      1,   0,   0,   0,  80,   0, 
+      0,   0,   1,   0,   0,   0, 
+     28,   0,   0,   0,   0,   4, 
+    255, 255,   0,   1,   0,   0, 
+    200,   0,   0,   0,  60,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   1,   0, 
+      0,   0,   0,   0,   0,   0, 
+     80, 101, 114,  79,  99,  99, 
+     97, 115, 105, 111, 110,  97, 
+    108,  76,  97, 121, 101, 114, 
+      0, 171,  60,   0,   0,   0, 
+      2,   0,   0,   0, 104,   0, 
+      0,   0,  32,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0, 152,   0,   0,   0, 
+      0,   0,   0,   0,  16,   0, 
+      0,   0,   0,   0,   0,   0, 
+    172,   0,   0,   0,   0,   0, 
+      0,   0, 188,   0,   0,   0, 
+     16,   0,   0,   0,  16,   0, 
+      0,   0,   2,   0,   0,   0, 
+    172,   0,   0,   0,   0,   0, 
+      0,   0, 118,  82, 101, 110, 
+    100, 101, 114,  84,  97, 114, 
+    103, 101, 116,  79, 102, 102, 
+    115, 101, 116,   0,   1,   0, 
+      3,   0,   1,   0,   4,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0, 102,  76,  97, 121, 
+    101, 114,  67, 111, 108, 111, 
+    114,   0,  77, 105,  99, 114, 
+    111, 115, 111, 102, 116,  32, 
+     40,  82,  41,  32,  72,  76, 
+     83,  76,  32,  83, 104,  97, 
+    100, 101, 114,  32,  67, 111, 
+    109, 112, 105, 108, 101, 114, 
+     32,  57,  46,  50,  57,  46, 
+     57,  53,  50,  46,  51,  49, 
+     49,  49,   0, 171, 171, 171, 
+     73,  83,  71,  78,  80,   0, 
+      0,   0,   2,   0,   0,   0, 
+      8,   0,   0,   0,  56,   0, 
+      0,   0,   0,   0,   0,   0, 
+      1,   0,   0,   0,   3,   0, 
+      0,   0,   0,   0,   0,   0, 
+     15,   0,   0,   0,  68,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   3,   0, 
+      0,   0,   1,   0,   0,   0, 
+      3,   0,   0,   0,  83,  86, 
+     95,  80, 111, 115, 105, 116, 
+    105, 111, 110,   0,  84,  69, 
+     88,  67,  79,  79,  82,  68, 
+      0, 171, 171, 171,  79,  83, 
+     71,  78,  44,   0,   0,   0, 
+      1,   0,   0,   0,   8,   0, 
+      0,   0,  32,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   3,   0,   0,   0, 
+      0,   0,   0,   0,  15,   0, 
+      0,   0,  83,  86,  95,  84, 
+     97, 114, 103, 101, 116,   0, 
+    171, 171, 192, 125,   0,   0, 
+      0,   0,   0,   0,  80, 114, 
+    101, 112,  97, 114, 101,  65, 
+    108, 112, 104,  97,  69, 120, 
+    116, 114,  97,  99, 116, 105, 
+    111, 110,  84, 101, 120, 116, 
+    117, 114, 101, 115,   0,   4, 
+      0,   0,   0,   1,   0,   0, 
+      0,   0,   0,   0,   0,   1, 
+      0,   0,   0,   0,   0,   0, 
+      0,   1,   0,   0,   0,   0, 
+      0,   0,   0,   1,   0,   0, 
+      0,   0,   0,   0,   0,   1, 
+      0,   0,   0,   3,   0,   0, 
+      0, 255, 255, 255, 255, 136, 
+      7,   0,   0,  68,  88,  66, 
+     67, 249,  28, 197, 252, 166, 
+    119,  59, 228, 111, 222, 205, 
+    192, 170, 128, 255,  70,   1, 
+      0,   0,   0, 136,   7,   0, 
+      0,   6,   0,   0,   0,  56, 
+      0,   0,   0, 188,   1,   0, 
+      0, 228,   3,   0,   0,  96, 
+      4,   0,   0, 252,   6,   0, 
+      0,  48,   7,   0,   0,  65, 
+    111, 110,  57, 124,   1,   0, 
+      0, 124,   1,   0,   0,   0, 
+      2, 254, 255,  24,   1,   0, 
+      0, 100,   0,   0,   0,   5, 
+      0,  36,   0,   0,   0,  96, 
+      0,   0,   0,  96,   0,   0, 
+      0,  36,   0,   1,   0,  96, 
+      0,   0,   0,   0,   0,   2, 
+      0,   1,   0,   0,   0,   0, 
+      0,   0,   0,   4,   0,   2, 
+      0,   3,   0,   0,   0,   0, 
+      0,   0,   0,   7,   0,   1, 
+      0,   5,   0,   0,   0,   0, 
+      0,   1,   0,   0,   0,   1, 
+      0,   6,   0,   0,   0,   0, 
+      0,   2,   0,   0,   0,   4, 
+      0,   7,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   1, 
+      2, 254, 255,  31,   0,   0, 
+      2,   5,   0,   0, 128,   0, 
+      0,  15, 144,   4,   0,   0, 
+      4,   0,   0,   3, 224,   0, 
+      0, 228, 144,   1,   0, 238, 
+    160,   1,   0, 228, 160,   4, 
+      0,   0,   4,   0,   0,   3, 
+    128,   0,   0, 228, 144,   2, 
+      0, 238, 160,   2,   0, 228, 
+    160,   5,   0,   0,   3,   1, 
+      0,  15, 128,   0,   0,  85, 
+    128,   4,   0, 228, 160,   4, 
+      0,   0,   4,   0,   0,  15, 
+    128,   3,   0, 228, 160,   0, 
+      0,   0, 128,   1,   0, 228, 
+    128,   2,   0,   0,   3,   0, 
+      0,  15, 128,   0,   0, 228, 
+    128,   5,   0, 228, 160,   6, 
+      0,   0,   2,   1,   0,   1, 
+    128,   0,   0, 255, 128,   5, 
+      0,   0,   3,   0,   0,   7, 
+    128,   0,   0, 228, 128,   1, 
+      0,   0, 128,   2,   0,   0, 
+      3,   0,   0,  15, 128,   0, 
+      0, 228, 128,   6,   0, 228, 
+    161,   5,   0,   0,   3,   0, 
+      0,   7, 128,   0,   0, 255, 
+    128,   0,   0, 228, 128,   5, 
+      0,   0,   3,   1,   0,  15, 
+    128,   0,   0,  85, 128,   8, 
+      0, 228, 160,   4,   0,   0, 
+      4,   1,   0,  15, 128,   7, 
+      0, 228, 160,   0,   0,   0, 
+    128,   1,   0, 228, 128,   4, 
+      0,   0,   4,   1,   0,  15, 
+    128,   9,   0, 228, 160,   0, 
+      0, 170, 128,   1,   0, 228, 
+    128,   4,   0,   0,   4,   0, 
+      0,  15, 128,  10,   0, 228, 
+    160,   0,   0, 255, 128,   1, 
+      0, 228, 128,   4,   0,   0, 
+      4,   0,   0,   3, 192,   0, 
+      0, 255, 128,   0,   0, 228, 
+    160,   0,   0, 228, 128,   1, 
+      0,   0,   2,   0,   0,  12, 
+    192,   0,   0, 228, 128, 255, 
+    255,   0,   0,  83,  72,  68, 
+     82,  32,   2,   0,   0,  64, 
+      0,   1,   0, 136,   0,   0, 
+      0,  89,   0,   0,   4,  70, 
+    142,  32,   0,   0,   0,   0, 
+      0,   8,   0,   0,   0,  89, 
+      0,   0,   4,  70, 142,  32, 
+      0,   1,   0,   0,   0,   1, 
+      0,   0,   0,  89,   0,   0, 
+      4,  70, 142,  32,   0,   2, 
+      0,   0,   0,   4,   0,   0, 
+      0,  95,   0,   0,   3,  50, 
+     16,  16,   0,   0,   0,   0, 
+      0, 103,   0,   0,   4, 242, 
+     32,  16,   0,   0,   0,   0, 
+      0,   1,   0,   0,   0, 101, 
+      0,   0,   3,  50,  32,  16, 
+      0,   1,   0,   0,   0, 104, 
+      0,   0,   2,   2,   0,   0, 
+      0,  50,   0,   0,  11,  50, 
+      0,  16,   0,   0,   0,   0, 
+      0,  70,  16,  16,   0,   0, 
+      0,   0,   0, 230, 138,  32, 
+      0,   0,   0,   0,   0,   1, 
+      0,   0,   0,  70, 128,  32, 
+      0,   0,   0,   0,   0,   1, 
+      0,   0,   0,  56,   0,   0, 
+      8, 242,   0,  16,   0,   1, 
+      0,   0,   0,  86,   5,  16, 
+      0,   0,   0,   0,   0,  70, 
+    142,  32,   0,   0,   0,   0, 
+      0,   5,   0,   0,   0,  50, 
+      0,   0,  10, 242,   0,  16, 
+      0,   0,   0,   0,   0,  70, 
+    142,  32,   0,   0,   0,   0, 
+      0,   4,   0,   0,   0,   6, 
+      0,  16,   0,   0,   0,   0, 
+      0,  70,  14,  16,   0,   1, 
+      0,   0,   0,   0,   0,   0, 
+      8, 242,   0,  16,   0,   0, 
+      0,   0,   0,  70,  14,  16, 
+      0,   0,   0,   0,   0,  70, 
+    142,  32,   0,   0,   0,   0, 
+      0,   7,   0,   0,   0,  14, 
+      0,   0,   7, 114,   0,  16, 
+      0,   0,   0,   0,   0,  70, 
+      2,  16,   0,   0,   0,   0, 
+      0, 246,  15,  16,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      9, 242,   0,  16,   0,   0, 
+      0,   0,   0,  70,  14,  16, 
+      0,   0,   0,   0,   0,  70, 
+    142,  32, 128,  65,   0,   0, 
+      0,   1,   0,   0,   0,   0, 
+      0,   0,   0,  56,   0,   0, 
+      7, 114,   0,  16,   0,   0, 
+      0,   0,   0, 246,  15,  16, 
+      0,   0,   0,   0,   0,  70, 
+      2,  16,   0,   0,   0,   0, 
+      0,  56,   0,   0,   8, 242, 
+      0,  16,   0,   1,   0,   0, 
+      0,  86,   5,  16,   0,   0, 
+      0,   0,   0,  70, 142,  32, 
+      0,   2,   0,   0,   0,   1, 
+      0,   0,   0,  50,   0,   0, 
+     10, 242,   0,  16,   0,   1, 
+      0,   0,   0,  70, 142,  32, 
+      0,   2,   0,   0,   0,   0, 
+      0,   0,   0,   6,   0,  16, 
+      0,   0,   0,   0,   0,  70, 
+     14,  16,   0,   1,   0,   0, 
+      0,  50,   0,   0,  10, 242, 
+      0,  16,   0,   1,   0,   0, 
+      0,  70, 142,  32,   0,   2, 
+      0,   0,   0,   2,   0,   0, 
+      0, 166,  10,  16,   0,   0, 
+      0,   0,   0,  70,  14,  16, 
+      0,   1,   0,   0,   0,  50, 
+      0,   0,  10, 242,  32,  16, 
+      0,   0,   0,   0,   0,  70, 
+    142,  32,   0,   2,   0,   0, 
+      0,   3,   0,   0,   0, 246, 
+     15,  16,   0,   0,   0,   0, 
+      0,  70,  14,  16,   0,   1, 
+      0,   0,   0,  50,   0,   0, 
+     11,  50,  32,  16,   0,   1, 
+      0,   0,   0,  70,  16,  16, 
+      0,   0,   0,   0,   0, 230, 
+    138,  32,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,  70, 
+    128,  32,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,  62, 
+      0,   0,   1,  83,  84,  65, 
+     84, 116,   0,   0,   0,  13, 
+      0,   0,   0,   2,   0,   0, 
+      0,   0,   0,   0,   0,   3, 
+      0,   0,   0,   6,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   1,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   1,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,  82,  68,  69,  70, 148, 
+      2,   0,   0,   3,   0,   0, 
+      0, 168,   0,   0,   0,   3, 
+      0,   0,   0,  28,   0,   0, 
+      0,   0,   4, 254, 255,   0, 
+      1,   0,   0,  96,   2,   0, 
+      0, 124,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   1,   0,   0,   0,   0, 
+      0,   0,   0, 133,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   1, 
+      0,   0,   0,   1,   0,   0, 
+      0,   0,   0,   0,   0, 152, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   2,   0,   0,   0,   1, 
+      0,   0,   0,   0,   0,   0, 
+      0,  80, 101, 114,  76,  97, 
+    121, 101, 114,   0,  80, 101, 
+    114,  79,  99,  99,  97, 115, 
+    105, 111, 110,  97, 108,  76, 
+     97, 121, 101, 114,   0,  80, 
+    101, 114,  76,  97, 121, 101, 
+    114,  77,  97, 110,  97, 103, 
+    101, 114,   0, 124,   0,   0, 
+      0,   5,   0,   0,   0, 240, 
+      0,   0,   0, 128,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0, 133,   0,   0, 
+      0,   2,   0,   0,   0, 220, 
+      1,   0,   0,  32,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0, 152,   0,   0, 
+      0,   1,   0,   0,   0,  60, 
+      2,   0,   0,  64,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0, 104,   1,   0, 
+      0,   0,   0,   0,   0,  16, 
+      0,   0,   0,   2,   0,   0, 
+      0, 120,   1,   0,   0,   0, 
+      0,   0,   0, 136,   1,   0, 
+      0,  16,   0,   0,   0,  16, 
+      0,   0,   0,   2,   0,   0, 
+      0, 120,   1,   0,   0,   0, 
+      0,   0,   0, 147,   1,   0, 
+      0,  32,   0,   0,   0,  16, 
+      0,   0,   0,   0,   0,   0, 
+      0, 120,   1,   0,   0,   0, 
+      0,   0,   0, 157,   1,   0, 
+      0,  48,   0,   0,   0,   4, 
+      0,   0,   0,   0,   0,   0, 
+      0, 172,   1,   0,   0,   0, 
+      0,   0,   0, 188,   1,   0, 
+      0,  64,   0,   0,   0,  64, 
+      0,   0,   0,   2,   0,   0, 
+      0, 204,   1,   0,   0,   0, 
+      0,   0,   0, 118,  84, 101, 
+    120, 116, 117, 114, 101,  67, 
+    111, 111, 114, 100, 115,   0, 
+    171,   1,   0,   3,   0,   1, 
+      0,   4,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0, 118, 
+     76,  97, 121, 101, 114,  81, 
+    117,  97, 100,   0, 118,  77, 
+     97, 115, 107,  81, 117,  97, 
+    100,   0, 102,  76,  97, 121, 
+    101, 114,  79, 112,  97,  99, 
+    105, 116, 121,   0, 171,   0, 
+      0,   3,   0,   1,   0,   1, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0, 109,  76,  97, 
+    121, 101, 114,  84, 114,  97, 
+    110, 115, 102, 111, 114, 109, 
+      0,   3,   0,   3,   0,   4, 
+      0,   4,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,  12, 
+      2,   0,   0,   0,   0,   0, 
+      0,  16,   0,   0,   0,   2, 
+      0,   0,   0,  32,   2,   0, 
+      0,   0,   0,   0,   0,  48, 
+      2,   0,   0,  16,   0,   0, 
+      0,  16,   0,   0,   0,   0, 
+      0,   0,   0,  32,   2,   0, 
+      0,   0,   0,   0,   0, 118, 
+     82, 101, 110, 100, 101, 114, 
+     84,  97, 114, 103, 101, 116, 
+     79, 102, 102, 115, 101, 116, 
+      0,   1,   0,   3,   0,   1, 
+      0,   4,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0, 102, 
+     76,  97, 121, 101, 114,  67, 
+    111, 108, 111, 114,   0,  84, 
+      2,   0,   0,   0,   0,   0, 
+      0,  64,   0,   0,   0,   2, 
+      0,   0,   0, 204,   1,   0, 
+      0,   0,   0,   0,   0, 109, 
+     80, 114, 111, 106, 101,  99, 
+    116, 105, 111, 110,   0,  77, 
+    105,  99, 114, 111, 115, 111, 
+    102, 116,  32,  40,  82,  41, 
+     32,  72,  76,  83,  76,  32, 
+     83, 104,  97, 100, 101, 114, 
+     32,  67, 111, 109, 112, 105, 
+    108, 101, 114,  32,  57,  46, 
+     50,  57,  46,  57,  53,  50, 
+     46,  51,  49,  49,  49,   0, 
+    171, 171, 171,  73,  83,  71, 
+     78,  44,   0,   0,   0,   1, 
+      0,   0,   0,   8,   0,   0, 
+      0,  32,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   3,   0,   0,   0,   0, 
+      0,   0,   0,   3,   3,   0, 
+      0,  80,  79,  83,  73,  84, 
+     73,  79,  78,   0, 171, 171, 
+    171,  79,  83,  71,  78,  80, 
+      0,   0,   0,   2,   0,   0, 
+      0,   8,   0,   0,   0,  56, 
+      0,   0,   0,   0,   0,   0, 
+      0,   1,   0,   0,   0,   3, 
+      0,   0,   0,   0,   0,   0, 
+      0,  15,   0,   0,   0,  68, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   3, 
+      0,   0,   0,   1,   0,   0, 
+      0,   3,  12,   0,   0,  83, 
+     86,  95,  80, 111, 115, 105, 
+    116, 105, 111, 110,   0,  84, 
+     69,  88,  67,  79,  79,  82, 
+     68,   0, 171, 171, 171, 243, 
+    128,   0,   0,   0,   0,   0, 
+      0,   1,   0,   0,   0,   2, 
+      0,   0,   0,   0,   0,   0, 
+      0, 140,   2,   0,   0,  68, 
+     88,  66,  67, 120, 218, 197, 
+    160,  79, 160, 235,  82, 197, 
+     10, 155, 183,  41, 226,  48, 
+    248,   1,   0,   0,   0, 140, 
+      2,   0,   0,   6,   0,   0, 
+      0,  56,   0,   0,   0, 168, 
+      0,   0,   0,  20,   1,   0, 
+      0, 144,   1,   0,   0, 232, 
+      1,   0,   0,  64,   2,   0, 
+      0,  65, 111, 110,  57, 104, 
+      0,   0,   0, 104,   0,   0, 
+      0,   0,   2, 255, 255,  68, 
+      0,   0,   0,  36,   0,   0, 
+      0,   0,   0,  36,   0,   0, 
+      0,  36,   0,   0,   0,  36, 
+      0,   0,   0,  36,   0,   0, 
+      0,  36,   0,   1,   2, 255, 
+    255,  81,   0,   0,   5,   0, 
+      0,  15, 160,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0, 128, 
+     63,   1,   0,   0,   2,   0, 
+      8,  15, 128,   0,   0, 228, 
+    160,   1,   0,   0,   2,   0, 
+      0,  15, 128,   0,   0, 255, 
+    160,   1,   0,   0,   2,   1, 
+      8,  15, 128,   0,   0, 228, 
+    128, 255, 255,   0,   0,  83, 
+     72,  68,  82, 100,   0,   0, 
+      0,  64,   0,   0,   0,  25, 
+      0,   0,   0, 101,   0,   0, 
+      3, 242,  32,  16,   0,   0, 
+      0,   0,   0, 101,   0,   0, 
+      3, 242,  32,  16,   0,   1, 
+      0,   0,   0,  54,   0,   0, 
+      8, 242,  32,  16,   0,   0, 
+      0,   0,   0,   2,  64,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0, 128,  63,  54, 
+      0,   0,   8, 242,  32,  16, 
+      0,   1,   0,   0,   0,   2, 
+     64,   0,   0,   0,   0, 128, 
+     63,   0,   0, 128,  63,   0, 
+      0, 128,  63,   0,   0, 128, 
+     63,  62,   0,   0,   1,  83, 
+     84,  65,  84, 116,   0,   0, 
+      0,   3,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   2,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   1, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   2, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,  82,  68,  69, 
+     70,  80,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,  28, 
+      0,   0,   0,   0,   4, 255, 
+    255,   0,   1,   0,   0,  28, 
+      0,   0,   0,  77, 105,  99, 
+    114, 111, 115, 111, 102, 116, 
+     32,  40,  82,  41,  32,  72, 
+     76,  83,  76,  32,  83, 104, 
+     97, 100, 101, 114,  32,  67, 
+    111, 109, 112, 105, 108, 101, 
+    114,  32,  57,  46,  50,  57, 
+     46,  57,  53,  50,  46,  51, 
+     49,  49,  49,   0, 171, 171, 
+    171,  73,  83,  71,  78,  80, 
+      0,   0,   0,   2,   0,   0, 
+      0,   8,   0,   0,   0,  56, 
+      0,   0,   0,   0,   0,   0, 
+      0,   1,   0,   0,   0,   3, 
+      0,   0,   0,   0,   0,   0, 
+      0,  15,   0,   0,   0,  68, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   3, 
+      0,   0,   0,   1,   0,   0, 
+      0,   3,   0,   0,   0,  83, 
+     86,  95,  80, 111, 115, 105, 
+    116, 105, 111, 110,   0,  84, 
+     69,  88,  67,  79,  79,  82, 
+     68,   0, 171, 171, 171,  79, 
+     83,  71,  78,  68,   0,   0, 
+      0,   2,   0,   0,   0,   8, 
+      0,   0,   0,  56,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   3,   0,   0, 
+      0,   0,   0,   0,   0,  15, 
+      0,   0,   0,  56,   0,   0, 
+      0,   1,   0,   0,   0,   0, 
+      0,   0,   0,   3,   0,   0, 
+      0,   1,   0,   0,   0,  15, 
+      0,   0,   0,  83,  86,  95, 
+     84,  97, 114, 103, 101, 116, 
+      0, 171, 171, 147, 136,   0, 
+      0,   0,   0,   0,   0,  82, 
+    101, 110, 100, 101, 114,  82, 
+     71,  66,  76,  97, 121, 101, 
+    114,  80, 114, 101, 109, 117, 
+    108,  77,  97, 115, 107,   0, 
+      4,   0,   0,   0,   1,   0, 
+      0,   0,   0,   0,   0,   0, 
+      1,   0,   0,   0,   0,   0, 
+      0,   0,   1,   0,   0,   0, 
+      0,   0,   0,   0,   1,   0, 
+      0,   0,   0,   0,   0,   0, 
+      1,   0,   0,   0,   3,   0, 
+      0,   0, 255, 255, 255, 255, 
+     76,   8,   0,   0,  68,  88, 
+     66,  67, 169, 150, 145, 216, 
+    234,  78, 253,  86,  77,  68, 
+      6, 212, 187, 231, 104,  78, 
+      1,   0,   0,   0,  76,   8, 
+      0,   0,   6,   0,   0,   0, 
+     56,   0,   0,   0,   4,   2, 
+      0,   0, 144,   4,   0,   0, 
+     12,   5,   0,   0, 168,   7, 
+      0,   0, 220,   7,   0,   0, 
+     65, 111, 110,  57, 196,   1, 
+      0,   0, 196,   1,   0,   0, 
+      0,   2, 254, 255,  96,   1, 
+      0,   0, 100,   0,   0,   0, 
+      5,   0,  36,   0,   0,   0, 
+     96,   0,   0,   0,  96,   0, 
+      0,   0,  36,   0,   1,   0, 
+     96,   0,   0,   0,   0,   0, 
+      3,   0,   1,   0,   0,   0, 
+      0,   0,   0,   0,   4,   0, 
+      2,   0,   4,   0,   0,   0, 
+      0,   0,   0,   0,   7,   0, 
+      1,   0,   6,   0,   0,   0, 
+      0,   0,   1,   0,   0,   0, 
+      1,   0,   7,   0,   0,   0, 
+      0,   0,   2,   0,   0,   0, 
+      4,   0,   8,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      1,   2, 254, 255,  31,   0, 
+      0,   2,   5,   0,   0, 128, 
+      0,   0,  15, 144,   6,   0, 
+      0,   2,   0,   0,   1, 128, 
+      3,   0, 170, 160,   4,   0, 
+      0,   4,   0,   0,   6, 128, 
+      0,   0, 208, 144,   2,   0, 
+    248, 160,   2,   0, 208, 160, 
+      5,   0,   0,   3,   1,   0, 
+     15, 128,   0,   0, 170, 128, 
+      5,   0, 228, 160,   4,   0, 
+      0,   4,   1,   0,  15, 128, 
+      4,   0, 228, 160,   0,   0, 
+     85, 128,   1,   0, 228, 128, 
+      2,   0,   0,   3,   1,   0, 
+     15, 128,   1,   0, 228, 128, 
+      6,   0, 228, 160,   2,   0, 
+      0,   3,   0,   0,   6, 128, 
+      1,   0, 208, 128,   3,   0, 
+    208, 161,   5,   0,   0,   3, 
+      0,   0,   8, 224,   0,   0, 
+      0, 128,   0,   0,  85, 128, 
+      6,   0,   0,   2,   0,   0, 
+      1, 128,   3,   0, 255, 160, 
+      5,   0,   0,   3,   0,   0, 
+      4, 224,   0,   0,   0, 128, 
+      0,   0, 170, 128,   4,   0, 
+      0,   4,   0,   0,   3, 224, 
+      0,   0, 228, 144,   1,   0, 
+    238, 160,   1,   0, 228, 160, 
+      6,   0,   0,   2,   0,   0, 
+      1, 128,   1,   0, 255, 128, 
+      5,   0,   0,   3,   1,   0, 
+      7, 128,   0,   0,   0, 128, 
       1,   0, 228, 128,   2,   0, 
       0,   3,   0,   0,  15, 128, 
-      0,   0, 228, 128,   5,   0, 
-    228, 160,   6,   0,   0,   2, 
-      1,   0,   1, 128,   0,   0, 
-    255, 128,   5,   0,   0,   3, 
+      1,   0, 228, 128,   7,   0, 
+    228, 161,   5,   0,   0,   3, 
       0,   0,   7, 128,   0,   0, 
-    228, 128,   1,   0,   0, 128, 
-      2,   0,   0,   3,   0,   0, 
-     15, 128,   0,   0, 228, 128, 
-      6,   0, 228, 161,   5,   0, 
-      0,   3,   0,   0,   7, 128, 
-      0,   0, 255, 128,   0,   0, 
-    228, 128,   5,   0,   0,   3, 
-      1,   0,  15, 128,   0,   0, 
-     85, 128,   8,   0, 228, 160, 
+    255, 128,   0,   0, 228, 128, 
+      5,   0,   0,   3,   1,   0, 
+     15, 128,   0,   0,  85, 128, 
+      9,   0, 228, 160,   4,   0, 
+      0,   4,   1,   0,  15, 128, 
+      8,   0, 228, 160,   0,   0, 
+      0, 128,   1,   0, 228, 128, 
       4,   0,   0,   4,   1,   0, 
-     15, 128,   7,   0, 228, 160, 
-      0,   0,   0, 128,   1,   0, 
+     15, 128,  10,   0, 228, 160, 
+      0,   0, 170, 128,   1,   0, 
     228, 128,   4,   0,   0,   4, 
-      1,   0,  15, 128,   9,   0, 
-    228, 160,   0,   0, 170, 128, 
+      0,   0,  15, 128,  11,   0, 
+    228, 160,   0,   0, 255, 128, 
       1,   0, 228, 128,   4,   0, 
-      0,   4,   0,   0,  15, 128, 
-     10,   0, 228, 160,   0,   0, 
-    255, 128,   1,   0, 228, 128, 
-      4,   0,   0,   4,   0,   0, 
-      3, 192,   0,   0, 255, 128, 
-      0,   0, 228, 160,   0,   0, 
-    228, 128,   1,   0,   0,   2, 
-      0,   0,  12, 192,   0,   0, 
-    228, 128, 255, 255,   0,   0, 
-     83,  72,  68,  82,  32,   2, 
-      0,   0,  64,   0,   1,   0, 
-    136,   0,   0,   0,  89,   0, 
-      0,   4,  70, 142,  32,   0, 
-      0,   0,   0,   0,   8,   0, 
+      0,   4,   0,   0,   3, 192, 
+      0,   0, 255, 128,   0,   0, 
+    228, 160,   0,   0, 228, 128, 
+      1,   0,   0,   2,   0,   0, 
+     12, 192,   0,   0, 228, 128, 
+    255, 255,   0,   0,  83,  72, 
+     68,  82, 132,   2,   0,   0, 
+     64,   0,   1,   0, 161,   0, 
       0,   0,  89,   0,   0,   4, 
-     70, 142,  32,   0,   1,   0, 
-      0,   0,   1,   0,   0,   0, 
+     70, 142,  32,   0,   0,   0, 
+      0,   0,   8,   0,   0,   0, 
      89,   0,   0,   4,  70, 142, 
-     32,   0,   2,   0,   0,   0, 
-      4,   0,   0,   0,  95,   0, 
-      0,   3,  50,  16,  16,   0, 
-      0,   0,   0,   0, 103,   0, 
-      0,   4, 242,  32,  16,   0, 
-      0,   0,   0,   0,   1,   0, 
-      0,   0, 101,   0,   0,   3, 
-     50,  32,  16,   0,   1,   0, 
-      0,   0, 104,   0,   0,   2, 
-      2,   0,   0,   0,  50,   0, 
-      0,  11,  50,   0,  16,   0, 
-      0,   0,   0,   0,  70,  16, 
-     16,   0,   0,   0,   0,   0, 
-    230, 138,  32,   0,   0,   0, 
-      0,   0,   1,   0,   0,   0, 
-     70, 128,  32,   0,   0,   0, 
-      0,   0,   1,   0,   0,   0, 
+     32,   0,   1,   0,   0,   0, 
+      1,   0,   0,   0,  89,   0, 
+      0,   4,  70, 142,  32,   0, 
+      2,   0,   0,   0,   4,   0, 
+      0,   0,  95,   0,   0,   3, 
+     50,  16,  16,   0,   0,   0, 
+      0,   0, 103,   0,   0,   4, 
+    242,  32,  16,   0,   0,   0, 
+      0,   0,   1,   0,   0,   0, 
+    101,   0,   0,   3,  50,  32, 
+     16,   0,   1,   0,   0,   0, 
+    101,   0,   0,   3, 194,  32, 
+     16,   0,   1,   0,   0,   0, 
+    104,   0,   0,   2,   2,   0, 
+      0,   0,  50,   0,   0,  11, 
+     50,   0,  16,   0,   0,   0, 
+      0,   0,  70,  16,  16,   0, 
+      0,   0,   0,   0, 230, 138, 
+     32,   0,   0,   0,   0,   0, 
+      1,   0,   0,   0,  70, 128, 
+     32,   0,   0,   0,   0,   0, 
+      1,   0,   0,   0,  56,   0, 
+      0,   8, 242,   0,  16,   0, 
+      1,   0,   0,   0,  86,   5, 
+     16,   0,   0,   0,   0,   0, 
+     70, 142,  32,   0,   0,   0, 
+      0,   0,   5,   0,   0,   0, 
+     50,   0,   0,  10, 242,   0, 
+     16,   0,   0,   0,   0,   0, 
+     70, 142,  32,   0,   0,   0, 
+      0,   0,   4,   0,   0,   0, 
+      6,   0,  16,   0,   0,   0, 
+      0,   0,  70,  14,  16,   0, 
+      1,   0,   0,   0,   0,   0, 
+      0,   8, 242,   0,  16,   0, 
+      0,   0,   0,   0,  70,  14, 
+     16,   0,   0,   0,   0,   0, 
+     70, 142,  32,   0,   0,   0, 
+      0,   0,   7,   0,   0,   0, 
+     14,   0,   0,   7, 114,   0, 
+     16,   0,   1,   0,   0,   0, 
+     70,   2,  16,   0,   0,   0, 
+      0,   0, 246,  15,  16,   0, 
+      0,   0,   0,   0,  54,   0, 
+      0,   5, 130,   0,  16,   0, 
+      1,   0,   0,   0,  58,   0, 
+     16,   0,   0,   0,   0,   0, 
+      0,   0,   0,   9,  50,   0, 
+     16,   0,   0,   0,   0,   0, 
+     70,   0,  16,   0,   0,   0, 
+      0,   0,  70, 128,  32, 128, 
+     65,   0,   0,   0,   0,   0, 
+      0,   0,   2,   0,   0,   0, 
+     14,   0,   0,   8, 194,  32, 
+     16,   0,   1,   0,   0,   0, 
+      6,   4,  16,   0,   0,   0, 
+      0,   0, 166, 142,  32,   0, 
+      0,   0,   0,   0,   2,   0, 
+      0,   0,   0,   0,   0,   9, 
+    242,   0,  16,   0,   0,   0, 
+      0,   0,  70,  14,  16,   0, 
+      1,   0,   0,   0,  70, 142, 
+     32, 128,  65,   0,   0,   0, 
+      1,   0,   0,   0,   0,   0, 
+      0,   0,  56,   0,   0,   7, 
+    114,   0,  16,   0,   0,   0, 
+      0,   0, 246,  15,  16,   0, 
+      0,   0,   0,   0,  70,   2, 
+     16,   0,   0,   0,   0,   0, 
      56,   0,   0,   8, 242,   0, 
      16,   0,   1,   0,   0,   0, 
      86,   5,  16,   0,   0,   0, 
       0,   0,  70, 142,  32,   0, 
-      0,   0,   0,   0,   5,   0, 
+      2,   0,   0,   0,   1,   0, 
       0,   0,  50,   0,   0,  10, 
-    242,   0,  16,   0,   0,   0, 
+    242,   0,  16,   0,   1,   0, 
       0,   0,  70, 142,  32,   0, 
-      0,   0,   0,   0,   4,   0, 
+      2,   0,   0,   0,   0,   0, 
       0,   0,   6,   0,  16,   0, 
       0,   0,   0,   0,  70,  14, 
      16,   0,   1,   0,   0,   0, 
-      0,   0,   0,   8, 242,   0, 
+     50,   0,   0,  10, 242,   0, 
+     16,   0,   1,   0,   0,   0, 
+     70, 142,  32,   0,   2,   0, 
+      0,   0,   2,   0,   0,   0, 
+    166,  10,  16,   0,   0,   0, 
+      0,   0,  70,  14,  16,   0, 
+      1,   0,   0,   0,  50,   0, 
+      0,  10, 242,  32,  16,   0, 
+      0,   0,   0,   0,  70, 142, 
+     32,   0,   2,   0,   0,   0, 
+      3,   0,   0,   0, 246,  15, 
+     16,   0,   0,   0,   0,   0, 
+     70,  14,  16,   0,   1,   0, 
+      0,   0,  50,   0,   0,  11, 
+     50,  32,  16,   0,   1,   0, 
+      0,   0,  70,  16,  16,   0, 
+      0,   0,   0,   0, 230, 138, 
+     32,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,  70, 128, 
+     32,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,  62,   0, 
+      0,   1,  83,  84,  65,  84, 
+    116,   0,   0,   0,  16,   0, 
+      0,   0,   2,   0,   0,   0, 
+      0,   0,   0,   0,   4,   0, 
+      0,   0,   8,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   1,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   1,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+     82,  68,  69,  70, 148,   2, 
+      0,   0,   3,   0,   0,   0, 
+    168,   0,   0,   0,   3,   0, 
+      0,   0,  28,   0,   0,   0, 
+      0,   4, 254, 255,   0,   1, 
+      0,   0,  96,   2,   0,   0, 
+    124,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      1,   0,   0,   0,   0,   0, 
+      0,   0, 133,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   1,   0, 
+      0,   0,   1,   0,   0,   0, 
+      0,   0,   0,   0, 152,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      2,   0,   0,   0,   1,   0, 
+      0,   0,   0,   0,   0,   0, 
+     80, 101, 114,  76,  97, 121, 
+    101, 114,   0,  80, 101, 114, 
+     79,  99,  99,  97, 115, 105, 
+    111, 110,  97, 108,  76,  97, 
+    121, 101, 114,   0,  80, 101, 
+    114,  76,  97, 121, 101, 114, 
+     77,  97, 110,  97, 103, 101, 
+    114,   0, 124,   0,   0,   0, 
+      5,   0,   0,   0, 240,   0, 
+      0,   0, 128,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0, 133,   0,   0,   0, 
+      2,   0,   0,   0, 220,   1, 
+      0,   0,  32,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0, 152,   0,   0,   0, 
+      1,   0,   0,   0,  60,   2, 
+      0,   0,  64,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0, 104,   1,   0,   0, 
+      0,   0,   0,   0,  16,   0, 
+      0,   0,   2,   0,   0,   0, 
+    120,   1,   0,   0,   0,   0, 
+      0,   0, 136,   1,   0,   0, 
+     16,   0,   0,   0,  16,   0, 
+      0,   0,   2,   0,   0,   0, 
+    120,   1,   0,   0,   0,   0, 
+      0,   0, 147,   1,   0,   0, 
+     32,   0,   0,   0,  16,   0, 
+      0,   0,   2,   0,   0,   0, 
+    120,   1,   0,   0,   0,   0, 
+      0,   0, 157,   1,   0,   0, 
+     48,   0,   0,   0,   4,   0, 
+      0,   0,   0,   0,   0,   0, 
+    172,   1,   0,   0,   0,   0, 
+      0,   0, 188,   1,   0,   0, 
+     64,   0,   0,   0,  64,   0, 
+      0,   0,   2,   0,   0,   0, 
+    204,   1,   0,   0,   0,   0, 
+      0,   0, 118,  84, 101, 120, 
+    116, 117, 114, 101,  67, 111, 
+    111, 114, 100, 115,   0, 171, 
+      1,   0,   3,   0,   1,   0, 
+      4,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0, 118,  76, 
+     97, 121, 101, 114,  81, 117, 
+     97, 100,   0, 118,  77,  97, 
+    115, 107,  81, 117,  97, 100, 
+      0, 102,  76,  97, 121, 101, 
+    114,  79, 112,  97,  99, 105, 
+    116, 121,   0, 171,   0,   0, 
+      3,   0,   1,   0,   1,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0, 109,  76,  97, 121, 
+    101, 114,  84, 114,  97, 110, 
+    115, 102, 111, 114, 109,   0, 
+      3,   0,   3,   0,   4,   0, 
+      4,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,  12,   2, 
+      0,   0,   0,   0,   0,   0, 
+     16,   0,   0,   0,   2,   0, 
+      0,   0,  32,   2,   0,   0, 
+      0,   0,   0,   0,  48,   2, 
+      0,   0,  16,   0,   0,   0, 
+     16,   0,   0,   0,   0,   0, 
+      0,   0,  32,   2,   0,   0, 
+      0,   0,   0,   0, 118,  82, 
+    101, 110, 100, 101, 114,  84, 
+     97, 114, 103, 101, 116,  79, 
+    102, 102, 115, 101, 116,   0, 
+      1,   0,   3,   0,   1,   0, 
+      4,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0, 102,  76, 
+     97, 121, 101, 114,  67, 111, 
+    108, 111, 114,   0,  84,   2, 
+      0,   0,   0,   0,   0,   0, 
+     64,   0,   0,   0,   2,   0, 
+      0,   0, 204,   1,   0,   0, 
+      0,   0,   0,   0, 109,  80, 
+    114, 111, 106, 101,  99, 116, 
+    105, 111, 110,   0,  77, 105, 
+     99, 114, 111, 115, 111, 102, 
+    116,  32,  40,  82,  41,  32, 
+     72,  76,  83,  76,  32,  83, 
+    104,  97, 100, 101, 114,  32, 
+     67, 111, 109, 112, 105, 108, 
+    101, 114,  32,  57,  46,  50, 
+     57,  46,  57,  53,  50,  46, 
+     51,  49,  49,  49,   0, 171, 
+    171, 171,  73,  83,  71,  78, 
+     44,   0,   0,   0,   1,   0, 
+      0,   0,   8,   0,   0,   0, 
+     32,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      3,   0,   0,   0,   0,   0, 
+      0,   0,   3,   3,   0,   0, 
+     80,  79,  83,  73,  84,  73, 
+     79,  78,   0, 171, 171, 171, 
+     79,  83,  71,  78, 104,   0, 
+      0,   0,   3,   0,   0,   0, 
+      8,   0,   0,   0,  80,   0, 
+      0,   0,   0,   0,   0,   0, 
+      1,   0,   0,   0,   3,   0, 
+      0,   0,   0,   0,   0,   0, 
+     15,   0,   0,   0,  92,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   3,   0, 
+      0,   0,   1,   0,   0,   0, 
+      3,  12,   0,   0,  92,   0, 
+      0,   0,   1,   0,   0,   0, 
+      0,   0,   0,   0,   3,   0, 
+      0,   0,   1,   0,   0,   0, 
+     12,   3,   0,   0,  83,  86, 
+     95,  80, 111, 115, 105, 116, 
+    105, 111, 110,   0,  84,  69, 
+     88,  67,  79,  79,  82,  68, 
+      0, 171, 171, 171, 116, 139, 
+      0,   0,   0,   0,   0,   0, 
+      1,   0,   0,   0,   2,   0, 
+      0,   0,   0,   0,   0,   0, 
+     76,   5,   0,   0,  68,  88, 
+     66,  67,   2,  86,  18,  89, 
+    155, 147,  85,  85, 212,  15, 
+     31,   6,  43, 118,  52,  47, 
+      1,   0,   0,   0,  76,   5, 
+      0,   0,   6,   0,   0,   0, 
+     56,   0,   0,   0,   8,   1, 
+      0,   0,  32,   2,   0,   0, 
+    156,   2,   0,   0, 168,   4, 
+      0,   0,  24,   5,   0,   0, 
+     65, 111, 110,  57, 200,   0, 
+      0,   0, 200,   0,   0,   0, 
+      0,   2, 255, 255, 144,   0, 
+      0,   0,  56,   0,   0,   0, 
+      1,   0,  44,   0,   0,   0, 
+     56,   0,   0,   0,  56,   0, 
+      2,   0,  36,   0,   0,   0, 
+     56,   0,   0,   0,   0,   0, 
+      1,   0,   1,   0,   0,   0, 
+      3,   0,   1,   0,   0,   0, 
+      0,   0,   0,   0,   1,   2, 
+    255, 255,  31,   0,   0,   2, 
+      0,   0,   0, 128,   0,   0, 
+     15, 176,  31,   0,   0,   2, 
+      0,   0,   0, 144,   0,   8, 
+     15, 160,  31,   0,   0,   2, 
+      0,   0,   0, 144,   1,   8, 
+     15, 160,   1,   0,   0,   2, 
+      0,   0,   3, 128,   0,   0, 
+    235, 176,  66,   0,   0,   3, 
+      1,   0,  15, 128,   0,   0, 
+    228, 176,   0,   8, 228, 160, 
+     66,   0,   0,   3,   0,   0, 
+     15, 128,   0,   0, 228, 128, 
+      1,   8, 228, 160,   5,   0, 
+      0,   3,   1,   0,   7, 128, 
+      1,   0, 228, 128,   0,   0, 
+      0, 160,   1,   0,   0,   2, 
+      1,   0,   8, 128,   0,   0, 
+      0, 160,   5,   0,   0,   3, 
+      0,   0,  15, 128,   0,   0, 
+    255, 128,   1,   0, 228, 128, 
+      1,   0,   0,   2,   0,   8, 
+     15, 128,   0,   0, 228, 128, 
+    255, 255,   0,   0,  83,  72, 
+     68,  82,  16,   1,   0,   0, 
+     64,   0,   0,   0,  68,   0, 
+      0,   0,  89,   0,   0,   4, 
+     70, 142,  32,   0,   0,   0, 
+      0,   0,   4,   0,   0,   0, 
+     90,   0,   0,   3,   0,  96, 
+     16,   0,   0,   0,   0,   0, 
+     88,  24,   0,   4,   0, 112, 
+     16,   0,   0,   0,   0,   0, 
+     85,  85,   0,   0,  88,  24, 
+      0,   4,   0, 112,  16,   0, 
+      1,   0,   0,   0,  85,  85, 
+      0,   0,  98,  16,   0,   3, 
+     50,  16,  16,   0,   1,   0, 
+      0,   0,  98,  16,   0,   3, 
+    194,  16,  16,   0,   1,   0, 
+      0,   0, 101,   0,   0,   3, 
+    242,  32,  16,   0,   0,   0, 
+      0,   0, 104,   0,   0,   2, 
+      2,   0,   0,   0,  69,   0, 
+      0,   9, 242,   0,  16,   0, 
+      0,   0,   0,   0,  70,  16, 
+     16,   0,   1,   0,   0,   0, 
+     70, 126,  16,   0,   0,   0, 
+      0,   0,   0,  96,  16,   0, 
+      0,   0,   0,   0,  56,   0, 
+      0,   8, 114,   0,  16,   0, 
+      0,   0,   0,   0,  70,   2, 
+     16,   0,   0,   0,   0,   0, 
+      6, 128,  32,   0,   0,   0, 
+      0,   0,   3,   0,   0,   0, 
+     69,   0,   0,   9, 242,   0, 
+     16,   0,   1,   0,   0,   0, 
+    230,  26,  16,   0,   1,   0, 
+      0,   0,  70, 126,  16,   0, 
+      1,   0,   0,   0,   0,  96, 
+     16,   0,   0,   0,   0,   0, 
+     54,   0,   0,   6, 130,   0, 
+     16,   0,   0,   0,   0,   0, 
+     10, 128,  32,   0,   0,   0, 
+      0,   0,   3,   0,   0,   0, 
+     56,   0,   0,   7, 242,  32, 
      16,   0,   0,   0,   0,   0, 
      70,  14,  16,   0,   0,   0, 
-      0,   0,  70, 142,  32,   0, 
+      0,   0, 246,  15,  16,   0, 
+      1,   0,   0,   0,  62,   0, 
+      0,   1,  83,  84,  65,  84, 
+    116,   0,   0,   0,   6,   0, 
+      0,   0,   2,   0,   0,   0, 
+      0,   0,   0,   0,   3,   0, 
+      0,   0,   2,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   1,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      2,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   1,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+     82,  68,  69,  70,   4,   2, 
+      0,   0,   1,   0,   0,   0, 
+    204,   0,   0,   0,   4,   0, 
+      0,   0,  28,   0,   0,   0, 
+      0,   4, 255, 255,   0,   1, 
+      0,   0, 208,   1,   0,   0, 
+    156,   0,   0,   0,   3,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      1,   0,   0,   0,   0,   0, 
+      0,   0, 182,   0,   0,   0, 
+      2,   0,   0,   0,   5,   0, 
+      0,   0,   4,   0,   0,   0, 
+    255, 255, 255, 255,   0,   0, 
+      0,   0,   1,   0,   0,   0, 
+     12,   0,   0,   0, 187,   0, 
+      0,   0,   2,   0,   0,   0, 
+      5,   0,   0,   0,   4,   0, 
+      0,   0, 255, 255, 255, 255, 
+      1,   0,   0,   0,   1,   0, 
+      0,   0,  12,   0,   0,   0, 
+    193,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      1,   0,   0,   0,   0,   0, 
+      0,   0,  76,  97, 121, 101, 
+    114,  84, 101, 120, 116, 117, 
+    114, 101,  83,  97, 109, 112, 
+    108, 101, 114,  76, 105, 110, 
+    101,  97, 114,   0, 116,  82, 
+     71,  66,   0, 116,  77,  97, 
+    115, 107,   0,  80, 101, 114, 
+     76,  97, 121, 101, 114,   0, 
+    171, 171, 193,   0,   0,   0, 
+      5,   0,   0,   0, 228,   0, 
+      0,   0, 128,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,  92,   1,   0,   0, 
+      0,   0,   0,   0,  16,   0, 
+      0,   0,   0,   0,   0,   0, 
+    108,   1,   0,   0,   0,   0, 
+      0,   0, 124,   1,   0,   0, 
+     16,   0,   0,   0,  16,   0, 
+      0,   0,   0,   0,   0,   0, 
+    108,   1,   0,   0,   0,   0, 
+      0,   0, 135,   1,   0,   0, 
+     32,   0,   0,   0,  16,   0, 
+      0,   0,   0,   0,   0,   0, 
+    108,   1,   0,   0,   0,   0, 
+      0,   0, 145,   1,   0,   0, 
+     48,   0,   0,   0,   4,   0, 
+      0,   0,   2,   0,   0,   0, 
+    160,   1,   0,   0,   0,   0, 
+      0,   0, 176,   1,   0,   0, 
+     64,   0,   0,   0,  64,   0, 
+      0,   0,   0,   0,   0,   0, 
+    192,   1,   0,   0,   0,   0, 
+      0,   0, 118,  84, 101, 120, 
+    116, 117, 114, 101,  67, 111, 
+    111, 114, 100, 115,   0, 171, 
+      1,   0,   3,   0,   1,   0, 
+      4,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0, 118,  76, 
+     97, 121, 101, 114,  81, 117, 
+     97, 100,   0, 118,  77,  97, 
+    115, 107,  81, 117,  97, 100, 
+      0, 102,  76,  97, 121, 101, 
+    114,  79, 112,  97,  99, 105, 
+    116, 121,   0, 171,   0,   0, 
+      3,   0,   1,   0,   1,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0, 109,  76,  97, 121, 
+    101, 114,  84, 114,  97, 110, 
+    115, 102, 111, 114, 109,   0, 
+      3,   0,   3,   0,   4,   0, 
+      4,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,  77, 105, 
+     99, 114, 111, 115, 111, 102, 
+    116,  32,  40,  82,  41,  32, 
+     72,  76,  83,  76,  32,  83, 
+    104,  97, 100, 101, 114,  32, 
+     67, 111, 109, 112, 105, 108, 
+    101, 114,  32,  57,  46,  50, 
+     57,  46,  57,  53,  50,  46, 
+     51,  49,  49,  49,   0, 171, 
+    171, 171,  73,  83,  71,  78, 
+    104,   0,   0,   0,   3,   0, 
+      0,   0,   8,   0,   0,   0, 
+     80,   0,   0,   0,   0,   0, 
+      0,   0,   1,   0,   0,   0, 
+      3,   0,   0,   0,   0,   0, 
+      0,   0,  15,   0,   0,   0, 
+     92,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      3,   0,   0,   0,   1,   0, 
+      0,   0,   3,   3,   0,   0, 
+     92,   0,   0,   0,   1,   0, 
+      0,   0,   0,   0,   0,   0, 
+      3,   0,   0,   0,   1,   0, 
+      0,   0,  12,  12,   0,   0, 
+     83,  86,  95,  80, 111, 115, 
+    105, 116, 105, 111, 110,   0, 
+     84,  69,  88,  67,  79,  79, 
+     82,  68,   0, 171, 171, 171, 
+     79,  83,  71,  78,  44,   0, 
+      0,   0,   1,   0,   0,   0, 
+      8,   0,   0,   0,  32,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   3,   0, 
+      0,   0,   0,   0,   0,   0, 
+     15,   0,   0,   0,  83,  86, 
+     95,  84,  97, 114, 103, 101, 
+    116,   0, 171, 171, 216, 147, 
+      0,   0,   0,   0,   0,   0, 
+     82, 101, 110, 100, 101, 114, 
+     82,  71,  66,  76,  97, 121, 
+    101, 114,  80, 114, 101, 109, 
+    117, 108,  80, 111, 105, 110, 
+    116,  77,  97, 115, 107,   0, 
+      4,   0,   0,   0,   1,   0, 
+      0,   0,   0,   0,   0,   0, 
+      1,   0,   0,   0,   0,   0, 
+      0,   0,   1,   0,   0,   0, 
+      0,   0,   0,   0,   1,   0, 
+      0,   0,   0,   0,   0,   0, 
+      1,   0,   0,   0,   3,   0, 
+      0,   0, 255, 255, 255, 255, 
+     76,   8,   0,   0,  68,  88, 
+     66,  67, 169, 150, 145, 216, 
+    234,  78, 253,  86,  77,  68, 
+      6, 212, 187, 231, 104,  78, 
+      1,   0,   0,   0,  76,   8, 
+      0,   0,   6,   0,   0,   0, 
+     56,   0,   0,   0,   4,   2, 
+      0,   0, 144,   4,   0,   0, 
+     12,   5,   0,   0, 168,   7, 
+      0,   0, 220,   7,   0,   0, 
+     65, 111, 110,  57, 196,   1, 
+      0,   0, 196,   1,   0,   0, 
+      0,   2, 254, 255,  96,   1, 
+      0,   0, 100,   0,   0,   0, 
+      5,   0,  36,   0,   0,   0, 
+     96,   0,   0,   0,  96,   0, 
+      0,   0,  36,   0,   1,   0, 
+     96,   0,   0,   0,   0,   0, 
+      3,   0,   1,   0,   0,   0, 
+      0,   0,   0,   0,   4,   0, 
+      2,   0,   4,   0,   0,   0, 
       0,   0,   0,   0,   7,   0, 
-      0,   0,  14,   0,   0,   7, 
+      1,   0,   6,   0,   0,   0, 
+      0,   0,   1,   0,   0,   0, 
+      1,   0,   7,   0,   0,   0, 
+      0,   0,   2,   0,   0,   0, 
+      4,   0,   8,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      1,   2, 254, 255,  31,   0, 
+      0,   2,   5,   0,   0, 128, 
+      0,   0,  15, 144,   6,   0, 
+      0,   2,   0,   0,   1, 128, 
+      3,   0, 170, 160,   4,   0, 
+      0,   4,   0,   0,   6, 128, 
+      0,   0, 208, 144,   2,   0, 
+    248, 160,   2,   0, 208, 160, 
+      5,   0,   0,   3,   1,   0, 
+     15, 128,   0,   0, 170, 128, 
+      5,   0, 228, 160,   4,   0, 
+      0,   4,   1,   0,  15, 128, 
+      4,   0, 228, 160,   0,   0, 
+     85, 128,   1,   0, 228, 128, 
+      2,   0,   0,   3,   1,   0, 
+     15, 128,   1,   0, 228, 128, 
+      6,   0, 228, 160,   2,   0, 
+      0,   3,   0,   0,   6, 128, 
+      1,   0, 208, 128,   3,   0, 
+    208, 161,   5,   0,   0,   3, 
+      0,   0,   8, 224,   0,   0, 
+      0, 128,   0,   0,  85, 128, 
+      6,   0,   0,   2,   0,   0, 
+      1, 128,   3,   0, 255, 160, 
+      5,   0,   0,   3,   0,   0, 
+      4, 224,   0,   0,   0, 128, 
+      0,   0, 170, 128,   4,   0, 
+      0,   4,   0,   0,   3, 224, 
+      0,   0, 228, 144,   1,   0, 
+    238, 160,   1,   0, 228, 160, 
+      6,   0,   0,   2,   0,   0, 
+      1, 128,   1,   0, 255, 128, 
+      5,   0,   0,   3,   1,   0, 
+      7, 128,   0,   0,   0, 128, 
+      1,   0, 228, 128,   2,   0, 
+      0,   3,   0,   0,  15, 128, 
+      1,   0, 228, 128,   7,   0, 
+    228, 161,   5,   0,   0,   3, 
+      0,   0,   7, 128,   0,   0, 
+    255, 128,   0,   0, 228, 128, 
+      5,   0,   0,   3,   1,   0, 
+     15, 128,   0,   0,  85, 128, 
+      9,   0, 228, 160,   4,   0, 
+      0,   4,   1,   0,  15, 128, 
+      8,   0, 228, 160,   0,   0, 
+      0, 128,   1,   0, 228, 128, 
+      4,   0,   0,   4,   1,   0, 
+     15, 128,  10,   0, 228, 160, 
+      0,   0, 170, 128,   1,   0, 
+    228, 128,   4,   0,   0,   4, 
+      0,   0,  15, 128,  11,   0, 
+    228, 160,   0,   0, 255, 128, 
+      1,   0, 228, 128,   4,   0, 
+      0,   4,   0,   0,   3, 192, 
+      0,   0, 255, 128,   0,   0, 
+    228, 160,   0,   0, 228, 128, 
+      1,   0,   0,   2,   0,   0, 
+     12, 192,   0,   0, 228, 128, 
+    255, 255,   0,   0,  83,  72, 
+     68,  82, 132,   2,   0,   0, 
+     64,   0,   1,   0, 161,   0, 
+      0,   0,  89,   0,   0,   4, 
+     70, 142,  32,   0,   0,   0, 
+      0,   0,   8,   0,   0,   0, 
+     89,   0,   0,   4,  70, 142, 
+     32,   0,   1,   0,   0,   0, 
+      1,   0,   0,   0,  89,   0, 
+      0,   4,  70, 142,  32,   0, 
+      2,   0,   0,   0,   4,   0, 
+      0,   0,  95,   0,   0,   3, 
+     50,  16,  16,   0,   0,   0, 
+      0,   0, 103,   0,   0,   4, 
+    242,  32,  16,   0,   0,   0, 
+      0,   0,   1,   0,   0,   0, 
+    101,   0,   0,   3,  50,  32, 
+     16,   0,   1,   0,   0,   0, 
+    101,   0,   0,   3, 194,  32, 
+     16,   0,   1,   0,   0,   0, 
+    104,   0,   0,   2,   2,   0, 
+      0,   0,  50,   0,   0,  11, 
+     50,   0,  16,   0,   0,   0, 
+      0,   0,  70,  16,  16,   0, 
+      0,   0,   0,   0, 230, 138, 
+     32,   0,   0,   0,   0,   0, 
+      1,   0,   0,   0,  70, 128, 
+     32,   0,   0,   0,   0,   0, 
+      1,   0,   0,   0,  56,   0, 
+      0,   8, 242,   0,  16,   0, 
+      1,   0,   0,   0,  86,   5, 
+     16,   0,   0,   0,   0,   0, 
+     70, 142,  32,   0,   0,   0, 
+      0,   0,   5,   0,   0,   0, 
+     50,   0,   0,  10, 242,   0, 
+     16,   0,   0,   0,   0,   0, 
+     70, 142,  32,   0,   0,   0, 
+      0,   0,   4,   0,   0,   0, 
+      6,   0,  16,   0,   0,   0, 
+      0,   0,  70,  14,  16,   0, 
+      1,   0,   0,   0,   0,   0, 
+      0,   8, 242,   0,  16,   0, 
+      0,   0,   0,   0,  70,  14, 
+     16,   0,   0,   0,   0,   0, 
+     70, 142,  32,   0,   0,   0, 
+      0,   0,   7,   0,   0,   0, 
+     14,   0,   0,   7, 114,   0, 
+     16,   0,   1,   0,   0,   0, 
+     70,   2,  16,   0,   0,   0, 
+      0,   0, 246,  15,  16,   0, 
+      0,   0,   0,   0,  54,   0, 
+      0,   5, 130,   0,  16,   0, 
+      1,   0,   0,   0,  58,   0, 
+     16,   0,   0,   0,   0,   0, 
+      0,   0,   0,   9,  50,   0, 
+     16,   0,   0,   0,   0,   0, 
+     70,   0,  16,   0,   0,   0, 
+      0,   0,  70, 128,  32, 128, 
+     65,   0,   0,   0,   0,   0, 
+      0,   0,   2,   0,   0,   0, 
+     14,   0,   0,   8, 194,  32, 
+     16,   0,   1,   0,   0,   0, 
+      6,   4,  16,   0,   0,   0, 
+      0,   0, 166, 142,  32,   0, 
+      0,   0,   0,   0,   2,   0, 
+      0,   0,   0,   0,   0,   9, 
+    242,   0,  16,   0,   0,   0, 
+      0,   0,  70,  14,  16,   0, 
+      1,   0,   0,   0,  70, 142, 
+     32, 128,  65,   0,   0,   0, 
+      1,   0,   0,   0,   0,   0, 
+      0,   0,  56,   0,   0,   7, 
     114,   0,  16,   0,   0,   0, 
-      0,   0,  70,   2,  16,   0, 
-      0,   0,   0,   0, 246,  15, 
-     16,   0,   0,   0,   0,   0, 
-      0,   0,   0,   9, 242,   0, 
+      0,   0, 246,  15,  16,   0, 
+      0,   0,   0,   0,  70,   2, 
+     16,   0,   0,   0,   0,   0, 
+     56,   0,   0,   8, 242,   0, 
+     16,   0,   1,   0,   0,   0, 
+     86,   5,  16,   0,   0,   0, 
+      0,   0,  70, 142,  32,   0, 
+      2,   0,   0,   0,   1,   0, 
+      0,   0,  50,   0,   0,  10, 
+    242,   0,  16,   0,   1,   0, 
+      0,   0,  70, 142,  32,   0, 
+      2,   0,   0,   0,   0,   0, 
+      0,   0,   6,   0,  16,   0, 
+      0,   0,   0,   0,  70,  14, 
+     16,   0,   1,   0,   0,   0, 
+     50,   0,   0,  10, 242,   0, 
+     16,   0,   1,   0,   0,   0, 
+     70, 142,  32,   0,   2,   0, 
+      0,   0,   2,   0,   0,   0, 
+    166,  10,  16,   0,   0,   0, 
+      0,   0,  70,  14,  16,   0, 
+      1,   0,   0,   0,  50,   0, 
+      0,  10, 242,  32,  16,   0, 
+      0,   0,   0,   0,  70, 142, 
+     32,   0,   2,   0,   0,   0, 
+      3,   0,   0,   0, 246,  15, 
+     16,   0,   0,   0,   0,   0, 
+     70,  14,  16,   0,   1,   0, 
+      0,   0,  50,   0,   0,  11, 
+     50,  32,  16,   0,   1,   0, 
+      0,   0,  70,  16,  16,   0, 
+      0,   0,   0,   0, 230, 138, 
+     32,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,  70, 128, 
+     32,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,  62,   0, 
+      0,   1,  83,  84,  65,  84, 
+    116,   0,   0,   0,  16,   0, 
+      0,   0,   2,   0,   0,   0, 
+      0,   0,   0,   0,   4,   0, 
+      0,   0,   8,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   1,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   1,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+     82,  68,  69,  70, 148,   2, 
+      0,   0,   3,   0,   0,   0, 
+    168,   0,   0,   0,   3,   0, 
+      0,   0,  28,   0,   0,   0, 
+      0,   4, 254, 255,   0,   1, 
+      0,   0,  96,   2,   0,   0, 
+    124,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      1,   0,   0,   0,   0,   0, 
+      0,   0, 133,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   1,   0, 
+      0,   0,   1,   0,   0,   0, 
+      0,   0,   0,   0, 152,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      2,   0,   0,   0,   1,   0, 
+      0,   0,   0,   0,   0,   0, 
+     80, 101, 114,  76,  97, 121, 
+    101, 114,   0,  80, 101, 114, 
+     79,  99,  99,  97, 115, 105, 
+    111, 110,  97, 108,  76,  97, 
+    121, 101, 114,   0,  80, 101, 
+    114,  76,  97, 121, 101, 114, 
+     77,  97, 110,  97, 103, 101, 
+    114,   0, 124,   0,   0,   0, 
+      5,   0,   0,   0, 240,   0, 
+      0,   0, 128,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0, 133,   0,   0,   0, 
+      2,   0,   0,   0, 220,   1, 
+      0,   0,  32,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0, 152,   0,   0,   0, 
+      1,   0,   0,   0,  60,   2, 
+      0,   0,  64,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0, 104,   1,   0,   0, 
+      0,   0,   0,   0,  16,   0, 
+      0,   0,   2,   0,   0,   0, 
+    120,   1,   0,   0,   0,   0, 
+      0,   0, 136,   1,   0,   0, 
+     16,   0,   0,   0,  16,   0, 
+      0,   0,   2,   0,   0,   0, 
+    120,   1,   0,   0,   0,   0, 
+      0,   0, 147,   1,   0,   0, 
+     32,   0,   0,   0,  16,   0, 
+      0,   0,   2,   0,   0,   0, 
+    120,   1,   0,   0,   0,   0, 
+      0,   0, 157,   1,   0,   0, 
+     48,   0,   0,   0,   4,   0, 
+      0,   0,   0,   0,   0,   0, 
+    172,   1,   0,   0,   0,   0, 
+      0,   0, 188,   1,   0,   0, 
+     64,   0,   0,   0,  64,   0, 
+      0,   0,   2,   0,   0,   0, 
+    204,   1,   0,   0,   0,   0, 
+      0,   0, 118,  84, 101, 120, 
+    116, 117, 114, 101,  67, 111, 
+    111, 114, 100, 115,   0, 171, 
+      1,   0,   3,   0,   1,   0, 
+      4,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0, 118,  76, 
+     97, 121, 101, 114,  81, 117, 
+     97, 100,   0, 118,  77,  97, 
+    115, 107,  81, 117,  97, 100, 
+      0, 102,  76,  97, 121, 101, 
+    114,  79, 112,  97,  99, 105, 
+    116, 121,   0, 171,   0,   0, 
+      3,   0,   1,   0,   1,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0, 109,  76,  97, 121, 
+    101, 114,  84, 114,  97, 110, 
+    115, 102, 111, 114, 109,   0, 
+      3,   0,   3,   0,   4,   0, 
+      4,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,  12,   2, 
+      0,   0,   0,   0,   0,   0, 
+     16,   0,   0,   0,   2,   0, 
+      0,   0,  32,   2,   0,   0, 
+      0,   0,   0,   0,  48,   2, 
+      0,   0,  16,   0,   0,   0, 
+     16,   0,   0,   0,   0,   0, 
+      0,   0,  32,   2,   0,   0, 
+      0,   0,   0,   0, 118,  82, 
+    101, 110, 100, 101, 114,  84, 
+     97, 114, 103, 101, 116,  79, 
+    102, 102, 115, 101, 116,   0, 
+      1,   0,   3,   0,   1,   0, 
+      4,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0, 102,  76, 
+     97, 121, 101, 114,  67, 111, 
+    108, 111, 114,   0,  84,   2, 
+      0,   0,   0,   0,   0,   0, 
+     64,   0,   0,   0,   2,   0, 
+      0,   0, 204,   1,   0,   0, 
+      0,   0,   0,   0, 109,  80, 
+    114, 111, 106, 101,  99, 116, 
+    105, 111, 110,   0,  77, 105, 
+     99, 114, 111, 115, 111, 102, 
+    116,  32,  40,  82,  41,  32, 
+     72,  76,  83,  76,  32,  83, 
+    104,  97, 100, 101, 114,  32, 
+     67, 111, 109, 112, 105, 108, 
+    101, 114,  32,  57,  46,  50, 
+     57,  46,  57,  53,  50,  46, 
+     51,  49,  49,  49,   0, 171, 
+    171, 171,  73,  83,  71,  78, 
+     44,   0,   0,   0,   1,   0, 
+      0,   0,   8,   0,   0,   0, 
+     32,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      3,   0,   0,   0,   0,   0, 
+      0,   0,   3,   3,   0,   0, 
+     80,  79,  83,  73,  84,  73, 
+     79,  78,   0, 171, 171, 171, 
+     79,  83,  71,  78, 104,   0, 
+      0,   0,   3,   0,   0,   0, 
+      8,   0,   0,   0,  80,   0, 
+      0,   0,   0,   0,   0,   0, 
+      1,   0,   0,   0,   3,   0, 
+      0,   0,   0,   0,   0,   0, 
+     15,   0,   0,   0,  92,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   3,   0, 
+      0,   0,   1,   0,   0,   0, 
+      3,  12,   0,   0,  92,   0, 
+      0,   0,   1,   0,   0,   0, 
+      0,   0,   0,   0,   3,   0, 
+      0,   0,   1,   0,   0,   0, 
+     12,   3,   0,   0,  83,  86, 
+     95,  80, 111, 115, 105, 116, 
+    105, 111, 110,   0,  84,  69, 
+     88,  67,  79,  79,  82,  68, 
+      0, 171, 171, 171, 126, 153, 
+      0,   0,   0,   0,   0,   0, 
+      1,   0,   0,   0,   2,   0, 
+      0,   0,   0,   0,   0,   0, 
+    144,   5,   0,   0,  68,  88, 
+     66,  67, 239,  83, 247, 155, 
+     21, 118, 142,  53, 183,   4, 
+     63,  81, 228, 175, 103,  61, 
+      1,   0,   0,   0, 144,   5, 
+      0,   0,   6,   0,   0,   0, 
+     56,   0,   0,   0,   8,   1, 
+      0,   0,  44,   2,   0,   0, 
+    168,   2,   0,   0, 236,   4, 
+      0,   0,  92,   5,   0,   0, 
+     65, 111, 110,  57, 200,   0, 
+      0,   0, 200,   0,   0,   0, 
+      0,   2, 255, 255, 144,   0, 
+      0,   0,  56,   0,   0,   0, 
+      1,   0,  44,   0,   0,   0, 
+     56,   0,   0,   0,  56,   0, 
+      2,   0,  36,   0,   0,   0, 
+     56,   0,   1,   0,   0,   0, 
+      0,   1,   1,   0,   0,   0, 
+      3,   0,   1,   0,   0,   0, 
+      0,   0,   0,   0,   1,   2, 
+    255, 255,  31,   0,   0,   2, 
+      0,   0,   0, 128,   0,   0, 
+     15, 176,  31,   0,   0,   2, 
+      0,   0,   0, 144,   0,   8, 
+     15, 160,  31,   0,   0,   2, 
+      0,   0,   0, 144,   1,   8, 
+     15, 160,   1,   0,   0,   2, 
+      0,   0,   3, 128,   0,   0, 
+    235, 176,  66,   0,   0,   3, 
+      1,   0,  15, 128,   0,   0, 
+    228, 176,   1,   8, 228, 160, 
+     66,   0,   0,   3,   0,   0, 
+     15, 128,   0,   0, 228, 128, 
+      0,   8, 228, 160,   5,   0, 
+      0,   3,   1,   0,   7, 128, 
+      1,   0, 228, 128,   0,   0, 
+      0, 160,   1,   0,   0,   2, 
+      1,   0,   8, 128,   0,   0, 
+      0, 160,   5,   0,   0,   3, 
+      0,   0,  15, 128,   0,   0, 
+    255, 128,   1,   0, 228, 128, 
+      1,   0,   0,   2,   0,   8, 
+     15, 128,   0,   0, 228, 128, 
+    255, 255,   0,   0,  83,  72, 
+     68,  82,  28,   1,   0,   0, 
+     64,   0,   0,   0,  71,   0, 
+      0,   0,  89,   0,   0,   4, 
+     70, 142,  32,   0,   0,   0, 
+      0,   0,   4,   0,   0,   0, 
+     90,   0,   0,   3,   0,  96, 
+     16,   0,   0,   0,   0,   0, 
+     90,   0,   0,   3,   0,  96, 
+     16,   0,   1,   0,   0,   0, 
+     88,  24,   0,   4,   0, 112, 
+     16,   0,   0,   0,   0,   0, 
+     85,  85,   0,   0,  88,  24, 
+      0,   4,   0, 112,  16,   0, 
+      1,   0,   0,   0,  85,  85, 
+      0,   0,  98,  16,   0,   3, 
+     50,  16,  16,   0,   1,   0, 
+      0,   0,  98,  16,   0,   3, 
+    194,  16,  16,   0,   1,   0, 
+      0,   0, 101,   0,   0,   3, 
+    242,  32,  16,   0,   0,   0, 
+      0,   0, 104,   0,   0,   2, 
+      2,   0,   0,   0,  69,   0, 
+      0,   9, 242,   0,  16,   0, 
+      0,   0,   0,   0,  70,  16, 
+     16,   0,   1,   0,   0,   0, 
+     70, 126,  16,   0,   0,   0, 
+      0,   0,   0,  96,  16,   0, 
+      1,   0,   0,   0,  56,   0, 
+      0,   8, 114,   0,  16,   0, 
+      0,   0,   0,   0,  70,   2, 
+     16,   0,   0,   0,   0,   0, 
+      6, 128,  32,   0,   0,   0, 
+      0,   0,   3,   0,   0,   0, 
+     69,   0,   0,   9, 242,   0, 
+     16,   0,   1,   0,   0,   0, 
+    230,  26,  16,   0,   1,   0, 
+      0,   0,  70, 126,  16,   0, 
+      1,   0,   0,   0,   0,  96, 
+     16,   0,   0,   0,   0,   0, 
+     54,   0,   0,   6, 130,   0, 
+     16,   0,   0,   0,   0,   0, 
+     10, 128,  32,   0,   0,   0, 
+      0,   0,   3,   0,   0,   0, 
+     56,   0,   0,   7, 242,  32, 
      16,   0,   0,   0,   0,   0, 
      70,  14,  16,   0,   0,   0, 
+      0,   0, 246,  15,  16,   0, 
+      1,   0,   0,   0,  62,   0, 
+      0,   1,  83,  84,  65,  84, 
+    116,   0,   0,   0,   6,   0, 
+      0,   0,   2,   0,   0,   0, 
+      0,   0,   0,   0,   3,   0, 
+      0,   0,   2,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   1,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      2,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   1,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+     82,  68,  69,  70,  60,   2, 
+      0,   0,   1,   0,   0,   0, 
+      4,   1,   0,   0,   5,   0, 
+      0,   0,  28,   0,   0,   0, 
+      0,   4, 255, 255,   0,   1, 
+      0,   0,   8,   2,   0,   0, 
+    188,   0,   0,   0,   3,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      1,   0,   0,   0,   0,   0, 
+      0,   0, 214,   0,   0,   0, 
+      3,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   1,   0, 
+      0,   0,   1,   0,   0,   0, 
+      0,   0,   0,   0, 239,   0, 
+      0,   0,   2,   0,   0,   0, 
+      5,   0,   0,   0,   4,   0, 
+      0,   0, 255, 255, 255, 255, 
+      0,   0,   0,   0,   1,   0, 
+      0,   0,  12,   0,   0,   0, 
+    244,   0,   0,   0,   2,   0, 
+      0,   0,   5,   0,   0,   0, 
+      4,   0,   0,   0, 255, 255, 
+    255, 255,   1,   0,   0,   0, 
+      1,   0,   0,   0,  12,   0, 
+      0,   0, 250,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   1,   0,   0,   0, 
+      0,   0,   0,   0,  76,  97, 
+    121, 101, 114,  84, 101, 120, 
+    116, 117, 114, 101,  83,  97, 
+    109, 112, 108, 101, 114,  76, 
+    105, 110, 101,  97, 114,   0, 
+     76,  97, 121, 101, 114,  84, 
+    101, 120, 116, 117, 114, 101, 
+     83,  97, 109, 112, 108, 101, 
+    114,  80, 111, 105, 110, 116, 
+      0, 116,  82,  71,  66,   0, 
+    116,  77,  97, 115, 107,   0, 
+     80, 101, 114,  76,  97, 121, 
+    101, 114,   0, 171, 250,   0, 
+      0,   0,   5,   0,   0,   0, 
+     28,   1,   0,   0, 128,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0, 148,   1, 
+      0,   0,   0,   0,   0,   0, 
+     16,   0,   0,   0,   0,   0, 
+      0,   0, 164,   1,   0,   0, 
+      0,   0,   0,   0, 180,   1, 
+      0,   0,  16,   0,   0,   0, 
+     16,   0,   0,   0,   0,   0, 
+      0,   0, 164,   1,   0,   0, 
+      0,   0,   0,   0, 191,   1, 
+      0,   0,  32,   0,   0,   0, 
+     16,   0,   0,   0,   0,   0, 
+      0,   0, 164,   1,   0,   0, 
+      0,   0,   0,   0, 201,   1, 
+      0,   0,  48,   0,   0,   0, 
+      4,   0,   0,   0,   2,   0, 
+      0,   0, 216,   1,   0,   0, 
+      0,   0,   0,   0, 232,   1, 
+      0,   0,  64,   0,   0,   0, 
+     64,   0,   0,   0,   0,   0, 
+      0,   0, 248,   1,   0,   0, 
+      0,   0,   0,   0, 118,  84, 
+    101, 120, 116, 117, 114, 101, 
+     67, 111, 111, 114, 100, 115, 
+      0, 171,   1,   0,   3,   0, 
+      1,   0,   4,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+    118,  76,  97, 121, 101, 114, 
+     81, 117,  97, 100,   0, 118, 
+     77,  97, 115, 107,  81, 117, 
+     97, 100,   0, 102,  76,  97, 
+    121, 101, 114,  79, 112,  97, 
+     99, 105, 116, 121,   0, 171, 
+      0,   0,   3,   0,   1,   0, 
+      1,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0, 109,  76, 
+     97, 121, 101, 114,  84, 114, 
+     97, 110, 115, 102, 111, 114, 
+    109,   0,   3,   0,   3,   0, 
+      4,   0,   4,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+     77, 105,  99, 114, 111, 115, 
+    111, 102, 116,  32,  40,  82, 
+     41,  32,  72,  76,  83,  76, 
+     32,  83, 104,  97, 100, 101, 
+    114,  32,  67, 111, 109, 112, 
+    105, 108, 101, 114,  32,  57, 
+     46,  50,  57,  46,  57,  53, 
+     50,  46,  51,  49,  49,  49, 
+      0, 171, 171, 171,  73,  83, 
+     71,  78, 104,   0,   0,   0, 
+      3,   0,   0,   0,   8,   0, 
+      0,   0,  80,   0,   0,   0, 
+      0,   0,   0,   0,   1,   0, 
+      0,   0,   3,   0,   0,   0, 
+      0,   0,   0,   0,  15,   0, 
+      0,   0,  92,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   3,   0,   0,   0, 
+      1,   0,   0,   0,   3,   3, 
+      0,   0,  92,   0,   0,   0, 
+      1,   0,   0,   0,   0,   0, 
+      0,   0,   3,   0,   0,   0, 
+      1,   0,   0,   0,  12,  12, 
+      0,   0,  83,  86,  95,  80, 
+    111, 115, 105, 116, 105, 111, 
+    110,   0,  84,  69,  88,  67, 
+     79,  79,  82,  68,   0, 171, 
+    171, 171,  79,  83,  71,  78, 
+     44,   0,   0,   0,   1,   0, 
+      0,   0,   8,   0,   0,   0, 
+     32,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      3,   0,   0,   0,   0,   0, 
+      0,   0,  15,   0,   0,   0, 
+     83,  86,  95,  84,  97, 114, 
+    103, 101, 116,   0, 171, 171, 
+    226, 161,   0,   0,   0,   0, 
+      0,   0,  82, 101, 110, 100, 
+    101, 114,  82,  71,  66,  65, 
+     76,  97, 121, 101, 114,  80, 
+    114, 101, 109, 117, 108,  77, 
+     97, 115, 107,   0,   4,   0, 
+      0,   0,   1,   0,   0,   0, 
+      0,   0,   0,   0,   1,   0, 
+      0,   0,   0,   0,   0,   0, 
+      1,   0,   0,   0,   0,   0, 
+      0,   0,   1,   0,   0,   0, 
+      0,   0,   0,   0,   1,   0, 
+      0,   0,   3,   0,   0,   0, 
+    255, 255, 255, 255,  76,   8, 
+      0,   0,  68,  88,  66,  67, 
+    169, 150, 145, 216, 234,  78, 
+    253,  86,  77,  68,   6, 212, 
+    187, 231, 104,  78,   1,   0, 
+      0,   0,  76,   8,   0,   0, 
+      6,   0,   0,   0,  56,   0, 
+      0,   0,   4,   2,   0,   0, 
+    144,   4,   0,   0,  12,   5, 
+      0,   0, 168,   7,   0,   0, 
+    220,   7,   0,   0,  65, 111, 
+    110,  57, 196,   1,   0,   0, 
+    196,   1,   0,   0,   0,   2, 
+    254, 255,  96,   1,   0,   0, 
+    100,   0,   0,   0,   5,   0, 
+     36,   0,   0,   0,  96,   0, 
+      0,   0,  96,   0,   0,   0, 
+     36,   0,   1,   0,  96,   0, 
+      0,   0,   0,   0,   3,   0, 
+      1,   0,   0,   0,   0,   0, 
+      0,   0,   4,   0,   2,   0, 
+      4,   0,   0,   0,   0,   0, 
+      0,   0,   7,   0,   1,   0, 
+      6,   0,   0,   0,   0,   0, 
+      1,   0,   0,   0,   1,   0, 
+      7,   0,   0,   0,   0,   0, 
+      2,   0,   0,   0,   4,   0, 
+      8,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   1,   2, 
+    254, 255,  31,   0,   0,   2, 
+      5,   0,   0, 128,   0,   0, 
+     15, 144,   6,   0,   0,   2, 
+      0,   0,   1, 128,   3,   0, 
+    170, 160,   4,   0,   0,   4, 
+      0,   0,   6, 128,   0,   0, 
+    208, 144,   2,   0, 248, 160, 
+      2,   0, 208, 160,   5,   0, 
+      0,   3,   1,   0,  15, 128, 
+      0,   0, 170, 128,   5,   0, 
+    228, 160,   4,   0,   0,   4, 
+      1,   0,  15, 128,   4,   0, 
+    228, 160,   0,   0,  85, 128, 
+      1,   0, 228, 128,   2,   0, 
+      0,   3,   1,   0,  15, 128, 
+      1,   0, 228, 128,   6,   0, 
+    228, 160,   2,   0,   0,   3, 
+      0,   0,   6, 128,   1,   0, 
+    208, 128,   3,   0, 208, 161, 
+      5,   0,   0,   3,   0,   0, 
+      8, 224,   0,   0,   0, 128, 
+      0,   0,  85, 128,   6,   0, 
+      0,   2,   0,   0,   1, 128, 
+      3,   0, 255, 160,   5,   0, 
+      0,   3,   0,   0,   4, 224, 
+      0,   0,   0, 128,   0,   0, 
+    170, 128,   4,   0,   0,   4, 
+      0,   0,   3, 224,   0,   0, 
+    228, 144,   1,   0, 238, 160, 
+      1,   0, 228, 160,   6,   0, 
+      0,   2,   0,   0,   1, 128, 
+      1,   0, 255, 128,   5,   0, 
+      0,   3,   1,   0,   7, 128, 
+      0,   0,   0, 128,   1,   0, 
+    228, 128,   2,   0,   0,   3, 
+      0,   0,  15, 128,   1,   0, 
+    228, 128,   7,   0, 228, 161, 
+      5,   0,   0,   3,   0,   0, 
+      7, 128,   0,   0, 255, 128, 
+      0,   0, 228, 128,   5,   0, 
+      0,   3,   1,   0,  15, 128, 
+      0,   0,  85, 128,   9,   0, 
+    228, 160,   4,   0,   0,   4, 
+      1,   0,  15, 128,   8,   0, 
+    228, 160,   0,   0,   0, 128, 
+      1,   0, 228, 128,   4,   0, 
+      0,   4,   1,   0,  15, 128, 
+     10,   0, 228, 160,   0,   0, 
+    170, 128,   1,   0, 228, 128, 
+      4,   0,   0,   4,   0,   0, 
+     15, 128,  11,   0, 228, 160, 
+      0,   0, 255, 128,   1,   0, 
+    228, 128,   4,   0,   0,   4, 
+      0,   0,   3, 192,   0,   0, 
+    255, 128,   0,   0, 228, 160, 
+      0,   0, 228, 128,   1,   0, 
+      0,   2,   0,   0,  12, 192, 
+      0,   0, 228, 128, 255, 255, 
+      0,   0,  83,  72,  68,  82, 
+    132,   2,   0,   0,  64,   0, 
+      1,   0, 161,   0,   0,   0, 
+     89,   0,   0,   4,  70, 142, 
+     32,   0,   0,   0,   0,   0, 
+      8,   0,   0,   0,  89,   0, 
+      0,   4,  70, 142,  32,   0, 
+      1,   0,   0,   0,   1,   0, 
+      0,   0,  89,   0,   0,   4, 
+     70, 142,  32,   0,   2,   0, 
+      0,   0,   4,   0,   0,   0, 
+     95,   0,   0,   3,  50,  16, 
+     16,   0,   0,   0,   0,   0, 
+    103,   0,   0,   4, 242,  32, 
+     16,   0,   0,   0,   0,   0, 
+      1,   0,   0,   0, 101,   0, 
+      0,   3,  50,  32,  16,   0, 
+      1,   0,   0,   0, 101,   0, 
+      0,   3, 194,  32,  16,   0, 
+      1,   0,   0,   0, 104,   0, 
+      0,   2,   2,   0,   0,   0, 
+     50,   0,   0,  11,  50,   0, 
+     16,   0,   0,   0,   0,   0, 
+     70,  16,  16,   0,   0,   0, 
+      0,   0, 230, 138,  32,   0, 
+      0,   0,   0,   0,   1,   0, 
+      0,   0,  70, 128,  32,   0, 
+      0,   0,   0,   0,   1,   0, 
+      0,   0,  56,   0,   0,   8, 
+    242,   0,  16,   0,   1,   0, 
+      0,   0,  86,   5,  16,   0, 
+      0,   0,   0,   0,  70, 142, 
+     32,   0,   0,   0,   0,   0, 
+      5,   0,   0,   0,  50,   0, 
+      0,  10, 242,   0,  16,   0, 
+      0,   0,   0,   0,  70, 142, 
+     32,   0,   0,   0,   0,   0, 
+      4,   0,   0,   0,   6,   0, 
+     16,   0,   0,   0,   0,   0, 
+     70,  14,  16,   0,   1,   0, 
+      0,   0,   0,   0,   0,   8, 
+    242,   0,  16,   0,   0,   0, 
+      0,   0,  70,  14,  16,   0, 
+      0,   0,   0,   0,  70, 142, 
+     32,   0,   0,   0,   0,   0, 
+      7,   0,   0,   0,  14,   0, 
+      0,   7, 114,   0,  16,   0, 
+      1,   0,   0,   0,  70,   2, 
+     16,   0,   0,   0,   0,   0, 
+    246,  15,  16,   0,   0,   0, 
+      0,   0,  54,   0,   0,   5, 
+    130,   0,  16,   0,   1,   0, 
+      0,   0,  58,   0,  16,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   9,  50,   0,  16,   0, 
+      0,   0,   0,   0,  70,   0, 
+     16,   0,   0,   0,   0,   0, 
+     70, 128,  32, 128,  65,   0, 
+      0,   0,   0,   0,   0,   0, 
+      2,   0,   0,   0,  14,   0, 
+      0,   8, 194,  32,  16,   0, 
+      1,   0,   0,   0,   6,   4, 
+     16,   0,   0,   0,   0,   0, 
+    166, 142,  32,   0,   0,   0, 
+      0,   0,   2,   0,   0,   0, 
+      0,   0,   0,   9, 242,   0, 
+     16,   0,   0,   0,   0,   0, 
+     70,  14,  16,   0,   1,   0, 
       0,   0,  70, 142,  32, 128, 
      65,   0,   0,   0,   1,   0, 
       0,   0,   0,   0,   0,   0, 
      56,   0,   0,   7, 114,   0, 
      16,   0,   0,   0,   0,   0, 
     246,  15,  16,   0,   0,   0, 
       0,   0,  70,   2,  16,   0, 
       0,   0,   0,   0,  56,   0, 
@@ -9909,20 +12249,20 @@ const BYTE g_main[] =
      16,   0,   1,   0,   0,   0, 
      70,  16,  16,   0,   0,   0, 
       0,   0, 230, 138,  32,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,  70, 128,  32,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,  62,   0,   0,   1, 
      83,  84,  65,  84, 116,   0, 
-      0,   0,  13,   0,   0,   0, 
+      0,   0,  16,   0,   0,   0, 
       2,   0,   0,   0,   0,   0, 
-      0,   0,   3,   0,   0,   0, 
-      6,   0,   0,   0,   0,   0, 
+      0,   0,   4,   0,   0,   0, 
+      8,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       1,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
@@ -9980,17 +12320,17 @@ const BYTE g_main[] =
       2,   0,   0,   0, 120,   1, 
       0,   0,   0,   0,   0,   0, 
     136,   1,   0,   0,  16,   0, 
       0,   0,  16,   0,   0,   0, 
       2,   0,   0,   0, 120,   1, 
       0,   0,   0,   0,   0,   0, 
     147,   1,   0,   0,  32,   0, 
       0,   0,  16,   0,   0,   0, 
-      0,   0,   0,   0, 120,   1, 
+      2,   0,   0,   0, 120,   1, 
       0,   0,   0,   0,   0,   0, 
     157,   1,   0,   0,  48,   0, 
       0,   0,   4,   0,   0,   0, 
       0,   0,   0,   0, 172,   1, 
       0,   0,   0,   0,   0,   0, 
     188,   1,   0,   0,  64,   0, 
       0,   0,  64,   0,   0,   0, 
       2,   0,   0,   0, 204,   1, 
@@ -10049,147 +12389,879 @@ const BYTE g_main[] =
       0,   0,   1,   0,   0,   0, 
       8,   0,   0,   0,  32,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   3,   0, 
       0,   0,   0,   0,   0,   0, 
       3,   3,   0,   0,  80,  79, 
      83,  73,  84,  73,  79,  78, 
       0, 171, 171, 171,  79,  83, 
-     71,  78,  80,   0,   0,   0, 
-      2,   0,   0,   0,   8,   0, 
-      0,   0,  56,   0,   0,   0, 
+     71,  78, 104,   0,   0,   0, 
+      3,   0,   0,   0,   8,   0, 
+      0,   0,  80,   0,   0,   0, 
       0,   0,   0,   0,   1,   0, 
       0,   0,   3,   0,   0,   0, 
       0,   0,   0,   0,  15,   0, 
-      0,   0,  68,   0,   0,   0, 
+      0,   0,  92,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   3,   0,   0,   0, 
       1,   0,   0,   0,   3,  12, 
+      0,   0,  92,   0,   0,   0, 
+      1,   0,   0,   0,   0,   0, 
+      0,   0,   3,   0,   0,   0, 
+      1,   0,   0,   0,  12,   3, 
       0,   0,  83,  86,  95,  80, 
     111, 115, 105, 116, 105, 111, 
     110,   0,  84,  69,  88,  67, 
      79,  79,  82,  68,   0, 171, 
-    171, 171,  46, 118,   0,   0, 
-      0,   0,   0,   0,   1,   0, 
-      0,   0,   2,   0,   0,   0, 
-      0,   0,   0,   0, 140,   2, 
+    171, 171, 200, 167,   0,   0, 
+      0,   0,   0,   0,   1,   0, 
+      0,   0,   2,   0,   0,   0, 
+      0,   0,   0,   0,  40,   5, 
       0,   0,  68,  88,  66,  67, 
-    120, 218, 197, 160,  79, 160, 
-    235,  82, 197,  10, 155, 183, 
-     41, 226,  48, 248,   1,   0, 
-      0,   0, 140,   2,   0,   0, 
+     97,  73, 247, 126,   8, 101, 
+    119, 242, 175, 221, 216, 116, 
+      1, 172, 160, 250,   1,   0, 
+      0,   0,  40,   5,   0,   0, 
       6,   0,   0,   0,  56,   0, 
-      0,   0, 168,   0,   0,   0, 
-     20,   1,   0,   0, 144,   1, 
-      0,   0, 232,   1,   0,   0, 
-     64,   2,   0,   0,  65, 111, 
-    110,  57, 104,   0,   0,   0, 
-    104,   0,   0,   0,   0,   2, 
-    255, 255,  68,   0,   0,   0, 
-     36,   0,   0,   0,   0,   0, 
-     36,   0,   0,   0,  36,   0, 
-      0,   0,  36,   0,   0,   0, 
-     36,   0,   0,   0,  36,   0, 
-      1,   2, 255, 255,  81,   0, 
-      0,   5,   0,   0,  15, 160, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0, 128,  63,   1,   0, 
+      0,   0, 252,   0,   0,   0, 
+    252,   1,   0,   0, 120,   2, 
+      0,   0, 132,   4,   0,   0, 
+    244,   4,   0,   0,  65, 111, 
+    110,  57, 188,   0,   0,   0, 
+    188,   0,   0,   0,   0,   2, 
+    255, 255, 132,   0,   0,   0, 
+     56,   0,   0,   0,   1,   0, 
+     44,   0,   0,   0,  56,   0, 
+      0,   0,  56,   0,   2,   0, 
+     36,   0,   0,   0,  56,   0, 
+      0,   0,   0,   0,   1,   0, 
+      1,   0,   0,   0,   3,   0, 
+      1,   0,   0,   0,   0,   0, 
+      0,   0,   1,   2, 255, 255, 
+     31,   0,   0,   2,   0,   0, 
+      0, 128,   0,   0,  15, 176, 
+     31,   0,   0,   2,   0,   0, 
+      0, 144,   0,   8,  15, 160, 
+     31,   0,   0,   2,   0,   0, 
+      0, 144,   1,   8,  15, 160, 
+      1,   0,   0,   2,   0,   0, 
+      3, 128,   0,   0, 235, 176, 
+     66,   0,   0,   3,   1,   0, 
+     15, 128,   0,   0, 228, 176, 
+      0,   8, 228, 160,  66,   0, 
+      0,   3,   0,   0,  15, 128, 
+      0,   0, 228, 128,   1,   8, 
+    228, 160,   5,   0,   0,   3, 
+      1,   0,  15, 128,   1,   0, 
+    228, 128,   0,   0,   0, 160, 
+      5,   0,   0,   3,   0,   0, 
+     15, 128,   0,   0, 255, 128, 
+      1,   0, 228, 128,   1,   0, 
       0,   2,   0,   8,  15, 128, 
-      0,   0, 228, 160,   1,   0, 
-      0,   2,   0,   0,  15, 128, 
-      0,   0, 255, 160,   1,   0, 
-      0,   2,   1,   8,  15, 128, 
       0,   0, 228, 128, 255, 255, 
       0,   0,  83,  72,  68,  82, 
-    100,   0,   0,   0,  64,   0, 
-      0,   0,  25,   0,   0,   0, 
-    101,   0,   0,   3, 242,  32, 
-     16,   0,   0,   0,   0,   0, 
+    248,   0,   0,   0,  64,   0, 
+      0,   0,  62,   0,   0,   0, 
+     89,   0,   0,   4,  70, 142, 
+     32,   0,   0,   0,   0,   0, 
+      4,   0,   0,   0,  90,   0, 
+      0,   3,   0,  96,  16,   0, 
+      0,   0,   0,   0,  88,  24, 
+      0,   4,   0, 112,  16,   0, 
+      0,   0,   0,   0,  85,  85, 
+      0,   0,  88,  24,   0,   4, 
+      0, 112,  16,   0,   1,   0, 
+      0,   0,  85,  85,   0,   0, 
+     98,  16,   0,   3,  50,  16, 
+     16,   0,   1,   0,   0,   0, 
+     98,  16,   0,   3, 194,  16, 
+     16,   0,   1,   0,   0,   0, 
     101,   0,   0,   3, 242,  32, 
-     16,   0,   1,   0,   0,   0, 
-     54,   0,   0,   8, 242,  32, 
-     16,   0,   0,   0,   0,   0, 
-      2,  64,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-    128,  63,  54,   0,   0,   8, 
-    242,  32,  16,   0,   1,   0, 
-      0,   0,   2,  64,   0,   0, 
-      0,   0, 128,  63,   0,   0, 
-    128,  63,   0,   0, 128,  63, 
-      0,   0, 128,  63,  62,   0, 
-      0,   1,  83,  84,  65,  84, 
-    116,   0,   0,   0,   3,   0, 
+     16,   0,   0,   0,   0,   0, 
+    104,   0,   0,   2,   2,   0, 
+      0,   0,  69,   0,   0,   9, 
+    242,   0,  16,   0,   0,   0, 
+      0,   0,  70,  16,  16,   0, 
+      1,   0,   0,   0,  70, 126, 
+     16,   0,   0,   0,   0,   0, 
+      0,  96,  16,   0,   0,   0, 
+      0,   0,  56,   0,   0,   8, 
+    242,   0,  16,   0,   0,   0, 
+      0,   0,  70,  14,  16,   0, 
+      0,   0,   0,   0,   6, 128, 
+     32,   0,   0,   0,   0,   0, 
+      3,   0,   0,   0,  69,   0, 
+      0,   9, 242,   0,  16,   0, 
+      1,   0,   0,   0, 230,  26, 
+     16,   0,   1,   0,   0,   0, 
+     70, 126,  16,   0,   1,   0, 
+      0,   0,   0,  96,  16,   0, 
+      0,   0,   0,   0,  56,   0, 
+      0,   7, 242,  32,  16,   0, 
+      0,   0,   0,   0,  70,  14, 
+     16,   0,   0,   0,   0,   0, 
+    246,  15,  16,   0,   1,   0, 
+      0,   0,  62,   0,   0,   1, 
+     83,  84,  65,  84, 116,   0, 
+      0,   0,   5,   0,   0,   0, 
+      2,   0,   0,   0,   0,   0, 
+      0,   0,   3,   0,   0,   0, 
+      2,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      1,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   2,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   1,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   2,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-     82,  68,  69,  70,  80,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,  28,   0,   0,   0, 
-      0,   4, 255, 255,   0,   1, 
-      0,   0,  28,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,  82,  68, 
+     69,  70,   4,   2,   0,   0, 
+      1,   0,   0,   0, 204,   0, 
+      0,   0,   4,   0,   0,   0, 
+     28,   0,   0,   0,   0,   4, 
+    255, 255,   0,   1,   0,   0, 
+    208,   1,   0,   0, 156,   0, 
+      0,   0,   3,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   1,   0, 
+      0,   0,   0,   0,   0,   0, 
+    182,   0,   0,   0,   2,   0, 
+      0,   0,   5,   0,   0,   0, 
+      4,   0,   0,   0, 255, 255, 
+    255, 255,   0,   0,   0,   0, 
+      1,   0,   0,   0,  12,   0, 
+      0,   0, 187,   0,   0,   0, 
+      2,   0,   0,   0,   5,   0, 
+      0,   0,   4,   0,   0,   0, 
+    255, 255, 255, 255,   1,   0, 
+      0,   0,   1,   0,   0,   0, 
+     12,   0,   0,   0, 193,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   1,   0, 
+      0,   0,   0,   0,   0,   0, 
+     76,  97, 121, 101, 114,  84, 
+    101, 120, 116, 117, 114, 101, 
+     83,  97, 109, 112, 108, 101, 
+    114,  76, 105, 110, 101,  97, 
+    114,   0, 116,  82,  71,  66, 
+      0, 116,  77,  97, 115, 107, 
+      0,  80, 101, 114,  76,  97, 
+    121, 101, 114,   0, 171, 171, 
+    193,   0,   0,   0,   5,   0, 
+      0,   0, 228,   0,   0,   0, 
+    128,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+     92,   1,   0,   0,   0,   0, 
+      0,   0,  16,   0,   0,   0, 
+      0,   0,   0,   0, 108,   1, 
+      0,   0,   0,   0,   0,   0, 
+    124,   1,   0,   0,  16,   0, 
+      0,   0,  16,   0,   0,   0, 
+      0,   0,   0,   0, 108,   1, 
+      0,   0,   0,   0,   0,   0, 
+    135,   1,   0,   0,  32,   0, 
+      0,   0,  16,   0,   0,   0, 
+      0,   0,   0,   0, 108,   1, 
+      0,   0,   0,   0,   0,   0, 
+    145,   1,   0,   0,  48,   0, 
+      0,   0,   4,   0,   0,   0, 
+      2,   0,   0,   0, 160,   1, 
+      0,   0,   0,   0,   0,   0, 
+    176,   1,   0,   0,  64,   0, 
+      0,   0,  64,   0,   0,   0, 
+      0,   0,   0,   0, 192,   1, 
+      0,   0,   0,   0,   0,   0, 
+    118,  84, 101, 120, 116, 117, 
+    114, 101,  67, 111, 111, 114, 
+    100, 115,   0, 171,   1,   0, 
+      3,   0,   1,   0,   4,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0, 118,  76,  97, 121, 
+    101, 114,  81, 117,  97, 100, 
+      0, 118,  77,  97, 115, 107, 
+     81, 117,  97, 100,   0, 102, 
+     76,  97, 121, 101, 114,  79, 
+    112,  97,  99, 105, 116, 121, 
+      0, 171,   0,   0,   3,   0, 
+      1,   0,   1,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+    109,  76,  97, 121, 101, 114, 
+     84, 114,  97, 110, 115, 102, 
+    111, 114, 109,   0,   3,   0, 
+      3,   0,   4,   0,   4,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,  77, 105,  99, 114, 
+    111, 115, 111, 102, 116,  32, 
+     40,  82,  41,  32,  72,  76, 
+     83,  76,  32,  83, 104,  97, 
+    100, 101, 114,  32,  67, 111, 
+    109, 112, 105, 108, 101, 114, 
+     32,  57,  46,  50,  57,  46, 
+     57,  53,  50,  46,  51,  49, 
+     49,  49,   0, 171, 171, 171, 
+     73,  83,  71,  78, 104,   0, 
+      0,   0,   3,   0,   0,   0, 
+      8,   0,   0,   0,  80,   0, 
+      0,   0,   0,   0,   0,   0, 
+      1,   0,   0,   0,   3,   0, 
+      0,   0,   0,   0,   0,   0, 
+     15,   0,   0,   0,  92,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   3,   0, 
+      0,   0,   1,   0,   0,   0, 
+      3,   3,   0,   0,  92,   0, 
+      0,   0,   1,   0,   0,   0, 
+      0,   0,   0,   0,   3,   0, 
+      0,   0,   1,   0,   0,   0, 
+     12,  12,   0,   0,  83,  86, 
+     95,  80, 111, 115, 105, 116, 
+    105, 111, 110,   0,  84,  69, 
+     88,  67,  79,  79,  82,  68, 
+      0, 171, 171, 171,  79,  83, 
+     71,  78,  44,   0,   0,   0, 
+      1,   0,   0,   0,   8,   0, 
+      0,   0,  32,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   3,   0,   0,   0, 
+      0,   0,   0,   0,  15,   0, 
+      0,   0,  83,  86,  95,  84, 
+     97, 114, 103, 101, 116,   0, 
+    171, 171,  44, 176,   0,   0, 
+      0,   0,   0,   0,  82, 101, 
+    110, 100, 101, 114,  82,  71, 
+     66,  65,  76,  97, 121, 101, 
+    114,  80, 114, 101, 109, 117, 
+    108,  77,  97, 115, 107,  51, 
+     68,   0,   4,   0,   0,   0, 
+      1,   0,   0,   0,   0,   0, 
+      0,   0,   1,   0,   0,   0, 
+      0,   0,   0,   0,   1,   0, 
+      0,   0,   0,   0,   0,   0, 
+      1,   0,   0,   0,   0,   0, 
+      0,   0,   1,   0,   0,   0, 
+      3,   0,   0,   0, 255, 255, 
+    255, 255, 160,   8,   0,   0, 
+     68,  88,  66,  67, 126, 127, 
+     73, 177, 123,  87,  14,  42, 
+    122, 131,  65, 136, 212,  65, 
+    198, 133,   1,   0,   0,   0, 
+    160,   8,   0,   0,   6,   0, 
+      0,   0,  56,   0,   0,   0, 
+     60,   2,   0,   0, 228,   4, 
+      0,   0,  96,   5,   0,   0, 
+    252,   7,   0,   0,  48,   8, 
+      0,   0,  65, 111, 110,  57, 
+    252,   1,   0,   0, 252,   1, 
+      0,   0,   0,   2, 254, 255, 
+    152,   1,   0,   0, 100,   0, 
+      0,   0,   5,   0,  36,   0, 
+      0,   0,  96,   0,   0,   0, 
+     96,   0,   0,   0,  36,   0, 
+      1,   0,  96,   0,   0,   0, 
+      0,   0,   3,   0,   1,   0, 
+      0,   0,   0,   0,   0,   0, 
+      4,   0,   2,   0,   4,   0, 
+      0,   0,   0,   0,   0,   0, 
+      7,   0,   1,   0,   6,   0, 
+      0,   0,   0,   0,   1,   0, 
+      0,   0,   1,   0,   7,   0, 
+      0,   0,   0,   0,   2,   0, 
+      0,   0,   4,   0,   8,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   1,   2, 254, 255, 
+     81,   0,   0,   5,  12,   0, 
+     15, 160,   0,   0, 128,  63, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+     31,   0,   0,   2,   5,   0, 
+      0, 128,   0,   0,  15, 144, 
+      1,   0,   0,   2,   0,   0, 
+      4, 128,  12,   0,   0, 160, 
+      6,   0,   0,   2,   0,   0, 
+      8, 128,   3,   0, 170, 160, 
+      4,   0,   0,   4,   1,   0, 
+      3, 128,   0,   0, 228, 144, 
+      2,   0, 238, 160,   2,   0, 
+    228, 160,   5,   0,   0,   3, 
+      2,   0,  15, 128,   1,   0, 
+     85, 128,   5,   0, 228, 160, 
+      4,   0,   0,   4,   1,   0, 
+     15, 128,   4,   0, 228, 160, 
+      1,   0,   0, 128,   2,   0, 
+    228, 128,   2,   0,   0,   3, 
+      1,   0,  15, 128,   1,   0, 
+    228, 128,   6,   0, 228, 160, 
+      6,   0,   0,   2,   2,   0, 
+      1, 128,   1,   0, 255, 128, 
+      4,   0,   0,   4,   2,   0, 
+      6, 128,   1,   0, 208, 128, 
+      2,   0,   0, 128,   3,   0, 
+    208, 161,   5,   0,   0,   3, 
+      1,   0,   7, 128,   1,   0, 
+    228, 128,   2,   0,   0, 128, 
+      5,   0,   0,   3,   0,   0, 
+      1, 128,   0,   0, 255, 128, 
+      2,   0,  85, 128,   6,   0, 
+      0,   2,   0,   0,   8, 128, 
+      3,   0, 255, 160,   5,   0, 
+      0,   3,   0,   0,   2, 128, 
+      0,   0, 255, 128,   2,   0, 
+    170, 128,   5,   0,   0,   3, 
+      1,   0,   7, 224,   0,   0, 
+    228, 128,   1,   0, 255, 128, 
+      2,   0,   0,   3,   0,   0, 
+     15, 128,   1,   0, 228, 128, 
+      7,   0, 228, 161,   4,   0, 
+      0,   4,   0,   0,   3, 224, 
+      0,   0, 228, 144,   1,   0, 
+    238, 160,   1,   0, 228, 160, 
+      5,   0,   0,   3,   0,   0, 
+      7, 128,   0,   0, 255, 128, 
+      0,   0, 228, 128,   5,   0, 
+      0,   3,   1,   0,  15, 128, 
+      0,   0,  85, 128,   9,   0, 
+    228, 160,   4,   0,   0,   4, 
+      1,   0,  15, 128,   8,   0, 
+    228, 160,   0,   0,   0, 128, 
+      1,   0, 228, 128,   4,   0, 
+      0,   4,   1,   0,  15, 128, 
+     10,   0, 228, 160,   0,   0, 
+    170, 128,   1,   0, 228, 128, 
+      4,   0,   0,   4,   0,   0, 
+     15, 128,  11,   0, 228, 160, 
+      0,   0, 255, 128,   1,   0, 
+    228, 128,   4,   0,   0,   4, 
+      0,   0,   3, 192,   0,   0, 
+    255, 128,   0,   0, 228, 160, 
+      0,   0, 228, 128,   1,   0, 
+      0,   2,   0,   0,  12, 192, 
+      0,   0, 228, 128, 255, 255, 
+      0,   0,  83,  72,  68,  82, 
+    160,   2,   0,   0,  64,   0, 
+      1,   0, 168,   0,   0,   0, 
+     89,   0,   0,   4,  70, 142, 
+     32,   0,   0,   0,   0,   0, 
+      8,   0,   0,   0,  89,   0, 
+      0,   4,  70, 142,  32,   0, 
+      1,   0,   0,   0,   1,   0, 
+      0,   0,  89,   0,   0,   4, 
+     70, 142,  32,   0,   2,   0, 
+      0,   0,   4,   0,   0,   0, 
+     95,   0,   0,   3,  50,  16, 
+     16,   0,   0,   0,   0,   0, 
+    103,   0,   0,   4, 242,  32, 
+     16,   0,   0,   0,   0,   0, 
+      1,   0,   0,   0, 101,   0, 
+      0,   3,  50,  32,  16,   0, 
+      1,   0,   0,   0, 101,   0, 
+      0,   3, 114,  32,  16,   0, 
+      2,   0,   0,   0, 104,   0, 
+      0,   2,   3,   0,   0,   0, 
+     50,   0,   0,  11,  50,   0, 
+     16,   0,   0,   0,   0,   0, 
+     70,  16,  16,   0,   0,   0, 
+      0,   0, 230, 138,  32,   0, 
+      0,   0,   0,   0,   1,   0, 
+      0,   0,  70, 128,  32,   0, 
+      0,   0,   0,   0,   1,   0, 
+      0,   0,  56,   0,   0,   8, 
+    242,   0,  16,   0,   1,   0, 
+      0,   0,  86,   5,  16,   0, 
+      0,   0,   0,   0,  70, 142, 
+     32,   0,   0,   0,   0,   0, 
+      5,   0,   0,   0,  50,   0, 
+      0,  10, 242,   0,  16,   0, 
+      0,   0,   0,   0,  70, 142, 
+     32,   0,   0,   0,   0,   0, 
+      4,   0,   0,   0,   6,   0, 
+     16,   0,   0,   0,   0,   0, 
+     70,  14,  16,   0,   1,   0, 
+      0,   0,   0,   0,   0,   8, 
+    242,   0,  16,   0,   0,   0, 
+      0,   0,  70,  14,  16,   0, 
+      0,   0,   0,   0,  70, 142, 
+     32,   0,   0,   0,   0,   0, 
+      7,   0,   0,   0,  14,   0, 
+      0,   7, 114,   0,  16,   0, 
+      0,   0,   0,   0,  70,   2, 
+     16,   0,   0,   0,   0,   0, 
+    246,  15,  16,   0,   0,   0, 
+      0,   0,   0,   0,   0,   9, 
+    242,   0,  16,   0,   1,   0, 
+      0,   0,  70,  14,  16,   0, 
+      0,   0,   0,   0,  70, 142, 
+     32, 128,  65,   0,   0,   0, 
+      1,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   9, 
+     50,   0,  16,   0,   0,   0, 
+      0,   0,  70,   0,  16,   0, 
+      0,   0,   0,   0,  70, 128, 
+     32, 128,  65,   0,   0,   0, 
+      0,   0,   0,   0,   2,   0, 
+      0,   0,  14,   0,   0,   8, 
+     50,   0,  16,   0,   0,   0, 
+      0,   0,  70,   0,  16,   0, 
+      0,   0,   0,   0, 230, 138, 
+     32,   0,   0,   0,   0,   0, 
+      2,   0,   0,   0,  56,   0, 
+      0,   7, 114,   0,  16,   0, 
+      1,   0,   0,   0, 246,  15, 
+     16,   0,   1,   0,   0,   0, 
+     70,   2,  16,   0,   1,   0, 
+      0,   0,  56,   0,   0,   8, 
+    242,   0,  16,   0,   2,   0, 
+      0,   0,  86,   5,  16,   0, 
+      1,   0,   0,   0,  70, 142, 
+     32,   0,   2,   0,   0,   0, 
+      1,   0,   0,   0,  50,   0, 
+      0,  10, 242,   0,  16,   0, 
+      2,   0,   0,   0,  70, 142, 
+     32,   0,   2,   0,   0,   0, 
+      0,   0,   0,   0,   6,   0, 
+     16,   0,   1,   0,   0,   0, 
+     70,  14,  16,   0,   2,   0, 
+      0,   0,  50,   0,   0,  10, 
+    242,   0,  16,   0,   2,   0, 
+      0,   0,  70, 142,  32,   0, 
+      2,   0,   0,   0,   2,   0, 
+      0,   0, 166,  10,  16,   0, 
+      1,   0,   0,   0,  70,  14, 
+     16,   0,   2,   0,   0,   0, 
+     50,   0,   0,  10, 242,  32, 
+     16,   0,   0,   0,   0,   0, 
+     70, 142,  32,   0,   2,   0, 
+      0,   0,   3,   0,   0,   0, 
+    246,  15,  16,   0,   1,   0, 
+      0,   0,  70,  14,  16,   0, 
+      2,   0,   0,   0,  50,   0, 
+      0,  11,  50,  32,  16,   0, 
+      1,   0,   0,   0,  70,  16, 
+     16,   0,   0,   0,   0,   0, 
+    230, 138,  32,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+     70, 128,  32,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+     54,   0,   0,   5,  66,   0, 
+     16,   0,   0,   0,   0,   0, 
+      1,  64,   0,   0,   0,   0, 
+    128,  63,  56,   0,   0,   7, 
+    114,  32,  16,   0,   2,   0, 
+      0,   0, 246,  15,  16,   0, 
+      0,   0,   0,   0,  70,   2, 
+     16,   0,   0,   0,   0,   0, 
+     62,   0,   0,   1,  83,  84, 
+     65,  84, 116,   0,   0,   0, 
+     17,   0,   0,   0,   3,   0, 
+      0,   0,   0,   0,   0,   0, 
+      4,   0,   0,   0,   9,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   1,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   2,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,  82,  68,  69,  70, 
+    148,   2,   0,   0,   3,   0, 
+      0,   0, 168,   0,   0,   0, 
+      3,   0,   0,   0,  28,   0, 
+      0,   0,   0,   4, 254, 255, 
+      0,   1,   0,   0,  96,   2, 
+      0,   0, 124,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   1,   0,   0,   0, 
+      0,   0,   0,   0, 133,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      1,   0,   0,   0,   1,   0, 
+      0,   0,   0,   0,   0,   0, 
+    152,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   2,   0,   0,   0, 
+      1,   0,   0,   0,   0,   0, 
+      0,   0,  80, 101, 114,  76, 
+     97, 121, 101, 114,   0,  80, 
+    101, 114,  79,  99,  99,  97, 
+    115, 105, 111, 110,  97, 108, 
+     76,  97, 121, 101, 114,   0, 
+     80, 101, 114,  76,  97, 121, 
+    101, 114,  77,  97, 110,  97, 
+    103, 101, 114,   0, 124,   0, 
+      0,   0,   5,   0,   0,   0, 
+    240,   0,   0,   0, 128,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0, 133,   0, 
+      0,   0,   2,   0,   0,   0, 
+    220,   1,   0,   0,  32,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0, 152,   0, 
+      0,   0,   1,   0,   0,   0, 
+     60,   2,   0,   0,  64,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0, 104,   1, 
+      0,   0,   0,   0,   0,   0, 
+     16,   0,   0,   0,   2,   0, 
+      0,   0, 120,   1,   0,   0, 
+      0,   0,   0,   0, 136,   1, 
+      0,   0,  16,   0,   0,   0, 
+     16,   0,   0,   0,   2,   0, 
+      0,   0, 120,   1,   0,   0, 
+      0,   0,   0,   0, 147,   1, 
+      0,   0,  32,   0,   0,   0, 
+     16,   0,   0,   0,   2,   0, 
+      0,   0, 120,   1,   0,   0, 
+      0,   0,   0,   0, 157,   1, 
+      0,   0,  48,   0,   0,   0, 
+      4,   0,   0,   0,   0,   0, 
+      0,   0, 172,   1,   0,   0, 
+      0,   0,   0,   0, 188,   1, 
+      0,   0,  64,   0,   0,   0, 
+     64,   0,   0,   0,   2,   0, 
+      0,   0, 204,   1,   0,   0, 
+      0,   0,   0,   0, 118,  84, 
+    101, 120, 116, 117, 114, 101, 
+     67, 111, 111, 114, 100, 115, 
+      0, 171,   1,   0,   3,   0, 
+      1,   0,   4,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+    118,  76,  97, 121, 101, 114, 
+     81, 117,  97, 100,   0, 118, 
+     77,  97, 115, 107,  81, 117, 
+     97, 100,   0, 102,  76,  97, 
+    121, 101, 114,  79, 112,  97, 
+     99, 105, 116, 121,   0, 171, 
+      0,   0,   3,   0,   1,   0, 
+      1,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0, 109,  76, 
+     97, 121, 101, 114,  84, 114, 
+     97, 110, 115, 102, 111, 114, 
+    109,   0,   3,   0,   3,   0, 
+      4,   0,   4,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+     12,   2,   0,   0,   0,   0, 
+      0,   0,  16,   0,   0,   0, 
+      2,   0,   0,   0,  32,   2, 
+      0,   0,   0,   0,   0,   0, 
+     48,   2,   0,   0,  16,   0, 
+      0,   0,  16,   0,   0,   0, 
+      0,   0,   0,   0,  32,   2, 
+      0,   0,   0,   0,   0,   0, 
+    118,  82, 101, 110, 100, 101, 
+    114,  84,  97, 114, 103, 101, 
+    116,  79, 102, 102, 115, 101, 
+    116,   0,   1,   0,   3,   0, 
+      1,   0,   4,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+    102,  76,  97, 121, 101, 114, 
+     67, 111, 108, 111, 114,   0, 
+     84,   2,   0,   0,   0,   0, 
+      0,   0,  64,   0,   0,   0, 
+      2,   0,   0,   0, 204,   1, 
+      0,   0,   0,   0,   0,   0, 
+    109,  80, 114, 111, 106, 101, 
+     99, 116, 105, 111, 110,   0, 
      77, 105,  99, 114, 111, 115, 
     111, 102, 116,  32,  40,  82, 
      41,  32,  72,  76,  83,  76, 
      32,  83, 104,  97, 100, 101, 
     114,  32,  67, 111, 109, 112, 
     105, 108, 101, 114,  32,  57, 
      46,  50,  57,  46,  57,  53, 
      50,  46,  51,  49,  49,  49, 
       0, 171, 171, 171,  73,  83, 
-     71,  78,  80,   0,   0,   0, 
-      2,   0,   0,   0,   8,   0, 
+     71,  78,  44,   0,   0,   0, 
+      1,   0,   0,   0,   8,   0, 
+      0,   0,  32,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   3,   0,   0,   0, 
+      0,   0,   0,   0,   3,   3, 
+      0,   0,  80,  79,  83,  73, 
+     84,  73,  79,  78,   0, 171, 
+    171, 171,  79,  83,  71,  78, 
+    104,   0,   0,   0,   3,   0, 
+      0,   0,   8,   0,   0,   0, 
+     80,   0,   0,   0,   0,   0, 
+      0,   0,   1,   0,   0,   0, 
+      3,   0,   0,   0,   0,   0, 
+      0,   0,  15,   0,   0,   0, 
+     92,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      3,   0,   0,   0,   1,   0, 
+      0,   0,   3,  12,   0,   0, 
+     92,   0,   0,   0,   1,   0, 
+      0,   0,   0,   0,   0,   0, 
+      3,   0,   0,   0,   2,   0, 
+      0,   0,   7,   8,   0,   0, 
+     83,  86,  95,  80, 111, 115, 
+    105, 116, 105, 111, 110,   0, 
+     84,  69,  88,  67,  79,  79, 
+     82,  68,   0, 171, 171, 171, 
+    172, 181,   0,   0,   0,   0, 
+      0,   0,   1,   0,   0,   0, 
+      2,   0,   0,   0,   0,   0, 
+      0,   0,  96,   5,   0,   0, 
+     68,  88,  66,  67, 202, 125, 
+     64,  99,  21,  11, 196, 180, 
+      9, 103, 153, 137,  12,  26, 
+    194,  80,   1,   0,   0,   0, 
+     96,   5,   0,   0,   6,   0, 
+      0,   0,  56,   0,   0,   0, 
+     24,   1,   0,   0,  52,   2, 
+      0,   0, 176,   2,   0,   0, 
+    188,   4,   0,   0,  44,   5, 
+      0,   0,  65, 111, 110,  57, 
+    216,   0,   0,   0, 216,   0, 
+      0,   0,   0,   2, 255, 255, 
+    160,   0,   0,   0,  56,   0, 
+      0,   0,   1,   0,  44,   0, 
+      0,   0,  56,   0,   0,   0, 
+     56,   0,   2,   0,  36,   0, 
       0,   0,  56,   0,   0,   0, 
-      0,   0,   0,   0,   1,   0, 
+      0,   0,   1,   0,   1,   0, 
+      0,   0,   3,   0,   1,   0, 
+      0,   0,   0,   0,   0,   0, 
+      1,   2, 255, 255,  31,   0, 
+      0,   2,   0,   0,   0, 128, 
+      0,   0,   3, 176,  31,   0, 
+      0,   2,   0,   0,   0, 128, 
+      1,   0,   7, 176,  31,   0, 
+      0,   2,   0,   0,   0, 144, 
+      0,   8,  15, 160,  31,   0, 
+      0,   2,   0,   0,   0, 144, 
+      1,   8,  15, 160,   6,   0, 
+      0,   2,   0,   0,   8, 128, 
+      1,   0, 170, 176,   5,   0, 
+      0,   3,   0,   0,   3, 128, 
+      0,   0, 255, 128,   1,   0, 
+    228, 176,  66,   0,   0,   3, 
+      1,   0,  15, 128,   0,   0, 
+    228, 176,   0,   8, 228, 160, 
+     66,   0,   0,   3,   0,   0, 
+     15, 128,   0,   0, 228, 128, 
+      1,   8, 228, 160,   5,   0, 
+      0,   3,   1,   0,  15, 128, 
+      1,   0, 228, 128,   0,   0, 
+      0, 160,   5,   0,   0,   3, 
+      0,   0,  15, 128,   0,   0, 
+    255, 128,   1,   0, 228, 128, 
+      1,   0,   0,   2,   0,   8, 
+     15, 128,   0,   0, 228, 128, 
+    255, 255,   0,   0,  83,  72, 
+     68,  82,  20,   1,   0,   0, 
+     64,   0,   0,   0,  69,   0, 
+      0,   0,  89,   0,   0,   4, 
+     70, 142,  32,   0,   0,   0, 
+      0,   0,   4,   0,   0,   0, 
+     90,   0,   0,   3,   0,  96, 
+     16,   0,   0,   0,   0,   0, 
+     88,  24,   0,   4,   0, 112, 
+     16,   0,   0,   0,   0,   0, 
+     85,  85,   0,   0,  88,  24, 
+      0,   4,   0, 112,  16,   0, 
+      1,   0,   0,   0,  85,  85, 
+      0,   0,  98,  16,   0,   3, 
+     50,  16,  16,   0,   1,   0, 
+      0,   0,  98,  16,   0,   3, 
+    114,  16,  16,   0,   2,   0, 
+      0,   0, 101,   0,   0,   3, 
+    242,  32,  16,   0,   0,   0, 
+      0,   0, 104,   0,   0,   2, 
+      2,   0,   0,   0,  14,   0, 
+      0,   7,  50,   0,  16,   0, 
+      0,   0,   0,   0,  70,  16, 
+     16,   0,   2,   0,   0,   0, 
+    166,  26,  16,   0,   2,   0, 
+      0,   0,  69,   0,   0,   9, 
+    242,   0,  16,   0,   0,   0, 
+      0,   0,  70,   0,  16,   0, 
+      0,   0,   0,   0,  70, 126, 
+     16,   0,   1,   0,   0,   0, 
+      0,  96,  16,   0,   0,   0, 
+      0,   0,  69,   0,   0,   9, 
+    242,   0,  16,   0,   1,   0, 
+      0,   0,  70,  16,  16,   0, 
+      1,   0,   0,   0,  70, 126, 
+     16,   0,   0,   0,   0,   0, 
+      0,  96,  16,   0,   0,   0, 
+      0,   0,  56,   0,   0,   8, 
+    242,   0,  16,   0,   1,   0, 
+      0,   0,  70,  14,  16,   0, 
+      1,   0,   0,   0,   6, 128, 
+     32,   0,   0,   0,   0,   0, 
+      3,   0,   0,   0,  56,   0, 
+      0,   7, 242,  32,  16,   0, 
+      0,   0,   0,   0, 246,  15, 
+     16,   0,   0,   0,   0,   0, 
+     70,  14,  16,   0,   1,   0, 
+      0,   0,  62,   0,   0,   1, 
+     83,  84,  65,  84, 116,   0, 
+      0,   0,   6,   0,   0,   0, 
+      2,   0,   0,   0,   0,   0, 
+      0,   0,   3,   0,   0,   0, 
+      3,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      1,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   2,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,  82,  68, 
+     69,  70,   4,   2,   0,   0, 
+      1,   0,   0,   0, 204,   0, 
+      0,   0,   4,   0,   0,   0, 
+     28,   0,   0,   0,   0,   4, 
+    255, 255,   0,   1,   0,   0, 
+    208,   1,   0,   0, 156,   0, 
+      0,   0,   3,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   1,   0, 
+      0,   0,   0,   0,   0,   0, 
+    182,   0,   0,   0,   2,   0, 
+      0,   0,   5,   0,   0,   0, 
+      4,   0,   0,   0, 255, 255, 
+    255, 255,   0,   0,   0,   0, 
+      1,   0,   0,   0,  12,   0, 
+      0,   0, 187,   0,   0,   0, 
+      2,   0,   0,   0,   5,   0, 
+      0,   0,   4,   0,   0,   0, 
+    255, 255, 255, 255,   1,   0, 
+      0,   0,   1,   0,   0,   0, 
+     12,   0,   0,   0, 193,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   1,   0, 
+      0,   0,   0,   0,   0,   0, 
+     76,  97, 121, 101, 114,  84, 
+    101, 120, 116, 117, 114, 101, 
+     83,  97, 109, 112, 108, 101, 
+    114,  76, 105, 110, 101,  97, 
+    114,   0, 116,  82,  71,  66, 
+      0, 116,  77,  97, 115, 107, 
+      0,  80, 101, 114,  76,  97, 
+    121, 101, 114,   0, 171, 171, 
+    193,   0,   0,   0,   5,   0, 
+      0,   0, 228,   0,   0,   0, 
+    128,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+     92,   1,   0,   0,   0,   0, 
+      0,   0,  16,   0,   0,   0, 
+      0,   0,   0,   0, 108,   1, 
+      0,   0,   0,   0,   0,   0, 
+    124,   1,   0,   0,  16,   0, 
+      0,   0,  16,   0,   0,   0, 
+      0,   0,   0,   0, 108,   1, 
+      0,   0,   0,   0,   0,   0, 
+    135,   1,   0,   0,  32,   0, 
+      0,   0,  16,   0,   0,   0, 
+      0,   0,   0,   0, 108,   1, 
+      0,   0,   0,   0,   0,   0, 
+    145,   1,   0,   0,  48,   0, 
+      0,   0,   4,   0,   0,   0, 
+      2,   0,   0,   0, 160,   1, 
+      0,   0,   0,   0,   0,   0, 
+    176,   1,   0,   0,  64,   0, 
+      0,   0,  64,   0,   0,   0, 
+      0,   0,   0,   0, 192,   1, 
+      0,   0,   0,   0,   0,   0, 
+    118,  84, 101, 120, 116, 117, 
+    114, 101,  67, 111, 111, 114, 
+    100, 115,   0, 171,   1,   0, 
+      3,   0,   1,   0,   4,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0, 118,  76,  97, 121, 
+    101, 114,  81, 117,  97, 100, 
+      0, 118,  77,  97, 115, 107, 
+     81, 117,  97, 100,   0, 102, 
+     76,  97, 121, 101, 114,  79, 
+    112,  97,  99, 105, 116, 121, 
+      0, 171,   0,   0,   3,   0, 
+      1,   0,   1,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+    109,  76,  97, 121, 101, 114, 
+     84, 114,  97, 110, 115, 102, 
+    111, 114, 109,   0,   3,   0, 
+      3,   0,   4,   0,   4,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,  77, 105,  99, 114, 
+    111, 115, 111, 102, 116,  32, 
+     40,  82,  41,  32,  72,  76, 
+     83,  76,  32,  83, 104,  97, 
+    100, 101, 114,  32,  67, 111, 
+    109, 112, 105, 108, 101, 114, 
+     32,  57,  46,  50,  57,  46, 
+     57,  53,  50,  46,  51,  49, 
+     49,  49,   0, 171, 171, 171, 
+     73,  83,  71,  78, 104,   0, 
+      0,   0,   3,   0,   0,   0, 
+      8,   0,   0,   0,  80,   0, 
+      0,   0,   0,   0,   0,   0, 
+      1,   0,   0,   0,   3,   0, 
+      0,   0,   0,   0,   0,   0, 
+     15,   0,   0,   0,  92,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   3,   0, 
+      0,   0,   1,   0,   0,   0, 
+      3,   3,   0,   0,  92,   0, 
+      0,   0,   1,   0,   0,   0, 
+      0,   0,   0,   0,   3,   0, 
+      0,   0,   2,   0,   0,   0, 
+      7,   7,   0,   0,  83,  86, 
+     95,  80, 111, 115, 105, 116, 
+    105, 111, 110,   0,  84,  69, 
+     88,  67,  79,  79,  82,  68, 
+      0, 171, 171, 171,  79,  83, 
+     71,  78,  44,   0,   0,   0, 
+      1,   0,   0,   0,   8,   0, 
+      0,   0,  32,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
       0,   0,   3,   0,   0,   0, 
       0,   0,   0,   0,  15,   0, 
-      0,   0,  68,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   3,   0,   0,   0, 
-      1,   0,   0,   0,   3,   0, 
-      0,   0,  83,  86,  95,  80, 
-    111, 115, 105, 116, 105, 111, 
-    110,   0,  84,  69,  88,  67, 
-     79,  79,  82,  68,   0, 171, 
-    171, 171,  79,  83,  71,  78, 
-     68,   0,   0,   0,   2,   0, 
-      0,   0,   8,   0,   0,   0, 
-     56,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      3,   0,   0,   0,   0,   0, 
-      0,   0,  15,   0,   0,   0, 
-     56,   0,   0,   0,   1,   0, 
-      0,   0,   0,   0,   0,   0, 
-      3,   0,   0,   0,   1,   0, 
-      0,   0,  15,   0,   0,   0, 
-     83,  86,  95,  84,  97, 114, 
-    103, 101, 116,   0, 171, 171, 
-    206, 125,   0,   0,   0,   0, 
-      0,   0,  82, 101, 110, 100, 
-    101, 114,  82,  71,  66,  76, 
-     97, 121, 101, 114,  80, 114, 
+      0,   0,  83,  86,  95,  84, 
+     97, 114, 103, 101, 116,   0, 
+    171, 171, 100, 190,   0,   0, 
+      0,   0,   0,   0,  82, 101, 
+    110, 100, 101, 114,  82,  71, 
+     66,  65,  76,  97, 121, 101, 
+    114,  78, 111, 110,  80, 114, 
     101, 109, 117, 108,  77,  97, 
     115, 107,   0,   4,   0,   0, 
       0,   1,   0,   0,   0,   0, 
       0,   0,   0,   1,   0,   0, 
       0,   0,   0,   0,   0,   1, 
       0,   0,   0,   0,   0,   0, 
       0,   1,   0,   0,   0,   0, 
       0,   0,   0,   1,   0,   0, 
@@ -10544,33 +13616,33 @@ const BYTE g_main[] =
       0,  92,   0,   0,   0,   1, 
       0,   0,   0,   0,   0,   0, 
       0,   3,   0,   0,   0,   1, 
       0,   0,   0,  12,   3,   0, 
       0,  83,  86,  95,  80, 111, 
     115, 105, 116, 105, 111, 110, 
       0,  84,  69,  88,  67,  79, 
      79,  82,  68,   0, 171, 171, 
-    171, 175, 128,   0,   0,   0, 
+    171,  29, 196,   0,   0,   0, 
       0,   0,   0,   1,   0,   0, 
       0,   2,   0,   0,   0,   0, 
-      0,   0,   0,  76,   5,   0, 
-      0,  68,  88,  66,  67,   2, 
-     86,  18,  89, 155, 147,  85, 
-     85, 212,  15,  31,   6,  43, 
-    118,  52,  47,   1,   0,   0, 
-      0,  76,   5,   0,   0,   6, 
+      0,   0,   0,  40,   5,   0, 
+      0,  68,  88,  66,  67,  97, 
+     73, 247, 126,   8, 101, 119, 
+    242, 175, 221, 216, 116,   1, 
+    172, 160, 250,   1,   0,   0, 
+      0,  40,   5,   0,   0,   6, 
       0,   0,   0,  56,   0,   0, 
-      0,   8,   1,   0,   0,  32, 
-      2,   0,   0, 156,   2,   0, 
-      0, 168,   4,   0,   0,  24, 
-      5,   0,   0,  65, 111, 110, 
-     57, 200,   0,   0,   0, 200, 
+      0, 252,   0,   0,   0, 252, 
+      1,   0,   0, 120,   2,   0, 
+      0, 132,   4,   0,   0, 244, 
+      4,   0,   0,  65, 111, 110, 
+     57, 188,   0,   0,   0, 188, 
       0,   0,   0,   0,   2, 255, 
-    255, 144,   0,   0,   0,  56, 
+    255, 132,   0,   0,   0,  56, 
       0,   0,   0,   1,   0,  44, 
       0,   0,   0,  56,   0,   0, 
       0,  56,   0,   2,   0,  36, 
       0,   0,   0,  56,   0,   0, 
       0,   0,   0,   1,   0,   1, 
       0,   0,   0,   3,   0,   1, 
       0,   0,   0,   0,   0,   0, 
       0,   1,   2, 255, 255,  31, 
@@ -10583,28 +13655,26 @@ const BYTE g_main[] =
       0,   0,   2,   0,   0,   3, 
     128,   0,   0, 235, 176,  66, 
       0,   0,   3,   1,   0,  15, 
     128,   0,   0, 228, 176,   0, 
       8, 228, 160,  66,   0,   0, 
       3,   0,   0,  15, 128,   0, 
       0, 228, 128,   1,   8, 228, 
     160,   5,   0,   0,   3,   1, 
-      0,   7, 128,   1,   0, 228, 
-    128,   0,   0,   0, 160,   1, 
-      0,   0,   2,   1,   0,   8, 
+      0,  15, 128,   1,   0, 228, 
     128,   0,   0,   0, 160,   5, 
       0,   0,   3,   0,   0,  15, 
     128,   0,   0, 255, 128,   1, 
       0, 228, 128,   1,   0,   0, 
       2,   0,   8,  15, 128,   0, 
       0, 228, 128, 255, 255,   0, 
-      0,  83,  72,  68,  82,  16, 
-      1,   0,   0,  64,   0,   0, 
-      0,  68,   0,   0,   0,  89, 
+      0,  83,  72,  68,  82, 248, 
+      0,   0,   0,  64,   0,   0, 
+      0,  62,   0,   0,   0,  89, 
       0,   0,   4,  70, 142,  32, 
       0,   0,   0,   0,   0,   4, 
       0,   0,   0,  90,   0,   0, 
       3,   0,  96,  16,   0,   0, 
       0,   0,   0,  88,  24,   0, 
       4,   0, 112,  16,   0,   0, 
       0,   0,   0,  85,  85,   0, 
       0,  88,  24,   0,   4,   0, 
@@ -10618,51 +13688,47 @@ const BYTE g_main[] =
       0,   0,   0,   0,   0, 104, 
       0,   0,   2,   2,   0,   0, 
       0,  69,   0,   0,   9, 242, 
       0,  16,   0,   0,   0,   0, 
       0,  70,  16,  16,   0,   1, 
       0,   0,   0,  70, 126,  16, 
       0,   0,   0,   0,   0,   0, 
      96,  16,   0,   0,   0,   0, 
-      0,  56,   0,   0,   8, 114, 
+      0,  56,   0,   0,   8, 242, 
       0,  16,   0,   0,   0,   0, 
-      0,  70,   2,  16,   0,   0, 
+      0,  70,  14,  16,   0,   0, 
       0,   0,   0,   6, 128,  32, 
       0,   0,   0,   0,   0,   3, 
       0,   0,   0,  69,   0,   0, 
       9, 242,   0,  16,   0,   1, 
       0,   0,   0, 230,  26,  16, 
       0,   1,   0,   0,   0,  70, 
     126,  16,   0,   1,   0,   0, 
       0,   0,  96,  16,   0,   0, 
-      0,   0,   0,  54,   0,   0, 
-      6, 130,   0,  16,   0,   0, 
-      0,   0,   0,  10, 128,  32, 
-      0,   0,   0,   0,   0,   3, 
       0,   0,   0,  56,   0,   0, 
       7, 242,  32,  16,   0,   0, 
       0,   0,   0,  70,  14,  16, 
       0,   0,   0,   0,   0, 246, 
      15,  16,   0,   1,   0,   0, 
       0,  62,   0,   0,   1,  83, 
      84,  65,  84, 116,   0,   0, 
-      0,   6,   0,   0,   0,   2, 
+      0,   5,   0,   0,   0,   2, 
       0,   0,   0,   0,   0,   0, 
       0,   3,   0,   0,   0,   2, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   1, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   2,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   1, 
+      0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,  82,  68,  69, 
      70,   4,   2,   0,   0,   1, 
@@ -10774,22 +13840,1230 @@ const BYTE g_main[] =
      78,  44,   0,   0,   0,   1, 
       0,   0,   0,   8,   0,   0, 
       0,  32,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   3,   0,   0,   0,   0, 
       0,   0,   0,  15,   0,   0, 
       0,  83,  86,  95,  84,  97, 
     114, 103, 101, 116,   0, 171, 
-    171,  19, 137,   0,   0,   0, 
+    171, 129, 204,   0,   0,   0, 
       0,   0,   0,  82, 101, 110, 
     100, 101, 114,  82,  71,  66, 
-     76,  97, 121, 101, 114,  80, 
-    114, 101, 109, 117, 108,  80, 
-    111, 105, 110, 116,  77,  97, 
+     65,  76,  97, 121, 101, 114, 
+     80, 114, 101, 109, 117, 108, 
+     80, 111, 105, 110, 116,  77, 
+     97, 115, 107,   0,   4,   0, 
+      0,   0,   1,   0,   0,   0, 
+      0,   0,   0,   0,   1,   0, 
+      0,   0,   0,   0,   0,   0, 
+      1,   0,   0,   0,   0,   0, 
+      0,   0,   1,   0,   0,   0, 
+      0,   0,   0,   0,   1,   0, 
+      0,   0,   3,   0,   0,   0, 
+    255, 255, 255, 255,  76,   8, 
+      0,   0,  68,  88,  66,  67, 
+    169, 150, 145, 216, 234,  78, 
+    253,  86,  77,  68,   6, 212, 
+    187, 231, 104,  78,   1,   0, 
+      0,   0,  76,   8,   0,   0, 
+      6,   0,   0,   0,  56,   0, 
+      0,   0,   4,   2,   0,   0, 
+    144,   4,   0,   0,  12,   5, 
+      0,   0, 168,   7,   0,   0, 
+    220,   7,   0,   0,  65, 111, 
+    110,  57, 196,   1,   0,   0, 
+    196,   1,   0,   0,   0,   2, 
+    254, 255,  96,   1,   0,   0, 
+    100,   0,   0,   0,   5,   0, 
+     36,   0,   0,   0,  96,   0, 
+      0,   0,  96,   0,   0,   0, 
+     36,   0,   1,   0,  96,   0, 
+      0,   0,   0,   0,   3,   0, 
+      1,   0,   0,   0,   0,   0, 
+      0,   0,   4,   0,   2,   0, 
+      4,   0,   0,   0,   0,   0, 
+      0,   0,   7,   0,   1,   0, 
+      6,   0,   0,   0,   0,   0, 
+      1,   0,   0,   0,   1,   0, 
+      7,   0,   0,   0,   0,   0, 
+      2,   0,   0,   0,   4,   0, 
+      8,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   1,   2, 
+    254, 255,  31,   0,   0,   2, 
+      5,   0,   0, 128,   0,   0, 
+     15, 144,   6,   0,   0,   2, 
+      0,   0,   1, 128,   3,   0, 
+    170, 160,   4,   0,   0,   4, 
+      0,   0,   6, 128,   0,   0, 
+    208, 144,   2,   0, 248, 160, 
+      2,   0, 208, 160,   5,   0, 
+      0,   3,   1,   0,  15, 128, 
+      0,   0, 170, 128,   5,   0, 
+    228, 160,   4,   0,   0,   4, 
+      1,   0,  15, 128,   4,   0, 
+    228, 160,   0,   0,  85, 128, 
+      1,   0, 228, 128,   2,   0, 
+      0,   3,   1,   0,  15, 128, 
+      1,   0, 228, 128,   6,   0, 
+    228, 160,   2,   0,   0,   3, 
+      0,   0,   6, 128,   1,   0, 
+    208, 128,   3,   0, 208, 161, 
+      5,   0,   0,   3,   0,   0, 
+      8, 224,   0,   0,   0, 128, 
+      0,   0,  85, 128,   6,   0, 
+      0,   2,   0,   0,   1, 128, 
+      3,   0, 255, 160,   5,   0, 
+      0,   3,   0,   0,   4, 224, 
+      0,   0,   0, 128,   0,   0, 
+    170, 128,   4,   0,   0,   4, 
+      0,   0,   3, 224,   0,   0, 
+    228, 144,   1,   0, 238, 160, 
+      1,   0, 228, 160,   6,   0, 
+      0,   2,   0,   0,   1, 128, 
+      1,   0, 255, 128,   5,   0, 
+      0,   3,   1,   0,   7, 128, 
+      0,   0,   0, 128,   1,   0, 
+    228, 128,   2,   0,   0,   3, 
+      0,   0,  15, 128,   1,   0, 
+    228, 128,   7,   0, 228, 161, 
+      5,   0,   0,   3,   0,   0, 
+      7, 128,   0,   0, 255, 128, 
+      0,   0, 228, 128,   5,   0, 
+      0,   3,   1,   0,  15, 128, 
+      0,   0,  85, 128,   9,   0, 
+    228, 160,   4,   0,   0,   4, 
+      1,   0,  15, 128,   8,   0, 
+    228, 160,   0,   0,   0, 128, 
+      1,   0, 228, 128,   4,   0, 
+      0,   4,   1,   0,  15, 128, 
+     10,   0, 228, 160,   0,   0, 
+    170, 128,   1,   0, 228, 128, 
+      4,   0,   0,   4,   0,   0, 
+     15, 128,  11,   0, 228, 160, 
+      0,   0, 255, 128,   1,   0, 
+    228, 128,   4,   0,   0,   4, 
+      0,   0,   3, 192,   0,   0, 
+    255, 128,   0,   0, 228, 160, 
+      0,   0, 228, 128,   1,   0, 
+      0,   2,   0,   0,  12, 192, 
+      0,   0, 228, 128, 255, 255, 
+      0,   0,  83,  72,  68,  82, 
+    132,   2,   0,   0,  64,   0, 
+      1,   0, 161,   0,   0,   0, 
+     89,   0,   0,   4,  70, 142, 
+     32,   0,   0,   0,   0,   0, 
+      8,   0,   0,   0,  89,   0, 
+      0,   4,  70, 142,  32,   0, 
+      1,   0,   0,   0,   1,   0, 
+      0,   0,  89,   0,   0,   4, 
+     70, 142,  32,   0,   2,   0, 
+      0,   0,   4,   0,   0,   0, 
+     95,   0,   0,   3,  50,  16, 
+     16,   0,   0,   0,   0,   0, 
+    103,   0,   0,   4, 242,  32, 
+     16,   0,   0,   0,   0,   0, 
+      1,   0,   0,   0, 101,   0, 
+      0,   3,  50,  32,  16,   0, 
+      1,   0,   0,   0, 101,   0, 
+      0,   3, 194,  32,  16,   0, 
+      1,   0,   0,   0, 104,   0, 
+      0,   2,   2,   0,   0,   0, 
+     50,   0,   0,  11,  50,   0, 
+     16,   0,   0,   0,   0,   0, 
+     70,  16,  16,   0,   0,   0, 
+      0,   0, 230, 138,  32,   0, 
+      0,   0,   0,   0,   1,   0, 
+      0,   0,  70, 128,  32,   0, 
+      0,   0,   0,   0,   1,   0, 
+      0,   0,  56,   0,   0,   8, 
+    242,   0,  16,   0,   1,   0, 
+      0,   0,  86,   5,  16,   0, 
+      0,   0,   0,   0,  70, 142, 
+     32,   0,   0,   0,   0,   0, 
+      5,   0,   0,   0,  50,   0, 
+      0,  10, 242,   0,  16,   0, 
+      0,   0,   0,   0,  70, 142, 
+     32,   0,   0,   0,   0,   0, 
+      4,   0,   0,   0,   6,   0, 
+     16,   0,   0,   0,   0,   0, 
+     70,  14,  16,   0,   1,   0, 
+      0,   0,   0,   0,   0,   8, 
+    242,   0,  16,   0,   0,   0, 
+      0,   0,  70,  14,  16,   0, 
+      0,   0,   0,   0,  70, 142, 
+     32,   0,   0,   0,   0,   0, 
+      7,   0,   0,   0,  14,   0, 
+      0,   7, 114,   0,  16,   0, 
+      1,   0,   0,   0,  70,   2, 
+     16,   0,   0,   0,   0,   0, 
+    246,  15,  16,   0,   0,   0, 
+      0,   0,  54,   0,   0,   5, 
+    130,   0,  16,   0,   1,   0, 
+      0,   0,  58,   0,  16,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   9,  50,   0,  16,   0, 
+      0,   0,   0,   0,  70,   0, 
+     16,   0,   0,   0,   0,   0, 
+     70, 128,  32, 128,  65,   0, 
+      0,   0,   0,   0,   0,   0, 
+      2,   0,   0,   0,  14,   0, 
+      0,   8, 194,  32,  16,   0, 
+      1,   0,   0,   0,   6,   4, 
+     16,   0,   0,   0,   0,   0, 
+    166, 142,  32,   0,   0,   0, 
+      0,   0,   2,   0,   0,   0, 
+      0,   0,   0,   9, 242,   0, 
+     16,   0,   0,   0,   0,   0, 
+     70,  14,  16,   0,   1,   0, 
+      0,   0,  70, 142,  32, 128, 
+     65,   0,   0,   0,   1,   0, 
+      0,   0,   0,   0,   0,   0, 
+     56,   0,   0,   7, 114,   0, 
+     16,   0,   0,   0,   0,   0, 
+    246,  15,  16,   0,   0,   0, 
+      0,   0,  70,   2,  16,   0, 
+      0,   0,   0,   0,  56,   0, 
+      0,   8, 242,   0,  16,   0, 
+      1,   0,   0,   0,  86,   5, 
+     16,   0,   0,   0,   0,   0, 
+     70, 142,  32,   0,   2,   0, 
+      0,   0,   1,   0,   0,   0, 
+     50,   0,   0,  10, 242,   0, 
+     16,   0,   1,   0,   0,   0, 
+     70, 142,  32,   0,   2,   0, 
+      0,   0,   0,   0,   0,   0, 
+      6,   0,  16,   0,   0,   0, 
+      0,   0,  70,  14,  16,   0, 
+      1,   0,   0,   0,  50,   0, 
+      0,  10, 242,   0,  16,   0, 
+      1,   0,   0,   0,  70, 142, 
+     32,   0,   2,   0,   0,   0, 
+      2,   0,   0,   0, 166,  10, 
+     16,   0,   0,   0,   0,   0, 
+     70,  14,  16,   0,   1,   0, 
+      0,   0,  50,   0,   0,  10, 
+    242,  32,  16,   0,   0,   0, 
+      0,   0,  70, 142,  32,   0, 
+      2,   0,   0,   0,   3,   0, 
+      0,   0, 246,  15,  16,   0, 
+      0,   0,   0,   0,  70,  14, 
+     16,   0,   1,   0,   0,   0, 
+     50,   0,   0,  11,  50,  32, 
+     16,   0,   1,   0,   0,   0, 
+     70,  16,  16,   0,   0,   0, 
+      0,   0, 230, 138,  32,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,  70, 128,  32,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,  62,   0,   0,   1, 
+     83,  84,  65,  84, 116,   0, 
+      0,   0,  16,   0,   0,   0, 
+      2,   0,   0,   0,   0,   0, 
+      0,   0,   4,   0,   0,   0, 
+      8,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      1,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      1,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,  82,  68, 
+     69,  70, 148,   2,   0,   0, 
+      3,   0,   0,   0, 168,   0, 
+      0,   0,   3,   0,   0,   0, 
+     28,   0,   0,   0,   0,   4, 
+    254, 255,   0,   1,   0,   0, 
+     96,   2,   0,   0, 124,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   1,   0, 
+      0,   0,   0,   0,   0,   0, 
+    133,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   1,   0,   0,   0, 
+      1,   0,   0,   0,   0,   0, 
+      0,   0, 152,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   2,   0, 
+      0,   0,   1,   0,   0,   0, 
+      0,   0,   0,   0,  80, 101, 
+    114,  76,  97, 121, 101, 114, 
+      0,  80, 101, 114,  79,  99, 
+     99,  97, 115, 105, 111, 110, 
+     97, 108,  76,  97, 121, 101, 
+    114,   0,  80, 101, 114,  76, 
+     97, 121, 101, 114,  77,  97, 
+    110,  97, 103, 101, 114,   0, 
+    124,   0,   0,   0,   5,   0, 
+      0,   0, 240,   0,   0,   0, 
+    128,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+    133,   0,   0,   0,   2,   0, 
+      0,   0, 220,   1,   0,   0, 
+     32,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+    152,   0,   0,   0,   1,   0, 
+      0,   0,  60,   2,   0,   0, 
+     64,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+    104,   1,   0,   0,   0,   0, 
+      0,   0,  16,   0,   0,   0, 
+      2,   0,   0,   0, 120,   1, 
+      0,   0,   0,   0,   0,   0, 
+    136,   1,   0,   0,  16,   0, 
+      0,   0,  16,   0,   0,   0, 
+      2,   0,   0,   0, 120,   1, 
+      0,   0,   0,   0,   0,   0, 
+    147,   1,   0,   0,  32,   0, 
+      0,   0,  16,   0,   0,   0, 
+      2,   0,   0,   0, 120,   1, 
+      0,   0,   0,   0,   0,   0, 
+    157,   1,   0,   0,  48,   0, 
+      0,   0,   4,   0,   0,   0, 
+      0,   0,   0,   0, 172,   1, 
+      0,   0,   0,   0,   0,   0, 
+    188,   1,   0,   0,  64,   0, 
+      0,   0,  64,   0,   0,   0, 
+      2,   0,   0,   0, 204,   1, 
+      0,   0,   0,   0,   0,   0, 
+    118,  84, 101, 120, 116, 117, 
+    114, 101,  67, 111, 111, 114, 
+    100, 115,   0, 171,   1,   0, 
+      3,   0,   1,   0,   4,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0, 118,  76,  97, 121, 
+    101, 114,  81, 117,  97, 100, 
+      0, 118,  77,  97, 115, 107, 
+     81, 117,  97, 100,   0, 102, 
+     76,  97, 121, 101, 114,  79, 
+    112,  97,  99, 105, 116, 121, 
+      0, 171,   0,   0,   3,   0, 
+      1,   0,   1,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+    109,  76,  97, 121, 101, 114, 
+     84, 114,  97, 110, 115, 102, 
+    111, 114, 109,   0,   3,   0, 
+      3,   0,   4,   0,   4,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,  12,   2,   0,   0, 
+      0,   0,   0,   0,  16,   0, 
+      0,   0,   2,   0,   0,   0, 
+     32,   2,   0,   0,   0,   0, 
+      0,   0,  48,   2,   0,   0, 
+     16,   0,   0,   0,  16,   0, 
+      0,   0,   0,   0,   0,   0, 
+     32,   2,   0,   0,   0,   0, 
+      0,   0, 118,  82, 101, 110, 
+    100, 101, 114,  84,  97, 114, 
+    103, 101, 116,  79, 102, 102, 
+    115, 101, 116,   0,   1,   0, 
+      3,   0,   1,   0,   4,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0, 102,  76,  97, 121, 
+    101, 114,  67, 111, 108, 111, 
+    114,   0,  84,   2,   0,   0, 
+      0,   0,   0,   0,  64,   0, 
+      0,   0,   2,   0,   0,   0, 
+    204,   1,   0,   0,   0,   0, 
+      0,   0, 109,  80, 114, 111, 
+    106, 101,  99, 116, 105, 111, 
+    110,   0,  77, 105,  99, 114, 
+    111, 115, 111, 102, 116,  32, 
+     40,  82,  41,  32,  72,  76, 
+     83,  76,  32,  83, 104,  97, 
+    100, 101, 114,  32,  67, 111, 
+    109, 112, 105, 108, 101, 114, 
+     32,  57,  46,  50,  57,  46, 
+     57,  53,  50,  46,  51,  49, 
+     49,  49,   0, 171, 171, 171, 
+     73,  83,  71,  78,  44,   0, 
+      0,   0,   1,   0,   0,   0, 
+      8,   0,   0,   0,  32,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   3,   0, 
+      0,   0,   0,   0,   0,   0, 
+      3,   3,   0,   0,  80,  79, 
+     83,  73,  84,  73,  79,  78, 
+      0, 171, 171, 171,  79,  83, 
+     71,  78, 104,   0,   0,   0, 
+      3,   0,   0,   0,   8,   0, 
+      0,   0,  80,   0,   0,   0, 
+      0,   0,   0,   0,   1,   0, 
+      0,   0,   3,   0,   0,   0, 
+      0,   0,   0,   0,  15,   0, 
+      0,   0,  92,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   3,   0,   0,   0, 
+      1,   0,   0,   0,   3,  12, 
+      0,   0,  92,   0,   0,   0, 
+      1,   0,   0,   0,   0,   0, 
+      0,   0,   3,   0,   0,   0, 
+      1,   0,   0,   0,  12,   3, 
+      0,   0,  83,  86,  95,  80, 
+    111, 115, 105, 116, 105, 111, 
+    110,   0,  84,  69,  88,  67, 
+     79,  79,  82,  68,   0, 171, 
+    171, 171,   4, 210,   0,   0, 
+      0,   0,   0,   0,   1,   0, 
+      0,   0,   2,   0,   0,   0, 
+      0,   0,   0,   0, 108,   5, 
+      0,   0,  68,  88,  66,  67, 
+     68, 156, 177,  19, 117, 199, 
+     87, 208, 226, 224, 191,  92, 
+     88, 131, 193, 142,   1,   0, 
+      0,   0, 108,   5,   0,   0, 
+      6,   0,   0,   0,  56,   0, 
+      0,   0, 252,   0,   0,   0, 
+      8,   2,   0,   0, 132,   2, 
+      0,   0, 200,   4,   0,   0, 
+     56,   5,   0,   0,  65, 111, 
+    110,  57, 188,   0,   0,   0, 
+    188,   0,   0,   0,   0,   2, 
+    255, 255, 132,   0,   0,   0, 
+     56,   0,   0,   0,   1,   0, 
+     44,   0,   0,   0,  56,   0, 
+      0,   0,  56,   0,   2,   0, 
+     36,   0,   0,   0,  56,   0, 
+      1,   0,   0,   0,   0,   1, 
+      1,   0,   0,   0,   3,   0, 
+      1,   0,   0,   0,   0,   0, 
+      0,   0,   1,   2, 255, 255, 
+     31,   0,   0,   2,   0,   0, 
+      0, 128,   0,   0,  15, 176, 
+     31,   0,   0,   2,   0,   0, 
+      0, 144,   0,   8,  15, 160, 
+     31,   0,   0,   2,   0,   0, 
+      0, 144,   1,   8,  15, 160, 
+      1,   0,   0,   2,   0,   0, 
+      3, 128,   0,   0, 235, 176, 
+     66,   0,   0,   3,   1,   0, 
+     15, 128,   0,   0, 228, 176, 
+      1,   8, 228, 160,  66,   0, 
+      0,   3,   0,   0,  15, 128, 
+      0,   0, 228, 128,   0,   8, 
+    228, 160,   5,   0,   0,   3, 
+      1,   0,  15, 128,   1,   0, 
+    228, 128,   0,   0,   0, 160, 
+      5,   0,   0,   3,   0,   0, 
+     15, 128,   0,   0, 255, 128, 
+      1,   0, 228, 128,   1,   0, 
+      0,   2,   0,   8,  15, 128, 
+      0,   0, 228, 128, 255, 255, 
+      0,   0,  83,  72,  68,  82, 
+      4,   1,   0,   0,  64,   0, 
+      0,   0,  65,   0,   0,   0, 
+     89,   0,   0,   4,  70, 142, 
+     32,   0,   0,   0,   0,   0, 
+      4,   0,   0,   0,  90,   0, 
+      0,   3,   0,  96,  16,   0, 
+      0,   0,   0,   0,  90,   0, 
+      0,   3,   0,  96,  16,   0, 
+      1,   0,   0,   0,  88,  24, 
+      0,   4,   0, 112,  16,   0, 
+      0,   0,   0,   0,  85,  85, 
+      0,   0,  88,  24,   0,   4, 
+      0, 112,  16,   0,   1,   0, 
+      0,   0,  85,  85,   0,   0, 
+     98,  16,   0,   3,  50,  16, 
+     16,   0,   1,   0,   0,   0, 
+     98,  16,   0,   3, 194,  16, 
+     16,   0,   1,   0,   0,   0, 
+    101,   0,   0,   3, 242,  32, 
+     16,   0,   0,   0,   0,   0, 
+    104,   0,   0,   2,   2,   0, 
+      0,   0,  69,   0,   0,   9, 
+    242,   0,  16,   0,   0,   0, 
+      0,   0,  70,  16,  16,   0, 
+      1,   0,   0,   0,  70, 126, 
+     16,   0,   0,   0,   0,   0, 
+      0,  96,  16,   0,   1,   0, 
+      0,   0,  56,   0,   0,   8, 
+    242,   0,  16,   0,   0,   0, 
+      0,   0,  70,  14,  16,   0, 
+      0,   0,   0,   0,   6, 128, 
+     32,   0,   0,   0,   0,   0, 
+      3,   0,   0,   0,  69,   0, 
+      0,   9, 242,   0,  16,   0, 
+      1,   0,   0,   0, 230,  26, 
+     16,   0,   1,   0,   0,   0, 
+     70, 126,  16,   0,   1,   0, 
+      0,   0,   0,  96,  16,   0, 
+      0,   0,   0,   0,  56,   0, 
+      0,   7, 242,  32,  16,   0, 
+      0,   0,   0,   0,  70,  14, 
+     16,   0,   0,   0,   0,   0, 
+    246,  15,  16,   0,   1,   0, 
+      0,   0,  62,   0,   0,   1, 
+     83,  84,  65,  84, 116,   0, 
+      0,   0,   5,   0,   0,   0, 
+      2,   0,   0,   0,   0,   0, 
+      0,   0,   3,   0,   0,   0, 
+      2,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      1,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   2,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,  82,  68, 
+     69,  70,  60,   2,   0,   0, 
+      1,   0,   0,   0,   4,   1, 
+      0,   0,   5,   0,   0,   0, 
+     28,   0,   0,   0,   0,   4, 
+    255, 255,   0,   1,   0,   0, 
+      8,   2,   0,   0, 188,   0, 
+      0,   0,   3,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   1,   0, 
+      0,   0,   0,   0,   0,   0, 
+    214,   0,   0,   0,   3,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   1,   0,   0,   0, 
+      1,   0,   0,   0,   0,   0, 
+      0,   0, 239,   0,   0,   0, 
+      2,   0,   0,   0,   5,   0, 
+      0,   0,   4,   0,   0,   0, 
+    255, 255, 255, 255,   0,   0, 
+      0,   0,   1,   0,   0,   0, 
+     12,   0,   0,   0, 244,   0, 
+      0,   0,   2,   0,   0,   0, 
+      5,   0,   0,   0,   4,   0, 
+      0,   0, 255, 255, 255, 255, 
+      1,   0,   0,   0,   1,   0, 
+      0,   0,  12,   0,   0,   0, 
+    250,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      1,   0,   0,   0,   0,   0, 
+      0,   0,  76,  97, 121, 101, 
+    114,  84, 101, 120, 116, 117, 
+    114, 101,  83,  97, 109, 112, 
+    108, 101, 114,  76, 105, 110, 
+    101,  97, 114,   0,  76,  97, 
+    121, 101, 114,  84, 101, 120, 
+    116, 117, 114, 101,  83,  97, 
+    109, 112, 108, 101, 114,  80, 
+    111, 105, 110, 116,   0, 116, 
+     82,  71,  66,   0, 116,  77, 
+     97, 115, 107,   0,  80, 101, 
+    114,  76,  97, 121, 101, 114, 
+      0, 171, 250,   0,   0,   0, 
+      5,   0,   0,   0,  28,   1, 
+      0,   0, 128,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0, 148,   1,   0,   0, 
+      0,   0,   0,   0,  16,   0, 
+      0,   0,   0,   0,   0,   0, 
+    164,   1,   0,   0,   0,   0, 
+      0,   0, 180,   1,   0,   0, 
+     16,   0,   0,   0,  16,   0, 
+      0,   0,   0,   0,   0,   0, 
+    164,   1,   0,   0,   0,   0, 
+      0,   0, 191,   1,   0,   0, 
+     32,   0,   0,   0,  16,   0, 
+      0,   0,   0,   0,   0,   0, 
+    164,   1,   0,   0,   0,   0, 
+      0,   0, 201,   1,   0,   0, 
+     48,   0,   0,   0,   4,   0, 
+      0,   0,   2,   0,   0,   0, 
+    216,   1,   0,   0,   0,   0, 
+      0,   0, 232,   1,   0,   0, 
+     64,   0,   0,   0,  64,   0, 
+      0,   0,   0,   0,   0,   0, 
+    248,   1,   0,   0,   0,   0, 
+      0,   0, 118,  84, 101, 120, 
+    116, 117, 114, 101,  67, 111, 
+    111, 114, 100, 115,   0, 171, 
+      1,   0,   3,   0,   1,   0, 
+      4,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0, 118,  76, 
+     97, 121, 101, 114,  81, 117, 
+     97, 100,   0, 118,  77,  97, 
+    115, 107,  81, 117,  97, 100, 
+      0, 102,  76,  97, 121, 101, 
+    114,  79, 112,  97,  99, 105, 
+    116, 121,   0, 171,   0,   0, 
+      3,   0,   1,   0,   1,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0, 109,  76,  97, 121, 
+    101, 114,  84, 114,  97, 110, 
+    115, 102, 111, 114, 109,   0, 
+      3,   0,   3,   0,   4,   0, 
+      4,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,  77, 105, 
+     99, 114, 111, 115, 111, 102, 
+    116,  32,  40,  82,  41,  32, 
+     72,  76,  83,  76,  32,  83, 
+    104,  97, 100, 101, 114,  32, 
+     67, 111, 109, 112, 105, 108, 
+    101, 114,  32,  57,  46,  50, 
+     57,  46,  57,  53,  50,  46, 
+     51,  49,  49,  49,   0, 171, 
+    171, 171,  73,  83,  71,  78, 
+    104,   0,   0,   0,   3,   0, 
+      0,   0,   8,   0,   0,   0, 
+     80,   0,   0,   0,   0,   0, 
+      0,   0,   1,   0,   0,   0, 
+      3,   0,   0,   0,   0,   0, 
+      0,   0,  15,   0,   0,   0, 
+     92,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      3,   0,   0,   0,   1,   0, 
+      0,   0,   3,   3,   0,   0, 
+     92,   0,   0,   0,   1,   0, 
+      0,   0,   0,   0,   0,   0, 
+      3,   0,   0,   0,   1,   0, 
+      0,   0,  12,  12,   0,   0, 
+     83,  86,  95,  80, 111, 115, 
+    105, 116, 105, 111, 110,   0, 
+     84,  69,  88,  67,  79,  79, 
+     82,  68,   0, 171, 171, 171, 
+     79,  83,  71,  78,  44,   0, 
+      0,   0,   1,   0,   0,   0, 
+      8,   0,   0,   0,  32,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   3,   0, 
+      0,   0,   0,   0,   0,   0, 
+     15,   0,   0,   0,  83,  86, 
+     95,  84,  97, 114, 103, 101, 
+    116,   0, 171, 171, 104, 218, 
+      0,   0,   0,   0,   0,   0, 
+     82, 101, 110, 100, 101, 114, 
+     82,  71,  66,  65,  76,  97, 
+    121, 101, 114,  78, 111, 110, 
+     80, 114, 101, 109, 117, 108, 
+     80, 111, 105, 110, 116,  77, 
+     97, 115, 107,   0,   4,   0, 
+      0,   0,   1,   0,   0,   0, 
+      0,   0,   0,   0,   1,   0, 
+      0,   0,   0,   0,   0,   0, 
+      1,   0,   0,   0,   0,   0, 
+      0,   0,   1,   0,   0,   0, 
+      0,   0,   0,   0,   1,   0, 
+      0,   0,   3,   0,   0,   0, 
+    255, 255, 255, 255,  76,   8, 
+      0,   0,  68,  88,  66,  67, 
+    169, 150, 145, 216, 234,  78, 
+    253,  86,  77,  68,   6, 212, 
+    187, 231, 104,  78,   1,   0, 
+      0,   0,  76,   8,   0,   0, 
+      6,   0,   0,   0,  56,   0, 
+      0,   0,   4,   2,   0,   0, 
+    144,   4,   0,   0,  12,   5, 
+      0,   0, 168,   7,   0,   0, 
+    220,   7,   0,   0,  65, 111, 
+    110,  57, 196,   1,   0,   0, 
+    196,   1,   0,   0,   0,   2, 
+    254, 255,  96,   1,   0,   0, 
+    100,   0,   0,   0,   5,   0, 
+     36,   0,   0,   0,  96,   0, 
+      0,   0,  96,   0,   0,   0, 
+     36,   0,   1,   0,  96,   0, 
+      0,   0,   0,   0,   3,   0, 
+      1,   0,   0,   0,   0,   0, 
+      0,   0,   4,   0,   2,   0, 
+      4,   0,   0,   0,   0,   0, 
+      0,   0,   7,   0,   1,   0, 
+      6,   0,   0,   0,   0,   0, 
+      1,   0,   0,   0,   1,   0, 
+      7,   0,   0,   0,   0,   0, 
+      2,   0,   0,   0,   4,   0, 
+      8,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   1,   2, 
+    254, 255,  31,   0,   0,   2, 
+      5,   0,   0, 128,   0,   0, 
+     15, 144,   6,   0,   0,   2, 
+      0,   0,   1, 128,   3,   0, 
+    170, 160,   4,   0,   0,   4, 
+      0,   0,   6, 128,   0,   0, 
+    208, 144,   2,   0, 248, 160, 
+      2,   0, 208, 160,   5,   0, 
+      0,   3,   1,   0,  15, 128, 
+      0,   0, 170, 128,   5,   0, 
+    228, 160,   4,   0,   0,   4, 
+      1,   0,  15, 128,   4,   0, 
+    228, 160,   0,   0,  85, 128, 
+      1,   0, 228, 128,   2,   0, 
+      0,   3,   1,   0,  15, 128, 
+      1,   0, 228, 128,   6,   0, 
+    228, 160,   2,   0,   0,   3, 
+      0,   0,   6, 128,   1,   0, 
+    208, 128,   3,   0, 208, 161, 
+      5,   0,   0,   3,   0,   0, 
+      8, 224,   0,   0,   0, 128, 
+      0,   0,  85, 128,   6,   0, 
+      0,   2,   0,   0,   1, 128, 
+      3,   0, 255, 160,   5,   0, 
+      0,   3,   0,   0,   4, 224, 
+      0,   0,   0, 128,   0,   0, 
+    170, 128,   4,   0,   0,   4, 
+      0,   0,   3, 224,   0,   0, 
+    228, 144,   1,   0, 238, 160, 
+      1,   0, 228, 160,   6,   0, 
+      0,   2,   0,   0,   1, 128, 
+      1,   0, 255, 128,   5,   0, 
+      0,   3,   1,   0,   7, 128, 
+      0,   0,   0, 128,   1,   0, 
+    228, 128,   2,   0,   0,   3, 
+      0,   0,  15, 128,   1,   0, 
+    228, 128,   7,   0, 228, 161, 
+      5,   0,   0,   3,   0,   0, 
+      7, 128,   0,   0, 255, 128, 
+      0,   0, 228, 128,   5,   0, 
+      0,   3,   1,   0,  15, 128, 
+      0,   0,  85, 128,   9,   0, 
+    228, 160,   4,   0,   0,   4, 
+      1,   0,  15, 128,   8,   0, 
+    228, 160,   0,   0,   0, 128, 
+      1,   0, 228, 128,   4,   0, 
+      0,   4,   1,   0,  15, 128, 
+     10,   0, 228, 160,   0,   0, 
+    170, 128,   1,   0, 228, 128, 
+      4,   0,   0,   4,   0,   0, 
+     15, 128,  11,   0, 228, 160, 
+      0,   0, 255, 128,   1,   0, 
+    228, 128,   4,   0,   0,   4, 
+      0,   0,   3, 192,   0,   0, 
+    255, 128,   0,   0, 228, 160, 
+      0,   0, 228, 128,   1,   0, 
+      0,   2,   0,   0,  12, 192, 
+      0,   0, 228, 128, 255, 255, 
+      0,   0,  83,  72,  68,  82, 
+    132,   2,   0,   0,  64,   0, 
+      1,   0, 161,   0,   0,   0, 
+     89,   0,   0,   4,  70, 142, 
+     32,   0,   0,   0,   0,   0, 
+      8,   0,   0,   0,  89,   0, 
+      0,   4,  70, 142,  32,   0, 
+      1,   0,   0,   0,   1,   0, 
+      0,   0,  89,   0,   0,   4, 
+     70, 142,  32,   0,   2,   0, 
+      0,   0,   4,   0,   0,   0, 
+     95,   0,   0,   3,  50,  16, 
+     16,   0,   0,   0,   0,   0, 
+    103,   0,   0,   4, 242,  32, 
+     16,   0,   0,   0,   0,   0, 
+      1,   0,   0,   0, 101,   0, 
+      0,   3,  50,  32,  16,   0, 
+      1,   0,   0,   0, 101,   0, 
+      0,   3, 194,  32,  16,   0, 
+      1,   0,   0,   0, 104,   0, 
+      0,   2,   2,   0,   0,   0, 
+     50,   0,   0,  11,  50,   0, 
+     16,   0,   0,   0,   0,   0, 
+     70,  16,  16,   0,   0,   0, 
+      0,   0, 230, 138,  32,   0, 
+      0,   0,   0,   0,   1,   0, 
+      0,   0,  70, 128,  32,   0, 
+      0,   0,   0,   0,   1,   0, 
+      0,   0,  56,   0,   0,   8, 
+    242,   0,  16,   0,   1,   0, 
+      0,   0,  86,   5,  16,   0, 
+      0,   0,   0,   0,  70, 142, 
+     32,   0,   0,   0,   0,   0, 
+      5,   0,   0,   0,  50,   0, 
+      0,  10, 242,   0,  16,   0, 
+      0,   0,   0,   0,  70, 142, 
+     32,   0,   0,   0,   0,   0, 
+      4,   0,   0,   0,   6,   0, 
+     16,   0,   0,   0,   0,   0, 
+     70,  14,  16,   0,   1,   0, 
+      0,   0,   0,   0,   0,   8, 
+    242,   0,  16,   0,   0,   0, 
+      0,   0,  70,  14,  16,   0, 
+      0,   0,   0,   0,  70, 142, 
+     32,   0,   0,   0,   0,   0, 
+      7,   0,   0,   0,  14,   0, 
+      0,   7, 114,   0,  16,   0, 
+      1,   0,   0,   0,  70,   2, 
+     16,   0,   0,   0,   0,   0, 
+    246,  15,  16,   0,   0,   0, 
+      0,   0,  54,   0,   0,   5, 
+    130,   0,  16,   0,   1,   0, 
+      0,   0,  58,   0,  16,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   9,  50,   0,  16,   0, 
+      0,   0,   0,   0,  70,   0, 
+     16,   0,   0,   0,   0,   0, 
+     70, 128,  32, 128,  65,   0, 
+      0,   0,   0,   0,   0,   0, 
+      2,   0,   0,   0,  14,   0, 
+      0,   8, 194,  32,  16,   0, 
+      1,   0,   0,   0,   6,   4, 
+     16,   0,   0,   0,   0,   0, 
+    166, 142,  32,   0,   0,   0, 
+      0,   0,   2,   0,   0,   0, 
+      0,   0,   0,   9, 242,   0, 
+     16,   0,   0,   0,   0,   0, 
+     70,  14,  16,   0,   1,   0, 
+      0,   0,  70, 142,  32, 128, 
+     65,   0,   0,   0,   1,   0, 
+      0,   0,   0,   0,   0,   0, 
+     56,   0,   0,   7, 114,   0, 
+     16,   0,   0,   0,   0,   0, 
+    246,  15,  16,   0,   0,   0, 
+      0,   0,  70,   2,  16,   0, 
+      0,   0,   0,   0,  56,   0, 
+      0,   8, 242,   0,  16,   0, 
+      1,   0,   0,   0,  86,   5, 
+     16,   0,   0,   0,   0,   0, 
+     70, 142,  32,   0,   2,   0, 
+      0,   0,   1,   0,   0,   0, 
+     50,   0,   0,  10, 242,   0, 
+     16,   0,   1,   0,   0,   0, 
+     70, 142,  32,   0,   2,   0, 
+      0,   0,   0,   0,   0,   0, 
+      6,   0,  16,   0,   0,   0, 
+      0,   0,  70,  14,  16,   0, 
+      1,   0,   0,   0,  50,   0, 
+      0,  10, 242,   0,  16,   0, 
+      1,   0,   0,   0,  70, 142, 
+     32,   0,   2,   0,   0,   0, 
+      2,   0,   0,   0, 166,  10, 
+     16,   0,   0,   0,   0,   0, 
+     70,  14,  16,   0,   1,   0, 
+      0,   0,  50,   0,   0,  10, 
+    242,  32,  16,   0,   0,   0, 
+      0,   0,  70, 142,  32,   0, 
+      2,   0,   0,   0,   3,   0, 
+      0,   0, 246,  15,  16,   0, 
+      0,   0,   0,   0,  70,  14, 
+     16,   0,   1,   0,   0,   0, 
+     50,   0,   0,  11,  50,  32, 
+     16,   0,   1,   0,   0,   0, 
+     70,  16,  16,   0,   0,   0, 
+      0,   0, 230, 138,  32,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,  70, 128,  32,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,  62,   0,   0,   1, 
+     83,  84,  65,  84, 116,   0, 
+      0,   0,  16,   0,   0,   0, 
+      2,   0,   0,   0,   0,   0, 
+      0,   0,   4,   0,   0,   0, 
+      8,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      1,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      1,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,  82,  68, 
+     69,  70, 148,   2,   0,   0, 
+      3,   0,   0,   0, 168,   0, 
+      0,   0,   3,   0,   0,   0, 
+     28,   0,   0,   0,   0,   4, 
+    254, 255,   0,   1,   0,   0, 
+     96,   2,   0,   0, 124,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   1,   0, 
+      0,   0,   0,   0,   0,   0, 
+    133,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   1,   0,   0,   0, 
+      1,   0,   0,   0,   0,   0, 
+      0,   0, 152,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   2,   0, 
+      0,   0,   1,   0,   0,   0, 
+      0,   0,   0,   0,  80, 101, 
+    114,  76,  97, 121, 101, 114, 
+      0,  80, 101, 114,  79,  99, 
+     99,  97, 115, 105, 111, 110, 
+     97, 108,  76,  97, 121, 101, 
+    114,   0,  80, 101, 114,  76, 
+     97, 121, 101, 114,  77,  97, 
+    110,  97, 103, 101, 114,   0, 
+    124,   0,   0,   0,   5,   0, 
+      0,   0, 240,   0,   0,   0, 
+    128,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+    133,   0,   0,   0,   2,   0, 
+      0,   0, 220,   1,   0,   0, 
+     32,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+    152,   0,   0,   0,   1,   0, 
+      0,   0,  60,   2,   0,   0, 
+     64,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+    104,   1,   0,   0,   0,   0, 
+      0,   0,  16,   0,   0,   0, 
+      2,   0,   0,   0, 120,   1, 
+      0,   0,   0,   0,   0,   0, 
+    136,   1,   0,   0,  16,   0, 
+      0,   0,  16,   0,   0,   0, 
+      2,   0,   0,   0, 120,   1, 
+      0,   0,   0,   0,   0,   0, 
+    147,   1,   0,   0,  32,   0, 
+      0,   0,  16,   0,   0,   0, 
+      2,   0,   0,   0, 120,   1, 
+      0,   0,   0,   0,   0,   0, 
+    157,   1,   0,   0,  48,   0, 
+      0,   0,   4,   0,   0,   0, 
+      0,   0,   0,   0, 172,   1, 
+      0,   0,   0,   0,   0,   0, 
+    188,   1,   0,   0,  64,   0, 
+      0,   0,  64,   0,   0,   0, 
+      2,   0,   0,   0, 204,   1, 
+      0,   0,   0,   0,   0,   0, 
+    118,  84, 101, 120, 116, 117, 
+    114, 101,  67, 111, 111, 114, 
+    100, 115,   0, 171,   1,   0, 
+      3,   0,   1,   0,   4,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0, 118,  76,  97, 121, 
+    101, 114,  81, 117,  97, 100, 
+      0, 118,  77,  97, 115, 107, 
+     81, 117,  97, 100,   0, 102, 
+     76,  97, 121, 101, 114,  79, 
+    112,  97,  99, 105, 116, 121, 
+      0, 171,   0,   0,   3,   0, 
+      1,   0,   1,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+    109,  76,  97, 121, 101, 114, 
+     84, 114,  97, 110, 115, 102, 
+    111, 114, 109,   0,   3,   0, 
+      3,   0,   4,   0,   4,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,  12,   2,   0,   0, 
+      0,   0,   0,   0,  16,   0, 
+      0,   0,   2,   0,   0,   0, 
+     32,   2,   0,   0,   0,   0, 
+      0,   0,  48,   2,   0,   0, 
+     16,   0,   0,   0,  16,   0, 
+      0,   0,   0,   0,   0,   0, 
+     32,   2,   0,   0,   0,   0, 
+      0,   0, 118,  82, 101, 110, 
+    100, 101, 114,  84,  97, 114, 
+    103, 101, 116,  79, 102, 102, 
+    115, 101, 116,   0,   1,   0, 
+      3,   0,   1,   0,   4,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0, 102,  76,  97, 121, 
+    101, 114,  67, 111, 108, 111, 
+    114,   0,  84,   2,   0,   0, 
+      0,   0,   0,   0,  64,   0, 
+      0,   0,   2,   0,   0,   0, 
+    204,   1,   0,   0,   0,   0, 
+      0,   0, 109,  80, 114, 111, 
+    106, 101,  99, 116, 105, 111, 
+    110,   0,  77, 105,  99, 114, 
+    111, 115, 111, 102, 116,  32, 
+     40,  82,  41,  32,  72,  76, 
+     83,  76,  32,  83, 104,  97, 
+    100, 101, 114,  32,  67, 111, 
+    109, 112, 105, 108, 101, 114, 
+     32,  57,  46,  50,  57,  46, 
+     57,  53,  50,  46,  51,  49, 
+     49,  49,   0, 171, 171, 171, 
+     73,  83,  71,  78,  44,   0, 
+      0,   0,   1,   0,   0,   0, 
+      8,   0,   0,   0,  32,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   3,   0, 
+      0,   0,   0,   0,   0,   0, 
+      3,   3,   0,   0,  80,  79, 
+     83,  73,  84,  73,  79,  78, 
+      0, 171, 171, 171,  79,  83, 
+     71,  78, 104,   0,   0,   0, 
+      3,   0,   0,   0,   8,   0, 
+      0,   0,  80,   0,   0,   0, 
+      0,   0,   0,   0,   1,   0, 
+      0,   0,   3,   0,   0,   0, 
+      0,   0,   0,   0,  15,   0, 
+      0,   0,  92,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   3,   0,   0,   0, 
+      1,   0,   0,   0,   3,  12, 
+      0,   0,  92,   0,   0,   0, 
+      1,   0,   0,   0,   0,   0, 
+      0,   0,   3,   0,   0,   0, 
+      1,   0,   0,   0,  12,   3, 
+      0,   0,  83,  86,  95,  80, 
+    111, 115, 105, 116, 105, 111, 
+    110,   0,  84,  69,  88,  67, 
+     79,  79,  82,  68,   0, 171, 
+    171, 171,  50, 224,   0,   0, 
+      0,   0,   0,   0,   1,   0, 
+      0,   0,   2,   0,   0,   0, 
+      0,   0,   0,   0, 108,   5, 
+      0,   0,  68,  88,  66,  67, 
+     68, 156, 177,  19, 117, 199, 
+     87, 208, 226, 224, 191,  92, 
+     88, 131, 193, 142,   1,   0, 
+      0,   0, 108,   5,   0,   0, 
+      6,   0,   0,   0,  56,   0, 
+      0,   0, 252,   0,   0,   0, 
+      8,   2,   0,   0, 132,   2, 
+      0,   0, 200,   4,   0,   0, 
+     56,   5,   0,   0,  65, 111, 
+    110,  57, 188,   0,   0,   0, 
+    188,   0,   0,   0,   0,   2, 
+    255, 255, 132,   0,   0,   0, 
+     56,   0,   0,   0,   1,   0, 
+     44,   0,   0,   0,  56,   0, 
+      0,   0,  56,   0,   2,   0, 
+     36,   0,   0,   0,  56,   0, 
+      1,   0,   0,   0,   0,   1, 
+      1,   0,   0,   0,   3,   0, 
+      1,   0,   0,   0,   0,   0, 
+      0,   0,   1,   2, 255, 255, 
+     31,   0,   0,   2,   0,   0, 
+      0, 128,   0,   0,  15, 176, 
+     31,   0,   0,   2,   0,   0, 
+      0, 144,   0,   8,  15, 160, 
+     31,   0,   0,   2,   0,   0, 
+      0, 144,   1,   8,  15, 160, 
+      1,   0,   0,   2,   0,   0, 
+      3, 128,   0,   0, 235, 176, 
+     66,   0,   0,   3,   1,   0, 
+     15, 128,   0,   0, 228, 176, 
+      1,   8, 228, 160,  66,   0, 
+      0,   3,   0,   0,  15, 128, 
+      0,   0, 228, 128,   0,   8, 
+    228, 160,   5,   0,   0,   3, 
+      1,   0,  15, 128,   1,   0, 
+    228, 128,   0,   0,   0, 160, 
+      5,   0,   0,   3,   0,   0, 
+     15, 128,   0,   0, 255, 128, 
+      1,   0, 228, 128,   1,   0, 
+      0,   2,   0,   8,  15, 128, 
+      0,   0, 228, 128, 255, 255, 
+      0,   0,  83,  72,  68,  82, 
+      4,   1,   0,   0,  64,   0, 
+      0,   0,  65,   0,   0,   0, 
+     89,   0,   0,   4,  70, 142, 
+     32,   0,   0,   0,   0,   0, 
+      4,   0,   0,   0,  90,   0, 
+      0,   3,   0,  96,  16,   0, 
+      0,   0,   0,   0,  90,   0, 
+      0,   3,   0,  96,  16,   0, 
+      1,   0,   0,   0,  88,  24, 
+      0,   4,   0, 112,  16,   0, 
+      0,   0,   0,   0,  85,  85, 
+      0,   0,  88,  24,   0,   4, 
+      0, 112,  16,   0,   1,   0, 
+      0,   0,  85,  85,   0,   0, 
+     98,  16,   0,   3,  50,  16, 
+     16,   0,   1,   0,   0,   0, 
+     98,  16,   0,   3, 194,  16, 
+     16,   0,   1,   0,   0,   0, 
+    101,   0,   0,   3, 242,  32, 
+     16,   0,   0,   0,   0,   0, 
+    104,   0,   0,   2,   2,   0, 
+      0,   0,  69,   0,   0,   9, 
+    242,   0,  16,   0,   0,   0, 
+      0,   0,  70,  16,  16,   0, 
+      1,   0,   0,   0,  70, 126, 
+     16,   0,   0,   0,   0,   0, 
+      0,  96,  16,   0,   1,   0, 
+      0,   0,  56,   0,   0,   8, 
+    242,   0,  16,   0,   0,   0, 
+      0,   0,  70,  14,  16,   0, 
+      0,   0,   0,   0,   6, 128, 
+     32,   0,   0,   0,   0,   0, 
+      3,   0,   0,   0,  69,   0, 
+      0,   9, 242,   0,  16,   0, 
+      1,   0,   0,   0, 230,  26, 
+     16,   0,   1,   0,   0,   0, 
+     70, 126,  16,   0,   1,   0, 
+      0,   0,   0,  96,  16,   0, 
+      0,   0,   0,   0,  56,   0, 
+      0,   7, 242,  32,  16,   0, 
+      0,   0,   0,   0,  70,  14, 
+     16,   0,   0,   0,   0,   0, 
+    246,  15,  16,   0,   1,   0, 
+      0,   0,  62,   0,   0,   1, 
+     83,  84,  65,  84, 116,   0, 
+      0,   0,   5,   0,   0,   0, 
+      2,   0,   0,   0,   0,   0, 
+      0,   0,   3,   0,   0,   0, 
+      2,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      1,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   2,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,  82,  68, 
+     69,  70,  60,   2,   0,   0, 
+      1,   0,   0,   0,   4,   1, 
+      0,   0,   5,   0,   0,   0, 
+     28,   0,   0,   0,   0,   4, 
+    255, 255,   0,   1,   0,   0, 
+      8,   2,   0,   0, 188,   0, 
+      0,   0,   3,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   1,   0, 
+      0,   0,   0,   0,   0,   0, 
+    214,   0,   0,   0,   3,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   1,   0,   0,   0, 
+      1,   0,   0,   0,   0,   0, 
+      0,   0, 239,   0,   0,   0, 
+      2,   0,   0,   0,   5,   0, 
+      0,   0,   4,   0,   0,   0, 
+    255, 255, 255, 255,   0,   0, 
+      0,   0,   1,   0,   0,   0, 
+     12,   0,   0,   0, 244,   0, 
+      0,   0,   2,   0,   0,   0, 
+      5,   0,   0,   0,   4,   0, 
+      0,   0, 255, 255, 255, 255, 
+      1,   0,   0,   0,   1,   0, 
+      0,   0,  12,   0,   0,   0, 
+    250,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      1,   0,   0,   0,   0,   0, 
+      0,   0,  76,  97, 121, 101, 
+    114,  84, 101, 120, 116, 117, 
+    114, 101,  83,  97, 109, 112, 
+    108, 101, 114,  76, 105, 110, 
+    101,  97, 114,   0,  76,  97, 
+    121, 101, 114,  84, 101, 120, 
+    116, 117, 114, 101,  83,  97, 
+    109, 112, 108, 101, 114,  80, 
+    111, 105, 110, 116,   0, 116, 
+     82,  71,  66,   0, 116,  77, 
+     97, 115, 107,   0,  80, 101, 
+    114,  76,  97, 121, 101, 114, 
+      0, 171, 250,   0,   0,   0, 
+      5,   0,   0,   0,  28,   1, 
+      0,   0, 128,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0, 148,   1,   0,   0, 
+      0,   0,   0,   0,  16,   0, 
+      0,   0,   0,   0,   0,   0, 
+    164,   1,   0,   0,   0,   0, 
+      0,   0, 180,   1,   0,   0, 
+     16,   0,   0,   0,  16,   0, 
+      0,   0,   0,   0,   0,   0, 
+    164,   1,   0,   0,   0,   0, 
+      0,   0, 191,   1,   0,   0, 
+     32,   0,   0,   0,  16,   0, 
+      0,   0,   0,   0,   0,   0, 
+    164,   1,   0,   0,   0,   0, 
+      0,   0, 201,   1,   0,   0, 
+     48,   0,   0,   0,   4,   0, 
+      0,   0,   2,   0,   0,   0, 
+    216,   1,   0,   0,   0,   0, 
+      0,   0, 232,   1,   0,   0, 
+     64,   0,   0,   0,  64,   0, 
+      0,   0,   0,   0,   0,   0, 
+    248,   1,   0,   0,   0,   0, 
+      0,   0, 118,  84, 101, 120, 
+    116, 117, 114, 101,  67, 111, 
+    111, 114, 100, 115,   0, 171, 
+      1,   0,   3,   0,   1,   0, 
+      4,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0, 118,  76, 
+     97, 121, 101, 114,  81, 117, 
+     97, 100,   0, 118,  77,  97, 
+    115, 107,  81, 117,  97, 100, 
+      0, 102,  76,  97, 121, 101, 
+    114,  79, 112,  97,  99, 105, 
+    116, 121,   0, 171,   0,   0, 
+      3,   0,   1,   0,   1,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0, 109,  76,  97, 121, 
+    101, 114,  84, 114,  97, 110, 
+    115, 102, 111, 114, 109,   0, 
+      3,   0,   3,   0,   4,   0, 
+      4,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,  77, 105, 
+     99, 114, 111, 115, 111, 102, 
+    116,  32,  40,  82,  41,  32, 
+     72,  76,  83,  76,  32,  83, 
+    104,  97, 100, 101, 114,  32, 
+     67, 111, 109, 112, 105, 108, 
+    101, 114,  32,  57,  46,  50, 
+     57,  46,  57,  53,  50,  46, 
+     51,  49,  49,  49,   0, 171, 
+    171, 171,  73,  83,  71,  78, 
+    104,   0,   0,   0,   3,   0, 
+      0,   0,   8,   0,   0,   0, 
+     80,   0,   0,   0,   0,   0, 
+      0,   0,   1,   0,   0,   0, 
+      3,   0,   0,   0,   0,   0, 
+      0,   0,  15,   0,   0,   0, 
+     92,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      3,   0,   0,   0,   1,   0, 
+      0,   0,   3,   3,   0,   0, 
+     92,   0,   0,   0,   1,   0, 
+      0,   0,   0,   0,   0,   0, 
+      3,   0,   0,   0,   1,   0, 
+      0,   0,  12,  12,   0,   0, 
+     83,  86,  95,  80, 111, 115, 
+    105, 116, 105, 111, 110,   0, 
+     84,  69,  88,  67,  79,  79, 
+     82,  68,   0, 171, 171, 171, 
+     79,  83,  71,  78,  44,   0, 
+      0,   0,   1,   0,   0,   0, 
+      8,   0,   0,   0,  32,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   3,   0, 
+      0,   0,   0,   0,   0,   0, 
+     15,   0,   0,   0,  83,  86, 
+     95,  84,  97, 114, 103, 101, 
+    116,   0, 171, 171, 150, 232, 
+      0,   0,   0,   0,   0,   0, 
+     82, 101, 110, 100, 101, 114, 
+     89,  67,  98,  67, 114,  76, 
+     97, 121, 101, 114,  77,  97, 
     115, 107,   0,   4,   0,   0, 
       0,   1,   0,   0,   0,   0, 
       0,   0,   0,   1,   0,   0, 
       0,   0,   0,   0,   0,   1, 
       0,   0,   0,   0,   0,   0, 
       0,   1,   0,   0,   0,   0, 
       0,   0,   0,   1,   0,   0, 
       0,   3,   0,   0,   0, 255, 
@@ -11143,2607 +15417,314 @@ const BYTE g_main[] =
       0,  92,   0,   0,   0,   1, 
       0,   0,   0,   0,   0,   0, 
       0,   3,   0,   0,   0,   1, 
       0,   0,   0,  12,   3,   0, 
       0,  83,  86,  95,  80, 111, 
     115, 105, 116, 105, 111, 110, 
       0,  84,  69,  88,  67,  79, 
      79,  82,  68,   0, 171, 171, 
-    171, 185, 142,   0,   0,   0, 
+    171,  83, 238,   0,   0,   0, 
       0,   0,   0,   1,   0,   0, 
       0,   2,   0,   0,   0,   0, 
-      0,   0,   0, 144,   5,   0, 
-      0,  68,  88,  66,  67, 239, 
-     83, 247, 155,  21, 118, 142, 
-     53, 183,   4,  63,  81, 228, 
-    175, 103,  61,   1,   0,   0, 
-      0, 144,   5,   0,   0,   6, 
-      0,   0,   0,  56,   0,   0, 
-      0,   8,   1,   0,   0,  44, 
-      2,   0,   0, 168,   2,   0, 
-      0, 236,   4,   0,   0,  92, 
-      5,   0,   0,  65, 111, 110, 
-     57, 200,   0,   0,   0, 200, 
-      0,   0,   0,   0,   2, 255, 
-    255, 144,   0,   0,   0,  56, 
-      0,   0,   0,   1,   0,  44, 
+      0,   0,   0,  52,   8,   0, 
+      0,  68,  88,  66,  67, 202, 
+     83,  22, 204, 207, 151,  51, 
+    179, 174, 132,  82, 181, 125, 
+     14, 145,  73,   1,   0,   0, 
+      0,  52,   8,   0,   0,   6, 
       0,   0,   0,  56,   0,   0, 
-      0,  56,   0,   2,   0,  36, 
-      0,   0,   0,  56,   0,   1, 
-      0,   0,   0,   0,   1,   1, 
-      0,   0,   0,   3,   0,   1, 
-      0,   0,   0,   0,   0,   0, 
-      0,   1,   2, 255, 255,  31, 
-      0,   0,   2,   0,   0,   0, 
-    128,   0,   0,  15, 176,  31, 
-      0,   0,   2,   0,   0,   0, 
-    144,   0,   8,  15, 160,  31, 
-      0,   0,   2,   0,   0,   0, 
-    144,   1,   8,  15, 160,   1, 
-      0,   0,   2,   0,   0,   3, 
-    128,   0,   0, 235, 176,  66, 
+      0,  24,   2,   0,   0, 196, 
+      4,   0,   0,  64,   5,   0, 
+      0, 144,   7,   0,   0,   0, 
+      8,   0,   0,  65, 111, 110, 
+     57, 216,   1,   0,   0, 216, 
+      1,   0,   0,   0,   2, 255, 
+    255, 152,   1,   0,   0,  64, 
+      0,   0,   0,   1,   0,  52, 
+      0,   0,   0,  64,   0,   0, 
+      0,  64,   0,   4,   0,  36, 
+      0,   0,   0,  64,   0,   0, 
+      0,   0,   0,   1,   0,   1, 
+      0,   2,   0,   2,   0,   3, 
+      0,   3,   0,   0,   0,   3, 
+      0,   1,   0,   0,   0,   0, 
+      0,   0,   0,   1,   2, 255, 
+    255,  81,   0,   0,   5,   1, 
+      0,  15, 160,   0,   0,   0, 
+    191,   0,   0, 128, 189, 186, 
+     73, 204,  63, 197,  32,  80, 
+     63,  81,   0,   0,   5,   2, 
+      0,  15, 160, 244, 253, 148, 
+     63, 233,  38,   1,  64,  39, 
+     49, 200,  62,   0,   0, 128, 
+     63,  31,   0,   0,   2,   0, 
+      0,   0, 128,   0,   0,  15, 
+    176,  31,   0,   0,   2,   0, 
+      0,   0, 144,   0,   8,  15, 
+    160,  31,   0,   0,   2,   0, 
+      0,   0, 144,   1,   8,  15, 
+    160,  31,   0,   0,   2,   0, 
+      0,   0, 144,   2,   8,  15, 
+    160,  31,   0,   0,   2,   0, 
+      0,   0, 144,   3,   8,  15, 
+    160,  66,   0,   0,   3,   0, 
+      0,  15, 128,   0,   0, 228, 
+    176,   0,   8, 228, 160,  66, 
       0,   0,   3,   1,   0,  15, 
-    128,   0,   0, 228, 176,   1, 
-      8, 228, 160,  66,   0,   0, 
-      3,   0,   0,  15, 128,   0, 
-      0, 228, 128,   0,   8, 228, 
-    160,   5,   0,   0,   3,   1, 
-      0,   7, 128,   1,   0, 228, 
-    128,   0,   0,   0, 160,   1, 
-      0,   0,   2,   1,   0,   8, 
-    128,   0,   0,   0, 160,   5, 
-      0,   0,   3,   0,   0,  15, 
+    128,   0,   0, 228, 176,   2, 
+      8, 228, 160,   2,   0,   0, 
+      3,   0,   0,   1, 128,   1, 
+      0, 255, 128,   1,   0,   0, 
+    160,   5,   0,   0,   3,   0, 
+      0,   3, 128,   0,   0,   0, 
+    128,   1,   0, 238, 160,   2, 
+      0,   0,   3,   0,   0,   4, 
     128,   0,   0, 255, 128,   1, 
-      0, 228, 128,   1,   0,   0, 
-      2,   0,   8,  15, 128,   0, 
-      0, 228, 128, 255, 255,   0, 
-      0,  83,  72,  68,  82,  28, 
-      1,   0,   0,  64,   0,   0, 
-      0,  71,   0,   0,   0,  89, 
-      0,   0,   4,  70, 142,  32, 
-      0,   0,   0,   0,   0,   4, 
-      0,   0,   0,  90,   0,   0, 
-      3,   0,  96,  16,   0,   0, 
-      0,   0,   0,  90,   0,   0, 
-      3,   0,  96,  16,   0,   1, 
-      0,   0,   0,  88,  24,   0, 
-      4,   0, 112,  16,   0,   0, 
+      0,  85, 160,   4,   0,   0, 
+      4,   0,   0,   2, 128,   0, 
+      0, 170, 128,   2,   0,   0, 
+    160,   0,   0,  85, 129,   4, 
+      0,   0,   4,   1,   0,   1, 
+    128,   0,   0, 170, 128,   2, 
+      0,   0, 160,   0,   0,   0, 
+    128,   1,   0,   0,   2,   2, 
+      0,   3, 128,   0,   0, 235, 
+    176,  66,   0,   0,   3,   3, 
+      0,  15, 128,   0,   0, 228, 
+    176,   1,   8, 228, 160,  66, 
+      0,   0,   3,   2,   0,  15, 
+    128,   2,   0, 228, 128,   3, 
+      8, 228, 160,   2,   0,   0, 
+      3,   0,   0,   1, 128,   3, 
+      0, 255, 128,   1,   0,   0, 
+    160,   4,   0,   0,   4,   1, 
+      0,   2, 128,   0,   0,   0, 
+    128,   2,   0, 170, 161,   0, 
+      0,  85, 128,   5,   0,   0, 
+      3,   0,   0,   1, 128,   0, 
+      0,   0, 128,   2,   0,  85, 
+    160,   4,   0,   0,   4,   1, 
+      0,   4, 128,   0,   0, 170, 
+    128,   2,   0,   0, 160,   0, 
+      0,   0, 128,   1,   0,   0, 
+      2,   1,   0,   8, 128,   2, 
+      0, 255, 160,   5,   0,   0, 
+      3,   0,   0,  15, 128,   1, 
+      0, 228, 128,   0,   0,   0, 
+    160,   5,   0,   0,   3,   0, 
+      0,  15, 128,   2,   0, 255, 
+    128,   0,   0, 228, 128,   1, 
+      0,   0,   2,   0,   8,  15, 
+    128,   0,   0, 228, 128, 255, 
+    255,   0,   0,  83,  72,  68, 
+     82, 164,   2,   0,   0,  64, 
+      0,   0,   0, 169,   0,   0, 
+      0,  89,   0,   0,   4,  70, 
+    142,  32,   0,   0,   0,   0, 
+      0,   4,   0,   0,   0,  90, 
+      0,   0,   3,   0,  96,  16, 
+      0,   0,   0,   0,   0,  88, 
+     24,   0,   4,   0, 112,  16, 
+      0,   0,   0,   0,   0,  85, 
+     85,   0,   0,  88,  24,   0, 
+      4,   0, 112,  16,   0,   1, 
       0,   0,   0,  85,  85,   0, 
       0,  88,  24,   0,   4,   0, 
-    112,  16,   0,   1,   0,   0, 
-      0,  85,  85,   0,   0,  98, 
-     16,   0,   3,  50,  16,  16, 
-      0,   1,   0,   0,   0,  98, 
-     16,   0,   3, 194,  16,  16, 
-      0,   1,   0,   0,   0, 101, 
-      0,   0,   3, 242,  32,  16, 
-      0,   0,   0,   0,   0, 104, 
-      0,   0,   2,   2,   0,   0, 
+    112,  16,   0,   2,   0,   0, 
+      0,  85,  85,   0,   0,  88, 
+     24,   0,   4,   0, 112,  16, 
+      0,   3,   0,   0,   0,  85, 
+     85,   0,   0,  98,  16,   0, 
+      3,  50,  16,  16,   0,   1, 
+      0,   0,   0,  98,  16,   0, 
+      3, 194,  16,  16,   0,   1, 
+      0,   0,   0, 101,   0,   0, 
+      3, 242,  32,  16,   0,   0, 
+      0,   0,   0, 104,   0,   0, 
+      2,   3,   0,   0,   0,  69, 
+      0,   0,   9, 242,   0,  16, 
+      0,   0,   0,   0,   0,  70, 
+     16,  16,   0,   1,   0,   0, 
+      0,  70, 126,  16,   0,   2, 
+      0,   0,   0,   0,  96,  16, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   7,  18,   0,  16, 
+      0,   0,   0,   0,   0,  58, 
+      0,  16,   0,   0,   0,   0, 
+      0,   1,  64,   0,   0,   0, 
+      0,   0, 191,  56,   0,   0, 
+     10,  50,   0,  16,   0,   0, 
+      0,   0,   0,   6,   0,  16, 
+      0,   0,   0,   0,   0,   2, 
+     64,   0,   0, 186,  73, 204, 
+     63, 197,  32,  80,  63,   0, 
+      0,   0,   0,   0,   0,   0, 
       0,  69,   0,   0,   9, 242, 
-      0,  16,   0,   0,   0,   0, 
+      0,  16,   0,   1,   0,   0, 
       0,  70,  16,  16,   0,   1, 
       0,   0,   0,  70, 126,  16, 
       0,   0,   0,   0,   0,   0, 
-     96,  16,   0,   1,   0,   0, 
-      0,  56,   0,   0,   8, 114, 
+     96,  16,   0,   0,   0,   0, 
+      0,   0,   0,   0,   7,  66, 
+      0,  16,   0,   0,   0,   0, 
+      0,  58,   0,  16,   0,   1, 
+      0,   0,   0,   1,  64,   0, 
+      0,   0,   0, 128, 189,  50, 
+      0,   0,  10,  34,   0,  16, 
+      0,   0,   0,   0,   0,  42, 
       0,  16,   0,   0,   0,   0, 
-      0,  70,   2,  16,   0,   0, 
-      0,   0,   0,   6, 128,  32, 
-      0,   0,   0,   0,   0,   3, 
+      0,   1,  64,   0,   0, 244, 
+    253, 148,  63,  26,   0,  16, 
+    128,  65,   0,   0,   0,   0, 
+      0,   0,   0,  50,   0,   0, 
+      9,  18,   0,  16,   0,   1, 
+      0,   0,   0,  42,   0,  16, 
+      0,   0,   0,   0,   0,   1, 
+     64,   0,   0, 244, 253, 148, 
+     63,  10,   0,  16,   0,   0, 
       0,   0,   0,  69,   0,   0, 
-      9, 242,   0,  16,   0,   1, 
-      0,   0,   0, 230,  26,  16, 
+      9, 242,   0,  16,   0,   2, 
+      0,   0,   0,  70,  16,  16, 
       0,   1,   0,   0,   0,  70, 
     126,  16,   0,   1,   0,   0, 
       0,   0,  96,  16,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      7,  18,   0,  16,   0,   0, 
+      0,   0,   0,  58,   0,  16, 
+      0,   2,   0,   0,   0,   1, 
+     64,   0,   0,   0,   0,   0, 
+    191,  50,   0,   0,  10,  34, 
+      0,  16,   0,   1,   0,   0, 
+      0,  10,   0,  16, 128,  65, 
+      0,   0,   0,   0,   0,   0, 
+      0,   1,  64,   0,   0,  39, 
+     49, 200,  62,  26,   0,  16, 
+      0,   0,   0,   0,   0,  56, 
+      0,   0,   7,  18,   0,  16, 
+      0,   0,   0,   0,   0,  10, 
+      0,  16,   0,   0,   0,   0, 
+      0,   1,  64,   0,   0, 233, 
+     38,   1,  64,  50,   0,   0, 
+      9,  66,   0,  16,   0,   1, 
+      0,   0,   0,  42,   0,  16, 
+      0,   0,   0,   0,   0,   1, 
+     64,   0,   0, 244, 253, 148, 
+     63,  10,   0,  16,   0,   0, 
       0,   0,   0,  54,   0,   0, 
-      6, 130,   0,  16,   0,   0, 
-      0,   0,   0,  10, 128,  32, 
+      5, 130,   0,  16,   0,   1, 
+      0,   0,   0,   1,  64,   0, 
+      0,   0,   0, 128,  63,  56, 
+      0,   0,   8, 242,   0,  16, 
+      0,   0,   0,   0,   0,  70, 
+     14,  16,   0,   1,   0,   0, 
+      0,   6, 128,  32,   0,   0, 
+      0,   0,   0,   3,   0,   0, 
+      0,  69,   0,   0,   9, 242, 
+      0,  16,   0,   1,   0,   0, 
+      0, 230,  26,  16,   0,   1, 
+      0,   0,   0,  70, 126,  16, 
+      0,   3,   0,   0,   0,   0, 
+     96,  16,   0,   0,   0,   0, 
+      0,  56,   0,   0,   7, 242, 
+     32,  16,   0,   0,   0,   0, 
+      0,  70,  14,  16,   0,   0, 
+      0,   0,   0, 246,  15,  16, 
+      0,   1,   0,   0,   0,  62, 
+      0,   0,   1,  83,  84,  65, 
+     84, 116,   0,   0,   0,  17, 
+      0,   0,   0,   3,   0,   0, 
       0,   0,   0,   0,   0,   3, 
-      0,   0,   0,  56,   0,   0, 
-      7, 242,  32,  16,   0,   0, 
-      0,   0,   0,  70,  14,  16, 
-      0,   0,   0,   0,   0, 246, 
-     15,  16,   0,   1,   0,   0, 
-      0,  62,   0,   0,   1,  83, 
-     84,  65,  84, 116,   0,   0, 
-      0,   6,   0,   0,   0,   2, 
-      0,   0,   0,   0,   0,   0, 
-      0,   3,   0,   0,   0,   2, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   1, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   2,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   1, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,  82,  68,  69, 
-     70,  60,   2,   0,   0,   1, 
-      0,   0,   0,   4,   1,   0, 
-      0,   5,   0,   0,   0,  28, 
-      0,   0,   0,   0,   4, 255, 
-    255,   0,   1,   0,   0,   8, 
-      2,   0,   0, 188,   0,   0, 
-      0,   3,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   1,   0,   0, 
-      0,   0,   0,   0,   0, 214, 
-      0,   0,   0,   3,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   1,   0,   0,   0,   1, 
-      0,   0,   0,   0,   0,   0, 
-      0, 239,   0,   0,   0,   2, 
+      0,   0,   0,   7,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   1,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   4,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   1,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,  82,  68,  69,  70,  72, 
+      2,   0,   0,   1,   0,   0, 
+      0,  16,   1,   0,   0,   6, 
+      0,   0,   0,  28,   0,   0, 
+      0,   0,   4, 255, 255,   0, 
+      1,   0,   0,  20,   2,   0, 
+      0, 220,   0,   0,   0,   3, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   0,   0,   0,   0,   0, 
+      0,   1,   0,   0,   0,   0, 
+      0,   0,   0, 246,   0,   0, 
+      0,   2,   0,   0,   0,   5, 
+      0,   0,   0,   4,   0,   0, 
+      0, 255, 255, 255, 255,   0, 
+      0,   0,   0,   1,   0,   0, 
+      0,  12,   0,   0,   0, 249, 
+      0,   0,   0,   2,   0,   0, 
+      0,   5,   0,   0,   0,   4, 
+      0,   0,   0, 255, 255, 255, 
+    255,   1,   0,   0,   0,   1, 
+      0,   0,   0,  12,   0,   0, 
+      0, 253,   0,   0,   0,   2, 
       0,   0,   0,   5,   0,   0, 
       0,   4,   0,   0,   0, 255, 
-    255, 255, 255,   0,   0,   0, 
+    255, 255, 255,   2,   0,   0, 
       0,   1,   0,   0,   0,  12, 
-      0,   0,   0, 244,   0,   0, 
+      0,   0,   0,   1,   1,   0, 
       0,   2,   0,   0,   0,   5, 
       0,   0,   0,   4,   0,   0, 
-      0, 255, 255, 255, 255,   1, 
-      0,   0,   0,   1,   0,   0, 
-      0,  12,   0,   0,   0, 250, 
-      0,   0,   0,   0,   0,   0, 
+      0, 255, 255, 255, 255,   3, 
+      0,   0,   0,   1,   0,   0, 
+      0,  12,   0,   0,   0,   7, 
+      1,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   0, 
       0,   0,   0,   0,   0,   1, 
       0,   0,   0,   0,   0,   0, 
       0,  76,  97, 121, 101, 114, 
      84, 101, 120, 116, 117, 114, 
     101,  83,  97, 109, 112, 108, 
     101, 114,  76, 105, 110, 101, 
-     97, 114,   0,  76,  97, 121, 
-    101, 114,  84, 101, 120, 116, 
-    117, 114, 101,  83,  97, 109, 
-    112, 108, 101, 114,  80, 111, 
-    105, 110, 116,   0, 116,  82, 
-     71,  66,   0, 116,  77,  97, 
-    115, 107,   0,  80, 101, 114, 
-     76,  97, 121, 101, 114,   0, 
-    171, 250,   0,   0,   0,   5, 
-      0,   0,   0,  28,   1,   0, 
-      0, 128,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0, 148,   1,   0,   0,   0, 
-      0,   0,   0,  16,   0,   0, 
-      0,   0,   0,   0,   0, 164, 
-      1,   0,   0,   0,   0,   0, 
-      0, 180,   1,   0,   0,  16, 
-      0,   0,   0,  16,   0,   0, 
-      0,   0,   0,   0,   0, 164, 
-      1,   0,   0,   0,   0,   0, 
-      0, 191,   1,   0,   0,  32, 
-      0,   0,   0,  16,   0,   0, 
-      0,   0,   0,   0,   0, 164, 
-      1,   0,   0,   0,   0,   0, 
-      0, 201,   1,   0,   0,  48, 
-      0,   0,   0,   4,   0,   0, 
-      0,   2,   0,   0,   0, 216, 
-      1,   0,   0,   0,   0,   0, 
-      0, 232,   1,   0,   0,  64, 
-      0,   0,   0,  64,   0,   0, 
-      0,   0,   0,   0,   0, 248, 
-      1,   0,   0,   0,   0,   0, 
-      0, 118,  84, 101, 120, 116, 
-    117, 114, 101,  67, 111, 111, 
-    114, 100, 115,   0, 171,   1, 
-      0,   3,   0,   1,   0,   4, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0, 118,  76,  97, 
-    121, 101, 114,  81, 117,  97, 
-    100,   0, 118,  77,  97, 115, 
-    107,  81, 117,  97, 100,   0, 
-    102,  76,  97, 121, 101, 114, 
-     79, 112,  97,  99, 105, 116, 
-    121,   0, 171,   0,   0,   3, 
-      0,   1,   0,   1,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0, 109,  76,  97, 121, 101, 
-    114,  84, 114,  97, 110, 115, 
-    102, 111, 114, 109,   0,   3, 
-      0,   3,   0,   4,   0,   4, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,  77, 105,  99, 
-    114, 111, 115, 111, 102, 116, 
-     32,  40,  82,  41,  32,  72, 
-     76,  83,  76,  32,  83, 104, 
-     97, 100, 101, 114,  32,  67, 
-    111, 109, 112, 105, 108, 101, 
-    114,  32,  57,  46,  50,  57, 
-     46,  57,  53,  50,  46,  51, 
-     49,  49,  49,   0, 171, 171, 
-    171,  73,  83,  71,  78, 104, 
-      0,   0,   0,   3,   0,   0, 
-      0,   8,   0,   0,   0,  80, 
-      0,   0,   0,   0,   0,   0, 
-      0,   1,   0,   0,   0,   3, 
-      0,   0,   0,   0,   0,   0, 
-      0,  15,   0,   0,   0,  92, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   3, 
-      0,   0,   0,   1,   0,   0, 
-      0,   3,   3,   0,   0,  92, 
-      0,   0,   0,   1,   0,   0, 
-      0,   0,   0,   0,   0,   3, 
-      0,   0,   0,   1,   0,   0, 
-      0,  12,  12,   0,   0,  83, 
-     86,  95,  80, 111, 115, 105, 
-    116, 105, 111, 110,   0,  84, 
-     69,  88,  67,  79,  79,  82, 
-     68,   0, 171, 171, 171,  79, 
-     83,  71,  78,  44,   0,   0, 
-      0,   1,   0,   0,   0,   8, 
-      0,   0,   0,  32,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   3,   0,   0, 
-      0,   0,   0,   0,   0,  15, 
-      0,   0,   0,  83,  86,  95, 
-     84,  97, 114, 103, 101, 116, 
-      0, 171, 171,  29, 151,   0, 
-      0,   0,   0,   0,   0,  82, 
-    101, 110, 100, 101, 114,  82, 
-     71,  66,  65,  76,  97, 121, 
-    101, 114,  80, 114, 101, 109, 
-    117, 108,  77,  97, 115, 107, 
-      0,   4,   0,   0,   0,   1, 
-      0,   0,   0,   0,   0,   0, 
-      0,   1,   0,   0,   0,   0, 
-      0,   0,   0,   1,   0,   0, 
-      0,   0,   0,   0,   0,   1, 
-      0,   0,   0,   0,   0,   0, 
-      0,   1,   0,   0,   0,   3, 
-      0,   0,   0, 255, 255, 255, 
-    255,  76,   8,   0,   0,  68, 
-     88,  66,  67, 169, 150, 145, 
-    216, 234,  78, 253,  86,  77, 
-     68,   6, 212, 187, 231, 104, 
-     78,   1,   0,   0,   0,  76, 
-      8,   0,   0,   6,   0,   0, 
-      0,  56,   0,   0,   0,   4, 
-      2,   0,   0, 144,   4,   0, 
-      0,  12,   5,   0,   0, 168, 
-      7,   0,   0, 220,   7,   0, 
-      0,  65, 111, 110,  57, 196, 
-      1,   0,   0, 196,   1,   0, 
-      0,   0,   2, 254, 255,  96, 
-      1,   0,   0, 100,   0,   0, 
-      0,   5,   0,  36,   0,   0, 
-      0,  96,   0,   0,   0,  96, 
-      0,   0,   0,  36,   0,   1, 
-      0,  96,   0,   0,   0,   0, 
-      0,   3,   0,   1,   0,   0, 
-      0,   0,   0,   0,   0,   4, 
-      0,   2,   0,   4,   0,   0, 
-      0,   0,   0,   0,   0,   7, 
-      0,   1,   0,   6,   0,   0, 
-      0,   0,   0,   1,   0,   0, 
-      0,   1,   0,   7,   0,   0, 
-      0,   0,   0,   2,   0,   0, 
-      0,   4,   0,   8,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   1,   2, 254, 255,  31, 
-      0,   0,   2,   5,   0,   0, 
-    128,   0,   0,  15, 144,   6, 
-      0,   0,   2,   0,   0,   1, 
-    128,   3,   0, 170, 160,   4, 
-      0,   0,   4,   0,   0,   6, 
-    128,   0,   0, 208, 144,   2, 
-      0, 248, 160,   2,   0, 208, 
-    160,   5,   0,   0,   3,   1, 
-      0,  15, 128,   0,   0, 170, 
-    128,   5,   0, 228, 160,   4, 
-      0,   0,   4,   1,   0,  15, 
-    128,   4,   0, 228, 160,   0, 
-      0,  85, 128,   1,   0, 228, 
-    128,   2,   0,   0,   3,   1, 
-      0,  15, 128,   1,   0, 228, 
-    128,   6,   0, 228, 160,   2, 
-      0,   0,   3,   0,   0,   6, 
-    128,   1,   0, 208, 128,   3, 
-      0, 208, 161,   5,   0,   0, 
-      3,   0,   0,   8, 224,   0, 
-      0,   0, 128,   0,   0,  85, 
-    128,   6,   0,   0,   2,   0, 
-      0,   1, 128,   3,   0, 255, 
-    160,   5,   0,   0,   3,   0, 
-      0,   4, 224,   0,   0,   0, 
-    128,   0,   0, 170, 128,   4, 
-      0,   0,   4,   0,   0,   3, 
-    224,   0,   0, 228, 144,   1, 
-      0, 238, 160,   1,   0, 228, 
-    160,   6,   0,   0,   2,   0, 
-      0,   1, 128,   1,   0, 255, 
-    128,   5,   0,   0,   3,   1, 
-      0,   7, 128,   0,   0,   0, 
-    128,   1,   0, 228, 128,   2, 
-      0,   0,   3,   0,   0,  15, 
-    128,   1,   0, 228, 128,   7, 
-      0, 228, 161,   5,   0,   0, 
-      3,   0,   0,   7, 128,   0, 
-      0, 255, 128,   0,   0, 228, 
-    128,   5,   0,   0,   3,   1, 
-      0,  15, 128,   0,   0,  85, 
-    128,   9,   0, 228, 160,   4, 
-      0,   0,   4,   1,   0,  15, 
-    128,   8,   0, 228, 160,   0, 
-      0,   0, 128,   1,   0, 228, 
-    128,   4,   0,   0,   4,   1, 
-      0,  15, 128,  10,   0, 228, 
-    160,   0,   0, 170, 128,   1, 
-      0, 228, 128,   4,   0,   0, 
-      4,   0,   0,  15, 128,  11, 
-      0, 228, 160,   0,   0, 255, 
-    128,   1,   0, 228, 128,   4, 
-      0,   0,   4,   0,   0,   3, 
-    192,   0,   0, 255, 128,   0, 
-      0, 228, 160,   0,   0, 228, 
-    128,   1,   0,   0,   2,   0, 
-      0,  12, 192,   0,   0, 228, 
-    128, 255, 255,   0,   0,  83, 
-     72,  68,  82, 132,   2,   0, 
-      0,  64,   0,   1,   0, 161, 
-      0,   0,   0,  89,   0,   0, 
-      4,  70, 142,  32,   0,   0, 
-      0,   0,   0,   8,   0,   0, 
-      0,  89,   0,   0,   4,  70, 
-    142,  32,   0,   1,   0,   0, 
-      0,   1,   0,   0,   0,  89, 
-      0,   0,   4,  70, 142,  32, 
-      0,   2,   0,   0,   0,   4, 
-      0,   0,   0,  95,   0,   0, 
-      3,  50,  16,  16,   0,   0, 
-      0,   0,   0, 103,   0,   0, 
-      4, 242,  32,  16,   0,   0, 
-      0,   0,   0,   1,   0,   0, 
-      0, 101,   0,   0,   3,  50, 
-     32,  16,   0,   1,   0,   0, 
-      0, 101,   0,   0,   3, 194, 
-     32,  16,   0,   1,   0,   0, 
-      0, 104,   0,   0,   2,   2, 
-      0,   0,   0,  50,   0,   0, 
-     11,  50,   0,  16,   0,   0, 
-      0,   0,   0,  70,  16,  16, 
-      0,   0,   0,   0,   0, 230, 
-    138,  32,   0,   0,   0,   0, 
-      0,   1,   0,   0,   0,  70, 
-    128,  32,   0,   0,   0,   0, 
-      0,   1,   0,   0,   0,  56, 
-      0,   0,   8, 242,   0,  16, 
-      0,   1,   0,   0,   0,  86, 
-      5,  16,   0,   0,   0,   0, 
-      0,  70, 142,  32,   0,   0, 
-      0,   0,   0,   5,   0,   0, 
-      0,  50,   0,   0,  10, 242, 
-      0,  16,   0,   0,   0,   0, 
-      0,  70, 142,  32,   0,   0, 
-      0,   0,   0,   4,   0,   0, 
-      0,   6,   0,  16,   0,   0, 
-      0,   0,   0,  70,  14,  16, 
-      0,   1,   0,   0,   0,   0, 
-      0,   0,   8, 242,   0,  16, 
-      0,   0,   0,   0,   0,  70, 
-     14,  16,   0,   0,   0,   0, 
-      0,  70, 142,  32,   0,   0, 
-      0,   0,   0,   7,   0,   0, 
-      0,  14,   0,   0,   7, 114, 
-      0,  16,   0,   1,   0,   0, 
-      0,  70,   2,  16,   0,   0, 
-      0,   0,   0, 246,  15,  16, 
-      0,   0,   0,   0,   0,  54, 
-      0,   0,   5, 130,   0,  16, 
-      0,   1,   0,   0,   0,  58, 
-      0,  16,   0,   0,   0,   0, 
-      0,   0,   0,   0,   9,  50, 
-      0,  16,   0,   0,   0,   0, 
-      0,  70,   0,  16,   0,   0, 
-      0,   0,   0,  70, 128,  32, 
-    128,  65,   0,   0,   0,   0, 
-      0,   0,   0,   2,   0,   0, 
-      0,  14,   0,   0,   8, 194, 
-     32,  16,   0,   1,   0,   0, 
-      0,   6,   4,  16,   0,   0, 
-      0,   0,   0, 166, 142,  32, 
-      0,   0,   0,   0,   0,   2, 
-      0,   0,   0,   0,   0,   0, 
-      9, 242,   0,  16,   0,   0, 
-      0,   0,   0,  70,  14,  16, 
-      0,   1,   0,   0,   0,  70, 
-    142,  32, 128,  65,   0,   0, 
-      0,   1,   0,   0,   0,   0, 
-      0,   0,   0,  56,   0,   0, 
-      7, 114,   0,  16,   0,   0, 
-      0,   0,   0, 246,  15,  16, 
-      0,   0,   0,   0,   0,  70, 
-      2,  16,   0,   0,   0,   0, 
-      0,  56,   0,   0,   8, 242, 
-      0,  16,   0,   1,   0,   0, 
-      0,  86,   5,  16,   0,   0, 
-      0,   0,   0,  70, 142,  32, 
-      0,   2,   0,   0,   0,   1, 
-      0,   0,   0,  50,   0,   0, 
-     10, 242,   0,  16,   0,   1, 
-      0,   0,   0,  70, 142,  32, 
-      0,   2,   0,   0,   0,   0, 
-      0,   0,   0,   6,   0,  16, 
-      0,   0,   0,   0,   0,  70, 
-     14,  16,   0,   1,   0,   0, 
-      0,  50,   0,   0,  10, 242, 
-      0,  16,   0,   1,   0,   0, 
-      0,  70, 142,  32,   0,   2, 
-      0,   0,   0,   2,   0,   0, 
-      0, 166,  10,  16,   0,   0, 
-      0,   0,   0,  70,  14,  16, 
-      0,   1,   0,   0,   0,  50, 
-      0,   0,  10, 242,  32,  16, 
-      0,   0,   0,   0,   0,  70, 
-    142,  32,   0,   2,   0,   0, 
-      0,   3,   0,   0,   0, 246, 
-     15,  16,   0,   0,   0,   0, 
-      0,  70,  14,  16,   0,   1, 
-      0,   0,   0,  50,   0,   0, 
-     11,  50,  32,  16,   0,   1, 
-      0,   0,   0,  70,  16,  16, 
-      0,   0,   0,   0,   0, 230, 
-    138,  32,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,  70, 
-    128,  32,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,  62, 
-      0,   0,   1,  83,  84,  65, 
-     84, 116,   0,   0,   0,  16, 
-      0,   0,   0,   2,   0,   0, 
-      0,   0,   0,   0,   0,   4, 
-      0,   0,   0,   8,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   1,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   1,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,  82,  68,  69,  70, 148, 
-      2,   0,   0,   3,   0,   0, 
-      0, 168,   0,   0,   0,   3, 
-      0,   0,   0,  28,   0,   0, 
-      0,   0,   4, 254, 255,   0, 
-      1,   0,   0,  96,   2,   0, 
-      0, 124,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   1,   0,   0,   0,   0, 
-      0,   0,   0, 133,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   1, 
-      0,   0,   0,   1,   0,   0, 
-      0,   0,   0,   0,   0, 152, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   2,   0,   0,   0,   1, 
-      0,   0,   0,   0,   0,   0, 
-      0,  80, 101, 114,  76,  97, 
-    121, 101, 114,   0,  80, 101, 
-    114,  79,  99,  99,  97, 115, 
-    105, 111, 110,  97, 108,  76, 
-     97, 121, 101, 114,   0,  80, 
-    101, 114,  76,  97, 121, 101, 
-    114,  77,  97, 110,  97, 103, 
-    101, 114,   0, 124,   0,   0, 
-      0,   5,   0,   0,   0, 240, 
-      0,   0,   0, 128,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0, 133,   0,   0, 
-      0,   2,   0,   0,   0, 220, 
-      1,   0,   0,  32,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0, 152,   0,   0, 
-      0,   1,   0,   0,   0,  60, 
-      2,   0,   0,  64,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0, 104,   1,   0, 
-      0,   0,   0,   0,   0,  16, 
-      0,   0,   0,   2,   0,   0, 
-      0, 120,   1,   0,   0,   0, 
-      0,   0,   0, 136,   1,   0, 
-      0,  16,   0,   0,   0,  16, 
-      0,   0,   0,   2,   0,   0, 
-      0, 120,   1,   0,   0,   0, 
-      0,   0,   0, 147,   1,   0, 
-      0,  32,   0,   0,   0,  16, 
-      0,   0,   0,   2,   0,   0, 
-      0, 120,   1,   0,   0,   0, 
-      0,   0,   0, 157,   1,   0, 
-      0,  48,   0,   0,   0,   4, 
-      0,   0,   0,   0,   0,   0, 
-      0, 172,   1,   0,   0,   0, 
-      0,   0,   0, 188,   1,   0, 
-      0,  64,   0,   0,   0,  64, 
-      0,   0,   0,   2,   0,   0, 
-      0, 204,   1,   0,   0,   0, 
-      0,   0,   0, 118,  84, 101, 
-    120, 116, 117, 114, 101,  67, 
-    111, 111, 114, 100, 115,   0, 
-    171,   1,   0,   3,   0,   1, 
-      0,   4,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0, 118, 
-     76,  97, 121, 101, 114,  81, 
-    117,  97, 100,   0, 118,  77, 
-     97, 115, 107,  81, 117,  97, 
-    100,   0, 102,  76,  97, 121, 
-    101, 114,  79, 112,  97,  99, 
-    105, 116, 121,   0, 171,   0, 
-      0,   3,   0,   1,   0,   1, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0, 109,  76,  97, 
-    121, 101, 114,  84, 114,  97, 
-    110, 115, 102, 111, 114, 109, 
-      0,   3,   0,   3,   0,   4, 
-      0,   4,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,  12, 
-      2,   0,   0,   0,   0,   0, 
-      0,  16,   0,   0,   0,   2, 
-      0,   0,   0,  32,   2,   0, 
-      0,   0,   0,   0,   0,  48, 
-      2,   0,   0,  16,   0,   0, 
-      0,  16,   0,   0,   0,   0, 
-      0,   0,   0,  32,   2,   0, 
-      0,   0,   0,   0,   0, 118, 
-     82, 101, 110, 100, 101, 114, 
-     84,  97, 114, 103, 101, 116, 
-     79, 102, 102, 115, 101, 116, 
-      0,   1,   0,   3,   0,   1, 
-      0,   4,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0, 102, 
-     76,  97, 121, 101, 114,  67, 
-    111, 108, 111, 114,   0,  84, 
-      2,   0,   0,   0,   0,   0, 
-      0,  64,   0,   0,   0,   2, 
-      0,   0,   0, 204,   1,   0, 
-      0,   0,   0,   0,   0, 109, 
-     80, 114, 111, 106, 101,  99, 
-    116, 105, 111, 110,   0,  77, 
-    105,  99, 114, 111, 115, 111, 
-    102, 116,  32,  40,  82,  41, 
-     32,  72,  76,  83,  76,  32, 
-     83, 104,  97, 100, 101, 114, 
-     32,  67, 111, 109, 112, 105, 
-    108, 101, 114,  32,  57,  46, 
-     50,  57,  46,  57,  53,  50, 
-     46,  51,  49,  49,  49,   0, 
-    171, 171, 171,  73,  83,  71, 
-     78,  44,   0,   0,   0,   1, 
-      0,   0,   0,   8,   0,   0, 
-      0,  32,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   0, 
-      0,   3,   0,   0,   0,   0, 
-      0,   0,   0,   3,   3,   0, 
-      0,  80,  79,  83,  73,  84, 
-     73,  79,  78,   0, 171, 171, 
-    171,  79,  83,  71,  78, 104, 
-      0,   0,   0,   3,   0,   0, 
-      0,   8,   0,   0,   0,  80, 
-      0,   0,   0,   0,   0,   0, 
-      0,   1,   0,   0,   0,   3, 
-      0,   0,   0,   0,   0,   0, 
-      0,  15,   0,   0,   0,  92, 
-      0,   0,   0,   0,   0,   0, 
-      0,   0,   0,   0,   0,   3, 
-      0,   0,   0,   1,   0,   0, 
-      0,   3,  12,   0,   0,  92, 
-      0,   0,   0,   1,   0,   0, 
-      0,   0,   0,   0,   0,   3, 
-      0,   0,   0,   1,   0,   0, 
-      0,  12,   3,   0,   0,  83, 
-     86,  95,  80, 111, 115, 105, 
-    116, 105, 111, 110,   0,  84, 
-     69,  88,  67,  79,  79,  82, 
-     68,   0, 171, 171, 171,   3, 
-    157,   0,   0,   0,   0,   0, 
-      0,   1,   0,   0,   0,   2, 
-      0,   0,   0,   0,   0,   0, 
-      0,  40,   5,   0,   0,  68, 
-     88,  66,  67,  97,  73, 247, 
-    126,   8, 101, 119, 242, 175, 
-    221, 216, 116,   1, 172, 160, 
-    250,   1,   0,   0,   0,  40, 
-      5,   0,   0,   6,   0,   0,