From 767cc9f866f205121b3573e2f2cb59e7bd38204e Mon Sep 17 00:00:00 2001 From: Jonathan Watt Date: Tue, 29 Apr 2014 00:26:53 +0100 Subject: [PATCH 01/30] Bug 1001682 - Don't reverse the R and B components in the GL CopyDataSourceSurface code for SurfaceFormat::R5G6B5. r=mattwoodrow --- gfx/gl/GLReadTexImageHelper.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/gfx/gl/GLReadTexImageHelper.cpp b/gfx/gl/GLReadTexImageHelper.cpp index 3462b7eb8bb..d6efc0231eb 100644 --- a/gfx/gl/GLReadTexImageHelper.cpp +++ b/gfx/gl/GLReadTexImageHelper.cpp @@ -262,8 +262,7 @@ static void CopyDataSourceSurface(DataSourceSurface* aSource, bool needsRBSwap = false; if (aDest->GetFormat() == SurfaceFormat::B8G8R8A8 || - aDest->GetFormat() == SurfaceFormat::B8G8R8X8 || - aDest->GetFormat() == SurfaceFormat::R5G6B5) { + aDest->GetFormat() == SurfaceFormat::B8G8R8X8) { needsRBSwap = true; } From 83ce05a1ecc58f94eb37c45a5ba6762229db78e9 Mon Sep 17 00:00:00 2001 From: Jonathan Watt Date: Tue, 29 Apr 2014 00:26:54 +0100 Subject: [PATCH 02/30] Bug 1001683 - Convert a bunch of ReadPixelsIntoImageSurface callers to ReadPixelsIntoDataSurface callers (Moz2D migration). r=mattwoodrow --- gfx/gl/GLReadTexImageHelper.cpp | 4 +-- gfx/gl/GLReadTexImageHelper.h | 2 ++ gfx/gl/GLScreenBuffer.cpp | 51 ++++++++++------------------- gfx/gl/GLScreenBuffer.h | 1 - gfx/gl/SharedSurfaceGL.cpp | 12 +------ gfx/layers/opengl/CompositorOGL.cpp | 11 +------ 6 files changed, 24 insertions(+), 57 deletions(-) diff --git a/gfx/gl/GLReadTexImageHelper.cpp b/gfx/gl/GLReadTexImageHelper.cpp index d6efc0231eb..3b5873e0456 100644 --- a/gfx/gl/GLReadTexImageHelper.cpp +++ b/gfx/gl/GLReadTexImageHelper.cpp @@ -507,7 +507,7 @@ ReadPixelsIntoImageSurface(GLContext* gl, gfxImageSurface* dest) { } void -ReadPixelsIntoDataSourceSurface(GLContext* gl, DataSourceSurface* dest) { +ReadPixelsIntoDataSurface(GLContext* gl, DataSourceSurface* dest) { gl->MakeCurrent(); MOZ_ASSERT(dest->GetSize().width != 0); MOZ_ASSERT(dest->GetSize().height != 0); @@ -838,7 +838,7 @@ GLReadTexImageHelper::ReadTexImage(GLuint aTextureId, mGL->fDisableVertexAttribArray(0); /* Read-back draw results */ - ReadPixelsIntoDataSourceSurface(mGL, isurf); + ReadPixelsIntoDataSurface(mGL, isurf); CLEANUP_IF_GLERROR_OCCURRED("when reading pixels into surface"); } while (false); diff --git a/gfx/gl/GLReadTexImageHelper.h b/gfx/gl/GLReadTexImageHelper.h index d1b209ab106..29d0017a9c1 100644 --- a/gfx/gl/GLReadTexImageHelper.h +++ b/gfx/gl/GLReadTexImageHelper.h @@ -24,6 +24,8 @@ class DataSourceSurface; namespace gl { +void ReadPixelsIntoDataSurface(GLContext* aGL, + gfx::DataSourceSurface* aSurface); void ReadPixelsIntoImageSurface(GLContext* aGL, gfxImageSurface* aSurface); void ReadScreenIntoImageSurface(GLContext* aGL, gfxImageSurface* aSurface); diff --git a/gfx/gl/GLScreenBuffer.cpp b/gfx/gl/GLScreenBuffer.cpp index 432bdbccc90..7704e9212a9 100755 --- a/gfx/gl/GLScreenBuffer.cpp +++ b/gfx/gl/GLScreenBuffer.cpp @@ -482,45 +482,30 @@ void GLScreenBuffer::Readback(SharedSurface_GL* src, DataSourceSurface* dest) { MOZ_ASSERT(src && dest); - DataSourceSurface::MappedSurface ms; - dest->Map(DataSourceSurface::MapType::READ, &ms); - nsRefPtr wrappedDest = - new gfxImageSurface(ms.mData, - ThebesIntSize(dest->GetSize()), - ms.mStride, - SurfaceFormatToImageFormat(dest->GetFormat())); - DeprecatedReadback(src, wrappedDest); - dest->Unmap(); -} + MOZ_ASSERT(dest->GetSize() == src->Size()); + MOZ_ASSERT(dest->GetFormat() == (src->HasAlpha() ? SurfaceFormat::B8G8R8A8 + : SurfaceFormat::B8G8R8X8)); -void -GLScreenBuffer::DeprecatedReadback(SharedSurface_GL* src, gfxImageSurface* dest) -{ - MOZ_ASSERT(src && dest); - MOZ_ASSERT(ToIntSize(dest->GetSize()) == src->Size()); - MOZ_ASSERT(dest->Format() == (src->HasAlpha() ? gfxImageFormat::ARGB32 - : gfxImageFormat::RGB24)); + mGL->MakeCurrent(); - mGL->MakeCurrent(); + bool needsSwap = src != SharedSurf(); + if (needsSwap) { + SharedSurf()->UnlockProd(); + src->LockProd(); + } - bool needsSwap = src != SharedSurf(); - if (needsSwap) { - SharedSurf()->UnlockProd(); - src->LockProd(); - } + ReadBuffer* buffer = CreateRead(src); + MOZ_ASSERT(buffer); - ReadBuffer* buffer = CreateRead(src); - MOZ_ASSERT(buffer); + ScopedBindFramebuffer autoFB(mGL, buffer->FB()); + ReadPixelsIntoDataSurface(mGL, dest); - ScopedBindFramebuffer autoFB(mGL, buffer->FB()); - ReadPixelsIntoImageSurface(mGL, dest); + delete buffer; - delete buffer; - - if (needsSwap) { - src->UnlockProd(); - SharedSurf()->LockProd(); - } + if (needsSwap) { + src->UnlockProd(); + SharedSurf()->LockProd(); + } } DrawBuffer* diff --git a/gfx/gl/GLScreenBuffer.h b/gfx/gl/GLScreenBuffer.h index d899eba5f18..6324000c1aa 100644 --- a/gfx/gl/GLScreenBuffer.h +++ b/gfx/gl/GLScreenBuffer.h @@ -280,7 +280,6 @@ public: bool Resize(const gfx::IntSize& size); void Readback(SharedSurface_GL* src, gfx::DataSourceSurface* dest); - void DeprecatedReadback(SharedSurface_GL* src, gfxImageSurface* dest); protected: void Attach(SharedSurface* surface, const gfx::IntSize& size); diff --git a/gfx/gl/SharedSurfaceGL.cpp b/gfx/gl/SharedSurfaceGL.cpp index 1aab56f26a2..b701b1275e0 100644 --- a/gfx/gl/SharedSurfaceGL.cpp +++ b/gfx/gl/SharedSurfaceGL.cpp @@ -322,18 +322,8 @@ void SharedSurface_Basic::Fence() { mGL->MakeCurrent(); - ScopedBindFramebuffer autoFB(mGL, mFB); - - DataSourceSurface::MappedSurface map; - mData->Map(DataSourceSurface::MapType::WRITE, &map); - nsRefPtr wrappedData = - new gfxImageSurface(map.mData, - ThebesIntSize(mData->GetSize()), - map.mStride, - SurfaceFormatToImageFormat(mData->GetFormat())); - ReadPixelsIntoImageSurface(mGL, wrappedData); - mData->Unmap(); + ReadPixelsIntoDataSurface(mGL, mData); } diff --git a/gfx/layers/opengl/CompositorOGL.cpp b/gfx/layers/opengl/CompositorOGL.cpp index e7fec971212..c3f157a6f7e 100644 --- a/gfx/layers/opengl/CompositorOGL.cpp +++ b/gfx/layers/opengl/CompositorOGL.cpp @@ -1328,16 +1328,7 @@ CompositorOGL::CopyToTarget(DrawTarget *aTarget, const gfx::Matrix& aTransform) RefPtr source = Factory::CreateDataSourceSurface(rect.Size(), gfx::SurfaceFormat::B8G8R8A8); - DataSourceSurface::MappedSurface map; - source->Map(DataSourceSurface::MapType::WRITE, &map); - // XXX we should do this properly one day without using the gfxImageSurface - nsRefPtr surf = - new gfxImageSurface(map.mData, - gfxIntSize(width, height), - map.mStride, - gfxImageFormat::ARGB32); - ReadPixelsIntoImageSurface(mGLContext, surf); - source->Unmap(); + ReadPixelsIntoDataSurface(mGLContext, source); // Map from GL space to Cairo space and reverse the world transform. Matrix glToCairoTransform = aTransform; From bf9be364db9c134bfeb60f995d96becd80aea0e2 Mon Sep 17 00:00:00 2001 From: Chris Peterson Date: Fri, 18 Apr 2014 00:24:04 -0700 Subject: [PATCH 03/30] Bug 880329 - Remove ES3-only SyntaxError for do-while without semicolon. r=jorendorff --- js/src/frontend/Parser.cpp | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/js/src/frontend/Parser.cpp b/js/src/frontend/Parser.cpp index 538ebb30493..cabb211a464 100644 --- a/js/src/frontend/Parser.cpp +++ b/js/src/frontend/Parser.cpp @@ -3994,20 +3994,12 @@ Parser::doWhileStatement() return null(); PopStatementPC(tokenStream, pc); - if (versionNumber() == JSVERSION_ECMA_3) { - // Pedantically require a semicolon or line break, following ES3. - // Bug 880329 proposes removing this case. - if (!MatchOrInsertSemicolon(tokenStream)) - return null(); - } else { - // The semicolon after do-while is even more optional than most - // semicolons in JS. Web compat required this by 2004: - // http://bugzilla.mozilla.org/show_bug.cgi?id=238945 - // ES3 and ES5 disagreed, but ES6 conforms to Web reality: - // https://bugs.ecmascript.org/show_bug.cgi?id=157 - (void) tokenStream.matchToken(TOK_SEMI); - } - + // The semicolon after do-while is even more optional than most + // semicolons in JS. Web compat required this by 2004: + // http://bugzilla.mozilla.org/show_bug.cgi?id=238945 + // ES3 and ES5 disagreed, but ES6 conforms to Web reality: + // https://bugs.ecmascript.org/show_bug.cgi?id=157 + tokenStream.matchToken(TOK_SEMI); return handler.newDoWhileStatement(body, cond, TokenPos(begin, pos().end)); } From 7de537bcf05d6e1248181ddf1bd54af962f08ce2 Mon Sep 17 00:00:00 2001 From: Chris Peterson Date: Sun, 27 Apr 2014 18:56:46 -0700 Subject: [PATCH 04/30] Bug 990764 - Replace MOZ_ASSUME_UNREACHABLE with MOZ_CRASH in widget/android. r=blassey --- build/annotationProcessors/CodeGenerator.java | 2 +- widget/android/GeneratedJNIWrappers.cpp | 234 +++++++++--------- 2 files changed, 118 insertions(+), 118 deletions(-) diff --git a/build/annotationProcessors/CodeGenerator.java b/build/annotationProcessors/CodeGenerator.java index 84f6f861533..c0e52396728 100644 --- a/build/annotationProcessors/CodeGenerator.java +++ b/build/annotationProcessors/CodeGenerator.java @@ -328,7 +328,7 @@ public class CodeGenerator { if (!aNoThrow) { wrapperMethodBodies.append( " AndroidBridge::HandleUncaughtException(env);\n" + - " MOZ_ASSUME_UNREACHABLE(\"Exception should have caused crash.\");\n"); + " MOZ_CRASH(\"Exception should have caused crash.\");\n"); } else { wrapperMethodBodies.append( " return").append(Utils.getFailureReturnForType(returnType)).append(";\n"); diff --git a/widget/android/GeneratedJNIWrappers.cpp b/widget/android/GeneratedJNIWrappers.cpp index 6159272b087..4cf67d7decc 100644 --- a/widget/android/GeneratedJNIWrappers.cpp +++ b/widget/android/GeneratedJNIWrappers.cpp @@ -179,7 +179,7 @@ void GeckoAppShell::AcknowledgeEvent() { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } env->CallStaticVoidMethod(mGeckoAppShellClass, jAcknowledgeEvent); @@ -191,7 +191,7 @@ void GeckoAppShell::AddPluginViewWrapper(jobject a0, jfloat a1, jfloat a2, jfloa JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(1) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } jvalue args[6]; @@ -211,7 +211,7 @@ void GeckoAppShell::AlertsProgressListener_OnProgress(const nsAString& a0, int64 JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(2) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } jvalue args[4]; @@ -229,7 +229,7 @@ void GeckoAppShell::CancelVibrate() { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } env->CallStaticVoidMethod(mGeckoAppShellClass, jCancelVibrate); @@ -241,7 +241,7 @@ void GeckoAppShell::CheckURIVisited(const nsAString& a0) { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(1) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } jstring j0 = AndroidBridge::NewJavaString(env, a0); @@ -255,7 +255,7 @@ void GeckoAppShell::ClearMessageList(int32_t a0) { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } env->CallStaticVoidMethod(mGeckoAppShellClass, jClearMessageList, a0); @@ -267,7 +267,7 @@ void GeckoAppShell::CloseCamera() { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } env->CallStaticVoidMethod(mGeckoAppShellClass, jCloseCamera); @@ -279,7 +279,7 @@ void GeckoAppShell::CloseNotification(const nsAString& a0) { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(1) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } jstring j0 = AndroidBridge::NewJavaString(env, a0); @@ -293,7 +293,7 @@ void GeckoAppShell::CreateMessageListWrapper(int64_t a0, int64_t a1, jobjectArra JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(1) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } jvalue args[7]; @@ -314,7 +314,7 @@ void GeckoAppShell::CreateShortcut(const nsAString& a0, const nsAString& a1, con JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(4) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } jvalue args[4]; @@ -332,7 +332,7 @@ void GeckoAppShell::DeleteMessageWrapper(int32_t a0, int32_t a1) { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } env->CallStaticVoidMethod(mGeckoAppShellClass, jDeleteMessageWrapper, a0, a1); @@ -344,7 +344,7 @@ void GeckoAppShell::DisableBatteryNotifications() { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } env->CallStaticVoidMethod(mGeckoAppShellClass, jDisableBatteryNotifications); @@ -356,7 +356,7 @@ void GeckoAppShell::DisableNetworkNotifications() { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } env->CallStaticVoidMethod(mGeckoAppShellClass, jDisableNetworkNotifications); @@ -368,7 +368,7 @@ void GeckoAppShell::DisableScreenOrientationNotifications() { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } env->CallStaticVoidMethod(mGeckoAppShellClass, jDisableScreenOrientationNotifications); @@ -380,7 +380,7 @@ void GeckoAppShell::DisableSensor(int32_t a0) { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } env->CallStaticVoidMethod(mGeckoAppShellClass, jDisableSensor, a0); @@ -392,7 +392,7 @@ void GeckoAppShell::EnableBatteryNotifications() { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } env->CallStaticVoidMethod(mGeckoAppShellClass, jEnableBatteryNotifications); @@ -404,7 +404,7 @@ void GeckoAppShell::EnableLocation(bool a0) { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } env->CallStaticVoidMethod(mGeckoAppShellClass, jEnableLocation, a0); @@ -416,7 +416,7 @@ void GeckoAppShell::EnableLocationHighAccuracy(bool a0) { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } env->CallStaticVoidMethod(mGeckoAppShellClass, jEnableLocationHighAccuracy, a0); @@ -428,7 +428,7 @@ void GeckoAppShell::EnableNetworkNotifications() { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } env->CallStaticVoidMethod(mGeckoAppShellClass, jEnableNetworkNotifications); @@ -440,7 +440,7 @@ void GeckoAppShell::EnableScreenOrientationNotifications() { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } env->CallStaticVoidMethod(mGeckoAppShellClass, jEnableScreenOrientationNotifications); @@ -452,7 +452,7 @@ void GeckoAppShell::EnableSensor(int32_t a0) { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } env->CallStaticVoidMethod(mGeckoAppShellClass, jEnableSensor, a0); @@ -464,7 +464,7 @@ jobject GeckoAppShell::GetContext() { JNIEnv *env = GetJNIForThread(); if (env->PushLocalFrame(1) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } jobject temp = env->CallStaticObjectMethod(mGeckoAppShellClass, jGetContext); @@ -477,7 +477,7 @@ jdoubleArray GeckoAppShell::GetCurrentBatteryInformationWrapper() { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(1) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } jobject temp = env->CallStaticObjectMethod(mGeckoAppShellClass, jGetCurrentBatteryInformationWrapper); @@ -490,7 +490,7 @@ jdoubleArray GeckoAppShell::GetCurrentNetworkInformationWrapper() { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(1) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } jobject temp = env->CallStaticObjectMethod(mGeckoAppShellClass, jGetCurrentNetworkInformationWrapper); @@ -503,7 +503,7 @@ jfloat GeckoAppShell::GetDensity() { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } jfloat temp = env->CallStaticFloatMethod(mGeckoAppShellClass, jGetDensity); @@ -516,7 +516,7 @@ int32_t GeckoAppShell::GetDpiWrapper() { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } int32_t temp = env->CallStaticIntMethod(mGeckoAppShellClass, jGetDpiWrapper); @@ -529,7 +529,7 @@ jstring GeckoAppShell::GetExtensionFromMimeTypeWrapper(const nsAString& a0) { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(2) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } jstring j0 = AndroidBridge::NewJavaString(env, a0); @@ -544,7 +544,7 @@ jobjectArray GeckoAppShell::GetHandlersForMimeTypeWrapper(const nsAString& a0, c JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(3) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } jstring j0 = AndroidBridge::NewJavaString(env, a0); @@ -560,7 +560,7 @@ jobjectArray GeckoAppShell::GetHandlersForURLWrapper(const nsAString& a0, const JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(3) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } jstring j0 = AndroidBridge::NewJavaString(env, a0); @@ -576,7 +576,7 @@ jbyteArray GeckoAppShell::GetIconForExtensionWrapper(const nsAString& a0, int32_ JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(2) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } jstring j0 = AndroidBridge::NewJavaString(env, a0); @@ -591,7 +591,7 @@ void GeckoAppShell::GetMessageWrapper(int32_t a0, int32_t a1) { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } env->CallStaticVoidMethod(mGeckoAppShellClass, jGetMessageWrapper, a0, a1); @@ -603,7 +603,7 @@ jstring GeckoAppShell::GetMimeTypeFromExtensionsWrapper(const nsAString& a0) { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(2) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } jstring j0 = AndroidBridge::NewJavaString(env, a0); @@ -618,7 +618,7 @@ void GeckoAppShell::GetNextMessageInListWrapper(int32_t a0, int32_t a1) { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } env->CallStaticVoidMethod(mGeckoAppShellClass, jGetNextMessageInListWrapper, a0, a1); @@ -630,7 +630,7 @@ jstring GeckoAppShell::GetProxyForURIWrapper(const nsAString& a0, const nsAStrin JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(4) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } jvalue args[4]; @@ -649,7 +649,7 @@ int32_t GeckoAppShell::GetScreenDepthWrapper() { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } int32_t temp = env->CallStaticIntMethod(mGeckoAppShellClass, jGetScreenDepthWrapper); @@ -662,7 +662,7 @@ int16_t GeckoAppShell::GetScreenOrientationWrapper() { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } int16_t temp = env->CallStaticShortMethod(mGeckoAppShellClass, jGetScreenOrientationWrapper); @@ -675,7 +675,7 @@ bool GeckoAppShell::GetShowPasswordSetting() { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } bool temp = env->CallStaticBooleanMethod(mGeckoAppShellClass, jGetShowPasswordSetting); @@ -688,7 +688,7 @@ jintArray GeckoAppShell::GetSystemColoursWrapper() { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(1) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } jobject temp = env->CallStaticObjectMethod(mGeckoAppShellClass, jGetSystemColoursWrapper); @@ -701,7 +701,7 @@ void GeckoAppShell::HandleGeckoMessageWrapper(jobject a0) { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(1) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } env->CallStaticVoidMethod(mGeckoAppShellClass, jHandleGeckoMessageWrapper, a0); @@ -723,7 +723,7 @@ void GeckoAppShell::HideProgressDialog() { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } env->CallStaticVoidMethod(mGeckoAppShellClass, jHideProgressDialog); @@ -735,7 +735,7 @@ jintArray GeckoAppShell::InitCameraWrapper(const nsAString& a0, int32_t a1, int3 JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(2) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } jvalue args[4]; @@ -754,7 +754,7 @@ bool GeckoAppShell::IsNetworkLinkKnown() { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } bool temp = env->CallStaticBooleanMethod(mGeckoAppShellClass, jIsNetworkLinkKnown); @@ -767,7 +767,7 @@ bool GeckoAppShell::IsNetworkLinkUp() { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } bool temp = env->CallStaticBooleanMethod(mGeckoAppShellClass, jIsNetworkLinkUp); @@ -780,7 +780,7 @@ bool GeckoAppShell::IsTablet() { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } bool temp = env->CallStaticBooleanMethod(mGeckoAppShellClass, jIsTablet); @@ -793,7 +793,7 @@ void GeckoAppShell::KillAnyZombies() { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } env->CallStaticVoidMethod(mGeckoAppShellClass, jKillAnyZombies); @@ -805,7 +805,7 @@ jclass GeckoAppShell::LoadPluginClass(const nsAString& a0, const nsAString& a1) JNIEnv *env = GetJNIForThread(); if (env->PushLocalFrame(3) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } jstring j0 = AndroidBridge::NewJavaString(env, a0); @@ -821,7 +821,7 @@ void GeckoAppShell::LockScreenOrientation(int32_t a0) { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } env->CallStaticVoidMethod(mGeckoAppShellClass, jLockScreenOrientation, a0); @@ -833,7 +833,7 @@ void GeckoAppShell::MarkURIVisited(const nsAString& a0) { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(1) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } jstring j0 = AndroidBridge::NewJavaString(env, a0); @@ -847,7 +847,7 @@ void GeckoAppShell::MoveTaskToBack() { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } env->CallStaticVoidMethod(mGeckoAppShellClass, jMoveTaskToBack); @@ -859,7 +859,7 @@ int32_t GeckoAppShell::NetworkLinkType() { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } int32_t temp = env->CallStaticIntMethod(mGeckoAppShellClass, jNetworkLinkType); @@ -872,7 +872,7 @@ void GeckoAppShell::NotifyDefaultPrevented(bool a0) { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } env->CallStaticVoidMethod(mGeckoAppShellClass, jNotifyDefaultPrevented, a0); @@ -884,7 +884,7 @@ void GeckoAppShell::NotifyIME(int32_t a0) { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } env->CallStaticVoidMethod(mGeckoAppShellClass, jNotifyIME, a0); @@ -896,7 +896,7 @@ void GeckoAppShell::NotifyIMEChange(const nsAString& a0, int32_t a1, int32_t a2, JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(1) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } jvalue args[4]; @@ -914,7 +914,7 @@ void GeckoAppShell::NotifyIMEContext(int32_t a0, const nsAString& a1, const nsAS JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(3) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } jvalue args[4]; @@ -932,7 +932,7 @@ void GeckoAppShell::NotifyWakeLockChanged(const nsAString& a0, const nsAString& JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(2) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } jstring j0 = AndroidBridge::NewJavaString(env, a0); @@ -947,7 +947,7 @@ void GeckoAppShell::NotifyXreExit() { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } env->CallStaticVoidMethod(mGeckoAppShellClass, jNotifyXreExit); @@ -959,7 +959,7 @@ bool GeckoAppShell::OpenUriExternal(const nsAString& a0, const nsAString& a1, co JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(6) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } jvalue args[6]; @@ -980,7 +980,7 @@ void GeckoAppShell::PerformHapticFeedback(bool a0) { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } env->CallStaticVoidMethod(mGeckoAppShellClass, jPerformHapticFeedback, a0); @@ -992,7 +992,7 @@ bool GeckoAppShell::PumpMessageLoop() { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } bool temp = env->CallStaticBooleanMethod(mGeckoAppShellClass, jPumpMessageLoop); @@ -1005,7 +1005,7 @@ void GeckoAppShell::RegisterSurfaceTextureFrameListener(jobject a0, int32_t a1) JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(1) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } env->CallStaticVoidMethod(mGeckoAppShellClass, jRegisterSurfaceTextureFrameListener, a0, a1); @@ -1017,7 +1017,7 @@ void GeckoAppShell::RemovePluginView(jobject a0, bool a1) { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(1) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } env->CallStaticVoidMethod(mGeckoAppShellClass, jRemovePluginView, a0, a1); @@ -1029,7 +1029,7 @@ void GeckoAppShell::ScanMedia(const nsAString& a0, const nsAString& a1) { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(2) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } jstring j0 = AndroidBridge::NewJavaString(env, a0); @@ -1044,7 +1044,7 @@ void GeckoAppShell::ScheduleRestart() { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } env->CallStaticVoidMethod(mGeckoAppShellClass, jScheduleRestart); @@ -1056,7 +1056,7 @@ void GeckoAppShell::SendMessageWrapper(const nsAString& a0, const nsAString& a1, JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(2) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } jvalue args[3]; @@ -1073,7 +1073,7 @@ void GeckoAppShell::SetFullScreen(bool a0) { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } env->CallStaticVoidMethod(mGeckoAppShellClass, jSetFullScreen, a0); @@ -1085,7 +1085,7 @@ void GeckoAppShell::SetKeepScreenOn(bool a0) { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } env->CallStaticVoidMethod(mGeckoAppShellClass, jSetKeepScreenOn, a0); @@ -1097,7 +1097,7 @@ void GeckoAppShell::SetURITitle(const nsAString& a0, const nsAString& a1) { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(2) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } jstring j0 = AndroidBridge::NewJavaString(env, a0); @@ -1112,7 +1112,7 @@ void GeckoAppShell::ShowAlertNotificationWrapper(const nsAString& a0, const nsAS JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(5) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } jvalue args[5]; @@ -1131,7 +1131,7 @@ void GeckoAppShell::ShowInputMethodPicker() { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } env->CallStaticVoidMethod(mGeckoAppShellClass, jShowInputMethodPicker); @@ -1143,7 +1143,7 @@ bool GeckoAppShell::UnlockProfile() { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } bool temp = env->CallStaticBooleanMethod(mGeckoAppShellClass, jUnlockProfile); @@ -1156,7 +1156,7 @@ void GeckoAppShell::UnlockScreenOrientation() { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } env->CallStaticVoidMethod(mGeckoAppShellClass, jUnlockScreenOrientation); @@ -1168,7 +1168,7 @@ void GeckoAppShell::UnregisterSurfaceTextureFrameListener(jobject a0) { JNIEnv *env = GetJNIForThread(); if (env->PushLocalFrame(1) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } env->CallStaticVoidMethod(mGeckoAppShellClass, jUnregisterSurfaceTextureFrameListener, a0); @@ -1180,7 +1180,7 @@ void GeckoAppShell::Vibrate1(int64_t a0) { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } env->CallStaticVoidMethod(mGeckoAppShellClass, jVibrate1, a0); @@ -1192,7 +1192,7 @@ void GeckoAppShell::VibrateA(jlongArray a0, int32_t a1) { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(1) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } env->CallStaticVoidMethod(mGeckoAppShellClass, jVibrateA, a0, a1); @@ -1235,7 +1235,7 @@ jobject JavaDomKeyLocation::valueOf(const nsAString& a0) { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(2) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } jstring j0 = AndroidBridge::NewJavaString(env, a0); @@ -1250,7 +1250,7 @@ jobjectArray JavaDomKeyLocation::values() { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(1) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } jobject temp = env->CallStaticObjectMethod(mDomKeyLocationClass, jvalues); @@ -1325,7 +1325,7 @@ jstring GeckoJavaSampler::GetFrameNameJavaProfilingWrapper(int32_t a0, int32_t a JNIEnv *env = GetJNIForThread(); if (env->PushLocalFrame(1) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } jvalue args[3]; @@ -1343,7 +1343,7 @@ jdouble GeckoJavaSampler::GetSampleTimeJavaProfiling(int32_t a0, int32_t a1) { JNIEnv *env = GetJNIForThread(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } jdouble temp = env->CallStaticDoubleMethod(mGeckoJavaSamplerClass, jGetSampleTimeJavaProfiling, a0, a1); @@ -1356,7 +1356,7 @@ jstring GeckoJavaSampler::GetThreadNameJavaProfilingWrapper(int32_t a0) { JNIEnv *env = GetJNIForThread(); if (env->PushLocalFrame(1) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } jobject temp = env->CallStaticObjectMethod(mGeckoJavaSamplerClass, jGetThreadNameJavaProfilingWrapper, a0); @@ -1369,7 +1369,7 @@ void GeckoJavaSampler::PauseJavaProfiling() { JNIEnv *env = GetJNIForThread(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } env->CallStaticVoidMethod(mGeckoJavaSamplerClass, jPauseJavaProfiling); @@ -1381,7 +1381,7 @@ void GeckoJavaSampler::StartJavaProfiling(int32_t a0, int32_t a1) { JNIEnv *env = GetJNIForThread(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } env->CallStaticVoidMethod(mGeckoJavaSamplerClass, jStartJavaProfiling, a0, a1); @@ -1393,7 +1393,7 @@ void GeckoJavaSampler::StopJavaProfiling() { JNIEnv *env = GetJNIForThread(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } env->CallStaticVoidMethod(mGeckoJavaSamplerClass, jStopJavaProfiling); @@ -1405,7 +1405,7 @@ void GeckoJavaSampler::UnpauseJavaProfiling() { JNIEnv *env = GetJNIForThread(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } env->CallStaticVoidMethod(mGeckoJavaSamplerClass, jUnpauseJavaProfiling); @@ -1440,7 +1440,7 @@ SurfaceBits::SurfaceBits() { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } Init(env->NewObject(mSurfaceBitsClass, jSurfaceBits), env); @@ -1506,7 +1506,7 @@ void ThumbnailHelper::SendThumbnail(jobject a0, int32_t a1, bool a2) { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(1) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } jvalue args[3]; @@ -1542,7 +1542,7 @@ DisplayPortMetrics::DisplayPortMetrics(jfloat a0, jfloat a1, jfloat a2, jfloat a JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } jvalue args[5]; @@ -1585,7 +1585,7 @@ jobject GLController::CreateEGLSurfaceForCompositorWrapper() { JNIEnv *env = GetJNIForThread(); if (env->PushLocalFrame(1) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } jobject temp = env->CallObjectMethod(wrapped_obj, jCreateEGLSurfaceForCompositorWrapper); @@ -1633,7 +1633,7 @@ void GeckoLayerClient::ActivateProgram() { JNIEnv *env = GetJNIForThread(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } env->CallVoidMethod(wrapped_obj, jActivateProgram); @@ -1645,7 +1645,7 @@ void GeckoLayerClient::ContentDocumentChanged() { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } env->CallVoidMethod(wrapped_obj, jContentDocumentChanged); @@ -1657,7 +1657,7 @@ jobject GeckoLayerClient::CreateFrame() { JNIEnv *env = GetJNIForThread(); if (env->PushLocalFrame(1) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } jobject temp = env->CallObjectMethod(wrapped_obj, jCreateFrame); @@ -1670,7 +1670,7 @@ void GeckoLayerClient::DeactivateProgram() { JNIEnv *env = GetJNIForThread(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } env->CallVoidMethod(wrapped_obj, jDeactivateProgram); @@ -1682,7 +1682,7 @@ jobject GeckoLayerClient::GetDisplayPort(bool a0, bool a1, int32_t a2, jobject a JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(2) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } jvalue args[4]; @@ -1701,7 +1701,7 @@ bool GeckoLayerClient::IsContentDocumentDisplayed() { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } bool temp = env->CallBooleanMethod(wrapped_obj, jIsContentDocumentDisplayed); @@ -1714,7 +1714,7 @@ jobject GeckoLayerClient::ProgressiveUpdateCallback(bool a0, jfloat a1, jfloat a JNIEnv *env = GetJNIForThread(); if (env->PushLocalFrame(1) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } jvalue args[7]; @@ -1736,7 +1736,7 @@ void GeckoLayerClient::SetFirstPaintViewport(jfloat a0, jfloat a1, jfloat a2, jf JNIEnv *env = GetJNIForThread(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } jvalue args[7]; @@ -1757,7 +1757,7 @@ void GeckoLayerClient::SetPageRect(jfloat a0, jfloat a1, jfloat a2, jfloat a3) { JNIEnv *env = GetJNIForThread(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } jvalue args[4]; @@ -1775,7 +1775,7 @@ jobject GeckoLayerClient::SyncFrameMetrics(jfloat a0, jfloat a1, jfloat a2, jflo JNIEnv *env = GetJNIForThread(); if (env->PushLocalFrame(1) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } jvalue args[14]; @@ -1804,7 +1804,7 @@ jobject GeckoLayerClient::SyncViewportInfo(int32_t a0, int32_t a1, int32_t a2, i JNIEnv *env = GetJNIForThread(); if (env->PushLocalFrame(1) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } jvalue args[6]; @@ -1840,7 +1840,7 @@ ImmutableViewportMetrics::ImmutableViewportMetrics(jfloat a0, jfloat a1, jfloat JNIEnv *env = GetJNIForThread(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } jvalue args[13]; @@ -1881,7 +1881,7 @@ jobject LayerView::RegisterCompositorWrapper() { JNIEnv *env = GetJNIForThread(); if (env->PushLocalFrame(1) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } jobject temp = env->CallStaticObjectMethod(mLayerViewClass, jRegisterCompositorWrapper); @@ -1911,7 +1911,7 @@ void NativePanZoomController::PostDelayedCallbackWrapper(int64_t a0) { JNIEnv *env = GetJNIForThread(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } env->CallVoidMethod(wrapped_obj, jPostDelayedCallbackWrapper, a0); @@ -1923,7 +1923,7 @@ void NativePanZoomController::RequestContentRepaintWrapper(jfloat a0, jfloat a1, JNIEnv *env = GetJNIForThread(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } jvalue args[5]; @@ -1971,7 +1971,7 @@ ProgressiveUpdateData::ProgressiveUpdateData() { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } Init(env->NewObject(mProgressiveUpdateDataClass, jProgressiveUpdateData), env); @@ -1982,7 +1982,7 @@ void ProgressiveUpdateData::setViewport(jobject a0) { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(1) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } env->CallVoidMethod(wrapped_obj, jsetViewport, a0); @@ -2087,7 +2087,7 @@ ViewTransform::ViewTransform(jfloat a0, jfloat a1, jfloat a2) { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } jvalue args[3]; @@ -2208,7 +2208,7 @@ jobject NativeZip::CreateInputStream(jobject a0, int32_t a1) { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(2) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } jobject temp = env->CallObjectMethod(wrapped_obj, jCreateInputStream, a0, a1); @@ -2244,7 +2244,7 @@ MatrixBlobCursor::MatrixBlobCursor(jobjectArray a0) { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(1) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } Init(env->NewObject(mMatrixBlobCursorClass, jMatrixBlobCursor, a0), env); @@ -2255,7 +2255,7 @@ MatrixBlobCursor::MatrixBlobCursor(jobjectArray a0, int32_t a1) { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(1) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } Init(env->NewObject(mMatrixBlobCursorClass, jMatrixBlobCursor0, a0, a1), env); @@ -2266,7 +2266,7 @@ void MatrixBlobCursor::AddRow(jobject a0) { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(1) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } env->CallVoidMethod(wrapped_obj, jAddRow, a0); @@ -2278,7 +2278,7 @@ void MatrixBlobCursor::AddRow(jobject a0, int32_t a1) { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(1) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } env->CallVoidMethod(wrapped_obj, jAddRow1, a0, a1); @@ -2290,7 +2290,7 @@ void MatrixBlobCursor::AddRow(jobjectArray a0) { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(1) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } env->CallVoidMethod(wrapped_obj, jAddRow2, a0); @@ -2321,7 +2321,7 @@ SQLiteBridgeException::SQLiteBridgeException() { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } Init(env->NewObject(mSQLiteBridgeExceptionClass, jSQLiteBridgeException), env); @@ -2332,7 +2332,7 @@ SQLiteBridgeException::SQLiteBridgeException(const nsAString& a0) { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(1) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } jstring j0 = AndroidBridge::NewJavaString(env, a0); @@ -2371,7 +2371,7 @@ void Clipboard::ClearText() { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } env->CallStaticVoidMethod(mClipboardClass, jClearText); @@ -2383,7 +2383,7 @@ jstring Clipboard::GetClipboardTextWrapper() { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(1) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } jobject temp = env->CallStaticObjectMethod(mClipboardClass, jGetClipboardTextWrapper); @@ -2396,7 +2396,7 @@ bool Clipboard::HasText() { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(0) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } bool temp = env->CallStaticBooleanMethod(mClipboardClass, jHasText); @@ -2409,7 +2409,7 @@ void Clipboard::SetClipboardText(const nsAString& a0) { JNIEnv *env = AndroidBridge::GetJNIEnv(); if (env->PushLocalFrame(1) != 0) { AndroidBridge::HandleUncaughtException(env); - MOZ_ASSUME_UNREACHABLE("Exception should have caused crash."); + MOZ_CRASH("Exception should have caused crash."); } jstring j0 = AndroidBridge::NewJavaString(env, a0); From 61d25653e5d40e26fbb52c046452f6169f641f2e Mon Sep 17 00:00:00 2001 From: Nicholas Nethercote Date: Tue, 22 Apr 2014 20:12:33 -0700 Subject: [PATCH 05/30] Bug 997590 (part 1) - Remove a dead else-branch. r=sstangl. --HG-- extra : rebase_source : e126b0c5189f7845b7d6c1fc1a65aaca4d7dab12 --- js/src/frontend/Parser.cpp | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/js/src/frontend/Parser.cpp b/js/src/frontend/Parser.cpp index cabb211a464..a2bc2b7a023 100644 --- a/js/src/frontend/Parser.cpp +++ b/js/src/frontend/Parser.cpp @@ -6910,11 +6910,8 @@ Parser::newRegExp() RegExpFlag flags = tokenStream.currentToken().regExpFlags(); Rooted reobj(context); - if (RegExpStatics *res = context->global()->getRegExpStatics()) - reobj = RegExpObject::create(context, res, chars, length, flags, &tokenStream); - else - reobj = RegExpObject::createNoStatics(context, chars, length, flags, &tokenStream); - + RegExpStatics *res = context->global()->getRegExpStatics(); + reobj = RegExpObject::create(context, res, chars, length, flags, &tokenStream); if (!reobj) return null(); From 72560137830da198acd93769476a291086c3de75 Mon Sep 17 00:00:00 2001 From: Nicholas Nethercote Date: Tue, 22 Apr 2014 20:13:24 -0700 Subject: [PATCH 06/30] Bug 997590 (part 2) - Create RegExpStaticsObjects lazily. r=sstangl. --HG-- extra : rebase_source : 9cffd8ad8d3e66bb523cb1c127ca066847e34ee6 --- js/src/builtin/RegExp.cpp | 35 ++++++++++++++++++++-------- js/src/frontend/Parser.cpp | 5 +++- js/src/jit/IonBuilder.cpp | 16 +++++++++---- js/src/jsapi.cpp | 32 +++++++++++++++++++------ js/src/jsapi.h | 4 ++-- js/src/jsstr.cpp | 40 +++++++++++++++++++++++++------- js/src/vm/GlobalObject.cpp | 41 ++++++++++++++++++++++++++++----- js/src/vm/GlobalObject.h | 7 +++--- js/src/vm/RegExpObject.cpp | 5 +++- js/src/vm/RegExpStatics.cpp | 8 +++---- js/src/vm/RegExpStatics.h | 2 +- js/src/vm/RegExpStaticsObject.h | 2 ++ 12 files changed, 149 insertions(+), 48 deletions(-) diff --git a/js/src/builtin/RegExp.cpp b/js/src/builtin/RegExp.cpp index 14c030c7eb2..617a85250bf 100644 --- a/js/src/builtin/RegExp.cpp +++ b/js/src/builtin/RegExp.cpp @@ -199,7 +199,9 @@ static bool CompileRegExpObject(JSContext *cx, RegExpObjectBuilder &builder, CallArgs args) { if (args.length() == 0) { - RegExpStatics *res = cx->global()->getRegExpStatics(); + RegExpStatics *res = cx->global()->getRegExpStatics(cx); + if (!res) + return false; Rooted empty(cx, cx->runtime()->emptyString); RegExpObject *reobj = builder.build(empty, res->getFlags()); if (!reobj) @@ -284,7 +286,9 @@ CompileRegExpObject(JSContext *cx, RegExpObjectBuilder &builder, CallArgs args) if (!js::RegExpShared::checkSyntax(cx, nullptr, escapedSourceStr)) return false; - RegExpStatics *res = cx->global()->getRegExpStatics(); + RegExpStatics *res = cx->global()->getRegExpStatics(cx); + if (!res) + return false; RegExpObject *reobj = builder.build(escapedSourceStr, RegExpFlag(flags | res->getFlags())); if (!reobj) return false; @@ -387,7 +391,9 @@ static const JSFunctionSpec regexp_methods[] = { name(JSContext *cx, unsigned argc, Value *vp) \ { \ CallArgs args = CallArgsFromVp(argc, vp); \ - RegExpStatics *res = cx->global()->getRegExpStatics(); \ + RegExpStatics *res = cx->global()->getRegExpStatics(cx); \ + if (!res) \ + return false; \ code; \ } @@ -413,7 +419,9 @@ DEFINE_STATIC_GETTER(static_paren9_getter, return res->createParen(cx, 9, static bool \ name(JSContext *cx, unsigned argc, Value *vp) \ { \ - RegExpStatics *res = cx->global()->getRegExpStatics(); \ + RegExpStatics *res = cx->global()->getRegExpStatics(cx); \ + if (!res) \ + return false; \ code; \ return true; \ } @@ -422,7 +430,9 @@ static bool static_input_setter(JSContext *cx, unsigned argc, Value *vp) { CallArgs args = CallArgsFromVp(argc, vp); - RegExpStatics *res = cx->global()->getRegExpStatics(); + RegExpStatics *res = cx->global()->getRegExpStatics(cx); + if (!res) + return false; RootedString str(cx, ToString(cx, args.get(0))); if (!str) @@ -437,7 +447,9 @@ static bool static_multiline_setter(JSContext *cx, unsigned argc, Value *vp) { CallArgs args = CallArgsFromVp(argc, vp); - RegExpStatics *res = cx->global()->getRegExpStatics(); + RegExpStatics *res = cx->global()->getRegExpStatics(cx); + if (!res) + return false; bool b = ToBoolean(args.get(0)); res->setMultiline(cx, b); @@ -521,9 +533,14 @@ js::ExecuteRegExp(JSContext *cx, HandleObject regexp, HandleString string, if (!reobj->getShared(cx, &re)) return RegExpRunStatus_Error; - RegExpStatics *res = (staticsUpdate == UpdateRegExpStatics) - ? cx->global()->getRegExpStatics() - : nullptr; + RegExpStatics *res; + if (staticsUpdate == UpdateRegExpStatics) { + res = cx->global()->getRegExpStatics(cx); + if (!res) + return RegExpRunStatus_Error; + } else { + res = nullptr; + } /* Step 3. */ Rooted input(cx, string->ensureLinear(cx)); diff --git a/js/src/frontend/Parser.cpp b/js/src/frontend/Parser.cpp index a2bc2b7a023..19ba70f3dba 100644 --- a/js/src/frontend/Parser.cpp +++ b/js/src/frontend/Parser.cpp @@ -6910,7 +6910,10 @@ Parser::newRegExp() RegExpFlag flags = tokenStream.currentToken().regExpFlags(); Rooted reobj(context); - RegExpStatics *res = context->global()->getRegExpStatics(); + RegExpStatics *res = context->global()->getRegExpStatics(context); + if (!res) + return null(); + reobj = RegExpObject::create(context, res, chars, length, flags, &tokenStream); if (!reobj) return null(); diff --git a/js/src/jit/IonBuilder.cpp b/js/src/jit/IonBuilder.cpp index 5af8880059a..d0c692c5520 100644 --- a/js/src/jit/IonBuilder.cpp +++ b/js/src/jit/IonBuilder.cpp @@ -9423,11 +9423,17 @@ IonBuilder::jsop_regexp(RegExpObject *reobj) bool mustClone = true; types::TypeObjectKey *typeObj = types::TypeObjectKey::get(&script()->global()); if (!typeObj->hasFlags(constraints(), types::OBJECT_FLAG_REGEXP_FLAGS_SET)) { - RegExpStatics *res = script()->global().getRegExpStatics(); - - DebugOnly origFlags = reobj->getFlags(); - DebugOnly staticsFlags = res->getFlags(); - JS_ASSERT((origFlags & staticsFlags) == staticsFlags); +#ifdef DEBUG + // Only compare the statics if the one on script()->global() has been + // instantiated. + if (script()->global().hasRegExpStatics()) { + RegExpStatics *res = script()->global().getAlreadyCreatedRegExpStatics(); + MOZ_ASSERT(res); + uint32_t origFlags = reobj->getFlags(); + uint32_t staticsFlags = res->getFlags(); + JS_ASSERT((origFlags & staticsFlags) == staticsFlags); + } +#endif if (!reobj->global() && !reobj->sticky()) mustClone = false; diff --git a/js/src/jsapi.cpp b/js/src/jsapi.cpp index 101bccb20aa..7a1b53211d4 100644 --- a/js/src/jsapi.cpp +++ b/js/src/jsapi.cpp @@ -5735,7 +5735,10 @@ JS_NewRegExpObject(JSContext *cx, HandleObject obj, char *bytes, size_t length, if (!chars) return nullptr; - RegExpStatics *res = obj->as().getRegExpStatics(); + RegExpStatics *res = obj->as().getRegExpStatics(cx); + if (!res) + return nullptr; + RegExpObject *reobj = RegExpObject::create(cx, res, chars, length, RegExpFlag(flags), nullptr); js_free(chars); @@ -5748,29 +5751,42 @@ JS_NewUCRegExpObject(JSContext *cx, HandleObject obj, jschar *chars, size_t leng { AssertHeapIsIdle(cx); CHECK_REQUEST(cx); - RegExpStatics *res = obj->as().getRegExpStatics(); + RegExpStatics *res = obj->as().getRegExpStatics(cx); + if (!res) + return nullptr; + return RegExpObject::create(cx, res, chars, length, RegExpFlag(flags), nullptr); } -JS_PUBLIC_API(void) +JS_PUBLIC_API(bool) JS_SetRegExpInput(JSContext *cx, HandleObject obj, HandleString input, bool multiline) { AssertHeapIsIdle(cx); CHECK_REQUEST(cx); assertSameCompartment(cx, input); - obj->as().getRegExpStatics()->reset(cx, input, !!multiline); + RegExpStatics *res = obj->as().getRegExpStatics(cx); + if (!res) + return false; + + res->reset(cx, input, !!multiline); + return true; } -JS_PUBLIC_API(void) +JS_PUBLIC_API(bool) JS_ClearRegExpStatics(JSContext *cx, HandleObject obj) { AssertHeapIsIdle(cx); CHECK_REQUEST(cx); JS_ASSERT(obj); - obj->as().getRegExpStatics()->clear(); + RegExpStatics *res = obj->as().getRegExpStatics(cx); + if (!res) + return false; + + res->clear(); + return true; } JS_PUBLIC_API(bool) @@ -5780,7 +5796,9 @@ JS_ExecuteRegExp(JSContext *cx, HandleObject obj, HandleObject reobj, jschar *ch AssertHeapIsIdle(cx); CHECK_REQUEST(cx); - RegExpStatics *res = obj->as().getRegExpStatics(); + RegExpStatics *res = obj->as().getRegExpStatics(cx); + if (!res) + return false; return ExecuteRegExpLegacy(cx, res, reobj->as(), NullPtr(), chars, length, indexp, test, rval); diff --git a/js/src/jsapi.h b/js/src/jsapi.h index c7c8a6ea161..1ddb86dff63 100644 --- a/js/src/jsapi.h +++ b/js/src/jsapi.h @@ -4543,11 +4543,11 @@ extern JS_PUBLIC_API(JSObject *) JS_NewUCRegExpObject(JSContext *cx, JS::HandleObject obj, jschar *chars, size_t length, unsigned flags); -extern JS_PUBLIC_API(void) +extern JS_PUBLIC_API(bool) JS_SetRegExpInput(JSContext *cx, JS::HandleObject obj, JS::HandleString input, bool multiline); -extern JS_PUBLIC_API(void) +extern JS_PUBLIC_API(bool) JS_ClearRegExpStatics(JSContext *cx, JS::HandleObject obj); extern JS_PUBLIC_API(bool) diff --git a/js/src/jsstr.cpp b/js/src/jsstr.cpp index f0e0c6db05f..7be80eb4549 100644 --- a/js/src/jsstr.cpp +++ b/js/src/jsstr.cpp @@ -2115,7 +2115,10 @@ js::str_match(JSContext *cx, unsigned argc, Value *vp) if (!g.normalizeRegExp(cx, false, 1, args)) return false; - RegExpStatics *res = cx->global()->getRegExpStatics(); + RegExpStatics *res = cx->global()->getRegExpStatics(cx); + if (!res) + return false; + Rooted linearStr(cx, str->ensureLinear(cx)); if (!linearStr) return false; @@ -2156,7 +2159,9 @@ js::str_search(JSContext *cx, unsigned argc, Value *vp) const jschar *chars = linearStr->chars(); size_t length = linearStr->length(); - RegExpStatics *res = cx->global()->getRegExpStatics(); + RegExpStatics *res = cx->global()->getRegExpStatics(cx); + if (!res) + return false; /* Per ECMAv5 15.5.4.12 (5) The last index property is ignored and left unchanged. */ size_t i = 0; @@ -2829,16 +2834,26 @@ StrReplaceRegexpRemove(JSContext *cx, HandleString str, RegExpShared &re, Mutabl break; } + RegExpStatics *res; + /* If unmatched, return the input string. */ if (!lastIndex) { - if (startIndex > 0) - cx->global()->getRegExpStatics()->updateLazily(cx, flatStr, &re, lazyIndex); + if (startIndex > 0) { + res = cx->global()->getRegExpStatics(cx); + if (!res) + return false; + res->updateLazily(cx, flatStr, &re, lazyIndex); + } rval.setString(str); return true; } /* The last successful match updates the RegExpStatics. */ - cx->global()->getRegExpStatics()->updateLazily(cx, flatStr, &re, lazyIndex); + res = cx->global()->getRegExpStatics(cx); + if (!res) + return false; + + res->updateLazily(cx, flatStr, &re, lazyIndex); /* Include any remaining part of the string. */ if (lastIndex < charsLen) { @@ -2866,7 +2881,10 @@ StrReplaceRegExp(JSContext *cx, ReplaceData &rdata, MutableHandleValue rval) rdata.leftIndex = 0; rdata.calledBack = false; - RegExpStatics *res = cx->global()->getRegExpStatics(); + RegExpStatics *res = cx->global()->getRegExpStatics(cx); + if (!res) + return false; + RegExpShared &re = rdata.g.regExp(); // The spec doesn't describe this function very clearly, so we go ahead and @@ -3283,7 +3301,10 @@ SplitHelper(JSContext *cx, Handle str, uint32_t limit, const Ma /* Step 13(c)(iii)(6-7). */ if (Matcher::returnsCaptures) { - RegExpStatics *res = cx->global()->getRegExpStatics(); + RegExpStatics *res = cx->global()->getRegExpStatics(cx); + if (!res) + return nullptr; + const MatchPairs &matches = res->getMatches(); for (size_t i = 0; i < matches.parenCount(); i++) { /* Steps 13(c)(iii)(7)(a-c). */ @@ -3494,7 +3515,10 @@ js::str_split(JSContext *cx, unsigned argc, Value *vp) aobj = SplitHelper(cx, linearStr, limit, matcher, type); } } else { - SplitRegExpMatcher matcher(*re, cx->global()->getRegExpStatics()); + RegExpStatics *res = cx->global()->getRegExpStatics(cx); + if (!res) + return false; + SplitRegExpMatcher matcher(*re, res); aobj = SplitHelper(cx, linearStr, limit, matcher, type); } if (!aobj) diff --git a/js/src/vm/GlobalObject.cpp b/js/src/vm/GlobalObject.cpp index 90ee168c97c..e0543d2d395 100644 --- a/js/src/vm/GlobalObject.cpp +++ b/js/src/vm/GlobalObject.cpp @@ -565,12 +565,6 @@ GlobalObject::create(JSContext *cx, const Class *clasp) if (!global->setDelegate(cx)) return nullptr; - /* Construct a regexp statics object for this global object. */ - JSObject *res = RegExpStatics::create(cx, global); - if (!res) - return nullptr; - - global->initSlot(REGEXP_STATICS, ObjectValue(*res)); return global; } @@ -783,6 +777,41 @@ GlobalObject::getOrCreateForOfPICObject(JSContext *cx, Handle gl return forOfPIC; } +bool +GlobalObject::hasRegExpStatics() const +{ + return !getSlot(REGEXP_STATICS).isUndefined(); +} + +RegExpStatics * +GlobalObject::getRegExpStatics(ExclusiveContext *cx) const +{ + MOZ_ASSERT(cx); + Rooted self(cx, const_cast(this)); + + JSObject *resObj = nullptr; + const Value &val = this->getSlot(REGEXP_STATICS); + if (!val.isObject()) { + MOZ_ASSERT(val.isUndefined()); + resObj = RegExpStatics::create(cx, self); + if (!resObj) + return nullptr; + + self->initSlot(REGEXP_STATICS, ObjectValue(*resObj)); + } else { + resObj = &val.toObject(); + } + return static_cast(resObj->getPrivate(/* nfixed = */ 1)); +} + +RegExpStatics * +GlobalObject::getAlreadyCreatedRegExpStatics() const +{ + const Value &val = this->getSlot(REGEXP_STATICS); + MOZ_ASSERT(val.isObject()); + return static_cast(val.toObject().getPrivate(/* nfixed = */ 1)); +} + bool GlobalObject::getSelfHostedFunction(JSContext *cx, HandleAtom selfHostedName, HandleAtom name, unsigned nargs, MutableHandleValue funVal) diff --git a/js/src/vm/GlobalObject.h b/js/src/vm/GlobalObject.h index d5eaf22f96e..b1118935ebf 100644 --- a/js/src/vm/GlobalObject.h +++ b/js/src/vm/GlobalObject.h @@ -592,10 +592,9 @@ class GlobalObject : public JSObject bool getSelfHostedFunction(JSContext *cx, HandleAtom selfHostedName, HandleAtom name, unsigned nargs, MutableHandleValue funVal); - RegExpStatics *getRegExpStatics() const { - JSObject &resObj = getSlot(REGEXP_STATICS).toObject(); - return static_cast(resObj.getPrivate(/* nfixed = */ 1)); - } + bool hasRegExpStatics() const; + RegExpStatics *getRegExpStatics(ExclusiveContext *cx) const; + RegExpStatics *getAlreadyCreatedRegExpStatics() const; JSObject *getThrowTypeError() const { JS_ASSERT(functionObjectClassesInitialized()); diff --git a/js/src/vm/RegExpObject.cpp b/js/src/vm/RegExpObject.cpp index c6ec2564993..cf47cb0d9e0 100644 --- a/js/src/vm/RegExpObject.cpp +++ b/js/src/vm/RegExpObject.cpp @@ -106,7 +106,10 @@ RegExpObjectBuilder::clone(Handle other) * the clone -- if the |RegExpStatics| provides more flags we'll * need a different |RegExpShared|. */ - RegExpStatics *res = other->getProto()->getParent()->as().getRegExpStatics(); + RegExpStatics *res = other->getProto()->getParent()->as().getRegExpStatics(cx); + if (!res) + return nullptr; + RegExpFlag origFlags = other->getFlags(); RegExpFlag staticsFlags = res->getFlags(); if ((origFlags & staticsFlags) != staticsFlags) { diff --git a/js/src/vm/RegExpStatics.cpp b/js/src/vm/RegExpStatics.cpp index ebe887be52a..0e541a02286 100644 --- a/js/src/vm/RegExpStatics.cpp +++ b/js/src/vm/RegExpStatics.cpp @@ -15,8 +15,8 @@ using namespace js; /* * RegExpStatics allocates memory -- in order to keep the statics stored * per-global and not leak, we create a js::Class to wrap the C++ instance and - * provide an appropriate finalizer. We store an instance of that js::Class in - * a global reserved slot. + * provide an appropriate finalizer. We lazily create and store an instance of + * that js::Class in a global reserved slot. */ static void @@ -53,7 +53,7 @@ const Class RegExpStaticsObject::class_ = { }; JSObject * -RegExpStatics::create(JSContext *cx, GlobalObject *parent) +RegExpStatics::create(ExclusiveContext *cx, GlobalObject *parent) { JSObject *obj = NewObjectWithGivenProto(cx, &RegExpStaticsObject::class_, nullptr, parent); if (!obj) @@ -74,7 +74,7 @@ RegExpStatics::markFlagsSet(JSContext *cx) // type changes on RegExp.prototype, so mark a state change to trigger // recompilation of all such code (when recompiling, a stub call will // always be performed). - JS_ASSERT(this == cx->global()->getRegExpStatics()); + JS_ASSERT_IF(cx->global()->hasRegExpStatics(), this == cx->global()->getRegExpStatics(cx)); types::MarkTypeObjectFlags(cx, cx->global(), types::OBJECT_FLAG_REGEXP_FLAGS_SET); } diff --git a/js/src/vm/RegExpStatics.h b/js/src/vm/RegExpStatics.h index 335b0f05db7..1718341feac 100644 --- a/js/src/vm/RegExpStatics.h +++ b/js/src/vm/RegExpStatics.h @@ -47,7 +47,7 @@ class RegExpStatics public: RegExpStatics() : bufferLink(nullptr), copied(false) { clear(); } - static JSObject *create(JSContext *cx, GlobalObject *parent); + static JSObject *create(ExclusiveContext *cx, GlobalObject *parent); private: bool executeLazy(JSContext *cx); diff --git a/js/src/vm/RegExpStaticsObject.h b/js/src/vm/RegExpStaticsObject.h index 5e7d4ac836b..bc584343c16 100644 --- a/js/src/vm/RegExpStaticsObject.h +++ b/js/src/vm/RegExpStaticsObject.h @@ -17,6 +17,8 @@ class RegExpStaticsObject : public JSObject static const Class class_; size_t sizeOfData(mozilla::MallocSizeOf mallocSizeOf) { + // XXX: should really call RegExpStatics::sizeOfIncludingThis() here + // instead, but the extra memory it would measure is insignificant. return mallocSizeOf(getPrivate()); } }; From 8094bc38b3a3a0cbbeb693dab81760912938588e Mon Sep 17 00:00:00 2001 From: Ehsan Akhgari Date: Mon, 28 Apr 2014 19:58:34 -0400 Subject: [PATCH 07/30] Bug 1002313 - Fix the test for bug 503926 so that it doesn't rely on nsIDOMNode being scriptable; r=bzbarsky --- dom/base/nsDOMWindowUtils.cpp | 7 +++++++ dom/interfaces/base/nsIDOMWindowUtils.idl | 8 +++++++- js/xpconnect/tests/chrome/bug503926.xul | 2 +- js/xpconnect/tests/chrome/test_bug503926.xul | 2 +- js/xpconnect/tests/mochitest/test_bug503926.html | 2 +- 5 files changed, 17 insertions(+), 4 deletions(-) diff --git a/dom/base/nsDOMWindowUtils.cpp b/dom/base/nsDOMWindowUtils.cpp index 57fea968aab..c8819d6c049 100644 --- a/dom/base/nsDOMWindowUtils.cpp +++ b/dom/base/nsDOMWindowUtils.cpp @@ -3989,6 +3989,13 @@ nsDOMWindowUtils::SetAudioVolume(float aVolume) return window->SetAudioVolume(aVolume); } +NS_IMETHODIMP +nsDOMWindowUtils::XpconnectArgument(nsIDOMWindowUtils* aThis) +{ + // Do nothing. + return NS_OK; +} + NS_INTERFACE_MAP_BEGIN(nsTranslationNodeList) NS_INTERFACE_MAP_ENTRY(nsISupports) NS_INTERFACE_MAP_ENTRY(nsITranslationNodeList) diff --git a/dom/interfaces/base/nsIDOMWindowUtils.idl b/dom/interfaces/base/nsIDOMWindowUtils.idl index c0d4868265f..f2f7389b4ab 100644 --- a/dom/interfaces/base/nsIDOMWindowUtils.idl +++ b/dom/interfaces/base/nsIDOMWindowUtils.idl @@ -43,7 +43,7 @@ interface nsIRunnable; interface nsICompositionStringSynthesizer; interface nsITranslationNodeList; -[scriptable, uuid(9376bafe-e7b1-48e7-87e2-1e64a7b5d54d)] +[scriptable, uuid(d68ea9fa-b1ea-4744-a78e-bb0e6ef95f55)] interface nsIDOMWindowUtils : nsISupports { /** @@ -1672,6 +1672,12 @@ interface nsIDOMWindowUtils : nsISupports { * volume of all ancestor windows. */ attribute float audioVolume; + + /** + * This method doesn't do anything useful. It was solely added for the + * purpose of the test for bug 503926. + */ + void xpconnectArgument(in nsIDOMWindowUtils aThis); }; [scriptable, uuid(c694e359-7227-4392-a138-33c0cc1f15a6)] diff --git a/js/xpconnect/tests/chrome/bug503926.xul b/js/xpconnect/tests/chrome/bug503926.xul index f0e69b11cb1..85bb5117e77 100644 --- a/js/xpconnect/tests/chrome/bug503926.xul +++ b/js/xpconnect/tests/chrome/bug503926.xul @@ -19,7 +19,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=503926 getInterface(Components.interfaces.nsIDOMWindowUtils); var passed = false; var obj = { QueryInterface: function() { passed = true; } } - try { gWindowUtils.dispatchDOMEventViaPresShell(obj, obj, false); } catch (e) {} + gWindowUtils.xpconnectArgument(obj); var isDialog = location.hash != '#iframe'; var outer = XPCNativeWrapper.unwrap(isDialog ? opener : top); outer.ok(passed, "chrome/chrome test passed: " + (isDialog ? "dialog" : "iframe")); diff --git a/js/xpconnect/tests/chrome/test_bug503926.xul b/js/xpconnect/tests/chrome/test_bug503926.xul index a6001185e20..de17f498541 100644 --- a/js/xpconnect/tests/chrome/test_bug503926.xul +++ b/js/xpconnect/tests/chrome/test_bug503926.xul @@ -29,7 +29,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=503926 getInterface(Components.interfaces.nsIDOMWindowUtils); var passed = false; var obj = { QueryInterface: function() { passed = true; } }; - try { gWindowUtils.dispatchDOMEventViaPresShell(obj, obj, false); } catch (e) {} + gWindowUtils.xpconnectArgument(obj); ok(passed, "trusted QIs should be called"); openDialog("bug503926.xul", "chromeDialog", "modal"); diff --git a/js/xpconnect/tests/mochitest/test_bug503926.html b/js/xpconnect/tests/mochitest/test_bug503926.html index fbed24672cb..ba542dc83e5 100644 --- a/js/xpconnect/tests/mochitest/test_bug503926.html +++ b/js/xpconnect/tests/mochitest/test_bug503926.html @@ -20,7 +20,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=503926 /** Test for Bug 503926 **/ var passed = true; var obj = { QueryInterface: function() { passed = false; } }; -try { document.body.appendChild(obj); } catch (e) {} +SpecialPowers.getDOMWindowUtils(window).xpconnectArgument(obj); ok(passed, "untrusted QI should not be called!"); From 86b35c575d7320a4a199ac8b6bdc1b6e043d4f68 Mon Sep 17 00:00:00 2001 From: Alexander Surkov Date: Fri, 25 Apr 2014 22:42:19 -0400 Subject: [PATCH 08/30] Bug 1000465 - fix bunch of warning in accessible module, r=jwei --- accessible/src/base/AccGroupInfo.cpp | 2 +- accessible/src/base/TextAttrs.cpp | 24 +-- accessible/src/base/TextAttrs.h | 8 +- accessible/src/base/nsAccessiblePivot.cpp | 8 +- .../src/generic/HyperTextAccessible-inl.h | 25 +-- .../src/generic/HyperTextAccessible.cpp | 194 +++++++++--------- accessible/src/generic/HyperTextAccessible.h | 31 ++- accessible/src/xul/XULListboxAccessible.cpp | 13 +- 8 files changed, 152 insertions(+), 153 deletions(-) diff --git a/accessible/src/base/AccGroupInfo.cpp b/accessible/src/base/AccGroupInfo.cpp index 14c7fccf646..f26df1d8b69 100644 --- a/accessible/src/base/AccGroupInfo.cpp +++ b/accessible/src/base/AccGroupInfo.cpp @@ -198,7 +198,7 @@ AccGroupInfo::NextItemTo(Accessible* aItem) Accessible* parent = aItem->Parent(); uint32_t childCount = parent->ChildCount(); - for (int32_t idx = aItem->IndexInParent() + 1; idx < childCount; idx++) { + for (uint32_t idx = aItem->IndexInParent() + 1; idx < childCount; idx++) { Accessible* nextItem = parent->GetChildAt(idx); AccGroupInfo* nextGroupInfo = nextItem->GetGroupInfo(); if (nextGroupInfo && diff --git a/accessible/src/base/TextAttrs.cpp b/accessible/src/base/TextAttrs.cpp index 3e94af8afa7..1e0820835b8 100644 --- a/accessible/src/base/TextAttrs.cpp +++ b/accessible/src/base/TextAttrs.cpp @@ -26,8 +26,8 @@ using namespace mozilla::a11y; void TextAttrsMgr::GetAttributes(nsIPersistentProperties* aAttributes, - int32_t* aStartHTOffset, - int32_t* aEndHTOffset) + uint32_t* aStartOffset, + uint32_t* aEndOffset) { // 1. Hyper text accessible must be specified always. // 2. Offset accessible and result hyper text offsets must be specified in @@ -37,9 +37,9 @@ TextAttrsMgr::GetAttributes(nsIPersistentProperties* aAttributes, // specified in the case of default text attributes. NS_PRECONDITION(mHyperTextAcc && ((mOffsetAcc && mOffsetAccIdx != -1 && - aStartHTOffset && aEndHTOffset) || + aStartOffset && aEndOffset) || (!mOffsetAcc && mOffsetAccIdx == -1 && - !aStartHTOffset && !aEndHTOffset && + !aStartOffset && !aEndOffset && mIncludeDefAttrs && aAttributes)), "Wrong usage of TextAttrsMgr!"); @@ -50,7 +50,7 @@ TextAttrsMgr::GetAttributes(nsIPersistentProperties* aAttributes, if (!nsAccUtils::IsEmbeddedObject(currAcc)) break; - (*aStartHTOffset)--; + (*aStartOffset)--; } uint32_t childCount = mHyperTextAcc->ChildCount(); @@ -60,7 +60,7 @@ TextAttrsMgr::GetAttributes(nsIPersistentProperties* aAttributes, if (!nsAccUtils::IsEmbeddedObject(currAcc)) break; - (*aEndHTOffset)++; + (*aEndOffset)++; } return; @@ -141,12 +141,12 @@ TextAttrsMgr::GetAttributes(nsIPersistentProperties* aAttributes, // Expose text attributes range where they are applied if applicable. if (mOffsetAcc) - GetRange(attrArray, ArrayLength(attrArray), aStartHTOffset, aEndHTOffset); + GetRange(attrArray, ArrayLength(attrArray), aStartOffset, aEndOffset); } void TextAttrsMgr::GetRange(TextAttr* aAttrArray[], uint32_t aAttrArrayLen, - int32_t* aStartHTOffset, int32_t* aEndHTOffset) + uint32_t* aStartOffset, uint32_t* aEndOffset) { // Navigate backward from anchor accessible to find start offset. for (int32_t childIdx = mOffsetAccIdx - 1; childIdx >= 0; childIdx--) { @@ -169,7 +169,7 @@ TextAttrsMgr::GetRange(TextAttr* aAttrArray[], uint32_t aAttrArrayLen, if (offsetFound) break; - *(aStartHTOffset) -= nsAccUtils::TextLength(currAcc); + *(aStartOffset) -= nsAccUtils::TextLength(currAcc); } // Navigate forward from anchor accessible to find end offset. @@ -194,7 +194,7 @@ TextAttrsMgr::GetRange(TextAttr* aAttrArray[], uint32_t aAttrArrayLen, if (offsetFound) break; - (*aEndHTOffset) += nsAccUtils::TextLength(currAcc); + (*aEndOffset) += nsAccUtils::TextLength(currAcc); } } @@ -870,9 +870,9 @@ TextAttrsMgr::TextPosTextAttr:: const nsIContent* content = aFrame->GetContent(); if (content && content->IsHTML()) { const nsIAtom* tagName = content->Tag(); - if (tagName == nsGkAtoms::sup) + if (tagName == nsGkAtoms::sup) return eTextPosSuper; - if (tagName == nsGkAtoms::sub) + if (tagName == nsGkAtoms::sub) return eTextPosSub; } diff --git a/accessible/src/base/TextAttrs.h b/accessible/src/base/TextAttrs.h index 6c26572084c..23d74bcfdb9 100644 --- a/accessible/src/base/TextAttrs.h +++ b/accessible/src/base/TextAttrs.h @@ -69,8 +69,8 @@ public: * @param aEndHTOffset [out, optional] end hyper text offset */ void GetAttributes(nsIPersistentProperties* aAttributes, - int32_t* aStartHTOffset = nullptr, - int32_t* aEndHTOffset = nullptr); + uint32_t* aStartHTOffset = nullptr, + uint32_t* aEndHTOffset = nullptr); protected: /** @@ -85,7 +85,7 @@ protected: */ class TextAttr; void GetRange(TextAttr* aAttrArray[], uint32_t aAttrArrayLen, - int32_t* aStartHTOffset, int32_t* aEndHTOffset); + uint32_t* aStartOffset, uint32_t* aEndOffset); private: Accessible* mOffsetAcc; @@ -315,7 +315,7 @@ protected: FontSizeTextAttr(nsIFrame* aRootFrame, nsIFrame* aFrame); virtual ~FontSizeTextAttr() { } - protected: + protected: // TTextAttr virtual bool GetValueFor(Accessible* aAccessible, nscoord* aValue); diff --git a/accessible/src/base/nsAccessiblePivot.cpp b/accessible/src/base/nsAccessiblePivot.cpp index bfc713e63e4..fadd0773c77 100644 --- a/accessible/src/base/nsAccessiblePivot.cpp +++ b/accessible/src/base/nsAccessiblePivot.cpp @@ -14,7 +14,7 @@ using namespace mozilla::a11y; /** - * An object that stores a given traversal rule during + * An object that stores a given traversal rule during the pivot movement. */ class RuleCache { @@ -325,7 +325,7 @@ nsAccessiblePivot::MoveNextByText(TextBoundaryType aBoundary, bool* aResult) // If there's no more text on the current node, try to find the next text // node; if there isn't one, bail out. - if (tempEnd == text->CharacterCount()) { + if (tempEnd == static_cast(text->CharacterCount())) { if (tempPosition == root) return NS_OK; @@ -389,7 +389,7 @@ nsAccessiblePivot::MoveNextByText(TextBoundaryType aBoundary, bool* aResult) // instead want to traverse into it. So restart the movement with // the child as the starting point. if (childAtOffset && nsAccUtils::IsEmbeddedObject(childAtOffset) && - tempStart == childAtOffset->StartOffset()) { + tempStart == static_cast(childAtOffset->StartOffset())) { tempPosition = childAtOffset; tempStart = tempEnd = -1; continue; @@ -517,7 +517,7 @@ nsAccessiblePivot::MovePreviousByText(TextBoundaryType aBoundary, bool* aResult) // instead want to traverse into it. So restart the movement with // the child as the starting point. if (childAtOffset && nsAccUtils::IsEmbeddedObject(childAtOffset) && - tempEnd == childAtOffset->EndOffset()) { + tempEnd == static_cast(childAtOffset->EndOffset())) { tempPosition = childAtOffset; tempStart = tempEnd = childAtOffset->AsHyperText()->CharacterCount(); continue; diff --git a/accessible/src/generic/HyperTextAccessible-inl.h b/accessible/src/generic/HyperTextAccessible-inl.h index d08da2c51a0..1e7f740aba4 100644 --- a/accessible/src/generic/HyperTextAccessible-inl.h +++ b/accessible/src/generic/HyperTextAccessible-inl.h @@ -21,22 +21,15 @@ namespace a11y { inline bool HyperTextAccessible::IsValidOffset(int32_t aOffset) { - int32_t offset = ConvertMagicOffset(aOffset); - return offset >= 0 && offset <= static_cast(CharacterCount()); + return ConvertMagicOffset(aOffset) <= CharacterCount(); } inline bool HyperTextAccessible::IsValidRange(int32_t aStartOffset, int32_t aEndOffset) { - int32_t startOffset = ConvertMagicOffset(aStartOffset); - if (startOffset < 0) - return false; - - int32_t endOffset = ConvertMagicOffset(aEndOffset); - if (endOffset < 0 || startOffset > endOffset) - return false; - - return endOffset <= static_cast(CharacterCount()); + uint32_t endOffset = ConvertMagicOffset(aEndOffset); + return ConvertMagicOffset(aStartOffset) <= endOffset && + endOffset <= CharacterCount(); } inline bool @@ -108,8 +101,8 @@ HyperTextAccessible::PasteText(int32_t aPosition) } } -inline int32_t -HyperTextAccessible::ConvertMagicOffset(int32_t aOffset) +inline uint32_t +HyperTextAccessible::ConvertMagicOffset(int32_t aOffset) const { if (aOffset == nsIAccessibleText::TEXT_OFFSET_END_OF_TEXT) return CharacterCount(); @@ -117,11 +110,11 @@ HyperTextAccessible::ConvertMagicOffset(int32_t aOffset) if (aOffset == nsIAccessibleText::TEXT_OFFSET_CARET) return CaretOffset(); - return aOffset; + return aOffset < 0 ? std::numeric_limits::max() : aOffset; } -inline int32_t -HyperTextAccessible::AdjustCaretOffset(int32_t aOffset) const +inline uint32_t +HyperTextAccessible::AdjustCaretOffset(uint32_t aOffset) const { // It is the same character offset when the caret is visually at the very // end of a line or the start of a new line (soft line break). Getting text diff --git a/accessible/src/generic/HyperTextAccessible.cpp b/accessible/src/generic/HyperTextAccessible.cpp index c8fbdf4e476..ff4e6d537cb 100644 --- a/accessible/src/generic/HyperTextAccessible.cpp +++ b/accessible/src/generic/HyperTextAccessible.cpp @@ -83,7 +83,7 @@ HyperTextAccessible::NativeRole() if (tag == nsGkAtoms::article) return roles::DOCUMENT; - + // Deal with html landmark elements if (tag == nsGkAtoms::header) return roles::HEADER; @@ -149,10 +149,9 @@ HyperTextAccessible::GetBoundsInFrame(nsIFrame* aFrame, nsRect screenRect; while (frame && startContentOffset < endContentOffset) { - // Start with this frame's screen rect, which we will - // shrink based on the substring we care about within it. - // We will then add that frame to the total screenRect we - // are returning. + // Start with this frame's screen rect, which we will shrink based on + // the substring we care about within it. We will then add that frame to + // the total screenRect we are returning. nsRect frameScreenRect = frame->GetScreenRectInAppUnits(); // Get the length of the substring in this frame that we want the bounds for @@ -192,8 +191,8 @@ HyperTextAccessible::TextSubstring(int32_t aStartOffset, int32_t aEndOffset, { aText.Truncate(); - int32_t startOffset = ConvertMagicOffset(aStartOffset); - int32_t endOffset = ConvertMagicOffset(aEndOffset); + uint32_t startOffset = ConvertMagicOffset(aStartOffset); + uint32_t endOffset = ConvertMagicOffset(aEndOffset); int32_t startChildIdx = GetChildIndexAtOffset(startOffset); if (startChildIdx == -1) @@ -234,7 +233,7 @@ HyperTextAccessible::TextSubstring(int32_t aStartOffset, int32_t aEndOffset, endChild->AppendTextTo(aText, 0, endOffset - endChildOffset); } -int32_t +uint32_t HyperTextAccessible::DOMPointToOffset(nsINode* aNode, int32_t aNodeOffset, bool aIsEndOffset) const { @@ -256,7 +255,7 @@ HyperTextAccessible::DOMPointToOffset(nsINode* aNode, int32_t aNodeOffset, nsresult rv = ContentToRenderedOffset(frame, aNodeOffset, &offset); NS_ENSURE_SUCCESS(rv, 0); - // Get the child node and + findNode = aNode; } else { @@ -279,7 +278,7 @@ HyperTextAccessible::DOMPointToOffset(nsINode* aNode, int32_t aNodeOffset, // Case #2: there are no children, we're at this node. findNode = aNode; - } else if (aNodeOffset == aNode->GetChildCount()) { + } else if (aNodeOffset == static_cast(aNode->GetChildCount())) { // Case #3: we're after the last child, get next node to this one. for (nsINode* tmpNode = aNode; !findNode && tmpNode && tmpNode != mContent; @@ -319,12 +318,12 @@ HyperTextAccessible::DOMPointToOffset(nsINode* aNode, int32_t aNodeOffset, return TransformOffset(descendant, offset, aIsEndOffset); } -int32_t +uint32_t HyperTextAccessible::TransformOffset(Accessible* aDescendant, - int32_t aOffset, bool aIsEndOffset) const + uint32_t aOffset, bool aIsEndOffset) const { // From the descendant, go up and get the immediate child of this hypertext. - int32_t offset = aOffset; + uint32_t offset = aOffset; Accessible* descendant = aDescendant; while (descendant) { Accessible* parent = descendant->Parent(); @@ -420,8 +419,8 @@ HyperTextAccessible::OffsetToDOMPoint(int32_t aOffset) DOMPoint(); } -int32_t -HyperTextAccessible::FindOffset(int32_t aOffset, nsDirection aDirection, +uint32_t +HyperTextAccessible::FindOffset(uint32_t aOffset, nsDirection aDirection, nsSelectionAmount aAmount, EWordMovementType aWordMovementType) { @@ -434,7 +433,7 @@ HyperTextAccessible::FindOffset(int32_t aOffset, nsDirection aDirection, int32_t childIdx = text->GetChildIndexAtOffset(innerOffset); NS_ASSERTION(childIdx != -1, "Bad in offset!"); if (childIdx == -1) - return -1; + return 0; child = text->GetChildAt(childIdx); @@ -468,7 +467,10 @@ HyperTextAccessible::FindOffset(int32_t aOffset, nsDirection aDirection, } while (text); nsIFrame* childFrame = child->GetFrame(); - NS_ENSURE_TRUE(childFrame, -1); + if (!childFrame) { + NS_ERROR("No child frame"); + return 0; + } int32_t innerContentOffset = innerOffset; if (child->IsTextLeaf()) { @@ -497,13 +499,15 @@ HyperTextAccessible::FindOffset(int32_t aOffset, nsDirection aDirection, pos.mAmount = (aDirection == eDirNext) ? eSelectEndLine : eSelectBeginLine; frameAtOffset->PeekOffset(&pos); } - if (!pos.mResultContent) - return -1; + if (!pos.mResultContent) { + NS_ERROR("No result content!"); + return 0; + } // Turn the resulting DOM point into an offset. - int32_t hyperTextOffset = DOMPointToOffset(pos.mResultContent, - pos.mContentOffset, - aDirection == eDirNext); + uint32_t hyperTextOffset = DOMPointToOffset(pos.mResultContent, + pos.mContentOffset, + aDirection == eDirNext); if (aDirection == eDirPrevious) { // If we reached the end during search, this means we didn't find the DOM point @@ -519,8 +523,8 @@ HyperTextAccessible::FindOffset(int32_t aOffset, nsDirection aDirection, return hyperTextOffset; } -int32_t -HyperTextAccessible::FindLineBoundary(int32_t aOffset, +uint32_t +HyperTextAccessible::FindLineBoundary(uint32_t aOffset, EWhichLineBoundary aWhichLineBoundary) { // Note: empty last line doesn't have own frame (a previous line contains '\n' @@ -533,7 +537,7 @@ HyperTextAccessible::FindLineBoundary(int32_t aOffset, if (IsEmptyLastLineOffset(aOffset)) return FindOffset(aOffset, eDirPrevious, eSelectBeginLine); - int32_t tmpOffset = FindOffset(aOffset, eDirPrevious, eSelectLine); + uint32_t tmpOffset = FindOffset(aOffset, eDirPrevious, eSelectLine); return FindOffset(tmpOffset, eDirPrevious, eSelectBeginLine); } @@ -542,7 +546,7 @@ HyperTextAccessible::FindLineBoundary(int32_t aOffset, return aOffset - 1; // If offset is at first line then return 0 (first line start). - int32_t tmpOffset = FindOffset(aOffset, eDirPrevious, eSelectBeginLine); + uint32_t tmpOffset = FindOffset(aOffset, eDirPrevious, eSelectBeginLine); if (tmpOffset == 0) return 0; @@ -572,7 +576,7 @@ HyperTextAccessible::FindLineBoundary(int32_t aOffset, // Move to begin of the next line if any (arrow down and home keys), // otherwise end of the current line (arrow down only). - int32_t tmpOffset = FindOffset(aOffset, eDirNext, eSelectLine); + uint32_t tmpOffset = FindOffset(aOffset, eDirNext, eSelectLine); if (tmpOffset == CharacterCount()) return tmpOffset; @@ -584,14 +588,15 @@ HyperTextAccessible::FindLineBoundary(int32_t aOffset, return aOffset; // Move to next line end (as down arrow and end key were pressed). - int32_t tmpOffset = FindOffset(aOffset, eDirNext, eSelectLine); - if (tmpOffset != CharacterCount()) - return FindOffset(tmpOffset, eDirNext, eSelectEndLine); - return tmpOffset; + uint32_t tmpOffset = FindOffset(aOffset, eDirNext, eSelectLine); + if (tmpOffset == CharacterCount()) + return tmpOffset; + + return FindOffset(tmpOffset, eDirNext, eSelectEndLine); } } - return -1; + return 0; } void @@ -603,13 +608,13 @@ HyperTextAccessible::TextBeforeOffset(int32_t aOffset, *aStartOffset = *aEndOffset = 0; aText.Truncate(); - int32_t convertedOffset = ConvertMagicOffset(aOffset); - if (convertedOffset < 0) { + uint32_t convertedOffset = ConvertMagicOffset(aOffset); + if (convertedOffset == std::numeric_limits::max()) { NS_ERROR("Wrong given offset!"); return; } - int32_t adjustedOffset = convertedOffset; + uint32_t adjustedOffset = convertedOffset; if (aOffset == nsIAccessibleText::TEXT_OFFSET_CARET) adjustedOffset = AdjustCaretOffset(adjustedOffset); @@ -629,7 +634,7 @@ HyperTextAccessible::TextBeforeOffset(int32_t aOffset, } else { *aStartOffset = FindWordBoundary(adjustedOffset, eDirPrevious, eStartWord); *aEndOffset = FindWordBoundary(*aStartOffset, eDirNext, eStartWord); - if (*aEndOffset != adjustedOffset) { + if (*aEndOffset != static_cast(adjustedOffset)) { *aEndOffset = *aStartOffset; *aStartOffset = FindWordBoundary(*aEndOffset, eDirPrevious, eStartWord); } @@ -675,8 +680,8 @@ HyperTextAccessible::TextAtOffset(int32_t aOffset, *aStartOffset = *aEndOffset = 0; aText.Truncate(); - int32_t adjustedOffset = ConvertMagicOffset(aOffset); - if (adjustedOffset < 0) { + uint32_t adjustedOffset = ConvertMagicOffset(aOffset); + if (adjustedOffset == std::numeric_limits::max()) { NS_ERROR("Wrong given offset!"); return; } @@ -739,13 +744,13 @@ HyperTextAccessible::TextAfterOffset(int32_t aOffset, *aStartOffset = *aEndOffset = 0; aText.Truncate(); - int32_t convertedOffset = ConvertMagicOffset(aOffset); - if (convertedOffset < 0) { + uint32_t convertedOffset = ConvertMagicOffset(aOffset); + if (convertedOffset == std::numeric_limits::max()) { NS_ERROR("Wrong given offset!"); return; } - int32_t adjustedOffset = convertedOffset; + uint32_t adjustedOffset = convertedOffset; if (aOffset == nsIAccessibleText::TEXT_OFFSET_CARET) adjustedOffset = AdjustCaretOffset(adjustedOffset); @@ -776,7 +781,7 @@ HyperTextAccessible::TextAfterOffset(int32_t aOffset, } else { *aEndOffset = FindWordBoundary(convertedOffset, eDirNext, eEndWord); *aStartOffset = FindWordBoundary(*aEndOffset, eDirPrevious, eEndWord); - if (*aStartOffset != convertedOffset) { + if (*aStartOffset != static_cast(convertedOffset)) { *aStartOffset = *aEndOffset; *aEndOffset = FindWordBoundary(*aStartOffset, eDirNext, eEndWord); } @@ -812,7 +817,7 @@ HyperTextAccessible::TextAttributes(bool aIncludeDefAttrs, int32_t aOffset, nsCOMPtr attributes = do_CreateInstance(NS_PERSISTENTPROPERTIES_CONTRACTID); - int32_t offset = ConvertMagicOffset(aOffset); + uint32_t offset = ConvertMagicOffset(aOffset); Accessible* accAtOffset = GetChildAtOffset(offset); if (!accAtOffset) { // Offset 0 is correct offset when accessible has empty text. Include @@ -828,8 +833,8 @@ HyperTextAccessible::TextAttributes(bool aIncludeDefAttrs, int32_t aOffset, } int32_t accAtOffsetIdx = accAtOffset->IndexInParent(); - int32_t startOffset = GetChildOffset(accAtOffsetIdx); - int32_t endOffset = GetChildOffset(accAtOffsetIdx + 1); + uint32_t startOffset = GetChildOffset(accAtOffsetIdx); + uint32_t endOffset = GetChildOffset(accAtOffsetIdx + 1); int32_t offsetInAcc = offset - startOffset; TextAttrsMgr textAttrsMgr(this, aIncludeDefAttrs, accAtOffset, @@ -843,8 +848,8 @@ HyperTextAccessible::TextAttributes(bool aIncludeDefAttrs, int32_t aOffset, RenderedToContentOffset(offsetFrame, offsetInAcc, &nodeOffset); // Set 'misspelled' text attribute. - GetSpellTextAttribute(accAtOffset->GetNode(), nodeOffset, - &startOffset, &endOffset, attributes); + GetSpellTextAttr(accAtOffset->GetNode(), nodeOffset, + &startOffset, &endOffset, attributes); } *aStartOffset = startOffset; @@ -1024,9 +1029,11 @@ nsIntRect HyperTextAccessible::TextBounds(int32_t aStartOffset, int32_t aEndOffset, uint32_t aCoordType) { - int32_t startOffset = ConvertMagicOffset(aStartOffset); - int32_t endOffset = ConvertMagicOffset(aEndOffset); - NS_ASSERTION(startOffset < endOffset, "Wrong bad in!"); + uint32_t startOffset = ConvertMagicOffset(aStartOffset); + uint32_t endOffset = ConvertMagicOffset(aEndOffset); + NS_ASSERTION(startOffset < endOffset && + endOffset != std::numeric_limits::max(), + "Wrong bad in!"); int32_t childIdx = GetChildIndexAtOffset(startOffset); if (childIdx == -1) @@ -1036,7 +1043,7 @@ HyperTextAccessible::TextBounds(int32_t aStartOffset, int32_t aEndOffset, int32_t prevOffset = GetChildOffset(childIdx); int32_t offset1 = startOffset - prevOffset; - while (childIdx < ChildCount()) { + while (childIdx < static_cast(ChildCount())) { nsIFrame* frame = GetChildAt(childIdx++)->GetFrame(); if (!frame) { NS_NOTREACHED("No frame for a child!"); @@ -1044,7 +1051,7 @@ HyperTextAccessible::TextBounds(int32_t aStartOffset, int32_t aEndOffset, } int32_t nextOffset = GetChildOffset(childIdx); - if (nextOffset >= endOffset) { + if (nextOffset >= static_cast(endOffset)) { bounds.UnionRect(bounds, GetBoundsInFrame(frame, offset1, endOffset - prevOffset)); break; @@ -1361,7 +1368,7 @@ HyperTextAccessible::SelectionBoundsAt(int32_t aSelectionNum, GetSelectionDOMRanges(nsISelectionController::SELECTION_NORMAL, &ranges); uint32_t rangeCount = ranges.Length(); - if (aSelectionNum < 0 || aSelectionNum >= rangeCount) + if (aSelectionNum < 0 || aSelectionNum >= static_cast(rangeCount)) return false; nsRange* range = ranges[aSelectionNum]; @@ -1394,8 +1401,8 @@ HyperTextAccessible::SetSelectionBoundsAt(int32_t aSelectionNum, int32_t aStartOffset, int32_t aEndOffset) { - int32_t startOffset = ConvertMagicOffset(aStartOffset); - int32_t endOffset = ConvertMagicOffset(aEndOffset); + uint32_t startOffset = ConvertMagicOffset(aStartOffset); + uint32_t endOffset = ConvertMagicOffset(aEndOffset); dom::Selection* domSel = DOMSelection(); if (!domSel) @@ -1403,7 +1410,7 @@ HyperTextAccessible::SetSelectionBoundsAt(int32_t aSelectionNum, nsRefPtr range; uint32_t rangeCount = domSel->GetRangeCount(); - if (aSelectionNum == rangeCount) + if (aSelectionNum == static_cast(rangeCount)) range = new nsRange(mContent); else range = domSel->GetRangeAt(aSelectionNum); @@ -1416,7 +1423,7 @@ HyperTextAccessible::SetSelectionBoundsAt(int32_t aSelectionNum, // If new range was created then add it, otherwise notify selection listeners // that existing selection range was changed. - if (aSelectionNum == rangeCount) + if (aSelectionNum == static_cast(rangeCount)) return NS_SUCCEEDED(domSel->AddRange(range)); domSel->RemoveRange(range); @@ -1801,7 +1808,7 @@ HyperTextAccessible::GetDOMPointByFrameOffset(nsIFrame* aFrame, int32_t aOffset, if (!aFrame) { // If the given frame is null then set offset after the DOM node of the // given accessible. - NS_ASSERTION(!aAccessible->IsDoc(), + NS_ASSERTION(!aAccessible->IsDoc(), "Shouldn't be called on document accessible!"); nsIContent* content = aAccessible->GetContent(); @@ -1837,26 +1844,26 @@ HyperTextAccessible::GetDOMPointByFrameOffset(nsIFrame* aFrame, int32_t aOffset, } // HyperTextAccessible -nsresult -HyperTextAccessible::GetSpellTextAttribute(nsINode* aNode, - int32_t aNodeOffset, - int32_t* aHTStartOffset, - int32_t* aHTEndOffset, - nsIPersistentProperties* aAttributes) +void +HyperTextAccessible::GetSpellTextAttr(nsINode* aNode, + int32_t aNodeOffset, + uint32_t* aStartOffset, + uint32_t* aEndOffset, + nsIPersistentProperties* aAttributes) { nsRefPtr fs = FrameSelection(); if (!fs) - return NS_OK; + return; dom::Selection* domSel = fs->GetSelection(nsISelectionController::SELECTION_SPELLCHECK); if (!domSel) - return NS_OK; + return; int32_t rangeCount = domSel->GetRangeCount(); if (rangeCount <= 0) - return NS_OK; + return; - int32_t startHTOffset = 0, endHTOffset = 0; + int32_t startOffset = 0, endOffset = 0; for (int32_t idx = 0; idx < rangeCount; idx++) { nsRange* range = domSel->GetRangeAt(idx); if (range->Collapsed()) @@ -1865,8 +1872,9 @@ HyperTextAccessible::GetSpellTextAttribute(nsINode* aNode, // See if the point comes after the range in which case we must continue in // case there is another range after this one. nsINode* endNode = range->GetEndParent(); - int32_t endOffset = range->EndOffset(); - if (nsContentUtils::ComparePoints(aNode, aNodeOffset, endNode, endOffset) >= 0) + int32_t endNodeOffset = range->EndOffset(); + if (nsContentUtils::ComparePoints(aNode, aNodeOffset, + endNode, endNodeOffset) >= 0) continue; // At this point our point is either in this range or before it but after @@ -1874,43 +1882,43 @@ HyperTextAccessible::GetSpellTextAttribute(nsINode* aNode, // point in which case the point is in the missspelled range, otherwise it // must be before the range and after the previous one if any. nsINode* startNode = range->GetStartParent(); - int32_t startOffset = range->StartOffset(); - if (nsContentUtils::ComparePoints(startNode, startOffset, aNode, + int32_t startNodeOffset = range->StartOffset(); + if (nsContentUtils::ComparePoints(startNode, startNodeOffset, aNode, aNodeOffset) <= 0) { - startHTOffset = DOMPointToOffset(startNode, startOffset); + startOffset = DOMPointToOffset(startNode, startNodeOffset); - endHTOffset = DOMPointToOffset(endNode, endOffset); + endOffset = DOMPointToOffset(endNode, endNodeOffset); - if (startHTOffset > *aHTStartOffset) - *aHTStartOffset = startHTOffset; + if (startOffset > *aStartOffset) + *aStartOffset = startOffset; - if (endHTOffset < *aHTEndOffset) - *aHTEndOffset = endHTOffset; + if (endOffset < *aEndOffset) + *aEndOffset = endOffset; if (aAttributes) { nsAccUtils::SetAccAttr(aAttributes, nsGkAtoms::invalid, NS_LITERAL_STRING("spelling")); } - return NS_OK; + return; } // This range came after the point. - endHTOffset = DOMPointToOffset(startNode, startOffset); + endOffset = DOMPointToOffset(startNode, startNodeOffset); if (idx > 0) { nsRange* prevRange = domSel->GetRangeAt(idx - 1); - startHTOffset = DOMPointToOffset(prevRange->GetEndParent(), - prevRange->EndOffset()); + startOffset = DOMPointToOffset(prevRange->GetEndParent(), + prevRange->EndOffset()); } - if (startHTOffset > *aHTStartOffset) - *aHTStartOffset = startHTOffset; + if (startOffset > *aStartOffset) + *aStartOffset = startOffset; - if (endHTOffset < *aHTEndOffset) - *aHTEndOffset = endHTOffset; + if (endOffset < *aEndOffset) + *aEndOffset = endOffset; - return NS_OK; + return; } // We never found a range that ended after the point, therefore we know that @@ -1918,16 +1926,14 @@ HyperTextAccessible::GetSpellTextAttribute(nsINode* aNode, // and that we should use the end offset of the last range to compute the // start offset of the text attribute range. nsRange* prevRange = domSel->GetRangeAt(rangeCount - 1); - startHTOffset = DOMPointToOffset(prevRange->GetEndParent(), - prevRange->EndOffset()); + startOffset = DOMPointToOffset(prevRange->GetEndParent(), + prevRange->EndOffset()); - if (startHTOffset > *aHTStartOffset) - *aHTStartOffset = startHTOffset; - - return NS_OK; + if (startOffset > *aStartOffset) + *aStartOffset = startOffset; } -bool +bool HyperTextAccessible::IsTextRole() { if (mRoleMapEntry && diff --git a/accessible/src/generic/HyperTextAccessible.h b/accessible/src/generic/HyperTextAccessible.h index 0d20c1dc862..c68ae0b20f8 100644 --- a/accessible/src/generic/HyperTextAccessible.h +++ b/accessible/src/generic/HyperTextAccessible.h @@ -119,14 +119,14 @@ public: * by the offset returned is at [offset]. If the passed-in offset in inside a * descendant, then the returned offset will be on the relevant embedded object char. */ - int32_t DOMPointToOffset(nsINode* aNode, int32_t aNodeOffset, - bool aIsEndOffset = false) const; + uint32_t DOMPointToOffset(nsINode* aNode, int32_t aNodeOffset, + bool aIsEndOffset = false) const; /** * Transform the given a11y point into the offset relative this hypertext. */ - int32_t TransformOffset(Accessible* aDescendant, int32_t aOffset, - bool aIsEndOffset) const; + uint32_t TransformOffset(Accessible* aDescendant, uint32_t aOffset, + bool aIsEndOffset) const; /** * Convert start and end hypertext offsets into DOM range. @@ -416,12 +416,12 @@ protected: /** * Transform magic offset into text offset. */ - int32_t ConvertMagicOffset(int32_t aOffset); + uint32_t ConvertMagicOffset(int32_t aOffset) const; /** * Adjust an offset the caret stays at to get a text by line boundary. */ - int32_t AdjustCaretOffset(int32_t aOffset) const; + uint32_t AdjustCaretOffset(uint32_t aOffset) const; /** * Return true if caret is at end of line. @@ -440,7 +440,7 @@ protected: /** * Return an offset of the found word boundary. */ - int32_t FindWordBoundary(int32_t aOffset, nsDirection aDirection, + uint32_t FindWordBoundary(uint32_t aOffset, nsDirection aDirection, EWordMovementType aWordMovementType) { return FindOffset(aOffset, aDirection, eSelectWord, aWordMovementType); @@ -464,16 +464,16 @@ protected: /** * Return an offset for requested line boundary. See constants above. */ - int32_t FindLineBoundary(int32_t aOffset, - EWhichLineBoundary aWhichLineBoundary); + uint32_t FindLineBoundary(uint32_t aOffset, + EWhichLineBoundary aWhichLineBoundary); /** * Return an offset corresponding to the given direction and selection amount * relative the given offset. A helper used to find word or line boundaries. */ - int32_t FindOffset(int32_t aOffset, nsDirection aDirection, - nsSelectionAmount aAmount, - EWordMovementType aWordMovementType = eDefaultBehavior); + uint32_t FindOffset(uint32_t aOffset, nsDirection aDirection, + nsSelectionAmount aAmount, + EWordMovementType aWordMovementType = eDefaultBehavior); /** * Return the boundaries of the substring in case of textual frame or @@ -516,10 +516,9 @@ protected: * @param aEndOffset [in, out] the end offset * @param aAttributes [out, optional] result attributes */ - nsresult GetSpellTextAttribute(nsINode* aNode, int32_t aNodeOffset, - int32_t *aStartOffset, - int32_t *aEndOffset, - nsIPersistentProperties *aAttributes); + void GetSpellTextAttr(nsINode* aNode, int32_t aNodeOffset, + uint32_t* aStartOffset, uint32_t* aEndOffset, + nsIPersistentProperties* aAttributes); private: /** diff --git a/accessible/src/xul/XULListboxAccessible.cpp b/accessible/src/xul/XULListboxAccessible.cpp index 8d2aae5fc52..65d4fb862cb 100644 --- a/accessible/src/xul/XULListboxAccessible.cpp +++ b/accessible/src/xul/XULListboxAccessible.cpp @@ -248,7 +248,7 @@ XULListboxAccessible::RowCount() Accessible* XULListboxAccessible::CellAt(uint32_t aRowIndex, uint32_t aColumnIndex) -{ +{ nsCOMPtr control = do_QueryInterface(mContent); NS_ENSURE_TRUE(control, nullptr); @@ -280,7 +280,7 @@ XULListboxAccessible::IsColSelected(uint32_t aColIdx) nsresult rv = control->GetSelectedCount(&selectedrowCount); NS_ENSURE_SUCCESS(rv, false); - return selectedrowCount == RowCount(); + return selectedrowCount == static_cast(RowCount()); } bool @@ -338,7 +338,8 @@ XULListboxAccessible::SelectedColCount() nsresult rv = control->GetSelectedCount(&selectedRowCount); NS_ENSURE_SUCCESS(rv, 0); - return selectedRowCount > 0 && selectedRowCount == RowCount() ? ColCount() : 0; + return selectedRowCount > 0 && + selectedRowCount == static_cast(RowCount()) ? ColCount() : 0; } uint32_t @@ -560,7 +561,7 @@ XULListboxAccessible::ContainerWidget() const if (inputElm) { nsCOMPtr inputNode = do_QueryInterface(inputElm); if (inputNode) { - Accessible* input = + Accessible* input = mDoc->GetAccessible(inputNode); return input ? input->ContainerWidget() : nullptr; } @@ -587,12 +588,12 @@ XULListitemAccessible:: NS_IMPL_ISUPPORTS_INHERITED0(XULListitemAccessible, Accessible) -Accessible* +Accessible* XULListitemAccessible::GetListAccessible() { if (IsDefunct()) return nullptr; - + nsCOMPtr listItem = do_QueryInterface(mContent); if (!listItem) From 7adf0424ecb4c70aa3c25ec9fbf9ad8d9cd8ccd6 Mon Sep 17 00:00:00 2001 From: Jeff Gilbert Date: Mon, 28 Apr 2014 18:11:14 -0700 Subject: [PATCH 09/30] Bug 997374 - Check FB status in GLScreenBuffer. - r=bjacob --- gfx/gl/GLScreenBuffer.cpp | 61 ++++++++++++++++++++++++++------------- gfx/gl/GLScreenBuffer.h | 16 +++++----- 2 files changed, 50 insertions(+), 27 deletions(-) diff --git a/gfx/gl/GLScreenBuffer.cpp b/gfx/gl/GLScreenBuffer.cpp index 7704e9212a9..078bab4f0f4 100755 --- a/gfx/gl/GLScreenBuffer.cpp +++ b/gfx/gl/GLScreenBuffer.cpp @@ -381,7 +381,7 @@ GLScreenBuffer::Morph(SurfaceFactory_GL* newFactory, SurfaceStreamType streamTyp mStream = newStream; } -void +bool GLScreenBuffer::Attach(SharedSurface* surface, const gfx::IntSize& size) { ScopedBindFramebuffer autoFB(mGL); @@ -400,9 +400,17 @@ GLScreenBuffer::Attach(SharedSurface* surface, const gfx::IntSize& size) mRead->Attach(surf); } else { // Else something changed, so resize: - DrawBuffer* draw = CreateDraw(size); // Can be null. + DrawBuffer* draw = nullptr; + bool drawOk = CreateDraw(size, &draw); // Can be null. + ReadBuffer* read = CreateRead(surf); - MOZ_ASSERT(read); // Should never fail if SwapProd succeeded. + bool readOk = !!read; + + if (!drawOk || !readOk) { + delete draw; + delete read; + return false; + } delete mDraw; delete mRead; @@ -417,6 +425,8 @@ GLScreenBuffer::Attach(SharedSurface* surface, const gfx::IntSize& size) if (!PreserveBuffer()) { // DiscardFramebuffer here could help perf on some mobile platforms. } + + return true; } bool @@ -433,9 +443,7 @@ GLScreenBuffer::Swap(const gfx::IntSize& size) } MOZ_ASSERT(nextSurf); - Attach(nextSurf, size); - - return true; + return Attach(nextSurf, size); } bool @@ -454,18 +462,17 @@ GLScreenBuffer::Resize(const gfx::IntSize& size) if (!surface) return false; - Attach(surface, size); - return true; + return Attach(surface, size); } -DrawBuffer* -GLScreenBuffer::CreateDraw(const gfx::IntSize& size) +bool +GLScreenBuffer::CreateDraw(const gfx::IntSize& size, DrawBuffer** out_buffer) { GLContext* gl = mFactory->GL(); const GLFormats& formats = mFactory->Formats(); const SurfaceCaps& caps = mFactory->DrawCaps(); - return DrawBuffer::Create(gl, caps, formats, size); + return DrawBuffer::Create(gl, caps, formats, size, out_buffer); } ReadBuffer* @@ -508,17 +515,21 @@ GLScreenBuffer::Readback(SharedSurface_GL* src, DataSourceSurface* dest) } } -DrawBuffer* +bool DrawBuffer::Create(GLContext* const gl, const SurfaceCaps& caps, const GLFormats& formats, - const gfx::IntSize& size) + const gfx::IntSize& size, + DrawBuffer** out_buffer) { + MOZ_ASSERT(out_buffer); + *out_buffer = nullptr; + if (!caps.color) { MOZ_ASSERT(!caps.alpha && !caps.depth && !caps.stencil); // Nothing is needed. - return nullptr; + return true; } GLuint colorMSRB = 0; @@ -552,9 +563,15 @@ DrawBuffer::Create(GLContext* const gl, GLuint fb = 0; gl->fGenFramebuffers(1, &fb); gl->AttachBuffersToFB(0, colorMSRB, depthRB, stencilRB, fb); - MOZ_ASSERT(gl->IsFramebufferComplete(fb)); - return new DrawBuffer(gl, size, fb, colorMSRB, depthRB, stencilRB); + ScopedDeletePtr buffer; + buffer = new DrawBuffer(gl, size, fb, colorMSRB, depthRB, stencilRB); + + if (!gl->IsFramebufferComplete(fb)) + return false; + + *out_buffer = buffer.forget(); + return true; } DrawBuffer::~DrawBuffer() @@ -624,11 +641,15 @@ ReadBuffer::Create(GLContext* gl, gl->AttachBuffersToFB(colorTex, colorRB, depthRB, stencilRB, fb, target); gl->mFBOMapping[fb] = surf; - MOZ_ASSERT(gl->IsFramebufferComplete(fb)); - return new ReadBuffer(gl, - fb, depthRB, stencilRB, - surf); + ScopedDeletePtr buffer; + buffer = new ReadBuffer(gl, + fb, depthRB, stencilRB, + surf); + if (!gl->IsFramebufferComplete(fb)) + return nullptr; + + return buffer.forget(); } ReadBuffer::~ReadBuffer() diff --git a/gfx/gl/GLScreenBuffer.h b/gfx/gl/GLScreenBuffer.h index 6324000c1aa..8c039ba1083 100644 --- a/gfx/gl/GLScreenBuffer.h +++ b/gfx/gl/GLScreenBuffer.h @@ -46,11 +46,13 @@ protected: typedef struct gfx::SurfaceCaps SurfaceCaps; public: - // Infallible, may return null if unneeded. - static DrawBuffer* Create(GLContext* const gl, - const SurfaceCaps& caps, - const GLFormats& formats, - const gfx::IntSize& size); + // Fallible! + // But it may return true with *out_buffer==nullptr if unneeded. + static bool Create(GLContext* const gl, + const SurfaceCaps& caps, + const GLFormats& formats, + const gfx::IntSize& size, + DrawBuffer** out_buffer); protected: GLContext* const mGL; @@ -282,9 +284,9 @@ public: void Readback(SharedSurface_GL* src, gfx::DataSourceSurface* dest); protected: - void Attach(SharedSurface* surface, const gfx::IntSize& size); + bool Attach(SharedSurface* surface, const gfx::IntSize& size); - DrawBuffer* CreateDraw(const gfx::IntSize& size); + bool CreateDraw(const gfx::IntSize& size, DrawBuffer** out_buffer); ReadBuffer* CreateRead(SharedSurface_GL* surf); public: From d168ded51704b4a7d80cd6c544b4295a656fbb8f Mon Sep 17 00:00:00 2001 From: Matthew Gregan Date: Sun, 27 Apr 2014 22:11:00 +1200 Subject: [PATCH 10/30] Bug 1002320 - Switch video readers at the earliest possible point rather than the latest. r=cajbir --- .../media/mediasource/MediaSourceDecoder.cpp | 44 +++++++++---------- content/media/mediasource/SourceBuffer.cpp | 6 --- content/media/mediasource/SubBufferDecoder.h | 12 +++++ 3 files changed, 32 insertions(+), 30 deletions(-) diff --git a/content/media/mediasource/MediaSourceDecoder.cpp b/content/media/mediasource/MediaSourceDecoder.cpp index d3ca6d5c2a4..a267d4f9c5c 100644 --- a/content/media/mediasource/MediaSourceDecoder.cpp +++ b/content/media/mediasource/MediaSourceDecoder.cpp @@ -88,6 +88,9 @@ public: MOZ_ASSERT(mPendingDecoders.IsEmpty()); return false; } + + MaybeSwitchVideoReaders(aTimeThreshold); + bool rv = GetVideoReader()->DecodeVideoFrame(aKeyFrameSkip, aTimeThreshold); nsAutoTArray video; @@ -103,16 +106,6 @@ public: MSE_DEBUG("%p MSR::DecodeVF %d (%p) returned false (readers=%u)", this, mActiveVideoDecoder, mDecoders[mActiveVideoDecoder].get(), mDecoders.Length()); - if (SwitchVideoReaders(aTimeThreshold)) { - rv = GetVideoReader()->DecodeVideoFrame(aKeyFrameSkip, aTimeThreshold); - - nsAutoTArray video; - GetVideoReader()->VideoQueue().GetElementsAfter(-1, &video); - for (uint32_t i = 0; i < video.Length(); ++i) { - VideoQueue().Push(video[i]); - } - GetVideoReader()->VideoQueue().Empty(); - } return rv; } @@ -136,14 +129,9 @@ public: void CallDecoderInitialization(); private: - bool SwitchVideoReaders(int64_t aTimeThreshold) { - MOZ_ASSERT(mActiveVideoDecoder != -1); - // XXX: We switch when the first reader is depleted, but it might be - // better to switch as soon as the next reader is ready to decode and - // has data for the current media time. + void MaybeSwitchVideoReaders(int64_t aTimeThreshold) { ReentrantMonitorAutoEnter mon(mDecoder->GetReentrantMonitor()); - - GetVideoReader()->SetIdle(); + MOZ_ASSERT(mActiveVideoDecoder != -1); WaitForPendingDecoders(); @@ -151,15 +139,17 @@ private: if (!mDecoders[i]->GetReader()->GetMediaInfo().HasVideo()) { continue; } - mActiveVideoDecoder = i; - MSE_DEBUG("%p MSR::DecodeVF switching to %d", this, mActiveVideoDecoder); + if (aTimeThreshold >= mDecoders[i]->GetMediaStartTime()) { + GetVideoReader()->SetIdle(); - GetVideoReader()->SetActive(); - GetVideoReader()->DecodeToTarget(aTimeThreshold); + mActiveVideoDecoder = i; + MSE_DEBUG("%p MSR::DecodeVF switching to %d", this, mActiveVideoDecoder); - return true; + GetVideoReader()->SetActive(); + GetVideoReader()->DecodeToTarget(aTimeThreshold); + break; + } } - return false; } MediaDecoderReader* GetAudioReader() { @@ -337,9 +327,13 @@ MediaSourceReader::CallDecoderInitialization() MediaInfo mi; nsAutoPtr tags; // TODO: Handle metadata. nsresult rv; + int64_t startTime = 0; { ReentrantMonitorAutoExit exitMon(mDecoder->GetReentrantMonitor()); rv = reader->ReadMetadata(&mi, getter_Transfers(tags)); + if (NS_SUCCEEDED(rv)) { + reader->FindStartTime(startTime); + } } reader->SetIdle(); if (NS_FAILED(rv)) { @@ -347,10 +341,12 @@ MediaSourceReader::CallDecoderInitialization() MSE_DEBUG("%p: Reader %p failed to initialize, rv=%x", this, reader, rv); continue; } + decoder->SetMediaStartTime(startTime); bool active = false; if (mi.HasVideo() || mi.HasAudio()) { - MSE_DEBUG("%p: Reader %p has video=%d audio=%d", this, reader, mi.HasVideo(), mi.HasAudio()); + MSE_DEBUG("%p: Reader %p has video=%d audio=%d startTime=%lld", + this, reader, mi.HasVideo(), mi.HasAudio(), startTime); active = true; } diff --git a/content/media/mediasource/SourceBuffer.cpp b/content/media/mediasource/SourceBuffer.cpp index df752435dbc..8631706622f 100644 --- a/content/media/mediasource/SourceBuffer.cpp +++ b/content/media/mediasource/SourceBuffer.cpp @@ -196,16 +196,10 @@ SourceBuffer::GetBuffered(ErrorResult& aRv) nsRefPtr r = new TimeRanges(); mDecoders[i]->GetBuffered(r); if (r->Length() > 0) { - MSE_DEBUG("%p GetBuffered decoder=%u Length=%u Start=%f End=%f", this, i, r->Length(), - r->GetStartTime(), r->GetEndTime()); ranges->Add(r->GetStartTime(), r->GetEndTime()); - } else { - MSE_DEBUG("%p GetBuffered decoder=%u Length=%u", this, i, r->Length()); } } ranges->Normalize(); - MSE_DEBUG("%p GetBuffered Length=%u Start=%f End=%f", this, ranges->Length(), - ranges->GetStartTime(), ranges->GetEndTime()); return ranges.forget(); } diff --git a/content/media/mediasource/SubBufferDecoder.h b/content/media/mediasource/SubBufferDecoder.h index 94005874fc7..8ddea5ca76f 100644 --- a/content/media/mediasource/SubBufferDecoder.h +++ b/content/media/mediasource/SubBufferDecoder.h @@ -21,6 +21,7 @@ public: // of the caller to manage the memory of the MediaResource object. SubBufferDecoder(MediaResource* aResource, MediaSourceDecoder* aParentDecoder) : BufferDecoder(aResource), mParentDecoder(aParentDecoder), mReader(nullptr) + , mMediaDuration(-1), mMediaStartTime(0) { } @@ -72,10 +73,21 @@ public: return mMediaDuration; } + int64_t GetMediaStartTime() + { + return mMediaStartTime; + } + + void SetMediaStartTime(int64_t aMediaStartTime) + { + mMediaStartTime = aMediaStartTime; + } + private: MediaSourceDecoder* mParentDecoder; nsAutoPtr mReader; int64_t mMediaDuration; + int64_t mMediaStartTime; }; } // namespace mozilla From 429f0cf5d56e27eb374c67e52073f808175c864c Mon Sep 17 00:00:00 2001 From: Jim Chen Date: Mon, 28 Apr 2014 22:20:51 -0400 Subject: [PATCH 11/30] Bug 999071 - Don't notify observers in profiler when used by Android ANR reporter; r=BenWa --- tools/profiler/TableTicker.cpp | 17 +++++++++-------- tools/profiler/platform.cpp | 16 ++++++++++------ tools/profiler/platform.h | 12 ++++++++++++ 3 files changed, 31 insertions(+), 14 deletions(-) diff --git a/tools/profiler/TableTicker.cpp b/tools/profiler/TableTicker.cpp index 78204af6bb6..80fd6ed837e 100644 --- a/tools/profiler/TableTicker.cpp +++ b/tools/profiler/TableTicker.cpp @@ -283,13 +283,15 @@ void TableTicker::StreamJSObject(JSStreamWriter& b) } } - // Send a event asking any subprocesses (plugins) to - // give us their information - SubprocessClosure closure(&b); - nsCOMPtr os = mozilla::services::GetObserverService(); - if (os) { - nsRefPtr pse = new ProfileSaveEvent(SubProcessCallback, &closure); - os->NotifyObservers(pse, "profiler-subprocess", nullptr); + if (Sampler::CanNotifyObservers()) { + // Send a event asking any subprocesses (plugins) to + // give us their information + SubprocessClosure closure(&b); + nsCOMPtr os = mozilla::services::GetObserverService(); + if (os) { + nsRefPtr pse = new ProfileSaveEvent(SubProcessCallback, &closure); + os->NotifyObservers(pse, "profiler-subprocess", nullptr); + } } #if defined(SPS_OS_android) && !defined(MOZ_WIDGET_GONK) @@ -306,7 +308,6 @@ void TableTicker::StreamJSObject(JSStreamWriter& b) b.EndArray(); b.EndObject(); - } // END SaveProfileTask et al diff --git a/tools/profiler/platform.cpp b/tools/profiler/platform.cpp index 5b01c42daba..5b5fd5d1c96 100644 --- a/tools/profiler/platform.cpp +++ b/tools/profiler/platform.cpp @@ -698,9 +698,11 @@ void mozilla_sampler_start(int aProfileEntries, double aInterval, sIsProfiling = true; - nsCOMPtr os = mozilla::services::GetObserverService(); - if (os) - os->NotifyObservers(nullptr, "profiler-started", nullptr); + if (Sampler::CanNotifyObservers()) { + nsCOMPtr os = mozilla::services::GetObserverService(); + if (os) + os->NotifyObservers(nullptr, "profiler-started", nullptr); + } LOG("END mozilla_sampler_start"); } @@ -749,9 +751,11 @@ void mozilla_sampler_stop() sIsProfiling = false; - nsCOMPtr os = mozilla::services::GetObserverService(); - if (os) - os->NotifyObservers(nullptr, "profiler-stopped", nullptr); + if (Sampler::CanNotifyObservers()) { + nsCOMPtr os = mozilla::services::GetObserverService(); + if (os) + os->NotifyObservers(nullptr, "profiler-stopped", nullptr); + } LOG("END mozilla_sampler_stop"); } diff --git a/tools/profiler/platform.h b/tools/profiler/platform.h index c0925c5a984..ea401cc005c 100644 --- a/tools/profiler/platform.h +++ b/tools/profiler/platform.h @@ -44,6 +44,7 @@ #include "mozilla/unused.h" #include "mozilla/TimeStamp.h" #include "mozilla/Mutex.h" +#include "MainThreadUtils.h" #include "PlatformMacros.h" #include "v8-support.h" #include @@ -353,6 +354,17 @@ class Sampler { static void SetActiveSampler(TableTicker* sampler) { sActiveSampler = sampler; } static mozilla::Mutex* sRegisteredThreadsMutex; + + static bool CanNotifyObservers() { +#if defined(SPS_OS_android) && !defined(MOZ_WIDGET_GONK) + // Android ANR reporter uses the profiler off the main thread + return NS_IsMainThread(); +#else + MOZ_ASSERT(NS_IsMainThread()); + return true; +#endif + } + protected: static std::vector* sRegisteredThreads; static TableTicker* sActiveSampler; From 8715f7746488769146fd22b221ec81e24dfc8319 Mon Sep 17 00:00:00 2001 From: Jim Chen Date: Mon, 28 Apr 2014 22:20:52 -0400 Subject: [PATCH 12/30] Bug 999071 - Empty ANR file during testing instead of deleting it; r=gbrown --- build/mobile/remoteautomation.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/build/mobile/remoteautomation.py b/build/mobile/remoteautomation.py index 780b35fb242..30b5661dc59 100644 --- a/build/mobile/remoteautomation.py +++ b/build/mobile/remoteautomation.py @@ -98,10 +98,12 @@ class RemoteAutomation(Automation): return status def deleteANRs(self): - # delete ANR traces.txt file; usually need root permissions + # empty ANR traces.txt file; usually need root permissions + # we make it empty and writable so we can test the ANR reporter later traces = "/data/anr/traces.txt" try: - self._devicemanager.shellCheckOutput(['rm', traces], root=True) + self._devicemanager.shellCheckOutput(['echo', '', '>', traces], root=True) + self._devicemanager.shellCheckOutput(['chmod', '666', traces], root=True) except DMError: print "Error deleting %s" % traces pass From b0d3cd067908c188761b62aebef4981cb680d9fe Mon Sep 17 00:00:00 2001 From: Jim Chen Date: Mon, 28 Apr 2014 22:20:52 -0400 Subject: [PATCH 13/30] Bug 999071 - Add test for ANR reporter; r=blassey --- mobile/android/base/tests/robocop.ini | 1 + .../android/base/tests/testANRReporter.java | 207 ++++++++++++++++++ 2 files changed, 208 insertions(+) create mode 100644 mobile/android/base/tests/testANRReporter.java diff --git a/mobile/android/base/tests/robocop.ini b/mobile/android/base/tests/robocop.ini index 73efd8c428d..48a9d5a9fb5 100644 --- a/mobile/android/base/tests/robocop.ini +++ b/mobile/android/base/tests/robocop.ini @@ -10,6 +10,7 @@ skip-if = processor == "x86" skip-if = android_version == "10" [testAdobeFlash] skip-if = processor == "x86" +[testANRReporter] [testAwesomebar] [testAxisLocking] # disabled on x86 only; bug 927476 diff --git a/mobile/android/base/tests/testANRReporter.java b/mobile/android/base/tests/testANRReporter.java new file mode 100644 index 00000000000..a131035321a --- /dev/null +++ b/mobile/android/base/tests/testANRReporter.java @@ -0,0 +1,207 @@ +package org.mozilla.gecko.tests; + +import org.mozilla.gecko.AppConstants; + +import android.content.Context; +import android.content.Intent; + +import com.jayway.android.robotium.solo.Condition; + +import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; + +import org.json.JSONObject; + +/** + * Tests the proper operation of the ANR reporter. + */ +public class testANRReporter extends BaseTest { + + private static final String ANR_ACTION = "android.intent.action.ANR"; + private static final String PING_DIR = "saved-telemetry-pings"; + private static final int WAIT_FOR_PING_TIMEOUT = 10000; + private static final String ANR_PATH = "/data/anr/traces.txt"; + private static final String SAMPLE_ANR + = "----- pid 1 at 2014-01-15 18:55:51 -----\n" + + "Cmd line: " + AppConstants.ANDROID_PACKAGE_NAME + "\n" + + "\n" + + "JNI: CheckJNI is off; workarounds are off; pins=0; globals=397\n" + + "\n" + + "DALVIK THREADS:\n" + + "(mutexes: tll=0 tsl=0 tscl=0 ghl=0)\n" + + "\n" + + "\"main\" prio=5 tid=1 WAIT\n" + + " | group=\"main\" sCount=1 dsCount=0 obj=0x41d6bc90 self=0x41d5a3c8\n" + + " | sysTid=3485 nice=0 sched=0/0 cgrp=apps handle=1074852180\n" + + " | state=S schedstat=( 0 0 0 ) utm=1065 stm=152 core=0\n" + + " at java.lang.Object.wait(Native Method)\n" + + " - waiting on <0x427ab340> (a org.mozilla.gecko.GeckoEditable$5)\n" + + " at java.lang.Object.wait(Object.java:364)\n" + + " at org.mozilla.gecko.GeckoEditable$5.run(GeckoEditable.java:746)\n" + + " at android.os.Handler.handleCallback(Handler.java:733)\n" + + " at android.os.Handler.dispatchMessage(Handler.java:95)\n" + + " at android.os.Looper.loop(Looper.java:137)\n" + + " at android.app.ActivityThread.main(ActivityThread.java:4998)\n" + + " at java.lang.reflect.Method.invokeNative(Native Method)\n" + + " at java.lang.reflect.Method.invoke(Method.java:515)\n" + + " at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)\n" + + " at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)\n" + + " at dalvik.system.NativeStart.main(Native Method)\n" + + "\n" + + "\"Gecko\" prio=5 tid=16 SUSPENDED\n" + + " | group=\"main\" sCount=1 dsCount=0 obj=0x426e2b28 self=0x76ae92e8\n" + + " | sysTid=3541 nice=0 sched=0/0 cgrp=apps handle=1991153472\n" + + " | state=S schedstat=( 0 0 0 ) utm=1118 stm=145 core=0\n" + + " #00 pc 00000904 /system/lib/libc.so (__futex_syscall3+4294832136)\n" + + " #01 pc 0000eec4 /system/lib/libc.so (__pthread_cond_timedwait_relative+48)\n" + + " #02 pc 0000ef24 /system/lib/libc.so (__pthread_cond_timedwait+64)\n" + + " #03 pc 000536b7 /system/lib/libdvm.so\n" + + " #04 pc 00053c79 /system/lib/libdvm.so (dvmChangeStatus(Thread*, ThreadStatus)+34)\n" + + " #05 pc 00049507 /system/lib/libdvm.so\n" + + " #06 pc 0004d84b /system/lib/libdvm.so\n" + + " #07 pc 0003f1df /dev/ashmem/libxul.so (deleted)\n" + + " at org.mozilla.gecko.mozglue.GeckoLoader.nativeRun(Native Method)\n" + + " at org.mozilla.gecko.GeckoAppShell.runGecko(GeckoAppShell.java:384)\n" + + " at org.mozilla.gecko.GeckoThread.run(GeckoThread.java:177)\n" + + "\n" + + "----- end 1 -----\n" + + "\n" + + "\n" + + "----- pid 2 at 2013-01-25 13:27:01 -----\n" + + "Cmd line: system_server\n" + + "\n" + + "----- end 2 -----\n"; + + private boolean mDone; + + public void testANRReporter() throws Exception { + blockForGeckoReady(); + + // Cannot test ANR reporter if it's disabled. + if (!AppConstants.MOZ_ANDROID_ANR_REPORTER) { + mAsserter.ok(true, "ANR reporter is disabled", null); + return; + } + + // For the ANR reporter to work, we need to provide sample ANR traces to it. + // Therefore, we need the ANR file to exist and writable. If not, we don't + // have the right permissions to create the file, so we just bail. + final File anrFile = new File(ANR_PATH); + if (!anrFile.exists()) { + mAsserter.ok(true, "ANR file does not exist", null); + return; + } + if (!anrFile.canWrite()) { + mAsserter.ok(true, "ANR file is not writable", null); + return; + } + + final FileWriter anrWriter = new FileWriter(anrFile); + try { + anrWriter.write(SAMPLE_ANR); + } finally { + anrWriter.close(); + } + + // Block the UI thread to simulate an ANR + final Runnable uiBlocker = new Runnable() { + @Override + public synchronized void run() { + while (!mDone) { + try { + wait(); + } catch (final InterruptedException e) { + } + } + } + }; + getActivity().runOnUiThread(uiBlocker); + + // Make sure our initial ping directory is empty. + final File pingDir = new File(mProfile, PING_DIR); + final String[] initialFiles = pingDir.list(); + mAsserter.ok(initialFiles == null || initialFiles.length == 0, + "Ping directory is empty", null); + + final Intent anrIntent = new Intent(ANR_ACTION); + anrIntent.setPackage(AppConstants.ANDROID_PACKAGE_NAME); + mAsserter.is(anrIntent.getPackage(), AppConstants.ANDROID_PACKAGE_NAME, + "Successfully set package name"); + + final Context testContext = getInstrumentation().getContext(); + mAsserter.isnot(testContext, null, "testContext should not be null"); + + // Trigger the ANR. + mAsserter.info("Triggering ANR", null); + testContext.sendBroadcast(anrIntent); + + // ANR reporter is supposed to ignore duplicate ANRs. + // This will be checked later when we look for ping files. + mAsserter.info("Triggering second ANR", null); + testContext.sendBroadcast(new Intent(anrIntent)); + + mAsserter.info("Waiting for ping", null); + waitForCondition(new Condition() { + @Override + public boolean isSatisfied() { + final String[] newFiles = pingDir.list(); + return newFiles != null && newFiles.length > 0; + } + }, WAIT_FOR_PING_TIMEOUT); + + mAsserter.ok(pingDir.exists(), "Ping directory exists", null); + mAsserter.ok(pingDir.isDirectory(), "Ping directory is a directory", null); + + final File[] newFiles = pingDir.listFiles(); + mAsserter.isnot(newFiles, null, "Ping directory is not empty"); + mAsserter.is(newFiles.length, 1, "ANR reporter wrote one ping"); + mAsserter.ok(newFiles[0].exists(), "Ping exists", null); + mAsserter.ok(newFiles[0].isFile(), "Ping is a file", null); + mAsserter.ok(newFiles[0].canRead(), "Ping is readable", null); + mAsserter.info("Found ping file", newFiles[0].getPath()); + + final char[] buffer = new char[(int) newFiles[0].length()]; + final FileReader reader = new FileReader(newFiles[0]); + try { + mAsserter.ok(reader.read(buffer) > 0, "Read from ping file", null); + } finally { + reader.close(); + } + + // Check standard properties required by Telemetry server. + final JSONObject pingObject = new JSONObject(new String(buffer)); + mAsserter.ok(pingObject.has("slug"), "Ping has slug property", null); + mAsserter.ok(pingObject.has("reason"), "Ping has reason property", null); + mAsserter.ok(pingObject.has("payload"), "Ping has payload property", null); + + final JSONObject pingPayload = pingObject.getJSONObject("payload"); + mAsserter.ok(pingPayload.has("ver"), "Payload has ver property", null); + mAsserter.ok(pingPayload.has("info"), "Payload has info property", null); + mAsserter.ok(pingPayload.has("androidANR"), "Payload has androidANR property", null); + + final JSONObject pingInfo = pingPayload.getJSONObject("info"); + mAsserter.ok(pingInfo.has("reason"), "Info has reason property", null); + mAsserter.ok(pingInfo.has("appName"), "Info has appName property", null); + mAsserter.ok(pingInfo.has("appUpdateChannel"), "Info has appUpdateChannel property", null); + mAsserter.ok(pingInfo.has("appVersion"), "Info has appVersion property", null); + mAsserter.ok(pingInfo.has("appBuildID"), "Info has appBuildID property", null); + + // Do some profile clean up. This is not absolutely necessary because the profile + // is blown away after test runs anyways, so we don't check return values here. + for (final File ping : newFiles) { + ping.delete(); + } + pingDir.delete(); + + // Unblock UI thread + synchronized (uiBlocker) { + mDone = true; + uiBlocker.notify(); + } + + // Clear the sample ANR + final FileWriter anrClearer = new FileWriter(anrFile); + anrClearer.close(); + } +} From 59df12847732e2d0a444211fb7bf3027a9e729d6 Mon Sep 17 00:00:00 2001 From: Jim Chen Date: Mon, 28 Apr 2014 22:20:52 -0400 Subject: [PATCH 14/30] Bug 999071 - Wait a bit longer for a complete ping file; r=blassey --- .../android/base/tests/testANRReporter.java | 44 ++++++++++++++----- 1 file changed, 33 insertions(+), 11 deletions(-) diff --git a/mobile/android/base/tests/testANRReporter.java b/mobile/android/base/tests/testANRReporter.java index a131035321a..5856f9fdbe3 100644 --- a/mobile/android/base/tests/testANRReporter.java +++ b/mobile/android/base/tests/testANRReporter.java @@ -75,6 +75,24 @@ public class testANRReporter extends BaseTest { private boolean mDone; + private JSONObject readPingFile(final File pingFile) throws Exception { + final long fileSize = pingFile.length(); + if (fileSize == 0 || fileSize > Integer.MAX_VALUE) { + throw new Exception("Invalid ping file size"); + } + final char[] buffer = new char[(int) fileSize]; + final FileReader reader = new FileReader(pingFile); + try { + final int readSize = reader.read(buffer); + if (readSize == 0 || readSize > buffer.length) { + throw new Exception("Invalid number of bytes read"); + } + } finally { + reader.close(); + } + return new JSONObject(new String(buffer)); + } + public void testANRReporter() throws Exception { blockForGeckoReady(); @@ -145,8 +163,20 @@ public class testANRReporter extends BaseTest { waitForCondition(new Condition() { @Override public boolean isSatisfied() { - final String[] newFiles = pingDir.list(); - return newFiles != null && newFiles.length > 0; + final File[] newFiles = pingDir.listFiles(); + if (newFiles == null || newFiles.length == 0) { + // Keep waiting. + return false; + } + // Make sure we have a complete file. We skip assertions and catch all + // exceptions here because the condition may not be satisfied now but may + // be satisfied later. After the wait is over, we will repeat the same + // steps with assertions and exceptions. + try { + return readPingFile(newFiles[0]).has("slug"); + } catch (final Exception e) { + return false; + } } }, WAIT_FOR_PING_TIMEOUT); @@ -161,16 +191,8 @@ public class testANRReporter extends BaseTest { mAsserter.ok(newFiles[0].canRead(), "Ping is readable", null); mAsserter.info("Found ping file", newFiles[0].getPath()); - final char[] buffer = new char[(int) newFiles[0].length()]; - final FileReader reader = new FileReader(newFiles[0]); - try { - mAsserter.ok(reader.read(buffer) > 0, "Read from ping file", null); - } finally { - reader.close(); - } - // Check standard properties required by Telemetry server. - final JSONObject pingObject = new JSONObject(new String(buffer)); + final JSONObject pingObject = readPingFile(newFiles[0]); mAsserter.ok(pingObject.has("slug"), "Ping has slug property", null); mAsserter.ok(pingObject.has("reason"), "Ping has reason property", null); mAsserter.ok(pingObject.has("payload"), "Ping has payload property", null); From ed8bcc12482c77b1c8947ae1015e348f85ea39b6 Mon Sep 17 00:00:00 2001 From: JW Wang Date: Mon, 28 Apr 2014 00:59:00 -0700 Subject: [PATCH 15/30] Bug 916399 - autoplay fails to activate due to Bug 1001317, call play() instead, r=cpearce --- content/media/test/mochitest.ini | 1 - content/media/test/test_timeupdate_small_files.html | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/content/media/test/mochitest.ini b/content/media/test/mochitest.ini index d01a84b57be..c07ca8cf41e 100644 --- a/content/media/test/mochitest.ini +++ b/content/media/test/mochitest.ini @@ -441,7 +441,6 @@ skip-if = buildapp == 'b2g' # b2g(Value being assigned to HTMLMediaElement.curre [test_texttrackregion.html] [test_texttracklist.html] [test_timeupdate_small_files.html] -skip-if = os == "linux" # Intermittent failures, bug 760770 [test_unseekable.html] skip-if = buildapp == 'b2g' [test_VideoPlaybackQuality.html] diff --git a/content/media/test/test_timeupdate_small_files.html b/content/media/test/test_timeupdate_small_files.html index 02e383237c9..b6d51800bdb 100644 --- a/content/media/test/test_timeupdate_small_files.html +++ b/content/media/test/test_timeupdate_small_files.html @@ -74,13 +74,13 @@ function startTest(test, token) { v._timeupdateCount = 0; v._finished = false; v.gotEnded = 0; - v.autoplay = true; v.addEventListener("ended", ended, false); v.addEventListener("timeupdate", timeupdate, false); for (var i = 0; i < eventsToLog.length; ++i) { v.addEventListener(eventsToLog[i], logEvent, false); } document.body.appendChild(v); + v.play(); } manager.runTests(gSmallTests, startTest); From cb58f05265eb27594eb61b535bd47df5925be89d Mon Sep 17 00:00:00 2001 From: David Burns Date: Fri, 25 Apr 2014 14:41:17 +0100 Subject: [PATCH 16/30] Bug 929175: Part 2: Updating frames tests.; r=mdas --- .../tests/unit/test_switch_frame.py | 102 +++++++++++++----- .../tests/unit/test_switch_remote_frame.py | 9 +- .../marionette/tests/unit/unit-tests.ini | 1 + .../client/marionette/www/frameset.html | 14 +++ .../client/marionette/www/framesetPage2.html | 7 ++ .../client/marionette/www/test_iframe.html | 1 + 6 files changed, 102 insertions(+), 32 deletions(-) create mode 100644 testing/marionette/client/marionette/www/frameset.html create mode 100644 testing/marionette/client/marionette/www/framesetPage2.html diff --git a/testing/marionette/client/marionette/tests/unit/test_switch_frame.py b/testing/marionette/client/marionette/tests/unit/test_switch_frame.py index fe938c2d566..e38cb050dbb 100644 --- a/testing/marionette/client/marionette/tests/unit/test_switch_frame.py +++ b/testing/marionette/client/marionette/tests/unit/test_switch_frame.py @@ -2,37 +2,48 @@ # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. -import os from marionette_test import MarionetteTestCase from marionette import JavascriptException -# boiler plate for the initial navigation and frame switch -def switch_to_window_verify(test, start_url, frame, verify_title, verify_url): - test.assertTrue(test.marionette.execute_script("window.location.href = 'about:blank'; return true;")) - test.assertEqual("about:blank", test.marionette.execute_script("return window.location.href;")) - test_html = test.marionette.absolute_url(start_url) - test.marionette.navigate(test_html) - test.assertEqual(test.marionette.get_active_frame(), None) - test.assertNotEqual("about:blank", test.marionette.execute_script("return window.location.href;")) - test.assertEqual(verify_title, test.marionette.title) - test.marionette.switch_to_default_content() - test.marionette.switch_to_frame(frame) - test.assertTrue(verify_url in test.marionette.get_url()) - inner_frame_element = test.marionette.get_active_frame() - # test that we can switch back to main frame, then switch back to the - # inner frame with the value we got from get_active_frame - test.marionette.switch_to_frame() - test.assertEqual(verify_title, test.marionette.title) - test.marionette.switch_to_frame(inner_frame_element) - test.assertTrue(verify_url in test.marionette.get_url()) class TestSwitchFrame(MarionetteTestCase): def test_switch_simple(self): - switch_to_window_verify(self, "test_iframe.html", "test_iframe", "Marionette IFrame Test", "test.html") + start_url = "test_iframe.html" + verify_title = "Marionette IFrame Test" + verify_url = "test.html" + test_html = self.marionette.absolute_url(start_url) + self.marionette.navigate(test_html) + self.assertEqual(self.marionette.get_active_frame(), None) + frame = self.marionette.find_element("id", "test_iframe") + self.marionette.switch_to_frame(frame) + self.assertTrue(verify_url in self.marionette.get_url()) + inner_frame_element = self.marionette.get_active_frame() + # test that we can switch back to main frame, then switch back to the + # inner frame with the value we got from get_active_frame + self.marionette.switch_to_frame() + self.assertEqual(verify_title, self.marionette.title) + self.marionette.switch_to_frame(inner_frame_element) + self.assertTrue(verify_url in self.marionette.get_url()) def test_switch_nested(self): - switch_to_window_verify(self, "test_nested_iframe.html", "test_iframe", "Marionette IFrame Test", "test_inner_iframe.html") - self.marionette.switch_to_frame("inner_frame") + start_url = "test_nested_iframe.html" + verify_title = "Marionette IFrame Test" + verify_url = "test_inner_iframe.html" + test_html = self.marionette.absolute_url(start_url) + self.marionette.navigate(test_html) + frame = self.marionette.find_element("id", "test_iframe") + self.assertEqual(self.marionette.get_active_frame(), None) + self.marionette.switch_to_frame(frame) + self.assertTrue(verify_url in self.marionette.get_url()) + inner_frame_element = self.marionette.get_active_frame() + # test that we can switch back to main frame, then switch back to the + # inner frame with the value we got from get_active_frame + self.marionette.switch_to_frame() + self.assertEqual(verify_title, self.marionette.title) + self.marionette.switch_to_frame(inner_frame_element) + self.assertTrue(verify_url in self.marionette.get_url()) + inner_frame = self.marionette.find_element('id', 'inner_frame') + self.marionette.switch_to_frame(inner_frame) self.assertTrue("test.html" in self.marionette.get_url()) self.marionette.switch_to_frame() # go back to main frame self.assertTrue("test_nested_iframe.html" in self.marionette.get_url()) @@ -40,7 +51,23 @@ class TestSwitchFrame(MarionetteTestCase): self.assertTrue("test_nested_iframe.html" in self.marionette.execute_script("return window.location.href;")) def test_stack_trace(self): - switch_to_window_verify(self, "test_iframe.html", "test_iframe", "Marionette IFrame Test", "test.html") + start_url = "test_iframe.html" + verify_title = "Marionette IFrame Test" + verify_url = "test.html" + test_html = self.marionette.absolute_url(start_url) + self.marionette.navigate(test_html) + frame = self.marionette.find_element("id", "test_iframe") + self.assertEqual(self.marionette.get_active_frame(), None) + self.marionette.switch_to_frame(frame) + self.assertTrue(verify_url in self.marionette.get_url()) + inner_frame_element = self.marionette.get_active_frame() + # test that we can switch back to main frame, then switch back to the + # inner frame with the value we got from get_active_frame + self.marionette.switch_to_frame() + self.assertEqual(verify_title, self.marionette.title) + self.marionette.switch_to_frame(inner_frame_element) + self.assertTrue(verify_url in self.marionette.get_url()) + #can't use assertRaises in context manager with python2.6 self.assertRaises(JavascriptException, self.marionette.execute_async_script, "foo();") try: @@ -48,12 +75,13 @@ class TestSwitchFrame(MarionetteTestCase): except JavascriptException as e: self.assertTrue("foo" in e.msg) - def testShouldBeAbleToCarryOnWorkingIfTheFrameIsDeletedFromUnderUs(self): + def test_should_be_able_to_carry_on_working_if_the_frame_is_deleted_from_under_us(self): test_html = self.marionette.absolute_url("deletingFrame.html") self.marionette.navigate(test_html) - self.marionette.switch_to_frame("iframe1"); - killIframe = self.marionette.find_element("id" ,"killIframe") + self.marionette.switch_to_frame(self.marionette.find_element('id', + 'iframe1')) + killIframe = self.marionette.find_element("id", "killIframe") killIframe.click() self.marionette.switch_to_frame() @@ -63,11 +91,12 @@ class TestSwitchFrame(MarionetteTestCase): addIFrame.click() self.marionette.find_element("id", "iframe1") - self.marionette.switch_to_frame("iframe1"); + self.marionette.switch_to_frame(self.marionette.find_element("id", + "iframe1")) self.marionette.find_element("id", "checkbox") - def testShouldAllowAUserToSwitchFromAnIframeBackToTheMainContentOfThePage(self): + def test_should_allow_a_user_to_switch_from_an_iframe_back_to_the_main_content_of_the_page(self): test_iframe = self.marionette.absolute_url("test_iframe.html") self.marionette.navigate(test_iframe) self.marionette.switch_to_frame(0) @@ -75,3 +104,18 @@ class TestSwitchFrame(MarionetteTestCase): header = self.marionette.find_element("id", "iframe_page_heading") self.assertEqual(header.text, "This is the heading") + def test_should_be_able_to_switch_to_a_frame_by_its_index(self): + test_html = self.marionette.absolute_url("frameset.html") + self.marionette.navigate(test_html) + self.marionette.switch_to_frame(2) + element = self.marionette.find_element("id", "email") + self.assertEquals("email", element.get_attribute("type")) + + def test_should_be_able_to_switch_to_a_frame_using_a_previously_located_element(self): + test_html = self.marionette.absolute_url("frameset.html") + self.marionette.navigate(test_html) + frame = self.marionette.find_element("name", "third") + self.marionette.switch_to_frame(frame) + + element = self.marionette.find_element("id", "email") + self.assertEquals("email", element.get_attribute("type")) diff --git a/testing/marionette/client/marionette/tests/unit/test_switch_remote_frame.py b/testing/marionette/client/marionette/tests/unit/test_switch_remote_frame.py index df5c1e86ce5..64d6a8bd1f7 100644 --- a/testing/marionette/client/marionette/tests/unit/test_switch_remote_frame.py +++ b/testing/marionette/client/marionette/tests/unit/test_switch_remote_frame.py @@ -40,7 +40,8 @@ class TestSwitchRemoteFrame(MarionetteTestCase): iframe.src = "%s"; document.body.appendChild(iframe); """ % self.marionette.absolute_url("test.html")) - self.marionette.switch_to_frame("remote_iframe") + remote_iframe = self.marionette.find_element("id", "remote_iframe") + self.marionette.switch_to_frame(remote_iframe) main_process = self.marionette.execute_script(""" return SpecialPowers.isMainProcess(); """) @@ -60,7 +61,8 @@ class TestSwitchRemoteFrame(MarionetteTestCase): iframe.src = "%s"; document.body.appendChild(iframe); """ % self.marionette.absolute_url("test.html")) - self.marionette.switch_to_frame("remote_iframe") + self.marionette.switch_to_frame(self.marionette.find_element("id", + "remote_iframe")) main_process = self.marionette.execute_script(""" return SpecialPowers.isMainProcess(); """) @@ -70,7 +72,8 @@ class TestSwitchRemoteFrame(MarionetteTestCase): return SpecialPowers.isMainProcess(); """) self.assertTrue(main_process) - self.marionette.switch_to_frame("remote_iframe") + self.marionette.switch_to_frame(self.marionette.find_element("id", + "remote_iframe")) main_process = self.marionette.execute_script(""" return SpecialPowers.isMainProcess(); """) diff --git a/testing/marionette/client/marionette/tests/unit/unit-tests.ini b/testing/marionette/client/marionette/tests/unit/unit-tests.ini index 1bf4c06ba7a..fcbcc9f46f2 100644 --- a/testing/marionette/client/marionette/tests/unit/unit-tests.ini +++ b/testing/marionette/client/marionette/tests/unit/unit-tests.ini @@ -85,6 +85,7 @@ browser = false [test_switch_frame.py] [test_switch_frame_chrome.py] [test_switch_remote_frame.py] +browser = false [test_pagesource.py] b2g = false diff --git a/testing/marionette/client/marionette/www/frameset.html b/testing/marionette/client/marionette/www/frameset.html new file mode 100644 index 00000000000..1136b35b399 --- /dev/null +++ b/testing/marionette/client/marionette/www/frameset.html @@ -0,0 +1,14 @@ + + + Unique title + + + + + + + + + + + \ No newline at end of file diff --git a/testing/marionette/client/marionette/www/framesetPage2.html b/testing/marionette/client/marionette/www/framesetPage2.html new file mode 100644 index 00000000000..4ea35ff71b7 --- /dev/null +++ b/testing/marionette/client/marionette/www/framesetPage2.html @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/testing/marionette/client/marionette/www/test_iframe.html b/testing/marionette/client/marionette/www/test_iframe.html index 4cdb33382c2..7ed88665c5d 100644 --- a/testing/marionette/client/marionette/www/test_iframe.html +++ b/testing/marionette/client/marionette/www/test_iframe.html @@ -11,5 +11,6 @@

This is the heading

+ From 522a852d9e8ddcedf11ae1c7299e8803e3dd1d88 Mon Sep 17 00:00:00 2001 From: David Burns Date: Sat, 18 Jan 2014 20:08:36 +0000 Subject: [PATCH 17/30] Bug 929175: Part 1: Allow Marionette to switch to frameset frames. ; r=mdas --- .../marionette/marionette-frame-manager.js | 4 +- testing/marionette/marionette-listener.js | 74 +++++++++---------- 2 files changed, 36 insertions(+), 42 deletions(-) diff --git a/testing/marionette/marionette-frame-manager.js b/testing/marionette/marionette-frame-manager.js index f3f650ed161..235e6a3b28e 100644 --- a/testing/marionette/marionette-frame-manager.js +++ b/testing/marionette/marionette-frame-manager.js @@ -95,7 +95,7 @@ FrameManager.prototype = { } }, - //This is just 'switch to OOP frame'. We're handling this here so we can maintain a list of remoteFrames. + //This is just 'switch to OOP frame'. We're handling this here so we can maintain a list of remoteFrames. switchToFrame: function FM_switchToFrame(message) { // Switch to a remote frame. let frameWindow = Services.wm.getOuterWindowWithId(message.json.win); //get the original frame window @@ -126,7 +126,7 @@ FrameManager.prototype = { } } - // If we get here, then we need to load the frame script in this frame, + // If we get here, then we need to load the frame script in this frame, // and set the frame's ChromeMessageSender as the active message manager the server will listen to this.addMessageManagerListeners(mm); logger.info("frame-manager load script: " + mm.toString()); diff --git a/testing/marionette/marionette-listener.js b/testing/marionette/marionette-listener.js index 468ea6408e5..cf52b184c30 100644 --- a/testing/marionette/marionette-listener.js +++ b/testing/marionette/marionette-listener.js @@ -1807,11 +1807,11 @@ function switchToFrame(msg) { checkTimer.initWithCallback(checkLoad, 100, Ci.nsITimer.TYPE_ONE_SHOT); } let foundFrame = null; - let frames = []; //curFrame.document.getElementsByTagName("iframe"); - let parWindow = null; //curFrame.QueryInterface(Ci.nsIInterfaceRequestor) + let frames = []; + let parWindow = null; // Check of the curFrame reference is dead try { - frames = curFrame.document.getElementsByTagName("iframe"); + frames = curFrame.frames; //Until Bug 761935 lands, we won't have multiple nested OOP iframes. We will only have one. //parWindow will refer to the iframe above the nested OOP frame. parWindow = curFrame.QueryInterface(Ci.nsIInterfaceRequestor) @@ -1823,7 +1823,8 @@ function switchToFrame(msg) { msg.json.id = null; msg.json.element = null; } - if ((msg.json.id == null) && (msg.json.element == null)) { + + if ((msg.json.id === null || msg.json.id === undefined) && (msg.json.element == null)) { // returning to root frame sendSyncMessage("Marionette:switchedToFrame", { frameValue: null }); @@ -1839,52 +1840,45 @@ function switchToFrame(msg) { if (elementManager.seenItems[msg.json.element] != undefined) { let wantedFrame; try { - wantedFrame = elementManager.getKnownElement(msg.json.element, curFrame); //HTMLIFrameElement + wantedFrame = elementManager.getKnownElement(msg.json.element, curFrame); //Frame Element } catch(e) { sendError(e.message, e.code, e.stack, command_id); } - for (let i = 0; i < frames.length; i++) { - // use XPCNativeWrapper to compare elements; see bug 834266 - if (XPCNativeWrapper(frames[i]) == XPCNativeWrapper(wantedFrame)) { - curFrame = frames[i]; - foundFrame = i; + + if (frames.length > 0) { + for (let i = 0; i < frames.length; i++) { + // use XPCNativeWrapper to compare elements; see bug 834266 + if (XPCNativeWrapper(frames[i].frameElement) == XPCNativeWrapper(wantedFrame)) { + curFrame = frames[i].frameElement; + foundFrame = i; + } + } + } + if (foundFrame == null) { + // Either the frame has been removed or we have a OOP frame + // so lets just get all the iframes and do a quick loop before + // throwing in the towel + let iframes = curFrame.document.getElementsByTagName("iframe"); + for (var i = 0; i < iframes.length; i++) { + if (XPCNativeWrapper(iframes[i]) == XPCNativeWrapper(wantedFrame)) { + curFrame = iframes[i]; + foundFrame = i; + } } } } } if (foundFrame == null) { - switch(typeof(msg.json.id)) { - case "string" : - let foundById = null; - for (let i = 0; i < frames.length; i++) { - //give precedence to name - let frame = frames[i]; - let name = utils.getElementAttribute(frame, 'name'); - let id = utils.getElementAttribute(frame, 'id'); - if (name == msg.json.id) { - foundFrame = i; - break; - } else if ((foundById == null) && (id == msg.json.id)) { - foundById = i; - } - } - if ((foundFrame == null) && (foundById != null)) { - foundFrame = foundById; - curFrame = frames[foundFrame]; - } - break; - case "number": - if (frames[msg.json.id] != undefined) { - foundFrame = msg.json.id; - curFrame = frames[foundFrame]; - } - break; + if (typeof(msg.json.id) === 'number') { + foundFrame = frames[msg.json.id].frameElement; + curFrame = foundFrame; + foundFrame = elementManager.addToKnownElements(curFrame); } } if (foundFrame == null) { - sendError("Unable to locate frame: " + msg.json.id, 8, null, command_id); - return; + sendError("Unable to locate frame: " + (msg.json.id || msg.json.element), 8, null, command_id); + return true; } sandbox = null; @@ -1898,8 +1892,8 @@ function switchToFrame(msg) { // The frame we want to switch to is a remote (out-of-process) frame; // notify our parent to handle the switch. curFrame = content; - sendToServer('Marionette:switchToFrame', {frame: foundFrame, - win: parWindow, + sendToServer('Marionette:switchToFrame', {win: parWindow, + frame: foundFrame, command_id: command_id}); } else { From 9ef2f5b211f939bfca42fef64f181fac09df74aa Mon Sep 17 00:00:00 2001 From: Benjamin Smedberg Date: Mon, 28 Apr 2014 10:48:03 -0400 Subject: [PATCH 18/30] Bug 995027 better logging - set experiments.logging.dump to true during test runs so that logging goes to the console even during shutdown, r=gfritzsche --- testing/profiles/prefs_general.js | 1 + 1 file changed, 1 insertion(+) diff --git a/testing/profiles/prefs_general.js b/testing/profiles/prefs_general.js index b816d9d4cd2..dcd372caa1d 100644 --- a/testing/profiles/prefs_general.js +++ b/testing/profiles/prefs_general.js @@ -54,6 +54,7 @@ user_pref("font.size.inflation.minTwips", 0); // AddonManager tests require that the experiments provider be present. user_pref("experiments.supported", true); user_pref("experiments.logging.level", "Trace"); +user_pref("experiments.logging.dump", true); // Point the manifest at something local so we don't risk it hitting production // data and installing experiments that may vary over time. user_pref("experiments.manifest.uri", "http://%(server)s/experiments-dummy/manifest"); From aead661c9fda870f314143ea1f3a3419bd5de39a Mon Sep 17 00:00:00 2001 From: Dave Camp Date: Mon, 28 Apr 2014 08:58:26 -0700 Subject: [PATCH 19/30] Bug 997372 - Add actor type logging to protocol.js. r=fitzgen --- toolkit/devtools/server/protocol.js | 63 ++++++++++++++++++++++++++--- 1 file changed, 57 insertions(+), 6 deletions(-) diff --git a/toolkit/devtools/server/protocol.js b/toolkit/devtools/server/protocol.js index 0b393c63b7a..3dbd0f49bc2 100644 --- a/toolkit/devtools/server/protocol.js +++ b/toolkit/devtools/server/protocol.js @@ -11,6 +11,36 @@ let {Class} = require("sdk/core/heritage"); let {EventTarget} = require("sdk/event/target"); let events = require("sdk/event/core"); let object = require("sdk/util/object"); +let {PrefsTarget} = require("sdk/preferences/event-target"); + + +let gActorLogTypes; +let gFrontLogTypes; + +function updateLogging() +{ + let prefService = require("sdk/preferences/service"); + let typeNames = prefService.get("devtools.log-actors", "").split(","); + gActorLogTypes = new Set(); + for (let name of typeNames) { + gActorLogTypes.add(name); + } + + typeNames = prefService.get("devtools.log-fronts", "").split(","); + gFrontLogTypes = new Set(); + for (let name of typeNames) { + gFrontLogTypes.add(name); + } +}; +updateLogging(); + +let logTarget = PrefsTarget({ branchName: "devtools." }); +logTarget.on("log-actors", name => { + updateLogging(); +}); +logTarget.on("log-fronts", name => { + updateLogging(); +}); // Waiting for promise.done() to be added, see bug 851321 function promiseDone(err) { @@ -824,6 +854,13 @@ let Actor = Class({ } }, + _sendPacket: function(packet) { + if (gActorLogTypes.has(this.typeName)) { + console.log("ACTOR SEND:" + this.actorID + ":" + JSON.stringify(packet, null, 2)); + } + this.conn.send(packet); + }, + _sendEvent: function(name, ...args) { if (!this._actorSpec.events.has(name)) { // It's ok to emit events that don't go over the wire. @@ -832,7 +869,7 @@ let Actor = Class({ let request = this._actorSpec.events.get(name); let packet = request.write(args, this); packet.from = packet.from || this.actorID; - this.conn.send(packet); + this._sendPacket(packet); }, destroy: function() { @@ -851,11 +888,11 @@ let Actor = Class({ }, writeError: function(err) { - console.error(err); + DevToolsUtils.reportException(err); if (err.stack) { dump(err.stack); } - this.conn.send({ + this._sendPacket({ from: this.actorID, error: "unknownError", message: err.toString() @@ -937,6 +974,9 @@ let actorProto = function(actorProto) { actorProto.requestTypes = Object.create(null); protoSpec.methods.forEach(spec => { let handler = function(packet, conn) { + if (gActorLogTypes.has(this.typeName)) { + console.log("ACTOR RECV:" + this.actorID + ":" + JSON.stringify(packet, null, 2)); + } try { let args = spec.request.read(packet, this); @@ -960,7 +1000,7 @@ let actorProto = function(actorProto) { } } - conn.send(response); + this._sendPacket(response); }; this._queueResponse(p => { @@ -1057,16 +1097,23 @@ let Front = Class({ */ form: function(form) {}, + _sendPacket: function(packet) { + if (gFrontLogTypes.has(this.typeName)) { + console.log("FRONT SEND:" + this.actorID + ":" + JSON.stringify(packet, null, 2)); + } + this.conn._transport.send(packet); + }, + /** * Send a packet on the connection. */ send: function(packet) { if (packet.to) { - this.conn._transport.send(packet); + this._sendPacket(packet); } else { this.actor().then(actorID => { packet.to = actorID; - this.conn._transport.send(packet); + this._sendPacket(packet); }); } }, @@ -1085,6 +1132,10 @@ let Front = Class({ * Handler for incoming packets from the client's actor. */ onPacket: function(packet) { + if (gFrontLogTypes.has(this.typeName)) { + console.log("FRONT RECV:" + this.actorID + ":" + JSON.stringify(packet, null, 2)); + } + // Pick off event packets if (this._clientSpec.events && this._clientSpec.events.has(packet.type)) { let event = this._clientSpec.events.get(packet.type); From c6e2773e671166462ce48c6f7c8c72b3fbf1395a Mon Sep 17 00:00:00 2001 From: Steven MacLeod Date: Mon, 28 Apr 2014 12:04:00 -0400 Subject: [PATCH 20/30] Bug 1001120 - Remove the frame tree observer from the content-sessionStore.js SessionHistoryListener. r=ttaubert --- .../sessionstore/content/content-sessionStore.js | 15 --------------- .../sessionstore/test/browser_sessionHistory.js | 1 - 2 files changed, 16 deletions(-) diff --git a/browser/components/sessionstore/content/content-sessionStore.js b/browser/components/sessionstore/content/content-sessionStore.js index d3fe8cc5198..72347aa2ad5 100644 --- a/browser/components/sessionstore/content/content-sessionStore.js +++ b/browser/components/sessionstore/content/content-sessionStore.js @@ -215,13 +215,6 @@ let SyncHandler = { */ let SessionHistoryListener = { init: function () { - // The frame tree observer is needed to handle navigating away from - // an about page. Currently nsISHistoryListener does not have - // OnHistoryNewEntry() called for about pages because the history entry is - // modified to point at the new page. Once Bug 981900 lands the frame tree - // observer can be removed. - gFrameTree.addObserver(this); - // By adding the SHistoryListener immediately, we will unfortunately be // notified of every history entry as the tab is restored. We don't bother // waiting to add the listener later because these notifications are cheap. @@ -249,14 +242,6 @@ let SessionHistoryListener = { } }, - onFrameTreeCollected: function () { - this.collect(); - }, - - onFrameTreeReset: function () { - this.collect(); - }, - OnHistoryNewEntry: function (newURI) { this.collect(); }, diff --git a/browser/components/sessionstore/test/browser_sessionHistory.js b/browser/components/sessionstore/test/browser_sessionHistory.js index fec17f84467..c701e2e0fd2 100644 --- a/browser/components/sessionstore/test/browser_sessionHistory.js +++ b/browser/components/sessionstore/test/browser_sessionHistory.js @@ -219,7 +219,6 @@ add_task(function test_pushstate_replacestate() { is(entries.length, 2, "there is another shistory entry"); is(entries[1].url, "http://example.com/test-entry/", "url is correct"); - // Disabled until replaceState invalidation is supported. See Bug 967028. browser.messageManager. sendAsyncMessage("ss-test:historyReplaceState", {url: 'test-entry2/'}); yield promiseContentMessage(browser, "ss-test:historyReplaceState"); From e3c125c27a17915d7cfacad874df6b0dbb0da1e4 Mon Sep 17 00:00:00 2001 From: Dave Camp Date: Mon, 28 Apr 2014 09:53:26 -0700 Subject: [PATCH 21/30] Backout Bug 997372 for mochitest-dt orange on a CLOSED TREE. --- toolkit/devtools/server/protocol.js | 63 +++-------------------------- 1 file changed, 6 insertions(+), 57 deletions(-) diff --git a/toolkit/devtools/server/protocol.js b/toolkit/devtools/server/protocol.js index 3dbd0f49bc2..0b393c63b7a 100644 --- a/toolkit/devtools/server/protocol.js +++ b/toolkit/devtools/server/protocol.js @@ -11,36 +11,6 @@ let {Class} = require("sdk/core/heritage"); let {EventTarget} = require("sdk/event/target"); let events = require("sdk/event/core"); let object = require("sdk/util/object"); -let {PrefsTarget} = require("sdk/preferences/event-target"); - - -let gActorLogTypes; -let gFrontLogTypes; - -function updateLogging() -{ - let prefService = require("sdk/preferences/service"); - let typeNames = prefService.get("devtools.log-actors", "").split(","); - gActorLogTypes = new Set(); - for (let name of typeNames) { - gActorLogTypes.add(name); - } - - typeNames = prefService.get("devtools.log-fronts", "").split(","); - gFrontLogTypes = new Set(); - for (let name of typeNames) { - gFrontLogTypes.add(name); - } -}; -updateLogging(); - -let logTarget = PrefsTarget({ branchName: "devtools." }); -logTarget.on("log-actors", name => { - updateLogging(); -}); -logTarget.on("log-fronts", name => { - updateLogging(); -}); // Waiting for promise.done() to be added, see bug 851321 function promiseDone(err) { @@ -854,13 +824,6 @@ let Actor = Class({ } }, - _sendPacket: function(packet) { - if (gActorLogTypes.has(this.typeName)) { - console.log("ACTOR SEND:" + this.actorID + ":" + JSON.stringify(packet, null, 2)); - } - this.conn.send(packet); - }, - _sendEvent: function(name, ...args) { if (!this._actorSpec.events.has(name)) { // It's ok to emit events that don't go over the wire. @@ -869,7 +832,7 @@ let Actor = Class({ let request = this._actorSpec.events.get(name); let packet = request.write(args, this); packet.from = packet.from || this.actorID; - this._sendPacket(packet); + this.conn.send(packet); }, destroy: function() { @@ -888,11 +851,11 @@ let Actor = Class({ }, writeError: function(err) { - DevToolsUtils.reportException(err); + console.error(err); if (err.stack) { dump(err.stack); } - this._sendPacket({ + this.conn.send({ from: this.actorID, error: "unknownError", message: err.toString() @@ -974,9 +937,6 @@ let actorProto = function(actorProto) { actorProto.requestTypes = Object.create(null); protoSpec.methods.forEach(spec => { let handler = function(packet, conn) { - if (gActorLogTypes.has(this.typeName)) { - console.log("ACTOR RECV:" + this.actorID + ":" + JSON.stringify(packet, null, 2)); - } try { let args = spec.request.read(packet, this); @@ -1000,7 +960,7 @@ let actorProto = function(actorProto) { } } - this._sendPacket(response); + conn.send(response); }; this._queueResponse(p => { @@ -1097,23 +1057,16 @@ let Front = Class({ */ form: function(form) {}, - _sendPacket: function(packet) { - if (gFrontLogTypes.has(this.typeName)) { - console.log("FRONT SEND:" + this.actorID + ":" + JSON.stringify(packet, null, 2)); - } - this.conn._transport.send(packet); - }, - /** * Send a packet on the connection. */ send: function(packet) { if (packet.to) { - this._sendPacket(packet); + this.conn._transport.send(packet); } else { this.actor().then(actorID => { packet.to = actorID; - this._sendPacket(packet); + this.conn._transport.send(packet); }); } }, @@ -1132,10 +1085,6 @@ let Front = Class({ * Handler for incoming packets from the client's actor. */ onPacket: function(packet) { - if (gFrontLogTypes.has(this.typeName)) { - console.log("FRONT RECV:" + this.actorID + ":" + JSON.stringify(packet, null, 2)); - } - // Pick off event packets if (this._clientSpec.events && this._clientSpec.events.has(packet.type)) { let event = this._clientSpec.events.get(packet.type); From af8ae0f4788ed4e0d5a9d5d6a62251801e0531ff Mon Sep 17 00:00:00 2001 From: Ed Lee Date: Mon, 28 Apr 2014 11:00:41 -0700 Subject: [PATCH 22/30] Bug 1001854 - Search field length does not consistent after toggle "Hide the new tab page" and restart [r=adw] Trigger load event if the document was loaded before init such as the user toggling the page. --- browser/base/content/newtab/grid.js | 5 +++++ browser/base/content/test/newtab/browser.ini | 1 + .../test/newtab/browser_newtab_bug1001854.js | 20 +++++++++++++++++++ 3 files changed, 26 insertions(+) create mode 100644 browser/base/content/test/newtab/browser_newtab_bug1001854.js diff --git a/browser/base/content/newtab/grid.js b/browser/base/content/newtab/grid.js index 40ec7791e9e..88bde461c5d 100644 --- a/browser/base/content/newtab/grid.js +++ b/browser/base/content/newtab/grid.js @@ -53,6 +53,11 @@ let gGrid = { }); addEventListener("load", this); addEventListener("resize", this); + + // The document may already be loaded if the user is toggling the page + if (document.readyState == "complete") { + this.handleEvent({type: "load"}); + } }, /** diff --git a/browser/base/content/test/newtab/browser.ini b/browser/base/content/test/newtab/browser.ini index da3c02891a3..9bfa6028856 100644 --- a/browser/base/content/test/newtab/browser.ini +++ b/browser/base/content/test/newtab/browser.ini @@ -21,6 +21,7 @@ skip-if = os == "mac" # Intermittent failures, bug 898317 [browser_newtab_bug991111.js] [browser_newtab_bug991210.js] [browser_newtab_bug998387.js] +[browser_newtab_bug1001854.js] [browser_newtab_disable.js] [browser_newtab_drag_drop.js] [browser_newtab_drag_drop_ext.js] diff --git a/browser/base/content/test/newtab/browser_newtab_bug1001854.js b/browser/base/content/test/newtab/browser_newtab_bug1001854.js new file mode 100644 index 00000000000..67c7360898c --- /dev/null +++ b/browser/base/content/test/newtab/browser_newtab_bug1001854.js @@ -0,0 +1,20 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +const PRELOAD_PREF = "browser.newtab.preload"; + +function runTests() { + // turn off preload to ensure that a newtab page loads as disabled + Services.prefs.setBoolPref(PRELOAD_PREF, false); + Services.prefs.setBoolPref(PREF_NEWTAB_ENABLED, false); + yield addNewTabPageTab(); + + let search = getContentDocument().getElementById("newtab-search-form"); + is(search.style.width, "", "search form has no width yet"); + + NewTabUtils.allPages.enabled = true; + isnot(search.style.width, "", "search form has width set"); + + // restore original state + Services.prefs.clearUserPref(PRELOAD_PREF); +} From 9f1b61fa9208a75c5c8d906b96d37b1a021c8622 Mon Sep 17 00:00:00 2001 From: Jared Wein Date: Mon, 28 Apr 2014 14:30:48 -0400 Subject: [PATCH 23/30] Bug 923156 - [OSX] Moving the bookmarks toolbar items into the navbar causes weird vertical alignment issues with the navbar and some buttons. r=Gijs --- browser/themes/osx/browser.css | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/browser/themes/osx/browser.css b/browser/themes/osx/browser.css index bf7b834fdb9..4cdad1a0538 100644 --- a/browser/themes/osx/browser.css +++ b/browser/themes/osx/browser.css @@ -165,6 +165,11 @@ toolbarseparator { min-height: 19px; /* 16px button height + 2px padding + 1px margin-bottom */ } +#nav-bar-customization-target > #wrapper-personal-bookmarks > #personal-bookmarks { + min-height: 32px; + -moz-box-align: center; +} + toolbarbutton.chevron { list-style-image: url("chrome://global/skin/icons/chevron.png"); margin: 1px 0 0; From 043b20ef46bfc0e47b9ec8268dd6b5cc23d6c6f6 Mon Sep 17 00:00:00 2001 From: Mark Hammond Date: Tue, 29 Apr 2014 08:46:14 +1000 Subject: [PATCH 24/30] Bug 992371 - avoid 'A promise chain failed to handle a rejection' errors using FxAccounts. r=jedp --- services/fxaccounts/FxAccounts.jsm | 10 ++++++++-- services/fxaccounts/tests/xpcshell/test_accounts.js | 13 ++++++++++--- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/services/fxaccounts/FxAccounts.jsm b/services/fxaccounts/FxAccounts.jsm index 9d111ff125d..5eeba30b7f3 100644 --- a/services/fxaccounts/FxAccounts.jsm +++ b/services/fxaccounts/FxAccounts.jsm @@ -698,8 +698,14 @@ FxAccountsInternal.prototype = { // Login is truly complete once keys have been fetched, so once getKeys() // obtains and stores kA and kB, it will fire the onverified observer // notification. - return this.whenVerified(data) - .then(() => this.getKeys()); + + // The callers of startVerifiedCheck never consume a returned promise (ie, + // this is simply kicking off a background fetch) so we must add a rejection + // handler to avoid runtime warnings about the rejection not being handled. + this.whenVerified(data).then( + () => this.getKeys(), + err => log.info("startVerifiedCheck promise was rejected: " + err) + ); }, whenVerified: function(data) { diff --git a/services/fxaccounts/tests/xpcshell/test_accounts.js b/services/fxaccounts/tests/xpcshell/test_accounts.js index 5ecc6e8bf80..66af7ccdefc 100644 --- a/services/fxaccounts/tests/xpcshell/test_accounts.js +++ b/services/fxaccounts/tests/xpcshell/test_accounts.js @@ -321,9 +321,16 @@ add_test(function test_fetchAndUnwrapKeys_no_token() { }); }); - fxa.setSignedInUser(user).then((user) => { - fxa.internal.fetchAndUnwrapKeys(); - }); + fxa.setSignedInUser(user).then( + user => { + return fxa.internal.fetchAndUnwrapKeys(); + } + ).then( + null, + error => { + log.info("setSignedInUser correctly rejected"); + } + ) }); // Alice (User A) signs up but never verifies her email. Then Bob (User B) From 9663629ccb699a6f9603d236c364d45a66b66536 Mon Sep 17 00:00:00 2001 From: Steven MacLeod Date: Mon, 28 Apr 2014 19:21:08 -0400 Subject: [PATCH 25/30] Backed out changeset a2d961fb4789 due to intermittent mochitest-bc oranges. --- .../sessionstore/content/content-sessionStore.js | 15 +++++++++++++++ .../sessionstore/test/browser_sessionHistory.js | 1 + 2 files changed, 16 insertions(+) diff --git a/browser/components/sessionstore/content/content-sessionStore.js b/browser/components/sessionstore/content/content-sessionStore.js index 72347aa2ad5..d3fe8cc5198 100644 --- a/browser/components/sessionstore/content/content-sessionStore.js +++ b/browser/components/sessionstore/content/content-sessionStore.js @@ -215,6 +215,13 @@ let SyncHandler = { */ let SessionHistoryListener = { init: function () { + // The frame tree observer is needed to handle navigating away from + // an about page. Currently nsISHistoryListener does not have + // OnHistoryNewEntry() called for about pages because the history entry is + // modified to point at the new page. Once Bug 981900 lands the frame tree + // observer can be removed. + gFrameTree.addObserver(this); + // By adding the SHistoryListener immediately, we will unfortunately be // notified of every history entry as the tab is restored. We don't bother // waiting to add the listener later because these notifications are cheap. @@ -242,6 +249,14 @@ let SessionHistoryListener = { } }, + onFrameTreeCollected: function () { + this.collect(); + }, + + onFrameTreeReset: function () { + this.collect(); + }, + OnHistoryNewEntry: function (newURI) { this.collect(); }, diff --git a/browser/components/sessionstore/test/browser_sessionHistory.js b/browser/components/sessionstore/test/browser_sessionHistory.js index c701e2e0fd2..fec17f84467 100644 --- a/browser/components/sessionstore/test/browser_sessionHistory.js +++ b/browser/components/sessionstore/test/browser_sessionHistory.js @@ -219,6 +219,7 @@ add_task(function test_pushstate_replacestate() { is(entries.length, 2, "there is another shistory entry"); is(entries[1].url, "http://example.com/test-entry/", "url is correct"); + // Disabled until replaceState invalidation is supported. See Bug 967028. browser.messageManager. sendAsyncMessage("ss-test:historyReplaceState", {url: 'test-entry2/'}); yield promiseContentMessage(browser, "ss-test:historyReplaceState"); From 20217884b1838e1859fd035c102755207fc16e82 Mon Sep 17 00:00:00 2001 From: Steven MacLeod Date: Mon, 28 Apr 2014 19:21:09 -0400 Subject: [PATCH 26/30] Bug 1001120 - Introduce a test for slow subframe loads invalidating Session History. r=ttaubert --- .../content/content-sessionStore.js | 8 ++--- .../components/sessionstore/test/browser.ini | 1 + .../test/browser_sessionHistory.js | 33 ++++++++++++++++++- .../test/browser_sessionHistory_slow.sjs | 21 ++++++++++++ 4 files changed, 57 insertions(+), 6 deletions(-) create mode 100644 browser/components/sessionstore/test/browser_sessionHistory_slow.sjs diff --git a/browser/components/sessionstore/content/content-sessionStore.js b/browser/components/sessionstore/content/content-sessionStore.js index d3fe8cc5198..a824125f9bd 100644 --- a/browser/components/sessionstore/content/content-sessionStore.js +++ b/browser/components/sessionstore/content/content-sessionStore.js @@ -215,11 +215,9 @@ let SyncHandler = { */ let SessionHistoryListener = { init: function () { - // The frame tree observer is needed to handle navigating away from - // an about page. Currently nsISHistoryListener does not have - // OnHistoryNewEntry() called for about pages because the history entry is - // modified to point at the new page. Once Bug 981900 lands the frame tree - // observer can be removed. + // The frame tree observer is needed to handle initial subframe loads. + // It will redundantly invalidate with the SHistoryListener in some cases + // but these invalidations are very cheap. gFrameTree.addObserver(this); // By adding the SHistoryListener immediately, we will unfortunately be diff --git a/browser/components/sessionstore/test/browser.ini b/browser/components/sessionstore/test/browser.ini index 2d2e125b67e..fea0361033e 100644 --- a/browser/components/sessionstore/test/browser.ini +++ b/browser/components/sessionstore/test/browser.ini @@ -76,6 +76,7 @@ support-files = [browser_privatetabs.js] [browser_scrollPositions.js] [browser_sessionHistory.js] +[browser_sessionHistory_slow.sjs] [browser_sessionStorage.js] [browser_swapDocShells.js] [browser_telemetry.js] diff --git a/browser/components/sessionstore/test/browser_sessionHistory.js b/browser/components/sessionstore/test/browser_sessionHistory.js index fec17f84467..702873a74ad 100644 --- a/browser/components/sessionstore/test/browser_sessionHistory.js +++ b/browser/components/sessionstore/test/browser_sessionHistory.js @@ -219,7 +219,6 @@ add_task(function test_pushstate_replacestate() { is(entries.length, 2, "there is another shistory entry"); is(entries[1].url, "http://example.com/test-entry/", "url is correct"); - // Disabled until replaceState invalidation is supported. See Bug 967028. browser.messageManager. sendAsyncMessage("ss-test:historyReplaceState", {url: 'test-entry2/'}); yield promiseContentMessage(browser, "ss-test:historyReplaceState"); @@ -233,3 +232,35 @@ add_task(function test_pushstate_replacestate() { // Cleanup. gBrowser.removeTab(tab); }); + +/** + * Ensure that slow loading subframes will invalidate shistory. + */ +add_task(function test_slow_subframe_load() { + const SLOW_URL = "http://mochi.test:8888/browser/browser/components/" + + "sessionstore/test/browser_sessionHistory_slow.sjs"; + + const URL = "data:text/html;charset=utf-8," + + "" + + "" + + ""; + + // Add a new tab with a slow loading subframe + let tab = gBrowser.addTab(URL); + let browser = tab.linkedBrowser; + yield promiseBrowserLoaded(browser); + + SyncHandlers.get(browser).flush(); + let {entries} = JSON.parse(ss.getTabState(tab)); + + // Check the number of children. + is(entries.length, 1, "there is one root entry ..."); + is(entries[0].children.length, 1, "... with one child entries"); + + // Check URLs. + ok(entries[0].url.startsWith("data:text/html"), "correct root url"); + is(entries[0].children[0].url, SLOW_URL, "correct url for subframe"); + + // Cleanup. + gBrowser.removeTab(tab); +}); diff --git a/browser/components/sessionstore/test/browser_sessionHistory_slow.sjs b/browser/components/sessionstore/test/browser_sessionHistory_slow.sjs new file mode 100644 index 00000000000..41da3c2ad9a --- /dev/null +++ b/browser/components/sessionstore/test/browser_sessionHistory_slow.sjs @@ -0,0 +1,21 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +const Cc = Components.classes; +const Ci = Components.interfaces; + +const DELAY_MS = "2000"; + +let timer; + +function handleRequest(req, resp) { + resp.processAsync(); + resp.setHeader("Cache-Control", "no-cache", false); + resp.setHeader("Content-Type", "text/html;charset=utf-8", false); + + timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer); + timer.init(() => { + resp.write("hi"); + resp.finish(); + }, DELAY_MS, Ci.nsITimer.TYPE_ONE_SHOT); +} From 5d456d34b8ab151ebf15e53ca3b3e45eafb3dda3 Mon Sep 17 00:00:00 2001 From: Mark Capella Date: Mon, 28 Apr 2014 20:21:19 -0400 Subject: [PATCH 27/30] Bug 864582 - (p0) Rename _sendMouseEvents method to _moveCaret, r=margaret --- .../chrome/content/SelectionHandler.js | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/mobile/android/chrome/content/SelectionHandler.js b/mobile/android/chrome/content/SelectionHandler.js index c3ae399f127..eb6d0af7248 100644 --- a/mobile/android/chrome/content/SelectionHandler.js +++ b/mobile/android/chrome/content/SelectionHandler.js @@ -147,9 +147,7 @@ var SelectionHandler = { // Ignore IMM composition notifications when caret movement starts this._ignoreCompositionChanges = true; - - // Send a click event to the text box, which positions the caret - this._sendMouseEvents(data.x, data.y); + this._moveCaret(data.x, data.y); // Move the handle directly under the caret this._positionHandles(); @@ -763,7 +761,7 @@ var SelectionHandler = { */ _moveSelection: function sh_moveSelection(aIsStartHandle, aX, aY) { // XXX We should be smarter about the coordinates we pass to caretPositionFromPoint, especially - // in editable targets. We should factor out the logic that's currently in _sendMouseEvents. + // in editable targets. We should factor out the logic that's currently in _moveCaret. let viewOffset = this._getViewOffset(); let caretPos = this._contentWindow.document.caretPositionFromPoint(aX - viewOffset.x, aY - viewOffset.y); if (!caretPos) { @@ -810,10 +808,7 @@ var SelectionHandler = { } }, - _sendMouseEvents: function sh_sendMouseEvents(aX, aY, useShift) { - // If we're positioning a cursor in an input field, make sure the handle - // stays within the bounds of the field - if (this._activeType == this.TYPE_CURSOR) { + _moveCaret: function sh_moveCaret(aX, aY) { // Get rect of text inside element let range = document.createRange(); range.selectNodeContents(this._targetElement.QueryInterface(Ci.nsIDOMNSEditableElement).editor.rootElement); @@ -853,13 +848,9 @@ var SelectionHandler = { aX = rect.x + rect.width; this._getSelectionController().scrollCharacter(true); } - } else if (this._activeType == this.TYPE_SELECTION) { - // Send mouse event 1px too high to prevent selection from entering the line below where it should be - aY -= 1; - } - this._domWinUtils.sendMouseEventToWindow("mousedown", aX, aY, 0, 0, useShift ? Ci.nsIDOMNSEvent.SHIFT_MASK : 0, true); - this._domWinUtils.sendMouseEventToWindow("mouseup", aX, aY, 0, 0, useShift ? Ci.nsIDOMNSEvent.SHIFT_MASK : 0, true); + this._domWinUtils.sendMouseEventToWindow("mousedown", aX, aY, 0, 0, 0, true); + this._domWinUtils.sendMouseEventToWindow("mouseup", aX, aY, 0, 0, 0, true); }, copySelection: function sh_copySelection() { From 9df69a34a3904d51b1c09ff08edf4661121a4f38 Mon Sep 17 00:00:00 2001 From: Mark Capella Date: Mon, 28 Apr 2014 20:21:19 -0400 Subject: [PATCH 28/30] Bug 864582 - (p1) Restyle _moveCaret for proper JS alignment, r=margaret --- .../chrome/content/SelectionHandler.js | 70 +++++++++---------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/mobile/android/chrome/content/SelectionHandler.js b/mobile/android/chrome/content/SelectionHandler.js index eb6d0af7248..c4bc52ff6db 100644 --- a/mobile/android/chrome/content/SelectionHandler.js +++ b/mobile/android/chrome/content/SelectionHandler.js @@ -809,45 +809,45 @@ var SelectionHandler = { }, _moveCaret: function sh_moveCaret(aX, aY) { - // Get rect of text inside element - let range = document.createRange(); - range.selectNodeContents(this._targetElement.QueryInterface(Ci.nsIDOMNSEditableElement).editor.rootElement); - let textBounds = range.getBoundingClientRect(); + // Get rect of text inside element + let range = document.createRange(); + range.selectNodeContents(this._targetElement.QueryInterface(Ci.nsIDOMNSEditableElement).editor.rootElement); + let textBounds = range.getBoundingClientRect(); - // Get rect of editor - let editorBounds = this._domWinUtils.sendQueryContentEvent(this._domWinUtils.QUERY_EDITOR_RECT, 0, 0, 0, 0, - this._domWinUtils.QUERY_CONTENT_FLAG_USE_XP_LINE_BREAK); - // the return value from sendQueryContentEvent is in LayoutDevice pixels and we want CSS pixels, so - // divide by the pixel ratio - let editorRect = new Rect(editorBounds.left / window.devicePixelRatio, - editorBounds.top / window.devicePixelRatio, - editorBounds.width / window.devicePixelRatio, - editorBounds.height / window.devicePixelRatio); + // Get rect of editor + let editorBounds = this._domWinUtils.sendQueryContentEvent(this._domWinUtils.QUERY_EDITOR_RECT, 0, 0, 0, 0, + this._domWinUtils.QUERY_CONTENT_FLAG_USE_XP_LINE_BREAK); + // the return value from sendQueryContentEvent is in LayoutDevice pixels and we want CSS pixels, so + // divide by the pixel ratio + let editorRect = new Rect(editorBounds.left / window.devicePixelRatio, + editorBounds.top / window.devicePixelRatio, + editorBounds.width / window.devicePixelRatio, + editorBounds.height / window.devicePixelRatio); - // Use intersection of the text rect and the editor rect - let rect = new Rect(textBounds.left, textBounds.top, textBounds.width, textBounds.height); - rect.restrictTo(editorRect); + // Use intersection of the text rect and the editor rect + let rect = new Rect(textBounds.left, textBounds.top, textBounds.width, textBounds.height); + rect.restrictTo(editorRect); - // Clamp vertically and scroll if handle is at bounds. The top and bottom - // must be restricted by an additional pixel since clicking on the top - // edge of an input field moves the cursor to the beginning of that - // field's text (and clicking the bottom moves the cursor to the end). - if (aY < rect.y + 1) { - aY = rect.y + 1; - this._getSelectionController().scrollLine(false); - } else if (aY > rect.y + rect.height - 1) { - aY = rect.y + rect.height - 1; - this._getSelectionController().scrollLine(true); - } + // Clamp vertically and scroll if handle is at bounds. The top and bottom + // must be restricted by an additional pixel since clicking on the top + // edge of an input field moves the cursor to the beginning of that + // field's text (and clicking the bottom moves the cursor to the end). + if (aY < rect.y + 1) { + aY = rect.y + 1; + this._getSelectionController().scrollLine(false); + } else if (aY > rect.y + rect.height - 1) { + aY = rect.y + rect.height - 1; + this._getSelectionController().scrollLine(true); + } - // Clamp horizontally and scroll if handle is at bounds - if (aX < rect.x) { - aX = rect.x; - this._getSelectionController().scrollCharacter(false); - } else if (aX > rect.x + rect.width) { - aX = rect.x + rect.width; - this._getSelectionController().scrollCharacter(true); - } + // Clamp horizontally and scroll if handle is at bounds + if (aX < rect.x) { + aX = rect.x; + this._getSelectionController().scrollCharacter(false); + } else if (aX > rect.x + rect.width) { + aX = rect.x + rect.width; + this._getSelectionController().scrollCharacter(true); + } this._domWinUtils.sendMouseEventToWindow("mousedown", aX, aY, 0, 0, 0, true); this._domWinUtils.sendMouseEventToWindow("mouseup", aX, aY, 0, 0, 0, true); From ff039dcc1abcfe660cdcfaa98b9c457ca8b3427c Mon Sep 17 00:00:00 2001 From: Drew Willcoxon Date: Mon, 28 Apr 2014 17:43:43 -0700 Subject: [PATCH 29/30] Bug 962490 - Add a search field to the new tab page (Bing test follow-up). r=me --- browser/components/search/test/browser_bing.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/browser/components/search/test/browser_bing.js b/browser/components/search/test/browser_bing.js index 4af80f2af11..b1d2f4b95f7 100644 --- a/browser/components/search/test/browser_bing.js +++ b/browser/components/search/test/browser_bing.js @@ -34,6 +34,8 @@ function test() { is(url, base + "&form=MOZSBR", "Check search bar search URL for 'foo'"); url = engine.getSubmission("foo", null, "homepage").uri.spec; is(url, base + "&form=MOZSPG", "Check homepage search URL for 'foo'"); + url = engine.getSubmission("foo", null, "newtab").uri.spec; + is(url, base + "&form=MOZTSB", "Check newtab search URL for 'foo'"); // Check search suggestion URL. url = engine.getSubmission("foo", "application/x-suggestions+json").uri.spec; From 29a33f207ff9bd532bb896eefbcb7d3c6e143a58 Mon Sep 17 00:00:00 2001 From: Marina Samuel Date: Mon, 28 Apr 2014 22:10:26 -0700 Subject: [PATCH 30/30] Bug 990713 - Update directoryLinks to have actual links and images [r=adw] Also fixes Bug 1000459 - revert bug 993581 to turn directory tiles on Allows for smaller than full size images by centering vertically and horizontally. --- browser/app/profile/firefox.js | 2 +- browser/themes/linux/newtab/newTab.css | 2 +- browser/themes/osx/newtab/newTab.css | 2 +- browser/themes/windows/newtab/newTab.css | 2 +- toolkit/content/directoryLinks.json | 84 ++++++++++++------------ 5 files changed, 46 insertions(+), 46 deletions(-) diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js index a371e9b4778..34ed9ef7a93 100644 --- a/browser/app/profile/firefox.js +++ b/browser/app/profile/firefox.js @@ -1428,7 +1428,7 @@ pref("browser.newtabpage.rows", 3); // number of columns of newtab grid pref("browser.newtabpage.columns", 3); -pref("browser.newtabpage.directorySource", "data:application/json,{}"); +pref("browser.newtabpage.directorySource", "chrome://global/content/directoryLinks.json"); // Enable the DOM fullscreen API. pref("full-screen-api.enabled", true); diff --git a/browser/themes/linux/newtab/newTab.css b/browser/themes/linux/newtab/newTab.css index fc7f842459c..f82f5683a2c 100644 --- a/browser/themes/linux/newtab/newTab.css +++ b/browser/themes/linux/newtab/newTab.css @@ -121,7 +121,7 @@ .newtab-site[type=affiliate] .newtab-thumbnail, .newtab-site[type=organic] .newtab-thumbnail, .newtab-site[type=sponsored] .newtab-thumbnail { - background-position: top center; + background-position: center center; background-size: auto; } diff --git a/browser/themes/osx/newtab/newTab.css b/browser/themes/osx/newtab/newTab.css index c092ff08f7a..f90ec743f6c 100644 --- a/browser/themes/osx/newtab/newTab.css +++ b/browser/themes/osx/newtab/newTab.css @@ -125,7 +125,7 @@ .newtab-site[type=affiliate] .newtab-thumbnail, .newtab-site[type=organic] .newtab-thumbnail, .newtab-site[type=sponsored] .newtab-thumbnail { - background-position: top center; + background-position: center center; background-size: auto; } diff --git a/browser/themes/windows/newtab/newTab.css b/browser/themes/windows/newtab/newTab.css index 44e2e3a20ac..34a2b27250d 100644 --- a/browser/themes/windows/newtab/newTab.css +++ b/browser/themes/windows/newtab/newTab.css @@ -124,7 +124,7 @@ .newtab-site[type=affiliate] .newtab-thumbnail, .newtab-site[type=organic] .newtab-thumbnail, .newtab-site[type=sponsored] .newtab-thumbnail { - background-position: top center; + background-position: center center; background-size: auto; } diff --git a/toolkit/content/directoryLinks.json b/toolkit/content/directoryLinks.json index b0459bf25d6..cc6a207863a 100644 --- a/toolkit/content/directoryLinks.json +++ b/toolkit/content/directoryLinks.json @@ -1,67 +1,67 @@ { "en-US": [ { - "url": "https://www.mozilla.org/#https://www.facebook.com/", + "url": "https://www.facebook.com/", "bgColor": "#3a5898", "type": "organic", - "imageURI": "data:image/jpg;base64,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\n", + "imageURI": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFYAAABWCAYAAABVVmH3AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyNpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw%2FeHBhY2tldCBiZWdpbj0i77u%2FIiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8%2BIDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDIxIDc5LjE1NDkxMSwgMjAxMy8xMC8yOS0xMTo0NzoxNiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjhBRDM2QzZGQzZCRDExRTNBNkI4QkVFQjg2QzU0Mjg3IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjhBRDM2QzcwQzZCRDExRTNBNkI4QkVFQjg2QzU0Mjg3Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OEFEMzZDNkRDNkJEMTFFM0E2QjhCRUVCODZDNTQyODciIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6OEFEMzZDNkVDNkJEMTFFM0E2QjhCRUVCODZDNTQyODciLz4gPC9yZGY6RGVzY3JpcHRpb24%2BIDwvcmRmOlJERj4gPC94OnhtcG1ldGE%2BIDw%2FeHBhY2tldCBlbmQ9InIiPz7zYkgQAAACYElEQVR42uydz0sUYRyHZy0sManIgwZJ2ak6eYoOgoIHQYgOQf0DZRnUH9C9ex2KVfDcoUshdPMUFEJFHpKoIA8ePBnhj7bQ7fPlnVPY%2Fnj3OznjPg88OMi%2BzPowvjszOztbqlarieiQk%2FKmPCcPJdAMFbkkp2VZ7pQU9oAWnsqr9HHhmbxuYW9p4Qk9XLltYd9pYYgWrry3sDY%2FdNLCd861sFU6%2BNNBAsISFghLWMJCW4fdlmtyPasVHGyDiF%2FlnHwtF%2BU3ubXL447JkuyWPfKE7JWj8i5hAztJOLH0UC40OOZ7%2BnPtr9%2F%2FJmzgrbxhx%2BvMsX48lpf2Oup%2BC%2FtA3kn%2FddkrcGJW3md3y5fPMS8uhK3PPblBWF9s3%2FQlR17%2BPOKQ1p9N%2BZyw%2Fsz%2F49A0FxT5yOtNC2MPyytyRJ6Rx2tsZEfbLeyHyHEX5As5yFSwO8sRYzrTeXkw6ydX5LCrEWMuy7O8eNXmZ8SYi%2BwV1OdHxJhThM2GI4QtOIQlLGGBsIQlLATydBLGLvf5lPE6viThuoNmOC%2B7ml1Rni6VfyWHc7jxrciTTAW%2B2HnbfuZYf%2BwkeImw%2FkSftyVsbU4Tli2WsBBevAjLFlsM7DMIPYT1p6V3cwmbwfxq5OkkTF8S7knTKNMR6xiXAw0%2BdqyVP6bI9yuIOdS0z3tN%2FI8nx1RAWMICYQlLWCAsYQkLhCUsYYGwhCUsEJawhAXCEpawQFjCEhYIS1jCQp2wv8jgTsXCfqSDO0sWtkwHd8oWdiYJX0cHPljLGQtrX7ZwTU4l4bZ2Fdo0P6em7abSltt%2FBBgARupmy4MAwegAAAAASUVORK5CYII%3D", "title": "Facebook" }, { - "url": "https://www.mozilla.org/#http://www.bbc.co.uk/", - "bgColor": "#990000", - "type": "sponsored", - "imageURI": "data:image/jpg;base64,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\n", - "title": "BBC" + "url": "http://www.amazon.com/", + "bgColor": "#000000", + "type": "organic", + "imageURI": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALQAAABWCAYAAABmQby7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyNpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw%2FeHBhY2tldCBiZWdpbj0i77u%2FIiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8%2BIDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDIxIDc5LjE1NDkxMSwgMjAxMy8xMC8yOS0xMTo0NzoxNiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkZEMzkwRDVCQkU0RjExRTNBNkI0RTM0MDNENDQ0Q0QxIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkZEMzkwRDVDQkU0RjExRTNBNkI0RTM0MDNENDQ0Q0QxIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OTVGNTgwNjJCRTREMTFFM0E2QjRFMzQwM0Q0NDRDRDEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RkQzOTBENUFCRTRGMTFFM0E2QjRFMzQwM0Q0NDRDRDEiLz4gPC9yZGY6RGVzY3JpcHRpb24%2BIDwvcmRmOlJERj4gPC94OnhtcG1ldGE%2BIDw%2FeHBhY2tldCBlbmQ9InIiPz4E2uc%2FAAATOElEQVR42uxdC5gVxZU%2BfefeGWZweAZhlokSBB8gIgMhRpRoQtYYFfEBRoySl%2FmS4JNNNmsSv2Q3riY%2BYljUuCbsYkJijCuuIsRHSFAjqAQUgYFVeQ2gMMDwGB4z3Du39%2Fz3npvpabu7qvs%2BYKD%2B7zvfzNzu6upb9depc06dqrFs2yYDg6MFMdMEBobQBgaG0AYGhtAGBobQBobQBgaG0AYGhtAGBobQBgaG0AaG0AYGhtAGBobQBgaG0AYGhtAGhtAGBp0UccX1ESznsZzFMpSlxnW9jeVNlmUsC1meD1n%2FSJZuLEnHZ11YVrBsc907meUTLGeyVLPsZFnC8pKi3uNYLpPvUsfSm2Uty99YFrMsyLMNz2A5m%2BUzLKezHO%2B6fkjq%2BxPL6yx%2FDPn8j7EMYjmY53uWyc%2FXWFpDlPs8y2iWU1lqWSpZPmBpYFkqz1sV8l36SVvhPXI7TBIs%2B6RPnTiN5QJ5h4HC2fekLV8S7rUDO1Y85FMsz7Ok7XBYynKVzzPdcnHAc%2BpZust9F7C8qaj3Ccf9Tvkyy1pF2WdZhmq%2Bs1POZ5nHkgzZRstYpmjW0ZNlnV1Y3KJZ9zdZlms8r5Xldyxnaj7XYlkc8LxLHPf%2BkOWgov775JmZMl4V3lmARntQ44vdpHhGOcsIjS%2BUw6ss1Y7n3x3ifTezDAlB5h8UoI1maNRzhl14PKyosz%2FLixGeu59lqsZ3irFsCXjOV%2BW%2Be0LUDeUb9yL0fxSw4aYrvtj1AWXfkxG%2FIWSdM%2BXZV0Z4340%2BWt4tMwvYRj9R1DWMpaXAhL4%2FoL6TI7S5G9%2FTIPTqgPLnsoyNUO%2B9eL7TKbyN5cYC2uc3iW0ZBbA7f8xyYshyX2GZwPL9CHWewDJNcc8NUkeh8F2Wzx4hfhNs46cjtLkb%2F85yc8SysKcHs9wToSzq7Jcj9ACWH2kW3BmikqkRvxgckIsjlv29OGpRcHFA5AeOzE80n9MUos5vK6JQFQUm9CGfz38m7V4I%2FFyCCFEwVRzAKAN1Qq7zoJnKA25OsdzJMlYiBdC8d2lUcqFEMcLCyqMxK%2FIIRw4N0FDfYumqKP9Tlk9JG41huUOjTtzX1%2BfaOon4qHAwRBRkjsdno1i%2BoSj3AssXpE%2F%2FhWWz4v4ZEfu9Lo%2B%2BPzsuzL4o4CaE1MazPOf4rEFCXttkNPqhp0whS%2FN4yU0SWmuWzg%2FzhdMyjZKEnD6uMRhArvUen09QaL1JjrqAjSyLJMT1YEDZrhKa2%2BZxDd%2F50zLQ%2FA5QaZNwl4658BDLqx6f%2F7Oi3FMslzv%2BBheekGf18ylzvshf8uj7tyXcCY5eqvH9ToGRPlphbP9YYeSvUZSfFMEpdEYuervK%2FULTSXhdnCpn2Z9rlDvLx1nKxwFWhb%2FOjxA2dMpXNL5XvU%2FZUxXlmliO9yn7LUXZxyM4hTn8Wu7NlevBskRRZhum5kaWV8TuS3uw%2Fg%2BKUbFacb0y4uhE0P16D5v9Zh9t5sR%2Blus8putbWN7VcEzc2CWzhF8bPaZ45luK68flocWGieZV4Tqfzy9SlPsf4YgXnlaYOv%2FI0ivCd8IM%2BWVXW%2B8WUyeQa1DlG8Q2%2FqiswPWU1a5ThEwr81xtTEXsKExn9T7TO1bbvhRQ9kWW%2F%2FO59pKYQWGwnWWcmC3dpI1qxFTYIatlQdinEWGJilkajuNtsjLq5%2Beo%2BsEPW2SlbozP9R7iUzwV8jvNEFPKjVfEdq%2F141rcZatGDbUUAysVdnUQlgVca8jjnTYX6btGbcN%2F0%2FAp3giIzlRrRCPWavTTmIDrZ4UkdDpgEEGZvRNAaKV2dU6JteIwDRBtDmegv%2BLL5IMgs6JMUXarIhRWDHQTp6W3tFGNo51GF4HQiDTdrmG2Bc1kg%2BR9g5zdXYo6GjUiR2Fnw7VRZ7sgQiMp5DKx0YbLNB2n0mFrHmG9dJFCgm4MlOgG2meEmGmlQFcxNVS4SeHjwLRMBFzfqUHYBo02CkvonVFN3LgPkb8nYZJqOnyIHaayOoBm%2B46QucdhaJu7NPwAhLseUdyjctgOSOgwCKrr3WUW0F2QS%2BXTMG5CY5XmfsWoPdaBBYh7Sb3IUiwgLq1KUdiuMDVy%2BIjiepnGrKxzPQyf8lJGzsIIiTwQovL1YqAfOIbIjGXqX4Qgc4NEW5oLVD%2B03X9r3DdNIhA6Dlixnf60Zj0FndYvJ%2FVSNhyMmZRN%2BB5G7Qnzfz1GyIzvrUqawXSJFbTxDrsabTSnQO8AMqtCfI%2ByzC5QdKUQZLQK7LcopwPYyQ9qhGa%2BStkQkBsHjwEyV5F68QKhROQ6LArrmWviCnHSVY70rSGeuUNjRuijcPxSGoMmVUpCX0n%2B6%2FFAk2inTRFtqKMBIFNQHgFWsS4IiCiU5Vk%2F%2BudhjfuwGrgrxHMbNQjdXWOwkyJSsqtUHRWTaEYQfkXBCxnpY4DQEzWm%2BaDwWJc86%2F9PhQOXEvv%2BxZDPhebdr3AKVVGcEzTqKBlHoF1HKe55TnG9RsP27sxAp56muGeR4roqPt0WcO1rYpMHYS9l0wTOE3sVf79P2Uw%2FFdlwz6AA%2B%2FejimeoMuCWlbKzQGhVvnKQnYUve0aehD%2FSUSN2ZBCSAdf6i3OoGjReGEx6iUeIJ893fbZNZg0kaM1l%2BbPHwIFmXxJAaBLn9ncB11WroAtK2VkxDYM9aKq7moI3BgCf7OSEhrmQiEhI4CoNk8MvfeD7FH1NoK9obMSskZy%2FWLS9G%2FMVzwlKXqpTzF4YVEtLTWgVIa%2Fw%2BRzbdX6oUceETq6lWxUaGLgoYAb7kUYdWHE8yfVZ74C2jwJsbvglZZfMnQNwLgXnzQyT6I0X7qDghZDfi%2FlTUkKrKkReqnsjJw4JeULDwwWQDz2jExN6C6nzr68VUrrb6HHSSx9IeEQxKil6LnkQplDHw3D2kDqfG7uSznR99k8K7Q3zZmapOysmU5EqLPOcfOlp0kmvS4fpAprmm52U0PDQ12uYHI%2BLTJOoxxshzS3kW9%2FuqrcY8dukh1a9W4gdZL6gz5%2BkbH4InOB7FfVMJ739kAUn9FzN%2BzDt3CeaqCpCXZd0Yi39uOZ9k6SNrouoXS8o0QB1rxAi0vEdRTmYplhRvl5joGI%2F5b8ejo4CUZF8vT3PEf%2BM4h6cffbdTk7oDXk%2BY5biOnZ43xDieeiz5aItnYK2bozwfr9URDN0gVnl0lLbzjnEZaq5VrzdsJlOLaK5nxZSX%2BITtsE9Owr43lae18PigGjdlyN28BQhC7TcZI97Fop23%2B4yY5xbq6BVkRL6okzlSEfw20GDzRgItw0VU2aco00qAqIy14iCmhKxnRqlr5cfNtXj2FU7kaU5xNFL9XJsU658P5YG1z2z5Yw6rx3Dtyief3PALufpirI3BpS9T1F2bEDZq0K2EXbEf9ZRHjvYV7numcNS5lEXdjk3suxheYSlzuud0u%2FMI3vt%2FIxkfvd%2B71Fy3uBelg%2Fk2UG7yO%2BKcBTXayzDNc%2B22xbwnC2K8kEHPWZPbXQAoSPsjL6avLfmYBpByuh%2FiQfrPoWnv5gwQ8V5yCbKNG%2Bg1J%2Fvovg5N%2FNTh%2BTu%2FYRoLa8dz0i3%2FCL5bz4dJ1Okly2PBB3Eftf4lB0vZb3wgdixQVGNgWIaQBP185gN8O5YtfuN1ONuI2ywfVaiBu1t5I3BouHXU0sT0f4manvzAbJbW8hiHWsf3E7JtUv592wf2m0WJU4aSVZlH%2F6dX6yiC5XV8av2GuR8d1vDyQUQY0Z%2B%2FGXyzn4zNHa0I7ltdojZ9dEAfwHcui2gPKIrfueILHETOgcspmAFqIeEX%2BIy7eLlNym879yO6OyO7QONdOjJyZRav5Ybu5bidVPJOu0LztBU3GeaVmXxVflMna3kf9xVDtUBHZTU7Bi0zQgZxIfkXZIy3a6j4OVs1H8iqXfUZ4m6cjallj9M6X2NZB9oJTttkWXZGQPRqsKJm5l2TDNV2uwDVgpuH%2BsqsmJ8LdGFKs6%2Bkay6G6JO4ujLc1mGyHeNi2mUO6N5BUXL1fDrg%2BZ8yvoRugDBoQOUfuN%2BSq5%2BhuzmrWQdlya7JUb2PovKPz6JysbdTQbuueV1Sr78M9as7a6M3bqLUhvXsNa1QdCePGwGCcFyg6mXDG5bBhHI1iQO4kI7aS2xWyyqGDuNYsN44qrse1Q3YfEIvflVOvjba8jqwh1RlY5T2irPaHmuLr0%2FRuXDL2OSDyCrWx%2Byhkw2ZG5cRq1zplB6TzNZ5XaHOBSTeSS3G9J8J9KHVxRVE%2FwdPN%2FdDlJb3ftRxXi2FPucbggdFm3zrqXkuy9nNIvYyth2j%2F2KD3EjJ3lqZO1jZa6X1Qxl7W1TYviVZB0%2FvGPQ9L15lHrvNSZ%2Fd0pcNIM1TJ%2BjlMyTuA2SZHXl2TttOc037CT6GkXPqf6A23sgD4gW%2B6BFsW5VZFV%2FrH0GaE5T%2BXk3sXX9eUNoX6x%2Fnlrmfp2suJ3rhgeo%2FWhdnOAzPeNEWFnrC9rj74Eqt4slm4B46qSyvgMoMWQiWaPCntKbpiP2%2FyPtXketj03gwb3HTWYsT68m753ZdohQ5VZx0puIbWq7NdbBAwLJ44NOo8TEPx4VhC7KbpO29QsyDWX1%2BnsH3SBOJVajRkkE4Grulnu4GxaKFg8eedzZ6V3s7C%2B4hypad1Ks9hzx7NmkqWQfocaVxdj0Dtm7Gqhtxa%2BobftmqriQFV3tueFCmmv%2FlK37pHH5NciWxew7sClRw35Vt46H%2FqRX%2FYbSe%2FdSrFcHMueG97PicG6gbO5yo8heDzKPlPjxhR5OVjYnHc5kwu6Qv4e2b9tcT4l3nyYafGmnJ3RRNHR60Z3UuvgRih33Ied3qmhrJ%2BZLCPApUm3atLJ3ZDS63a58YafHT76846DaOJ%2Famg6xg2VnNJLVtYwSJ0%2Bk2EgeW%2FFKhAGIunqYL20tZK95ilIrnqTU5uxxcPHaURQfdgVZQ6%2FWa4B97JfF%2BB2bN1Fq6UxKrZubcYbLanoxccdQ%2FJTzeXCNJXv1Y9T6yr2kM6BDAEfQDnP8vUDCnP791RyjxKCRFJ%2FwpCF0SEIDcG4e8Yht4iC%2BGUJs%2FaQcK%2BvbY0bo8HEXaCI7q%2FUw1R7inyyxHqzNEcTlzxMj2Cyq6uj1J9%2BeRW1b3s4OlOq02JmxjMUSP%2BnczP0x1rJWN%2B%2BdR%2Bkdqyi5co4MpP3UtjuVaQeYX2lEeWDH4u%2FKnpTetzsbWotTIU8InEfZPaA5YDa8LnAmYl8m1nMwlV8%2Bmwd5P0PokIQGTqBsIN7LBqgXJxLB94IfjghbvJ29HkTi6TgzLccc13K2%2FiGZGWzyj7yiHMrbFlqXn%2BWqw8oO10wsuUx8jHBdgIUopPMiSQj7AbEQ5jyDA7Hh0a5ZMXjXCw%2BqdFMZdfnMrWTV8e2xzrvv%2BXB5Sg3SKV550gjg3yHEhiYfX9ARnLDbpYqlq0sQMrNcJLOzRITWzYQhKz3K5QTX4lKPl%2Ba1s9bxhwaNGtgZ8gPKpvvOEVsZs53zFCXMerUeM59CA1mZd0%2FWz%2Br0JsfhdP3hqOAwQSRGeZ17Vi1aCIlPWI3CP7XBcnkFHTsYII4eQhDIr8Z%2FBnMHkZ3pAbCd%2F8Hx999IMycZpo%2Fdso97YrUhdJ6YLVNk0BnC6MRbpfP%2BKhr8c3R0%2Fq9yaNivU3ZDBcg4S76rO%2BcFkQ9s%2Ffpfx2fuPGX9dFC4FXuS1LbiURO2KwCQ%2B4AwxZcoe4h30Nb5UdR%2B9MIasRmfERNlTSfsAySBYX8mFp4uFtNCtXoE1iG%2F3J1E5XQGsQz%2BhzAvAjPI3vM%2BO8%2FNROXVhtAFwCwxMW4Tc0RlXpwqMkUiI7lkGZD7ZSH4kXQuCGYULJhgoWOMmAijSf9fUrwlZofXWXnIzDvH8fevSe%2FAxnZCs0%2BRXLeI4ptf6bQrh0eiO4tjo5Ae%2BFvK7rG7IsR3GUPtRwIgWw%2FpoEh3fVOI%2Fr5ETt6n4p%2FJhyO0kDx0ogjIe5aQtzeF24SARSls7fop%2BZ90dJXDBEvJTBcyBJTV0smlD1HCELrgWC5e%2FNkSmpoYsjxSKgeKfM7x%2BT4hNKbrHfITf28Vkm%2Bi9sw1RGPc6aQVYhLFhJQgaDfRvPgcS9UI5vYVQudz1jbIi93gOAos6L934T2ucfz9bcpjy5h9cKuxoYuI3F45%2FIswnIA6Kc%2Fnwbk6WURHM9oeZkNlkb%2FzbnGWQeZVGvePovZ%2Fa4yVwen5VG7FqwyhS4AXRJB9Nlmkf5HrLHXP1guJ4eRu1OWfzGAk5tWVdAyjMy4JvSWSIzY09%2FhO3Ae7JRrxgjh7YZduYxIdWSlk3m0I3TkB5%2FFBEYS6EJPFsWN1JTAJ8gW0L1YwHhVzKp%2F%2FnQhb%2F5PyzP10jONoOax8tQhO8zldOhjRjk%2BT%2BjjYUgBRh6Vi38LZxUlUhTy3op4MjipCO7FSBDuue0uUAwTHsvkgsbuLaXsj7r1OtC4G2UIxkRBCPGQoZwidD3aKLHF8hh3t2JeH2HA%2F%2BR0rc8iBwPJYrUa7wE5tlJ9bhKwb5PcGcc5Shl6lR%2FE2yRoYHAbETBMYGEIbGBhCGxgYQhsYGEIbGEIbGBhCGxgYQhsYGEIbGBhCGxhCGxgYQhsYGEIbGBQD%2Fy%2FAABe1HqefX0OAAAAAAElFTkSuQmCC", + "title": "Amazon.com" }, { - "url": "https://www.mozilla.org/#https://www.youtube.com/", - "bgColor": "#e5523f", + "url": "http://www.wired.com/", + "bgColor": "#1facdf", + "type": "sponsored", + "imageURI": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALQAAABWCAYAAABmQby7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw%2FeHBhY2tldCBiZWdpbj0i77u%2FIiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8%2BIDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDIxIDc5LjE1NDkxMSwgMjAxMy8xMC8yOS0xMTo0NzoxNiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo2NzQ5MDlmMi02YjdkLTQwNmQtYTMyZS1jOGU5ZjhlNDUwZWEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MkE5MUYxNUFCOTJDMTFFMzlCRTNERjhERERERkE2MEQiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDQwMEQ0Q0FCOTJDMTFFMzlCRTNERjhERERERkE2MEQiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6Njc0OTA5ZjItNmI3ZC00MDZkLWEzMmUtYzhlOWY4ZTQ1MGVhIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjY3NDkwOWYyLTZiN2QtNDA2ZC1hMzJlLWM4ZTlmOGU0NTBlYSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI%2FPuhLH1MAACcySURBVHja7H17rBzXed%2FvnHnse%2B%2BTvCRF8SVKIiVLturKNlxHKmIhtZ2kjREUSIsWQWKkdZoiQNEUKIo2LRo0%2F6R%2FtI6dAikQBLDdFEESxIFix1Aaw4hjy3LkSBYtm6JIkaJE8vJxX%2Fue1%2Bn3nZmdndmd2cclpQLFHOny7t2dOXMe3%2BP3vc4KpRSKVrT%2FX5oslqBoBUEXrWgFQRetaAVBF61oBUEXrSDoohWtIOiiFa0g6KIVrSDoohWtIOiiFQRdtKIVBF20ohUEXbSiFQRdtKIVBF20gqCLVrSCoItWtIKgi1a0gqCLVrS8Zp78wzd2pl0g6EdXHaroj0WbSnT0brS7eV7WHGf1l7xnnjVS7%2BJazJqXuDd9isQyTV2zd2ruiX5N%2BlmadqESd0mQE7O9Rxsy7Xn7JXAx53sTn4eTjIc5bbziHVwwlbhdTOlSzMmg00YpRl2qrOdlzUuod4Y5E3%2BbhhRouQq7A48GKXLHkiKOaQ8QY0Sk5tin6LOA%2FjFoDGslE5YI%2F15ICudNVu1v0XgsO46PthdAJndwP33fJWMH9MNrcqBsUlcKfnKqaoxIxYJ7mNXHLKxK120NfHR9RbhVhLfPu9%2F3WDizKCnTgNZobcyuJ3HK8LC6GqAlLFQCBY%2BGqIibRAbhqITo1mOOBh4LBjHiWjGmilWik0n6ECjTGz79d84VkL4Dm95zhTnJ2WJBiTLvJtGPQ9f69LwGrcMdZeBQDThJH3T40%2BE8h8ImmkNynYbSKrWfanKz1fg6qElhphL3mHxh4OKiE6CnTDSUh4HksUpYSs1PO%2BLuCagSBNgUNh6oBTgqfWxJG2ag4r5Te5%2BArAJpOhhqM4U0fIm3VU3iXqLKeM1MxfQhURIOtonDr%2FcFzButNn7usRr%2By5PHEfh8sU8XGTD0AFQ2iyfYMX5wcrRiDnGaJIjoX5aCu56Dv%2F%2Bnl%2FHSwES9bKNE7KXuxQbNQfgs9Uq0MWZgomXYuLO7i9%2F40BJ%2B7uxBBErN8dAsnT9O%2BSJjXWaDXF6bK%2B0OfvQr19CGgQb1ZdCG%2BkjAwruBbEOCUiLc1ZzreQo9%2BqzV6eE%2FP3kYHz9WhauJC5rYpqvUoTTIo4051ziiP62pBONmgW9d7%2BAn%2F%2BIqjYMeYBOHkYKFNMJbbJZG77bhErUly9BawqUBBJGWuCvpM2szE5%2Bz6vSIoWH06DUxNUki0%2BQNkFrF%2Fr9uNcNEjTTXpmmiawhU%2FVAUqHtk3IX0pqZey1qsJfnfLpZNj%2B41YGGkld51r0Y0gTINQipHEzecQEU4jSheRSpMqrswTBcDUOEzwv%2F6bkCbZdDzA4IgA%2FrMXNyzoMbwpMrA85j8XCp%2BtkXrYGHF7xJmdTHwjRjFBmOqcl5GWUxYikixjr8r0fd9wvVqNBUxptvzFOMcgjP5lszbPYZj9EndN%2BH5JezGFxFhK3l3jLUf%2Bz%2FGu2QHBrx%2FNYJmdLszlFCK1b4K8XPUrZhqUYgpakNkjDKb0JPP4Ge7RFB8VYlwooNsQ8%2BPRigjiRJEqiyTzqMXgUjjZalC1TpcF%2F7cChgjkionKdQn2OEJkSCpLO9GDmWIRRBS0iIbrf1447H0SSKahO3LpD0Y63v0Y6rQaFR6jCqS2mK2wsq4QOp1YDtKaOaRYy4Moe0agqUkcAxlRGtv6uvEvgl6RBci14rNIPXEA3nPAsLSJo%2B3PpRCAatbI3NBlSYhY8zyVnoB0%2FEZESNSn96XCLGO0gQXk2G%2BYabVWkC%2FDWI0Y%2BJzgz8TFdxqt9EhKYqgrCEBiPhHa5PBOPotqcdlKMZeJjYaNhoWSRued0SgQtCsJEscenbAxCMzd1%2BTDak4Iex74FwNxxsQkeo9ErxqfrROIk1svAsqJKxBBMlKpMVudl3sOh26ywzXA162tFbZ2olbiR7pSJa0bEP1sFZvomlL%2BIEf6wx%2Bnkcvu0aA2BTVQjAhlkjTKT2HRdcg%2B32H9stmaqNxsVRmXRlQ%2F6YaQXJvaCgysXnSiX0xX%2FjhNby5J7BSMggr0URIzX3qwXWs1%2BxM5dgj0fB7567jjU4Ax6JtoE0%2BXqng02cPwKL%2BWOJqFcrGRkQ0NzsDfP78bXhETDZ9tttx8YljTXzgyJLeKKnlQwh%2F0tiVJkfvu%2F0ufunBGs4uN2myNhGniAggR50K7i3QBh9LYZbqPkmV37u0i%2B%2FtuaiXjEjRh1qKJY4rQ1Uqp0IngS9fuomXbxM0qlZJoxBYUSKBQ0WGwmJm8sEoj630miFxkhjrmWNLkDRZl%2FoYCgljbJMN%2FW7oqBpKZIPW6LrTxj880cTTa010BG84CxJ%2FMtgh8l%2FzL4sNPhoDyVssEVb%2F3UtdvND2sGIbqW74unIwjmqSQCl093zxwhYutn2yi0QkAIVmynHlrfQnocY0yTaoWLQmFROPrZawVqvAZmYhoesbQ3EoEg6LESNJ2jfC1Ka26sN3Jb5wtYWv%2Fg3hxxWyXg02Z1t4fKmGj58sZ2ynxJfOb%2BJTz10BVte1BIbqA7ttHCHD5afPrEUwYjiAUOJ8d7OFX%2Fn6NaDZCFlsd4CzK2V8IBOEpBnIpW3dHrTws6cP4ZED9buSi9%2B82cbXbvfQKMkJt2SIz8QU1zmLBgufPb%2BHr3x%2FG1hZiixwNYd%2F3I%2F8dVIbnrRV%2BOhhic9%2F9AGsVWidA09DnkzwkdBAPDqGH7uDAX78ZAk%2FdXT9nhpcz9%2B6hOdueVi2zdFKRK5JleEpj7Wv3u8Av%2FHSJl7eZAxnJnyX%2Bd7kEDiFsKlKjLVBgvFjGzZ%2B9QMHcZAEqqH8UHixoGM2EIwBzFQ%2FJhNbkFDtnzx2EF%2B9uoklIrAVAv8X6ObLHSd30t%2B4RQS8sowDy2Wsex6qysKLJNX%2FdKuHn44nami1NHTPXejQr2Yd9xPTOI4Jo2ng6SPNMcEqMjx9SkOAQJZxs%2B%2FhkUixGvFijjvPskhCRAsncZthhTQi3JhhTM4MdZAmY6Y8EOB9tGkdIkJXhH0rEUocJRJuiMi5bERI19UYWKBNf3%2FlSg%2F%2F9i%2Bv4bd%2F7CTtO0vnaUGlkWFokkSHqKHdFRh5alWOs15NcQVFloW%2BJIQ7HV%2BSljUz2VpN9C4n7IEjjRJecQKcqJixW1Qk91aNrk3uHmudnvBw0w3wufM9%2FNm17%2BMPP%2FEQ3rtCRh8LTFHSEFYJOSbutAvPo4V147efJLqqWR6pRFbRPbrOwet7bu62nmsZpCIMHPS62pi7RZvarHTw%2Bm5pqGQiZR7E03m95WpAKAn39gce3r8%2BwKGGNWfYj3A4MUytZkVuG0xg8uGGpvzjEyEU4CBvHOHDQJjjNgYSAmkK5hNYdVlk%2BbhNwymT5S9o%2FjfbA3QcL8Ky2YQpDROHayU0iQEYH1Y2qvijq7v49J0W3k%2FQYR5zn8mgZ7iQro%2F1UmmkOYbEm%2FL5ipnx%2BGHUTUa20oBsCZfgqEB1hJczXMUpU1YzmBiD7EODUeDt1gCuF6SGIhiWDqMrJGBKZZPmY2CdoMrqIYmLt8v4hT%2B%2FhP%2FzybNomHY0xrF0g9iNN%2BYienC5ihNlG7cGgEuwwbQG%2BEHXT8glX6tjliI3Wl1c2euiRg9nSeloaUeMYNZwfcfFW20XR%2BulaFoj99ebe32YZkiQu4FDz2yMiFJk2y2xsiY1v1YK8EcXtnF1qY0%2BfejqewPs0cZ%2B%2FNgyTpO2CGKZEeCPL25js%2BNhiWbrkV1gkzj2ZAmXuorwoZzqZlQzjBhPeCHeJc1kE1S4Glj42JEqHqtIbGlZHGhcnvTzlqnXqwMfz90gwUHGlSAcbRBh3iZG%2FZvNfkjQc5pRPWKg9arCc1e20el1cXPg4kHSfM%2FQOiQDOd%2B5toPnb3awXLK0Ucm4tWewN4NkGkGWEzUTP%2FbAoVRI01ZMNmZ6DZIpGWpsNdS4d2XIGqS5IhL6RyeWcJS2ng29oYsgtDlCJN3xfLx%2Bp43vbBtYWrIgA6KhtTW8%2BPZ1fOH8Hfzioxv0fJXmVYy0lqlVoBpBjkalhAebNl7bHKBq1choqWCz5aDvuCjbVuQaCrt6ZauDG10PB5bKZIz4cAMyJmiD24S5bmy1cP5OXxO0SKi7PdfDta6DOkkogyUYbeKjxERJChqHD8kolUnPsWjxf5uw639z2HVlEEFTX8RI%2Fu4O%2FtdPWETQVQ6R0A28GQZ%2B%2FcUtfOf6AKJOitzwUfXY5WQioI0%2FWLFJ4g%2BNrMUdFgMZah6LmKRL0%2Bm39vDLTx%2FHUxuNmff%2B8jcu4zcv9MgoXCFVSpqCiPNO15nDIxtJJ9rYMscN6hV84UoLv%2FXaHvo7Dn7mbJ0IeiV1%2Fecv7eA3v3kNYr2ujdGANEPV57Uro0%2BM8OEjEn%2FvgQPRE2Wk4WQc2Jo32yBlb0YOAfaH9JlunAF%2B%2FckjuK9qT10Xrz%2FAv37hLXzmcgena3US%2Bl0EZDj%2F%2BZU2EfTBCKNneZ5Cg1H7HZPtvUs0UdcliUsLZtm4Q9LtSqufUNdhR9%2FaI8hARNwM2Kb2NITo6ciRguMH%2BOFWZ%2BTgU2FY4nLLx1s9IiqTCID6OUAE9uiSOdvxH3G%2FxYYB9W3W61haW8LhFRunlgXuI8yPtRUYtj1mWCocbhDBr5fomirWmytYXjmA%2B5brOMrupcjzMdTIizrgZOw%2FJ%2BLmXBieLW3IpLGT%2BB2txdP3L5ME4vsdrfmYAftegEn8k7M8gkP1NEOPiKVONs9aFeZqFY1mNfH4cBHXymUYZOscWWpigwzYQ8urOLjSxNoafb5SwbH68sTCBySctEZeSHNNiTLQTXs9L2GDqDE%2FcyjGzXIJ%2F%2F2pU3h%2FtYLbA4aELpbJQDy35%2BBmtx8njKgMJpfp4YWLeZYmGBpxHkp03R1H4UI7GKFPEb4%2Bt01YmFR2l4jsWMnEPzhC9joxAgcnfIIrL%2B76I7QXAfhLuwPcGeg0P1IvAQ4TXnrPcil7ubKMQhpBlTaxyjkXTJBKan8332IrxDZvUsp72my0SZp5WA0GeqN26Pl9YeV7QuekbJVG91pbuEM4oj2mKvLWi%2FgH0Vo0aY1XSGh0pae9AtyLP0diRnIr2XgsBYEmbJaonvYCiIk58FqRTtLXcyIRewz6kveKmJ00lGUGESw0YvhncS5ExnjEPrOcmEddNQIIQ%2FN1OCO9TkrF5uPHNmrY6fexZxgg1sfmQODCrpfD8Epni5pDah8RtMQpsiaXbIPolt30BtoECy603Ejth6B%2F4Hu4vuWgZAts%2BgN8kFTDP36ggi%2B%2F2YVBONImLjtHxOuxNDVk7KW8uttH4IYZUx2CMSw1D9bLuYpMJKAAL3NfhNFMWzl6Ez3ttQ792SU1iAgDsdkQviLc7LPLr6STncp0LzviDb29IiYQhf1nPIYWNjELEYkfEYSRwuZDAyaIvQKCtFmH1maF1quq%2FDBAYcyqFhAxhNOJQjKESyXt1%2BYnO1qLJfBbLM0duqFP%2FZfYe6GCaHwGDpNN8gppzV978Zq%2BsCM5m8%2FFD%2FckNspWNGYxhlb3s1JpMKliE1aNebbC9VuuM%2FP5tM8mPML7rL2udfxUb%2BO%2B9jHzPsTSD69IPFQ2cN4lK7zkcmIwEaKT8hC8tu3gtVZAqsDAZpslrcJHDpMKszdxkZ7ZJNF%2BnZjgwk4XZ9fq8UTOd7QhS0RPy6Txs5FLyBOoQ7sywyXwtT9U6fAvy0Um7IHMTiLn9z2SgtqPyWaOkmGIlINK98xrq7S0YwkdyAg2MAZNcOSQwdiDxN6QHjFZ33dRi8PGHlnxxogCxSzNMHKW6fXQfxnaV5t2UQrsdntQd8hoNCsw%2FRaNtUTMwNvZxonGKq6RcPnVl7fAcYmQXn0cImy%2BTAa%2FzvVRyMiSm0d9jeHG2IMpY89H3kSbxEwBMZcdheMZyG153pQ0DIxn%2FoRvNgk3HyUY8MpbJPEIShhk5F3dc1KU9sp2B9uEFY%2FWarQPPk43TO1vPt4s42UyKBvUx2Zf4DwR%2Ftm10Y3s4TDYuGTCI%2B57aKWanfWVA8eGPOlFqltE0TOGHoGSmZkiQhu9nvavemEWRxwAETOwxNzZqSpMlmGD80DVSssJkUbdMoIcz2%2Fu0Y0VnRfhMBMENh5ZquSmGiSt41j7RBHYYEauyCcfWMGBWhmlcoXMQNIktPWcSCiJWD9%2FoYXvE6w8RfiabR12o%2FmRFO4HarKQYAosEzPeUYk55GethK1GzB1Erk8jenbHC1JJXGPJCPmpbKdXS1Bv7FFHK7AtiUsddosFROwhR53b9jQRtVndGy7ONssR%2Fi7hS2%2FuwqiWdFTv3FYfPxX1vDtw8HanD8uukNXrY5km9chyZb6smVzPaRLHqplIV0xLM8vI41ZzSaGob84QrJTwB6%2Fv4c1bA%2BwgDEoYce1NGKLnSpgrewq%2Fc6WH%2B8l6FySFrmz7eKyxg79zvDrHCqRhUgzNphRkfPi%2BVfrJ7u1P3t7G7Y7CusGpBTJCsGoyb2oyir9w8tMiZoo0BGSy2IENb296Pow5Pqgh3zzRZNUZLhvn4V4lYmQp%2FehaSLivkkFolmx0SddtlAXOLIdS6fElSytCxrcEWPHd3UHc9xttH2%2BQ1Voh3M3G7v0k%2FR9ZlpiMjaSy%2F%2FPzEYA5atlyllDMWt05ZXPS%2FiINUCFG%2FtxrXfxXZ5fImBOn2PvjxhhUaqlqkFSWOLhkoEG2yA%2F3PNxvdvC7Hz6MFdMOLRkhcw0rKJU9zKzql6kZSqG0a7PrD%2BzPVykbcFbV3FwFwVM8I7NiR5ztZ0TeISMycIJA5cwp%2FG3m9fjISgUWSRsvICNKWNh0OiRVOpqg7xDUeK3VQ7lUgt%2Fv4Qxh7sPN0FPxCOHlZqVMD%2FZ1xPFV0qp7fZ%2FwkEH3u9ghS%2FV%2BsmC2OSS6VsVKtRRZtcbsxREYz7ScyDBU8%2FRxN8lfM6Sm7fVRqVVQqpP9wTkZRNSuKMc5xjpJi6OkpPaVQ8aOqfCfHjHwH548oRUmbxhXDXH0UuZAm5Rxpqbz6WjeWZwfrnmDLqg5xGQVQ7swOfEo0GmioXg0YkCD%2FRvP%2B7AhdYamGjqKo%2BhvYh4iWcQ9zG0Zf9hwfTjadrpq461ugArN0HQE3miFOPr17QHeapMB06jgRtfB%2B5ab8eKcWSnjTFXhVRLBR0javNlx8L3dHj5SruMNMhDrroE%2BbeJgMMATGi%2BKESWKHIk7jyd%2FHsybLIGaJ0F%2FQbpnT0ObbIfOzgCO28U2p84oQ2fXxSUMnMdMBF2q1LBMRk%2FL7OKFHQufe%2BE6fv6Jg6hYpSjHaVoyT2jfiznODxCRofBnl3fw1bf2sFYx4uhcicdGt1wekPFVZ2%2BJpx17nF7L3hdJhmEtCHQEeF9yIqlNFvLxhz0OOMKoc2KI%2FQ0%2F9GIMNZf2Csl08k3stsvgcIYZZxoGXt3pYYks3R4ZhudbIYA5t9NBy2MfKhligcSDq5X4fo4kP7Rs4%2FldF4dLFvpOGxe2u%2FjIRh0X2j107AC16CmnVsw80JdPNRkqdl%2FZyLO9Y4sZhVEmYNAd4FMnqgTBqmgpQ0cwlc5CjKxwIiSHpOFfXG%2Fh220XS9UlfP1WH8%2F%2BYAsv7fXwP595UAdYZBDkErRKvRAJohE5qUMSz15t43PfvAVjvaIv18aWIoPe2MOD1TIOGRVc7OzCdn1cMzhpq0fwxyCmq%2BiUVrUfph%2FXDAtulMcGoArTbf2IOWrmdMPczMI5Q%2FH%2BnlUDv3%2FZ0zF9Ltq60g590ef2%2BsQclmaSOhmJZ9eqKT%2F2ezgwc3GAHuchE9FfjJzhFztkt1sKZRL0DcsgRqimoIKYN4KhFie4uThAYXa5f27QQGFP2eh1Ovj5s4fwxMHp%2BRj%2FylnBM19%2BDS91BsT4xA5HDuFLJEF%2FZaeNh5cbOgwup4CbTFfYlOdtVATsNRNHyGj3o6zqMsHCjkF%2Fk3CqEM7%2Fp%2FeXcJCId0%2BW0KC9%2B3ZX4qUWsC6npwWIebGGWix%2B3nE97YVRIkDAwoHWeNkcMq%2Bc6CTM5RCZWQJaVT1OuFiKsGC1ThO81XfoIQO82TJRtWgxiJtPE00%2BGhmEw%2B4fo79rZAzxf7Zdx6WWj7YzwO2%2BwCotYNfzcKIqcXbFjgcnZpF0KjtLRBGlMO1TpNCKyFyfoVtXxEcNhHNMGUEi%2F5yaebSkDQc7JNW2et6Uu8P3SnYZT91%2FGN946TZM0n4b0sclkkSv7ygiaEwkwuetiU4UU%2BGeBSLfNxNeZ%2BriBfbDu5JNQAdNt4bLROL3mQ4%2B89QDaBgjNvrsD27hL%2F%2FqGlaHud77sjP2wQWRVN%2FlvBaGRbQYBiGBCr2%2FWrLGHHVD6awmfQvj7QxJ2pWSiTbnAlBnHKT56lsd3OqSlC1LbLsuTjctusZKjfLhtQqOkJB2OD%2BaDMcbtMFfe3MbLd9BYFm4Rer0ZOI%2BlchvyJysSrMbp7v6XColwmMHqkGgI18eknkpo9%2B2CpOHPO3dDbEnSylvzIOyryihGm2CjRDXeXFGgchMwBgihPu5epr%2B3pOcVSZ1XscdD7Efeh7nN68DEycnGzG8MbmMS8mMEIwuPgttHRFCCFdYWvpVyXhlgu86w8mEz%2B57rGHL%2BQ4hpRYg5%2FxsRpVzzaWWC8uwiZiJqIPQL30kSjNWKm1waSEXE%2FS4URhtxINkGJ6s20S4RIiMXQILz17sYNfroM7hbDega%2BoYZcSG7WSjjBPNKnZcUmXGALdIpT37RpiA45u0mH2Fh5bKGNYXqygEm9z0LPeQ0nkLUgdKXE9iy7Nw2zex6Ru4TpMO3DKpz0hOJ%2FiDEc%2FAZ2IR%2BvUujaerT5SZzIGe61QrZAxVp7GamnHUhBGa%2FolvMTgvPEBJGz9hjZzrufEG5VJIwq5laVtWZKvQ%2FHdpTg6txa1h9qQakcsgcOGRQGk7AW4GfVqDQBdXvKU8nXbrDTiI4qWiwUIN0zpVDk3OdjTr3RWj%2B1ctIxUTEMgqjAXZXS186XoXpbqpzx%2FZovEfqll4eMlOeXnGR2BOjmukd6U08TBJ0he32vDKZV22%2Fq1bDnZLtqYEzht4fNUeRcoSm%2FgQwY7nbnVgV2ySyCTZt3r0NBPrLhEjsdujQ7ihwqSSyaDGZAiEkV%2BfNr4tbTyALsqii03L0DkKts9BgT6aWB7DVhKHZRcHyMg5LGrat24oTroi4kYFHRVl%2FCY8BmoByJEcdhD5TMW0A%2FVEKF34E0tGkU5deKr0gS2e508nFpVSCvQ4Dm5ZWKY5rpt9vGo5WDMspI95IrxssIRzcNzoaw3HZV8Eq7FDUKdD7x9FWOOYbEFkiMXpv%2Fu378Kj1KTAlY6DFdLu%2FSCKFqqwzjDMNRFwieFevbWD%2F%2FjdbaKTip7TgPZ8sOPhg6cqZMpZMSmHOSZGTClCZBiFIp04gfcuCfw%2BQQtTVQl%2F%2BWiZVpg8Twt%2FjHD04xFh8jECMtHxY6umro1j7iqRFNklwmuSJBmQ9LAqPuFsc640ltTppzpfw0e3u4N%2F88Ej%2BPjhKhFkxINBWB28WrF0mNvnYgMd9g7wW3%2F3JPo%2BJ9OHY7RVmOn0L%2F%2FqbTx7IwhzooVKY%2BhFd0wkZe98x5FWzdBF5kbbwmvY8%2Fz5HhZVpHBVye7eDv7dBzbwsycPo01a07ItjkBo%2BDOsvv7Fx4%2FgZ84cgC1kAoGquPiAU3MPVCWSlUUzzpyZ3w7Xlekk6W0b%2F%2BL5TbLHSFPro8OUTlcIQ%2FyhrdYiLbrd7qFnE2xtSKxzpqfZoC29g3%2FyUHMU%2FMtCcyrzFJdQ0gwPbjyzVoVt7upkIq6p5YT2JVrzG6SmTjSqeCAKXcfnY4hwcx5dqZMBSBiNLGlLkBHJVjUR19WApEHdwJnlSgJDRefoCTEG%2BEUKPvO4bFKt0jVxH0GaRq2GRg62FFECLvtb12scvClNRqKsEnp%2BLzyLZGrKy%2ByNVRHziCkB%2BPFW5qp3kSgmEgwZ%2FLnIGZEvmfGyIuh1jJiyWa0i9q0EKhXqXyEi559pzR%2BrwszDtvNG%2FFLaVR%2BKI3F1YMCjPRSRAAj0qQO%2BThazaMyMCipLDdJePnpc%2FmdWcOf6LfzSe0r4kaMr0UoFkT9DTGAxMy%2FBZOjX55Is2zAIa1k4wFUpOsmHDJmeg2PrJZSi7LCYgKIOGVKUyKB807exQeDQ4bRE6qPX38OZpkStZMd6UyzgsecQqK8T4b2MyEpkFggROaZEIl0lSNjAkUXsy%2BiIgwTkHNvNWcTpcLcEd1zC5bucDsq%2BTBXMkM%2Fhu1yT0Cewf9sPvUjcz01HTaUSMRZEYtzdN%2Fg4CS8lkiCzz0pJRghT1%2BuQSnqtylHq17AydM7QwGhtfDJaaU49X0SSmmwgwhccqwggE07IcnioDZ%2FbwvNxPXQJ43e58Fe08OlHSvjsU8dDPJ860EZOjCkzl0NGJzzyXw%2BRgfeJNR9fvLqJbrWsJXCf1Vl%2FgJ88tpa0JBHW1oWvV8oWfvSohS9%2BbxOqSoRsCngc9ul28YknDk5Ai8xq67ENZazl6Kibn4FTxQxzLmODRRCd52Hu070hYLER53YIgpUIzpIecvskabwYhhkTQ1HxWt1XFlgRA7Tcki4tE3TvZsecDqFV2mFlROmeQuTNNSUO8hBu5j2%2BHK61yJDSYkKGC5GuOC%2Fx2hDHC9NIHGKhJo4aUpFzgK9iYm%2BaEmtVA%2B%2B738Qnj6%2FioydWR1cKOSaY0hLIzLc9wswwPvzkM8%2Bcxi%2Fc2IPBFbecWshV1yRh%2F9ZGM2FJj0qRhkzxPz50Av%2F8WA0%2BSXgeiMEHElnr%2BNDh%2BuSZq3O4z1TkGluq1fFrL2%2Fhf3%2F%2FNu5wJgIfAcUKM84hVpGRmjw%2BQGrXFjvvTGVrN99LHQsHq%2BUUblyMnH38%2B7%2B9gX%2F22BqqhtJ%2BXt9bwyn2yyvOqjNypTOrzVNLdXztJx6Gz%2B42ertHsK5mC41%2FNfYVmBr65v8H0sUGQa%2FfebWDZy%2B3qI%2BSdt8F0h8533PPbE5EGKOcYz6et0ISdYVM7JdIW6wStDMS5%2FpNtw9ETA%2B8V5956pjO0LSMsBIlfMwkoBkWPbDAMkzW3rQvhLfLieXjEL0xtSwtMx86zX%2F6BB4uWyqX8fSJcibangjMRBKaF6BhSfzI8Q0sRLVAdpasGuYfCBykJX5%2Be4BvOwPtg94zg2ySTCTtcT6ArXlogL7GbR6O2y6WLRv9KDghxCL5zyIiygpOZV4Q5OIGdofpM%2BlIcj22XssAs2pGfexo8Rxi0lUimO%2FuEXTZ6aFONgEXDg9EQgrOEaThLhnncvmcFdjYI1uJM4I3CBl6agFzUIS55ryep1eq2H8LEvIcc53%2BmpMPHVm6KiwAVcKKpcFQVY4eiPihIkHRYcEOs5erJSPX9Emh4itVDGnyHe0Tgc3ohasx3QCHycAZEKMxwy2pUOdOHOGsRoYRu6dtNjpUlTCnrxNu2G7y4%2FPkRhFFqFEEUU4RCLpCT3m6lCt8XqDTRfVJbBrHBxNJ%2BsNnGGqUgqMrA4URSaqANJoFmZf%2BrhLqXnBQyUJH9lGltTgkmuA6bjsI87BTR%2FylErNUHIhIerTYh96mteFRVFFBlYS8R0a8L0Q2mBPJbJGEES%2FEzIDKrLwYheGpSCou%2B5sWBxxWfJuh4hwRqYiOYBTRDsdlMvGR9WqiczEmoWVUz6fPkdMlT9EuSoHc2oqoezPaLD6ocTz8K3V0i4wMUqdLJDY4eDKQISH5WUwiRguqT9QkqSNpsy0iwird39KniwZjFiATgkvXhIcwDnIYTx8qqU9xCt1t4ViNeA1EfDgkMvy3USGrPvnU0IEiEQddhofNB3F%2FST98XDCgYZSpvQOcM1MLfDTJyOUaQ44exlWAWYfPi7EDeyOYqPS3AQh91kgj6GtGa8vwvD%2BRiDoF0UjFMNyc%2BHIZsfD3YUwmpolhIbGKDqERIlNvJxE7lyX0BdfA%2Bi4OGqOjoETiwJfMMuiZ%2BQUifrROG5%2FoR079HhfTslAiqeUGpr4yGaXSko03lD7rizACZSulpeGsTNAwaECkoE8CkppQbT5Vc%2Bw7EAxNXDaDfdq5PaxbamrETk7kRRpxQW9%2BGoNInKtjJq6TCY%2FRJP7eqFs6%2BMBxYB3qJmjgk3Su%2BJZm2I4RxLpt%2BhnW2YVSDF9CP72pTzZlprGGJ%2Fon%2BmKxZ5KB3yzbqdyL2aGn%2BUtYROIfMcVXNPzkAMcfONvOKpv4XquHF67v6TM2%2BPBApVW0TCW6iLjsJ%2Fkqn%2BdUthWSuj85Cw1JiMO4xGaLpGPD4IUNtPTJlDRi8kTh%2BVx%2Fad%2F2eIDUEyET1dUAZbJK%2FvrOACeqe2j741%2FQkT49L3k8fPxJpNZH30Kg5lyR0d%2FD6zkx51pvQERXguL0ThUVAszhD87em1mfick0muFY2DNExuvXr%2FWIsH20hpEvNXn02eh0FDWWIDHaiSSF5a%2FSJG3x%2FFlfcTzor7ccfRqXOPjHV5VLVNTstrArbK1uTSUyPI%2FvcNNVwKHE7TaXUCW11%2FTJgBPmXfaLhb6qIvTQOKTCJW7YdXg9B41%2BB52FzztecHwzqVGgzp6celXjf079jE6VDgnpbr5nZeo3IozlBAgGRR7ZIRa8zgCG65IBacbHIsz8%2BqIZh9%2FPu0462YrTBThopxwdkBk0qhCn%2F%2BCikr6BLqMP6ehEasZ0cuiEF5jIdkt5%2BVXeU7Ok59jKiTRu4tM62fdpw4j514B6Zxgrp6CUw%2BIlTvQxwjOLLT88MIaPQhCYNtcssT%2BtCFKNbBOVRUDp%2B4ZmtiXCk%2FtNZWpiHmYzKCwoqhe9PuHh40Qqrrzhm3r8%2FTPaFZo4tyiXU9UcuFqM1Vblf9ESI2VD19kIvQacm2Kyf3Bg%2BtrWq7EPQYXHjacs2ywsraZ8licSx5OPVTpZQxfl6uO%2BAn2tO%2FRciHsklWfEtIU2OonrjVD6sUuwa7CBKlFRyImVify9ShUUjJ8wLkbvT5x6KsZoYXRgeHgmtIpKtLBQqD2XocX816ooWltWKoZVRrSfKhVkS5xwM%2F6df1kblfw%2BPOQl1YwiwmFtZvieEa0C12OafmRNWvp0OjsajMpLfssXJHMlqqip4E2q8ER6T6jU3PZ1WqCacu%2BM%2BICKZE1fht6IEtLJ5AtVnOdVreY9P%2FO1ir0csRSMJHtm9XVe31lfpjSvQEjKIhI4%2FcgxbEQuNTU%2Br7kPNlETHqm5%2FObR%2FJUYujFIAMrotVAzZngPiklnZrQMfcEiuzJCqDnHMw%2FhiynXj388%2FrV6WVXnd9PEXayrGCNeNWc%2FasF9zVjTeAmmHp0wBTWoBdZkyjcYi7HP2eLanfdLxif2ME6TncMYmOeE%2FCmcqRb9gnhg9lcEL6p1pjGLmrMPzAErZ5kf04hvGpQQ%2B5jn2LPF2DcCz%2F%2BNB%2FM%2FY%2Bb7Kn9PhVLvqi%2BjaEV7R5sslqBoBUEXrWgFQRetaAVBF61oBUEXrSDoohWtIOiiFa0g6KIVrSDoohWtIOiiFQRdtKIVBF20ohUEXbSiFQRdtKIVBF20gqCLVrSCoItWtIKgi1a0gqCLVrS89n8FGACW8goOn66yRwAAAABJRU5ErkJggg%3D%3D", + "title": "Wired" + }, + { + "url": "https://www.youtube.com/", + "bgColor": "#424242", "type": "organic", - "imageURI": "data:image/jpg;base64,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\n", + "imageURI": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALQAAABWCAYAAABmQby7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyNpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw%2FeHBhY2tldCBiZWdpbj0i77u%2FIiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8%2BIDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkU1Qzk1RUJDQkQ0NjExRTNCQUU4OTBGRUZENTY5MDZDIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkU1Qzk1RUJEQkQ0NjExRTNCQUU4OTBGRUZENTY5MDZDIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RTVDOTVFQkFCRDQ2MTFFM0JBRTg5MEZFRkQ1NjkwNkMiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RTVDOTVFQkJCRDQ2MTFFM0JBRTg5MEZFRkQ1NjkwNkMiLz4gPC9yZGY6RGVzY3JpcHRpb24%2BIDwvcmRmOlJERj4gPC94OnhtcG1ldGE%2BIDw%2FeHBhY2tldCBlbmQ9InIiPz5Sq5EUAAAMYElEQVR42uxdDXBdRRXevKRN0iat%2FUspP9aBYrEWWgOK2NJaGH%2FAQSr%2BoRWhDFMcGUdERZ3xvzgqQkdwBi1ORWQcZgQEq6a10k5DUShaOwXTSouC0ExD29AkTWmaJnnu13fe8Lju2bt773257%2Bd8M2eSd%2Ffn3rv3u2fPnj27tyabzSqBoFKQkSYQCKEFAiG0QCCEFgi8UCdNMKpoIJmgpVFLc8HvWi1voL%2FjtEzUMqhlMuU9RvmRZ1jLkJYmOlaIGio7RstIxOusob89dJ5C4DoOkTIEf45QPvx%2FXMsrVP4YHS%2Bs57CWo1QG0kf5jgihSxdv1XKOlvlaZmiZqmUKkXYCkbCRCFfNwEv5qpYBekH6tfRq6dJyUMszWnZpedzrTRS3XSIAUZdr%2BYSW86U5EsW%2FtTyk5W76XwhdZFyv5dtaTpKmKLpG%2F7GWLwmhizegvl%2FLx6QpRhXbtXxYy%2FNC6GTJDNvuAmmKVABbe4GWDiF0MmjTcok0Q6rYr%2BUMGky%2BTtMI%2FLBcyFwSaNFyj2joeBir5YDKeTUEpYF3aXlCNHQ0rBAylxy%2BKRo6OuDoP0uaoeRwspZ9oqH9cLaQuWTx0fw%2FmPq%2BUeXm%2FjmN9BuHCjE79n4mrV7LT%2FJvUBnjQ5Y0uJEwXduQ4PmG6fmcVETF85LKxVMEAT6cWkbPZqmWO%2FMmBxzV8y2ZESwTFuSyXsv7LOmIZXilzAndrmURk3azlh8lTOghItYeLZOKdE%2BXalnHEOThMno2iAeZjpcTb%2F53QjKfF5IOwrda0tdUAJmbQtrhcEHDJiUgdLcWGeSEA4rkHXkb%2Bk%2FKHr63JKSyc7VMs6SvrYAGm6tyIZ0cGov4ItUU8b7qPY%2BXMlrzhEZ86gZLxotCKnq3JQ0vyqMVQGgZDJbJM8oPNn5rybiQNEUUwkP7v1oBjXWq8KXkMaOQ0OvU%2F69MyANd7QJL2kLLSX5XIY01PST95SKdt5%2B8HYJwnAjfza9YweDjMYu2XULaNghEm41nysAz0lZJjWXBxZaeaIBMuhFL2WbLYKdBuOoEjOMydYHB20WeZoXNfsYLcrBKNPS1JLZB4wCT9qDKrRMUxAPacGrG0TyAJ6OF0dwcHq6gxpocoyyCmbIpmCvVBlgKkwoJ%2FYKWbUxm5FtseMi29XOPVEhDYTHrxBjlR2KmCzwUT8ZjEHdx4Pcixa8ax%2BzjixXSSJPEJCgfs6POoFW%2FaxkYutrPYd6NDNnlb6MBV5Y01W7qJbZ73MSFyjzpAZu13XC8VfETQVsMg7smZXdbVgv2Uftg5TVcZPB8nRmjvn9peVblZpEx2zyF%2BHByjDonBgmNvRCe0zLLkPnNWk7X8h8H%2B9lmbnxByw0qt3xGWYh1h8otXw%2FD7xmTYECZZ%2FDuVLwb8i3U0MEBXRroopfVZJIgqP0%2Bw%2FH3KvNSfxDQZ3%2BLQpsfgVff0PIL9foZZSglBLbd7nlf2I4AK02eNKSNI0X5GS2XJaGh89r1ixYtDULPVLnNVExA%2Bg5mpL9e8QE%2BQa0LWU03Z0M3Q2jOw9JrqWuYGT2ngWOkXEzgFhlsU%2Ba4mb2e585Ptz%2Bl5QotnYztv4p6tJ861Il7WUZ1ckBdbSTL6SXyInTG01zIu%2B8WW%2FJwsRvtjmQuBPa8%2BFVInuGEjivGGzE%2BJULXKj5sdApzvIU5Pt3z3JhG3kOD%2Fs6QvD%2FTstWBzOeGkDmIeyLwpdnUYOia9jMFFhXYoT728w%2B0vD3ig71Ky8dTtB2bq9BeXh%2BitIJYFeLFgSnUF%2BE6tpBSc0V9htFS3AwfYhpma5lj6f63BI5h0PeVmA18R4oPt7EKCb1V%2BS3I2KT40ImVitkUxsPm%2Fodj3kkZT7Mhr23nMmlthi79qpCL%2BIuWe7X805IHXWZaWwdUczzyPJVbhLpS2b1aB5nnh0jOWy3lllHdK5V9TuP7rrY%2F50f%2BM3kJTHEESz29G5da8n9Vyw8DdtM1TF4sgVqXwkOdXIVEbiCSFe4j93UidTtTBi64%2BQbThYtx%2BbmW6wL1w%2BmwmVGUCNQKc58OcxoahTd6NoIprrqB3nITOgJkBq612FqtKT3catxy%2BAPKvCnijZYyexlHgAmnBMhcqOA478ffHK57QiaCt4LDRhXYlknl3HuTLHaXqXt%2FymK%2FpxF5Vo1T09zqnNMtZboMx55m8s5mjs%2B01N%2FhcN3jbYT2Df00eTdsYZdHPI9PU%2F7uJ0E0DEborQYNyqnT87y28cpLDuWHMyFdyFaPC1nL2GIcxng2WkbJrvdpY8gjL8Zghz17PdscwWGXk4bt9%2BC64gSuuv2eFyjdf2Wh2%2FDsk3z%2BvUkQ%2Bg%2BOJ1srz7PqMWJwLPQwebmee0bc3iFsBI9gJQS7nJGQJhdULmoMZijXo%2BY%2FCpQtsJuhXHfHUL5OhM6T9SZLOkayz8nzFBgIzu0p8nfFB7fFggvrw1aePCDPTlAqcCE0pqYPWNI3STMKSqVXcCE07KABS%2FpxaUfBKGAwKULDzq61pI%2Bt8IaUr%2B2WBlxctj3ysMLRJ02QOLCT6xrPMi4rh44KoYXQaQDfPy%2BGl6NePkkhJkcaGChSvUeE0A52mTRB2aC32NqnpgIa6ajwJPIgbsiXkFpuY8phldSykPLHhNDh6BduOhO4EIjXaGbGIFyYKLZguIVJe48DoQ%2BVm8mRxvXKoNANwaVqWFzMbQHBBSfVK%2F5zGHNclE9mlN%2FaQnDd0XDE%2BoqlcRGHWy6TR8WeE7DFozcaBtN1nj13v6WtXUJRe4pNaNv%2B0LWex%2FtUMl%2FTmhvhBehNgZzDEV7g7oTOXRthPHHcQP5TmLwHLD0wd88un7brLjahsS0Yt6TqAuY4txi209PjYOoBsNL47AgmRxpmxzhLl23SxNcp%2FyVPvmOfnZYyEzzMBISOmlaDd1nqb3EZVBab0CDCLiYNGyZ%2BMHAMS9m5IO8OT23SEugiv6fMK43DkFXpuO4aFb9YNbgcCZsprknw3FhP%2BmvD8bssZUzrR7ndlxCX8TXD8W%2FF6FnRo43K1Df2ZuA%2BWolY61X0xuLmrwlpZK5xTMAIGytu%2FqhyGw4ujnEPB1Ig9BiLDfokeQOwS%2Bwvlfn7N3FwSMunVG4DoCvpxcJ5nrCUMX0pbCndh8kuxi6wWLZ3ucptTIn6NzN1Yy%2B%2FC8Ps5xPPKZvNhkmdls4sjwUh5Wdm42NQSxNT%2F6ZscpjFnOO%2BGHV2aam3tM9OS9l5Ds%2FHRU5j6l%2BaUP2Q3cw5bkqg7lsc2nkP8o6GG%2By%2FKvcd7Dj4nMU7sdujHvQEj0c4%2Fz6VDmZ75P20lncmdN45jjZrHliix21%2Bjp5kWoxrgQl6s0O%2B%2FflR5WgAF9QesSw29l5tSXddoAuPy5KQblNZBqRp4ArHfFeSeZCU2w67zD7mkf%2FzIWOBR1W0LShwPxscy3b5ELo5gosnCOwt7ftlrLtJ84QNYMK0NNY8nk9uLdu2vpkiEDpLNiIHm2vuIyp8gfIKLffT%2F886DiLz4Pad2069w19V%2BDcaF1APasM5pEhmebTbm6g3dXWzvuBD6F712j4LQXGdrx8hjXODCl9UC9MAe0K77g2MnUn3MGnQ7vPUa5%2FS6LPcC0euHTFdYOPoxTdJJkRZbFDmUMszaSC1OjB4Mp2D%2B4pXE5N%2FfIFrdQe9NGOZF851CR42PH%2BaPDK2l%2FQ0ldvj7hnlt6f4id1Pa2BIO9oxGYsHYNDzIaOuy6jBzqLfx%2Bmi0NVtjEAcdEtXq9yHZxropVlrcPdNUfzU68uWF%2FR50hq%2BGAmxwacrtxDVB6h9MkTwyw3PhLv%2BWkbToscyhXJi%2Bnlq4NiL9Fw6ifALVfRN7KE8tpEcot%2BTSfGcp6LtYQi7f5croQU5v%2BwnpRlKEntJsyuJh3bHBmmCksXGsEGQwOxNGZJmKEk8KIT2B2y9R6QZSg4YB7QJoaPhdmmCksNdqsA7JYNCf0T53qKgOIB3DV6rftHQ0bFcmqBksEIFQiKE0P7ABM3V0gypA%2BGy9wYPCqGjAZ9rvl6aIVUyG2PbhdDRgTgTxFh3SFOMGjDg%2B7KyLNQQQscDpumxpOuzKhd7ICgeHqK2vs2WSbwcyQIa%2BxJq%2BFYagcuXu6IBAXH42OZmlYvS3OlSSAhdPCAOGIHtbyRpIYJDEOU2kciOXTURPIQQ3XrqNZE2Qr%2BbyvDe89sRQPILjPF3kIg6RH9xrIfyY0U%2FFlQjwArfJOxUEVbbC6EFFQWxoQVCaIFACC0QCKEFAiG0oIrxPwEGAGE0AqvkkOuPAAAAAElFTkSuQmCC", "title": "YouTube" }, { - "url": "https://www.mozilla.org/#http://www.wired.com/", - "bgColor": "#000000", - "type": "sponsored", - "imageURI": "data:image/jpg;base64,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\n", - "title": "WIRED" - }, - { - "url": "https://www.mozilla.org/#https://www.wikipedia.org/", + "url": "https://www.wikipedia.org/", "bgColor": "#ffffff", - "type": "affiliate", - "imageURI": "data:image/jpg;base64,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\n", + "type": "organic", + "imageURI": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALQAAABWCAYAAABmQby7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw%2FeHBhY2tldCBiZWdpbj0i77u%2FIiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8%2BIDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDIxIDc5LjE1NDkxMSwgMjAxMy8xMC8yOS0xMTo0NzoxNiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo2NzQ5MDlmMi02YjdkLTQwNmQtYTMyZS1jOGU5ZjhlNDUwZWEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RjE4NDcxNDBCOTJCMTFFMzlCRTNERjhERERERkE2MEQiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RjE4NDcxM0ZCOTJCMTFFMzlCRTNERjhERERERkE2MEQiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6Njc0OTA5ZjItNmI3ZC00MDZkLWEzMmUtYzhlOWY4ZTQ1MGVhIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjY3NDkwOWYyLTZiN2QtNDA2ZC1hMzJlLWM4ZTlmOGU0NTBlYSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI%2FPshSBe8AAD%2FgSURBVHja7H0JfFTV%2BfZ7J%2Fu%2BELKQhCQEEiDsO4hsKqi4gzugtdYqalutrftWy7%2FuFarV1rrhUi1VtIqKoqLsIDskISvZF0jIvs1yv%2Fd5zz0zE0Db%2Fr9fvn7YOfzmRzK5c%2BfO3Oe853mfdzmGaZrkG77xQxn%2Bp9oFJycn%2F9uv6enpocDAQDrjjDPp6NEjtGHDRoqKiiSbYaOFl156Znt728C1a9e%2BfOONN03btWun%2F6pVq74JDw%2Bn75rsLpeLbDYb9e%2Ffn7q6umjo0KEUEhJCzc3NfN4ostvt5HA4KCEhgRobj1FnZydt3ryJUlJSadjwYXQoP59iY2MpKWmAvEd5eRmFhIZSZEQEtbe3U3d3D3X3dFME%2F37s2DEaMCCZWltb5ZqPNTaSwde9d%2B8ecjqdNHfuvFmjRo%2BZlp6RsYBfW%2FLnF%2F54mctlmjExsfyaFkpJTaWmpibKyz1IofweeuC1%2BB0fsbu7Wz7Pdw18Zz5A%2F386DMOgjo52vqEOWrbsf%2F7nvPPOvxvgW7Bg4dUJiUlzMgYPpv37D6aVlR0uj4iMPPH1AIPLSX5%2B%2FgICgPufvR8AjuPa2trkfzz3r1wnjj169Cj%2Fb1JwcDCFhYWnJfJF1tXV1TIgD887%2B5yFP%2F3pTav69etHAQEB5B%2FgPy4pMXHfU08%2BMaWsrLS9X7%2B4f%2Bm9fBb6VP2w%2Fn7UwpYOQLn99tsX33bbL%2B7Oyy%2Bgfv1iKTs7e843mzZSB1vTrq5OBz8oIDDghHOY%2FFq8Pja230mtGgCEh7%2B%2Fv6wMZYcPUzBb78CgoHC2uK6WlpYOvN7Pz8%2By9EYvALe0NDOIG6m1rZVSeDUaPXr0xPHjJ140YsSIuXFxcROio2MAXCq%2F%2Bsqk0LCwsMTERLHWEeERFBYeRpmDM0fce%2F%2BDe5Y%2F8%2FQlW7ds3o9j9TX9VxisU41D%2F28oB5ZXB1vJTLa%2BAwQkY%2B46Y9bs302YNEmWZRvf7OLSUmpmC7rimd%2FfsObDD18ECMn7uzHUr6aAOVboACw7KMLw4cOFcmBpj4mJERoBa8zWMmbS5Cm%2FHDly5Pyw8PC0wMAgV35%2B3v5f3n7bgqCgoMbJk6fw%2B7fR3j27yOTzJzO1YNAOHzRo0NjIqOjsrKysM8eMGTs1klcK0JC29jahOPHx8fTtjh07%2Fva3d%2B6ZNu20nzKtuIQnkC05OYU6%2BJjQsHCeGC308ZqPHuVJXPTll1%2B%2BwZSjm8%2FtXlF8lOOUtcr%2BVF1dzct1GF1wwQUXX3rZ5Q8W5OePZhTT0YajlJ9%2FSJZzJ5m0e%2BfObd%2BsX%2F8iuDGe857smjrgfwABgPAeAAT%2BVlFRKbyXeTldccWVLyxdetNlbW0dAkS8jleDWUwdwngiNdbUVPM5HTRu%2FPhJI0eNmj9u7Ph5POkmh4XJcTwpOqmhsYFqa2v5%2FdTKYPK%2FivIKGjFy1MSMjEGfHz5cWpbAVhq8uuDQIYIhHpiWJu9149Kb72plYI8dN%2BGuB%2B6%2FZ3Z1VVWlBjUeoF1%2BfgE%2ByvGfHP%2FOimIwyABmOHivvvraqgULLln4zTcbxHqeNW8evff%2B%2B1RUXGwP8PfbHRUVHfiH5c9cBOcLk6CFHTz3e1oWDVYZ1hLAPv46ADi2ujIRGhmEAPX27duTxo4dK84fXt%2Fc3CRW%2FbfLlr1QUly8KSQkND1jUMbUUaNGjQCFAehxbfV1dVRXV0PR0bHU3dXN%2FDiQz2vIax0OBjVz6saGBplE6ekZaficb7%2F5htCb1IED6Uh9PQ0dppzPQbwqZfIseezxp3bec9evRjH%2FruPVgvz4M4aGhovD6gP0f9ji%2FuvOX4eAYOXK118ckTNi4QP33U%2BDhwyhK668knZ8%2B60stWfMnu1asXz5nWvXfrq%2BiUGIccz6%2F%2FjzwcoDyN81qcCZIyLCCU5aVVUVlZaWfMUgPR1Ax7XgHHA0zz3n3HP5l3NxHkyOpqZjVFlZIUB18XNMtoUKwcqHBIeQ3WHnSdJIgQxs%2FA28u6Ojk4918ftF0rt%2F%2FxsD1I%2BSU1Lk2kpLSujjj%2F7BzwXQ%2BRdeTNlDhwLg8fPOPvf6t958Y1lCfIKoKgHs2BYWFfoA%2FZ8ckSdRHk6mKuARzEBauXLl7y6%2B%2BKLr16z5WKwnO1liLeMYdOm8NPMrgqZNn%2F6Pb7%2FdkchUowPg86wGRIHsGMJyHj1yRJQE%2FR56wLnDe9XV1fPxLraY6cMnTZo865Zbbp00Y8bMmeC7zezoBbBzdvRoA%2FkxZ05KShKHE9dzrAmyXhefx8Y8mvmtS71vRHgknFNyMC3A%2F6AG%2FoHBwo2x4gQHBwmvBnUCf%2F%2Fogw%2Fovocepg%2FfX00ZmZkyuQ6XloD0y0oFqz9l6rTFDP5lzONlYiclJrklSB%2Bg%2F0OjsrLye%2F%2BOGxQWGka1dbXES3n84sWL78Lzh9npc%2FLfckaMoIaGRhowYIDo0Ju3bQMow2NjYm1tba1sBQPcXqDBYOlh0LS2tMozsPYAMwCuQQDtmQGVtWzZL%2B9nq8dvOXrUgKRE%2BRscvgZQAwb9wNQUoRO%2FvO02WnLNNWJxy8vK6KpFi4TKhLL172IrDoDbbP4yOYJDgoVjhzO4oaP38MSBdYYjGhQULNeCVeVsNvir3v4rvfLSi3Tfgw%2FTQ%2FfeQ%2FMvuJDa2MrjvH58rVh1hgwZkv2rX9%2F90UMP3XceKEtySjL90MYpB2hYqH%2FGsWGxMH58%2FfX34f9O5qEAYR07V6AZsIawsVXVVcKPcw8efGnfvr1t0dHRRMdZX4Chu7tLwAPwwjrGRMeIBcRzPeE9FB0VFXfxxRcvEhC3tVN9%2FRFZBeRaeGmHY7Zly1ahHQBvcXExQW578%2FXXaQxz7CuvupIee%2FRxgnN3xplnSPDEZWncuAaoMKAwDoddnD84c8y%2FZVI5BOQ2evCR39KiKy6jKdOm0fkXX0TvvPkWzZw9W46FF%2BDP9KKyooJmzTlj%2Fg3VVY%2B98%2FZbd1ZXVUvABp%2F7n%2BnpPkD30cAy%2FV0DNx9WEKB9%2B%2B23b7388stvra6uEWAtWLhQ%2Fg4rqyy5SUeOHqUjR%2Brpyy%2FWPYLXIDonCAdtYcBCKQhmAOJvOAdej5%2FTmKqAmuBc%2Fdr68SRr%2Fbaysqo5ISEhqpNBCzBjUgngGXBxcf3olqU30eDBQ%2BilV16BJi0gXP3ee3IMJsHna9fST5cudaslBl8Ifvbn9wSYW5m24HpgdeMTEuRacBy48xGmQ8OG59ADDz9Cj%2F72Ebr5579g4M6hkaPHUGy%2FWFkNQDtsNj8GdTnNO%2FucX%2FNq5YyMCPf729tv3wkVJZYp2A8B1D%2BI0DdurFIRmgVoL%2FzpT6sXLlhw0ZEjR8UqhoeHUUxMvAAEFh7HlLO1amcPf9U779yXn5dXDn7czsACcIMC2Ynr7BBQYqnXTiBeV19fLz9nZGSIQgBQM63oKSs7vCslJXk2KEJ0dKS8F0AHDo7zLF5yDa1%2B912lifNrCgoKhCyPGDWKPv3kUwZ5oJxT0x2Jt%2FADE8LhtItjB%2BsMB9HB7yHaMXg3rDgDtYqp2Flz5wnoy8vL6TymHLDozU3NMikwSR0OpyUpdiAN4O6hQ7MpOiZ20N13%2FupSPP99xuJUGaecN6CjXt4PAA6ABHiXLl26GGDGso%2BbBMUhLCycmvjGAox2e4%2BAqpG5Ki%2F9Xcytlw0ePJiGDh1G2dlDaeSo0WKtNIiP16LxPuDxoBygHwCQ0Jm6ujwck5iYIGoIg9T5pxf%2BVISVAMeed%2F75dNsdd4i1DQsNobWffELpgwZRAjuNAPKFF11Er%2FzlRQZViEhqbFKFKsCZDAsNF94MC2rvtsv1KwtNAnLwaige0NUnT51Gl191lTiSbTxBbWKZFU0BL%2B8XGysTLoyve9u27ewcZi88d%2F55lyMdQB97%2FMMH6D4cOiigH7hJsJRYVpfefPOZt912%2B4uwQMoSBwsAQUNwg3Fz1LLdJg7i%2Fn37Pi0uKZafMRlwHtzYltaWE9QMgAhqBmRDPErZycRSDbDivb788stNivYwlXj3vaN33XVX9G233zbkuWeffQZWHsCeNHmySGuHy8qFJ%2F%2FouuvEDKelDRS%2BG8NgKy87LFZdvbfi%2BtEx0dTR3iEWN8ArlG3g74a6TnD9AP8AOW9Z6WFqaW6R78YmIXbFoeP7xwndsffYqaa2Tj5TR3srXX7FVSsHDEgOPnasUVaAHp703g8f5ejDAXAez5sRPGG%2BPP%2FJJ574CLSjpqZG6AEeWpGIjIwQHVeOr63hG1pLmzZu%2BHUbO0VB%2FDyWbxwHSw4nUEf%2FAHRMFjhODGQ%2Ffn8nrDbOC%2B6qOfuqVaveSk5OGeVyOmO%2F%2BGLdKqfLGX3ZZZddV1hYMDwvL8%2FkFcDACgH6UcvXd%2Bnll4viAjkQ7xMbE0O3%2FPzn1HSsSTl6yO2AY8igw4RAFh%2BuNYodUhs%2FJ0lO4CUug%2Fx50uI1mFiYbOHhocKZoc64bMqxFAvN%2F3C%2BLr7eIKY4yG3B52PuH3j6zJl3vPPXt34bys6mSaduSvEpl8uRk5PT63d46bA6%2F%2FjgH%2BXDhw9LramptRwrtRz3Z6vU1dUt%2FBrWGhauoKiYPl%2B3rqEgL%2F%2Fy%2Brra2i%2B%2B%2FOIgUjsBBvDuhoYj3u8XnJiYuJTP%2BSO2hNFFRUXLmXI8CUsPUAFsADcDPjgzM3Mig%2BcqPn5GSkrKcFwb82pasuQaV2xsPxvAj%2B9bgjThKt8C14UJhNugrT%2BsqUQj%2BZ%2BoJbCwDD7IjdClkRra1dlFhh%2BstCEpqjgH6AT0bejT4MudnSrkHsQ0BkDuYacXyU3N%2FL54XoW%2F1eRgJ9j19FNPJJQUFx9Froo3qLXf4LPQfTCGDBnSyzofOlRA11577Y0AM3iz5nz%2BvPzi7888%2FXuaMHEiTZgwgdotBSI5KYkumD8%2FJOOWW9YVFhXRjTfeOD8vN%2FdjaNNYpvWYPXv2rOuuu%2B71Xbt2pYCPI6jDYH1i9erVT8Ky8e%2BD2LrNTE1NPZ%2BfP4MnTOS4ceNozJgxoh%2F3dHe7JkycYDAvtsHKA6w6Ew9WGtQH2XAqmGPIJEQEENcdypYc58CkJMPFQHYKJcGq0NHRxpY%2BTH4G5QkJCeaJmywqxtGGBqEUhhVVxbkQcXQ5XaKIaCsdzHQMabDg5hJo6h9vmzlr9vKiosKrT5Zl6AN0H0cKtS6M5PpLL730UVgkWBbkD8N6gmIUF5fQe%2B%2B%2BKxl2CFIoQLtk2c8aMiQUNxh68CULF770u2W%2FTW5oPOqCFcPgY%2FwY6F9BjWCHT5L58To%2BvyM5Ofl9dggz2OEchdeDjujlftGixa7w8DDtm9ha2SojCw%2Brg5b%2BQCtAU%2FrH9%2BPrChWwQfkAIAMCWkWZ0PIdHD7DFiA%2BIl4Dp%2FHokToKDesSxw5UJJSdTARx2hicOD9WIZXMxJad6ZRhTXIcBy4uuSku9X74TFg5kGcyY%2Basq%2Fbv23tnaWlJZb%2B4OFkZfIDu45Gbm6tDKFRSUkJ33XXP%2FexURWE53rxpk0TNYP0AQmi7i5YsEYUBgNMqBUYXL9HB%2FK%2Bmugbcuj%2F%2Fze9Y4zEXstEAUtzzJ5988ipeEV5JSkoKgiXEjWeK4T9t2rQLQTW0FqylOD7O5PPb4JQCfLhGTSUAZkl64utwmU5iqy7HIOwt%2BSESggYtsIt6oq7ToE52Zlta1QQA%2BCIiwtiip7Lz10ARkeHMtZkmNRwV4MPSw%2FqahopyApCw1EhugtPY3qZWqPDwCFrx1BOijNx6%2Bx1i5eEQR%2FHEnDL1tL9s3brl7NaWNvdE8AG6DwcsMG40EuETE5NCFi9e%2FCCe37J5M%2F35T38SvgcHqZtvUgMf%2B7Nf%2FNzKgOuQ%2FAdYcgARkTaEpY81tzD4azd3dnTYBw4cKMDBIysrC6Fzk62vmZ%2BfLxYaYIBF1Mn5SmUx3QEJvM5u7zH9%2FPwNJSeqwKPmze4v3aICWp2Q80Aiw3mdqrIFVMBhRRsB7tCwUArhz4FwPapl7BGRVFZWLtcF%2BgBujUlhOQ%2FCreFYmjbDUmiUWhHE50CIHxy6qLCAdmzdSlNOO010bITDR48ZM2%2FU6DHjDu7fvyuSP6sP0H08EDoGoMFpL7jgwiVJSYl%2BcIKQYRbCgN27ew9Nn3G6WJ1x48eJDg1HD1YPucV5eYdEFYjr16%2BNl%2BjwvPy8yg9Wrz4fnJiX%2BVimMGPYes4ZP378FQy4zP3794uurEunVAqn48QvkkHK5zAB6ujoUAOAMayiAK2Vu5izggqBHkDyQ2YeJhuOhXTokhTVcBUwYesZisCMfyD5M6fF54FqIaFsQ8mPoaFhkpUXF9efQeqwpDxDrLK8N3l%2BR%2FDF9CNxNgHUrGHDKHNIFrUw1eiwqIpo6%2Fz9jh07dnFxUdEuXazgA3QfB1Z06dLIkSPm4vsGl77siivo1p%2F%2FjC2Vi55dvkKW%2B5mzZkpJFbgjQLP%2FQC7t3r27%2Fst1n78eGhY2NiMjY07uwQP2zs725XPnzh3HdCODHcNwAPjAgQOyGqjATNhJQew9QEGg48Lq4zU64mcYplfhiwK2rnbB8YGBQcz9YyQIYqoPSBFWgS5WEwE7TzZxgv2VVQdVADCjo6J5kh51S5N4XuvSYqWtFQJ%2FkwnG%2F6MSB99d9tBh9NknH0shL%2FKnI63iXidfV3Jy6qwg%2FjxYJf7VdF1fYOX%2FQoeGzpyenh5x2mnT54GT4oYBUM3NrRJAmTBxAp151ly%2BWYnULTfbj%2FIPHaLy8gqqqigPdti7r2BYzEYQg3lvxuzZc67Jzh46kp3KcKgRZWVlAgqoHt75H99rGfjG88SylZaWmjrCqKVDFQIPFI6LawFfhaMIvowgCkLZ4gTaVCAF74e%2FSZkUU42oyEh37SEOAF2CjoxwOY7FZJBgjHck1VJNBNj8PwC7f%2B8eqq2uEj0eyg%2Bc5U%2FWfKT4OVt8vA7f7%2BAhQ8ZkDR06CT%2F7%2BQDd94AG6BiEl6Snp4Xhd%2B2YgVd38M2dfvp0ysrOEssNIEGPra6uRSUJr%2BSuyNFjxiYPGpRp8KQQawqLjygcgAdrDHqi6cW%2FtXowWAsLJWHehAMHrqvrDmHta2trJBkKlAPvCf4L2tBtZe4ZlhSJpb5%2FfH%2Fh%2FD0MtuLiIivE7ScqR3VVFe3bt4%2BQ14y%2Fw%2BL3qiY3vMBMisuD2uC4N1e%2BJrWJ0MGRxDR95kwqLysVmVN%2Fj5gwo0ePuR4TUGcu%2BihHHw04bgAdc9wF4M6SUMN3DEEMSG6Sp8GAhymT9E%2FJwGsXVaOdwd9j75alW9cESnomW0Yd1v5XM85wHDgnHppXg8%2Fu3LmTgVuHk%2FghwcmtmYskFyKWFCF5BEpw%2Faq0K1KiexiFhcUSVm%2BV4Ec3vfryS3TRJZcIRcDEgPZcU1tNKIhFqDvISigSVcXtEFpgtrgOnkZVzGmnzyDmxnT3L2%2BnH%2F%2F0Rp40CXSU6cbw4SPcVEX5Au1svVMuDI8IvwHRSR%2Bg%2B3DA4x85cmTo5MmTz4TkpTLommWJT00dKFlyCEjAMotbhBROBrqADyFts3fCkU7a%2F2e8Ha8BVcCKoIIZISYsKTgoLDpPMhPVKfyz0dTcZED6gx4MyQwgsVlqA65ZihDCImViIr21iEGWn5tHqQNTZYI%2B%2BMD9dPY559LlV15JnzLPHZ4zwp2Q1NLazFQohSd2mnxu8GynQ1EWcTw97F3Jd14UBPx%2B0TXXyu%2FPrXiGKpmCISFr9Lhx1NXZ6c5G9ONrjYmOimcenVNcWXzQB%2Bg%2BHODPkydPmT94cGYIbpAkvEsivE1uOlI%2Fe6i7t1QmjqSJyJhh2IxeYNa0AhPlZNYZYATf5RXAhM6MQA6ilVgpkpISKSoqxkCkzlBvJqkE%2BXl5xJ6lqvvjc%2Bp8ahyCY6G6fPiPf9AutubTTz%2BdQZVFr77yCh0%2BXEqFJcV0yYKFNO2000TSQ9ooqsCxwgBwsO6YlaAaLpfOCFROKSaajpS6XHbLUlvwtqkcb2TkXbV4CU2YNJm2bd1CTL%2FEUWxpapZzhvHPQcFB8j4TJ025%2BtixY%2Ff4AN3HHJpBNUsBEok7fm6eCPA5rFYDEmEzVAZacFCI%2B7WQy2A1LRCbylGzmV1dXQZbYAPgQa4EJoeORkKLvu6661w5OTkGc25Dw8RDPewiySE6p9JYO6mutk6S6%2FE3Jd8ZFqhtAlQk2i%2F%2FwwqJbi68dCF9%2FNmnNGfmLFp48QJaesvN7JgNpt07dys1Izpazuk0nVbLsSaVa2GqBxrMQH%2FHhEhhKgLpzW5NVA1qKB6QA2HNweVRHXPV4muE2iBIAx0bWX2YGJVV1RTqcFFaevo8PpcP0H3LoVNp0KCMSaqUyt%2BygF2k2gB0yo0HSJGnYLpUj7iOzna%2ByeEMkixzaHaWCf4JkCCMDurAS7nJAEa%2BhWvr1m1UVFxkCw4KMgBq5q3mI4884kpJSfHD%2B%2Bu%2BddoyEvXOm1ZZbAHUiJ50yQME0ApWqlocPDiufxzdc9997LgOpcsuu5TOmT%2BfJk6cQGs%2F%2F5yGZWWL9Z47by4DWCU%2F4SGARoUMf06sTHigyBXAxXUWFRUKr4YqIQlJbGERZSRLh1YxQ8Mt6eH7a26uEBoFTRvnUQ50p1hq1FbGxMaO5OPDYQt8gO6jwTc2JCMjYzgcKnBjKxwt3FM5aHYBs0TynC65lfh%2FwrixbP0uBA%2FtZWGPH%2FEJCT1PPP44OWw2P4ADFnH79u0GFAmoDLDE3pzbA2qlOQPwMWzp4Lyp5CJtSE23Ewpw4lphmVFLeO2iRfQJgxmT9bEnnqAfLVlMs2bPlmoWyG3%2BXoW7sMzo81FVVSmpn%2FicCDKhLAsyI3JHWq0qcwVe022i9VVDtoMT7eTvys7fYVNPF0VGRIvsGR4WIgUI6AcSFRkVwO81mV%2FyhU%2B266MxadKkiWlp6aG4V5C1VPOXKAntgkfDUUMXzxi2wMjLANeFJQ5Q4WaDwWTASiLfQif1Q03A2LV7j%2Bv1lSttbJ38AqxcDbbkxmOPPWYwqJ0AidvKkVtUIJ0ph%2F8F0Fb6JZw2rCLainteZ4jlhnz3qzt%2FJU7f9KlT5W9os%2FDQI4%2FQL269lZ589DFJvur9uh4JvKAVAiYznLj%2Bcf0pc1CmSl6y2jCoyvAgK1jjwTUCOagUtzOIUZmTwFa%2BkycYpDwEZrR1R6I%2FJjM72hN8OnQfjuzs7GGQvLDso2q5paVVilCFZjgRQXNaYWbTLa3heYSM8bNy%2FDwAxMDEwFixfLm5bt06fyTp4BzdogEXwwk0MzMzbd6g1FE%2F1YEoRJZtOHxwyhC%2BBndHzoRSH3oVkwvA8TwmEzTot1e9g8pxOmvOGVLede9999KyRx%2Blla%2B%2BIuqDv59nIbVZbRTQgCaHJ8KoUWMoPj5BwtcSXbQqwk3Tw7GVRm4TKgSZDnIe6AkUF3yP0LZB14KkssZl6dgqMYq%2F1yE%2BDt2Hg52oNIAhICBINNg%2Fv%2FACDR%2BRQ2effbY4WNCcpXTJC0FSc2d1JTJ00MFtYVUAhR1Kc%2FyE8eaOHdtd5WVlchBAevrp081FixZjOTdgfd3hOnJZqZftVMKgR2YbUlSxWlRVVomFhAynnEtP30ftIALUWFGQSpqQEE9r160Tzj0kK4vOOfdsWnLNErdWrrouea0GlgTYY7XpVdUrNtSJqesIVvwZXFgcYz9DJnV9fR0DNID6JyRKZQ4ilMjH1nnaKuHfJZMU1lpUj7CwVB%2Bg%2B3D07x%2BfrkqgOoVaTJ02jTZu2CARwmt%2F9CPh09pp6w1cm7XyW2uvF40G1%2BVzGrfecovftKlT0fIWN9KATJeamioHazCriWLKsgwJEVlqsOgMK1kBmpuOCQAzBmWIzgxr6pkExyf6qOBPbW0dJQ1Ioo%2FXfCx8GJYbKw%2FyUxAkkl4kVtCD%2FVcFZAvshsfou0PfNh1CdyFoE6X6kXR1SEVLIIO9ublF6dr%2BqsQLzWgAdnxGFO02I5hiktClaEg%2BPkD3aWAlCTcNwQz0tSgsLKBZs2bR119%2FLfnRI0eNlJIkVWiqEnOcLqf1MyyV6UU5PIET3GAGjDF%2B%2FHi%2FXoizlI1ePM2KLBYWFKAfsyzf3hIeuLZOLPJAzvSEPAyPMqL1aciJZ597jjhjUDAwWqzQvdATdFWyooeRUZFSdgbn8mTuLc4Jroz%2FjzBQHexfJEk1jspSJAv0cHBdVtEBEp1AvVoRpmeHFquN0yEOcKiPQ%2Ffh6NevX4zd6ktx%2BowZFMU34pNPPpHgw9NPPcXLf6lIcsd4ST3a0Civ6e62i1KgAES9st%2B8%2BbQ3TYH1RX8LHXQJcL9eAQB96pAPge0iVLV4h%2BpFx6uDSF86P%2BN7gpCm6XEWoaAcqT8iQRxYYiQLIWCEvA20Maurq5XgCqgAWiGgqiXIKpVS9X%2Bm0A4AHW%2Fa1Nwkzh9oERrjYIJBU%2Fe3MvaOn8ygbzbm2MjBRtKWXZKjJAIZ7LPQfUo54sK7hRsaolSkpKQQmnlmZQ2hTZs2iWVGRyTkVaDHHQIO0FSjJT3S4aUJkxtwKoleBVvYKWQLpToqwelE%2ByxYzqsXLRJQa6BC8oLjRxIWN7yozHfnD3tzaRXl6308LDwcN5fLIVU3qM7G%2B0RFRwkwgwKDVdV6TbUAOiIyAr0YJek%2FKDRIAIuiBuHe%2FEYI7ERGRlsNy03yD%2FTn8zHfJhcdpzsK7849eFAmAVotSC9s6efhDPQBug8HW%2BQgOFy4mVBl4d3feccdEsJ96DcPiTNWXl4pYWnpwcHcGhRAL7HCpb0sJMCoCmpt9LNbbhUgPfzbRwjNZwCwt%2F%2F6V1q0eLEk9Tzw0EMqgcla0tGzQuWCKFUF5wkODrAy9%2Fx1Bctxsrc61hvceuh2A4j4IdqHpjU4J6wlrD%2BKXbHS2CzKgAllhpDwbGliiaIAnsRIOUWlNyKC3Uw5Aiz1wulyeWnmvSkUvkdUrOA18AMGZ2eLtQ8OCvb3AboPhyoUDZZyJDhTiHBhmQYgZf8Utk42q48Wln6VoG4ImD0W0XacVfQTx%2FKjDz%2BknXt2u7eVgCW%2B5tprhXfedvvtdMGFF9GYsWPESsP6lTAVaGSL2J8dKYATgMs9eEC3x6OM9Ayr13P7CQGWk94MBmhFeZno5qkD08Ratne3u4tVdXsxRCERHEFeBng2rjOaeTUUFj%2FJy26RjDkd9FH7vXR7HGWmNz2IIppKwoTkuT8%2Fn%2BLi%2B1POyJH0wXvvUnpmptLu2a%2Fwceg%2BHLysulQPNkOWUpReffXN13TW3LlUcKjA4oceKgFwn1jrabpvNiYCxvN%2FfJ4mTpzoBjM4p3YGUWQbYPjR1%2BvXuy07QILoIRxRmxSgtlFebp60HUMkD93x9%2B3bL700UNiq6w8910Yn0BNE7VBXiMR7nE%2By6MhbfvSTFUjJcSQghYOI41GGpQsHwKkxCQB65VQaUsljWPSoubmR7F0dFGRFIEFRMEEP7NtH%2B%2FbuZsqRKn3%2BehF9H6D7ZvBN6bRZ%2FY7PPucc4Y1zzzyLPl6zhtB80Kk7CpmGSGtQBaA8fFePNk1BwD1h%2FTz30HMfoajoVgXamcR5MzLSKY5Bjew67DWYmJQkhQVqV60saSqOv%2BFakeNxHG09wUGEdYW1LCoslFUgjK27U1YW01pNVAoptp2I5omXmDiAwsNUjaJUtVsWnCznFedC7w8AHYW0aB2G5K2IsDDq118VEJh8Tigo8QlJsqkStGmHo0eoj%2FgKamnzAbqvBt%2B4Y1LJYSXX%2F%2FSmGyUgMWPmTOHM6LSJpRIFsXAMUSkCTffk%2BRdk9U8m6Tu3bds299KuAxaa5gAgM2fNctMUBFbgZA4alCl5FOkZg6RLEnIkAHYELgYMSBIeDHlPHEjqbZV7bbJlqHRWrBAI54MTIxMOqZz6evXhwp1dpnw%2BOI6Sb62B7FmD3FZdagWddukIlTwgkSdDPzYEbUxdmuW70hUusPRKk9eNKQMR7azzAboPBzstLVAboPFCg0ZbgVdfe43mnDFHpDREulBZ3S2JS%2B3SOR%2F0Afxatn0wezv4ekX9yQ03SC3hy395SX5XBQJqrHz1NVpy7TU8aWZYDWHUazEZkOmHULPa06WzV3QSVhO5EgAGZDQdBj%2B5hOepgkGhAqKeSEBSE8GiSKY6ENfgspqYx0kZV6jQEPfec9b5kI8RJj0%2BAuWJpMR4au9QjS2hBknPXoPkO9y%2BdTP99fXXpU4RxQlaA2eH2meh%2B3LU1dUd0DWA4I24GehPAQcRlkpXdqSmpAjH1S0BELDQPe%2B8OTQGlmSEqVe%2B8QYt%2F%2F0z9Plnn4nVwpK9hqkMAPT4U0%2FQe39%2Flx55%2BDfu7SD0hFDd%2Bl0nWF29AyzCy2p3Lb%2Fv1aNxLCYrJhZ20kL2nJIavWKNltqHlQjHFzM9QUMdUC3%2FAH%2FP%2BUzTyhNXikqQtOlFZXqTKsbFk1L0oBKS4vrH0%2FzzLxQHt7VVqSkSSXSZp5RTeMqpHOXl5YWG1WxF7SLlsDaQNN2FoqoNlt3dyMXfqiFUVtD0VFBbAIGsl3swlxYuXCgU4Z677haZ7salS6mqopLWfPQR7d61W%2FbrPu%2F88yynMIDP2eWhA%2BbJnE5yKy7Yq0U3l%2FE8r%2BgN5hXalCFgQsKl%2FYSPw8FEW1yp2pYWaIZQKHx2bOG25qMP6f33VtPtd9yBKnjpwnqiH2dauwS0CU0JkX7WnWqjIr4GWHnQo9SB6QzkZjpW2iiat26m3tjQUO0DdB8OBmazIaX8IbKke3cu8nBUw31jVQ8PP3F0dJK9bjCkw9Cwigg3zzvzTNkhAEWqFRUVco7ZTGUqeelHs8flz64g7J8NMJA3W%2FUCtaqU8XMDVlQG6aWhqlX06gJqIQ0de%2BzyOyy8hKCZQ6NVl6S4MmVCbnVIaIhczxefr6Nhw4dTClOS7GFDKTf3IFVUV1pbvVk1hV6Uw%2FT6GasX3g8BI9RWYtXBCofIIFn7n4Nry9YUTp70%2FoYU8fL3UuADdB%2BO%2BvojB%2BDkIdQNEODGqACJAq5h9AY2bjAcJqeXk%2BdRMZT1xDmGMkBuuvlmoSnjxo9H%2BZE4g6gf%2FM0jj%2FSiEbj5luIi76nLvXAe%2FA2tbqGPiyZuUR6ApaKiXFEI05OiKTvT8mfBXt0ALng4LCZWDXD%2B7eyoots%2FclWuu%2F56ysrOFtqA4lwpwOXryM%2FNpXlnn60%2Bm1seNL2%2BB1NUH%2BR0BAeh13SkRBfhULa3d7plPTwHGtPdo%2FpT4%2FPU1dUe8gG6TwFdl19ZWdmSkZERqWiHywtcmjOqCKDWokE7TCs18nhHDH9X%2B7BE0D333dvrb0igh0PpbYmFj1qFqnA6YWnVLgJdVj0jSasuAFk3XccxsL7o6AltGS0NMMkgLxrWhIIyouiF53Mgqw48GvJd7oEDYp1BQ2DVN27cIFLjGWfNpeJiJfPRceuUvma9E65cj%2FS2Uy10nVYQSip7THVMd49ayQICg9SutvX1e3xOYR%2BO%2Ffv324uKijYimR4AVcu8TX5GQr3mt96ass2SJQA2WD54%2BKpWL8AKiyuODVDo7YkR9dPtCwBY%2FA%2FrBUuMlFE0lJHGkA7F1aXLfnSUcF90Fk1mIALA%2FeL6CYBgoVGRLisCgMPLPipFMJlUfgi5aYMoFFafkExeIW792c%2FFMitnlUTK27NrF50%2BcybNnjOHDpcedic1ucF8vJE21DmlbZjOrbYmtMtybKU%2Bs6tL54ejVdnR7q7OXT4L3YcD3JkB%2FQ3%2FeK5sTsneu24QA2CgoQost6f1luKtdmmZ1aYCB06H0plN091y1mVxWL2ft5osLjcfx3ugRS%2FyHcC5cQzq%2FQKl%2FYHpbsaoeHFPb43ZHRhxUe80Ujphq2VvugDKUltTK%2BVWqC%2FcumWLqDXVlVVSmT6Sn0OoHMGlcnYSkX8he3eLHu39zwNccYyt95SJ6tVBVffHC7AFihTJK%2BHGpuYmlw%2FQfTjwxe%2Ffv%2B8rAAfghjOHMiVE6Nrbg9x1gtrKau0XNw05DmpnJ93iwNoCQlIqVY4zJCtYKLUZpQIXJgfUhfq6erGUeo9CbdG9M%2Fg84W3Tq0rF5s7HOF4N8YqAujfr9E5zlc03%2BfpGjRot%2Fa%2FxtwP798nnxHVILjY%2FV8GrxtTp09WmnS5rf2UySXc7wASF1OcyUCXvkOe1A%2BmQiu8Aam7qEHkRUii%2BE54kG5DV5wN0Hw58%2BRs3btyxd%2B%2Be6gkTJgzA3n979%2B6lCy%2B6mKZOmyo3U%2FVjM62Qt0ozxQAf1VE574ihBpmfn%2Bofh4ptLOGI2ulmNCFWAxYEJdAPT%2BV5eOvZ5klkOwVO6MMu03UCkAEylZeiNiHStX3q3IY72gfFY9SY0QL6NR%2F%2Bg0F7jMZNmCCprRmDBlHm4CH0%2FnvvyWSTxpDY6arbw6lNy%2Fp2MCULYKdQNedRoe0eh10oiHxOnlCoatEFB1VVlatPtR7RpxyHhuZcVVVlstf%2FV%2FyOSozbf%2FlLscZrP%2F1UqIDeixBWJjRElUG5TNWCV4XMtWxmF4qAiB8edqnRc1jtvhSoYKU1oGENG44eocZjDQJSj7X1WFRtXfVzOC%2BcSNAgDycnq5N%2BuFhEaOClTBnQgFxl%2F%2Fn34u7Ix0hPzxBu%2FsdnnxX6MSwnR6w08kRQQgXQAuDu11rTQRULq4qdNuzoxStaZES4qD7Mj%2BU9EGgBlcH3hYAKHiUlJduqa6pLsSuWD9B9ONQeIoH07bc738HvAMTK116j8y84X0K2ZYfLZKcndSPVzbS6f0tJkQaJt2XVYIQzWVNTJ6%2FB7lm66z2sNgZysMFdW0FdrI0xvS2892ad%2BvyYJACumjwWt%2BbrgfVHtmBebq5ov2lp6VajyQargt0p6h6uVzciV6HoAKFXNVYQZfvWrXTueefRiuefp%2FETJwo47T3emrvyFSTlNUa2cebXVlGA1aQH3yVkOn2stDFg5%2FVQft47CH%2FDJ%2FEBug8HrCcy19av%2F2rH%2FgMHDs%2BePVuqrm9ZupQ2b94schYsl04LdVmynchvBrnbG3hA56EA2jGKttoY4DWqpKpDHMJDefnCz5GMpMHuTS2O58Wau4KTYgWBMqI0YKKDBw%2FI9sjoXQdlBBY2fVCG6q7U0W6pENZ5DXJr2aACH6x%2BXxKTMCZMmiT7euN7aZN8cJc74VR%2FVj25cQ50HG1g2uR09MhOWtIB1aFK1LCSgPbU82ctLS15Cw4yvotTaZxy%2BxTOnDlTlm7kIT%2FwwAPPXX%2F99Us3b9osHTyRtrll8xZZdn92220CCqdVrIrEJWTDaQt6fB2huzKcTGsPb6fa%2FoypBkAh%2ByGyhYTlVj07etzHHx%2F69ga3jtLhGoQSSEcjm1hMRCVVK4RWuRaACuFrNHoEuERbNlQPv9KSYgmNY%2FVJSEyQlULaBEu7L7USIDiC1zqFD6s9CKHoOKz2BjgWk7tHOvXb2dkMECcYVh9KyZeffyZNb%2FgCv1ix4ukzIyOixDDAp%2FBZ6D4asL5qbz0XrV279jU4fLj5g9kxAu9Fwj9krtiYaKvQU3FVWCe1XXKg%2FAyLpbVo9bvLne%2BB9gOIRCJ5Hk4b0kDT0tPEWmlpT1Weh8k5vAM23mDWch4ijjhuUGamBHDgVKIjEoDervZ2cRt3dS1Ot1VWzXPsshsBKmaQwooyqyOigfewoxoofgWurZ0nBlQOm8iYTi9pUvX%2Fs8nuWEqzJy9VBc%2Fl5x6U%2FVbiE%2BLRSH01DAEKCEQG9FGOvhs6woUch%2B089vEYP2GcWCLkHZ81b55YVbQycDtH%2FD%2BW%2FToGASJyABVAgOW7kq0eeKTN8OulJeNnpHBuZRrzkx%2F%2FWFpsAejY6PON198Qi45KbJVF529xc5fbmdNg1quB4tB2uQ6AW%2BdYIxzd2dktVlPUDVNVmduF15K7pAxhcVhobGsHcEZFRVjNJsNU2Nrac1Aan1udo%2FAP0UuklqJC3F%2FSbruFRgVYmYn4HgoP5dPO7duYg0%2BiiKho55bNm1aqKvdTrmDl1AM0wIgHci6wdL%2Fxxht3qefD6OJLFoilWsdLJ5Zx2aHVVAn6cMIgSaE1QVl5mdQD4vkuBhOS6fWGPKZlJXVABVXgiMQhOQjWvIBv%2Fu%2BWLZNrePzRx%2BiD998XXqwz%2BXQbspMl8rsBzhYR%2BnlNTbVVENAh11tfXyurgvSWg%2BJiehcZ9EieSAR%2FTkw0P78AcfDapOmi070dHZxHvW8ifodVRvNFhOPVnog6I1H5CC7p3VEvtAK0ZPeunU%2BzpW5FX8Do6Cgfh%2F5%2FoXJ4B1kw1qz5%2BOvpp502A2DFcyjHQsNwdFU6Ym0Or3IwgkSTBvWAlURPPFjXQwWF0tcNshi4rt7K4uABOG6H0GCdfnbzzfTcn16gN9k6n3%2FhBXKjl1y9iCZPmUz33n%2B%2FaL9d1iaaJ9IPTwQQORI1VdXYxVsmBVYH3Y4MIMb7AryKLrjcXVRRYQ4LLDkmDGLT6zvAayDfAZhI%2BFe5I6pHB17bIQ0p1e4FSPqXOkWsGgx85FOjsQzOzRPt2EdrPoxva21xQO7UOniF1Z%2FEZ6H7YIAf6wcACI77hz%2BsuB6WDfLXqNGj6Mqrr5b8Zdxkd1qli8RCAcgIsMBi4yaDIyLvAtsKQynQO2ohR%2BOFP%2F5RbjT2TbnplltkMmDfQmwv%2FPxzzwl9uGnpzWL9kO%2FcW7Y78We0PkCbBPSrRlUKwA16g%2BuQ9l58GCiB0%2BpopKOLyIoD9UDRq5STWQn6OpQNAIM6JLPTCyAjzwVJSE6p1GmTa3P3rnMwPfFTXVIxAUGjhmRl0%2BCsLHDnO8pKSx14H%2BxFAyVHqzk%2BQPfRwHKrH7CSgwYNog0bvil88823%2Fg7nrZidQkT0Zs%2BZLZ67lq%2F0UoubimgfZDSAwcE3GHtmw0Jj%2BZeImshmBr348ksSLodWjIbpO5hnIohzgEF97vzz5Dx7du8Rfh3gldNxUgvNj04GLlYH6OVI23ToaKNE80wpWPU4hxZ9QTQRbb944tXU1sjmohrMwpWtFFrZzYCpCugKJm9LS5tMQKl6t0rPHJJxpwJCXQxy6NUDklOk7e8369eXbNu65WVQFERJkfmnHz5A9%2BGAHuz9UODsoJdffuk34jTyja0orxBVAm1tVRGsxV2J1P6A6CVtZabJDlHNzWr7YQa2ShdVec719UcYsLtlFQCPrqyokt7PCGqAn0J227Nnj7TchaOmS6yOTzgSfZvfSCU2%2BQvVQHdQ2ffFqSiF0AsLoDppyKUT9rEZZ0SU5EnDaVV95xzu3WfVxHRIHSBqJzV3xgfGzx3S%2BgCUw%2BpmCmrErw2SbkkHJLGpsPDQr7BCBVjNLr0fPkD34YAz6P2ABDZs2FC0Adv%2F0kuvLENLMFjZ5qYWawN5T6kTrBz4aVy%2FOCk9gvWSbd3YgsXLvoDB7gkAR2%2FNhx%2BKQgBqAfBip9qMjAwpwIUKged27fxWOKg0ebH2ANcW2TstUwdt8P52dxtcpxXkcXlFNj0gxrBLY%2FRWqdrO5s8me7jIthb9paE7agCRoiqauyXDidWWvb9N1WXJMCzfA3ktXUKnMLBaAOg2f78N7CS%2Fp8LzqrzN%2B%2BFzCvtwTJky5cRZydYUqgGA8dFHHxcOHJg6%2BDBbHVhcnRsheRwMJPBflUnnKQyA1VTpoqa7XS5uPoAMfrrus8%2Bo8Vij9JMbnpPDVnm36MIA0ldffEkrnv0Drf9qPQ1MS3Nvo6z1X%2B0M4u1wHXl5uVJtEhOj9oTRMp%2FTKkBQ5Vlqi2JMNPB5KDDIlOvptkt3UFhl7KCF80N6xGc5bcYM4dhdVnmVbGDErwfN6LL2Q9Tqh34PgByrylNPPp5QWVFRD33bNF0n1f5PlXHKZdtVVZ28ZhM3BiC%2B4YafnPvVV18VwHrBsplW2T9AC34JegKQoreHDoh4V1Z7nDmXdOZ%2F%2BsknhVaMHz%2Be5px5JoWyk7h71y4B8OVXXiGRtqeefEqUgIsXLKBx48dJiRTpySGNHZ1W%2BwNDEongGKK9gNoFl6yec2SpMara3BYSZP1us%2FYFbxbLjt4ZH37wPv3617%2BiQLT0YisfzedCk5hhOSOsfVfUJLFDzutxWNbbIZxd0RxFPTCxnv%2Fjs0sAZhUgcpBJp%2FY45QD9XZEr3DTshPX11%2BsL77zzzhsef%2FyxPwMwngggKk5UJhp6ZKSEJ%2FPz3h68p7hWW24oClOmTqVJk6fINsSIOObkDBcgiubLv997%2F31qG4rICKkH1E6UyujrtjqbBlg7x3ZLQ%2FF6%2FjtafQWHBAln9xNt2rBqIq1EKitRCJ%2FXk2Ot9uJG5fa8s%2BYRNvo02ArvY56P95MsQ%2BmuZJOt2tT%2BiTa5JndVvDSecQiY13z04Z%2B3bN70Oln0yHS56FQfpxzl0DnNJwe1IVYZj1Wr%2Fv7BwoULLigsLHJzW3dzcXYmASxEFMldXNu7P7TkUPCNR8832VatvcPisk4JfmBTIrQGgMxmtza8hHUET%2FdzFxGo%2FBB%2Fq2uSw9oYFPkaPT1dIpcdOdoge56ovAtlyd1V7Kbqm6GdP1UmZmcrHyJJRIa138pTjz1Ks844k4YMyXK3BIMDirYEOE5vYyF1it09Im9WV1VV%2FubhB1JlwgUGEn0PDo6vV%2FRZ6P8HFloP3fHo9ttvu3DMmLH5aWlp2WjcAj6tnES25DExohjEeG1QLwWrXtsI61FTXSP%2FC4CsfUxaW7B1WquqKEfZktMl2W%2BYOJD%2F1NYRSvGwS8ROcViTFKCQNJ%2Bfz6A%2BcEAS9EGDpHqdyH0NOqACi6sr1qVvn0HS3kDaBEu6a7U8j%2FwSOKvYnNPJ74HVAx9Dp7kC%2BE6mG5HRUTiX%2BfLLL87SdZI%2FpGE7FQH9fQ%2BVXhokoep58%2BaeVlFZWQOpTULXyMfgG42bj5sNC4ufNQBx87WV9khv6gFtutvaL8VlgUwa3bDFRB89tNCCTKjKs5ySdISHvafHK7uP3KDMzMykZramh%2FLzJdHeT3IrHEr5sKyxgNmpfnc%2FtPMoDckNkS4x4Ohi4phORR3At1EXiPOpTYds6nPzx%2FnDit%2FPYc5fbLPZTpDoTvbwAboPh5bAvu%2BhaVRJSXHDT66%2FPqfgUEFF7oGD9Nmna6mWLS6if3q7YagXqjedR64CRQiwWtFity3oxlINjs10dGcmDS7p3tluJR851Y6vqBCxKIPLbV092XdSec1gGjI4S1p0IZcEifTS8qC7xwMmp8NSJtRDQO71PyYhNgRyMjVCUEU2HXWqLZqxekDek0w%2FPi8%2BL08u85mnn5qUe%2FDgek3R%2FpXv0wfoviT9Xg1avuuhj8OyW1lZceyNN14%2FK3vo0G5Y0E8%2BXiObx0PiimMuiZ54qBLB8i2A8LJMcJ7sltSHYEwArK%2Fd7rbQGlRxcfGyPwqy76SnhhsMpgVkT3qq0qVN4d7dzKPj%2B8czkEPkfaEbOywurUGrgOyQGkDNszUNQcgdZVs2q3RKwG5ZdfB%2FXCccUvTywHX%2BfdU7FxcWHtqht3H7d75Pn1PYRyPI2in1nw0AEbx5ypSpYg0TEuJzlv3P7zZs2rAxZteunXTv%2FQ9QE1tnRA6r2WojLwQaMoBrM4wTFA8ENgwrxdSji6jQNJZ%2BBGAk95qXddmw3lIOpJ5POji5BJy6uaNy%2FlTiPSTFAAm9t7kDIyb4s4S%2BLXpjUQ0djMHPNn8b7d21W1p6JSQlMrfuEEBLJyRrT%2FLomFhZEV579aUr8nJz38Fq1NBw1JIR%2FzV7dirRjh88oCdNmiydRVH%2BxMvuwBt%2BcsOahqMNIxAaR5QR8lVFRaVs7wBQI09Y8irEUSRpoWVYewSqhHunW8d1p5ui1YFIcwHU1mFtIWHqvVRMAaaDuTSsKK5LBVwUO1eV5jZ3NyM9STzlUxrQanKoiaBkPvB35JhI%2BVVbG%2BkcZoAZNCghKQkV4k3PPbviioKCQ2uzsrJFqUEt4w8V0KecyvG%2FGQBDekYGQtnl9XX1I3%2F84x%2BvZqt1EUq3xowbK%2BVMaB0LyQu7ZamKDnhwHom6x5LmACokPyHUrbkwlnMAFa%2FHUk8G9apZBKUB%2FVHtfj01f7qUy2mFxVUZlWo4brppiqtX9Yl0VPU33F2jZN9ufh0SmCQvukflRScNSKbi4qK8l%2F7y57PYAazCxNWZhz%2Fk8V9hobH1G250waFDkj2Hhujnn3%2FBAxnp6Q8jsWj02HGyvYQ0KrSkPZu1VUWv7sj8XcGhrGPe%2Fc369ZJbDE0XqajYexvFs8ixABeHImLI3ivtIumlsPVHfolwbCKrta7quYGsQEwEbNrjtPZ2MS0NGtZaLLolveneIUiFxd9RKgZKc4ydSoAeK0V4RCRt27rlrZdf%2BstingwuBGJka7voGLX12w%2BYctjov2jI5jixql3tiy%2F%2B%2BTebt26ZL9aVQQx1A5ttynLubt5lBTfgJFr9O6RPBi%2FvAB1AijC23uIY2wtDhkOHpSAJfNiEBkBOROclWHbVh88pffHQcgFlYbC20KLRfBHKitpCwlI0LLUDZVYmkbsFLyhHaEgwFRUU0oED%2B939%2BpBj%2Fe67q37Blvlqm5%2FhwiRz%2FQAigD7K8T2yH6w8Io5bNm%2F%2BODNz8PDo2Ni7R%2FmPXoxQMtQKw9pOGYACICOYLihHyyFFqCguuGrxYigoIvnljBgh1h16L5KFQAOgDyNogla5YTyB0O2oW5L3VZ8N6Nqw6tFWvw3weewYCz4SEhwqARnZgc1qZebCtfirXGZUjuPv%2B%2FbupSq%2BBhQIg7rw51m7f9%2FeZ0pKij%2Ft3z%2FeLfv9N43%2FOkBr7go%2BC202N%2Fdg3ldffbnkyy%2FWPXPTTTevHDV6dA5KuWCtoXogP6KqulpaJEgDGMh5%2FCgtLRFLDCDD2kbHREtYG44lxkG2mhu%2B%2BZqmTjtN%2BDNAi%2F4e4BlSpc00xeXUtYBdUiMYERkpWXWBlh5tSuKSkuAAZCRXgb7UllRLdiHyny%2B6ZCF07NpXXn7ppv379r0PupM2MJ0tdQD1tPf0KlnzAfoHDmpYa1S%2BALgFBQW7fvGLn4%2BYPn36nddcc%2B0dkydPjkPQot1Knaxj8IZLlDFcrCZC33D2QA9SzTSKYjCufvfvsscfSqGg%2Fb728iuiG2PrZhQLBMqOrkq2Q9ADvNiw6AoUFKggqEhBjjI4v8HPC5gh%2FfEKsX37Flk1QE2GZGXRmLHjzI0bN6z48IPVD9bU1jS7e%2B4Z9IN3%2FnyA%2Fh5g4zFw4ECR71599ZXHDhw48Pz8%2Bef9esaMmb9OSEgI6B8XJwlNsMRw4tROrwPFYqPhzd7du%2BntN9%2BQrkSJSQPYYfxaqlqwVRxTGnkNpBKtQ4vzYjOs1rZWizJs04aE%2Bx5dqd4j%2BdLQxOF4FhUVUwc7mGPGjZf3379%2F32tPPP7oI3l5ucUo6UoekCxRyv9WIPsAfRJPHpYalIEpQMvy5b%2B%2Fb8eObS9kZWXPTUxKOmfKlKkLx4wZI0s98kLAgdEoEhl7sNrgy1lDhwoFwbbGcCABNKgKKAnTfen0ft7aUuuKFunCxCDvaO%2BwHEe7KBpRUTGiWqSlpWESfL1z5473mGJs%2BHr9l7thitFAEmmietfb%2F%2FbhA%2FRJaAgsIMqrGIyVa9eufbmzq%2FPljRs35mRnZy8cOWLkxQmJiaORTKS3VsseNkysKkCOglNwafBicHFYcdWaQMmBqswJv7db%2FTuspjTkFKkPedMxsUoGRFFteVl5yabNGz8tKS7%2BG%2FP2r1HJDt0cmxcRGSfUL%2FoA7RsnBTYGnDeUJTW1NEG1OLht65aD7Mw9PHTosClJSQPmpqelnZ6Smjo5JCQkApUoAGGgtCZQGrhsQ8GAxhZsqBSHE4pkKLQEGzlylNKCpQeIv2jSrXxsXW2Nq3jb9l3MzzdVV1V9dvhw6cdosQCVA1tchAwIkYgkIoEulw%2FIPkD%2FL8ANxw0KRAo7fHC4du78dmtXR8fWKFhK9irZmo8PCw%2FPiY%2BPH5maOnAwAzvc6XKEBQeHhgWxuebX%2Bg3LybE1NTaaMWaMs6fH3sPcu4PP3cY%2FtjU2NB5mAOc3NTXlsSXewZSmwk96W4dSYFAAU5ck2Y%2FbZsmJvvHd4%2F8IMAAyPHZCTsVjwgAAAABJRU5ErkJggg%3D%3D", "title": "Wikipedia" }, - { - "url": "https://www.mozilla.org/#https://twitter.com/", - "bgColor": "#00b5f0", - "type": "organic", - "imageURI": "data:image/jpg;base64,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\n", - "title": "Twitter" - }, - { - "url": "https://www.mozilla.org/#https://www.yahoo.com/", - "bgColor": "#500095", - "type": "organic", - "imageURI": "data:image/jpg;base64,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\n", - "title": "Yahoo" - }, - { - "url": "https://www.mozilla.org/#http://www.amazon.com/", - "bgColor": "#ffffff", - "type": "organic", - "imageURI": "data:image/jpg;base64,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\n", - "title": "Amazon.com" - }, { "url": "https://www.mozilla.org/", "bgColor": "#4d4e54", "type": "affiliate", - "imageURI": "data:image/jpg;base64,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\n", + "imageURI": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALQAAABWCAYAAABmQby7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw%2FeHBhY2tldCBiZWdpbj0i77u%2FIiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8%2BIDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDIxIDc5LjE1NDkxMSwgMjAxMy8xMC8yOS0xMTo0NzoxNiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo2NzQ5MDlmMi02YjdkLTQwNmQtYTMyZS1jOGU5ZjhlNDUwZWEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NUE5QUEzOERCOTJDMTFFMzlCRTNERjhERERERkE2MEQiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NUE5QUEzOENCOTJDMTFFMzlCRTNERjhERERERkE2MEQiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6Njc0OTA5ZjItNmI3ZC00MDZkLWEzMmUtYzhlOWY4ZTQ1MGVhIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjY3NDkwOWYyLTZiN2QtNDA2ZC1hMzJlLWM4ZTlmOGU0NTBlYSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI%2FPtu9qW4AAAgvSURBVHja7J0JjBRFFIZ7We7lBjmVmwCKgLgiwWjwWEXxglVQ0SjBRNREjWIURUUSMGqCGA%2B8uBQvVEQCBvEAgQiCGlA8IXgBIoKAwK7ALuN7zlttK%2FWqu2dnx57Z%2F0v%2BhK2q7unj76pXRzd5iUTCAyBXqIFLAGBoAGBoAGBoAGBoAEMDAEMDAEMDAEMDAEMDGBoAGBoAGBoAGBoAGBrA0ADA0ADA0ADA0ADA0ACGBgCGBgCGBgCGBgCGBrlNTVyC2HItqZhUn7ScNJF0WCnbjNSXdDJpEKmENIzk%2BizW8aRC2WYA6XbSuzA0qAqeJ13l%2B%2Fs00sWk%2FqRSX3oR6T5SH1IDX%2Fofipm5RZ4upu9o5HXJBUMj5IgfQw0zV9CLdI%2BR1p10imFmT2ryOpZ9HCGNtJiZaYgYGlQFlzryhhh%2Ff6uUq6MYmlnl2AaGBmnnoCPPjKH3K%2BXyHeHkvlwOP2Ho%2BDHDkTc9gvnzlPTSiOVhaFApVpDut6S%2FTJoWUGOH4ZCSnhMfCscoRzyZQFpKukDu0TLS%2FDSZMKe%2FcA9Dx5cPRSDmhm4tv7vFSD%2BO1IZUTtpM%2BjEgPuRhrFZeciiK9%2FVdJY6pLakrqbnsb4fsb1cM7lEBqRups9Tau2PkHz6ujnLduCO6V%2B7bF7lsaB4j5fHSQaIiMUx7yR9PulLK%2BOFmdqLcxAp4rPRu0mWkDkb5L0mzSQ9HOLZRpKu95FiueS0OSDw7i%2FSqYx%2BXk%2B6q5DV6S65DxcN6B6mfPGSdSE0kr3sMDH06aQTpDDG0je9Jr5Mmk%2FZk9Oj4Pw2qYi1M2BlFWpMIZozsZxBpW4jyy0n5AcfUh7Q2EZ6lpA7KvsYlKs9C3%2F7yHeXMY%2BillCshNVeOd46yzQTH9eJjuiHiNWO2k%2FpnwGP%2FKBOjHN9Y0o7I8NRJIbbnnv2TUlO3CVH%2BVNIDjvyBpHVech1DWLhlWS%2B1pcn%2BNFyjncbfW2MUVlxH2kR6IuI18yQkXOkl15rkzLDd4jT87vUp3IR85QKvSPE8GpNWk%2Boa6Y3SMLrQIsb9rN6efao8LLV84VROxNBhOlY8HbtBOhfDQpbnOO1YL7nKzLOYrJPULH5ecDxMHLcukHxeCDTJUqYlaQ7pEl%2FaXMvvmEbeKa1Md6VMnBcF3Ug6TzH1J9La7ZM%2BUbGyj8GkW3Mlhu7hiLEWk040yk9xlH%2FPEpNtUsoOMMoVOvY71HLcIx3l%2B0a8Bv1Ipcq%2Bllni1S0xi6H7G%2FueLPfVLDda2fcuUu1ciaHLlfTP5Mn91Eifp5R%2FhXQWaY2lttaaOj9aDcGx8ZuW9BdJG5Vtbolw%2Fu3kHOta8g5LaxB3%2BJrPl5akm4zq2PpGPDX%2FpyWdFz7Vy5UYWlsj8KuSXqakL1fSD4U4Bo6nhyh5SxzbLVLSz4lw%2Fq79j8j4sFbq8LLWs0N0WHdE7D9kXQytUS%2FiA9Ai4kOZMDo2WufNFf9qyzN5cognOjYHnONUifNtzFNahmziKLkvDaRF5GteW6mkynLd0FFr9MqU7%2BnI2x6xtqmgU4ChOZy6WcnjWnl4lpqYJ7XOlyG8DkooZTN0eXU1dFXQ0pHnGkcuCRjG02gUUPtelKkbnEb4xQOe%2BeuawraHM1VDV5flo%2FUCag%2BNIylWBm87aq4pjv5AXOFXv%2BamaGbU0FWAq%2BNYK6AzGXWfY73k2hAtJr8ty64dr9mYGFCG173sFtO2t4SBZZnqGFaXGnqnI6%2FAkdfAkWdbJMSfBnAtjjo3C6%2FdYwGdXv4EwjESTxd69pcOMhZeVZcaelNAT12jlSPP1iFc7Ch%2Fk5ec3cwmeCRHG6XhmdTxllarZsQWEjV0CvAkjvb%2BXUfHdj2U9J9IPxtpvMS0rVJ%2BVUBNl27yvPSMFvV2lH%2FcktZM8VQZDJ1e%2BMXQ95W8gSmECGZNfI2nD8Nxx%2FLCKjqvhKPlrRFxm7yIIVepMprxv%2FqsOr0k%2B6ij02NrVodKkxsUV3InaKZSjqeBTwiI4StDmcPQWl55hM6x663yniEfCk9ibMTQaYanoHndRh9L3kqJcRfJDedp8lnKft7wkisDK2qwJQGxe0GIGprNND%2BFzpPrQeEVgc9Y0rXvcvB0%2Fjgj7WvH%2Fp%2BWyqBiNSW%2FYfOUUraxXIMFMHR64bDANp3d1EsuLT0gIUJDx8iG%2FzNdZ3r6ktCKWuyjEMe1zUttGnyXdE47K4YbLqMu7%2FjS1yv74paE3wXkJaGjJG2DHFtbJb7eKKEcG7Yo4FhnSkWxGiFH%2BuAXX4sd%2BQUOMx%2BUeNsfO%2BYH%2FF5%2ByOOa5LkncVw858jjB85cGfiao3wv6Q%2F4O8NjHeWbSktQFOI4mzlq8KwytDZx0VpJ176x1kRJ1xYtaTN18%2BRG%2FxDhHNZLDWYumaydpmv0kvF3uwgt6oMyiqMx2PvvK1B7xbQuRvv%2BzR%2B4mRHxfKZZ0niJwRW5EHLwiayzdB7WKuV%2FV8prK9%2F4Zh5t6b273pT5QEIFfrWL3zgvVDpPPNzGn7Z9VtnPL5ZjjQKfF0%2BD7zFGITgut60%2FKVFGUfjdzEfEiAWW8%2BApa%2F868tkSS9%2Br9CnaWAzO53mnpw9NelJmDOljuV9TjdGkr6rabHm8yh%2F8HYN2kZqML8hvEp5szbLz4Naqv7R%2BPMrB3yv53Pt3WtpGoTzcdaQy2Sg6pLSeQ%2BQ3eOSivoRgPGHE72qaw5nF8hA8FBDqwNAAoFMIYGgAYGgAYGgAYGgAYGgAQwMAQwMAQwMAQwMAQwMYGgAYGgAYGgAYGsDQuAQAhgYAhgYAhgYAhgYwNAAwNAAwNAAwNAAwNKiG%2FCXAAKTHKLPubD5WAAAAAElFTkSuQmCC", "title": "Mozilla Foundation" + }, + { + "url": "https://www.mozilla.org/lightbeam/", + "bgColor": "#bfdff0", + "type": "affiliate", + "imageURI": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALQAAABWCAYAAABmQby7AAAKQWlDQ1BJQ0MgUHJvZmlsZQAASA2dlndUU9kWh8%2B9N73QEiIgJfQaegkg0jtIFQRRiUmAUAKGhCZ2RAVGFBEpVmRUwAFHhyJjRRQLg4Ji1wnyEFDGwVFEReXdjGsJ7601896a%2FcdZ39nnt9fZZ%2B9917oAUPyCBMJ0WAGANKFYFO7rwVwSE8vE9wIYEAEOWAHA4WZmBEf4RALU%2FL09mZmoSMaz9u4ugGS72yy%2FUCZz1v9%2FkSI3QyQGAApF1TY8fiYX5QKUU7PFGTL%2FBMr0lSkyhjEyFqEJoqwi48SvbPan5iu7yZiXJuShGlnOGbw0noy7UN6aJeGjjAShXJgl4GejfAdlvVRJmgDl9yjT0%2FicTAAwFJlfzOcmoWyJMkUUGe6J8gIACJTEObxyDov5OWieAHimZ%2BSKBIlJYqYR15hp5ejIZvrxs1P5YjErlMNN4Yh4TM%2F0tAyOMBeAr2%2BWRQElWW2ZaJHtrRzt7VnW5mj5v9nfHn5T%2FT3IevtV8Sbsz55BjJ5Z32zsrC%2B9FgD2JFqbHbO%2BlVUAtG0GQOXhrE%2FvIADyBQC03pzzHoZsXpLE4gwnC4vs7GxzAZ9rLivoN%2Fufgm%2FKv4Y595nL7vtWO6YXP4EjSRUzZUXlpqemS0TMzAwOl89k%2FfcQ%2F%2BPAOWnNycMsnJ%2FAF%2FGF6FVR6JQJhIlou4U8gViQLmQKhH%2FV4X8YNicHGX6daxRodV8AfYU5ULhJB8hvPQBDIwMkbj96An3rWxAxCsi%2BvGitka9zjzJ6%2Fuf6Hwtcim7hTEEiU%2Bb2DI9kciWiLBmj34RswQISkAd0oAo0gS4wAixgDRyAM3AD3iAAhIBIEAOWAy5IAmlABLJBPtgACkEx2AF2g2pwANSBetAEToI2cAZcBFfADXALDIBHQAqGwUswAd6BaQiC8BAVokGqkBakD5lC1hAbWgh5Q0FQOBQDxUOJkBCSQPnQJqgYKoOqoUNQPfQjdBq6CF2D%2BqAH0CA0Bv0BfYQRmALTYQ3YALaA2bA7HAhHwsvgRHgVnAcXwNvhSrgWPg63whfhG%2FAALIVfwpMIQMgIA9FGWAgb8URCkFgkAREha5EipAKpRZqQDqQbuY1IkXHkAwaHoWGYGBbGGeOHWYzhYlZh1mJKMNWYY5hWTBfmNmYQM4H5gqVi1bGmWCesP3YJNhGbjS3EVmCPYFuwl7ED2GHsOxwOx8AZ4hxwfrgYXDJuNa4Etw%2FXjLuA68MN4SbxeLwq3hTvgg%2FBc%2FBifCG%2BCn8cfx7fjx%2FGvyeQCVoEa4IPIZYgJGwkVBAaCOcI%2FYQRwjRRgahPdCKGEHnEXGIpsY7YQbxJHCZOkxRJhiQXUiQpmbSBVElqIl0mPSa9IZPJOmRHchhZQF5PriSfIF8lD5I%2FUJQoJhRPShxFQtlOOUq5QHlAeUOlUg2obtRYqpi6nVpPvUR9Sn0vR5Mzl%2FOX48mtk6uRa5Xrl3slT5TXl3eXXy6fJ18hf0r%2Bpvy4AlHBQMFTgaOwVqFG4bTCPYVJRZqilWKIYppiiWKD4jXFUSW8koGStxJPqUDpsNIlpSEaQtOledK4tE20Otpl2jAdRzek%2B9OT6cX0H%2Bi99AllJWVb5SjlHOUa5bPKUgbCMGD4M1IZpYyTjLuMj%2FM05rnP48%2FbNq9pXv%2B8KZX5Km4qfJUilWaVAZWPqkxVb9UU1Z2qbapP1DBqJmphatlq%2B9Uuq43Pp893ns%2BdXzT%2F5PyH6rC6iXq4%2Bmr1w%2Bo96pMamhq%2BGhkaVRqXNMY1GZpumsma5ZrnNMe0aFoLtQRa5VrntV4wlZnuzFRmJbOLOaGtru2nLdE%2BpN2rPa1jqLNYZ6NOs84TXZIuWzdBt1y3U3dCT0svWC9fr1HvoT5Rn62fpL9Hv1t%2FysDQINpgi0GbwaihiqG%2FYZ5ho%2BFjI6qRq9Eqo1qjO8Y4Y7ZxivE%2B41smsImdSZJJjclNU9jU3lRgus%2B0zwxr5mgmNKs1u8eisNxZWaxG1qA5wzzIfKN5m%2FkrCz2LWIudFt0WXyztLFMt6ywfWSlZBVhttOqw%2BsPaxJprXWN9x4Zq42Ozzqbd5rWtqS3fdr%2FtfTuaXbDdFrtOu8%2F2DvYi%2Byb7MQc9h3iHvQ732HR2KLuEfdUR6%2BjhuM7xjOMHJ3snsdNJp9%2BdWc4pzg3OowsMF%2FAX1C0YctFx4bgccpEuZC6MX3hwodRV25XjWuv6zE3Xjed2xG3E3dg92f24%2BysPSw%2BRR4vHlKeT5xrPC16Il69XkVevt5L3Yu9q76c%2BOj6JPo0%2BE752vqt9L%2Fhh%2FQL9dvrd89fw5%2FrX%2B08EOASsCegKpARGBFYHPgsyCRIFdQTDwQHBu4IfL9JfJFzUFgJC%2FEN2hTwJNQxdFfpzGC4sNKwm7Hm4VXh%2BeHcELWJFREPEu0iPyNLIR4uNFksWd0bJR8VF1UdNRXtFl0VLl1gsWbPkRoxajCCmPRYfGxV7JHZyqffS3UuH4%2BziCuPuLjNclrPs2nK15anLz66QX8FZcSoeGx8d3xD%2FiRPCqeVMrvRfuXflBNeTu4f7kufGK%2BeN8V34ZfyRBJeEsoTRRJfEXYljSa5JFUnjAk9BteB1sl%2FygeSplJCUoykzqdGpzWmEtPi000IlYYqwK10zPSe9L8M0ozBDuspp1e5VE6JA0ZFMKHNZZruYjv5M9UiMJJslg1kLs2qy3mdHZZ%2FKUcwR5vTkmuRuyx3J88n7fjVmNXd1Z752%2Fob8wTXuaw6thdauXNu5Tnddwbrh9b7rj20gbUjZ8MtGy41lG99uit7UUaBRsL5gaLPv5sZCuUJR4b0tzlsObMVsFWzt3WazrWrblyJe0fViy%2BKK4k8l3JLr31l9V%2FndzPaE7b2l9qX7d%2BB2CHfc3em681iZYlle2dCu4F2t5czyovK3u1fsvlZhW3FgD2mPZI%2B0MqiyvUqvakfVp%2Bqk6oEaj5rmvep7t%2B2d2sfb17%2FfbX%2FTAY0DxQc%2BHhQcvH%2FI91BrrUFtxWHc4azDz%2Bui6rq%2FZ39ff0TtSPGRz0eFR6XHwo911TvU1zeoN5Q2wo2SxrHjccdv%2FeD1Q3sTq%2BlQM6O5%2BAQ4ITnx4sf4H%2B%2BeDDzZeYp9qukn%2FZ%2F2ttBailqh1tzWibakNml7THvf6YDTnR3OHS0%2Fm%2F989Iz2mZqzymdLz5HOFZybOZ93fvJCxoXxi4kXhzpXdD66tOTSna6wrt7LgZevXvG5cqnbvfv8VZerZ645XTt9nX297Yb9jdYeu56WX%2Bx%2Baem172296XCz%2FZbjrY6%2BBX3n%2Bl37L972un3ljv%2BdGwOLBvruLr57%2F17cPel93v3RB6kPXj%2FMejj9aP1j7OOiJwpPKp6qP6391fjXZqm99Oyg12DPs4hnj4a4Qy%2F%2FlfmvT8MFz6nPK0a0RupHrUfPjPmM3Xqx9MXwy4yX0%2BOFvyn%2BtveV0auffnf7vWdiycTwa9HrmT9K3qi%2BOfrW9m3nZOjk03dp76anit6rvj%2F2gf2h%2B2P0x5Hp7E%2F4T5WfjT93fAn88ngmbWbm3%2FeE8%2FsyOll%2BAAAACXBIWXMAAAsTAAALEwEAmpwYAAAsgElEQVR4Ae2cCZxUxb3vz%2Bnu092zMTPs%2ByKiLIpRUOJTI0SNEgXXYViEICaQ67u5Jt5s7%2BXGjMknRnOjeV6Tm2gSgxuyaDSayKYBY4whQeMCKoiyCrI5M8zSe5%2F7%2FVX3aZphUBAw5nEKauqc2utfv%2FrX%2F%2F%2BvOm1ZvvMp4FPAp4BPAZ8CPgV8CvgU8CngU8CngE8BnwI%2BBXwK%2BBTwKeBTwKeATwGfAj4FfAr4FPAp4FPAp4BPAZ8CPgV8CvgU8CngU8CngE8BnwI%2BBXwK%2BBTwKeBTwKeATwGfAj4FjjUK1AQtS953PgX%2BqSlQF7Asec%2B1fffi%2FdCnwMedAjV7OXKv46%2Fo3XNYTd9Cl4vSCnH%2Bg0%2BBjysFRo%2BuC%2BX7FhowfNoP%2B588dWu%2Fk67e1m%2FYxP%2Fu3bumRGlFeT6uw%2FD79U9EAfto9VVAXb68Lk39gYGnzVwQdEqvyKYTlutmLNsOWOlE85J0w1uXbdnyfGzEiJnOCy%2FcnTpaffHrPXYocFQUtLq6ZaHZs68RmEODzrj%2BsVC08tJMNi0ku5YdcG3XzQbDJYPsSMVZ5U7p%2FDVrfpsQqLdteyF77JDeH%2BnRoMAR59B1y5aF6saMEZijQ8755iN2qPyzmVRr2nIzQXBsu9lMjktnsyk7EHRSiT3PNMV2jdu15vEmn1MfjSk%2Btuo8ohz6rrtWOl%2B96qz0%2FNVueaTjSU9ufSd5gWtl0oFAMGgFgrZEDUCMJyTCtdxUMFx2nBMInx3qWLFg3cuPxH1OfWwB8EiPtsiUdnhVzwTMs2aNTFVX11S%2BuWHT4sruA87dujOZCkVKQ1YoatvBqGWH5CNAmdAxzw6tppxo1TkdooOXHndcTaVkaYH68Hrjlz5WKXBEAC3OfDdgvmz6j6u%2BfM%2FNT1Z16v6%2Fdm58NxWpKHfsEMaMIF6hAO0BOwiwAbcdDDuw65RT0vGTdscuT%2FY9eXK1D%2BpjFY6HP%2B7DFjnuWglnHj8y9eijy6oGnHnWEqeqxydje%2BpTr728wWmIZa3SaMTKWhIz8DZWPJsmJXJI%2FMCTQEikm00FnbL%2BtmWfV97p%2BIffeGl2iy9%2BHP4EH2s1HBaHNmAeOTJlTZrT%2Bd3y%2Fkt69ex1ejrWlMokE04DemC0ImJZ4ZAViIStQFhiRokVwNvi2HBqCy5tG2%2BeETNcOHX1yHBJ56XHn3pNF59TH2twPPzxfmgOvRLOPB4wu1u2dOraq9eSrt16jYxmW1K7YxkntqfFWrF6m1VSgjQRwJAiH2TtiDPDqRGikTII8xwaFs07efZy6t6u657XsevQR1e%2F%2BCtj%2FfgHmfTsGk4zu3btGpw%2Bfbq1fPly93BJXldXF%2BjSpUtAdW7YsOGw6yvuz9Gsu7idj%2FPzhzLbFThzl193%2F%2BOyixclw51OadrTmOpYGnBW7UhZ2za%2Ba81e%2BobVo8yx0pksFjt8ViF2DZ6tDKa7NO%2BYpt0M5ymZJOlJwpQkD72nEEecVKx%2BVbql8YINq2e%2FeyRMeppwQGl2JUDlLliwIPM%2BkyPa7AM4lccfaVv5fu28T58ONelo1n2offlI8h8yoD0wuy07e%2FziL%2FFFo4b0Hr59VwMAtBwnaFtrdqWtta9vtO5fsdkaWBG2kikwY8CcBzaAzgrgAnMe1FYaIAvUeCsHaAGbOm0n1freKiu%2Ba%2By6Vx7ccpigPpTJLeStqZl8BltKd8tKLGUBxA4X1DU113YMBluOc117BIP947x5814%2FhDpt8tqrV6%2B26YsWVmHBqQ7iu6J5Hw%2FdTnPdwJMLFjyw7hDq%2FkgAd7QbOSQZ2pjmJDOPX9LzpW3Bp4YN7DU8HWtJAWSnsgS9DvIGUQH3xNJWWRkyc8RBdi7y5j1EHD6S9zzb4bCRr2XWs4LhnA84DmJHyinteJKNTD3wpIl9DkOmNgC98spJwydMmHQZftyECVPOgrjegvZCQ2%2BBRg%2B1tZP%2FNRCwV0Qiod%2FadngBYkeUtKxAYjIe5B8v%2F%2FjxMyoCgfhjrhv8WyRS%2BnPAd76q2Lp160GLfmo%2Fv7MIzEYkUh2AuTfr%2F%2BlgMPhsJBK9IxDIjlL8odSt%2FP%2Fs7qAnRmCWae6h3%2F6p58%2B%2BNHhpSVX1UDvRnOLIxAnBmTtENSfgAG78XiJrVZRjlhOYoyiEAjLe1jthEBAHHQE9B27bgBpgGzOeTHt5ZVGgzrqpULRqsF3W7el%2Bw6cO%2BDCgBgQGoMGg%2FSUm%2B9FQKPw4p5a3eQzOS9dk8hzAZ5Gdy1mgNwAQK5lEy3VCF8diyQuV51BBQn2Gkz7%2B%2BD3NLNKyUChkpdmVcNX6s3bt2gKn1Xs7zltw7syZMx12jU9cccWU3uQrLtfIe2kAPSWVYrdzs2jkx547KECPmHmXATPk6bLi3dDvu3XvMTTV2pqqKAGWgDnqBKxQyLbSkFey8u5swCothdsC4KABcw7UArLHsQXigJMDtAG2g6IoYDvMA4D2OLVNE4ZTR6sGOdHqpX1PnnHchwF1fmrT1MVkc6XEtjme93Cy%2F8QPGzaslTw7BD58JJ3Wab69XTkPAoBtK%2FSAR2hvU%2FtykApzD0RFnlfYnmMxaI7cceNmlrJj3NbY2LySKzF%2FC4Wypyp%2FdXW1mUO4tgC9RXH0mzFKE1dfex6wbqX%2F%2F%2Ba8650HHNcIOPMLcObp19V1f7r67MVudZ%2FhLpw5ALstjQSsTFbgCBhQi4Jp3ncHQlanUptD76wVkAJoPCJJUHIzHi4iy4donoX4AXyWwrlwL8iAHjVSv5V1kK85UawcCBiWHXfKtAsA9dpDlalzWC4Aul3lDgCJOwcJMxMnTrw%2BkUjcQZs9gcmt8%2Bc%2F%2BBc6ZKNYCt3GKe%2FOnTv3dprY0aNHSyzx6re5eRhcvrxOCigDcgt5bRti4XbuHIboYBXqKVZY80psNhpt7UP%2Fb2CHsRKJuBblLpXdvHlzgSkRVwAvoDbP%2FftvCNFHV30srldlD%2BAkxgSKx9RmPO0V26%2BMMtH3%2FJj3LeLRzKOjFm1%2BnGZx50WqQiEvvxdxoHqV%2Fr6A9sB86sS6nhv7n7%2BwV8d%2Bw%2BtjsZSVjRoxQ5w5y5yEIGkIcMoy15JyrWQkYoUcAGusGHlASwEMckeJTPI5QBOKm%2BSnOAt0ibGymhcXWZr5N3Nk3l1AnUg5kQ59U252ab%2BTpl4EqF8%2FFFBrHcnRpPqdf8vFFf%2FNE9SeO3fuCuLPhOBSxjyAmqwish7aEl9xENzyJonnNGAuLACGsk89yk8J6jGTn3vlr8rjCwDNZjM2IlMT4kQFyXDj4E5lXrhwYUKhHCAurtv0b%2Fbs2fFcau6v6s0rlQLbPk5j0njajknjAdRcB94XoKqLJHxdum0Zr2KvTu%2BdUAptoW1dM6Ye0afQd9WLN2OnfKA4v1dPPk%2BhjBd%2FQEAXg7ni9AufinYfMCQTb0olUQAlM3PVyCoJI68hZ6DfWVjkzAbeDHAjUUQNRJBMMJTnzgIywBaYA2krC%2FjFjV0hC6deYaHOPTPjAc26hmOAzEJwgTr3qAkNqEORir7INk%2F1HTZFnPq1QwG1aST3pwCWorjiR5MO4exXXlnbB7m187BhJ%2Fydd8PBPSJffvm0To6TGUxnK1l8CMbBTdXVpW%2BTT0KyIfiECZMvjESCf7%2F%2F%2Fvt3wDiLaC5DvFkA6dra2hNQFo%2Bnjmww6K6m%2FGalnXDCCdoReHIroXBIMnLWuEwpeQTOKhKT9KeZ0BBRIgfttPKOYlt7EvX2Vb2wnTWUWa%2F4tkArfq%2Bpufp4ZnQA9Tgolzs6dOjw8t13F%2B6rqw3RxlvkZoyU70t2dtBAhW1naM7evGDBnJdEJ%2FUTb%2FKp7OTJk6sTiewJgUDm7wsW1CWnTp1alkhkRlBWY1Ef1xAap%2FLU3SUYDA9n2KWs2fVYhlapvjb1mvxFxM3XQFAA87U%2F6ddx%2BOkLS7v3GxJINqUCTtZBaLZCrP0goIzAmgPsbOJ8zXFAx1CbuB7aGfG5hDgbAKczADuTFzeCmOeUGe%2FaMHoKCNiaBo2WWP7mWJjZMA2gwwBZC5rr1JoTN%2BO46QS39Mp7Ev%2F0gJMmXQioXyn6oIC8h%2Be8ycUaMun119feGApZg%2BjPcgh4PjUbDjNp0qTOmYz9bUTxS%2BlmH5RH1iF9z2YbGxqa11H2RbJKrh2KDP7ZZDL9W54vI07mSLNWed9TWzsNIKduZzKxurhVSstm7QbK371jx7ZvCUh6ptwV5A9lEN9wHdBZHn3ttTUJrhNUA56vE3c%2FXlcaUThhIK7Vm4VEvda%2FEM%2FtMOEw04Ac%2Flgg4H7toYce2uWN0wuxAg1DB76Z2TiHG5LVKkNzCeT2NZT74bx5cx6kEtfLLwW1oaGllrgpRJ9C2IPytK116iZofwXt3wDdXiDCGj9%2BfEVJSfmtdG8c5OrKOdrZ1NsTMN9K8vH0iyvGboxyP58%2Ff84NaicQCN9IHdPZUVkwqteGHpMfisWa%2FoV6W%2FHFi8XaD9A18%2BcHF0wYmTr12h%2F163LqGYvLe%2FQ90QbMobDl6NpnkplNos1IaohIGeQSqAE09zYkfrQAzSrQHKbpANwbqcNKZgA2XJ17pOpPnjurb0yeAnocAMsG1Dxj2YAXQRlCmLJl6w41HoEcOpnQsRA%2FQuGy7mk3s3jAsNqLli%2Bvexm2E2TvJsPhOcm0CBN0LzAYmXUwIMXSgekm55jQab0ymfSSSCQyVGkCMiAydvNwOFxJ3AjKwnEQxxhHPv1sFsFgFkFMQJElAneJm03fUF5R0SmVEgizAEg7kVsVDke%2B3rVrT2Vi0QQGl5SUdGptbTVKLQyA9RM6TgprPB5nJwg8n%2Bta7i%2FlVe5b0WhU4okWmelDJp2pCkfC0ykzDC554Zw5c%2BoBTRgumLzyyomjEGl%2BR7udITL9g%2BHg4GCylgynzgdqaiYNXLDgoe%2BKazKWYSzc%2B%2BjIaepHDvwZ05YsQ4wjQtlPoYM8Dr3OXLDgvk3Qq5XFN6qkJNo7FgMwlnUnsz%2BqrKyU9rzxZ0ug2VcAOgzC7sG4JwgPGeZf46Beh%2FLTKLsRf6PEJ8KCE%2BQLrqZGYJ6QOfOLP%2BvVfcQ5S6t79zvRyTSlkCCcaFgihm2FQWoY%2BdgB0Vr0Ej%2FEZfWcBGwJkFkRhXuTNxrJ%2BdKwi9JoWU6Ya9HmXkfOhGcXm%2B6weAjENsQx1g%2B4Pxtszgd1hE4FeF1wsgMiYAjrh7nQ1J2bfEv7DaodkgPz3o9yCwM75Ifl%2BRLZmIAHePXuAZq207cClqFMlsvEb0%2BnM9Mh%2FgiIfVYikfyNQKlyYHwb4LkhHk9OYds%2FHa74BvWUgXO5JBN%2BphN2OjU3Ny9LJmNfp66vICu%2FoQWQB%2Fwk2a4RQa5taWn9EmUwk4oFWvX06WpA8RmA9CkdoJgatY3lHAZPpyIWi79BH%2F%2BDPl1H3YvVLP1J0vfT6eItyiowSwQIhQJzKNNZ7WKmfJIunM2YPsH7bZTFeJWVtecmuOOFKofow%2B7jdmMBo6Qm3ovHYw8Bypks7LHsRreQPwETSAHintBrUr4t%2Bpd9QeDFpSg7SouPsf0ilYp%2FAXrNYfxqn408eD3AncAi3hVPxG%2BhrunU%2FZwK0p6C6VdcMblfXiSBKDlXzKHZSicYglQPGXZLdb%2BBg9xEYwLlLiKTnFH8AG8rXIT1DqD3WRhGpk5BhQw1lrE1ZBCqEZstHRSKm7OdGPEkQVpK%2FDtfHB4MXfKelSguL45tQ0AZARSqUnFqtEwqogETioMD6mwiEQqXd0ll0myV1uVMkcag2nOwyY3zQ%2F1lQlmruY7SJUOrnP3XvUhEBVx2JpP9HtaPe70GAMfr6bQ7kjTJrT2YoJ3IknO89FxouhYGKPXIul%2BfP%2F%2BhX3rpcME3OMxZKJLgyktLWzvNmTP3TeRaEenWfH%2BY89CiRx%2B9b7dXzgu1GABDKJlMLYH6E%2BbNM%2BY8Jf8MMD4OKMcBal7tSdR5O4thDSLAvwHm47QQKb8OnnL1nDkP1ufr%2FCrl%2BtPulZLfGe8M4hc%2F%2BOCDWyh%2FHUC%2Bmrm%2B6ZFHHlqdz69gEWUQX0LjVCeup%2F7IQdO0SEpdEWj4KrvP9HnzHkA8A6HTpz%2FQ2ppkpwgO1AICzMsROT4%2Fb969bymdOtfTv2f0jOsdDtvHE270dlRF7uXQdXW5mQOPkdKSM0NuwooE3ZA4LaZkODPcFi9GmQ2g%2BAFoDzEiPiI1YM9g3UB%2BJp%2Fyy5vyCuHqhms7LAbeDXeGQ6Ni5ry2LdmixaVZAfrIRSGqfRGXBlM57mwuOeUuOgVC2qp5Htr5xPFmi7Wswlg0xiPimARDn3A4050KzQEGk5VEsfmzGmDrLpdMqW2c19cFPMNNLftipY%2FGSqBQjF6g0zbN9N4zb14OzNr6lYoS9ibp9YBar8FMxmSkrjQKk2cP0uFqQgqUNXbsWIkE%2B7h82UfgXo1jx34pIq8MyLZ3Cig4RIkQypv7Sb3gxomR5Pprzc2PIZeS%2B%2FsL9VmeWk6hryio4u4PPIFcPaENmHMlLOtl0SC3AHnIO57ge2rLkONJgVl0q0MWlkWG%2FFu1cHJtWd8TmGWDV3EWA7S1m3J1itfl6DF6dL5ygjyRear7Dr2tU0pLyE6tKqsoGZiNJdJgKiiSSrSQDyPwyySn52KnLjcxWVFs02G9ID%2BLsPQN7p0DvGT63NBoir4kUfhl0TAyM%2Fc7xI0DuudBKG%2BjTNpBnlUBwLYyrBasJLqtZ2VJ0629bDDNIgjy3eIGfZeY61OdKH9EnbqpCiH0HoKMgAHhwxC1H%2B9o68bKYOUUpeY%2B%2BXSSjGIoQGdz1gqi8g6AiVWaMvX19YaVIbWGPPu0ly8fmnQvjkk174gd%2B8TvTbfK9NynTyLbs2fPzMKFiHxO9i24cQNljfLJaAZedtl0Fkayn5gCyigl3GDOypE1oIXYzSyyrozH6Ahk6Ao370TYCAhl6TCnl%2FX1LYOZ697QozOhNlnEmoxZJCycgrhGubxj94VHem%2FUY%2FJAX3VCTvQ2i7xTp2S%2BvCvRgvRcFvC13zzvBTR9yCmEEzLZrRu%2BlawuO7tDjx6d3CTH2yF4J6ASV66gzgS95RNBU61qFEj5%2FNWK0e9K5GQkFPAGlxWopRgqg%2BmDVnlOw5etOUNdOpgRiKGmATEROVADZIG5wKV5NuKGvgUwHwkIzIFUIBiJpBN7EtlM%2Bia6IlZ5RBRDU1fRH4ZgiIrJaC0mPO53RM7Lybn2d2prr96EyLg2nS6JNDa2fINiRlkUp6Hc71QNYNZumJ8YxTAcmIVCwFyIDwTEwLSCD895%2FdVJYc%2F8hg8oWUABzHm24e6EFZFIrBPtmZ0NuVzT%2BTXWyg35CeNVypgm0GInNPgpR1%2BsVu%2FqYIK1tWuuQTmcySJBxAhWRFGWNG5kIimWSXYigbLdRQcWTIVr2z%2F6p01DHjVlHPXShQKpJJ7uR6ciQLOFoBDmQb16xu0PX5QpCS4q79m9UzbRkooGA06pQA0AwwjU8JFcKwbRLCde1VQnAC2bdAAbvywisvXnhJNcfjE6gZpqDJjjxpphOK1lpxmAATEmOiN2sPUQGjYPkRRKIQyEkKk5pcmGok4m3oDBMDl%2B46oH%2Fny0wKyBMpeG%2BHpGRv0yp3W%2FZ7IwJdmfgBM9x%2BWl9Y6T7hIKOVgJlEeTmvgJW7IALVvyfpPK5BTqVJmj7ZC7XY7Mc%2FCkMTinJkWAk7lMMShjAXYIfVq0r9OOI0e6g3JmRJja2in3YASZnge6ALyLNGzIdgMUO4Xs3GsX7XTN4P3caBKXt81Ayf1I1jbPfu%2FiGvs4gbpumRu654arVgY2vXWRVb9zZ8cOFU4Fckg5QK5CzpV4582vFyYYcATwVZJeRr4OeIWOTHuyikhsYRFoIeiZbPqYxcShwxiRIiBwU0ZapAAhUMvsJdt3mIXi6AQHQLfG%2BckaZMtsJhGz0%2FFL1q%2F85dLRnDgdCZPdPsRo5wX5MThv3v2rsIMOSWfSvwbM9CQURSMfQoiVINWKfxWl7IuAWZYJOFmdgPORgldwbdv9YDCBzIbUmOO0WqQtAFUiVBIQi%2BYB3rETZ0YCTHag1Bh58st%2FmqGeh%2F%2FMww%2FP%2FXNNzZRaxwlPl0WCPALzrVhjOMRJnYuSfAnVLUY0EZqpXjbXj8aBkP1d3Rg7rdt1P541cuX3H1zymXCps6RD125dgvFW7nBYaHKsHfqZ01ty5VsxZ5QBXoeRxDgt1EmiuLRcC17HJexZkiyM%2FC1mLPyGsWNnAXEAeTmLNyEATiN%2FcSPaak1lrZbWlNXUnLBsQva7VK%2FuHZ1ApjG%2BfeOei9964afLBGbs0B%2FABUxXiv%2FYlDN3LHR7DqAWANDc3J2e7b2vUVxIZiK08WhLS%2BKrTNZZaOlBJn9zJpP6f4zteSDRBCjWzp%2B%2FIAkI7JtuuklyZo4QxRUd4rOOHelUwWGOLfS3EFn0wHZsFlCXLqsDW7dWK28WvHIIY1UJ0PJw6E3z5s3fOnHilJ0Aup%2BYCFaMLVhlXiiqqv3HgDtBXBsxA0tP5nkOQr5ZnJH6I7keKDYn7xenH63ndgGtxnRVNH%2BZ%2F6VfLVpxQaQ0srCyc%2BceqdbmVFkIw7DpreToHF1T7J7izgJ5zkvUyGmrCBCSwyxz6MvUmm9lzcJlYbAyYjDlZvJKvWlOAnCEiBLuhFTCobt1KrWq%2BnSwqiqiVklpOF3WsaOTSscSmYbdl%2F7n%2F%2F7yspm6CXj3LM33obqMtwh0GtemsOEoAmSbePMKmK8rKSm9SVdAATPAsK%2FLixb7ZCfegApABw4X1GKtRavC5bjdvPbv319z2GYxi9vmhE0WoA5ZzDiy2eA54bAjc6E4KufTNjf3bJe74S%2ByMPvlQG6NJ%2F9P8LLclGAjz0rxRGQqtKFdiv2zu%2FLnFkH6deUfN25cKTZu3etQmxl4mlk45CvqunIePXdAQKvJWVzmF6ivHTny5adeffuiYKJlcUl1ZXcrEYMaSALkMZ3O968KkUC37eRySNA48gfaRLeyopPYo1uZmmYBmbyoQJbDCujL51odyxFp%2BLmDMu6IlCCPRGQvDCEvY83AJMxxd9Rp3lOfTCeS47895dwlo%2FnJsbvrxrQFo2n%2FwH%2BklIpDWRXcpjvVdREqs1nsJNo7cg75PDJv3oN%2FYZLbrRvteqjGDZhlpWALt36AjfSb1As%2BjLwYYypXsVjnPvLI3JWAWUQRSXLEyTXzof7CeVWukjMdc%2FVUpq62FekgiK58UTbt6uqK5VqwjHUkI%2FyaFqBEAUSi5R4nZiz3gLnL4bSq6oLa2kmzMCfeBTAZR85xMjicU86ZqVSQk8L7dzBe2tXROMq8a59KLvuJJ54w90d0kgoZJLYwfVIS7S5ePUc7fF9Aq3EP1OeffNwrG5uazmuMJ5ZWdOyA3qxvpRA%2FcCKyLCCycMRzjMMofQlAy38rTnoLDykYVhk7ZVcGWV4etEqx45VgjuNM3dwN0YmjFFfp2vmJM%2BCjCY65o86OXbviTdt3jr%2F5mtOX6vfz6urMT46pCwflAB6gldiTxd7pngzH%2BhMtgUG1Z9QJgZoxuVyIuXo4oaQl0wftxl4jAP0euNaFyMy9NanYdE8iziSrLgGDNi5Evvx3uN9XkSlv88qywHVzJ%2F%2Ba4%2BB706RKBF1w4OXJyOqhdDq5lUDKVgnPUbLdjKjwU4DYN522%2F%2FTII3PeJN0od9Sv08ChtL%2Bkvr5pBeBDDLJH0Te%2BmNEHALKkZG9UvaOxj7N4f8d9kXuj0ZLP6cCI7v2UMhfQ1vNiSLiTWZwXc0mp8549e2QR%2BRx%2BGeP%2BtE4eAeypHFXfS7n78McBZl1zPVF1aRcj7koW1zyOzZ9RZd74mYM8E1muaM8Vxs44PUKZNGz%2B3EQ2N5%2F0zk2KfdMV%2BYGAViaBeqXrOv1s%2B7XdTYkL4sn4omh5tA9JBtTqVZm0PCZTnTX3NgCIwxF4N778jsCBo0y4hG%2FWq%2FknBR8projDG7ukEVfE5cUvBeqWZDYdd8POrvfq4wMrM%2BOuv%2Bj0p%2FTDNvqVJvXtYFzReT9mqqj6GNXEQrB9xq%2B%2Bi6NwQtWg42QmdSJ3G2iC3SQWy9tlLWvuXCwqltWXSRoDUU%2FkfEX1ACa7nLAf%2FjNKVxu4H5FvpTeZ1FWJyU%2FxtBMzBwbeXWXFsRiwMgQ7Kg%2F9kL3XOI7Nt9OfX3Nc%2FH%2FF%2BTA2XE5%2FL0f0sfbsaRQ4v4cfBCgp12wDNC4hBS4rKysfxeKi3pzEAMBAsz1dip1EIcoY%2B3hTU8Ms6EGR4FQWldyVAqIa1zhUHjBvZ1H8RXHJZBixJD6OhXOG%2BkP%2BqbSjsuQP0oeWxWQrp7%2FoGXZXwC2aAGh%2BJo6xEUeetOhVdKNQ%2BLGqc%2BmBUCqVCCvdczAgbhvCN8NhMQzSUyYdHQjk5dw%2BE%2BpFtheOtG0D6k6Aeg%2BdQ%2BdYBkftTt4Ud6GdCsSNKMpdFWKCqKSWxbV150NOd4pYeoZz55ad2faNiJJEiYwjO7ckMlYzvrE1Y%2B2J84wCneDmyO76HfH6HbsvuXn6aU%2FrxyBnjTl4MKtttk7DCWj%2BqZaWJo25UTZ%2FJnYfDkB8hq2YuxZZ7xj3RSbmPlYq%2BdxVqovttC%2FM4XImBIS4ryE7%2F0zxxY4rm0MQWxZD9D5YAkT8S0k33InwNwB1o%2FIzp88qHM2hi0L6qbwchwd%2FAtgrSW8ATNyZyDksCDfGYi6HR%2FYk0mRLZk4bNxH%2BNXdAkpjX0tLckfd1VVXl3%2Bew44pYrGUG42YnsSTX%2Fh2l9c4FC%2Bb%2BnWcpqxq%2FK2DjdUFiGpz2McA7ieQT8fTB1bHDBsb7DGXv4474ZsnQCxbMbuDq7GdtO%2FEN6DUWUEuscOjQO%2BTlE7fUd3jvhTl6uejkumktOg7SAk8zfhatztHsPyhuXzu8%2BxA0f5m5iXPwtEHpANjsjtj6d3FF9acctyNucTHCtQ0di8sr%2FyE5uIIRMwj5stjdgZeTRv%2B%2Bjtb3cwk0yUa%2BCNjekHA374q7G3bE3HXbWt033ml1X93Ykly9LeM%2B99rOlt%2F9ad0YdVLy%2FCF1dt%2FM9r6vH%2FjWbn645DemTZvhzpgxS8rUPNUiZUiWDylRgNMwCfI9PHnyNO7%2BTuPwYfIvlU%2FAUdjGFbdT%2FNwmm%2Fa%2FnNNppK6vzpgxQ9v%2FBzpdcPKOv5VZgGxbqG3fdNysu95TpkzpUJzXK1ucX3WTrzdyep%2B2R%2FHcbammjNndissU1VkYV1Fc8aOX7oXFaXreJ36fl7Y5D%2FQOMrHO2RLEpAwsxHfDG%2FHDsDzxM%2F55zlhCaKltYzoljHGqKd8q7ox1o9U8Z1Mx9Pgd7zW0hhONF0%2B6YMhy2cZlTvTq%2FJChuFLbbrRbFfnENQv5ZdqTcgVQv8u2%2Bm3GLm76HJxwTFsrSW3tVDh0Fu7jdheH5sDsJsxadQLD%2FPnzszLlqVHaEJH2EkqROOILwOdZ%2FfCc%2BdQJTl6Q55Wg%2FLl8Lv3dWzeLC7PkXuuE8vEufyA6Ysrct4zXsAfk4rZVX3tfvygv32S6xWl7%2B7iXpsTtN34xBH3UoON60ovHbrqierw%2BtVf%2BoCbXq6A4LAI1ypO1CN8Db0BdnK%2F42ZOLpShKPoZrm9NCJA7sziiNeOL4zCri7NzV2PLG%2Bp0XT%2Fj0oGeWAeYxhw%2Fm4q4cyrNo5Hq2bgA9BkD%2FQYDOg%2FpZRM%2F7GZFsuRxMuEMIr8UPkDzJ9o01IHOafn9DE10MiEPpRHFeTaqnF1CfJt1bFKavxXl5NotAAGsPAG3yeq82u0CozUJtr26Tv7g%2F0gdYMMULzuubV%2FcBQ9WDLwbxAdukknbTFPmhXRGoj%2BfS%2F%2B%2F5XueE7S2JVDLD93%2FQmDk3Bywitz7VsgRcwtxvz%2BQu%2FwvE4tScn0ieTllOqfPe7l3NXcKxz44ecdyz3g%2FbfOhOHrmCBQKi5N0IWG8SYOUF7LzJC6UyZBaqlF44M2YvdzrXQ%2Be3M1lHrmdHviYzVok0TU1JLFqJTSwcxtI%2BiD6o%2BYMcu2nz8sundsWaUbl799b177OTHLDJwwK0avVAzacIfZpbEkvjkciJW3Y2pppTGacxiXIHeptBq741lPVC9190YS4q8xz8PEwo60c6E0hx%2BdexYo1bI272ihkXDlhxhMSMAw7%2BQyQUg%2FrTcOEZUOAU5plJz%2F0kASGmPvsdwuew0f53%2FmplodyHaPMjLeLtIvrFKBS322k8hmj1Xawiz0p290QBgVS7RDHnly5RUlKhz8H65jsNHVwsGfZwRLNxcPxWiRQCar4dfRcIR7cQg%2BqIm3IVB0IomdZGLkh9g13tLbVJOSMiUcZ8MKuy%2BXaLublp8rABrVo8ULfs3NRzh9NpUUu49OQt299LtWayDr9FagAtYNfj%2BTgyb9HggCXhGrm5Pu7y8W2lk96%2Bee3qB54ea736f97Wj0GO1K80ffycRzOzlUp5Kivb05XvJo0JjousrZiy3vUOPDyAfPyG0W6PCgsPQD8BoHWkfXO7OYsivTFy6xBDQfaPLPQfAkoMBhY%2FtZBtRBI7FVv8D4uKtPuILfwlrEM3YjJ9vN0MRHpt5dML%2FfXyH7TZzitQVJEqk8d6ZwduueuuyrIufbe%2BvGLFpcl%2BQx4LVVQOb921OxVH%2FNDBSgKv7wZDFDHGQ0rqHhIf2qY6VHZwmrdvW5t5%2B8VLVgPm0dPrqgAzsqepX6tQXgAyICL8RzrThzynyTzxxN06HdvQtkMeBzsSMnPbuo%2FWO2DJc8CJFwPmcyB%2Fq04I0f47Bt3AFzCTNWBy%2FsHw4YO2rl795kSm5V3yfZb4B%2BgTYHTPJHyeg5rven0EpJMA9u8Q084lTodCp3OUtQKbXSs2%2FH8jbUs8Hv1ONJqYgokQU2FmTE3NVL5kSZ9O%2FhqgtWb79kF1XbqsPY38o6j7Tuo6m%2FhzMK5hgix87W7m5WAB7YHXAJiGZPbZ6ysqgt%2BcNSsw7frr%2B54yatR7d%2Fzwjqv6jat9ONShanh8525uxmVDSQAt%2BTknQ%2FOhLbIz8elMpMrZs%2FWdNW8vuu%2FKdU%2F8%2BN0Bn57cb%2FnsOslr6puALAWj2BcDnKR%2FDMjz8p2sIAUFTZ2RO9B2mEv9%2BP%2FF9s0FJkP7pziZmw7fuQDW8h1IPZNbPHe%2F%2BOKm2mjUvQUgb2c0%2FLSau0WjAtDDAXgfrpV%2BGU69ixuSTyeT2dsA6jUsjslkuQR%2FW8B1z%2BEI51xEmW%2FzXldSEv8eyvQmnnfjueCV%2BQF8sht26h8Bgdu7dl2jD5ge5OzgRsSSbbTxH7RlwCz644UJ4%2FazR3oJ%2BbAtgMVcI3h9aaBQPlySTEZC0WjkheeeC42b9LmOd%2Fz4lpaypuYl1YNPHmVVderZ0BpLpzLZgA6rkDoAtVES01akMrRn65Y16x75r%2BnrFv18Z7eRF3ff8txv6Jw%2BqdXHXGmBmtCAW8%2FQ1nj162PhALb72muv7eMV97Ho3CF2omvXCfxm9fLsSSedPJii3fRTAsOGnXw7XPUmDpAeGTr0lD2cNl%2FKxag%2Fkz4O%2FwXug8xdtWqVucMxbNhJ%2F05ejuctDmnc3TAvdm9rDD92eSsWLk4i3TtRkG%2Bnzl%2BR%2FiS%2FVbKQ%2BGuIX0w%2B3cPeDnBns4huQYa%2Birx%2FIS%2Bnpfb53C25Rc%2Fk%2BzH%2Bevr2AO3IokKw1wkg7%2Bc0MfLikB63VKg4ldU37iUklmXj8XLHKat44qF7IyMvGNv3V%2Ff9PDN3%2BsTrd2%2Fc9GqwtCKUTrlpLB18WMKH%2B1gz7GhlqGnb5nUv%2FfQb%2F7ruqdkt1cPG9Nu%2B8vf69L1D2IrzQ7zxMtVNG1pEWnhq0%2BuD1x%2BvfyT57vApsNyrguNq682JE68eTVjGhwF%2FyCVkTiZ8l6kYSLyumf5VopfSEFe6IxJw3J%2Flo985N8yfP%2FceAHoaMNnC6WEpHLtzOBy6V%2BIC2TsT3x%2FufSc7wV26CAU3%2FgzgfpUQMcParC%2BDVC%2BYHcqfN82jZZ1BuKe1tfz3eqdtDxf55BwoCy8HePBAI02TlcdNT3NJxnqPcDcR7yVpBB%2BzUyn9jkN45dKFwSGjPtX7j6%2F%2Fzbn7vKHfbnjrrdXh8o6hLD%2FEw2e0gWBJR6dxy%2Fp1f6q79ltbX30qWz34zH71q5eFMXmJ40twTtBTbkBb9byiWJitSCufY19LsrX64i0sHn13JCgAtxOjQHSwT%2BTvi5gi%2BakIq9T7uhyAXkPaPOIG47FgwHFK%2BB1lHJ9XcnNR1z4CG%2FQuBzB1IeolOO4g3hL8clQL7zqEa6qqKvscwL%2BKvfp%2BKdbE9yD%2BBerX6aeYGItk6gCCTyFe3Iv9nwVigL20tLT5ZqW39yOXH8ShVa49JzCBYXN3X8DW4Nbziw5vshrXMsj1r6%2F44%2FoTzjg3uRXwP%2Fz5iTdte%2BWlZ1sb9qRa9jSld7zxyso%2F%2F%2BdXvvveOy%2Fv6jzsXLf%2Bjec3YhlYz32AtSoPkN9CiN5MnQKzFhBRZpcg8N3RoIBkUerVB69Ya7L8%2FIL19s6dJy4j7h0Uu98CqEUA6lmsFfcAXJn0zCWlbt26GfEP0I0g79tFX4wrnp8jyCATB0aQ%2F1Xesc2HniXY0tDQ8jhXB%2Bawyf8gGm0%2BgXSH1E1c45WFo5LrAvfBtx6As99B2vnEnYDYM4t21P4V2hGkcBOaBUW6cWa78F4OM9TqljLHxbSYQG6t%2FeszwRE1M8tfWHC3c%2B81o58%2FZfx1g9xAKPDKY%2F%2F1NsktvS%2B8Nr1l8a%2FEdVO534pQKd%2F9IygAdxags42NjYO4HBVJO%2FZbOdvw9LGBQGIsStsWZNql6hu36b4eizkb9dy%2Ff38xNg6WrDnEP6hnORZGiLo%2BX1ZWsqalJQOYbZPv0Ufv3wEIqdO5BPGCjwHmzGHBTIAztwJQ%2FQDlTi53XUQfRlPmDt3ZlpiSSER%2FoHq53%2F10Y2PrZalUiTHpUkbM9ag5rUrPH2ojXjmFvvuIKeBxutqayXcCsN%2BoeS%2BuTVeK58d79kJlLX5uU9QyVqG2kXD%2FJfjvK542jbhRlKdQXzv9KaR5%2BY8kh1adkreL3T4N8kW5EXH4ELftqvLk9OKy%2FvNHSAFt32qOD%2BeeCdgBo4TJ%2FIjnm8StQf3UQF7G9n6sUXPozbe5glp8GUl1SWFUGcQZgwOZ1%2FAmr%2BrUtU%2Fd%2FUCkeIDrzU%2BrDO1JPwrqh9zzbaZVD15l1UfvApWevfZ59J1Pgf0pUGBAgMcwn%2F2zHNWYQvtHtRW%2F8mOHAtrWP2ow50UJH8zHDsz8kfoU8CngU8CngE8BnwI%2BBXwK%2BBTwKeBTwKeATwGfAj4FfAr4FPAp4FPAp4BPAZ8CPgV8CvgU8CngU8CngE8BnwI%2BBXwK%2BBTwKeBTwKeATwGfAj4FfAr4FPAp0A4F%2FgeS6v9q%2F27IowAAAABJRU5ErkJggg%3D%3D", + "title": "Lightbeam" + }, + { + "url": "http://www.trulia.com/?ecampaign=tiles", + "bgColor": "#53b50a", + "type": "sponsored", + "imageURI": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHAAAABSCAYAAACMhFB2AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyNpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw%2FeHBhY2tldCBiZWdpbj0i77u%2FIiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8%2BIDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDIxIDc5LjE1NDkxMSwgMjAxMy8xMC8yOS0xMTo0NzoxNiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjNFQ0FBQ0YwQzcyRDExRTNBMkM5Q0E2QjkzRTJDN0NDIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjNFQ0FBQ0YxQzcyRDExRTNBMkM5Q0E2QjkzRTJDN0NDIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6M0VDQUFDRUVDNzJEMTFFM0EyQzlDQTZCOTNFMkM3Q0MiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6M0VDQUFDRUZDNzJEMTFFM0EyQzlDQTZCOTNFMkM3Q0MiLz4gPC9yZGY6RGVzY3JpcHRpb24%2BIDwvcmRmOlJERj4gPC94OnhtcG1ldGE%2BIDw%2FeHBhY2tldCBlbmQ9InIiPz7170ilAAAGVUlEQVR42uxba2wVRRS%2BffEQxKaKRvGBUaMomoqJ%2BA6KysMQa0hEo1RERXwR6A9DxGiN%2FAANhpiiiO8%2FWAkImIpFEkUbDYIKtYISUXmEgBaklVoLtF2%2Fk07NMpzZ3Xt7H9zr9yVf5nb3zOzsfDtnzpzd5nmeFyOyF3kUkAISFJCggBSQoIAEBSQoIAUkKCBBAQkKSAEJCkhQQIICUkCCAhIUkKCAFJCggAQFJCggBSSOM0DM%2FuAMcC243%2BtCK1gPvgie8z8dl7XesZjusB0ILgfbwWawEsxLRydvBfd4wTgMzkqkQ6hTCF4Fnp3jAq5SbB9JdQdHGnGiYk7EdoeBM8FasMXULctVAXHsJMd4fZbKzvUFd3vxY3iEtjcp9XJZwH5gh2K7OlV9ywfLwTMSqPsUowYrIszL%2BxvFe8qpt1MpoDYjtoLjQQlaZKYtUWxG4cnqQ9mOwRTwZXAH%2BD04GcJWp9I9NFrT%2FVewWLFbpLiGK%2BhCM4tC8GTr2Bw8MU2K7SzwATNru3Fqhge2F%2Fp6OIe2K7KUSZTeH2wHG8FtuMdDQQJ2ggW%2BY1sc%2Fl1m6l5rveywOjAbxXW%2BQ%2BcrTc1Wnt6laL%2FK106NuYluLML5xTguD89d4H3GtUvUJ30ol%2FOOuoIHcX6ba%2B%2BLoka53xEJijAfRal1uArtLXXYX4hiGngHeLpicgg2dShfRRsfaA3sslzDPQGbfHurcYlls8JLDPOtdpqs8wtNiP6po%2F6kgLqC0oABL9Ya7ME%2BMGrEKlmw58EjcYyT7DEH2EHMBqvtCnFNSt8qwCLf3xJx%2FZQm73KBieRuzKFgZx74tPGCUTFGvJXxRP8J%2BJFlNAz8GEZDzZNSIk8Kfj5r2a3GlO5I081eY1xMrqx1N6CYoZyS5ewrcJloAO5XbG4B7%2FSvgSvBV0D%2FrLsJbMCF2lC6tgrVjmObfH9PBU%2BzbN5XZu66kHvW%2BnAQ%2FB08MQs1nKYcq5eHFJPiN3%2BQJmufbEUs24ePGn8YVse5Zv3hcLNJ2UY41rFu1IHX%2Bt2IPzebDWugGT8vKJ6wsjutSk66KObzv6LyhDieoDczFL6La5lgu2787WWR%2B%2Bxt3KQfzbiHza7sDur8gp9DfYeLzG5gR6Ex%2BhxGDfh5aYQ%2BdBrB040msx3oiGUxzJ4u3mSGds8DYlYEtABcGKGxD9GJnRm498WOBEMuBDWSEBkCDgJLwFNMgqXEUNtPF9gCykb4JfCEkOu9kaH7%2FDLHRCs0CYnHlY1%2FZOT7prZEdctD7CUTU5uhe96TQ%2BJJZP6FmQylPWkr3%2Fp7SYj9ygyuQakKVPqkWTwJYj4Br05Ge3YWYI3k3sDeLgFzcAlK9z5S9oCXKcdl%2FycvfiXilCT2PrOR%2FxNcYdbIYAExu%2F7BE7IeP693RJ%2FZug4FzbKL0tyXcuXYu%2BBDGP8jjlkb2YUK6hy29bjAX1kglvbqJeiLgzFpdJ%2B9rP2cQESbHiCeBJXnxiPgRoftxiTdx8AUj5OWP7zdMThnobg3jWun5q7bQrZHk4OupQnY4LBtSKDD%2B5Rjj2HgBvsGscDsg5KFH5VjE3GNqVbKbYiJqKOsgdoAj5MPwuLs2wEz444SFe3c5njARqN4wdFWsXN%2FYj5KtTE6AZcxLyCn2WLylp1SWvW0fOaIiNecEnDNvaBknb4z13XCarPKYSYvW7fLN7U%2B28BcKH6vUc4fBJ8EL5fPVMC7wWUh%2BegN5gW6Ogg7lQoXJyDg8IjJ8WQK2Ff5zicM7SECjg%2BpXxaHgGO9JCLfMQ47lGNxp8%2Fg27%2BOdb0%2BShskkkZxfxxVdsfCc7uyfdqSpP6tQvF6nNUqweaoa6Am1gFcuCXBPssiXJ1mEeUbl4lgWJ9%2FBm8GvwlpTz4wGgduTlIX5VP7uRGSE%2FI%2BtgLXfw7lM2rfHG5olJUpaEQjC3oYQl8Z6%2FrWVN54SCa91WxS5clej%2FZrfbYzlcjrHdhsTyBl9QQ41uz3JOiQT0G%2BNZ7hLbTZBrvzjOB%2B0Sod24AyI%2FqZsa6EsszgubDfamwmoRhsVa3F%2BXVKe5KkfhQcCUof%2Bpkg5wdQZuprqLfL78rNhBhkZmQN%2F70sy0EBKSBBAQkKSAEJCkhQQIICUkCCAhIUkKCAFJCggAQFJCggBSQoIEEBCQpIAQkKSFBAggJSQOI4wL8CDAAiBYkeQwTfOwAAAABJRU5ErkJggg%3D%3D", + "title": "Trulia" + }, + { + "url": "http://www.nytimes.com/", + "bgColor": "#0093b9", + "type": "organic", + "imageURI": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALQAAABWCAYAAABmQby7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyNpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDIxIDc5LjE1NDkxMSwgMjAxMy8xMC8yOS0xMTo0NzoxNiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjg2RjIzNzdEQjkyQjExRTM5QkUzREY4REREREZBNjBEIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjg2RjIzNzdFQjkyQjExRTM5QkUzREY4REREREZBNjBEIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6ODZGMjM3N0JCOTJCMTFFMzlCRTNERjhERERERkE2MEQiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6ODZGMjM3N0NCOTJCMTFFMzlCRTNERjhERERERkE2MEQiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4HaESSAAAWXElEQVR42uxdC1RV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", + "title": "The New York Times" } ] }