diff options
143 files changed, 9346 insertions, 599 deletions
diff --git a/camera/CameraParameters.cpp b/camera/CameraParameters.cpp index c51f265..af091f4 100644 --- a/camera/CameraParameters.cpp +++ b/camera/CameraParameters.cpp @@ -470,7 +470,7 @@ status_t CameraParameters::dump(int fd, const Vector<String16>& args) const const size_t SIZE = 256; char buffer[SIZE]; String8 result; - snprintf(buffer, 255, "CameraParameters::dump: mMap.size = %d\n", mMap.size()); + snprintf(buffer, 255, "CameraParameters::dump: mMap.size = %zu\n", mMap.size()); result.append(buffer); for (size_t i = 0; i < mMap.size(); i++) { String8 k, v; diff --git a/cmds/screenrecord/Android.mk b/cmds/screenrecord/Android.mk index b4a5947..d77fdb6 100644 --- a/cmds/screenrecord/Android.mk +++ b/cmds/screenrecord/Android.mk @@ -18,10 +18,14 @@ include $(CLEAR_VARS) LOCAL_SRC_FILES := \ screenrecord.cpp \ + EglWindow.cpp \ + TextRenderer.cpp \ + Overlay.cpp \ + Program.cpp LOCAL_SHARED_LIBRARIES := \ libstagefright libmedia libutils libbinder libstagefright_foundation \ - libjpeg libgui libcutils liblog + libjpeg libgui libcutils liblog libEGL libGLESv2 LOCAL_C_INCLUDES := \ frameworks/av/media/libstagefright \ @@ -30,6 +34,7 @@ LOCAL_C_INCLUDES := \ external/jpeg LOCAL_CFLAGS += -Wno-multichar +#LOCAL_CFLAGS += -UNDEBUG LOCAL_MODULE_TAGS := optional diff --git a/cmds/screenrecord/EglWindow.cpp b/cmds/screenrecord/EglWindow.cpp new file mode 100644 index 0000000..aa0517f --- /dev/null +++ b/cmds/screenrecord/EglWindow.cpp @@ -0,0 +1,146 @@ +/* + * Copyright 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define LOG_TAG "ScreenRecord" +//#define LOG_NDEBUG 0 +#include <utils/Log.h> + +#define EGL_EGLEXT_PROTOTYPES + +#include <gui/BufferQueue.h> +#include <gui/GraphicBufferAlloc.h> +#include <gui/Surface.h> + +#include "EglWindow.h" + +#include <EGL/egl.h> +#include <EGL/eglext.h> + +#include <assert.h> + +using namespace android; + + +status_t EglWindow::createWindow(const sp<IGraphicBufferProducer>& surface) { + status_t err = eglSetupContext(); + if (err != NO_ERROR) { + return err; + } + + surface->query(NATIVE_WINDOW_WIDTH, &mWidth); + surface->query(NATIVE_WINDOW_HEIGHT, &mHeight); + + // Output side (EGL surface to draw on). + sp<ANativeWindow> anw = new Surface(surface); + mEglSurface = eglCreateWindowSurface(mEglDisplay, mEglConfig, anw.get(), + NULL); + if (mEglSurface == EGL_NO_SURFACE) { + ALOGE("eglCreateWindowSurface error: %#x", eglGetError()); + eglRelease(); + return UNKNOWN_ERROR; + } + + return NO_ERROR; +} + +status_t EglWindow::makeCurrent() const { + if (!eglMakeCurrent(mEglDisplay, mEglSurface, mEglSurface, mEglContext)) { + ALOGE("eglMakeCurrent failed: %#x", eglGetError()); + return UNKNOWN_ERROR; + } + return NO_ERROR; +} + +status_t EglWindow::eglSetupContext() { + EGLBoolean result; + + mEglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY); + if (mEglDisplay == EGL_NO_DISPLAY) { + ALOGE("eglGetDisplay failed: %#x", eglGetError()); + return UNKNOWN_ERROR; + } + + EGLint majorVersion, minorVersion; + result = eglInitialize(mEglDisplay, &majorVersion, &minorVersion); + if (result != EGL_TRUE) { + ALOGE("eglInitialize failed: %#x", eglGetError()); + return UNKNOWN_ERROR; + } + ALOGV("Initialized EGL v%d.%d", majorVersion, minorVersion); + + EGLint numConfigs = 0; + EGLint configAttribs[] = { + EGL_SURFACE_TYPE, EGL_WINDOW_BIT, + EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, + EGL_RECORDABLE_ANDROID, 1, + EGL_RED_SIZE, 8, + EGL_GREEN_SIZE, 8, + EGL_BLUE_SIZE, 8, + EGL_NONE + }; + result = eglChooseConfig(mEglDisplay, configAttribs, &mEglConfig, 1, + &numConfigs); + if (result != EGL_TRUE) { + ALOGE("eglChooseConfig error: %#x", eglGetError()); + return UNKNOWN_ERROR; + } + + EGLint contextAttribs[] = { + EGL_CONTEXT_CLIENT_VERSION, 2, + EGL_NONE + }; + mEglContext = eglCreateContext(mEglDisplay, mEglConfig, EGL_NO_CONTEXT, + contextAttribs); + if (mEglContext == EGL_NO_CONTEXT) { + ALOGE("eglCreateContext error: %#x", eglGetError()); + return UNKNOWN_ERROR; + } + + return NO_ERROR; +} + +void EglWindow::eglRelease() { + ALOGV("EglWindow::eglRelease"); + if (mEglDisplay != EGL_NO_DISPLAY) { + eglMakeCurrent(mEglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, + EGL_NO_CONTEXT); + + if (mEglContext != EGL_NO_CONTEXT) { + eglDestroyContext(mEglDisplay, mEglContext); + } + + if (mEglSurface != EGL_NO_SURFACE) { + eglDestroySurface(mEglDisplay, mEglSurface); + } + } + + mEglDisplay = EGL_NO_DISPLAY; + mEglContext = EGL_NO_CONTEXT; + mEglSurface = EGL_NO_SURFACE; + mEglConfig = NULL; + + eglReleaseThread(); +} + +// Sets the presentation time on the current EGL buffer. +void EglWindow::presentationTime(nsecs_t whenNsec) const { + eglPresentationTimeANDROID(mEglDisplay, mEglSurface, whenNsec); +} + +// Swaps the EGL buffer. +void EglWindow::swapBuffers() const { + eglSwapBuffers(mEglDisplay, mEglSurface); +} diff --git a/cmds/screenrecord/EglWindow.h b/cmds/screenrecord/EglWindow.h new file mode 100644 index 0000000..02a2efc --- /dev/null +++ b/cmds/screenrecord/EglWindow.h @@ -0,0 +1,84 @@ +/* + * Copyright 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef SCREENRECORD_EGL_WINDOW_H +#define SCREENRECORD_EGL_WINDOW_H + +#include <gui/BufferQueue.h> +#include <utils/Errors.h> + +#include <EGL/egl.h> + +namespace android { + +/* + * Wraps EGL display, context, surface, config for a window surface. + * + * Not thread safe. + */ +class EglWindow { +public: + EglWindow() : + mEglDisplay(EGL_NO_DISPLAY), + mEglContext(EGL_NO_CONTEXT), + mEglSurface(EGL_NO_SURFACE), + mEglConfig(NULL), + mWidth(0), + mHeight(0) + {} + ~EglWindow() { eglRelease(); } + + // Creates an EGL window for the supplied surface. + status_t createWindow(const sp<IGraphicBufferProducer>& surface); + + // Return width and height values (obtained from IGBP). + int getWidth() const { return mWidth; } + int getHeight() const { return mHeight; } + + // Release anything we created. + void release() { eglRelease(); } + + // Make this context current. + status_t makeCurrent() const; + + // Sets the presentation time on the current EGL buffer. + void presentationTime(nsecs_t whenNsec) const; + + // Swaps the EGL buffer. + void swapBuffers() const; + +private: + EglWindow(const EglWindow&); + EglWindow& operator=(const EglWindow&); + + // Init display, create config and context. + status_t eglSetupContext(); + void eglRelease(); + + // Basic EGL goodies. + EGLDisplay mEglDisplay; + EGLContext mEglContext; + EGLSurface mEglSurface; + EGLConfig mEglConfig; + + // Surface dimensions. + int mWidth; + int mHeight; +}; + +}; // namespace android + +#endif /*SCREENRECORD_EGL_WINDOW_H*/ diff --git a/cmds/screenrecord/FontBitmap.h b/cmds/screenrecord/FontBitmap.h new file mode 100644 index 0000000..2b94f35 --- /dev/null +++ b/cmds/screenrecord/FontBitmap.h @@ -0,0 +1,6571 @@ +// auto-generated from Android default system font at 24pts +class FontBitmap { +public: + static const uint32_t width = 256; + static const uint32_t height = 204; + static const uint32_t numGlyphs = 95; + static const uint32_t firstGlyphChar = 32; + static const uint32_t maxGlyphHeight = 34; + static const uint32_t outlineWidth = 1; + static const uint8_t pixels[]; + static const uint16_t yoffset[]; + static const uint16_t glyphWidth[]; +}; +const uint8_t FontBitmap::pixels[] = { + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x64, 0xca, 0xd2, + 0xb4, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xe, 0x40, 0x68, 0x62, 0x4a, + 0x4a, 0x6a, 0x5c, 0x30, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xb4, 0x9b, 0xd7, + 0x4b, 0x48, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xe, 0x40, 0x68, 0x66, 0x3e, 0xa, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x2, 0x66, 0x9a, 0x98, + 0x56, 0x0, 0x1c, 0xa0, 0xa8, 0x9c, 0x16, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x4, 0xe, 0x1a, 0x20, 0x16, 0xc, + 0x0, 0x0, 0x0, 0x3e, 0x27, 0x67, 0x67, 0x13, + 0x39, 0x67, 0x61, 0xde, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x6, 0x12, 0x16, 0x10, 0x6, + 0xc, 0x16, 0x14, 0xa, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x14, 0xe4, 0xbb, 0xff, + 0x5b, 0x78, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x10, 0x3e, 0x5a, 0x54, 0x2c, + 0x6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1a, 0x4a, 0x6c, 0x62, 0x38, 0xa, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x3e, 0x27, 0x67, 0x67, 0x21, 0x32, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x6, 0x9c, 0xd, 0x9d, 0x8d, + 0xcc, 0x0, 0x74, 0x43, 0xc7, 0x39, 0xdc, 0x24, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x8, 0x14, 0x18, 0x10, 0x4, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xa, 0x14, 0x1a, 0x12, 0x6, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1c, 0x4a, 0x6c, 0x68, 0x40, + 0x14, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x4, 0x2a, 0x58, 0x76, + 0x68, 0x3e, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x54, 0x11, 0x23, 0x23, 0x23, 0xfe, + 0x0, 0x0, 0x0, 0x64, 0x63, 0xff, 0xff, 0x35, + 0x8d, 0xff, 0xf1, 0xf8, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x9c, 0x19, 0x23, 0x15, 0x7e, + 0xb, 0x23, 0x21, 0xb8, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x2e, 0xba, 0xfe, 0x35, 0xcb, 0xff, + 0x77, 0x5, 0xd8, 0x4a, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x2, 0x78, 0xfc, 0x2f, 0x5f, 0x51, 0x19, + 0xe0, 0x3c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x20, 0xba, 0xfe, 0x41, 0x67, 0x5f, 0x21, 0xf2, + 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x64, 0x63, 0xff, 0xff, 0x57, 0x4e, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x88, 0x15, 0xcb, 0xff, 0xdb, + 0xd4, 0x0, 0x7a, 0x9b, 0xff, 0xef, 0x4f, 0xd8, + 0x14, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x9c, 0x1d, 0x23, 0x13, 0x56, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x12, + 0xfa, 0x21, 0x23, 0x17, 0x5a, 0x0, 0x0, 0x0, + 0x0, 0x3e, 0xd0, 0xfe, 0x43, 0x67, 0x61, 0x33, + 0xfe, 0xae, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x16, 0x4e, 0x98, 0xd4, 0xf8, + 0x5, 0xde, 0x6, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x6, 0x70, 0xf0, 0x11, 0x53, 0x69, + 0x5f, 0x2f, 0xfe, 0xb2, 0x26, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x8c, 0x89, 0xff, 0xff, 0xff, 0xfe, + 0x0, 0x0, 0x0, 0x7a, 0x63, 0xff, 0xff, 0x27, + 0x8d, 0xff, 0xeb, 0xfc, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xec, 0xcb, 0xff, 0x89, 0xbe, + 0x71, 0xff, 0xdf, 0xdc, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x38, 0xf6, 0x5d, 0xd9, 0xff, 0xff, 0xff, + 0xff, 0xe9, 0x7f, 0xfe, 0x5e, 0x0, 0x0, 0x0, + 0x0, 0x58, 0xb, 0xaf, 0xff, 0xff, 0xff, 0xf1, + 0x71, 0xec, 0x16, 0x4, 0x38, 0x38, 0x36, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x12, + 0xde, 0x49, 0xdb, 0xff, 0xff, 0xff, 0xf9, 0x97, + 0xfe, 0x52, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x7a, 0x63, 0xff, 0xff, 0x4d, 0x4c, 0x0, 0x0, + 0x0, 0x0, 0x42, 0xfe, 0xbb, 0xff, 0xfb, 0x5f, + 0xc0, 0x0, 0x6a, 0x25, 0xdf, 0xff, 0xed, 0x33, + 0x9e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xd2, 0xcb, 0xff, 0x89, 0x84, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x62, + 0x31, 0xff, 0xff, 0x8d, 0x66, 0x0, 0x0, 0x0, + 0x4e, 0xfe, 0x71, 0xe5, 0xff, 0xff, 0xff, 0xff, + 0xd1, 0x4b, 0xe8, 0x24, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x78, 0xe8, 0xfe, 0x37, 0x73, 0xa3, 0xcf, + 0xf5, 0x15, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x4, 0xa6, 0x15, 0xa5, 0xf7, 0xff, 0xff, + 0xff, 0xff, 0xd3, 0x53, 0xf2, 0x2e, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xb0, 0x89, 0xff, 0xff, 0xff, 0xfe, + 0x0, 0x0, 0x0, 0x7a, 0x63, 0xff, 0xf5, 0xfe, + 0x8d, 0xff, 0xd1, 0xf6, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xe, 0xfe, 0xef, 0xff, 0x5b, 0xe2, + 0x9b, 0xff, 0xbb, 0xe8, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xd4, 0x6b, 0xfd, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x95, 0xf6, 0x16, 0x0, 0x0, + 0x0, 0xc4, 0x8f, 0xff, 0xff, 0xbf, 0xdb, 0xff, + 0xf9, 0x39, 0x5e, 0x68, 0x13, 0x67, 0xfe, 0x6c, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x72, + 0x31, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x89, 0xda, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x7a, 0x63, 0xff, 0xff, 0x19, 0x2a, 0x0, 0x0, + 0x0, 0x4, 0xda, 0x77, 0xff, 0xff, 0x89, 0xf4, + 0x30, 0x0, 0xc, 0xc0, 0x41, 0xf9, 0xff, 0xc9, + 0xfe, 0x3c, 0x0, 0x0, 0x0, 0x6, 0x2e, 0x2e, + 0x2a, 0xe8, 0xbf, 0xff, 0x7b, 0x9e, 0x1a, 0x1a, + 0x1a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, + 0x1a, 0x32, 0x46, 0x34, 0x1c, 0x4, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc8, + 0x8d, 0xff, 0xff, 0x31, 0x62, 0x0, 0x0, 0x12, + 0xf0, 0x83, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xf7, 0x4f, 0xbc, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xd6, 0xaf, 0xef, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x15, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x64, 0x11, 0xd1, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfb, 0x5d, 0xc8, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xb0, 0x89, 0xff, 0xff, 0xff, 0xfe, + 0x0, 0x0, 0x0, 0x7a, 0x63, 0xff, 0xdb, 0xfe, + 0x8d, 0xff, 0xb5, 0xe2, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x3c, 0x29, 0xff, 0xff, 0x23, 0xf2, + 0xc3, 0xff, 0x93, 0xc2, 0x0, 0x0, 0x0, 0x0, + 0x22, 0x9, 0xe9, 0xff, 0xff, 0xef, 0x93, 0x89, + 0xe5, 0xff, 0xff, 0xfd, 0x39, 0x68, 0x0, 0x0, + 0x0, 0xf2, 0xd5, 0xff, 0xa7, 0xfe, 0xf, 0xeb, + 0xff, 0x87, 0xac, 0xf4, 0x9b, 0xff, 0xa3, 0x7a, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc8, + 0x9f, 0xff, 0xff, 0xed, 0x85, 0x9d, 0xfd, 0xff, + 0xeb, 0xfe, 0x6, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x7a, 0x63, 0xff, 0xe7, 0xfe, 0x6, 0x0, 0x0, + 0x0, 0x4c, 0x11, 0xed, 0xff, 0xdf, 0x9, 0x52, + 0x0, 0x0, 0x0, 0x1a, 0xf4, 0xa3, 0xff, 0xff, + 0x6f, 0xc0, 0x0, 0x0, 0x0, 0x42, 0x17, 0x57, + 0xfe, 0xf8, 0xb5, 0xff, 0x6d, 0xec, 0x5, 0x41, + 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x12, + 0xb, 0x3f, 0x3f, 0x3f, 0xf, 0x1c, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x16, 0xfe, + 0xd5, 0xff, 0xd1, 0xfc, 0x12, 0x0, 0x0, 0x68, + 0x31, 0xf9, 0xff, 0xff, 0xdf, 0x89, 0x95, 0xf3, + 0xff, 0xff, 0xdd, 0xfe, 0x2a, 0x0, 0x0, 0x0, + 0x0, 0xe4, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x15, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xe0, 0x9b, 0xff, 0xff, 0xff, 0xbd, 0x7f, + 0x9f, 0xf9, 0xff, 0xff, 0xe3, 0xfe, 0x20, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xb0, 0x89, 0xff, 0xff, 0xff, 0xfe, + 0x0, 0x0, 0x0, 0x7a, 0x63, 0xff, 0xbf, 0xf8, + 0x8d, 0xff, 0x95, 0xc2, 0x0, 0x0, 0x0, 0x14, + 0x34, 0x50, 0xaa, 0x5f, 0xff, 0xeb, 0xfe, 0xfe, + 0xe5, 0xff, 0x69, 0xb0, 0x36, 0x16, 0x0, 0x0, + 0x4e, 0x4d, 0xff, 0xff, 0xff, 0x73, 0xf2, 0xe6, + 0x3b, 0xfd, 0xff, 0xff, 0x93, 0xb4, 0x0, 0x0, + 0x0, 0xfa, 0xeb, 0xff, 0x83, 0xbe, 0xf8, 0xcd, + 0xff, 0xa1, 0xea, 0x43, 0xfb, 0xf9, 0x3d, 0x7a, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe8, + 0xcd, 0xff, 0xff, 0x83, 0xf4, 0xfe, 0xc1, 0xff, + 0xff, 0x15, 0x6, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x7a, 0x63, 0xff, 0xc7, 0xf0, 0x0, 0x0, 0x0, + 0x0, 0xbc, 0x7f, 0xff, 0xff, 0x7f, 0xcc, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x74, 0x2d, 0xfd, 0xff, + 0xd9, 0xfe, 0x22, 0x0, 0x0, 0x82, 0x71, 0xff, + 0xdb, 0x85, 0xb1, 0xff, 0x71, 0x8f, 0xe5, 0xeb, + 0x5, 0x1c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20, + 0x2f, 0xff, 0xff, 0xff, 0x3f, 0x34, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x66, 0x37, + 0xff, 0xff, 0x89, 0xc4, 0x0, 0x0, 0x0, 0xbe, + 0x93, 0xff, 0xff, 0xf5, 0x27, 0xe0, 0xf2, 0x61, + 0xff, 0xff, 0xff, 0x57, 0x76, 0x0, 0x0, 0x0, + 0x0, 0xcc, 0x8f, 0xa7, 0xa7, 0xc9, 0xff, 0xff, + 0xff, 0x15, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x14, 0xfe, 0xed, 0xff, 0xff, 0xbf, 0xfe, 0xcc, + 0xfa, 0x89, 0xff, 0xff, 0xff, 0x47, 0x4e, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xb0, 0x89, 0xff, 0xff, 0xff, 0xfe, + 0x0, 0x0, 0x0, 0x60, 0x63, 0xff, 0xa1, 0xe4, + 0x8d, 0xff, 0x75, 0x8a, 0x0, 0x0, 0x0, 0x7e, + 0x33, 0x4d, 0x4d, 0xa1, 0xff, 0xd5, 0x4d, 0x55, + 0xff, 0xff, 0x6b, 0x4d, 0x37, 0x8e, 0x0, 0x0, + 0x64, 0x63, 0xff, 0xff, 0xff, 0x49, 0x8a, 0x18, + 0xfc, 0xe1, 0xff, 0xff, 0xb7, 0xb6, 0x0, 0x0, + 0x0, 0xf8, 0xdf, 0xff, 0x91, 0xf4, 0xfe, 0xdb, + 0xff, 0x93, 0xfe, 0xcf, 0xff, 0x97, 0xf2, 0x1a, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xea, + 0xcf, 0xff, 0xff, 0x7d, 0xe0, 0xfe, 0xd3, 0xff, + 0xf5, 0xfe, 0x6, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x60, 0x63, 0xff, 0xa3, 0xc4, 0x0, 0x0, 0x0, + 0x8, 0xfa, 0xcf, 0xff, 0xfb, 0x21, 0x50, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x10, 0xfc, 0xcb, 0xff, + 0xff, 0x4d, 0x78, 0x0, 0x0, 0x80, 0x8f, 0xf9, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, + 0x43, 0x1c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2e, + 0x2f, 0xff, 0xff, 0xff, 0x3f, 0x46, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcc, 0x91, + 0xff, 0xff, 0x2f, 0x5e, 0x0, 0x0, 0x0, 0xec, + 0xc7, 0xff, 0xff, 0xc3, 0xf8, 0xc, 0x30, 0xfe, + 0xef, 0xff, 0xff, 0x93, 0xb6, 0x0, 0x0, 0x0, + 0x0, 0x58, 0xa0, 0xc8, 0xee, 0x7f, 0xff, 0xff, + 0xff, 0x15, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1a, 0x33, 0xff, 0xff, 0xff, 0x77, 0xac, 0x0, + 0x80, 0x43, 0xff, 0xff, 0xff, 0x67, 0x68, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xb0, 0x89, 0xff, 0xff, 0xff, 0xfe, + 0x0, 0x0, 0x0, 0x3a, 0x1f, 0x51, 0x2d, 0xa8, + 0x2d, 0x51, 0x1d, 0x46, 0x0, 0x0, 0x0, 0xac, + 0xa9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xbb, 0xbc, 0x0, 0x0, + 0x4c, 0x49, 0xff, 0xff, 0xff, 0x85, 0xf6, 0x60, + 0xc2, 0x47, 0x57, 0x57, 0x41, 0x8e, 0x0, 0x0, + 0x0, 0xdc, 0xb1, 0xff, 0xeb, 0x7b, 0x99, 0xff, + 0xff, 0x5d, 0x7d, 0xff, 0xdf, 0xf, 0x60, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xce, + 0xa7, 0xff, 0xff, 0xcb, 0xb, 0x9b, 0xff, 0xff, + 0xaf, 0xee, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x3a, 0x1d, 0x4d, 0x29, 0x74, 0x0, 0x0, 0x0, + 0x32, 0x1f, 0xfb, 0xff, 0xd5, 0xfc, 0xa, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xcc, 0x95, 0xff, + 0xff, 0x9b, 0xc6, 0x0, 0x0, 0x58, 0xee, 0x13, + 0x67, 0xbd, 0xff, 0xff, 0xf7, 0xaf, 0x6b, 0x19, + 0xee, 0x1c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2e, + 0x2f, 0xff, 0xff, 0xff, 0x3f, 0x46, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x18, 0xfe, 0xd9, + 0xff, 0xcf, 0xfc, 0x10, 0x0, 0x0, 0x0, 0xf8, + 0xdf, 0xff, 0xff, 0xa9, 0xda, 0x0, 0x0, 0xfa, + 0xd7, 0xff, 0xff, 0xaf, 0xd6, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xa2, 0x7f, 0xff, 0xff, + 0xff, 0x15, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1a, 0x1b, 0x63, 0x63, 0x63, 0x27, 0x4a, 0x0, + 0xa2, 0x5b, 0xff, 0xff, 0xff, 0x51, 0x58, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xb0, 0x89, 0xff, 0xff, 0xff, 0xfe, + 0x0, 0x0, 0x0, 0x8, 0x2e, 0x3a, 0x34, 0x1e, + 0x34, 0x3a, 0x2e, 0x8, 0x0, 0x0, 0x0, 0xa4, + 0x93, 0xdd, 0xdd, 0xfb, 0xff, 0xe7, 0xdd, 0xed, + 0xff, 0xf5, 0xdd, 0xdd, 0xa1, 0xb6, 0x0, 0x0, + 0x20, 0x9, 0xe9, 0xff, 0xff, 0xf9, 0x93, 0x1b, + 0xee, 0x9a, 0x6c, 0x5e, 0x40, 0x1a, 0x0, 0x0, + 0x0, 0x82, 0x2d, 0xe7, 0xff, 0xff, 0xff, 0xff, + 0xb5, 0x27, 0xf1, 0xff, 0x59, 0xc4, 0x4, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7c, + 0x3d, 0xfb, 0xff, 0xff, 0xe9, 0xff, 0xff, 0xdf, + 0x21, 0x7c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x8, 0x2a, 0x36, 0x30, 0xe, 0x0, 0x0, 0x0, + 0x6e, 0x59, 0xff, 0xff, 0xaf, 0xe2, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x8c, 0x65, 0xff, + 0xff, 0xc9, 0xf0, 0x0, 0x0, 0x0, 0x4, 0x8e, + 0xd, 0xd1, 0xff, 0xfb, 0xfd, 0x5b, 0xee, 0x48, + 0x6, 0x0, 0x0, 0x20, 0x7a, 0xb0, 0xc8, 0xd4, + 0x2f, 0xff, 0xff, 0xff, 0x3f, 0xd8, 0xc8, 0xb0, + 0x7c, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x6c, 0x3b, 0xff, + 0xff, 0x87, 0xc2, 0x0, 0x0, 0x0, 0x0, 0xfc, + 0xe9, 0xff, 0xff, 0xa3, 0xd0, 0x0, 0x0, 0xf4, + 0xd1, 0xff, 0xff, 0xbb, 0xe0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xa2, 0x7f, 0xff, 0xff, + 0xff, 0x15, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x8, 0x38, 0x60, 0x7a, 0x62, 0x3c, 0xc, 0x30, + 0xfc, 0xb7, 0xff, 0xff, 0xf3, 0x17, 0x2c, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xb0, 0x89, 0xff, 0xff, 0xff, 0xfe, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5a, + 0xce, 0xf0, 0x5, 0xf9, 0xff, 0x4f, 0xfe, 0xa9, + 0xff, 0xb1, 0xfe, 0xf2, 0xd2, 0x68, 0x0, 0x0, + 0x0, 0xd2, 0x67, 0xfb, 0xff, 0xff, 0xff, 0xf3, + 0xa5, 0x2f, 0xf0, 0x5a, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x10, 0xc8, 0x19, 0x85, 0xab, 0xa1, 0x69, + 0xfe, 0xb7, 0xff, 0xb1, 0xfc, 0x2c, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2e, + 0xfc, 0x9b, 0xff, 0xff, 0xff, 0xff, 0xc5, 0x23, + 0xbc, 0x46, 0x6a, 0x7a, 0x52, 0x1c, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xa0, 0x81, 0xff, 0xff, 0x95, 0xc2, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x54, 0x43, 0xff, + 0xff, 0xe9, 0xfe, 0x0, 0x0, 0x0, 0x38, 0xfe, + 0xa7, 0xff, 0xd9, 0x7d, 0xff, 0xeb, 0x29, 0x9e, + 0x0, 0x0, 0x0, 0x5a, 0x49, 0x9f, 0x9f, 0x9f, + 0xa9, 0xff, 0xff, 0xff, 0xad, 0x9f, 0x9f, 0x9f, + 0x4d, 0x5e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x50, 0xa6, 0xd0, + 0xdc, 0xdc, 0xdc, 0xda, 0xb8, 0x74, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xd0, 0x93, 0xff, + 0xfd, 0x2d, 0x5a, 0x0, 0x0, 0x0, 0x0, 0xfc, + 0xeb, 0xff, 0xff, 0xa3, 0xce, 0x0, 0x0, 0xf2, + 0xd1, 0xff, 0xff, 0xbd, 0xe4, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xa2, 0x7f, 0xff, 0xff, + 0xff, 0x15, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x16, 0xe0, + 0x5f, 0xff, 0xff, 0xff, 0x99, 0xe8, 0x6, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xb0, 0x89, 0xff, 0xff, 0xff, 0xfe, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x4e, 0x3d, 0xff, 0xfd, 0x15, 0xf8, 0xcf, + 0xff, 0x89, 0xb4, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x36, 0xf2, 0x53, 0xdb, 0xff, 0xff, 0xff, + 0xff, 0xf9, 0x93, 0x5, 0x84, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x6, 0x52, 0xa0, 0xc6, 0xc0, 0xe6, + 0x5d, 0xff, 0xef, 0x25, 0xd6, 0xd4, 0xd4, 0xaa, + 0x54, 0x4, 0x0, 0x0, 0x0, 0x0, 0x1c, 0xda, + 0x3b, 0xdb, 0xff, 0xff, 0xff, 0xfb, 0x47, 0xec, + 0x36, 0xf, 0x6f, 0x6f, 0x43, 0x6e, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xbc, 0x95, 0xff, 0xff, 0x83, 0xac, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x2c, 0x27, 0xff, + 0xff, 0xfb, 0xfe, 0x6, 0x0, 0x0, 0x40, 0x6b, + 0xff, 0xff, 0x51, 0xfe, 0xd1, 0xff, 0xcb, 0xb4, + 0x0, 0x0, 0x0, 0x86, 0x77, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x7b, 0x8a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xb0, 0x87, 0xb3, + 0xb3, 0xb3, 0xb3, 0xb3, 0xab, 0xec, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1a, 0xfe, 0xdb, 0xff, + 0xcd, 0xfc, 0x10, 0x0, 0x0, 0x0, 0x0, 0xfc, + 0xeb, 0xff, 0xff, 0xa3, 0xce, 0x0, 0x0, 0xf2, + 0xd1, 0xff, 0xff, 0xbd, 0xe4, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xa2, 0x7f, 0xff, 0xff, + 0xff, 0x15, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xe, 0xc6, 0x37, + 0xf1, 0xff, 0xff, 0xd5, 0xf, 0x64, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xb0, 0x89, 0xff, 0xff, 0xff, 0xfe, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x42, 0xc0, + 0xea, 0xfa, 0x6f, 0xff, 0xe3, 0xfe, 0xfe, 0xf1, + 0xff, 0x5b, 0xf6, 0xd2, 0x78, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x26, 0xbc, 0x5, 0x6d, 0xc9, 0xff, + 0xff, 0xff, 0xff, 0xb9, 0xfe, 0x34, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x64, 0x11, + 0xe3, 0xff, 0x79, 0x13, 0x8b, 0xb7, 0xb7, 0x89, + 0x11, 0xb0, 0x4, 0x0, 0x0, 0x0, 0xb6, 0x41, + 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe9, 0x2d, + 0xca, 0x43, 0xff, 0xff, 0x93, 0x96, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xc8, 0xa1, 0xff, 0xff, 0x7b, 0xa0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x16, 0x17, 0xff, + 0xff, 0xff, 0x15, 0xe, 0x0, 0x0, 0x40, 0x21, + 0xb7, 0xad, 0xfa, 0xbc, 0x4b, 0xf1, 0x71, 0xb0, + 0x0, 0x0, 0x0, 0x82, 0x77, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x7b, 0x88, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xdc, 0xc1, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xf5, 0xfc, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x6e, 0x3f, 0xff, 0xff, + 0x85, 0xbe, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfc, + 0xeb, 0xff, 0xff, 0xa3, 0xce, 0x0, 0x0, 0xf2, + 0xd1, 0xff, 0xff, 0xbd, 0xe4, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xa2, 0x7f, 0xff, 0xff, + 0xff, 0x15, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xa, 0xb6, 0x2b, 0xe3, + 0xff, 0xff, 0xeb, 0x31, 0xb0, 0x4, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x8e, 0x89, 0xff, 0xff, 0xff, 0xfe, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x82, 0x77, + 0xd7, 0xd7, 0xe9, 0xff, 0xf5, 0xd7, 0xd7, 0xff, + 0xff, 0xdb, 0xd7, 0xaf, 0xce, 0x0, 0x0, 0x0, + 0x3a, 0x6a, 0x90, 0x80, 0x7c, 0xb8, 0xfc, 0x47, + 0xd3, 0xff, 0xff, 0xff, 0x65, 0x8e, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1a, 0xf4, 0x9b, + 0xff, 0xcb, 0x17, 0xdd, 0xff, 0xff, 0xff, 0xff, + 0xd9, 0x11, 0x56, 0x0, 0x0, 0x1c, 0xfe, 0xd9, + 0xff, 0xff, 0xd3, 0x4f, 0xf3, 0xff, 0xff, 0xd7, + 0x15, 0x77, 0xff, 0xff, 0x7b, 0x96, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xca, 0xa3, 0xff, 0xff, 0x79, 0x9e, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x12, 0xf, 0xff, + 0xff, 0xff, 0x1d, 0xe, 0x0, 0x0, 0xa, 0x86, + 0xbe, 0xd, 0x76, 0x22, 0xda, 0x1f, 0xe0, 0x3e, + 0x0, 0x0, 0x0, 0x56, 0x41, 0x8d, 0x8d, 0x8d, + 0x99, 0xff, 0xff, 0xff, 0x9f, 0x8d, 0x8d, 0x8d, + 0x43, 0x5a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xcc, 0xc1, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xf5, 0xfa, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xd4, 0x97, 0xff, 0xfd, + 0x29, 0x58, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfc, + 0xe9, 0xff, 0xff, 0xa3, 0xd0, 0x0, 0x0, 0xf4, + 0xd1, 0xff, 0xff, 0xbb, 0xe0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xa2, 0x7f, 0xff, 0xff, + 0xff, 0x15, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x6, 0xa8, 0x21, 0xdb, 0xff, + 0xff, 0xf3, 0x49, 0xd4, 0x12, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x58, 0x1b, 0x35, 0x35, 0x35, 0xfe, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x88, 0x8d, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xd1, 0xd2, 0x0, 0x0, 0x0, + 0xd4, 0x6d, 0x73, 0x73, 0x47, 0x88, 0x1e, 0xb2, + 0x21, 0xf3, 0xff, 0xff, 0xa7, 0xc8, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xa8, 0x41, 0xfb, + 0xf9, 0x3d, 0x93, 0xff, 0xf3, 0x73, 0x79, 0xf7, + 0xff, 0x8b, 0xae, 0x0, 0x0, 0x48, 0x43, 0xff, + 0xff, 0xff, 0x67, 0xf8, 0x61, 0xfb, 0xff, 0xff, + 0xbf, 0xcf, 0xff, 0xff, 0x41, 0x5a, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xc2, 0x9b, 0xff, 0xff, 0x7f, 0xa6, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x20, 0x21, 0xff, + 0xff, 0xff, 0x5, 0x8, 0x0, 0x0, 0x0, 0x0, + 0x2, 0x2, 0x2, 0x0, 0x8, 0x8, 0x8, 0x0, + 0x0, 0x0, 0x0, 0x1c, 0x68, 0x9c, 0xb6, 0xc2, + 0x2f, 0xff, 0xff, 0xff, 0x3f, 0xc8, 0xb6, 0x9c, + 0x6a, 0x1c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x8c, 0x9, 0xd, + 0xd, 0xd, 0xd, 0xd, 0xb, 0xde, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1c, 0xfe, 0xdd, 0xff, 0xcb, + 0xfc, 0xe, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, + 0xdf, 0xff, 0xff, 0xa9, 0xdc, 0x0, 0x0, 0xfa, + 0xd7, 0xff, 0xff, 0xaf, 0xd4, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xa2, 0x7f, 0xff, 0xff, + 0xff, 0x15, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x4, 0x9a, 0x17, 0xd1, 0xff, 0xff, + 0xf9, 0x5b, 0xe4, 0x20, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x8, 0x1a, 0x2c, 0x36, 0x26, 0x14, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x60, 0x2b, + 0x4d, 0x4d, 0xe9, 0xff, 0x8b, 0x4d, 0xa7, 0xff, + 0xd3, 0x4d, 0x4d, 0x3f, 0xaa, 0x0, 0x0, 0x0, + 0xee, 0xe9, 0xff, 0xff, 0xaf, 0xe6, 0x6, 0x14, + 0xfe, 0xd9, 0xff, 0xff, 0xb9, 0xd8, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x48, 0xfe, 0xcf, 0xff, + 0x97, 0xfe, 0xc1, 0xff, 0xb1, 0xfa, 0xfa, 0xb9, + 0xff, 0xbb, 0xdc, 0x0, 0x0, 0x5c, 0x5f, 0xff, + 0xff, 0xff, 0x4f, 0xa8, 0xf6, 0x7f, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xd9, 0xfe, 0x1c, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xac, 0x8b, 0xff, 0xff, 0x8b, 0xb8, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x40, 0x35, 0xff, + 0xff, 0xf3, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2e, + 0x2f, 0xff, 0xff, 0xff, 0x3f, 0x46, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x4, + 0x6, 0x6, 0x6, 0x6, 0x4, 0x2, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x74, 0x43, 0xff, 0xff, 0x81, + 0xba, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xea, + 0xc5, 0xff, 0xff, 0xc5, 0xf8, 0x10, 0x32, 0xfe, + 0xf1, 0xff, 0xff, 0x91, 0xb4, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xa2, 0x7f, 0xff, 0xff, + 0xff, 0x15, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x88, 0xf, 0xc7, 0xff, 0xff, 0xfd, + 0x6b, 0xf0, 0x2c, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x52, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe, 0x30, + 0x68, 0x13, 0xfd, 0xff, 0x3f, 0xf2, 0xb3, 0xff, + 0xa7, 0xe4, 0x54, 0x3a, 0x1a, 0x0, 0x0, 0x0, + 0xee, 0xc9, 0xff, 0xff, 0xeb, 0x19, 0xe2, 0xe0, + 0x21, 0xf3, 0xff, 0xff, 0xa7, 0xc6, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x8, 0xe0, 0x7d, 0xff, 0xdf, + 0xf, 0xf0, 0xcb, 0xff, 0xa7, 0xe4, 0xe6, 0xad, + 0xff, 0xc5, 0xe2, 0x0, 0x0, 0x48, 0x43, 0xff, + 0xff, 0xff, 0x99, 0xfc, 0xd8, 0xfe, 0x9f, 0xff, + 0xff, 0xff, 0xff, 0x63, 0xca, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x84, 0x69, 0xff, 0xff, 0xa5, 0xd4, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x72, 0x57, 0xff, + 0xff, 0xd5, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2e, + 0x2f, 0xff, 0xff, 0xff, 0x3f, 0x46, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x3c, 0xcc, 0xf2, 0xf6, + 0xdc, 0x78, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x3c, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x14, + 0x0, 0x0, 0x0, 0xd8, 0x9b, 0xff, 0xfb, 0x27, + 0x54, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xba, + 0x8f, 0xff, 0xff, 0xf7, 0x2d, 0xe8, 0xf4, 0x63, + 0xff, 0xff, 0xff, 0x53, 0x72, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xa2, 0x7f, 0xff, 0xff, + 0xff, 0x15, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x74, 0x9, 0xbd, 0xff, 0xff, 0xff, 0x7d, + 0xfe, 0xe6, 0xe0, 0xe0, 0xda, 0xb4, 0x66, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x8a, 0x89, 0xff, 0xff, 0xff, 0xfe, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x64, 0x4d, 0xff, 0xf9, 0x9, 0xfa, 0xd7, 0xff, + 0x7d, 0xa6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xb2, 0x77, 0xff, 0xff, 0xff, 0xe1, 0x95, 0x91, + 0xdd, 0xff, 0xff, 0xff, 0x5f, 0x8a, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x8, 0x1f, 0xf1, 0xff, 0x59, + 0xc4, 0xd4, 0xb1, 0xff, 0xd1, 0x5, 0xfe, 0xcd, + 0xff, 0xab, 0xce, 0x0, 0x0, 0x1c, 0xfe, 0xdf, + 0xff, 0xff, 0xff, 0xb1, 0x87, 0x9f, 0xe3, 0xff, + 0xff, 0xff, 0xfd, 0x63, 0xea, 0x1e, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x48, 0x39, 0xff, 0xff, 0xc5, 0xf4, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xb0, 0x7f, 0xff, + 0xff, 0xb1, 0xdc, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, + 0x2f, 0xff, 0xff, 0xff, 0x3f, 0x36, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x74, 0x71, 0xe3, 0xe3, + 0xaf, 0xc4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x68, 0x6f, 0xff, 0xff, 0xff, 0x35, 0x26, + 0x0, 0x0, 0x20, 0xfe, 0xe1, 0xff, 0xc9, 0xfa, + 0xc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x60, + 0x2b, 0xf7, 0xff, 0xff, 0xe5, 0x93, 0x9d, 0xf5, + 0xff, 0xff, 0xd9, 0xfe, 0x26, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xa2, 0x7f, 0xff, 0xff, + 0xff, 0x15, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xda, 0xab, 0xff, 0xff, 0xff, 0xed, 0xb7, + 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0x9d, 0xd0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xb0, 0x89, 0xff, 0xff, 0xff, 0xfe, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xa4, 0x7b, 0xff, 0xd9, 0xfc, 0x5, 0xf7, 0xff, + 0x4f, 0x66, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x42, 0x5, 0xb9, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xb5, 0xfe, 0x30, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x8, 0xdc, 0x55, 0x8d, 0xfc, + 0x2c, 0x94, 0x5f, 0xff, 0xff, 0xdb, 0xd5, 0xff, + 0xff, 0x59, 0x8a, 0x0, 0x0, 0x0, 0xc2, 0x55, + 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xf5, 0x45, 0xce, 0x10, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x16, 0xfe, 0xe5, 0xff, 0xef, 0x5, 0x2a, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x2, 0xee, 0xb3, 0xff, + 0xff, 0x6d, 0x9a, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x14, + 0x11, 0x67, 0x67, 0x67, 0x19, 0x20, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x9c, 0x7f, 0xff, 0xff, + 0xc5, 0xe4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x8c, 0x6f, 0xff, 0xff, 0xff, 0x35, 0x36, + 0x0, 0x0, 0x78, 0x47, 0xff, 0xff, 0x7f, 0xb8, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe, + 0xea, 0x79, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xf3, 0x47, 0xb6, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xa2, 0x7f, 0xff, 0xff, + 0xff, 0x15, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xf6, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xdd, 0xf0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x8a, 0x89, 0xff, 0xff, 0xff, 0xfe, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x94, 0xa5, 0xff, 0xb5, 0xda, 0x3d, 0xff, 0xff, + 0x15, 0x2a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x84, 0xfe, 0x7f, 0xe1, 0xff, 0xff, 0xff, + 0xff, 0xdf, 0x7b, 0xfe, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x28, 0x72, 0x72, 0x56, + 0x0, 0x30, 0xfe, 0x83, 0xf5, 0xff, 0xff, 0xf5, + 0x81, 0xfc, 0x2a, 0x0, 0x0, 0x0, 0x28, 0xec, + 0x47, 0xc9, 0xfd, 0xff, 0xff, 0xff, 0xf3, 0xa7, + 0x41, 0xe3, 0xff, 0xff, 0xe9, 0x35, 0x10, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xde, 0xa5, 0xff, 0xff, 0x59, 0x98, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x44, 0xb, 0xef, 0xff, + 0xf3, 0x17, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, + 0x38, 0x62, 0x80, 0x64, 0x3a, 0x6, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xa6, 0x7f, 0xff, 0xff, + 0xc1, 0xe4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x68, 0x6f, 0xff, 0xff, 0xff, 0x35, 0x26, + 0x0, 0x0, 0xdc, 0x9d, 0xff, 0xfb, 0x23, 0x50, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x44, 0xf8, 0x63, 0xd9, 0xff, 0xff, 0xff, 0xfd, + 0xc7, 0x41, 0xe2, 0x20, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x7c, 0x7f, 0xff, 0xff, + 0xff, 0x15, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xee, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xdd, 0xe8, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x52, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x6c, 0xfe, 0xfe, 0xfe, 0x8c, 0xfe, 0xfe, 0xfe, + 0xf6, 0x6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x4a, 0xcc, 0xfe, 0x2f, 0xed, 0xff, + 0x27, 0xfe, 0xca, 0x46, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x4c, 0xe8, 0xf, 0x43, 0x43, 0xf, + 0xe8, 0x4c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20, + 0xa4, 0xfa, 0x1f, 0x4f, 0x59, 0x41, 0x9, 0xec, + 0xde, 0xfe, 0xfe, 0xfe, 0xfe, 0xc8, 0x10, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x7a, 0x39, 0xfd, 0xff, 0xbb, 0xfa, 0x24, + 0x0, 0x0, 0x0, 0x4, 0xce, 0x77, 0xff, 0xff, + 0x9f, 0xea, 0x6, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xbe, 0x89, 0xff, 0xff, + 0xa7, 0xca, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x3c, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x14, + 0x0, 0x8, 0xe6, 0xe3, 0xff, 0xc7, 0xf8, 0xc, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x32, 0xbe, 0xfe, 0x31, 0x55, 0x51, 0x23, + 0xfc, 0xa0, 0x1c, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x48, 0xfe, 0xfe, 0xfe, + 0xfe, 0xfe, 0x6, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xbc, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, + 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xb2, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x10, 0xf8, 0xe9, 0xff, + 0xfe, 0xc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x4, 0x20, 0x38, 0x38, 0x20, + 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x8, 0x2c, 0x50, 0x5e, 0x42, 0x1c, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x16, 0xf8, 0xad, 0xff, 0xfd, 0x4d, 0xc2, + 0x8, 0x0, 0x0, 0x74, 0x11, 0xe3, 0xff, 0xef, + 0x25, 0x6e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x6, 0xf0, 0xaf, 0xff, 0xff, + 0x5d, 0x88, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x8, 0x21, 0x95, 0x95, 0x55, 0xa4, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x12, 0x38, 0x54, 0x52, 0x30, + 0xc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xda, 0x91, 0x9f, + 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x7c, 0x21, 0xe9, 0xff, 0xdf, 0x1d, + 0x9e, 0x0, 0x52, 0xfe, 0xa9, 0xff, 0xff, 0x71, + 0xde, 0xc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x18, 0x17, 0xf1, 0xff, 0xd1, + 0xfe, 0x2e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x8, 0x62, 0x9c, 0xa8, 0x76, 0x28, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x58, 0x9c, 0x9c, + 0x68, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xa, 0xd0, 0x4b, 0xf5, 0xff, 0xcb, + 0xce, 0x0, 0x78, 0x89, 0xff, 0xff, 0x9b, 0xfe, + 0x3c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x18, 0x37, 0xd9, 0xf1, 0x41, + 0xae, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x22, 0xe6, 0x4b, 0xe7, 0xb5, + 0xd0, 0x0, 0x78, 0x6b, 0xfb, 0x8d, 0xfe, 0x64, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x14, 0xb4, 0x5, 0x31, 0xde, + 0x1c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x22, 0xcc, 0x17, 0x39, + 0x88, 0x0, 0x3a, 0xb, 0x3b, 0xf2, 0x56, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x10, 0x10, 0x10, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0x18, 0x18, + 0x14, 0x0, 0x2, 0x18, 0x18, 0x16, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x8, 0x30, 0x5c, 0x76, + 0x66, 0x3c, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x2, 0xe, 0x18, 0x20, 0x18, 0xc, 0x2, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x4, 0xe, 0x1a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x16, 0xc, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1c, 0x48, 0x6c, 0x6a, 0x46, 0x1c, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x2, 0xe, 0x18, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x1e, 0x14, 0x8, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x2, 0x22, 0x52, 0x74, 0x6e, 0x46, 0x18, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x22, 0x50, 0x70, 0x60, 0x36, + 0xa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x28, 0x56, + 0x76, 0x6e, 0x46, 0x18, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, + 0x16, 0x20, 0x1c, 0x10, 0x6, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xe, 0x86, 0xf6, 0x1b, 0x57, 0x6b, + 0x5f, 0x2f, 0xfe, 0xba, 0x30, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x7e, 0xd, 0x23, 0x23, 0x23, 0xb, 0x24, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x62, 0x11, 0x23, 0x23, + 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x5, + 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x52, + 0xda, 0xfe, 0x41, 0x63, 0x61, 0x41, 0x5, 0xd4, + 0x2c, 0x0, 0x0, 0x0, 0x3a, 0xd, 0x23, 0x23, + 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, + 0x23, 0x1d, 0xa8, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x5a, 0xe4, 0xb, 0x4b, 0x69, 0x63, 0x3d, 0xfe, + 0xc8, 0x38, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x44, 0xd8, 0x5, 0x4b, 0x69, 0x5b, 0x21, + 0xf8, 0x8c, 0xe, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x6, 0x70, 0xec, 0x11, 0x51, + 0x69, 0x63, 0x3d, 0xfe, 0xcc, 0x3e, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xa, 0x46, 0x8c, 0xbe, 0xd2, 0xd2, 0xc4, 0x9a, + 0x56, 0x14, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x24, 0xfe, + 0x23, 0x23, 0x23, 0x15, 0x94, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x12, 0xca, 0x29, 0xb5, 0xfb, 0xff, 0xff, + 0xff, 0xff, 0xd7, 0x5f, 0xfa, 0x40, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2c, + 0xfc, 0xb3, 0xff, 0xff, 0xff, 0x4d, 0x42, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xac, 0x97, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2f, + 0x20, 0x0, 0x0, 0x0, 0x0, 0x4, 0x98, 0x9, + 0x89, 0xe9, 0xff, 0xff, 0xff, 0xff, 0xeb, 0x5b, + 0x44, 0x0, 0x0, 0x0, 0x66, 0x6b, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xd3, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x78, + 0x9, 0x93, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xe1, + 0x6b, 0xfc, 0x44, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x5c, 0xfe, 0x79, 0xeb, 0xff, 0xff, 0xff, 0xfd, + 0xbb, 0x2b, 0xc8, 0xe, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xa4, 0x19, 0xa5, 0xf5, 0xff, + 0xff, 0xff, 0xff, 0xe3, 0x71, 0xfe, 0x4c, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x18, 0x92, + 0xf8, 0x21, 0x73, 0x99, 0xab, 0xaf, 0x9d, 0x7f, + 0x35, 0xfe, 0xac, 0x26, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x82, 0x4f, + 0xff, 0xff, 0xff, 0xc5, 0xf8, 0xa, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x8a, 0x31, 0xe7, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x75, 0xe0, 0x4, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xc6, + 0x5b, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x5c, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xda, 0xaf, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2f, + 0x2a, 0x0, 0x0, 0x0, 0x0, 0x7c, 0x13, 0xc7, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x43, + 0x44, 0x0, 0x0, 0x0, 0x76, 0x6b, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xd3, 0xf2, 0x0, 0x0, 0x0, 0x20, 0xfe, + 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x79, 0xe0, 0x4, 0x0, 0x0, 0x0, 0x26, + 0xfa, 0x93, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xe5, 0x2b, 0x8e, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x42, 0x9, 0xd1, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x81, 0xe8, 0x8, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x42, 0xf2, 0x3d, + 0xbb, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xcf, 0x51, 0xf8, 0x48, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe2, 0xa5, + 0xff, 0xff, 0xff, 0xfb, 0x21, 0x50, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xf0, 0xb7, 0xff, 0xff, 0xff, 0xb7, 0x7d, + 0x99, 0xf3, 0xff, 0xff, 0xf1, 0x13, 0x32, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x62, 0xf, + 0xe1, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x5c, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xec, 0xc3, 0xff, 0xff, + 0xd7, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0x23, + 0x1c, 0x0, 0x0, 0x0, 0x1e, 0xfc, 0xb1, 0xff, + 0xff, 0xff, 0xd1, 0x8d, 0x89, 0xa7, 0xcf, 0xfe, + 0x1c, 0x0, 0x0, 0x0, 0x50, 0x47, 0xad, 0xad, + 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xe9, 0xff, + 0xff, 0xc5, 0xdc, 0x0, 0x0, 0x0, 0x6c, 0x49, + 0xff, 0xff, 0xff, 0xe1, 0x85, 0x93, 0xf3, 0xff, + 0xff, 0xf1, 0xf, 0x2a, 0x0, 0x0, 0x0, 0x9a, + 0x53, 0xff, 0xff, 0xff, 0xdb, 0x85, 0xa5, 0xfd, + 0xff, 0xff, 0xbd, 0xfa, 0x14, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xa0, 0x77, 0xff, 0xff, 0xff, 0xd7, + 0x8b, 0x9b, 0xf3, 0xff, 0xff, 0xf5, 0x1f, 0x3e, + 0x0, 0x0, 0x0, 0x0, 0x4a, 0xfc, 0x77, 0xfb, + 0xff, 0xf3, 0xb5, 0x7b, 0x5f, 0x5b, 0x73, 0xa3, + 0xe5, 0xff, 0xfd, 0x7f, 0xfc, 0x3c, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x2a, 0x5, 0xe9, + 0xff, 0xff, 0xff, 0xff, 0x7f, 0xba, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xf4, 0xf7, 0xff, 0xff, 0xb5, 0xfe, 0xc8, + 0xf4, 0x73, 0xff, 0xff, 0xff, 0x5d, 0x64, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1a, 0xf2, 0x97, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x5c, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xf8, 0xd9, 0xff, 0xff, + 0x65, 0xf2, 0xe8, 0xe8, 0xe8, 0xe8, 0xce, 0x92, + 0xc, 0x0, 0x0, 0x0, 0x78, 0x45, 0xff, 0xff, + 0xff, 0xaf, 0xfe, 0xd6, 0xbe, 0xda, 0xc8, 0x9e, + 0x0, 0x0, 0x0, 0x0, 0x20, 0x86, 0xbe, 0xd6, + 0xd6, 0xd6, 0xd6, 0xda, 0xfa, 0x67, 0xff, 0xff, + 0xef, 0x35, 0x9a, 0x0, 0x0, 0x0, 0xa4, 0x8d, + 0xff, 0xff, 0xff, 0x39, 0xe2, 0xf4, 0x7b, 0xff, + 0xff, 0xff, 0x55, 0x56, 0x0, 0x0, 0x0, 0xec, + 0xbd, 0xff, 0xff, 0xef, 0x21, 0xe0, 0xfa, 0x8d, + 0xff, 0xff, 0xfd, 0x33, 0x52, 0x0, 0x0, 0x0, + 0x3c, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x14, 0x0, + 0x0, 0x0, 0x3c, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, + 0x14, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x6, 0x52, 0x9e, 0x9c, 0x72, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x60, 0x98, 0x9c, 0x62, + 0xc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xb2, 0xb3, 0xff, 0xff, 0xef, 0x19, + 0xdc, 0xf2, 0x67, 0xff, 0xff, 0xff, 0x6b, 0x78, + 0x0, 0x0, 0x0, 0x20, 0xf2, 0x7f, 0xff, 0xff, + 0xb7, 0x27, 0xf2, 0xb2, 0x82, 0x7e, 0xa4, 0xe4, + 0xd, 0x91, 0xff, 0xff, 0x6f, 0xdc, 0xa, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x8c, 0x59, 0xff, + 0xff, 0xf9, 0xff, 0xff, 0xcb, 0xfa, 0xe, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x9, 0x7b, 0x7b, 0x7b, 0x41, 0x8c, 0x0, + 0x6a, 0x31, 0xff, 0xff, 0xff, 0x73, 0x78, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xa6, 0x3d, 0xf9, + 0xff, 0xeb, 0xff, 0xff, 0xff, 0x4d, 0x5c, 0x0, + 0x0, 0x0, 0x0, 0x2, 0xfe, 0xed, 0xff, 0xff, + 0x43, 0x6a, 0x3a, 0x34, 0x16, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xc8, 0x9d, 0xff, 0xff, + 0xf5, 0x19, 0xb0, 0x98, 0x9c, 0x74, 0x34, 0x2, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x92, 0x2d, 0xf1, 0xff, 0xff, + 0x63, 0xde, 0x14, 0x0, 0x0, 0x0, 0xb6, 0x9d, + 0xff, 0xff, 0xf1, 0xfe, 0x1e, 0x78, 0x41, 0xff, + 0xff, 0xff, 0x67, 0x68, 0x0, 0x0, 0x2, 0xfe, + 0xef, 0xff, 0xff, 0xa7, 0xee, 0xa, 0x5c, 0x21, + 0xff, 0xff, 0xff, 0x79, 0x94, 0x0, 0x0, 0x0, + 0x68, 0x6f, 0xff, 0xff, 0xff, 0x35, 0x26, 0x0, + 0x0, 0x0, 0x68, 0x6f, 0xff, 0xff, 0xff, 0x35, + 0x26, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x18, 0x7a, 0xec, 0x19, 0x83, 0xa9, 0xc8, + 0x0, 0x0, 0x0, 0x26, 0x7e, 0xb2, 0xc8, 0xc8, + 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xa8, 0x6c, + 0x8, 0x0, 0x0, 0x0, 0xae, 0x97, 0x91, 0x27, + 0xf6, 0x90, 0x24, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x98, 0x67, 0x87, 0x87, 0x6f, 0xde, + 0x6, 0x4e, 0x19, 0xff, 0xff, 0xff, 0x83, 0x92, + 0x0, 0x0, 0x0, 0xac, 0x49, 0xf9, 0xff, 0xa5, + 0xfe, 0x88, 0x2c, 0x64, 0x92, 0x9c, 0x74, 0x38, + 0x5e, 0xfc, 0x89, 0xff, 0xef, 0x21, 0x5a, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xea, 0xad, 0xff, + 0xff, 0x9d, 0xf9, 0xff, 0xfd, 0x2b, 0x5a, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x46, 0x78, 0x9c, 0x86, 0x58, 0x1a, 0x1c, + 0xc2, 0x57, 0xff, 0xff, 0xff, 0x4d, 0x5a, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x46, 0xfe, 0xcd, 0xff, + 0xf9, 0x79, 0xff, 0xff, 0xff, 0x4d, 0x5c, 0x0, + 0x0, 0x0, 0x0, 0x14, 0xb, 0xfd, 0xff, 0xff, + 0x19, 0x1b, 0x49, 0x39, 0xfe, 0xde, 0x52, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xec, 0xcb, 0xff, 0xff, + 0xc7, 0xfe, 0x53, 0x85, 0x89, 0x63, 0xd, 0xc4, + 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x2e, 0xfe, 0xbf, 0xff, 0xff, 0xab, + 0xfc, 0x32, 0x0, 0x0, 0x0, 0x0, 0x94, 0x7f, + 0xff, 0xff, 0xfd, 0x1f, 0xa4, 0xd0, 0x63, 0xff, + 0xff, 0xff, 0x41, 0x4c, 0x0, 0x0, 0x2, 0xb, + 0xff, 0xff, 0xff, 0x87, 0xbe, 0x0, 0xa, 0xfe, + 0xf1, 0xff, 0xff, 0x9b, 0xbe, 0x0, 0x0, 0x0, + 0x8c, 0x6f, 0xff, 0xff, 0xff, 0x35, 0x36, 0x0, + 0x0, 0x0, 0x8c, 0x6f, 0xff, 0xff, 0xff, 0x35, + 0x36, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x32, + 0xa6, 0xfc, 0x3b, 0xa5, 0xf3, 0xff, 0xcd, 0xea, + 0x0, 0x0, 0x0, 0x6a, 0x53, 0x9f, 0x9f, 0x9f, + 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x1d, + 0x18, 0x0, 0x0, 0x0, 0xd6, 0xb3, 0xff, 0xf9, + 0xb5, 0x4f, 0xfe, 0xbe, 0x46, 0x4, 0x0, 0x0, + 0x0, 0x0, 0x34, 0x74, 0xa0, 0xa2, 0x78, 0x3c, + 0x0, 0x88, 0x3d, 0xff, 0xff, 0xff, 0x69, 0x7a, + 0x0, 0x0, 0x28, 0xfe, 0xcf, 0xff, 0xd3, 0x9, + 0x70, 0x86, 0xfe, 0x49, 0x83, 0x83, 0x63, 0x13, + 0xe0, 0x84, 0x5, 0xd5, 0xff, 0x8b, 0xca, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x32, 0x9, 0xef, 0xff, + 0xff, 0x45, 0xc3, 0xff, 0xff, 0x87, 0xc2, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x48, 0xf8, 0xfe, 0x9, + 0x43, 0xd5, 0xff, 0xff, 0xcd, 0xfe, 0x24, 0x0, + 0x0, 0x0, 0x0, 0xc, 0xe0, 0x7b, 0xff, 0xff, + 0x95, 0x57, 0xff, 0xff, 0xff, 0x4d, 0x5c, 0x0, + 0x0, 0x0, 0x0, 0x38, 0x31, 0xff, 0xff, 0xf9, + 0xc3, 0xff, 0xff, 0xff, 0xed, 0x89, 0xfe, 0x64, + 0x0, 0x0, 0x0, 0x0, 0xf6, 0xdb, 0xff, 0xff, + 0xcb, 0xd5, 0xff, 0xff, 0xff, 0xff, 0xe3, 0x47, + 0xd4, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xb2, 0x5d, 0xff, 0xff, 0xef, 0x21, + 0x78, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4e, 0x1f, + 0xf1, 0xff, 0xff, 0xbb, 0x3d, 0x4d, 0xd9, 0xff, + 0xff, 0xcd, 0xfe, 0x1c, 0x0, 0x0, 0x2, 0xfe, + 0xfd, 0xff, 0xff, 0x8f, 0xc8, 0x0, 0x0, 0xfc, + 0xe5, 0xff, 0xff, 0xa7, 0xce, 0x0, 0x0, 0x0, + 0x68, 0x6f, 0xff, 0xff, 0xff, 0x35, 0x26, 0x0, + 0x0, 0x0, 0x68, 0x6f, 0xff, 0xff, 0xff, 0x35, + 0x26, 0x0, 0x0, 0x0, 0x8, 0x58, 0xd0, 0xfe, + 0x63, 0xc5, 0xff, 0xff, 0xff, 0xff, 0xcd, 0xe0, + 0x0, 0x0, 0x0, 0x98, 0x87, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2f, + 0x26, 0x0, 0x0, 0x0, 0xc6, 0xb3, 0xff, 0xff, + 0xff, 0xff, 0xd5, 0x79, 0x11, 0xe6, 0x72, 0x14, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x52, 0xfe, 0xaf, 0xff, 0xff, 0xf5, 0x21, 0x40, + 0x0, 0x0, 0x86, 0x55, 0xff, 0xff, 0x53, 0xb2, + 0x82, 0x11, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xef, + 0x81, 0xc8, 0xc4, 0x7d, 0xff, 0xd9, 0xfa, 0x4, + 0x0, 0x0, 0x0, 0x0, 0x96, 0x63, 0xff, 0xff, + 0xe5, 0xfe, 0x7d, 0xff, 0xff, 0xd1, 0xfc, 0x12, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x7c, 0x7d, 0xfd, 0xff, + 0xff, 0xff, 0xff, 0xd1, 0x25, 0xa0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x84, 0x25, 0xef, 0xff, 0xdf, + 0xd, 0x57, 0xff, 0xff, 0xff, 0x4d, 0x5c, 0x0, + 0x0, 0x0, 0x0, 0x64, 0x53, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9d, 0xf8, + 0x16, 0x0, 0x0, 0x0, 0xfa, 0xe3, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xeb, + 0x21, 0x68, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x22, 0xfe, 0xd1, 0xff, 0xff, 0x8f, 0xe4, + 0xa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0xdc, + 0x53, 0xeb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xd7, 0x2b, 0xa2, 0x0, 0x0, 0x0, 0x0, 0xfe, + 0xe7, 0xff, 0xff, 0xbb, 0xfa, 0x32, 0x5e, 0xfe, + 0xe5, 0xff, 0xff, 0xa9, 0xd4, 0x0, 0x0, 0x0, + 0x3c, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x14, 0x0, + 0x0, 0x0, 0x3c, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, + 0x14, 0x0, 0x0, 0x30, 0xe6, 0x1d, 0x89, 0xe1, + 0xff, 0xff, 0xff, 0xff, 0xfd, 0xc7, 0x69, 0xb2, + 0x0, 0x0, 0x0, 0x8c, 0x87, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2f, + 0x22, 0x0, 0x0, 0x0, 0x90, 0x53, 0xb7, 0xf5, + 0xff, 0xff, 0xff, 0xff, 0xef, 0x9d, 0x33, 0xf6, + 0x5a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6c, + 0xfe, 0x89, 0xff, 0xff, 0xff, 0x8f, 0xea, 0xa, + 0x0, 0x0, 0xdc, 0xa7, 0xff, 0xd7, 0xfe, 0x4c, + 0xfe, 0xb7, 0xff, 0xff, 0xcd, 0xb1, 0xe9, 0xff, + 0xdd, 0xea, 0x52, 0x29, 0xff, 0xfb, 0x11, 0x24, + 0x0, 0x0, 0x0, 0x4, 0xee, 0xb3, 0xff, 0xff, + 0xa5, 0xea, 0x27, 0xfd, 0xff, 0xff, 0x31, 0x62, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x90, 0x7f, 0xff, 0xff, + 0xff, 0xff, 0xf7, 0x79, 0xfe, 0x7c, 0x0, 0x0, + 0x0, 0x0, 0x2e, 0xfc, 0xb3, 0xff, 0xff, 0x55, + 0xda, 0x57, 0xff, 0xff, 0xff, 0x4d, 0x5c, 0x0, + 0x0, 0x0, 0x0, 0x6e, 0x6f, 0xff, 0xff, 0xff, + 0xb5, 0x75, 0x8b, 0xed, 0xff, 0xff, 0xfd, 0x39, + 0x66, 0x0, 0x0, 0x0, 0xfa, 0xe3, 0xff, 0xff, + 0xfd, 0xa1, 0x55, 0x53, 0xb5, 0xff, 0xff, 0xff, + 0x9b, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x7c, 0x4d, 0xff, 0xff, 0xf9, 0x21, 0x5e, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xb0, + 0x11, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, + 0x77, 0xfe, 0x74, 0x0, 0x0, 0x0, 0x0, 0xe2, + 0xb1, 0xff, 0xff, 0xf9, 0x5f, 0xfe, 0xd, 0x95, + 0xff, 0xff, 0xff, 0xa9, 0xd4, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x68, 0x5f, 0xf5, 0xff, 0xff, + 0xff, 0xff, 0xd7, 0x8b, 0x2b, 0xfa, 0xac, 0x38, + 0x0, 0x0, 0x0, 0x58, 0x25, 0x49, 0x49, 0x49, + 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0xd, + 0x12, 0x0, 0x0, 0x0, 0x26, 0x94, 0xf2, 0x15, + 0x75, 0xc3, 0xfb, 0xff, 0xff, 0xff, 0xfd, 0x93, + 0xac, 0x0, 0x0, 0x0, 0x0, 0x0, 0x68, 0x5, + 0xa5, 0xff, 0xff, 0xff, 0xad, 0xfe, 0x58, 0x0, + 0x0, 0x4, 0xfe, 0xdf, 0xff, 0x9d, 0xd6, 0x9c, + 0x5b, 0xff, 0xff, 0x97, 0xfe, 0xfc, 0xbf, 0xff, + 0xcb, 0xf0, 0xe, 0xfe, 0xf1, 0xff, 0x4b, 0x4a, + 0x0, 0x0, 0x0, 0x3a, 0xf, 0xf3, 0xff, 0xff, + 0x59, 0x8a, 0xfc, 0xcf, 0xff, 0xff, 0x8d, 0xca, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x66, 0x55, 0xad, 0xaf, + 0xcb, 0xff, 0xff, 0xff, 0xad, 0xfe, 0x2c, 0x0, + 0x0, 0x4, 0xc6, 0x5b, 0xff, 0xff, 0xad, 0xfe, + 0xce, 0x57, 0xff, 0xff, 0xff, 0x4d, 0xaa, 0x4a, + 0x8, 0x0, 0x0, 0x54, 0x49, 0x9b, 0xab, 0x99, + 0xfe, 0xbe, 0xea, 0x4f, 0xff, 0xff, 0xff, 0x8f, + 0xb2, 0x0, 0x0, 0x0, 0xfa, 0xe3, 0xff, 0xff, + 0xb5, 0xfe, 0x94, 0xa4, 0xfe, 0xdb, 0xff, 0xff, + 0xdb, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xdc, 0xa1, 0xff, 0xff, 0xc3, 0xf8, 0xa, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x64, 0x17, + 0xcf, 0xff, 0xff, 0xf1, 0xb7, 0xc1, 0xfb, 0xff, + 0xff, 0xa3, 0xfe, 0x2c, 0x0, 0x0, 0x0, 0x8a, + 0x43, 0xfb, 0xff, 0xff, 0xff, 0xeb, 0xf7, 0xff, + 0xff, 0xff, 0xff, 0xa9, 0xd4, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x90, 0x7b, 0xff, 0xff, 0xff, + 0xaf, 0x41, 0xfe, 0xd8, 0x62, 0xe, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x2c, 0x88, 0xba, 0xce, 0xce, + 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xae, 0x72, + 0x8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0x46, + 0xbe, 0xfc, 0x23, 0x8d, 0xf7, 0xff, 0xff, 0xb3, + 0xd4, 0x0, 0x0, 0x0, 0x0, 0x6, 0xf0, 0x9f, + 0xff, 0xff, 0xfd, 0x89, 0xfe, 0x76, 0x0, 0x0, + 0x0, 0x1a, 0xf, 0xff, 0xff, 0x67, 0x94, 0xf0, + 0xbb, 0xff, 0xf3, 0x13, 0x62, 0xf4, 0xd1, 0xff, + 0xb9, 0xe2, 0x0, 0xfc, 0xe3, 0xff, 0x5b, 0x6c, + 0x0, 0x0, 0x0, 0xa0, 0x6b, 0xff, 0xff, 0xef, + 0x9, 0xac, 0xea, 0x8d, 0xff, 0xff, 0xd7, 0xfe, + 0x16, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x28, 0x8c, 0xc2, 0xe2, + 0xfe, 0x6d, 0xff, 0xff, 0xff, 0x5b, 0x84, 0x0, + 0x0, 0x3a, 0x11, 0xe1, 0xff, 0xfd, 0x89, 0x7b, + 0x7b, 0x9b, 0xff, 0xff, 0xff, 0x97, 0x7b, 0x1b, + 0x1e, 0x0, 0x0, 0x20, 0x78, 0xb4, 0xca, 0xa8, + 0x60, 0x0, 0x24, 0xfe, 0xe5, 0xff, 0xff, 0xb5, + 0xd8, 0x0, 0x0, 0x0, 0xf8, 0xdf, 0xff, 0xff, + 0xb1, 0xe2, 0x0, 0x0, 0xe0, 0x9d, 0xff, 0xff, + 0xf9, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1c, 0xfe, 0xe3, 0xff, 0xff, 0x85, 0xba, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd2, 0x99, + 0xff, 0xff, 0xf1, 0x2f, 0xf6, 0xfc, 0x5f, 0xff, + 0xff, 0xff, 0x5b, 0x8e, 0x0, 0x0, 0x0, 0x1c, + 0xf2, 0x73, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xd5, + 0xed, 0xff, 0xff, 0xa7, 0xce, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x7c, 0x7b, 0xff, 0xff, 0xff, + 0xfd, 0xc9, 0x7b, 0x1b, 0xf6, 0xa2, 0x3a, 0x4, + 0x0, 0x0, 0x0, 0x68, 0x4d, 0x91, 0x91, 0x91, + 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x19, + 0x16, 0x0, 0x0, 0x0, 0x0, 0x2a, 0x8c, 0xec, + 0xd, 0x6b, 0xbb, 0xf9, 0xff, 0xff, 0xff, 0xb3, + 0xc2, 0x0, 0x0, 0x0, 0x0, 0x22, 0x17, 0xf9, + 0xff, 0xff, 0x9f, 0xfc, 0x52, 0x0, 0x0, 0x0, + 0x0, 0x3c, 0x39, 0xff, 0xff, 0x47, 0x66, 0x5, + 0xf3, 0xff, 0xc3, 0xf6, 0x4, 0xfa, 0xe3, 0xff, + 0xa7, 0xd2, 0x0, 0xfc, 0xe1, 0xff, 0x63, 0x72, + 0x0, 0x0, 0x6, 0xf4, 0xb9, 0xff, 0xff, 0xd7, + 0x7b, 0x7b, 0x7b, 0x95, 0xff, 0xff, 0xff, 0x39, + 0x6c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1c, 0x92, 0xca, 0xe2, 0xca, 0x90, 0x1a, 0x0, + 0x3a, 0xfe, 0xed, 0xff, 0xff, 0xa1, 0xbe, 0x0, + 0x0, 0x5c, 0x69, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x39, + 0x30, 0x0, 0x0, 0x60, 0xba, 0xe4, 0xe6, 0xc6, + 0x6a, 0x0, 0x0, 0xfa, 0xd3, 0xff, 0xff, 0xbf, + 0xe0, 0x0, 0x0, 0x0, 0xf2, 0xd3, 0xff, 0xff, + 0xc3, 0xf0, 0x0, 0x0, 0xc8, 0x8f, 0xff, 0xff, + 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x5a, 0x43, 0xff, 0xff, 0xff, 0x47, 0x64, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf6, 0xdd, + 0xff, 0xff, 0xaf, 0xf4, 0x10, 0x30, 0xfe, 0xdd, + 0xff, 0xff, 0xad, 0xcc, 0x0, 0x0, 0x0, 0x0, + 0x40, 0xec, 0x31, 0x93, 0xb7, 0xb7, 0x83, 0xf, + 0xf7, 0xff, 0xff, 0x99, 0xbe, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x4a, 0x19, 0x85, 0xdf, 0xff, + 0xff, 0xff, 0xff, 0xf9, 0xbb, 0x6b, 0xf, 0x96, + 0x0, 0x0, 0x0, 0x96, 0x87, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2f, + 0x26, 0x0, 0x0, 0x0, 0x74, 0xfe, 0x57, 0xad, + 0xf1, 0xff, 0xff, 0xff, 0xff, 0xed, 0x9b, 0x2f, + 0x86, 0x0, 0x0, 0x0, 0x0, 0x26, 0x41, 0xff, + 0xff, 0xff, 0x5d, 0x84, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x54, 0x51, 0xff, 0xff, 0x2d, 0x66, 0x35, + 0xff, 0xff, 0x9f, 0xd2, 0x4, 0xfe, 0xf3, 0xff, + 0x93, 0xbc, 0xa, 0xfe, 0xef, 0xff, 0x57, 0x5e, + 0x0, 0x0, 0x44, 0x17, 0xf7, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x95, + 0xd2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x30, 0x41, 0xbb, 0xbb, 0xbb, 0x3d, 0x74, 0x0, + 0x20, 0xfe, 0xe5, 0xff, 0xff, 0xaf, 0xcc, 0x0, + 0x0, 0x5e, 0x5b, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x39, + 0x30, 0x0, 0x0, 0xb4, 0x99, 0xc3, 0xcf, 0xa1, + 0xe2, 0x8, 0x24, 0xfe, 0xe3, 0xff, 0xff, 0xb1, + 0xd6, 0x0, 0x0, 0x0, 0xdc, 0xb1, 0xff, 0xff, + 0xe7, 0x5, 0x3c, 0xc, 0xf0, 0xad, 0xff, 0xff, + 0xed, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xa0, 0x7b, 0xff, 0xff, 0xf9, 0xb, 0x20, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfa, 0xef, + 0xff, 0xff, 0xa9, 0xec, 0x4, 0x16, 0xfc, 0xd7, + 0xff, 0xff, 0xc1, 0xde, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x12, 0x66, 0xb4, 0xd6, 0xd4, 0xdc, 0x41, + 0xff, 0xff, 0xff, 0x75, 0x90, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x6, 0x52, 0xcc, 0xfe, 0x5f, + 0xc1, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xc7, 0xd6, + 0x0, 0x0, 0x0, 0x8e, 0x87, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2f, + 0x22, 0x0, 0x0, 0x0, 0xb8, 0xab, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xd3, 0x77, 0xf, 0xe4, 0x6e, + 0x10, 0x0, 0x0, 0x0, 0x0, 0x20, 0x13, 0x3f, + 0x3f, 0x3f, 0x13, 0x32, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x5a, 0x4f, 0xff, 0xff, 0x2f, 0x7c, 0x57, + 0xff, 0xff, 0x8d, 0xc0, 0x1a, 0xf, 0xff, 0xff, + 0x7d, 0xa4, 0x54, 0x21, 0xff, 0xff, 0x29, 0x36, + 0x0, 0x0, 0xaa, 0x73, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdd, + 0xfe, 0x1c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x30, 0x3b, 0xff, 0xff, 0xff, 0x9d, 0xfe, 0xce, + 0xf0, 0x49, 0xff, 0xff, 0xff, 0x91, 0xae, 0x0, + 0x0, 0x34, 0x1f, 0x6b, 0x6b, 0x6b, 0x6b, 0x6b, + 0x6b, 0x91, 0xff, 0xff, 0xff, 0x8b, 0x6b, 0x17, + 0x1c, 0x0, 0x0, 0xc4, 0xbb, 0xff, 0xff, 0xed, + 0x1b, 0xe0, 0xee, 0x4f, 0xff, 0xff, 0xff, 0x83, + 0xa6, 0x0, 0x0, 0x0, 0x9a, 0x71, 0xff, 0xff, + 0xff, 0x6f, 0xf8, 0xe4, 0x25, 0xf1, 0xff, 0xff, + 0xbf, 0xec, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xd2, 0xa3, 0xff, 0xff, 0xdb, 0xfc, 0x2, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf6, 0xdb, + 0xff, 0xff, 0xe3, 0xf, 0xdc, 0xec, 0x39, 0xf9, + 0xff, 0xff, 0xab, 0xcc, 0x0, 0x0, 0x0, 0x0, + 0x1c, 0xb0, 0xd0, 0xdc, 0xbc, 0xd8, 0x9, 0xbf, + 0xff, 0xff, 0xf9, 0x27, 0x4a, 0x0, 0x0, 0x0, + 0x3c, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x14, 0x0, + 0x0, 0x0, 0x3c, 0xcc, 0xf2, 0xf6, 0xdc, 0x78, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x30, 0xa2, + 0xfa, 0x35, 0xa1, 0xf1, 0xff, 0xff, 0xcd, 0xee, + 0x0, 0x0, 0x0, 0x5a, 0x2d, 0x57, 0x57, 0x57, + 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0xf, + 0x14, 0x0, 0x0, 0x0, 0xda, 0xb3, 0xff, 0xff, + 0xf9, 0xb1, 0x4b, 0xfe, 0xbc, 0x44, 0x4, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x2a, 0xe4, 0xfa, + 0xfe, 0xfc, 0xe6, 0x2e, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x42, 0x45, 0xff, 0xff, 0x3f, 0x90, 0x59, + 0xff, 0xff, 0x95, 0xda, 0x9e, 0x39, 0xff, 0xff, + 0x6b, 0x96, 0xd8, 0x85, 0xff, 0xd9, 0xfe, 0xe, + 0x0, 0x8, 0xf6, 0xc1, 0xff, 0xff, 0xcd, 0x63, + 0x63, 0x63, 0x63, 0x63, 0x7f, 0xff, 0xff, 0xff, + 0x43, 0x76, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x18, 0xfe, 0xd9, 0xff, 0xff, 0xff, 0xbb, 0x89, + 0x9f, 0xf1, 0xff, 0xff, 0xf9, 0x39, 0x68, 0x0, + 0x0, 0x8, 0x3e, 0x6a, 0x86, 0x86, 0x86, 0x86, + 0xb8, 0x57, 0xff, 0xff, 0xff, 0x4d, 0x9e, 0x3e, + 0x6, 0x0, 0x0, 0xa0, 0x6d, 0xff, 0xff, 0xff, + 0xdd, 0x8f, 0x99, 0xef, 0xff, 0xff, 0xf3, 0x21, + 0x54, 0x0, 0x0, 0x0, 0x3e, 0xb, 0xdf, 0xff, + 0xff, 0xf9, 0xa1, 0x8f, 0xdf, 0xff, 0xff, 0xff, + 0x57, 0x9c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xf0, 0xc9, 0xff, 0xff, 0xc1, 0xec, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd0, 0x99, + 0xff, 0xff, 0xff, 0xd9, 0x8f, 0x97, 0xeb, 0xff, + 0xff, 0xff, 0x5f, 0x8e, 0x0, 0x0, 0x0, 0x0, + 0x52, 0x43, 0xd5, 0xa1, 0x89, 0x91, 0xd5, 0xff, + 0xff, 0xff, 0xa1, 0xf2, 0xe, 0x0, 0x0, 0x0, + 0x68, 0x6f, 0xff, 0xff, 0xff, 0x35, 0x26, 0x0, + 0x0, 0x0, 0x74, 0x71, 0xe3, 0xe3, 0xaf, 0xc4, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x14, 0x76, 0xe8, 0x15, 0x7f, 0xdb, 0xcd, 0xdc, + 0x0, 0x0, 0x0, 0x10, 0x36, 0x58, 0x6a, 0x6a, + 0x6a, 0x6a, 0x6a, 0x6a, 0x6a, 0x6a, 0x4e, 0x2c, + 0x4, 0x0, 0x0, 0x0, 0xc2, 0xb3, 0xe5, 0x8f, + 0x23, 0xf4, 0x8c, 0x22, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x4a, 0x51, 0xf5, + 0xf5, 0xf5, 0x57, 0x4e, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x24, 0x1b, 0xff, 0xff, 0x6b, 0xac, 0x2d, + 0xff, 0xff, 0xd5, 0xb, 0x1b, 0xc3, 0xff, 0xff, + 0x6d, 0xfa, 0x27, 0xe7, 0xff, 0x7b, 0xc4, 0x0, + 0x0, 0x4c, 0x1f, 0xf9, 0xff, 0xff, 0x7b, 0xd2, + 0x7a, 0x7a, 0x7a, 0x8a, 0xfe, 0xe9, 0xff, 0xff, + 0x9b, 0xda, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xb6, 0x49, 0xf1, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x7f, 0xf0, 0x16, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x6a, 0x57, 0xff, 0xff, 0xff, 0x4d, 0x5c, 0x0, + 0x0, 0x0, 0x0, 0x3a, 0xfe, 0xb3, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x71, 0xe4, + 0xa, 0x0, 0x0, 0x0, 0x2, 0xc0, 0x47, 0xef, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x97, + 0xfc, 0x2a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xfc, 0xe5, 0xff, 0xff, 0xa7, 0xd6, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x64, 0x19, + 0xd7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xb1, 0xfe, 0x30, 0x0, 0x0, 0x0, 0x0, + 0x76, 0x71, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xc5, 0xd, 0x6c, 0x0, 0x0, 0x0, 0x0, + 0x8c, 0x6f, 0xff, 0xff, 0xff, 0x35, 0x36, 0x0, + 0x0, 0x0, 0x9c, 0x7f, 0xff, 0xff, 0xc5, 0xe4, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x6, 0x4e, 0xc8, 0xec, 0x3f, 0xa4, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x88, 0x3f, 0x5, 0xd6, + 0x5e, 0xc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x68, 0x57, 0xff, + 0xff, 0xff, 0x5b, 0x6e, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x8, 0xfe, 0xe3, 0xff, 0xa1, 0xe6, 0xfe, + 0xcf, 0xff, 0xff, 0xf3, 0xf9, 0xe9, 0xe1, 0xff, + 0xdb, 0xa7, 0xeb, 0xff, 0xc3, 0xfe, 0x44, 0x0, + 0x0, 0xb4, 0x7b, 0xff, 0xff, 0xfd, 0x27, 0x50, + 0x0, 0x0, 0x0, 0x0, 0xe6, 0xad, 0xff, 0xff, + 0xe3, 0xfe, 0x24, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x20, 0xdc, 0x31, 0xb3, 0xf7, 0xff, 0xff, + 0xff, 0xfd, 0xcb, 0x57, 0xfa, 0x4a, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x4c, 0x57, 0xff, 0xff, 0xff, 0x4d, 0x42, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x7c, 0xfe, 0x7f, 0xe1, + 0xff, 0xff, 0xff, 0xff, 0xd9, 0x61, 0xf8, 0x3e, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1e, 0xda, 0x37, + 0xbb, 0xfb, 0xff, 0xff, 0xff, 0xe3, 0x75, 0xfe, + 0x5e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xf8, 0xf7, 0xff, 0xff, 0x93, 0xa4, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xae, + 0x17, 0x9d, 0xef, 0xff, 0xff, 0xff, 0xff, 0xe3, + 0x83, 0x5, 0x7a, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x64, 0x65, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xe5, + 0x87, 0x5, 0x92, 0x2, 0x0, 0x0, 0x0, 0x0, + 0x68, 0x6f, 0xff, 0xff, 0xff, 0x35, 0x26, 0x0, + 0x0, 0x0, 0xa6, 0x7f, 0xff, 0xff, 0xc1, 0xe4, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x16, 0x16, 0x16, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x16, 0x16, 0x16, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x4c, 0x57, 0xff, + 0xff, 0xff, 0x5b, 0x52, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xde, 0xa7, 0xff, 0xe9, 0xd, 0xc6, + 0x39, 0xdf, 0xff, 0xff, 0xe5, 0x4b, 0x5b, 0xf3, + 0xff, 0xff, 0xf5, 0xa3, 0x13, 0x92, 0x0, 0x0, + 0x0, 0xb2, 0xc7, 0xff, 0xff, 0xcf, 0xfc, 0xc, + 0x0, 0x0, 0x0, 0x0, 0x90, 0x63, 0xff, 0xff, + 0xff, 0x4d, 0x24, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x12, 0x86, 0xf2, 0xd, 0x47, 0x59, + 0x4d, 0x1b, 0xfc, 0xaa, 0x2a, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x2a, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x24, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x48, 0xcc, 0xfe, + 0x31, 0x57, 0x55, 0x2d, 0xfe, 0xbc, 0x30, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x16, 0x90, + 0xf6, 0x19, 0x4d, 0x57, 0x39, 0xfe, 0xce, 0x40, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xe4, 0xfe, 0xfe, 0xfe, 0xfe, 0x5c, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, + 0x68, 0xe4, 0xfe, 0x3d, 0x57, 0x55, 0x31, 0xfe, + 0xd0, 0x4c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x34, 0xca, 0xfe, 0x2f, 0x4f, 0x55, 0x35, 0xfe, + 0xd4, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x3c, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x14, 0x0, + 0x0, 0x0, 0xbe, 0x89, 0xff, 0xff, 0xa7, 0xca, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x2a, 0xfe, 0xfe, + 0xfe, 0xfe, 0xfe, 0x2c, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x82, 0x47, 0xff, 0xff, 0x91, 0xf4, + 0xca, 0x5, 0x45, 0x43, 0x9, 0xd2, 0xe6, 0x1f, + 0x55, 0x49, 0xf, 0xec, 0x6e, 0x4, 0x0, 0x0, + 0x0, 0x94, 0xfe, 0xfe, 0xfe, 0xfe, 0xa0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x32, 0xfe, 0xfe, 0xfe, + 0xfe, 0xfe, 0x24, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x2, 0x22, 0x48, 0x5e, + 0x4e, 0x2a, 0x8, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x12, + 0x38, 0x58, 0x56, 0x34, 0x10, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x6, 0x2a, 0x4c, 0x58, 0x3c, 0x16, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x18, 0x3e, 0x5c, 0x58, 0x38, 0x12, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x10, 0x32, 0x54, 0x54, 0x38, 0x14, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x6, 0xf0, 0xaf, 0xff, 0xff, 0x5d, 0x88, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1e, 0xfe, 0xaf, 0xff, 0xfb, 0x6b, + 0xfa, 0x8c, 0x46, 0x36, 0x1c, 0x0, 0x2c, 0x58, + 0x6e, 0x52, 0x22, 0x4, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x18, 0x17, 0xf1, 0xff, 0xd1, 0xfe, 0x2e, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x7c, 0x1b, 0xd9, 0xff, 0xfd, + 0xab, 0x35, 0xfe, 0xf2, 0xee, 0xf8, 0xfe, 0x4f, + 0x2f, 0x5c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x18, 0x37, 0xd9, 0xf1, 0x41, 0xae, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x8, 0xb4, 0x1f, 0xc7, 0xff, + 0xff, 0xff, 0xdf, 0xc7, 0xbf, 0xd3, 0xef, 0xff, + 0x87, 0x78, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x14, 0xb4, 0x5, 0x31, 0xde, 0x1c, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x8, 0x98, 0xfe, 0x67, + 0xc7, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd3, + 0x5d, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x10, 0x10, 0x10, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x36, 0xac, + 0xf6, 0x13, 0x49, 0x5f, 0x6b, 0x57, 0x23, 0xfc, + 0xb6, 0x2e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x4, 0x24, 0x4c, 0x72, 0x78, 0x60, 0x34, 0xc, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x4, 0xe, 0x1a, 0x20, 0x20, 0x20, 0x1e, + 0x14, 0x8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x20, 0x4e, 0x72, 0x72, 0x4e, 0x20, 0x2, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xe, 0x1a, + 0x20, 0x20, 0x20, 0x1c, 0x10, 0x6, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x4, 0xe, 0x1a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x18, 0xe, 0x2, 0x0, + 0x0, 0x4, 0xe, 0x1a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x18, 0xe, 0x2, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1e, + 0x4a, 0x70, 0x74, 0x54, 0x28, 0x4, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xe, 0x1a, + 0x20, 0x16, 0xc, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xc, 0x16, 0x20, 0x1a, 0xe, 0x4, 0x0, 0x0, + 0x0, 0x2, 0xc, 0x18, 0x20, 0x18, 0xc, 0x2, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x2, 0xe, 0x18, 0x20, 0x16, 0xc, + 0x0, 0x0, 0x0, 0x0, 0x4, 0xe, 0x1a, 0x20, + 0x16, 0xc, 0x0, 0x0, 0x0, 0x0, 0xa, 0x16, + 0x20, 0x20, 0x18, 0xc, 0x2, 0x0, 0x0, 0x4, + 0xe, 0x1a, 0x20, 0x16, 0xc, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, + 0xe, 0x1a, 0x20, 0x20, 0x16, 0xc, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0x16, 0x20, + 0x20, 0x1a, 0xe, 0x4, 0x0, 0x0, 0x0, 0x4, + 0xe, 0x1a, 0x20, 0x16, 0xc, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xc, 0x16, 0x20, 0x1a, 0xe, 0x4, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x14, 0x3e, 0x66, 0x72, 0x56, 0x28, 0x4, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x52, 0x11, 0x23, 0x23, 0x23, 0x23, 0x23, + 0x1f, 0x9, 0xfe, 0xea, 0x9e, 0x30, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x60, 0xe2, + 0x5, 0x49, 0x65, 0x65, 0x49, 0xb, 0xec, 0x76, + 0x8, 0x0, 0x0, 0x0, 0x0, 0x52, 0x11, 0x23, + 0x23, 0x23, 0x23, 0x23, 0x15, 0xfe, 0xf8, 0xc2, + 0x5c, 0x8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x52, 0x11, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, + 0x23, 0x23, 0x23, 0x23, 0x23, 0xd, 0x32, 0x0, + 0x0, 0x52, 0x11, 0x23, 0x23, 0x23, 0x23, 0x23, + 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0xd, 0x34, + 0x0, 0x0, 0x0, 0x0, 0x4, 0x5c, 0xe0, 0x5, + 0x45, 0x65, 0x67, 0x4f, 0x13, 0xf6, 0x8e, 0x14, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x52, 0x11, 0x23, + 0x23, 0x23, 0xfe, 0x2, 0x0, 0x0, 0x0, 0x2, + 0xfe, 0x23, 0x23, 0x23, 0x11, 0x4e, 0x0, 0x0, + 0x0, 0x24, 0xb, 0x23, 0x23, 0x23, 0xb, 0x2e, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x32, 0xd, 0x23, 0x23, 0x23, 0x9, + 0x1c, 0x0, 0x0, 0x0, 0x52, 0x11, 0x23, 0x23, + 0x23, 0xfe, 0x2, 0x0, 0x0, 0x40, 0xfe, 0x21, + 0x23, 0x23, 0x23, 0xf, 0x4, 0x0, 0x0, 0x52, + 0x11, 0x23, 0x23, 0x23, 0xfe, 0x2, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x52, + 0x11, 0x23, 0x23, 0x23, 0x23, 0x5, 0x30, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x40, 0x9, 0x23, 0x23, + 0x23, 0x23, 0xf, 0x44, 0x0, 0x0, 0x0, 0x52, + 0x11, 0x23, 0x23, 0x23, 0xfe, 0x42, 0x0, 0x0, + 0x0, 0x2, 0xfe, 0x23, 0x23, 0x23, 0x11, 0x4e, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x40, 0xc8, + 0xfe, 0x35, 0x5d, 0x67, 0x51, 0x11, 0xf2, 0x8a, + 0x14, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x88, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xeb, 0xbd, 0x5f, 0xfe, 0x70, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x8, 0xa6, 0x11, 0x97, + 0xef, 0xff, 0xff, 0xff, 0xff, 0xf5, 0xa7, 0x1f, + 0xc2, 0xe, 0x0, 0x0, 0x0, 0x88, 0x87, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xd1, 0x8d, + 0x1b, 0xd6, 0x2c, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x88, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0x58, 0x0, + 0x0, 0x88, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x63, 0x5c, + 0x0, 0x0, 0x0, 0x6, 0xa4, 0xf, 0x91, 0xed, + 0xff, 0xff, 0xff, 0xff, 0xfb, 0xbb, 0x35, 0xdc, + 0x1c, 0x0, 0x0, 0x0, 0x0, 0x88, 0x87, 0xff, + 0xff, 0xff, 0xd, 0x4, 0x0, 0x0, 0x0, 0x4, + 0xd, 0xff, 0xff, 0xff, 0x83, 0x82, 0x0, 0x0, + 0x0, 0x42, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x52, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x58, 0x5f, 0xff, 0xff, 0xff, 0x43, + 0x36, 0x0, 0x0, 0x0, 0x88, 0x87, 0xff, 0xff, + 0xff, 0xd, 0x4, 0x0, 0xe, 0xe0, 0x75, 0xff, + 0xff, 0xff, 0xd9, 0x15, 0x4, 0x0, 0x0, 0x88, + 0x87, 0xff, 0xff, 0xff, 0xd, 0x4, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x88, + 0x87, 0xff, 0xff, 0xff, 0xff, 0x5f, 0x94, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xac, 0x75, 0xff, 0xff, + 0xff, 0xff, 0x77, 0x76, 0x0, 0x0, 0x0, 0x88, + 0x87, 0xff, 0xff, 0xff, 0x77, 0xda, 0x8, 0x0, + 0x0, 0x4, 0xd, 0xff, 0xff, 0xff, 0x83, 0x82, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x7a, 0xfe, 0x75, + 0xdf, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xb5, 0x35, + 0xde, 0x2a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xa7, 0xfe, 0x36, + 0x0, 0x0, 0x0, 0x0, 0x86, 0x1b, 0xd1, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe3, + 0x29, 0x94, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xed, 0x59, 0xee, 0x26, 0x0, 0x0, 0x0, 0x0, + 0xac, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0x68, 0x0, + 0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x63, 0x6e, + 0x0, 0x0, 0x0, 0x86, 0x19, 0xcf, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, 0x43, + 0xb8, 0x0, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff, + 0xff, 0xff, 0xd, 0x6, 0x0, 0x0, 0x0, 0x6, + 0xd, 0xff, 0xff, 0xff, 0x83, 0xa6, 0x0, 0x0, + 0x0, 0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x76, 0x5f, 0xff, 0xff, 0xff, 0x43, + 0x4c, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff, 0xff, + 0xff, 0xd, 0x6, 0x0, 0x8a, 0x27, 0xef, 0xff, + 0xff, 0xf9, 0x43, 0xb8, 0x4, 0x0, 0x0, 0xac, + 0x87, 0xff, 0xff, 0xff, 0xd, 0x6, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xac, + 0x87, 0xff, 0xff, 0xff, 0xff, 0xb1, 0xee, 0x4, + 0x0, 0x0, 0x0, 0xa, 0xf8, 0xc3, 0xff, 0xff, + 0xff, 0xff, 0x77, 0x98, 0x0, 0x0, 0x0, 0xac, + 0x87, 0xff, 0xff, 0xff, 0xeb, 0x1b, 0x6e, 0x0, + 0x0, 0x6, 0xd, 0xff, 0xff, 0xff, 0x83, 0xa6, + 0x0, 0x0, 0x0, 0x0, 0x60, 0x5, 0xb1, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, + 0x57, 0xde, 0x14, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xad, 0xad, + 0xb1, 0xc7, 0xfb, 0xff, 0xff, 0xff, 0x67, 0x9a, + 0x0, 0x0, 0x0, 0x20, 0xfe, 0xb7, 0xff, 0xff, + 0xff, 0xbf, 0x7d, 0x89, 0xbd, 0xff, 0xff, 0xff, + 0xc3, 0xfe, 0x1c, 0x0, 0x0, 0xac, 0x87, 0xff, + 0xff, 0xff, 0xad, 0xad, 0xb7, 0xd7, 0xff, 0xff, + 0xff, 0xf9, 0x51, 0xc6, 0x2, 0x0, 0x0, 0x0, + 0xac, 0x87, 0xff, 0xff, 0xff, 0xad, 0xad, 0xad, + 0xad, 0xad, 0xad, 0xad, 0xad, 0x41, 0x44, 0x0, + 0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xad, 0xad, + 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0x43, 0x4a, + 0x0, 0x0, 0x24, 0xfe, 0xb9, 0xff, 0xff, 0xff, + 0xcd, 0x85, 0x81, 0xb1, 0xfd, 0xff, 0xff, 0xdb, + 0x9, 0x32, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff, + 0xff, 0xff, 0xd, 0x6, 0x0, 0x0, 0x0, 0x6, + 0xd, 0xff, 0xff, 0xff, 0x83, 0xa6, 0x0, 0x0, + 0x0, 0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x76, 0x5f, 0xff, 0xff, 0xff, 0x43, + 0x4c, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff, 0xff, + 0xff, 0xd, 0x6, 0x36, 0xfe, 0xb9, 0xff, 0xff, + 0xff, 0x87, 0xf0, 0x1c, 0x0, 0x0, 0x0, 0xac, + 0x87, 0xff, 0xff, 0xff, 0xd, 0x6, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xac, + 0x87, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xf, 0x3a, + 0x0, 0x0, 0x0, 0x50, 0x21, 0xfb, 0xff, 0xff, + 0xff, 0xff, 0x77, 0x98, 0x0, 0x0, 0x0, 0xac, + 0x87, 0xff, 0xff, 0xff, 0xff, 0xa1, 0xf6, 0x1a, + 0x0, 0x6, 0xd, 0xff, 0xff, 0xff, 0x83, 0xa6, + 0x0, 0x0, 0x0, 0x12, 0xf4, 0x97, 0xff, 0xff, + 0xff, 0xd9, 0x91, 0x83, 0xad, 0xf9, 0xff, 0xff, + 0xf1, 0x35, 0x8e, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0xd8, + 0xe0, 0xfa, 0x43, 0xf7, 0xff, 0xff, 0xb5, 0xd6, + 0x0, 0x0, 0x0, 0x7c, 0x49, 0xff, 0xff, 0xff, + 0xa3, 0xfe, 0xc6, 0xc6, 0xfe, 0x95, 0xff, 0xff, + 0xff, 0x43, 0x6a, 0x0, 0x0, 0xac, 0x87, 0xff, + 0xff, 0xff, 0xd, 0xda, 0xe8, 0xfe, 0x53, 0xed, + 0xff, 0xff, 0xe3, 0xb, 0x40, 0x0, 0x0, 0x0, + 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0xd8, 0xd6, + 0xd6, 0xd6, 0xd6, 0xd6, 0xbc, 0x84, 0x1a, 0x0, + 0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0xd8, + 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xbc, 0x84, 0x1c, + 0x0, 0x0, 0x80, 0x4f, 0xff, 0xff, 0xff, 0xb1, + 0xfe, 0xce, 0xbe, 0xfa, 0x77, 0xff, 0xff, 0xff, + 0x63, 0x8c, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff, + 0xff, 0xff, 0xd, 0x6, 0x0, 0x0, 0x0, 0x6, + 0xd, 0xff, 0xff, 0xff, 0x83, 0xa6, 0x0, 0x0, + 0x0, 0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x76, 0x5f, 0xff, 0xff, 0xff, 0x43, + 0x4c, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff, 0xff, + 0xff, 0xd, 0xe, 0xd6, 0x69, 0xff, 0xff, 0xff, + 0xc7, 0xfe, 0x50, 0x0, 0x0, 0x0, 0x0, 0xac, + 0x87, 0xff, 0xff, 0xff, 0xd, 0x6, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xac, + 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6b, 0xa0, + 0x0, 0x0, 0x0, 0xba, 0x7f, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x77, 0x98, 0x0, 0x0, 0x0, 0xac, + 0x87, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x41, 0xa2, + 0x0, 0x6, 0xd, 0xff, 0xff, 0xff, 0x83, 0xa6, + 0x0, 0x0, 0x0, 0x68, 0x31, 0xfb, 0xff, 0xff, + 0xc1, 0x9, 0xda, 0xc0, 0xf8, 0x51, 0xf9, 0xff, + 0xff, 0xb9, 0xf8, 0x8, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0x6, + 0x0, 0x1c, 0xfc, 0xcf, 0xff, 0xff, 0xcb, 0xe6, + 0x0, 0x0, 0x0, 0xca, 0xa1, 0xff, 0xff, 0xf7, + 0x21, 0x72, 0x0, 0x0, 0x60, 0x13, 0xfb, 0xff, + 0xff, 0x91, 0x98, 0x0, 0x0, 0xac, 0x87, 0xff, + 0xff, 0xff, 0xd, 0x6, 0x0, 0x26, 0xde, 0x67, + 0xff, 0xff, 0xff, 0x73, 0x9c, 0x0, 0x0, 0x0, + 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0x6, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0x6, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xce, 0xa3, 0xff, 0xff, 0xf7, 0x27, + 0x80, 0x0, 0x0, 0x42, 0xfe, 0xe3, 0xff, 0xff, + 0xa7, 0x9a, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff, + 0xff, 0xff, 0xd, 0x6, 0x0, 0x0, 0x0, 0x6, + 0xd, 0xff, 0xff, 0xff, 0x83, 0xa6, 0x0, 0x0, + 0x0, 0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x76, 0x5f, 0xff, 0xff, 0xff, 0x43, + 0x4c, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff, 0xff, + 0xff, 0xd, 0x7e, 0x1f, 0xeb, 0xff, 0xff, 0xef, + 0x2d, 0x9a, 0x0, 0x0, 0x0, 0x0, 0x0, 0xac, + 0x87, 0xff, 0xff, 0xff, 0xd, 0x6, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xac, + 0x87, 0xff, 0xff, 0xeb, 0xff, 0xff, 0xbb, 0xf4, + 0x6, 0x0, 0x10, 0xfc, 0xcb, 0xff, 0xff, 0xeb, + 0xff, 0xff, 0x77, 0x98, 0x0, 0x0, 0x0, 0xac, + 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc9, 0xfe, + 0x3a, 0x6, 0xd, 0xff, 0xff, 0xff, 0x83, 0xa6, + 0x0, 0x0, 0x0, 0xbe, 0x93, 0xff, 0xff, 0xfb, + 0x37, 0x96, 0x0, 0x0, 0x26, 0xf6, 0xa9, 0xff, + 0xff, 0xfd, 0x1f, 0x3a, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0x6, + 0x6, 0x5e, 0xfe, 0xd9, 0xff, 0xff, 0xb5, 0xd4, + 0x0, 0x0, 0x0, 0xec, 0xcb, 0xff, 0xff, 0xcb, + 0xf8, 0xa, 0x0, 0x0, 0x4, 0xf4, 0xa3, 0xbd, + 0xbd, 0x83, 0x8a, 0x0, 0x0, 0xac, 0x87, 0xff, + 0xff, 0xff, 0xd, 0x6, 0x0, 0x0, 0x34, 0xfe, + 0xe7, 0xff, 0xff, 0xb1, 0xd8, 0x0, 0x0, 0x0, + 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0x4c, 0x46, + 0x46, 0x46, 0x46, 0x30, 0x1a, 0x0, 0x0, 0x0, + 0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0x6, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xee, 0xcd, 0xff, 0xff, 0xcd, 0xfa, + 0xc, 0x0, 0x0, 0x0, 0xc4, 0x49, 0x63, 0x63, + 0x49, 0x82, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff, + 0xff, 0xff, 0xd, 0x6, 0x0, 0x0, 0x0, 0x6, + 0xd, 0xff, 0xff, 0xff, 0x83, 0xa6, 0x0, 0x0, + 0x0, 0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x76, 0x5f, 0xff, 0xff, 0xff, 0x43, + 0x4c, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff, 0xff, + 0xff, 0xd, 0xfc, 0xaf, 0xff, 0xff, 0xff, 0x6b, + 0xde, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0xac, + 0x87, 0xff, 0xff, 0xff, 0xd, 0x6, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xac, + 0x87, 0xff, 0xff, 0xcb, 0xe3, 0xff, 0xf7, 0x17, + 0x44, 0x0, 0x5e, 0x2d, 0xfd, 0xff, 0xd3, 0xdb, + 0xff, 0xff, 0x77, 0x98, 0x0, 0x0, 0x0, 0xac, + 0x87, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0x6d, + 0xd0, 0xa, 0xd, 0xff, 0xff, 0xff, 0x83, 0xa6, + 0x0, 0x0, 0x0, 0xe8, 0xc5, 0xff, 0xff, 0xd3, + 0xfc, 0x16, 0x0, 0x0, 0x0, 0x8e, 0x53, 0xff, + 0xff, 0xff, 0x65, 0x72, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0xfe, + 0xfe, 0x17, 0x91, 0xff, 0xff, 0xff, 0x5b, 0x96, + 0x0, 0x0, 0x0, 0xf6, 0xdb, 0xff, 0xff, 0xb3, + 0xe2, 0x0, 0x0, 0x0, 0x0, 0x6c, 0xba, 0xde, + 0xd8, 0xac, 0x4c, 0x0, 0x0, 0xac, 0x87, 0xff, + 0xff, 0xff, 0xd, 0x6, 0x0, 0x0, 0x0, 0xf2, + 0xc3, 0xff, 0xff, 0xcf, 0xf0, 0x0, 0x0, 0x0, + 0xac, 0x87, 0xff, 0xff, 0xff, 0x43, 0x3f, 0x3f, + 0x3f, 0x3f, 0x3f, 0x3f, 0x9, 0xe, 0x0, 0x0, + 0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0xf0, + 0xf0, 0xf0, 0xf0, 0xf0, 0xda, 0xa0, 0xa, 0x0, + 0x0, 0x0, 0xf6, 0xdb, 0xff, 0xff, 0xb3, 0xe4, + 0x0, 0x0, 0x0, 0x0, 0x20, 0x4c, 0x70, 0x70, + 0x4c, 0x20, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff, + 0xff, 0xff, 0xd, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, + 0xd, 0xff, 0xff, 0xff, 0x83, 0xa6, 0x0, 0x0, + 0x0, 0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x76, 0x5f, 0xff, 0xff, 0xff, 0x43, + 0x4c, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff, 0xff, + 0xff, 0x33, 0x69, 0xff, 0xff, 0xff, 0xb1, 0xfe, + 0x38, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xac, + 0x87, 0xff, 0xff, 0xff, 0xd, 0x6, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xac, + 0x87, 0xff, 0xff, 0xd5, 0x99, 0xff, 0xff, 0x75, + 0xac, 0x0, 0xc6, 0x89, 0xff, 0xff, 0x85, 0xe3, + 0xff, 0xff, 0x77, 0x98, 0x0, 0x0, 0x0, 0xac, + 0x87, 0xff, 0xff, 0xff, 0x5f, 0xff, 0xff, 0xe5, + 0x13, 0x66, 0xd, 0xff, 0xff, 0xff, 0x83, 0xa6, + 0x0, 0x0, 0x0, 0xf4, 0xd9, 0xff, 0xff, 0xb7, + 0xe6, 0x0, 0x0, 0x0, 0x0, 0x32, 0x27, 0xff, + 0xff, 0xff, 0x7d, 0x9a, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xf1, 0xf1, + 0xf3, 0xff, 0xff, 0xff, 0xf5, 0x81, 0xfc, 0x2c, + 0x0, 0x0, 0x0, 0xf8, 0xdf, 0xff, 0xff, 0xad, + 0xd8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff, + 0xff, 0xff, 0xd, 0x6, 0x0, 0x0, 0x0, 0xe4, + 0xb7, 0xff, 0xff, 0xdb, 0xf6, 0x0, 0x0, 0x0, + 0xac, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x29, 0x1c, 0x0, 0x0, + 0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xcf, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0x21, 0x18, 0x0, + 0x0, 0x0, 0xf8, 0xdf, 0xff, 0xff, 0xad, 0xd8, + 0x0, 0x68, 0xc0, 0xe4, 0xec, 0xec, 0xec, 0xe4, + 0xbe, 0x62, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff, + 0xff, 0xff, 0xcf, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcf, 0xff, 0xff, 0xff, 0x83, 0xa6, 0x0, 0x0, + 0x0, 0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x76, 0x5f, 0xff, 0xff, 0xff, 0x43, + 0x4c, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xe5, 0x19, 0x82, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xac, + 0x87, 0xff, 0xff, 0xff, 0xd, 0x6, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xac, + 0x87, 0xff, 0xff, 0xdd, 0x3b, 0xff, 0xff, 0xc3, + 0xf8, 0x20, 0xfe, 0xd5, 0xff, 0xfb, 0x25, 0xeb, + 0xff, 0xff, 0x77, 0x98, 0x0, 0x0, 0x0, 0xac, + 0x87, 0xff, 0xff, 0xff, 0xd, 0xbb, 0xff, 0xff, + 0x99, 0xf0, 0xd, 0xff, 0xff, 0xff, 0x83, 0xa6, + 0x0, 0x0, 0x0, 0xf8, 0xdf, 0xff, 0xff, 0xad, + 0xda, 0x0, 0x0, 0x0, 0x0, 0x10, 0xd, 0xff, + 0xff, 0xff, 0x87, 0xa8, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xe3, 0x81, 0xfe, 0x6a, + 0x0, 0x0, 0x0, 0xfa, 0xdf, 0xff, 0xff, 0xad, + 0xd6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff, + 0xff, 0xff, 0xd, 0x6, 0x0, 0x0, 0x0, 0xe0, + 0xb7, 0xff, 0xff, 0xdd, 0xf8, 0x0, 0x0, 0x0, + 0xac, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x29, 0x22, 0x0, 0x0, + 0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x29, 0x22, 0x0, + 0x0, 0x0, 0xfa, 0xdf, 0xff, 0xff, 0xad, 0xd6, + 0x0, 0xc4, 0x9f, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, + 0x9b, 0xbe, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x83, 0xa6, 0x0, 0x0, + 0x0, 0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x76, 0x5f, 0xff, 0xff, 0xff, 0x43, + 0x4c, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0x27, 0x90, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xac, + 0x87, 0xff, 0xff, 0xff, 0xd, 0x6, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xac, + 0x87, 0xff, 0xff, 0xe5, 0xfe, 0xd3, 0xff, 0xfb, + 0x21, 0x98, 0x39, 0xff, 0xff, 0xc3, 0xfe, 0xf3, + 0xff, 0xff, 0x77, 0x98, 0x0, 0x0, 0x0, 0xac, + 0x87, 0xff, 0xff, 0xff, 0xd, 0x31, 0xf7, 0xff, + 0xf9, 0x37, 0xd, 0xff, 0xff, 0xff, 0x83, 0xa6, + 0x0, 0x0, 0x0, 0xfa, 0xdf, 0xff, 0xff, 0xad, + 0xd6, 0x0, 0x0, 0x0, 0x0, 0x6, 0xd, 0xff, + 0xff, 0xff, 0x87, 0xac, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0x93, 0x91, + 0x91, 0x95, 0xbb, 0xff, 0xff, 0xff, 0xa1, 0xf6, + 0x12, 0x0, 0x0, 0xf8, 0xdf, 0xff, 0xff, 0xad, + 0xda, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff, + 0xff, 0xff, 0xd, 0x6, 0x0, 0x0, 0x0, 0xe4, + 0xb7, 0xff, 0xff, 0xdb, 0xf6, 0x0, 0x0, 0x0, + 0xac, 0x87, 0xff, 0xff, 0xff, 0x9d, 0x9b, 0x9b, + 0x9b, 0x9b, 0x9b, 0x9b, 0x19, 0x14, 0x0, 0x0, + 0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xef, 0xef, + 0xef, 0xef, 0xef, 0xef, 0xef, 0x27, 0x1a, 0x0, + 0x0, 0x0, 0xf8, 0xdf, 0xff, 0xff, 0xad, 0xda, + 0x0, 0xda, 0xcd, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xc7, 0xe4, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff, + 0xff, 0xff, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, + 0xef, 0xff, 0xff, 0xff, 0x83, 0xa6, 0x0, 0x0, + 0x0, 0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x76, 0x5f, 0xff, 0xff, 0xff, 0x43, + 0x4c, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff, 0xff, + 0xff, 0xe9, 0xe9, 0xff, 0xff, 0xff, 0xbb, 0xfe, + 0x3c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xac, + 0x87, 0xff, 0xff, 0xff, 0xd, 0x6, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xac, + 0x87, 0xff, 0xff, 0xef, 0xfe, 0x85, 0xff, 0xff, + 0x7d, 0xf2, 0x93, 0xff, 0xff, 0x71, 0xfe, 0xfb, + 0xff, 0xff, 0x77, 0x98, 0x0, 0x0, 0x0, 0xac, + 0x87, 0xff, 0xff, 0xff, 0xd, 0xec, 0x93, 0xff, + 0xff, 0xbf, 0xd, 0xff, 0xff, 0xff, 0x83, 0xa6, + 0x0, 0x0, 0x0, 0xf8, 0xdf, 0xff, 0xff, 0xad, + 0xda, 0x0, 0x0, 0x0, 0x0, 0x12, 0xd, 0xff, + 0xff, 0xff, 0x87, 0xa8, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0xba, + 0xba, 0xcc, 0xfe, 0x8b, 0xff, 0xff, 0xfb, 0x31, + 0x46, 0x0, 0x0, 0xf6, 0xdb, 0xff, 0xff, 0xb5, + 0xe4, 0x0, 0x0, 0x0, 0x0, 0x6c, 0xb8, 0xdc, + 0xd6, 0xa8, 0x4c, 0x0, 0x0, 0xac, 0x87, 0xff, + 0xff, 0xff, 0xd, 0x6, 0x0, 0x0, 0x0, 0xf4, + 0xc5, 0xff, 0xff, 0xcd, 0xee, 0x0, 0x0, 0x0, + 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0xc8, 0xc6, + 0xc6, 0xc6, 0xc6, 0xa4, 0x68, 0x6, 0x0, 0x0, + 0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0xfe, + 0xfe, 0xfe, 0xfe, 0xfe, 0xf8, 0xd4, 0xc, 0x0, + 0x0, 0x0, 0xf6, 0xdb, 0xff, 0xff, 0xb5, 0xe6, + 0x0, 0xc2, 0x9b, 0xc1, 0xc1, 0xef, 0xff, 0xff, + 0xc7, 0xec, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff, + 0xff, 0xff, 0xd, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, + 0xd, 0xff, 0xff, 0xff, 0x83, 0xa6, 0x0, 0x0, + 0x0, 0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x76, 0x5f, 0xff, 0xff, 0xff, 0x43, + 0x4c, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff, 0xff, + 0xff, 0xd, 0xfe, 0xc1, 0xff, 0xff, 0xff, 0x71, + 0xde, 0xe, 0x0, 0x0, 0x0, 0x0, 0x0, 0xac, + 0x87, 0xff, 0xff, 0xff, 0xd, 0x6, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xac, + 0x87, 0xff, 0xff, 0xf7, 0xfe, 0x25, 0xfb, 0xff, + 0xcb, 0xfe, 0xdd, 0xff, 0xf3, 0x11, 0xf, 0xff, + 0xff, 0xff, 0x77, 0x98, 0x0, 0x0, 0x0, 0xac, + 0x87, 0xff, 0xff, 0xff, 0xd, 0x60, 0xf, 0xe3, + 0xff, 0xff, 0x67, 0xff, 0xff, 0xff, 0x83, 0xa6, + 0x0, 0x0, 0x0, 0xf4, 0xd9, 0xff, 0xff, 0xbb, + 0xe8, 0x0, 0x0, 0x0, 0x0, 0x36, 0x2b, 0xff, + 0xff, 0xff, 0x7b, 0x98, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0x6, + 0x0, 0x0, 0x70, 0x35, 0xff, 0xff, 0xff, 0x6b, + 0x74, 0x0, 0x0, 0xec, 0xcb, 0xff, 0xff, 0xcd, + 0xfa, 0xc, 0x0, 0x0, 0x6, 0xf6, 0xa3, 0xbb, + 0xbb, 0x81, 0x8e, 0x0, 0x0, 0xac, 0x87, 0xff, + 0xff, 0xff, 0xd, 0x6, 0x0, 0x0, 0x3c, 0x5, + 0xeb, 0xff, 0xff, 0xaf, 0xd6, 0x0, 0x0, 0x0, + 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0x6, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0x6, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xec, 0xcb, 0xff, 0xff, 0xcf, 0xfa, + 0x12, 0x62, 0xb8, 0xe0, 0xfe, 0xcb, 0xff, 0xff, + 0xc7, 0xec, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff, + 0xff, 0xff, 0xd, 0x6, 0x0, 0x0, 0x0, 0x6, + 0xd, 0xff, 0xff, 0xff, 0x83, 0xa6, 0x0, 0x0, + 0x0, 0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70, + 0x0, 0x0, 0x34, 0xe8, 0xfc, 0xfe, 0xfc, 0xe6, + 0x1a, 0x0, 0x80, 0x5f, 0xff, 0xff, 0xff, 0x43, + 0x44, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff, 0xff, + 0xff, 0xd, 0x98, 0x31, 0xf3, 0xff, 0xff, 0xef, + 0x27, 0x8e, 0x0, 0x0, 0x0, 0x0, 0x0, 0xac, + 0x87, 0xff, 0xff, 0xff, 0xd, 0x6, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xac, + 0x87, 0xff, 0xff, 0xff, 0x5, 0xfa, 0xc1, 0xff, + 0xfd, 0x5d, 0xff, 0xff, 0xb1, 0xf0, 0x21, 0xff, + 0xff, 0xff, 0x77, 0x98, 0x0, 0x0, 0x0, 0xac, + 0x87, 0xff, 0xff, 0xff, 0xd, 0xa, 0xca, 0x65, + 0xff, 0xff, 0xe3, 0xff, 0xff, 0xff, 0x83, 0xa6, + 0x0, 0x0, 0x0, 0xe8, 0xc3, 0xff, 0xff, 0xd5, + 0xfe, 0x1a, 0x0, 0x0, 0x0, 0x92, 0x55, 0xff, + 0xff, 0xff, 0x61, 0x6e, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0x6, + 0x0, 0x0, 0x8c, 0x3b, 0xff, 0xff, 0xff, 0x75, + 0x7e, 0x0, 0x0, 0xca, 0xa1, 0xff, 0xff, 0xf7, + 0x23, 0x72, 0x0, 0x0, 0x6a, 0x17, 0xfb, 0xff, + 0xff, 0x95, 0x9c, 0x0, 0x0, 0xac, 0x87, 0xff, + 0xff, 0xff, 0xd, 0x6, 0x0, 0x32, 0xe6, 0x71, + 0xff, 0xff, 0xff, 0x6d, 0x98, 0x0, 0x0, 0x0, + 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0x6, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0x6, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xc8, 0x9d, 0xff, 0xff, 0xf9, 0x31, + 0x92, 0x0, 0x0, 0x0, 0xf0, 0xcb, 0xff, 0xff, + 0xc7, 0xec, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff, + 0xff, 0xff, 0xd, 0x6, 0x0, 0x0, 0x0, 0x6, + 0xd, 0xff, 0xff, 0xff, 0x83, 0xa6, 0x0, 0x0, + 0x0, 0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70, + 0x0, 0x0, 0x4c, 0x67, 0xf7, 0xf7, 0xf7, 0x3f, + 0x5e, 0x0, 0xb2, 0x75, 0xff, 0xff, 0xff, 0x31, + 0x2c, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff, 0xff, + 0xff, 0xd, 0x18, 0xe8, 0x83, 0xff, 0xff, 0xff, + 0xbd, 0xfe, 0x3e, 0x0, 0x0, 0x0, 0x0, 0xac, + 0x87, 0xff, 0xff, 0xff, 0xd, 0x6, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xac, + 0x87, 0xff, 0xff, 0xff, 0xd, 0xac, 0x71, 0xff, + 0xff, 0xe9, 0xff, 0xff, 0x5b, 0xa0, 0x29, 0xff, + 0xff, 0xff, 0x77, 0x98, 0x0, 0x0, 0x0, 0xac, + 0x87, 0xff, 0xff, 0xff, 0xd, 0x6, 0x34, 0xfe, + 0xc3, 0xff, 0xff, 0xff, 0xff, 0xff, 0x83, 0xa6, + 0x0, 0x0, 0x0, 0xba, 0x8f, 0xff, 0xff, 0xfd, + 0x3f, 0xa2, 0x4, 0x0, 0x2a, 0xf8, 0xad, 0xff, + 0xff, 0xfb, 0x1b, 0x36, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0xe0, + 0xe2, 0xf0, 0x9, 0xad, 0xff, 0xff, 0xff, 0x4d, + 0x5a, 0x0, 0x0, 0x7c, 0x49, 0xff, 0xff, 0xff, + 0xa5, 0xfe, 0xd0, 0xd0, 0xfe, 0x9f, 0xff, 0xff, + 0xff, 0x4b, 0x72, 0x0, 0x0, 0xac, 0x87, 0xff, + 0xff, 0xff, 0xd, 0xe4, 0xf0, 0xfe, 0x63, 0xf1, + 0xff, 0xff, 0xdf, 0x9, 0x3a, 0x0, 0x0, 0x0, + 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0xe0, 0xe0, + 0xe0, 0xe0, 0xe0, 0xe0, 0xc8, 0x92, 0x20, 0x0, + 0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0x6, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x74, 0x41, 0xfd, 0xff, 0xff, 0xbf, + 0x9, 0xdc, 0xb6, 0xd6, 0xfe, 0xd1, 0xff, 0xff, + 0xc7, 0xec, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff, + 0xff, 0xff, 0xd, 0x6, 0x0, 0x0, 0x0, 0x6, + 0xd, 0xff, 0xff, 0xff, 0x83, 0xa6, 0x0, 0x0, + 0x0, 0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70, + 0x0, 0x0, 0x4c, 0x47, 0xff, 0xff, 0xff, 0x81, + 0xf6, 0xd0, 0xfe, 0xb7, 0xff, 0xff, 0xf1, 0x9, + 0x12, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff, 0xff, + 0xff, 0xd, 0x6, 0x4c, 0x5, 0xcf, 0xff, 0xff, + 0xff, 0x73, 0xe0, 0xe, 0x0, 0x0, 0x0, 0xac, + 0x87, 0xff, 0xff, 0xff, 0xd, 0xe0, 0xe0, 0xe0, + 0xe0, 0xe0, 0xd2, 0xa6, 0x4a, 0x0, 0x0, 0xac, + 0x87, 0xff, 0xff, 0xff, 0xd, 0x44, 0x11, 0xf3, + 0xff, 0xff, 0xff, 0xe7, 0x5, 0x4e, 0x29, 0xff, + 0xff, 0xff, 0x77, 0x98, 0x0, 0x0, 0x0, 0xac, + 0x87, 0xff, 0xff, 0xff, 0xd, 0x6, 0x0, 0x98, + 0x39, 0xf9, 0xff, 0xff, 0xff, 0xff, 0x83, 0xa6, + 0x0, 0x0, 0x0, 0x62, 0x2d, 0xf9, 0xff, 0xff, + 0xc9, 0x11, 0xe6, 0xce, 0xfa, 0x57, 0xfb, 0xff, + 0xff, 0xb5, 0xf6, 0x8, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xb7, 0xb7, + 0xb7, 0xbf, 0xe3, 0xff, 0xff, 0xff, 0xdb, 0xfe, + 0x22, 0x0, 0x0, 0x20, 0xfe, 0xb9, 0xff, 0xff, + 0xff, 0xc7, 0x89, 0x93, 0xc9, 0xff, 0xff, 0xff, + 0xc5, 0xfe, 0x22, 0x0, 0x0, 0xac, 0x87, 0xff, + 0xff, 0xff, 0xb7, 0xb7, 0xbf, 0xe1, 0xff, 0xff, + 0xff, 0xf7, 0x49, 0xc0, 0x0, 0x0, 0x0, 0x0, + 0xac, 0x87, 0xff, 0xff, 0xff, 0xb7, 0xb7, 0xb7, + 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0x49, 0x50, 0x0, + 0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0x6, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1c, 0xfa, 0xa7, 0xff, 0xff, 0xff, + 0xdb, 0x93, 0x83, 0x95, 0xd1, 0xff, 0xff, 0xff, + 0xc3, 0xd4, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff, + 0xff, 0xff, 0xd, 0x6, 0x0, 0x0, 0x0, 0x6, + 0xd, 0xff, 0xff, 0xff, 0x83, 0xa6, 0x0, 0x0, + 0x0, 0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70, + 0x0, 0x0, 0x1e, 0xfe, 0xe3, 0xff, 0xff, 0xf7, + 0xa5, 0x89, 0xbb, 0xff, 0xff, 0xff, 0xa7, 0xea, + 0x0, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff, 0xff, + 0xff, 0xd, 0x6, 0x0, 0xaa, 0x3f, 0xf9, 0xff, + 0xff, 0xef, 0x29, 0x90, 0x0, 0x0, 0x0, 0xac, + 0x87, 0xff, 0xff, 0xff, 0xb7, 0xb7, 0xb7, 0xb7, + 0xb7, 0xb7, 0xb7, 0x7f, 0xa2, 0x0, 0x0, 0xac, + 0x87, 0xff, 0xff, 0xff, 0xd, 0xa, 0xee, 0xb1, + 0xff, 0xff, 0xff, 0x9f, 0xde, 0x2a, 0x29, 0xff, + 0xff, 0xff, 0x77, 0x98, 0x0, 0x0, 0x0, 0xac, + 0x87, 0xff, 0xff, 0xff, 0xd, 0x6, 0x0, 0x16, + 0xf2, 0x9b, 0xff, 0xff, 0xff, 0xff, 0x83, 0xa6, + 0x0, 0x0, 0x0, 0x10, 0xee, 0x8f, 0xff, 0xff, + 0xff, 0xe3, 0x9f, 0x91, 0xb7, 0xfb, 0xff, 0xff, + 0xef, 0x31, 0x88, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xed, 0x45, 0xba, + 0x0, 0x0, 0x0, 0x0, 0x88, 0x1d, 0xcf, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, + 0x27, 0x98, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xe5, 0x4d, 0xe8, 0x20, 0x0, 0x0, 0x0, 0x0, + 0xac, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x67, 0x74, 0x0, + 0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0x6, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x70, 0xb, 0xb7, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, + 0x37, 0x98, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff, + 0xff, 0xff, 0xd, 0x6, 0x0, 0x0, 0x0, 0x6, + 0xd, 0xff, 0xff, 0xff, 0x83, 0xa6, 0x0, 0x0, + 0x0, 0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70, + 0x0, 0x0, 0x0, 0xc8, 0x5d, 0xfb, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xd9, 0x1d, 0x74, + 0x0, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff, 0xff, + 0xff, 0xd, 0x6, 0x0, 0x1a, 0xf2, 0x93, 0xff, + 0xff, 0xff, 0xbf, 0xfe, 0x40, 0x0, 0x0, 0xac, + 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xb3, 0xd0, 0x0, 0x0, 0xac, + 0x87, 0xff, 0xff, 0xff, 0xd, 0x6, 0x90, 0x59, + 0xff, 0xff, 0xff, 0x41, 0x76, 0x2a, 0x29, 0xff, + 0xff, 0xff, 0x77, 0x98, 0x0, 0x0, 0x0, 0xac, + 0x87, 0xff, 0xff, 0xff, 0xd, 0x6, 0x0, 0x0, + 0x66, 0x15, 0xe9, 0xff, 0xff, 0xff, 0x83, 0xa6, + 0x0, 0x0, 0x0, 0x0, 0x58, 0xfe, 0xa7, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, + 0x51, 0xda, 0x12, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x86, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xfd, 0xf3, 0xd3, 0x95, 0x21, 0xd4, 0x1e, + 0x0, 0x0, 0x0, 0x0, 0x8, 0xa4, 0x11, 0x91, + 0xe9, 0xff, 0xff, 0xff, 0xff, 0xeb, 0x9b, 0x17, + 0xba, 0xe, 0x0, 0x0, 0x0, 0x86, 0x87, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xf9, 0xeb, 0xc3, 0x7f, + 0xf, 0xca, 0x24, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x86, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x67, 0x60, 0x0, + 0x0, 0x86, 0x87, 0xff, 0xff, 0xff, 0xd, 0x4, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x2, 0x82, 0xfe, 0x73, 0xd7, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xd5, 0x89, 0xd, + 0xbc, 0x16, 0x0, 0x0, 0x0, 0x86, 0x87, 0xff, + 0xff, 0xff, 0xd, 0x4, 0x0, 0x0, 0x0, 0x4, + 0xd, 0xff, 0xff, 0xff, 0x83, 0x82, 0x0, 0x0, + 0x0, 0x42, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x52, + 0x0, 0x0, 0x0, 0x2e, 0xf0, 0x4d, 0xc9, 0xfd, + 0xff, 0xff, 0xff, 0xf3, 0xa5, 0x19, 0xb2, 0x8, + 0x0, 0x0, 0x0, 0x0, 0x86, 0x87, 0xff, 0xff, + 0xff, 0xd, 0x4, 0x0, 0x0, 0x5e, 0xd, 0xdb, + 0xff, 0xff, 0xff, 0x75, 0x40, 0x0, 0x0, 0x86, + 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xb3, 0xbc, 0x0, 0x0, 0x86, + 0x87, 0xff, 0xff, 0xff, 0xd, 0x4, 0x2c, 0xfe, + 0xe7, 0xff, 0xd9, 0xfe, 0x1c, 0x1c, 0x29, 0xff, + 0xff, 0xff, 0x77, 0x74, 0x0, 0x0, 0x0, 0x86, + 0x87, 0xff, 0xff, 0xff, 0xd, 0x4, 0x0, 0x0, + 0x6, 0xd4, 0x6f, 0xff, 0xff, 0xff, 0x83, 0x82, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x6e, 0xfe, 0x69, + 0xd3, 0xff, 0xff, 0xff, 0xff, 0xf1, 0xab, 0x2d, + 0xd8, 0x26, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x50, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, + 0xfe, 0xfe, 0xfe, 0xf6, 0xc8, 0x64, 0xa, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x5a, 0xda, + 0xfe, 0x39, 0x55, 0x55, 0x35, 0xfe, 0xe0, 0x68, + 0x6, 0x0, 0x0, 0x0, 0x0, 0x50, 0xfe, 0xfe, + 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xee, 0xb0, + 0x4a, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x50, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, + 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x36, 0x0, + 0x0, 0x50, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x2, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x40, 0xbe, 0xfe, + 0x25, 0x4f, 0x57, 0x43, 0x21, 0xfc, 0xc4, 0x54, + 0x2, 0x0, 0x0, 0x0, 0x0, 0x50, 0xfe, 0xfe, + 0xfe, 0xfe, 0xfe, 0x2, 0x0, 0x0, 0x0, 0x2, + 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x4c, 0x0, 0x0, + 0x0, 0x24, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x2c, + 0x0, 0x0, 0x0, 0x0, 0x24, 0xa6, 0xfa, 0x1b, + 0x4d, 0x59, 0x47, 0xb, 0xea, 0x70, 0x6, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x50, 0xfe, 0xfe, 0xfe, + 0xfe, 0xfe, 0x2, 0x0, 0x0, 0x2, 0xb0, 0xfe, + 0xfe, 0xfe, 0xfe, 0xfe, 0x40, 0x0, 0x0, 0x50, + 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, + 0xfe, 0xfe, 0xfe, 0xfe, 0x7e, 0x0, 0x0, 0x50, + 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x2, 0x0, 0xc2, + 0xfe, 0xfe, 0xfe, 0xac, 0x0, 0xe, 0xfe, 0xfe, + 0xfe, 0xfe, 0xfe, 0x42, 0x0, 0x0, 0x0, 0x50, + 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x2, 0x0, 0x0, + 0x0, 0x3c, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x4c, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x36, 0xb8, + 0xfc, 0x23, 0x4d, 0x57, 0x41, 0x9, 0xea, 0x7e, + 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x16, 0x3c, 0x5a, 0x58, 0x38, 0x14, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, + 0x2e, 0x50, 0x5c, 0x48, 0x24, 0xa, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0x2a, + 0x4e, 0x5e, 0x46, 0x20, 0x2, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xc, 0x2e, 0x50, 0x5a, 0x40, 0x1a, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x62, 0xd0, 0xf0, 0xf8, 0xf8, 0xee, 0xca, + 0x4c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x90, + 0xde, 0xf4, 0xf8, 0xf8, 0xea, 0xbc, 0x24, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xb0, 0x9b, 0xdd, 0xdd, 0xdd, 0xdd, 0x83, + 0x90, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe2, + 0xc3, 0xdd, 0xdd, 0xdd, 0xdd, 0x4d, 0x4a, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x4, 0xe, 0x1a, 0x20, 0x20, 0x20, 0x20, + 0x1e, 0x14, 0x8, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x14, 0x3e, 0x66, 0x72, 0x56, 0x28, 0x4, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x4, 0xe, 0x1a, 0x20, 0x20, 0x20, 0x20, 0x1e, + 0x14, 0x8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa, + 0x32, 0x5e, 0x78, 0x6c, 0x44, 0x18, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x4, 0x10, 0x1a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x1e, 0x12, 0x8, 0x0, 0x0, 0x6, + 0x12, 0x1c, 0x1e, 0x14, 0x8, 0x0, 0x0, 0x0, + 0x0, 0x4, 0xe, 0x1a, 0x20, 0x16, 0xc, 0x0, + 0x0, 0x8, 0x14, 0x1e, 0x1e, 0x14, 0x8, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x4, 0xe, 0x1a, 0x20, + 0x18, 0xc, 0x2, 0x2, 0xe, 0x18, 0x20, 0x16, + 0xc, 0x0, 0x0, 0x0, 0x8, 0x14, 0x1a, 0x12, + 0x8, 0x0, 0x0, 0x0, 0xc, 0x16, 0x20, 0x18, + 0xc, 0x2, 0x0, 0x6, 0x12, 0x1c, 0x20, 0x1a, + 0xe, 0x4, 0x0, 0x0, 0x0, 0x2, 0xe, 0x18, + 0x20, 0x1c, 0x12, 0x6, 0x0, 0xa, 0x14, 0x20, + 0x1e, 0x14, 0x8, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x6, 0x12, 0x1c, 0x20, 0x16, 0xc, 0x0, 0x0, + 0xc, 0x16, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x18, 0xc, 0x2, 0x0, + 0x0, 0xd6, 0xb3, 0xff, 0xff, 0xff, 0xff, 0x99, + 0xae, 0x0, 0xa, 0x16, 0x20, 0x1a, 0xe, 0x4, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf0, + 0xe3, 0xff, 0xff, 0xff, 0xff, 0x5b, 0x6a, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xa, 0x16, 0x1a, + 0x10, 0x6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x52, 0x11, 0x23, 0x23, 0x23, 0x23, 0x23, + 0x23, 0x1d, 0xfe, 0xfc, 0xd2, 0x6a, 0xc, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x40, + 0xc8, 0xfe, 0x35, 0x5d, 0x67, 0x51, 0x11, 0xf2, + 0x8a, 0x14, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x52, 0x11, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, + 0x1d, 0xfe, 0xfc, 0xd4, 0x6a, 0xa, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x28, 0xa8, 0xfc, + 0x21, 0x57, 0x69, 0x61, 0x3b, 0xfe, 0xd4, 0x4e, + 0x0, 0x0, 0x0, 0x0, 0x60, 0x13, 0x23, 0x23, + 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, + 0x23, 0x23, 0x23, 0x1b, 0x98, 0x0, 0x0, 0x7c, + 0x17, 0x23, 0x23, 0x1f, 0xbe, 0x0, 0x0, 0x0, + 0x0, 0x44, 0xf, 0x23, 0x23, 0x23, 0x5, 0x10, + 0x0, 0x92, 0x1f, 0x23, 0x23, 0x1d, 0xd2, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x6c, 0xf, 0x23, 0x23, + 0x23, 0xb, 0xe, 0x1c, 0xd, 0x23, 0x23, 0x23, + 0xfe, 0x1c, 0x0, 0x0, 0xd6, 0x1d, 0x23, 0x1b, + 0xbe, 0x0, 0x0, 0x26, 0x5, 0x23, 0x23, 0x23, + 0xb, 0x10, 0x0, 0x36, 0x17, 0x23, 0x23, 0x23, + 0x11, 0x8c, 0x0, 0x0, 0x0, 0x76, 0xd, 0x23, + 0x23, 0x23, 0x19, 0x4c, 0x0, 0x86, 0x21, 0x23, + 0x23, 0x1f, 0xf0, 0x14, 0x0, 0x0, 0x0, 0x4, + 0xcc, 0x19, 0x23, 0x23, 0x23, 0x7, 0x0, 0xe, + 0x5, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, + 0x23, 0x23, 0x23, 0x23, 0x23, 0xb, 0x24, 0x0, + 0x0, 0xdc, 0xb3, 0xff, 0xff, 0xf7, 0xcb, 0x79, + 0x8a, 0x0, 0xa6, 0x21, 0x23, 0x23, 0x11, 0x82, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xdc, + 0xb3, 0xd5, 0xff, 0xff, 0xff, 0x5b, 0x70, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x28, 0xfe, 0x21, 0x23, + 0x15, 0x9e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x88, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xfd, 0xdd, 0x9b, 0x25, 0xd4, 0x20, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7a, 0xfe, + 0x75, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xb5, + 0x35, 0xde, 0x2a, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x88, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xfd, 0xdd, 0x9b, 0x21, 0xce, 0x16, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x4a, 0xfa, 0x55, 0xcb, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xe5, 0x85, 0x5, + 0x8c, 0x2, 0x0, 0x0, 0x9a, 0x95, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xc7, 0xd4, 0x0, 0x0, 0xba, + 0xb1, 0xff, 0xff, 0xe3, 0xee, 0x0, 0x0, 0x0, + 0x0, 0x76, 0x77, 0xff, 0xff, 0xff, 0x2f, 0x20, + 0x0, 0xae, 0xc3, 0xff, 0xff, 0xef, 0x5, 0x26, + 0x0, 0x0, 0x0, 0x0, 0xd4, 0xa1, 0xff, 0xff, + 0xfd, 0x29, 0xe, 0x1c, 0x41, 0xff, 0xff, 0xff, + 0x41, 0x54, 0x0, 0x20, 0x5, 0xf1, 0xff, 0xe3, + 0xfe, 0x12, 0x0, 0x66, 0x51, 0xff, 0xff, 0xff, + 0x2b, 0x10, 0x0, 0x36, 0x63, 0xff, 0xff, 0xff, + 0xbf, 0xfc, 0x24, 0x0, 0x18, 0xf8, 0xad, 0xff, + 0xff, 0xff, 0x7b, 0x4c, 0x0, 0x90, 0xb7, 0xff, + 0xff, 0xfb, 0x35, 0x7e, 0x0, 0x0, 0x0, 0x4c, + 0xf, 0xeb, 0xff, 0xff, 0xdb, 0x7, 0x0, 0x1c, + 0x29, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x3c, 0x0, + 0x0, 0xdc, 0xb3, 0xff, 0xff, 0xdf, 0xfe, 0xb4, + 0x44, 0x0, 0xbe, 0xd1, 0xff, 0xff, 0xb7, 0xf2, + 0x8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7c, + 0xdc, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x96, 0x55, 0xff, 0xff, + 0xcd, 0xfc, 0x1a, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xeb, 0x49, 0xce, + 0x6, 0x0, 0x0, 0x0, 0x0, 0x60, 0x5, 0xb1, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xf1, 0x57, 0xde, 0x14, 0x0, 0x0, 0x0, 0x0, + 0xac, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xe9, 0x37, 0x9e, 0x0, + 0x0, 0x0, 0x0, 0x1a, 0xf4, 0x7f, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, + 0xd, 0x5e, 0x0, 0x0, 0xac, 0x95, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xc7, 0xe0, 0x0, 0x0, 0xda, + 0xb1, 0xff, 0xff, 0xe3, 0xfa, 0x0, 0x0, 0x0, + 0x0, 0x98, 0x77, 0xff, 0xff, 0xff, 0x2f, 0x2e, + 0x0, 0xae, 0x77, 0xff, 0xff, 0xff, 0x53, 0x7c, + 0x0, 0x0, 0x0, 0x16, 0xfe, 0xdf, 0xff, 0xff, + 0xc9, 0xfc, 0xe, 0x1a, 0xfe, 0xf3, 0xff, 0xff, + 0x75, 0x9a, 0x0, 0x6a, 0x49, 0xff, 0xff, 0xff, + 0x31, 0x52, 0x0, 0xac, 0x81, 0xff, 0xff, 0xe7, + 0xfe, 0xe, 0x0, 0x32, 0xfe, 0xbf, 0xff, 0xff, + 0xff, 0x4f, 0xa4, 0x0, 0x8e, 0x3b, 0xfb, 0xff, + 0xff, 0xd3, 0xfe, 0x46, 0x0, 0x8c, 0x39, 0xfb, + 0xff, 0xff, 0xab, 0xf2, 0xe, 0x0, 0x0, 0xd0, + 0x81, 0xff, 0xff, 0xff, 0x67, 0xc0, 0x0, 0x22, + 0x29, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x41, 0x3a, 0x0, + 0x0, 0xdc, 0xb3, 0xff, 0xff, 0xdf, 0xfa, 0x0, + 0x0, 0x0, 0xbe, 0x7d, 0xff, 0xff, 0xf7, 0x1f, + 0x52, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70, 0x0, + 0x0, 0x0, 0x0, 0xc, 0xf6, 0xb7, 0xff, 0xff, + 0xff, 0x41, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xad, 0xad, + 0xad, 0xb3, 0xd5, 0xff, 0xff, 0xff, 0xe9, 0x17, + 0x50, 0x0, 0x0, 0x0, 0x12, 0xf4, 0x97, 0xff, + 0xff, 0xff, 0xd9, 0x91, 0x83, 0xad, 0xf9, 0xff, + 0xff, 0xf1, 0x35, 0x8e, 0x0, 0x0, 0x0, 0x0, + 0xac, 0x87, 0xff, 0xff, 0xff, 0xad, 0xad, 0xad, + 0xb9, 0xe5, 0xff, 0xff, 0xff, 0xc7, 0xfc, 0xc, + 0x0, 0x0, 0x0, 0x70, 0x3f, 0xfb, 0xff, 0xff, + 0xef, 0x99, 0x75, 0x87, 0xd5, 0xff, 0xff, 0xff, + 0x95, 0xde, 0x0, 0x0, 0x7e, 0x65, 0xad, 0xad, + 0xad, 0xad, 0xb7, 0xff, 0xff, 0xff, 0xc7, 0xad, + 0xad, 0xad, 0xad, 0x87, 0xb6, 0x0, 0x0, 0xda, + 0xb1, 0xff, 0xff, 0xe3, 0xfa, 0x0, 0x0, 0x0, + 0x0, 0x98, 0x77, 0xff, 0xff, 0xff, 0x2f, 0x2e, + 0x0, 0x48, 0x1b, 0xf9, 0xff, 0xff, 0x9b, 0xd4, + 0x0, 0x0, 0x0, 0x62, 0x39, 0xff, 0xff, 0xff, + 0x7f, 0xb8, 0x0, 0x0, 0xf6, 0xc9, 0xff, 0xff, + 0xa1, 0xd0, 0x0, 0xbe, 0x8b, 0xff, 0xff, 0xff, + 0x79, 0xa6, 0x0, 0xdc, 0xad, 0xff, 0xff, 0xbd, + 0xec, 0x0, 0x0, 0x0, 0x92, 0x33, 0xf7, 0xff, + 0xff, 0xc9, 0xfe, 0x46, 0xfc, 0xb9, 0xff, 0xff, + 0xfd, 0x4b, 0xb0, 0x0, 0x0, 0x16, 0xf6, 0xab, + 0xff, 0xff, 0xf9, 0x29, 0x70, 0x0, 0x40, 0x9, + 0xe3, 0xff, 0xff, 0xd1, 0xfe, 0x36, 0x0, 0x16, + 0x1b, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, + 0xb7, 0xff, 0xff, 0xff, 0xb9, 0xfe, 0x1a, 0x0, + 0x0, 0xdc, 0xb3, 0xff, 0xff, 0xdf, 0xfa, 0x0, + 0x0, 0x0, 0x4c, 0x19, 0xf5, 0xff, 0xff, 0x83, + 0xc4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70, 0x0, + 0x0, 0x0, 0x0, 0x60, 0x27, 0xf9, 0xff, 0xff, + 0xff, 0xa7, 0xec, 0x6, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0xd8, + 0xd8, 0xe6, 0xfe, 0x87, 0xff, 0xff, 0xff, 0x81, + 0xa8, 0x0, 0x0, 0x0, 0x68, 0x31, 0xfb, 0xff, + 0xff, 0xc1, 0x9, 0xda, 0xc0, 0xf8, 0x51, 0xf9, + 0xff, 0xff, 0xb9, 0xf8, 0x8, 0x0, 0x0, 0x0, + 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0xd8, 0xda, + 0xee, 0xd, 0xc3, 0xff, 0xff, 0xff, 0x25, 0x2e, + 0x0, 0x0, 0x0, 0xb2, 0x97, 0xff, 0xff, 0xfb, + 0x3d, 0xea, 0xae, 0xd0, 0x5, 0xcf, 0xff, 0xff, + 0xeb, 0x5, 0xc, 0x0, 0x34, 0x92, 0xc4, 0xd6, + 0xd6, 0xe0, 0x35, 0xff, 0xff, 0xff, 0x6f, 0xec, + 0xd6, 0xd6, 0xcc, 0xa0, 0x50, 0x0, 0x0, 0xda, + 0xb1, 0xff, 0xff, 0xe3, 0xfa, 0x0, 0x0, 0x0, + 0x0, 0x98, 0x77, 0xff, 0xff, 0xff, 0x2f, 0x2e, + 0x0, 0x8, 0xf6, 0xbf, 0xff, 0xff, 0xd9, 0xfe, + 0x10, 0x0, 0x0, 0xbe, 0x89, 0xff, 0xff, 0xfb, + 0x23, 0x50, 0x0, 0x0, 0xce, 0x9d, 0xff, 0xff, + 0xc7, 0xf2, 0x0, 0xf2, 0xc3, 0xff, 0xff, 0xff, + 0xb3, 0xe8, 0x0, 0xf8, 0xd3, 0xff, 0xff, 0x8d, + 0xbc, 0x0, 0x0, 0x0, 0x14, 0xee, 0x93, 0xff, + 0xff, 0xff, 0x59, 0xe2, 0x47, 0xff, 0xff, 0xff, + 0xab, 0xfa, 0x22, 0x0, 0x0, 0x0, 0x7c, 0x2d, + 0xf7, 0xff, 0xff, 0x9f, 0xec, 0x8, 0xc4, 0x75, + 0xff, 0xff, 0xff, 0x59, 0xb2, 0x0, 0x0, 0x8, + 0x7a, 0xb6, 0xd6, 0xd6, 0xd6, 0xd6, 0xde, 0xfe, + 0xad, 0xff, 0xff, 0xf1, 0x29, 0x8a, 0x0, 0x0, + 0x0, 0xdc, 0xb3, 0xff, 0xff, 0xdf, 0xfa, 0x0, + 0x0, 0x0, 0x6, 0xf0, 0xb1, 0xff, 0xff, 0xd5, + 0xfe, 0x1c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70, 0x0, + 0x0, 0x0, 0x0, 0xd8, 0x91, 0xff, 0xff, 0xd5, + 0xff, 0xf3, 0x17, 0x4e, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0x6, + 0x0, 0x0, 0x50, 0xfe, 0xe5, 0xff, 0xff, 0xb5, + 0xd6, 0x0, 0x0, 0x0, 0xbe, 0x93, 0xff, 0xff, + 0xfb, 0x37, 0x96, 0x0, 0x0, 0x26, 0xf6, 0xa9, + 0xff, 0xff, 0xfd, 0x1f, 0x3a, 0x0, 0x0, 0x0, + 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0x6, 0x0, + 0x2, 0xb6, 0x63, 0xff, 0xff, 0xff, 0x4f, 0x44, + 0x0, 0x0, 0x0, 0xc8, 0xad, 0xff, 0xff, 0xe7, + 0xfe, 0x46, 0x0, 0x0, 0xb8, 0x7b, 0xf5, 0xf5, + 0xf5, 0x27, 0xc, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x36, 0x35, 0xff, 0xff, 0xff, 0x6f, 0x8c, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xda, + 0xb1, 0xff, 0xff, 0xe3, 0xfa, 0x0, 0x0, 0x0, + 0x0, 0x98, 0x77, 0xff, 0xff, 0xff, 0x2f, 0x2e, + 0x0, 0x0, 0xa8, 0x71, 0xff, 0xff, 0xff, 0x2f, + 0x56, 0x0, 0x6, 0xf8, 0xc9, 0xff, 0xff, 0xc5, + 0xfa, 0xc, 0x0, 0x0, 0x8c, 0x69, 0xff, 0xff, + 0xeb, 0xfe, 0x30, 0x5, 0xf3, 0xff, 0xff, 0xff, + 0xe7, 0xfe, 0x2c, 0x5, 0xf5, 0xff, 0xff, 0x57, + 0x76, 0x0, 0x0, 0x0, 0x0, 0x5e, 0xf, 0xe3, + 0xff, 0xff, 0xd1, 0xfe, 0xc3, 0xff, 0xff, 0xef, + 0x21, 0x7a, 0x0, 0x0, 0x0, 0x0, 0x10, 0xf0, + 0x9d, 0xff, 0xff, 0xf3, 0x1f, 0x82, 0xfe, 0xdb, + 0xff, 0xff, 0xc5, 0xfe, 0x2a, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xc4, 0x57, + 0xff, 0xff, 0xff, 0x7b, 0xe2, 0xe, 0x0, 0x0, + 0x0, 0xdc, 0xb3, 0xff, 0xff, 0xdf, 0xfa, 0x0, + 0x0, 0x0, 0x0, 0x90, 0x55, 0xff, 0xff, 0xff, + 0x43, 0x7e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70, 0x0, + 0x0, 0x0, 0x34, 0x5, 0xe5, 0xff, 0xd5, 0x65, + 0xff, 0xff, 0x81, 0xc6, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0x6, + 0x0, 0x0, 0x4, 0xfa, 0xcf, 0xff, 0xff, 0xc1, + 0xe0, 0x0, 0x0, 0x0, 0xe8, 0xc5, 0xff, 0xff, + 0xd3, 0xfc, 0x16, 0x0, 0x0, 0x0, 0x8e, 0x53, + 0xff, 0xff, 0xff, 0x65, 0x72, 0x0, 0x0, 0x0, + 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0x6, 0x0, + 0x0, 0xa2, 0x5b, 0xff, 0xff, 0xff, 0x41, 0x3e, + 0x0, 0x0, 0x0, 0xb2, 0x97, 0xff, 0xff, 0xff, + 0x63, 0xfc, 0x9a, 0x2e, 0x44, 0xe6, 0xfc, 0xfe, + 0xfa, 0xde, 0xc, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x36, 0x35, 0xff, 0xff, 0xff, 0x6f, 0x8c, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xda, + 0xb1, 0xff, 0xff, 0xe3, 0xfa, 0x0, 0x0, 0x0, + 0x0, 0x98, 0x77, 0xff, 0xff, 0xff, 0x2f, 0x2e, + 0x0, 0x0, 0x42, 0x15, 0xf7, 0xff, 0xff, 0x81, + 0xb4, 0x0, 0x40, 0x19, 0xf9, 0xff, 0xff, 0x7b, + 0xb2, 0x0, 0x0, 0x0, 0x42, 0x29, 0xff, 0xff, + 0xff, 0x29, 0x90, 0x4d, 0xff, 0xff, 0xfb, 0xff, + 0xff, 0x37, 0x8c, 0x3d, 0xff, 0xff, 0xfb, 0x15, + 0x2e, 0x0, 0x0, 0x0, 0x0, 0x4, 0xca, 0x63, + 0xff, 0xff, 0xff, 0x9b, 0xff, 0xff, 0xff, 0x7d, + 0xe0, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6c, + 0x21, 0xf1, 0xff, 0xff, 0x93, 0xf6, 0x67, 0xff, + 0xff, 0xff, 0x49, 0xa0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x66, 0x11, 0xe1, + 0xff, 0xff, 0xc9, 0xfe, 0x44, 0x0, 0x0, 0x0, + 0x0, 0xdc, 0xb3, 0xff, 0xff, 0xdf, 0xfa, 0x0, + 0x0, 0x0, 0x0, 0x28, 0xfe, 0xdf, 0xff, 0xff, + 0xa5, 0xe8, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70, 0x0, + 0x0, 0x0, 0xa6, 0x65, 0xff, 0xff, 0x7f, 0x5, + 0xe7, 0xff, 0xd9, 0xfe, 0x26, 0x0, 0x0, 0x0, + 0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0x6, + 0x0, 0x6, 0x82, 0x11, 0xef, 0xff, 0xff, 0xad, + 0xd0, 0x0, 0x0, 0x0, 0xf4, 0xd9, 0xff, 0xff, + 0xb7, 0xe6, 0x0, 0x0, 0x0, 0x0, 0x32, 0x27, + 0xff, 0xff, 0xff, 0x7d, 0x9a, 0x0, 0x0, 0x0, + 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0xba, 0xbe, + 0xda, 0xfe, 0xab, 0xff, 0xff, 0xe7, 0xd, 0x1e, + 0x0, 0x0, 0x0, 0x6e, 0x3d, 0xfb, 0xff, 0xff, + 0xfd, 0xbb, 0x5d, 0x5, 0xe8, 0x88, 0x22, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x36, 0x35, 0xff, 0xff, 0xff, 0x6f, 0x8c, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xda, + 0xb1, 0xff, 0xff, 0xe3, 0xfa, 0x0, 0x0, 0x0, + 0x0, 0x98, 0x77, 0xff, 0xff, 0xff, 0x2f, 0x2e, + 0x0, 0x0, 0x6, 0xf4, 0xbb, 0xff, 0xff, 0xc3, + 0xf6, 0x4, 0x9c, 0x6d, 0xff, 0xff, 0xf9, 0x1f, + 0x4a, 0x0, 0x0, 0x0, 0xe, 0xfe, 0xe5, 0xff, + 0xff, 0x63, 0xde, 0x8f, 0xff, 0xff, 0xad, 0xff, + 0xff, 0x7f, 0xdc, 0x71, 0xff, 0xff, 0xd9, 0xfc, + 0x6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x32, 0xfe, + 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd3, 0x5, + 0x48, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa, + 0xe6, 0x91, 0xff, 0xff, 0xef, 0x15, 0xd1, 0xff, + 0xff, 0xbb, 0xfc, 0x20, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1e, 0xf6, 0x9b, 0xff, + 0xff, 0xf7, 0x39, 0xa0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xdc, 0xb3, 0xff, 0xff, 0xdf, 0xfa, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xd2, 0x8f, 0xff, 0xff, + 0xef, 0xd, 0x3e, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70, 0x0, + 0x0, 0x14, 0xfc, 0xc3, 0xff, 0xf5, 0x1b, 0xe6, + 0x97, 0xff, 0xff, 0x53, 0x94, 0x0, 0x0, 0x0, + 0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0xfa, + 0xfa, 0xfe, 0x19, 0xb3, 0xff, 0xff, 0xff, 0x6d, + 0x96, 0x0, 0x0, 0x0, 0xf8, 0xdf, 0xff, 0xff, + 0xad, 0xda, 0x0, 0x0, 0x0, 0x0, 0x10, 0xd, + 0xff, 0xff, 0xff, 0x87, 0xa8, 0x0, 0x0, 0x0, + 0xac, 0x87, 0xff, 0xff, 0xff, 0x93, 0x91, 0x91, + 0x9f, 0xcf, 0xff, 0xff, 0xf7, 0x5f, 0xce, 0x2, + 0x0, 0x0, 0x0, 0x1a, 0xf4, 0x7b, 0xfb, 0xff, + 0xff, 0xff, 0xff, 0xed, 0xad, 0x4b, 0xfe, 0x96, + 0x12, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x36, 0x35, 0xff, 0xff, 0xff, 0x6f, 0x8c, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xda, + 0xb1, 0xff, 0xff, 0xe3, 0xfa, 0x0, 0x0, 0x0, + 0x0, 0x98, 0x77, 0xff, 0xff, 0xff, 0x2f, 0x2e, + 0x0, 0x0, 0x0, 0xa2, 0x6d, 0xff, 0xff, 0xf7, + 0x11, 0x36, 0xea, 0xb1, 0xff, 0xff, 0xc1, 0xf8, + 0x8, 0x0, 0x0, 0x0, 0x0, 0xec, 0xbb, 0xff, + 0xff, 0x91, 0xfc, 0xc5, 0xff, 0xf9, 0x31, 0xff, + 0xff, 0xb7, 0xfa, 0x9d, 0xff, 0xff, 0xad, 0xde, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x94, + 0x35, 0xf7, 0xff, 0xff, 0xff, 0xfd, 0x4d, 0xb2, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x5c, 0x15, 0xeb, 0xff, 0xff, 0xb9, 0xff, 0xff, + 0xfb, 0x3d, 0x90, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xb2, 0x47, 0xfb, 0xff, + 0xff, 0x8d, 0xee, 0x16, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xdc, 0xb3, 0xff, 0xff, 0xdf, 0xfa, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x60, 0x2b, 0xfb, 0xff, + 0xff, 0x6f, 0xac, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70, 0x0, + 0x0, 0x32, 0x35, 0xfd, 0xff, 0xaf, 0xf0, 0x6e, + 0x31, 0xfd, 0xff, 0xb7, 0xb6, 0x0, 0x0, 0x0, + 0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xdf, 0xdf, + 0xdf, 0xe5, 0xfb, 0xff, 0xff, 0xff, 0xd1, 0x5, + 0x3a, 0x0, 0x0, 0x0, 0xfa, 0xdf, 0xff, 0xff, + 0xad, 0xd6, 0x0, 0x0, 0x0, 0x0, 0x6, 0xd, + 0xff, 0xff, 0xff, 0x87, 0xac, 0x0, 0x0, 0x0, + 0xac, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xd1, 0x3d, 0xf4, 0x32, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x46, 0xf4, 0x49, 0xc7, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc3, 0x31, + 0xd4, 0x16, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x36, 0x35, 0xff, 0xff, 0xff, 0x6f, 0x8c, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xda, + 0xb1, 0xff, 0xff, 0xe3, 0xfa, 0x0, 0x0, 0x0, + 0x0, 0x98, 0x77, 0xff, 0xff, 0xff, 0x2f, 0x2e, + 0x0, 0x0, 0x0, 0x3c, 0x11, 0xf3, 0xff, 0xff, + 0x63, 0xa0, 0xfe, 0xed, 0xff, 0xff, 0x75, 0xac, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xba, 0x8b, 0xff, + 0xff, 0xb9, 0x9, 0xf3, 0xff, 0xcb, 0xfe, 0xdb, + 0xff, 0xeb, 0xfe, 0xc5, 0xff, 0xff, 0x7b, 0xa6, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x36, + 0xfe, 0xc3, 0xff, 0xff, 0xff, 0xd9, 0xfe, 0x58, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x6, 0xda, 0x83, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xad, 0xf8, 0x18, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x54, 0x9, 0xd5, 0xff, 0xff, + 0xd9, 0x9, 0x56, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xdc, 0xb3, 0xff, 0xff, 0xdf, 0xfa, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xe, 0xfa, 0xc1, 0xff, + 0xff, 0xc5, 0xfa, 0x10, 0x0, 0x0, 0x0, 0x0, + 0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70, 0x0, + 0x0, 0x32, 0x4b, 0x91, 0x91, 0x3d, 0x86, 0x12, + 0xf6, 0x7b, 0x91, 0x89, 0xa8, 0x0, 0x0, 0x0, + 0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xcb, 0x25, 0xa6, + 0x0, 0x0, 0x0, 0x0, 0xf8, 0xdf, 0xff, 0xff, + 0xad, 0xda, 0x0, 0x0, 0x0, 0x0, 0x12, 0xd, + 0xff, 0xff, 0xff, 0x87, 0xa6, 0x0, 0x0, 0x0, + 0xac, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xb9, 0xf, 0x6e, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x20, 0xa2, 0xfc, + 0x41, 0x9d, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xed, + 0x39, 0x9a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x36, 0x35, 0xff, 0xff, 0xff, 0x6f, 0x8c, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xda, + 0xb1, 0xff, 0xff, 0xe3, 0xfa, 0x0, 0x0, 0x0, + 0x0, 0x98, 0x77, 0xff, 0xff, 0xff, 0x2f, 0x2e, + 0x0, 0x0, 0x0, 0x4, 0xf0, 0xb5, 0xff, 0xff, + 0xa9, 0xf0, 0x4f, 0xff, 0xff, 0xf7, 0x19, 0x46, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x72, 0x55, 0xff, + 0xff, 0xdf, 0x51, 0xff, 0xff, 0x95, 0xf8, 0xa7, + 0xff, 0xff, 0x3d, 0xeb, 0xff, 0xff, 0x43, 0x5a, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xba, + 0x53, 0xff, 0xff, 0xff, 0xff, 0xff, 0x73, 0xda, + 0x8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x4e, 0xb, 0xe3, 0xff, 0xff, 0xff, 0xf9, + 0x2f, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x16, 0xee, 0x8b, 0xff, 0xff, 0xfb, + 0x4b, 0xb8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xdc, 0xb3, 0xff, 0xff, 0xdf, 0xfa, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xa6, 0x6b, 0xff, + 0xff, 0xfd, 0x2f, 0x66, 0x0, 0x0, 0x0, 0x0, + 0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70, 0x0, + 0x0, 0x20, 0x6e, 0xa0, 0x9e, 0x6a, 0x1a, 0x0, + 0x46, 0x86, 0xac, 0x8e, 0x52, 0x0, 0x0, 0x0, + 0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xdd, 0xdd, + 0xdd, 0xdb, 0xcf, 0xab, 0x5f, 0xfe, 0x9e, 0xc, + 0x0, 0x0, 0x0, 0x0, 0xf4, 0xd9, 0xff, 0xff, + 0xbb, 0xe8, 0x0, 0x0, 0x0, 0x0, 0x36, 0x2b, + 0xff, 0xff, 0xff, 0x7b, 0x96, 0x0, 0x0, 0x0, + 0xac, 0x87, 0xff, 0xff, 0xff, 0x4d, 0x49, 0x49, + 0x5b, 0xa5, 0xff, 0xff, 0xff, 0xa3, 0xe4, 0x0, + 0x0, 0x0, 0x6, 0x3a, 0x62, 0x80, 0x6a, 0x56, + 0x7e, 0xd8, 0xfe, 0x47, 0xb7, 0xff, 0xff, 0xff, + 0xc3, 0xf8, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x36, 0x35, 0xff, 0xff, 0xff, 0x6f, 0x8c, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd8, + 0xb1, 0xff, 0xff, 0xe3, 0xfc, 0x0, 0x0, 0x0, + 0x0, 0x9c, 0x77, 0xff, 0xff, 0xff, 0x2f, 0x2a, + 0x0, 0x0, 0x0, 0x0, 0x9a, 0x67, 0xff, 0xff, + 0xe5, 0xfe, 0x9b, 0xff, 0xff, 0xbd, 0xf6, 0x6, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x2c, 0x13, 0xfb, + 0xff, 0xfb, 0x97, 0xff, 0xff, 0x55, 0xc4, 0x6b, + 0xff, 0xff, 0x93, 0xff, 0xff, 0xf3, 0x5, 0x1c, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x50, 0x9, + 0xd9, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xeb, 0x1f, + 0x78, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x2, 0xd2, 0x75, 0xff, 0xff, 0xff, 0xa1, + 0xf4, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x9e, 0x37, 0xf7, 0xff, 0xff, 0xa1, + 0xf8, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xdc, 0xb3, 0xff, 0xff, 0xdf, 0xfa, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x38, 0xb, 0xed, + 0xff, 0xff, 0x93, 0xd6, 0x0, 0x0, 0x0, 0x0, + 0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0xf8, + 0xf8, 0xf6, 0xee, 0xd4, 0x8e, 0x30, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xe8, 0xc3, 0xff, 0xff, + 0xd5, 0xfe, 0x1a, 0x0, 0x0, 0x0, 0x92, 0x55, + 0xff, 0xff, 0xff, 0x5f, 0x6a, 0x0, 0x0, 0x0, + 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0x58, 0x5e, + 0x94, 0xfe, 0xb7, 0xff, 0xff, 0xef, 0xfe, 0x6, + 0x0, 0x0, 0xe, 0x15, 0x67, 0x67, 0x67, 0x2d, + 0x5e, 0x0, 0x1e, 0x90, 0xfe, 0xb3, 0xff, 0xff, + 0xfb, 0x13, 0x16, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x36, 0x35, 0xff, 0xff, 0xff, 0x6f, 0x8c, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd0, + 0xab, 0xff, 0xff, 0xeb, 0xfe, 0x8, 0x0, 0x0, + 0x0, 0xb2, 0x81, 0xff, 0xff, 0xff, 0x25, 0x1c, + 0x0, 0x0, 0x0, 0x0, 0x36, 0xd, 0xf1, 0xff, + 0xff, 0x41, 0xd9, 0xff, 0xff, 0x71, 0xa6, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xfc, 0xd9, + 0xff, 0xff, 0xeb, 0xff, 0xf5, 0xb, 0x5c, 0x1f, + 0xfd, 0xff, 0xeb, 0xff, 0xff, 0xcb, 0xf6, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xe, 0xe6, 0x87, + 0xff, 0xff, 0xff, 0x75, 0xf9, 0xff, 0xff, 0xab, + 0xfa, 0x26, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x68, 0x43, 0xff, 0xff, 0xff, 0x63, + 0x9e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x44, 0xfe, 0xc7, 0xff, 0xff, 0xe3, 0x15, + 0x6c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xdc, 0xb3, 0xff, 0xff, 0xdf, 0xfa, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xe4, 0xa1, + 0xff, 0xff, 0xe3, 0xfe, 0x2c, 0x0, 0x0, 0x0, + 0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0x6, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xba, 0x8f, 0xff, 0xff, + 0xfd, 0x3f, 0xa2, 0x4, 0x0, 0x2a, 0xf8, 0xad, + 0xff, 0xff, 0xf7, 0x15, 0x34, 0x0, 0x0, 0x0, + 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0x6, 0x0, + 0x0, 0xbc, 0x81, 0xff, 0xff, 0xff, 0x19, 0x14, + 0x0, 0x0, 0xe, 0x1d, 0xff, 0xff, 0xff, 0x8b, + 0xd0, 0x6, 0x0, 0x0, 0xcc, 0x77, 0xff, 0xff, + 0xff, 0x31, 0x18, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x36, 0x35, 0xff, 0xff, 0xff, 0x6f, 0x8c, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb6, + 0x97, 0xff, 0xff, 0xff, 0x1d, 0x74, 0x0, 0x0, + 0x16, 0xf2, 0xa5, 0xff, 0xff, 0xf9, 0x5, 0xc, + 0x0, 0x0, 0x0, 0x0, 0x2, 0xee, 0xb1, 0xff, + 0xff, 0x9f, 0xff, 0xff, 0xf7, 0x15, 0x40, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xde, 0xad, + 0xff, 0xff, 0xff, 0xff, 0xc5, 0xf6, 0xa, 0xfc, + 0xd5, 0xff, 0xff, 0xff, 0xff, 0x9d, 0xce, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x84, 0x29, 0xf3, + 0xff, 0xff, 0xc3, 0xfe, 0xa5, 0xff, 0xff, 0xfd, + 0x51, 0xba, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x4c, 0x43, 0xff, 0xff, 0xff, 0x63, + 0x7a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xe, 0xe2, 0x79, 0xff, 0xff, 0xff, 0x5d, 0xca, + 0x6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xdc, 0xb3, 0xff, 0xff, 0xdf, 0xfa, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x78, 0x41, + 0xff, 0xff, 0xff, 0x5b, 0x96, 0x0, 0x0, 0x0, + 0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0x6, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x62, 0x2d, 0xf9, 0xff, + 0xff, 0xc9, 0x11, 0xe6, 0xce, 0xfa, 0x57, 0xfb, + 0xff, 0xff, 0xad, 0xf2, 0x6, 0x0, 0x0, 0x0, + 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0x6, 0x0, + 0x0, 0x94, 0x73, 0xff, 0xff, 0xff, 0x29, 0x2a, + 0x0, 0x0, 0x8, 0xfe, 0xdf, 0xff, 0xff, 0xdd, + 0x15, 0xe8, 0xb4, 0xc8, 0xfe, 0xb1, 0xff, 0xff, + 0xfb, 0x11, 0x14, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x36, 0x35, 0xff, 0xff, 0xff, 0x6f, 0x8c, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7a, + 0x59, 0xff, 0xff, 0xff, 0xa7, 0xfe, 0xd8, 0xc4, + 0xf4, 0x37, 0xf5, 0xff, 0xff, 0xcb, 0xf8, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x94, 0x5f, 0xff, + 0xff, 0xf3, 0xff, 0xff, 0xb9, 0xf4, 0x6, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa4, 0x7b, + 0xff, 0xff, 0xff, 0xff, 0x8d, 0xbe, 0x0, 0xd4, + 0x9f, 0xff, 0xff, 0xff, 0xff, 0x6b, 0x8e, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x2a, 0xfc, 0xb3, 0xff, + 0xff, 0xfd, 0x47, 0xca, 0x27, 0xf5, 0xff, 0xff, + 0xd9, 0x9, 0x54, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x4c, 0x43, 0xff, 0xff, 0xff, 0x63, + 0x7a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x8a, 0x27, 0xf1, 0xff, 0xff, 0xb3, 0xfe, 0xe4, + 0xe0, 0xe0, 0xe0, 0xe0, 0xcc, 0x98, 0x2e, 0x0, + 0x0, 0xdc, 0xb3, 0xff, 0xff, 0xdf, 0xfa, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1a, 0xfe, + 0xd1, 0xff, 0xff, 0xb5, 0xf4, 0x8, 0x0, 0x0, + 0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0x6, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x10, 0xee, 0x8f, 0xff, + 0xff, 0xff, 0xe3, 0x9f, 0x91, 0xb7, 0xfb, 0xff, + 0xff, 0xeb, 0x27, 0x7e, 0x0, 0x0, 0x0, 0x0, + 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0x6, 0x0, + 0x0, 0x7e, 0x69, 0xff, 0xff, 0xff, 0x39, 0x52, + 0x0, 0x0, 0x0, 0xc8, 0x75, 0xff, 0xff, 0xff, + 0xe9, 0x9f, 0x81, 0x89, 0xc3, 0xff, 0xff, 0xff, + 0xbf, 0xf8, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x36, 0x35, 0xff, 0xff, 0xff, 0x6f, 0x8c, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2a, + 0xfe, 0xd1, 0xff, 0xff, 0xff, 0xd1, 0x97, 0x89, + 0xab, 0xf7, 0xff, 0xff, 0xff, 0x5f, 0xac, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x30, 0x9, 0xef, + 0xff, 0xff, 0xff, 0xff, 0x6b, 0xa0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x58, 0x41, + 0xff, 0xff, 0xff, 0xff, 0x49, 0x6a, 0x0, 0x86, + 0x61, 0xff, 0xff, 0xff, 0xff, 0x2b, 0x42, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xbc, 0x57, 0xff, 0xff, + 0xff, 0xb5, 0xfa, 0x2a, 0xec, 0x95, 0xff, 0xff, + 0xff, 0x8b, 0xec, 0x14, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x4c, 0x43, 0xff, 0xff, 0xff, 0x63, + 0x7a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe, + 0xfe, 0xb9, 0xff, 0xff, 0xff, 0xc3, 0xb7, 0xb7, + 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0x5d, 0x6c, 0x0, + 0x0, 0xdc, 0xb3, 0xff, 0xff, 0xdf, 0xfa, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbe, + 0x7d, 0xff, 0xff, 0xf7, 0x1d, 0x52, 0x0, 0x0, + 0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0x6, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x58, 0xfe, 0xa7, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x4f, 0xf2, 0x20, 0x0, 0x0, 0x0, 0x0, + 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0x6, 0x0, + 0x0, 0x58, 0x51, 0xff, 0xff, 0xff, 0x67, 0xba, + 0x0, 0x0, 0x0, 0x40, 0xfe, 0x91, 0xfd, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe5, + 0x31, 0x92, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x36, 0x35, 0xff, 0xff, 0xff, 0x6f, 0x8c, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xaa, 0x31, 0xe1, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfd, 0x8b, 0xfe, 0x30, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xea, 0xad, + 0xff, 0xff, 0xff, 0xf3, 0x11, 0x3c, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1a, 0xfe, + 0xf3, 0xff, 0xff, 0xef, 0x5, 0x20, 0x0, 0x34, + 0x15, 0xf9, 0xff, 0xff, 0xe7, 0xfe, 0xe, 0x0, + 0x0, 0x0, 0x0, 0x52, 0x9, 0xdb, 0xff, 0xff, + 0xfb, 0x35, 0x8a, 0x0, 0x62, 0x19, 0xed, 0xff, + 0xff, 0xf7, 0x33, 0x94, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x4c, 0x43, 0xff, 0xff, 0xff, 0x63, + 0x7a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1e, + 0x29, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x83, 0x98, 0x0, + 0x0, 0xdc, 0xb3, 0xff, 0xff, 0xdf, 0xfa, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4e, + 0x19, 0xf5, 0xff, 0xff, 0x81, 0xc4, 0x0, 0x0, + 0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x86, 0x87, 0xff, 0xff, 0xff, 0xd, 0x4, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6e, 0xfe, + 0x69, 0xd3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xdb, 0x33, 0xd6, 0x22, 0x0, 0x0, 0x0, + 0x86, 0x87, 0xff, 0xff, 0xff, 0xd, 0x4, 0x0, + 0x0, 0x28, 0xf, 0xe9, 0xff, 0xff, 0xcf, 0xb4, + 0x0, 0x0, 0x0, 0x0, 0x5a, 0xf8, 0x49, 0xbb, + 0xf7, 0xff, 0xff, 0xff, 0xff, 0xed, 0xa1, 0x21, + 0xc6, 0x12, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x26, 0x35, 0xff, 0xff, 0xff, 0x6f, 0x68, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x12, 0xc0, 0x17, 0x97, 0xe7, 0xff, 0xff, 0xff, + 0xff, 0xf9, 0xc3, 0x55, 0xf8, 0x54, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8e, 0x5b, + 0xff, 0xff, 0xff, 0xb7, 0xee, 0x4, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf0, + 0xc9, 0xff, 0xff, 0xbf, 0xea, 0x0, 0x0, 0x6, + 0xf6, 0xcf, 0xff, 0xff, 0xbd, 0xe2, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x52, 0x89, 0xff, 0xff, 0xff, + 0xa7, 0xf4, 0x14, 0x0, 0x6, 0xde, 0x87, 0xff, + 0xff, 0xff, 0xc1, 0x94, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x36, 0x43, 0xff, 0xff, 0xff, 0x63, + 0x5a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1e, + 0x2f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x83, 0x82, 0x0, + 0x0, 0xdc, 0xb3, 0xff, 0xff, 0xdf, 0xfa, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, + 0xf2, 0xb1, 0xff, 0xff, 0xd5, 0xfe, 0x1c, 0x0, + 0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x50, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x2, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x36, + 0xb8, 0xfc, 0x23, 0x4d, 0x59, 0x3d, 0x63, 0xf5, + 0xff, 0xff, 0xeb, 0x4d, 0x50, 0x0, 0x0, 0x0, + 0x50, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x2, 0x0, + 0x0, 0x4, 0xc8, 0xfe, 0xfe, 0xfe, 0xfe, 0xa0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x20, 0x94, 0xf2, + 0x9, 0x43, 0x59, 0x55, 0x35, 0xfe, 0xe4, 0x70, + 0xa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x14, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x3c, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x6, 0x64, 0xda, 0xfe, 0x31, 0x53, 0x59, + 0x47, 0xf, 0xf6, 0xa0, 0x28, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2c, 0xfe, + 0xfe, 0xfe, 0xfe, 0xfe, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x98, + 0xfe, 0xfe, 0xfe, 0xfe, 0x8a, 0x0, 0x0, 0x0, + 0x9e, 0xfe, 0xfe, 0xfe, 0xfe, 0x88, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x52, 0xfe, 0xfe, 0xfe, 0xfe, + 0xfe, 0x6e, 0x0, 0x0, 0x0, 0x50, 0xfe, 0xfe, + 0xfe, 0xfe, 0xfe, 0x8c, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1c, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, + 0x32, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10, + 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, + 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x4c, 0x0, + 0x0, 0xdc, 0xb3, 0xff, 0xff, 0xdf, 0xfe, 0x96, + 0x36, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x90, 0x57, 0xff, 0xff, 0xff, 0x43, 0x3e, 0x64, + 0xca, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xc, 0x2e, 0x50, 0x5a, 0x66, 0xea, 0x4b, + 0xed, 0xff, 0xf5, 0x67, 0x50, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1c, 0x42, 0x60, 0x5a, 0x3a, 0x14, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x12, 0x36, 0x58, 0x60, + 0x48, 0x22, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xdc, 0xb3, 0xff, 0xff, 0xf3, 0xb1, 0x69, + 0x82, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x2a, 0xfe, 0x8d, 0x95, 0x95, 0x51, 0x3e, 0xd6, + 0x9b, 0xbf, 0xff, 0xff, 0xff, 0x5b, 0x70, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0xd8, + 0x35, 0xc9, 0x49, 0xe8, 0x34, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xda, 0xb3, 0xff, 0xff, 0xff, 0xff, 0x99, + 0xae, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x56, 0x94, 0xbc, 0xa8, 0x76, 0x26, 0xf2, + 0xe3, 0xff, 0xff, 0xff, 0xff, 0x5b, 0x6e, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x14, + 0xa0, 0xac, 0xa4, 0x20, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xb8, 0xab, 0xf5, 0xf5, 0xf5, 0xf5, 0x91, + 0x98, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xea, + 0xd9, 0xf5, 0xf5, 0xf5, 0xf5, 0x57, 0x4e, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x74, 0xec, 0xfc, 0xfe, 0xfe, 0xfc, 0xe8, + 0x5a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xac, + 0xf4, 0xfe, 0xfe, 0xfe, 0xfc, 0xe2, 0x2a, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x24, 0x52, 0x76, 0x76, 0x52, 0x26, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xa, 0x3e, 0x66, 0x80, 0x66, 0x3e, 0xa, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10, 0x54, + 0x98, 0xba, 0xb2, 0x80, 0x34, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x28, 0x56, 0x78, 0x74, 0x50, 0x22, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1a, 0x4a, 0x70, 0x7e, 0x5c, 0x30, 0x0, + 0x0, 0x0, 0x1a, 0x4a, 0x70, 0x7e, 0x5c, 0x32, + 0x0, 0x0, 0x0, 0x24, 0x52, 0x76, 0x78, 0x54, + 0x26, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1a, 0x4a, 0x70, 0x7e, 0x5c, + 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x3c, + 0x6e, 0x90, 0x86, 0x5e, 0x2a, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xa0, 0x4f, 0x67, 0x67, 0x51, 0xa8, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x32, 0x21, 0x67, 0x67, 0x67, 0x21, 0x32, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x4e, 0xf2, 0x2d, + 0x7f, 0x9b, 0x99, 0x67, 0xaa, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xb4, 0x55, 0x67, 0x67, 0x4d, 0x98, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x78, 0x41, 0x67, 0x67, 0x5f, 0xda, 0x0, + 0x0, 0x0, 0x74, 0x3f, 0x67, 0x67, 0x63, 0xe4, + 0x0, 0x0, 0x0, 0xa0, 0x4f, 0x67, 0x67, 0x51, + 0xac, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x78, 0x41, 0x67, 0x67, 0x5f, + 0xda, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x17, + 0x71, 0x73, 0x73, 0x57, 0xf0, 0x22, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xd4, 0xc3, 0xff, 0xff, 0xcb, 0xdc, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x54, 0x57, 0xff, 0xff, 0xff, 0x57, 0x54, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x28, 0xfc, 0x85, 0xfb, + 0xff, 0xff, 0xff, 0xc7, 0xd2, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xe4, 0xd3, 0xff, 0xff, 0xbd, 0xce, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xae, 0x9f, 0xff, 0xff, 0xef, 0xf8, 0x0, + 0x0, 0x0, 0xaa, 0x9b, 0xff, 0xff, 0xf5, 0xfa, + 0x0, 0x0, 0x0, 0xd4, 0xc3, 0xff, 0xff, 0xcd, + 0xde, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xae, 0x9f, 0xff, 0xff, 0xef, + 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x6c, + 0x77, 0xfb, 0xff, 0xfb, 0x4d, 0xc8, 0x8, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcb, 0xee, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x6a, 0x57, 0xff, 0xff, 0xff, 0x57, 0x6a, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x8e, 0x55, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xb1, 0xcc, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xf4, 0xd3, 0xff, 0xff, 0xbd, 0xe4, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xae, 0x9f, 0xff, 0xff, 0xef, 0xf8, 0x0, + 0x0, 0x0, 0xaa, 0x9b, 0xff, 0xff, 0xf5, 0xfc, + 0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcd, + 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xc8, 0x9f, 0xff, 0xff, 0xef, + 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x40, + 0xf6, 0x6d, 0xfb, 0xff, 0xe3, 0x1d, 0x5e, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcb, 0xee, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x6a, 0x57, 0xff, 0xff, 0xff, 0x57, 0x6a, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xd2, 0xaf, 0xff, 0xff, + 0xfb, 0x7b, 0x45, 0x37, 0x86, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xf4, 0xd3, 0xff, 0xff, 0xbd, 0xe4, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x78, 0x41, 0x67, 0x67, 0x5f, 0xda, 0x0, + 0x0, 0x0, 0x74, 0x3d, 0x63, 0x63, 0x5d, 0xe4, + 0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcd, + 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xc8, 0x9f, 0xff, 0xff, 0xef, + 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x3a, 0xf2, 0x65, 0xd9, 0xd9, 0x95, 0x5e, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcb, 0xee, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x6a, 0x57, 0xff, 0xff, 0xff, 0x57, 0x6a, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xec, 0xcd, 0xff, 0xff, + 0xc9, 0xfe, 0x6a, 0x30, 0x16, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xf4, 0xd3, 0xff, 0xff, 0xbd, 0xe4, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1a, 0x4a, 0x70, 0x7e, 0x5c, 0x30, 0x0, + 0x0, 0x0, 0x18, 0x46, 0x6a, 0x78, 0x58, 0x2e, + 0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcd, + 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xc8, 0x9f, 0xff, 0xff, 0xef, + 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x34, 0xbe, 0xea, 0xee, 0xca, 0x58, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x3c, 0xa6, 0xe8, 0xfa, + 0xfc, 0xf8, 0xe4, 0x98, 0x2a, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcb, 0xf8, + 0xea, 0xf8, 0xf8, 0xe2, 0x8e, 0x1c, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x8e, 0xde, + 0xf8, 0xfc, 0xf8, 0xe4, 0x98, 0x2a, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x48, 0xbc, 0xf0, 0xfa, + 0xf4, 0xe2, 0x57, 0xff, 0xff, 0xff, 0x57, 0x6a, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x10, 0x74, 0xd4, + 0xf6, 0xfa, 0xf8, 0xe6, 0x9e, 0x2e, 0x0, 0x0, + 0x0, 0x0, 0x56, 0xb6, 0xfe, 0xd3, 0xff, 0xff, + 0xbd, 0xfc, 0xd4, 0x9a, 0x18, 0x0, 0x0, 0x0, + 0x0, 0x46, 0xba, 0xf0, 0xfa, 0xf6, 0xd2, 0xa4, + 0xc0, 0xe2, 0xd4, 0x9e, 0x1e, 0x0, 0x0, 0x0, + 0xf4, 0xd3, 0xff, 0xff, 0xbd, 0xf2, 0xe0, 0xf8, + 0xf8, 0xea, 0xa2, 0x28, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x44, 0xae, 0xdc, 0xe6, 0xc8, 0x80, 0x0, + 0x0, 0x0, 0x38, 0xa8, 0xd8, 0xea, 0xce, 0x90, + 0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcd, + 0xf0, 0x0, 0x5c, 0xb8, 0xe0, 0xea, 0xd4, 0x9e, + 0x20, 0x0, 0x0, 0xc8, 0x9f, 0xff, 0xff, 0xef, + 0xfe, 0x0, 0x0, 0x0, 0x5e, 0xb8, 0xe0, 0xdc, + 0xb2, 0x9c, 0xda, 0xf6, 0xf8, 0xee, 0xae, 0x34, + 0x60, 0xce, 0xf4, 0xfa, 0xf2, 0xc0, 0x48, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x68, 0xbe, 0xe2, 0xda, + 0xae, 0x92, 0xd6, 0xf6, 0xfa, 0xf0, 0xb6, 0x3c, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x14, + 0x78, 0xd4, 0xf6, 0xfa, 0xfa, 0xec, 0xb0, 0x44, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x4, 0x8e, 0xfe, 0x6f, 0xbf, 0xe3, + 0xef, 0xe3, 0xb9, 0x57, 0xfc, 0x5c, 0x0, 0x0, + 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcb, 0x49, + 0xc3, 0xeb, 0xe5, 0xb7, 0x41, 0xea, 0x26, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x52, 0xfa, 0x4d, 0xb3, + 0xdf, 0xed, 0xe3, 0xb9, 0x57, 0xfc, 0x5c, 0x0, + 0x0, 0x0, 0x0, 0x7a, 0xfe, 0x7d, 0xd1, 0xeb, + 0xdd, 0x8f, 0x59, 0xff, 0xff, 0xff, 0x57, 0x6a, + 0x0, 0x0, 0x0, 0x0, 0x2a, 0xe2, 0x2f, 0xa3, + 0xdb, 0xed, 0xe3, 0xbd, 0x5d, 0xfe, 0x60, 0x0, + 0x0, 0x0, 0xae, 0x8d, 0xc3, 0xf3, 0xff, 0xff, + 0xeb, 0xc3, 0xc3, 0x3b, 0x38, 0x0, 0x0, 0x0, + 0x76, 0xfe, 0x7b, 0xcf, 0xeb, 0xdf, 0x97, 0xd, + 0xa5, 0xc3, 0xc3, 0x45, 0x44, 0x0, 0x0, 0x0, + 0xf4, 0xd3, 0xff, 0xff, 0xbd, 0x2d, 0xb1, 0xe5, + 0xe9, 0xc3, 0x55, 0xf2, 0x2e, 0x0, 0x0, 0x0, + 0x0, 0x90, 0x79, 0xc3, 0xc3, 0xb7, 0xe8, 0x0, + 0x0, 0x0, 0x78, 0x69, 0xc3, 0xc3, 0xc3, 0xfe, + 0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcd, + 0xf0, 0x24, 0xfa, 0x93, 0xc3, 0xc3, 0xc3, 0x53, + 0x20, 0x0, 0x0, 0xc8, 0x9f, 0xff, 0xff, 0xef, + 0xfe, 0x0, 0x0, 0x0, 0xb8, 0x95, 0xc3, 0xc3, + 0x79, 0x27, 0xa9, 0xe1, 0xeb, 0xcb, 0x61, 0xfc, + 0x11, 0x95, 0xdb, 0xed, 0xd5, 0x7d, 0xfe, 0x5c, + 0x0, 0x0, 0x0, 0x0, 0xc8, 0x9f, 0xc3, 0xc3, + 0x71, 0x1d, 0xa1, 0xdf, 0xeb, 0xcf, 0x71, 0xfe, + 0x4c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x38, 0xec, + 0x35, 0xa5, 0xd9, 0xeb, 0xe5, 0xc5, 0x79, 0x5, + 0x9e, 0x8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x62, 0x11, 0xc1, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x93, 0xfa, 0x22, 0x0, + 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xe5, 0xf5, + 0xff, 0xff, 0xff, 0xff, 0xf7, 0x53, 0xc4, 0x2, + 0x0, 0x0, 0x0, 0x2c, 0xfa, 0x89, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x93, 0xfe, 0x2e, + 0x0, 0x0, 0x38, 0xfe, 0xb1, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xd9, 0xff, 0xff, 0xff, 0x57, 0x6a, + 0x0, 0x0, 0x0, 0xe, 0xdc, 0x57, 0xf3, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x97, 0xfc, 0x2e, + 0x0, 0x0, 0xca, 0xbb, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x4d, 0x4a, 0x0, 0x0, 0x36, + 0xfe, 0xad, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc1, + 0xf1, 0xff, 0xff, 0x5b, 0x66, 0x0, 0x0, 0x0, + 0xf4, 0xd3, 0xff, 0xff, 0xd1, 0xeb, 0xff, 0xff, + 0xff, 0xff, 0xfb, 0x5d, 0xbc, 0x0, 0x0, 0x0, + 0x0, 0xbc, 0x9f, 0xff, 0xff, 0xef, 0xfa, 0x0, + 0x0, 0x0, 0xa4, 0x89, 0xff, 0xff, 0xff, 0xfe, + 0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcd, + 0xf0, 0xb4, 0x4f, 0xff, 0xff, 0xff, 0xbf, 0xd4, + 0x20, 0x0, 0x0, 0xc8, 0x9f, 0xff, 0xff, 0xef, + 0xfe, 0x0, 0x0, 0x0, 0xe0, 0xc3, 0xff, 0xff, + 0xbf, 0xe5, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x61, + 0xcb, 0xff, 0xff, 0xff, 0xff, 0xff, 0x93, 0xee, + 0x8, 0x0, 0x0, 0x0, 0xea, 0xd1, 0xff, 0xff, + 0xb1, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x83, + 0xe0, 0x2, 0x0, 0x0, 0x0, 0x1c, 0xec, 0x6b, + 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcd, + 0x1d, 0x88, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xd2, 0x99, 0xff, 0xff, 0xff, 0xcb, + 0xb7, 0xed, 0xff, 0xff, 0xff, 0x4b, 0x76, 0x0, + 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xff, 0xff, + 0xdb, 0xe1, 0xff, 0xff, 0xff, 0xe1, 0xb, 0x34, + 0x0, 0x0, 0x0, 0xac, 0x59, 0xff, 0xff, 0xff, + 0xef, 0xd1, 0xf3, 0xff, 0xff, 0xff, 0x5d, 0x9c, + 0x0, 0x0, 0xb0, 0x6b, 0xff, 0xff, 0xff, 0xf9, + 0xd5, 0xef, 0xff, 0xff, 0xff, 0xff, 0x57, 0x6a, + 0x0, 0x0, 0x0, 0x70, 0x29, 0xef, 0xff, 0xff, + 0xf9, 0xd5, 0xed, 0xff, 0xff, 0xff, 0x5d, 0xa2, + 0x0, 0x0, 0xb0, 0x93, 0xcb, 0xf3, 0xff, 0xff, + 0xef, 0xcb, 0xcb, 0x3d, 0x38, 0x0, 0x0, 0xae, + 0x67, 0xff, 0xff, 0xff, 0xf9, 0xd5, 0xed, 0xff, + 0xff, 0xff, 0xff, 0x5b, 0x70, 0x0, 0x0, 0x0, + 0xf4, 0xd3, 0xff, 0xff, 0xff, 0xf9, 0xd7, 0xeb, + 0xff, 0xff, 0xff, 0xd9, 0xfe, 0x10, 0x0, 0x0, + 0x0, 0xc8, 0x9f, 0xff, 0xff, 0xef, 0xfe, 0x0, + 0x0, 0x0, 0xb0, 0x89, 0xff, 0xff, 0xff, 0xfe, + 0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcd, + 0xf4, 0x5, 0xd5, 0xff, 0xff, 0xed, 0x27, 0x8e, + 0x0, 0x0, 0x0, 0xc8, 0x9f, 0xff, 0xff, 0xef, + 0xfe, 0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, + 0xff, 0xfb, 0xd7, 0xeb, 0xff, 0xff, 0xff, 0xf9, + 0xff, 0xe5, 0xdb, 0xff, 0xff, 0xff, 0xf9, 0x1f, + 0x3c, 0x0, 0x0, 0x0, 0xf2, 0xd1, 0xff, 0xff, + 0xff, 0xfb, 0xd9, 0xe7, 0xff, 0xff, 0xff, 0xef, + 0xb, 0x22, 0x0, 0x0, 0x0, 0x92, 0x41, 0xf9, + 0xff, 0xff, 0xf9, 0xd1, 0xe3, 0xff, 0xff, 0xff, + 0xb9, 0xfe, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xd4, 0xdf, 0xff, 0xff, 0xbd, 0xfe, + 0xf6, 0x31, 0xf9, 0xff, 0xff, 0x9b, 0xb8, 0x0, + 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xf7, 0x4f, + 0xfe, 0xfe, 0x8f, 0xff, 0xff, 0xff, 0x63, 0x88, + 0x0, 0x0, 0x8, 0xfa, 0xcb, 0xff, 0xff, 0xdb, + 0x19, 0xfc, 0x23, 0xdf, 0xff, 0xff, 0xbb, 0xe2, + 0x0, 0x4, 0xf8, 0xcb, 0xff, 0xff, 0xf1, 0x39, + 0xfe, 0x11, 0xbb, 0xff, 0xff, 0xff, 0x57, 0x6a, + 0x0, 0x0, 0x0, 0xda, 0xa1, 0xff, 0xff, 0xf9, + 0x49, 0xfe, 0x15, 0xd5, 0xff, 0xff, 0xc3, 0xf0, + 0x0, 0x0, 0x5a, 0xbc, 0xfe, 0xd3, 0xff, 0xff, + 0xbd, 0xfe, 0xda, 0xa2, 0x18, 0x0, 0x2, 0xf8, + 0xcb, 0xff, 0xff, 0xf1, 0x39, 0xfe, 0xb, 0xad, + 0xff, 0xff, 0xff, 0x5b, 0x70, 0x0, 0x0, 0x0, + 0xf4, 0xd3, 0xff, 0xff, 0xe3, 0x35, 0xfe, 0x9, + 0xbb, 0xff, 0xff, 0xff, 0x2d, 0x36, 0x0, 0x0, + 0x0, 0xc8, 0x9f, 0xff, 0xff, 0xef, 0xfe, 0x0, + 0x0, 0x0, 0xb0, 0x89, 0xff, 0xff, 0xff, 0xfe, + 0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcd, + 0xfe, 0x81, 0xff, 0xff, 0xff, 0x67, 0xda, 0xc, + 0x0, 0x0, 0x0, 0xc8, 0x9f, 0xff, 0xff, 0xef, + 0xfe, 0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, + 0xed, 0x43, 0xfe, 0xd, 0xcf, 0xff, 0xff, 0xff, + 0x8f, 0xfe, 0xfe, 0x7f, 0xff, 0xff, 0xff, 0x67, + 0x78, 0x0, 0x0, 0x0, 0xf2, 0xd1, 0xff, 0xff, + 0xeb, 0x43, 0xfe, 0xfe, 0xa7, 0xff, 0xff, 0xff, + 0x49, 0x50, 0x0, 0x0, 0x2, 0xf2, 0xbb, 0xff, + 0xff, 0xf1, 0x39, 0xfc, 0xfe, 0xa1, 0xff, 0xff, + 0xff, 0x49, 0x76, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xbc, 0x2b, 0x2f, 0x2f, 0x1d, 0xda, + 0xc0, 0xfe, 0xdf, 0xff, 0xff, 0xb1, 0xd4, 0x0, + 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcb, 0xfa, + 0x24, 0x5a, 0x11, 0xf7, 0xff, 0xff, 0xa1, 0xca, + 0x0, 0x0, 0x2a, 0x1b, 0xfd, 0xff, 0xff, 0x87, + 0xd4, 0x12, 0xd0, 0x89, 0xff, 0xff, 0xdd, 0xdc, + 0x0, 0x1e, 0xf, 0xfb, 0xff, 0xff, 0xa7, 0xee, + 0x1a, 0xaa, 0x57, 0xff, 0xff, 0xff, 0x57, 0x6a, + 0x0, 0x0, 0x4, 0xfe, 0xe3, 0xff, 0xff, 0xb5, + 0xfe, 0xdc, 0xf8, 0x87, 0xff, 0xff, 0xf1, 0xfe, + 0x2, 0x0, 0x0, 0x0, 0xf4, 0xd3, 0xff, 0xff, + 0xbd, 0xe4, 0x0, 0x0, 0x0, 0x0, 0x1c, 0xd, + 0xfb, 0xff, 0xff, 0xa7, 0xee, 0x18, 0x9c, 0x51, + 0xff, 0xff, 0xff, 0x5b, 0x70, 0x0, 0x0, 0x0, + 0xf4, 0xd3, 0xff, 0xff, 0xbd, 0xf2, 0x14, 0xa4, + 0x5d, 0xff, 0xff, 0xff, 0x57, 0x60, 0x0, 0x0, + 0x0, 0xc8, 0x9f, 0xff, 0xff, 0xef, 0xfe, 0x0, + 0x0, 0x0, 0xb0, 0x89, 0xff, 0xff, 0xff, 0xfe, + 0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcd, + 0x25, 0xf1, 0xff, 0xff, 0xaf, 0xfe, 0x36, 0x0, + 0x0, 0x0, 0x0, 0xc8, 0x9f, 0xff, 0xff, 0xef, + 0xfe, 0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, + 0xcb, 0xf8, 0x1e, 0xce, 0x87, 0xff, 0xff, 0xff, + 0x25, 0x68, 0x4e, 0x1b, 0xff, 0xff, 0xff, 0x87, + 0xa4, 0x0, 0x0, 0x0, 0xf2, 0xd1, 0xff, 0xff, + 0xc1, 0xf6, 0x1c, 0x8e, 0x4f, 0xff, 0xff, 0xff, + 0x67, 0x78, 0x0, 0x0, 0x1a, 0xb, 0xf7, 0xff, + 0xff, 0xa3, 0xee, 0x16, 0x6e, 0x1d, 0xf7, 0xff, + 0xff, 0x9b, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x14, 0x90, 0xfa, 0x2d, 0x6f, 0x8d, + 0x97, 0x99, 0xef, 0xff, 0xff, 0xb3, 0xdc, 0x0, + 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcb, 0xee, + 0x0, 0x4, 0xfa, 0xd1, 0xff, 0xff, 0xc1, 0xe4, + 0x0, 0x0, 0x52, 0x4f, 0xff, 0xff, 0xff, 0x59, + 0x80, 0x0, 0x52, 0xfe, 0xfe, 0xfe, 0xfe, 0xb4, + 0x0, 0x40, 0x41, 0xff, 0xff, 0xff, 0x6f, 0xa2, + 0x0, 0x6a, 0x57, 0xff, 0xff, 0xff, 0x57, 0x6a, + 0x0, 0x0, 0x12, 0x11, 0xff, 0xff, 0xff, 0xd3, + 0xad, 0xad, 0xad, 0xc9, 0xff, 0xff, 0xff, 0xb, + 0x6, 0x0, 0x0, 0x0, 0xf4, 0xd3, 0xff, 0xff, + 0xbd, 0xe4, 0x0, 0x0, 0x0, 0x0, 0x3e, 0x41, + 0xff, 0xff, 0xff, 0x6f, 0xa2, 0x0, 0x64, 0x51, + 0xff, 0xff, 0xff, 0x5b, 0x70, 0x0, 0x0, 0x0, + 0xf4, 0xd3, 0xff, 0xff, 0xbd, 0xe4, 0x0, 0x56, + 0x41, 0xff, 0xff, 0xff, 0x65, 0x78, 0x0, 0x0, + 0x0, 0xc8, 0x9f, 0xff, 0xff, 0xef, 0xfe, 0x0, + 0x0, 0x0, 0xb0, 0x89, 0xff, 0xff, 0xff, 0xfe, + 0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xfb, + 0xf3, 0xff, 0xff, 0xe5, 0x19, 0x7a, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xc8, 0x9f, 0xff, 0xff, 0xef, + 0xfe, 0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, + 0xcb, 0xee, 0x0, 0x9c, 0x75, 0xff, 0xff, 0xff, + 0x29, 0x26, 0x8, 0xfe, 0xfb, 0xff, 0xff, 0x91, + 0xb4, 0x0, 0x0, 0x0, 0xf2, 0xd1, 0xff, 0xff, + 0xc1, 0xe8, 0x0, 0x48, 0x39, 0xff, 0xff, 0xff, + 0x6f, 0x88, 0x0, 0x0, 0x3e, 0x3f, 0xff, 0xff, + 0xff, 0x6d, 0xa0, 0x0, 0x8, 0xfa, 0xd5, 0xff, + 0xff, 0xc1, 0xe4, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x8c, 0x19, 0xb5, 0xfd, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xb3, 0xdc, 0x0, + 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcb, 0xee, + 0x0, 0x0, 0xee, 0xc3, 0xff, 0xff, 0xcd, 0xec, + 0x0, 0x0, 0x6a, 0x5f, 0xff, 0xff, 0xff, 0x47, + 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x58, 0x51, 0xff, 0xff, 0xff, 0x59, 0x7a, + 0x0, 0x6a, 0x57, 0xff, 0xff, 0xff, 0x57, 0x6a, + 0x0, 0x0, 0x1c, 0x2b, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x15, + 0xa, 0x0, 0x0, 0x0, 0xf4, 0xd3, 0xff, 0xff, + 0xbd, 0xe4, 0x0, 0x0, 0x0, 0x0, 0x58, 0x51, + 0xff, 0xff, 0xff, 0x59, 0x7a, 0x0, 0x64, 0x51, + 0xff, 0xff, 0xff, 0x5b, 0x70, 0x0, 0x0, 0x0, + 0xf4, 0xd3, 0xff, 0xff, 0xbd, 0xe4, 0x0, 0x46, + 0x3f, 0xff, 0xff, 0xff, 0x67, 0x80, 0x0, 0x0, + 0x0, 0xc8, 0x9f, 0xff, 0xff, 0xef, 0xfe, 0x0, + 0x0, 0x0, 0xb0, 0x89, 0xff, 0xff, 0xff, 0xfe, + 0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xd3, 0x5, 0x54, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xc8, 0x9f, 0xff, 0xff, 0xef, + 0xfe, 0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, + 0xcb, 0xee, 0x0, 0x94, 0x73, 0xff, 0xff, 0xff, + 0x29, 0x2a, 0x0, 0xfe, 0xfb, 0xff, 0xff, 0x91, + 0xb8, 0x0, 0x0, 0x0, 0xf2, 0xd1, 0xff, 0xff, + 0xc1, 0xe8, 0x0, 0x3e, 0x39, 0xff, 0xff, 0xff, + 0x6f, 0x8c, 0x0, 0x0, 0x54, 0x53, 0xff, 0xff, + 0xff, 0x57, 0x7a, 0x0, 0x0, 0xf0, 0xc3, 0xff, + 0xff, 0xcd, 0xec, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xc, 0xfc, 0xbd, 0xff, 0xff, 0xfb, 0xb5, + 0x91, 0x8d, 0xed, 0xff, 0xff, 0xb3, 0xdc, 0x0, + 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcb, 0xee, + 0x0, 0x0, 0xf0, 0xc5, 0xff, 0xff, 0xcb, 0xec, + 0x0, 0x0, 0x5e, 0x57, 0xff, 0xff, 0xff, 0x51, + 0x6e, 0x0, 0x18, 0x54, 0x80, 0x92, 0x6c, 0x38, + 0x0, 0x52, 0x4f, 0xff, 0xff, 0xff, 0x5d, 0x82, + 0x0, 0x6a, 0x57, 0xff, 0xff, 0xff, 0x57, 0x6a, + 0x0, 0x0, 0x18, 0x21, 0xff, 0xff, 0xff, 0xdb, + 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xf, + 0x8, 0x0, 0x0, 0x0, 0xf4, 0xd3, 0xff, 0xff, + 0xbd, 0xe4, 0x0, 0x0, 0x0, 0x0, 0x52, 0x4f, + 0xff, 0xff, 0xff, 0x5d, 0x82, 0x0, 0x64, 0x51, + 0xff, 0xff, 0xff, 0x5b, 0x70, 0x0, 0x0, 0x0, + 0xf4, 0xd3, 0xff, 0xff, 0xbd, 0xe4, 0x0, 0x46, + 0x3f, 0xff, 0xff, 0xff, 0x67, 0x80, 0x0, 0x0, + 0x0, 0xc8, 0x9f, 0xff, 0xff, 0xef, 0xfe, 0x0, + 0x0, 0x0, 0xb0, 0x89, 0xff, 0xff, 0xff, 0xfe, + 0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xf1, + 0xcd, 0xff, 0xff, 0xff, 0x87, 0xea, 0x12, 0x0, + 0x0, 0x0, 0x0, 0xc8, 0x9f, 0xff, 0xff, 0xef, + 0xfe, 0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, + 0xcb, 0xee, 0x0, 0x94, 0x73, 0xff, 0xff, 0xff, + 0x29, 0x2a, 0x0, 0xfe, 0xfb, 0xff, 0xff, 0x91, + 0xb8, 0x0, 0x0, 0x0, 0xf2, 0xd1, 0xff, 0xff, + 0xc1, 0xe8, 0x0, 0x3e, 0x39, 0xff, 0xff, 0xff, + 0x6f, 0x8c, 0x0, 0x0, 0x48, 0x49, 0xff, 0xff, + 0xff, 0x65, 0x8a, 0x0, 0x0, 0xf6, 0xcf, 0xff, + 0xff, 0xc7, 0xe8, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x2a, 0x27, 0xff, 0xff, 0xff, 0x91, 0xfc, + 0xc8, 0xfe, 0xdd, 0xff, 0xff, 0xb3, 0xdc, 0x0, + 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcb, 0xf4, + 0x4, 0x1c, 0xfe, 0xdb, 0xff, 0xff, 0xb9, 0xde, + 0x0, 0x0, 0x3a, 0x33, 0xff, 0xff, 0xff, 0x71, + 0xb2, 0x0, 0x82, 0x3b, 0x77, 0x77, 0x69, 0xb6, + 0x0, 0x34, 0x33, 0xff, 0xff, 0xff, 0x7d, 0xc4, + 0x0, 0x7c, 0x57, 0xff, 0xff, 0xff, 0x57, 0x6a, + 0x0, 0x0, 0xa, 0xfe, 0xf5, 0xff, 0xff, 0xab, + 0xfe, 0xea, 0xe8, 0xe8, 0xea, 0xea, 0xd0, 0x8e, + 0x4, 0x0, 0x0, 0x0, 0xf4, 0xd3, 0xff, 0xff, + 0xbd, 0xe4, 0x0, 0x0, 0x0, 0x0, 0x34, 0x33, + 0xff, 0xff, 0xff, 0x7d, 0xc4, 0x0, 0x74, 0x51, + 0xff, 0xff, 0xff, 0x5b, 0x70, 0x0, 0x0, 0x0, + 0xf4, 0xd3, 0xff, 0xff, 0xbd, 0xe4, 0x0, 0x46, + 0x3f, 0xff, 0xff, 0xff, 0x67, 0x80, 0x0, 0x0, + 0x0, 0xc8, 0x9f, 0xff, 0xff, 0xef, 0xfe, 0x0, + 0x0, 0x0, 0xb0, 0x89, 0xff, 0xff, 0xff, 0xfe, + 0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcd, + 0xfe, 0xd1, 0xff, 0xff, 0xf5, 0x31, 0x96, 0x0, + 0x0, 0x0, 0x0, 0xc8, 0x9f, 0xff, 0xff, 0xef, + 0xfe, 0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, + 0xcb, 0xee, 0x0, 0x94, 0x73, 0xff, 0xff, 0xff, + 0x29, 0x2a, 0x0, 0xfe, 0xfb, 0xff, 0xff, 0x91, + 0xb8, 0x0, 0x0, 0x0, 0xf2, 0xd1, 0xff, 0xff, + 0xc1, 0xe8, 0x0, 0x3e, 0x39, 0xff, 0xff, 0xff, + 0x6f, 0x8c, 0x0, 0x0, 0x26, 0x1f, 0xff, 0xff, + 0xff, 0x89, 0xd0, 0x0, 0x36, 0x5, 0xeb, 0xff, + 0xff, 0xab, 0xd2, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x32, 0x47, 0xff, 0xff, 0xff, 0x65, 0xe8, + 0xd4, 0x13, 0xe9, 0xff, 0xff, 0xb3, 0xe2, 0x0, + 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xe1, 0xf, + 0xe2, 0xee, 0x43, 0xff, 0xff, 0xff, 0x8f, 0xb4, + 0x0, 0x0, 0x14, 0xfe, 0xe5, 0xff, 0xff, 0xbd, + 0xfe, 0xd8, 0xfe, 0xad, 0xff, 0xff, 0xd1, 0xce, + 0x0, 0x14, 0xfe, 0xef, 0xff, 0xff, 0xcd, 0x5, + 0xde, 0xfa, 0x7b, 0xff, 0xff, 0xff, 0x57, 0x6a, + 0x0, 0x0, 0x0, 0xf2, 0xc1, 0xff, 0xff, 0xf5, + 0x39, 0xf0, 0xbe, 0xd4, 0xfc, 0x3b, 0xf4, 0x10, + 0x0, 0x0, 0x0, 0x0, 0xf4, 0xd3, 0xff, 0xff, + 0xbd, 0xe4, 0x0, 0x0, 0x0, 0x0, 0x14, 0xfe, + 0xed, 0xff, 0xff, 0xcd, 0x5, 0xdc, 0xf8, 0x71, + 0xff, 0xff, 0xff, 0x5b, 0x70, 0x0, 0x0, 0x0, + 0xf4, 0xd3, 0xff, 0xff, 0xbd, 0xe4, 0x0, 0x46, + 0x3f, 0xff, 0xff, 0xff, 0x67, 0x80, 0x0, 0x0, + 0x0, 0xc8, 0x9f, 0xff, 0xff, 0xef, 0xfe, 0x0, + 0x0, 0x0, 0xb0, 0x89, 0xff, 0xff, 0xff, 0xfe, + 0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcd, + 0xfa, 0x47, 0xfb, 0xff, 0xff, 0xc3, 0xfe, 0x3e, + 0x0, 0x0, 0x0, 0xc8, 0x9f, 0xff, 0xff, 0xef, + 0xfe, 0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, + 0xcb, 0xee, 0x0, 0x94, 0x73, 0xff, 0xff, 0xff, + 0x29, 0x2a, 0x0, 0xfe, 0xfb, 0xff, 0xff, 0x91, + 0xb8, 0x0, 0x0, 0x0, 0xf2, 0xd1, 0xff, 0xff, + 0xc1, 0xe8, 0x0, 0x3e, 0x39, 0xff, 0xff, 0xff, + 0x6f, 0x8c, 0x0, 0x0, 0x8, 0xfc, 0xd5, 0xff, + 0xff, 0xd7, 0x5, 0xd6, 0xf2, 0x69, 0xff, 0xff, + 0xff, 0x6d, 0x94, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x28, 0x21, 0xff, 0xff, 0xff, 0xd9, 0x73, + 0x81, 0xd9, 0xff, 0xff, 0xff, 0xbf, 0xec, 0x0, + 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xff, 0xd9, + 0x95, 0xa1, 0xed, 0xff, 0xff, 0xfb, 0x35, 0x64, + 0x0, 0x0, 0x0, 0xd4, 0x8b, 0xff, 0xff, 0xff, + 0xbf, 0x8d, 0xb5, 0xff, 0xff, 0xff, 0x8d, 0xc2, + 0x0, 0x0, 0xe6, 0xa7, 0xff, 0xff, 0xff, 0xcd, + 0x93, 0xaf, 0xfb, 0xff, 0xff, 0xff, 0x57, 0x6a, + 0x0, 0x0, 0x0, 0x9e, 0x55, 0xff, 0xff, 0xff, + 0xf1, 0xa1, 0x87, 0x97, 0xcd, 0xfd, 0x2f, 0x5c, + 0x0, 0x0, 0x0, 0x0, 0xf4, 0xd3, 0xff, 0xff, + 0xbd, 0xe4, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe4, + 0xa5, 0xff, 0xff, 0xff, 0xcd, 0x93, 0xab, 0xf9, + 0xff, 0xff, 0xff, 0x5b, 0x70, 0x0, 0x0, 0x0, + 0xf4, 0xd3, 0xff, 0xff, 0xbd, 0xe4, 0x0, 0x46, + 0x3f, 0xff, 0xff, 0xff, 0x67, 0x80, 0x0, 0x0, + 0x0, 0xc8, 0x9f, 0xff, 0xff, 0xef, 0xfe, 0x0, + 0x0, 0x0, 0xb0, 0x89, 0xff, 0xff, 0xff, 0xfe, + 0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcd, + 0xf2, 0xf8, 0xa3, 0xff, 0xff, 0xff, 0x71, 0xdc, + 0xa, 0x0, 0x0, 0xc8, 0x9f, 0xff, 0xff, 0xef, + 0xfe, 0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, + 0xcb, 0xee, 0x0, 0x94, 0x73, 0xff, 0xff, 0xff, + 0x29, 0x2a, 0x0, 0xfe, 0xfb, 0xff, 0xff, 0x91, + 0xb8, 0x0, 0x0, 0x0, 0xf2, 0xd1, 0xff, 0xff, + 0xc1, 0xe8, 0x0, 0x3e, 0x39, 0xff, 0xff, 0xff, + 0x6f, 0x8c, 0x0, 0x0, 0x0, 0xba, 0x6f, 0xff, + 0xff, 0xff, 0xcd, 0x89, 0x9d, 0xf3, 0xff, 0xff, + 0xe1, 0x9, 0x3a, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xa, 0xfc, 0xbb, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xfb, 0xe5, 0xff, 0xff, 0xd7, 0xfc, 0x8, + 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xe3, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xf6, 0x14, + 0x0, 0x0, 0x0, 0x54, 0xb, 0xcb, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xf, 0x58, + 0x0, 0x0, 0x76, 0x27, 0xeb, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xe9, 0xfd, 0xff, 0xff, 0x57, 0x6a, + 0x0, 0x0, 0x0, 0x28, 0xfa, 0x91, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x87, 0x64, + 0x0, 0x0, 0x0, 0x0, 0xf4, 0xd3, 0xff, 0xff, + 0xbd, 0xe4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x72, + 0x23, 0xe9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, + 0xff, 0xff, 0xff, 0x5b, 0x6e, 0x0, 0x0, 0x0, + 0xf4, 0xd3, 0xff, 0xff, 0xbd, 0xe4, 0x0, 0x46, + 0x3f, 0xff, 0xff, 0xff, 0x67, 0x80, 0x0, 0x0, + 0x0, 0xc8, 0x9f, 0xff, 0xff, 0xef, 0xfe, 0x0, + 0x0, 0x0, 0xb0, 0x89, 0xff, 0xff, 0xff, 0xfe, + 0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcd, + 0xf0, 0x70, 0x19, 0xe9, 0xff, 0xff, 0xed, 0x21, + 0x80, 0x0, 0x0, 0xc8, 0x9f, 0xff, 0xff, 0xef, + 0xfe, 0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, + 0xcb, 0xee, 0x0, 0x94, 0x73, 0xff, 0xff, 0xff, + 0x29, 0x2a, 0x0, 0xfe, 0xfb, 0xff, 0xff, 0x91, + 0xb8, 0x0, 0x0, 0x0, 0xf2, 0xd1, 0xff, 0xff, + 0xc1, 0xe8, 0x0, 0x3e, 0x39, 0xff, 0xff, 0xff, + 0x6f, 0x8c, 0x0, 0x0, 0x0, 0x3c, 0xfe, 0xad, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, + 0x4b, 0xc2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xf4, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, + 0xfe, 0xfe, 0xfe, 0xfe, 0x8c, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x8a, 0x1d, 0xb9, 0xff, 0xff, 0xff, + 0xe9, 0x67, 0x8b, 0xff, 0xff, 0xfd, 0x1f, 0x8, + 0x0, 0x0, 0xce, 0xc3, 0xff, 0xff, 0x77, 0x97, + 0xf9, 0xff, 0xff, 0xf5, 0x99, 0x5, 0x66, 0x0, + 0x0, 0x0, 0x0, 0x2, 0x9a, 0x11, 0x9d, 0xf1, + 0xff, 0xff, 0xff, 0xf3, 0x9d, 0x13, 0xa2, 0x4, + 0x0, 0x0, 0xc, 0xd0, 0x3d, 0xcd, 0xff, 0xff, + 0xff, 0xd9, 0x3f, 0xe3, 0xff, 0xff, 0x57, 0x4c, + 0x0, 0x0, 0x0, 0x0, 0x58, 0xfe, 0x6d, 0xdb, + 0xff, 0xff, 0xff, 0xff, 0xeb, 0xa1, 0x23, 0x58, + 0x0, 0x0, 0x0, 0x0, 0xe0, 0xd3, 0xff, 0xff, + 0xbd, 0xc8, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, + 0xce, 0x39, 0xcb, 0xff, 0xff, 0xff, 0xdf, 0x81, + 0xff, 0xff, 0xff, 0x59, 0x64, 0x0, 0x0, 0x0, + 0xe0, 0xd3, 0xff, 0xff, 0xbd, 0xc8, 0x0, 0x30, + 0x3f, 0xff, 0xff, 0xff, 0x67, 0x60, 0x0, 0x0, + 0x0, 0xa4, 0x9f, 0xff, 0xff, 0xef, 0xf6, 0x0, + 0x0, 0x0, 0xb2, 0x89, 0xff, 0xff, 0xff, 0xfe, + 0x0, 0x0, 0x0, 0xce, 0xc3, 0xff, 0xff, 0xcd, + 0xd8, 0x6, 0xd4, 0x6d, 0xff, 0xff, 0xff, 0xb1, + 0x80, 0x0, 0x0, 0xa4, 0x9f, 0xff, 0xff, 0xef, + 0xf6, 0x0, 0x0, 0x0, 0xce, 0xc3, 0xff, 0xff, + 0xcb, 0xd6, 0x0, 0x70, 0x73, 0xff, 0xff, 0xff, + 0x29, 0x1c, 0x0, 0xfe, 0xfb, 0xff, 0xff, 0x91, + 0x94, 0x0, 0x0, 0x0, 0xdc, 0xd1, 0xff, 0xff, + 0xc1, 0xcc, 0x0, 0x2a, 0x39, 0xff, 0xff, 0xff, + 0x6f, 0x68, 0x0, 0x0, 0x0, 0x0, 0x76, 0xfe, + 0x83, 0xe5, 0xff, 0xff, 0xff, 0xfb, 0xc1, 0x3f, + 0xe0, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xfe, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xc1, 0xcc, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x8, 0x88, 0xfa, 0x25, 0x53, 0x45, + 0x9, 0xe0, 0xfe, 0xfe, 0xfe, 0xfe, 0xf2, 0x8, + 0x0, 0x0, 0x90, 0xfe, 0xfe, 0xfe, 0xfe, 0xf4, + 0x1d, 0x4f, 0x49, 0x11, 0xea, 0x60, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x4, 0x66, 0xe4, 0x5, + 0x3f, 0x55, 0x45, 0xb, 0xe8, 0x68, 0x4, 0x0, + 0x0, 0x0, 0x0, 0x18, 0xa4, 0xfc, 0x2d, 0x53, + 0x3d, 0xfe, 0xec, 0xfe, 0xfe, 0xfe, 0xfe, 0x2a, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x3a, 0xc2, 0xfe, + 0x2d, 0x51, 0x51, 0x31, 0xfe, 0xe2, 0x70, 0xc, + 0x0, 0x0, 0x0, 0x0, 0xa6, 0xfe, 0xfe, 0xfe, + 0xfe, 0x88, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1e, 0xa6, 0xfc, 0x2d, 0x53, 0x41, 0xfe, 0x73, + 0xff, 0xff, 0xff, 0x43, 0x42, 0x0, 0x0, 0x0, + 0xa6, 0xfe, 0xfe, 0xfe, 0xfe, 0x88, 0x0, 0x1a, + 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x36, 0x0, 0x0, + 0x0, 0x68, 0xfe, 0xfe, 0xfe, 0xfe, 0xd2, 0x0, + 0x0, 0x0, 0xc2, 0x8d, 0xff, 0xff, 0xff, 0xfe, + 0x0, 0x0, 0x0, 0x90, 0xfe, 0xfe, 0xfe, 0xfe, + 0x9c, 0x0, 0x3a, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, + 0x7c, 0x0, 0x0, 0x68, 0xfe, 0xfe, 0xfe, 0xfe, + 0xd2, 0x0, 0x0, 0x0, 0x90, 0xfe, 0xfe, 0xfe, + 0xfe, 0x98, 0x0, 0x40, 0xfe, 0xfe, 0xfe, 0xfe, + 0xfe, 0xe, 0x0, 0xec, 0xfe, 0xfe, 0xfe, 0xfe, + 0x5a, 0x0, 0x0, 0x0, 0xa2, 0xfe, 0xfe, 0xfe, + 0xfe, 0x8c, 0x0, 0x16, 0xfe, 0xfe, 0xfe, 0xfe, + 0xfe, 0x3c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4c, + 0xd4, 0xfe, 0x35, 0x53, 0x49, 0x1b, 0xf8, 0x98, + 0x1a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xfe, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xc1, 0xda, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xc, 0x30, 0x48, 0x40, + 0x1e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, + 0x2c, 0x46, 0x42, 0x24, 0x4, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1a, + 0x3e, 0x54, 0x42, 0x1e, 0x2, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x10, 0x34, 0x48, + 0x3c, 0x1a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10, + 0x32, 0x50, 0x52, 0x36, 0x12, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x5a, 0x21, 0x15, 0xf6, 0xde, 0xe8, 0xb, 0xcf, + 0xff, 0xff, 0xf3, 0xb, 0x1e, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x7a, 0xbe, 0xfe, 0xb1, 0xff, 0xff, 0xef, 0xfe, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x14, 0x38, 0x50, 0x48, 0x26, 0x8, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xf8, 0xa7, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, + 0xa9, 0xa9, 0xa9, 0x7f, 0xac, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xba, 0x8d, 0xf3, 0xb9, 0x9b, 0x9d, 0xdb, 0xff, + 0xff, 0xff, 0xa1, 0xea, 0x2, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, + 0x5, 0xb1, 0xb9, 0xfd, 0xff, 0xff, 0xbf, 0xee, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x70, 0xb0, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, + 0xd4, 0xd4, 0xc8, 0x9a, 0x48, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xc2, 0xc7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xcd, 0x13, 0x6c, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20, + 0x23, 0xff, 0xff, 0xff, 0xff, 0xf9, 0x4d, 0x9a, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xa4, 0x55, 0xb1, 0xef, 0xff, 0xff, 0xfd, 0xdb, + 0x89, 0xb, 0x9e, 0x4, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20, + 0x37, 0xff, 0xff, 0xff, 0xd5, 0x57, 0xf0, 0x22, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x28, 0x90, 0xea, 0xfe, 0x21, 0x2d, 0x11, 0xfc, + 0xc8, 0x52, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x16, + 0xfa, 0x1b, 0x35, 0x1b, 0xfc, 0xb4, 0x2a, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xa, 0x1a, 0x1c, 0x14, 0x4, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x8, 0x1a, 0x22, 0x1a, 0x8, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x26, + 0x86, 0x86, 0x72, 0x2, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0x76, + 0x84, 0x80, 0x1e, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x7a, 0xfe, + 0x51, 0xa9, 0xd, 0x3a, 0x0, 0x0, 0x0, 0xa, + 0x16, 0x16, 0xc, 0x0, 0x0, 0x0, 0x4e, 0x1f, + 0xa7, 0x45, 0xfa, 0x68, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x62, 0xb, 0xb1, + 0xff, 0xff, 0x69, 0x4e, 0x0, 0x0, 0x0, 0xec, + 0x21, 0x23, 0x5, 0x10, 0x0, 0x0, 0x64, 0x7d, + 0xff, 0xff, 0x9f, 0xfe, 0x4c, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xaa, + 0xe2, 0xf6, 0xe8, 0xbc, 0x3a, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x6, 0xe6, 0x99, 0xff, + 0xff, 0xd9, 0x3f, 0x4c, 0x0, 0x0, 0x0, 0xfe, + 0xfb, 0xff, 0x2f, 0x20, 0x0, 0x0, 0x60, 0x49, + 0xe1, 0xff, 0xff, 0x83, 0xd4, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xb, + 0xd7, 0xd7, 0xd7, 0x6d, 0x76, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x2c, 0x17, 0xf1, 0xff, + 0xff, 0x37, 0xba, 0x1a, 0x0, 0x0, 0x0, 0xfe, + 0xfb, 0xff, 0x2f, 0x2e, 0x0, 0x0, 0x20, 0xca, + 0x4f, 0xff, 0xff, 0xe7, 0x9, 0x16, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xd, + 0xff, 0xff, 0xff, 0x83, 0x9e, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x60, 0x53, 0xff, 0xff, + 0xdd, 0xfe, 0x16, 0x0, 0x0, 0x0, 0x0, 0xfe, + 0xfb, 0xff, 0x2f, 0x2e, 0x0, 0x0, 0x0, 0x24, + 0xfe, 0xed, 0xff, 0xff, 0x39, 0x40, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x5e, 0xb8, 0xe0, 0xdc, 0xb6, 0xb6, 0xea, + 0xf8, 0xf8, 0xe0, 0x88, 0x16, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x48, 0xbc, 0xf0, 0xfa, + 0xf6, 0xd0, 0xa6, 0xc4, 0xe4, 0xd2, 0x9a, 0x16, + 0x0, 0x0, 0x0, 0x5e, 0xb8, 0xe0, 0xdc, 0xb8, + 0xbc, 0xec, 0xf0, 0xda, 0x46, 0x0, 0x0, 0x0, + 0x4, 0x54, 0xbe, 0xf0, 0xfa, 0xfc, 0xf6, 0xd6, + 0x80, 0x1a, 0x0, 0x0, 0x0, 0x64, 0xbc, 0xd, + 0xff, 0xff, 0xff, 0x83, 0xf4, 0xb2, 0x4e, 0x0, + 0x0, 0x6a, 0xbe, 0xe2, 0xde, 0xb6, 0x56, 0x0, + 0x10, 0x98, 0xd2, 0xea, 0xd6, 0xa0, 0x24, 0x0, + 0x0, 0x5e, 0xba, 0xe0, 0xe6, 0xc4, 0x78, 0x0, + 0x0, 0x4e, 0xb2, 0xdc, 0xe8, 0xca, 0x86, 0x0, + 0x4c, 0xb2, 0xdc, 0xde, 0xb4, 0x52, 0x0, 0x38, + 0xa8, 0xd8, 0xd0, 0x92, 0x6, 0x2, 0x8e, 0xce, + 0xea, 0xd4, 0x9a, 0x18, 0x0, 0x3a, 0xaa, 0xda, + 0xea, 0xd8, 0xa4, 0x2e, 0xa, 0x92, 0xd0, 0xea, + 0xe2, 0xbe, 0x68, 0x0, 0x72, 0xc2, 0xe4, 0xe4, + 0xc2, 0x74, 0x0, 0x0, 0x4e, 0xb2, 0xde, 0xea, + 0xd0, 0x94, 0xa, 0x0, 0x86, 0xca, 0xe8, 0xea, + 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xd4, 0x9c, + 0x1c, 0x0, 0x0, 0x0, 0x88, 0x73, 0xff, 0xff, + 0xcb, 0xf2, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfe, + 0xfb, 0xff, 0x2f, 0x2e, 0x0, 0x0, 0x0, 0x0, + 0xfa, 0xdb, 0xff, 0xff, 0x5d, 0x68, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xb8, 0x95, 0xc3, 0xc3, 0x75, 0x49, 0xc3, + 0xeb, 0xe3, 0xb3, 0x39, 0xe2, 0x20, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x7a, 0xfe, 0x7d, 0xd1, 0xeb, + 0xdf, 0x93, 0xb, 0xad, 0xc3, 0xc3, 0x37, 0x32, + 0x0, 0x0, 0x0, 0xb8, 0x95, 0xc3, 0xc3, 0x79, + 0x43, 0xc9, 0xeb, 0x7b, 0x74, 0x0, 0x0, 0xc, + 0xb2, 0x11, 0x89, 0xcf, 0xe9, 0xed, 0xd9, 0xa9, + 0x3f, 0xf2, 0x40, 0x0, 0x0, 0xc4, 0x9d, 0xc5, + 0xff, 0xff, 0xff, 0xdb, 0xc3, 0x83, 0xa0, 0x0, + 0x0, 0xca, 0xa1, 0xc3, 0xc3, 0x8d, 0xae, 0x0, + 0x28, 0x2f, 0xc3, 0xc3, 0xc3, 0x4f, 0x52, 0x0, + 0x0, 0x90, 0x97, 0xc3, 0xc3, 0xaf, 0xfc, 0xe, + 0x0, 0xc6, 0x83, 0xc3, 0xc3, 0xbb, 0xb, 0x0, + 0x7c, 0x83, 0xc3, 0xc3, 0x89, 0xc6, 0x0, 0xa6, + 0x6b, 0xc3, 0xc3, 0x17, 0x3c, 0x22, 0xb, 0xc1, + 0xc3, 0xc3, 0x3f, 0x1c, 0x0, 0x40, 0x73, 0xc3, + 0xc3, 0xc3, 0x5b, 0xb0, 0x64, 0x21, 0xc1, 0xc3, + 0xc3, 0xa1, 0x84, 0x0, 0xaa, 0xa9, 0xc3, 0xc3, + 0xab, 0xfc, 0x10, 0x0, 0xd0, 0x85, 0xc3, 0xc3, + 0xc3, 0x27, 0xa, 0x0, 0xee, 0xbb, 0xc3, 0xc3, + 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x41, + 0x40, 0x0, 0x0, 0x0, 0x98, 0x7b, 0xff, 0xff, + 0xc7, 0xee, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfe, + 0xfb, 0xff, 0x2f, 0x2e, 0x0, 0x0, 0x0, 0x0, + 0xf6, 0xd7, 0xff, 0xff, 0x67, 0x7c, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xe0, 0xc3, 0xff, 0xff, 0xcf, 0xf7, 0xff, + 0xff, 0xff, 0xff, 0xf3, 0x49, 0xba, 0x0, 0x0, + 0x0, 0x0, 0x38, 0xfe, 0xb1, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xbb, 0xfb, 0xff, 0xff, 0x49, 0x4c, + 0x0, 0x0, 0x0, 0xe0, 0xc3, 0xff, 0xff, 0xb9, + 0xeb, 0xff, 0xff, 0x75, 0x8c, 0x0, 0x0, 0x7c, + 0x23, 0xd9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xfb, 0x73, 0xec, 0x10, 0x0, 0xdc, 0xcd, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xad, 0xbe, 0x0, + 0x0, 0xec, 0xd3, 0xff, 0xff, 0xbb, 0xd8, 0x0, + 0x3e, 0x3f, 0xff, 0xff, 0xff, 0x67, 0x76, 0x0, + 0x0, 0x98, 0x87, 0xff, 0xff, 0xff, 0x2b, 0x4e, + 0xc, 0xfc, 0xd9, 0xff, 0xff, 0xc1, 0xd6, 0x0, + 0x86, 0x7b, 0xff, 0xff, 0xd7, 0xfa, 0x6, 0xf4, + 0xc1, 0xff, 0xff, 0x69, 0x96, 0x64, 0x4b, 0xff, + 0xff, 0xf7, 0xf, 0x1c, 0x0, 0x40, 0x1d, 0xeb, + 0xff, 0xff, 0xcf, 0xfe, 0xe8, 0x97, 0xff, 0xff, + 0xff, 0x5d, 0x84, 0x0, 0xb4, 0x9f, 0xff, 0xff, + 0xff, 0x2d, 0x54, 0x1a, 0xfe, 0xe3, 0xff, 0xff, + 0xd7, 0xe6, 0xa, 0x0, 0xfc, 0xf5, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x57, + 0x4c, 0x0, 0x0, 0x0, 0xa2, 0x7b, 0xff, 0xff, + 0xc7, 0xea, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfe, + 0xfb, 0xff, 0x2f, 0x2e, 0x0, 0x0, 0x0, 0x0, + 0xf4, 0xd7, 0xff, 0xff, 0x67, 0x86, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xea, 0xc3, 0xff, 0xff, 0xff, 0xfd, 0xd9, + 0xe5, 0xff, 0xff, 0xff, 0xdb, 0x5, 0x2e, 0x0, + 0x0, 0x0, 0xb0, 0x6b, 0xff, 0xff, 0xff, 0xf7, + 0xcf, 0xe9, 0xff, 0xff, 0xff, 0xff, 0x49, 0x54, + 0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x57, 0x64, 0x0, 0x0, 0xe2, + 0xad, 0xff, 0xff, 0xf7, 0xa7, 0x9b, 0xe5, 0xff, + 0xff, 0xf7, 0x2f, 0x54, 0x0, 0xc6, 0xa1, 0xcb, + 0xff, 0xff, 0xff, 0xdf, 0xcb, 0x89, 0xa2, 0x0, + 0x0, 0xf4, 0xd3, 0xff, 0xff, 0xbb, 0xe2, 0x0, + 0x46, 0x3f, 0xff, 0xff, 0xff, 0x67, 0x80, 0x0, + 0x0, 0x5a, 0x2d, 0xfd, 0xff, 0xff, 0x79, 0xa6, + 0x48, 0x25, 0xff, 0xff, 0xff, 0x75, 0xaa, 0x0, + 0x52, 0x31, 0xff, 0xff, 0xf9, 0xf, 0x50, 0xd, + 0xf5, 0xff, 0xff, 0xad, 0xe6, 0xaa, 0x81, 0xff, + 0xff, 0xcb, 0xf8, 0x4, 0x0, 0x8, 0xd8, 0x73, + 0xff, 0xff, 0xff, 0x55, 0x19, 0xf1, 0xff, 0xff, + 0xb9, 0xfe, 0x2e, 0x0, 0x78, 0x45, 0xff, 0xff, + 0xff, 0x7d, 0xb0, 0x68, 0x3f, 0xff, 0xff, 0xff, + 0x8b, 0xca, 0x0, 0x0, 0xf8, 0xef, 0xfb, 0xfb, + 0xfb, 0xfb, 0xfb, 0xff, 0xff, 0xff, 0xf3, 0x2d, + 0x38, 0x0, 0x0, 0x0, 0xc2, 0x87, 0xff, 0xff, + 0xbd, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfe, + 0xfb, 0xff, 0x2f, 0x2e, 0x0, 0x0, 0x0, 0x0, + 0xec, 0xcd, 0xff, 0xff, 0x73, 0xaa, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x48, 0xa6, 0xd0, 0xd0, + 0x9e, 0x42, 0x2, 0x0, 0x2, 0x18, 0x1a, 0x18, + 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xea, 0xc3, 0xff, 0xff, 0xf3, 0x49, 0xfe, + 0xfe, 0xa5, 0xff, 0xff, 0xff, 0x5d, 0x82, 0x0, + 0x0, 0x4, 0xf8, 0xcb, 0xff, 0xff, 0xef, 0x33, + 0xfc, 0x9, 0xaf, 0xff, 0xff, 0xff, 0x49, 0x54, + 0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xff, + 0xbb, 0x77, 0x75, 0x1d, 0x30, 0x0, 0x0, 0xf8, + 0xe9, 0xff, 0xff, 0x8f, 0xfc, 0xea, 0x39, 0xff, + 0xff, 0xff, 0x7d, 0x5c, 0x0, 0x6a, 0xc4, 0xd, + 0xff, 0xff, 0xff, 0x83, 0xf4, 0xb8, 0x52, 0x0, + 0x0, 0xf4, 0xd3, 0xff, 0xff, 0xbb, 0xe2, 0x0, + 0x46, 0x3f, 0xff, 0xff, 0xff, 0x67, 0x80, 0x0, + 0x0, 0x10, 0xfc, 0xcd, 0xff, 0xff, 0xb5, 0xea, + 0x9c, 0x73, 0xff, 0xff, 0xf7, 0x19, 0x44, 0x0, + 0x12, 0xfe, 0xe3, 0xff, 0xff, 0x4d, 0xb8, 0x5f, + 0xff, 0xff, 0xff, 0xe7, 0xfe, 0xe2, 0xad, 0xff, + 0xff, 0x93, 0xc8, 0x0, 0x0, 0x0, 0x3e, 0xfe, + 0xc9, 0xff, 0xff, 0xc3, 0x8d, 0xff, 0xff, 0xf3, + 0x2d, 0x8a, 0x0, 0x0, 0x1e, 0xfe, 0xdb, 0xff, + 0xff, 0xbf, 0xf4, 0xc6, 0x8f, 0xff, 0xff, 0xfd, + 0x2d, 0x60, 0x0, 0x0, 0xd2, 0xfc, 0xfe, 0xfe, + 0xfe, 0xfe, 0x97, 0xff, 0xff, 0xff, 0x6d, 0xe4, + 0x10, 0x0, 0x26, 0x98, 0xfe, 0xbb, 0xff, 0xff, + 0x95, 0xb8, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfe, + 0xfb, 0xff, 0x2f, 0x2e, 0x0, 0x0, 0x0, 0x0, + 0xce, 0xa7, 0xff, 0xff, 0xa9, 0xfc, 0x8c, 0x1e, + 0x0, 0x0, 0x0, 0x86, 0x9, 0x7d, 0xb7, 0xb1, + 0x77, 0xb, 0xbc, 0x1c, 0x26, 0xd, 0x39, 0xb, + 0xf2, 0x2e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcb, 0xfa, 0x20, + 0x74, 0x23, 0xfb, 0xff, 0xff, 0x9f, 0xc6, 0x0, + 0x0, 0x1e, 0xf, 0xfb, 0xff, 0xff, 0xa5, 0xec, + 0x14, 0xa6, 0x5f, 0xff, 0xff, 0xff, 0x49, 0x54, + 0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xd9, + 0xfe, 0xba, 0x74, 0x46, 0x8, 0x0, 0x0, 0xf8, + 0xeb, 0xff, 0xff, 0xb3, 0x5, 0xea, 0xfe, 0x41, + 0x43, 0x43, 0x25, 0x50, 0x0, 0x0, 0x6, 0xd, + 0xff, 0xff, 0xff, 0x83, 0xa6, 0x0, 0x0, 0x0, + 0x0, 0xf4, 0xd3, 0xff, 0xff, 0xbb, 0xe2, 0x0, + 0x46, 0x3f, 0xff, 0xff, 0xff, 0x67, 0x80, 0x0, + 0x0, 0x0, 0xbc, 0x83, 0xff, 0xff, 0xe9, 0xfe, + 0xe6, 0xaf, 0xff, 0xff, 0xbd, 0xf6, 0x6, 0x0, + 0x0, 0xe6, 0xb1, 0xff, 0xff, 0x83, 0xf4, 0xa5, + 0xff, 0xff, 0xff, 0xff, 0x41, 0xfc, 0xd7, 0xff, + 0xff, 0x55, 0x76, 0x0, 0x0, 0x0, 0x0, 0xa2, + 0x3d, 0xf9, 0xff, 0xff, 0xf1, 0xff, 0xff, 0x89, + 0xe8, 0x10, 0x0, 0x0, 0x0, 0xd0, 0x91, 0xff, + 0xff, 0xf5, 0xd, 0xfc, 0xcf, 0xff, 0xff, 0xcb, + 0xfc, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10, + 0xda, 0x5d, 0xfd, 0xff, 0xff, 0xa7, 0xfe, 0x3a, + 0x0, 0x0, 0x70, 0x51, 0xbb, 0xff, 0xff, 0xef, + 0x2d, 0x68, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfe, + 0xfb, 0xff, 0x2f, 0x2e, 0x0, 0x0, 0x0, 0x0, + 0x7e, 0x3d, 0xf5, 0xff, 0xff, 0xb3, 0x45, 0x5a, + 0x0, 0x0, 0x30, 0xfe, 0xbb, 0xff, 0xff, 0xff, + 0xff, 0xdd, 0x43, 0xee, 0xca, 0x4f, 0xff, 0xfb, + 0x5b, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcb, 0xee, 0x0, + 0xc, 0xfc, 0xd7, 0xff, 0xff, 0xbf, 0xe4, 0x0, + 0x0, 0x40, 0x41, 0xff, 0xff, 0xff, 0x6f, 0xa2, + 0x0, 0x76, 0x5f, 0xff, 0xff, 0xff, 0x49, 0x54, + 0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcb, + 0xf2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe2, + 0xad, 0xff, 0xff, 0xff, 0xe7, 0xb1, 0x7b, 0x2d, + 0xfc, 0xac, 0x38, 0xc, 0x0, 0x0, 0x6, 0xd, + 0xff, 0xff, 0xff, 0x83, 0xa6, 0x0, 0x0, 0x0, + 0x0, 0xf4, 0xd3, 0xff, 0xff, 0xbb, 0xe2, 0x0, + 0x46, 0x3f, 0xff, 0xff, 0xff, 0x67, 0x80, 0x0, + 0x0, 0x0, 0x56, 0x27, 0xfb, 0xff, 0xff, 0x41, + 0xfe, 0xe3, 0xff, 0xff, 0x6f, 0xa4, 0x0, 0x0, + 0x0, 0xa2, 0x77, 0xff, 0xff, 0xb1, 0xfe, 0xdf, + 0xff, 0xd1, 0xff, 0xff, 0x8d, 0xf, 0xf9, 0xff, + 0xf5, 0xb, 0x28, 0x0, 0x0, 0x0, 0x0, 0x1a, + 0xf4, 0x9b, 0xff, 0xff, 0xff, 0xff, 0xd9, 0x9, + 0x52, 0x0, 0x0, 0x0, 0x0, 0x64, 0x31, 0xff, + 0xff, 0xff, 0x5f, 0x21, 0xfb, 0xff, 0xff, 0x7f, + 0xba, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa2, + 0x2d, 0xed, 0xff, 0xff, 0xd5, 0xf, 0x72, 0x0, + 0x0, 0x0, 0x9e, 0x8d, 0xff, 0xff, 0xeb, 0x43, + 0xea, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfe, + 0xfb, 0xff, 0x2f, 0x2e, 0x0, 0x0, 0x0, 0x0, + 0x1a, 0xf2, 0x4d, 0xed, 0xff, 0xff, 0x7b, 0x84, + 0x0, 0x0, 0x92, 0x5f, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xf5, 0x85, 0x4d, 0xcb, 0xff, 0xff, + 0x39, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcb, 0xee, 0x0, + 0x0, 0xf0, 0xc5, 0xff, 0xff, 0xcd, 0xec, 0x0, + 0x0, 0x58, 0x51, 0xff, 0xff, 0xff, 0x59, 0x7a, + 0x0, 0x76, 0x5f, 0xff, 0xff, 0xff, 0x49, 0x54, + 0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcb, + 0xee, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x78, + 0x19, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, + 0xbf, 0x33, 0xcc, 0x8, 0x0, 0x0, 0x6, 0xd, + 0xff, 0xff, 0xff, 0x83, 0xa6, 0x0, 0x0, 0x0, + 0x0, 0xf4, 0xd3, 0xff, 0xff, 0xbb, 0xe2, 0x0, + 0x46, 0x3f, 0xff, 0xff, 0xff, 0x67, 0x80, 0x0, + 0x0, 0x0, 0xc, 0xfa, 0xc9, 0xff, 0xff, 0x89, + 0x35, 0xff, 0xff, 0xf5, 0x13, 0x3e, 0x0, 0x0, + 0x0, 0x4e, 0x2d, 0xff, 0xff, 0xd9, 0x35, 0xff, + 0xff, 0x7d, 0xd5, 0xff, 0xcb, 0x4f, 0xff, 0xff, + 0xc7, 0xf6, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x94, 0x17, 0xf7, 0xff, 0xff, 0xff, 0x6b, 0xe4, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x12, 0xfc, 0xcf, + 0xff, 0xff, 0xa5, 0x75, 0xff, 0xff, 0xf9, 0x21, + 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x64, 0x9, + 0xcd, 0xff, 0xff, 0xf3, 0x37, 0xb0, 0x4, 0x0, + 0x0, 0x0, 0x8c, 0x89, 0xff, 0xff, 0xff, 0xa7, + 0xfe, 0x34, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfe, + 0xfb, 0xff, 0x2f, 0x2e, 0x0, 0x0, 0x0, 0x0, + 0x46, 0x5, 0xb5, 0xff, 0xff, 0xff, 0x77, 0x74, + 0x0, 0x0, 0xc4, 0xaf, 0xff, 0xf9, 0x5d, 0x41, + 0xb3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd3, + 0xfe, 0x16, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcb, 0xee, 0x0, + 0x0, 0xf4, 0xcb, 0xff, 0xff, 0xcb, 0xec, 0x0, + 0x0, 0x52, 0x4f, 0xff, 0xff, 0xff, 0x5d, 0x82, + 0x0, 0x76, 0x5f, 0xff, 0xff, 0xff, 0x49, 0x54, + 0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcb, + 0xee, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, + 0x92, 0xfe, 0x4d, 0xa3, 0xd9, 0xff, 0xff, 0xff, + 0xff, 0xe9, 0x1f, 0x4c, 0x0, 0x0, 0x6, 0xd, + 0xff, 0xff, 0xff, 0x83, 0xa6, 0x0, 0x0, 0x0, + 0x0, 0xf2, 0xd3, 0xff, 0xff, 0xbb, 0xe6, 0x0, + 0x46, 0x3f, 0xff, 0xff, 0xff, 0x67, 0x80, 0x0, + 0x0, 0x0, 0x0, 0xb6, 0x7d, 0xff, 0xff, 0xc3, + 0x7f, 0xff, 0xff, 0xb9, 0xf2, 0x4, 0x0, 0x0, + 0x0, 0x10, 0xfe, 0xe1, 0xff, 0xfb, 0x8b, 0xff, + 0xff, 0x29, 0x95, 0xff, 0xfb, 0x8d, 0xff, 0xff, + 0x8f, 0xc2, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe, + 0xe6, 0x83, 0xff, 0xff, 0xff, 0xff, 0xc5, 0xfe, + 0x3c, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbe, 0x81, + 0xff, 0xff, 0xe1, 0xb9, 0xff, 0xff, 0xbf, 0xf8, + 0xa, 0x0, 0x0, 0x0, 0x0, 0x30, 0xfa, 0x9b, + 0xff, 0xff, 0xff, 0x6d, 0xe4, 0x16, 0x0, 0x0, + 0x0, 0x0, 0x52, 0xfe, 0x43, 0xeb, 0xff, 0xff, + 0x67, 0x94, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfe, + 0xfb, 0xff, 0x2f, 0x2e, 0x0, 0x0, 0x0, 0x0, + 0xac, 0x7b, 0xff, 0xff, 0xdf, 0x37, 0xfe, 0x42, + 0x0, 0x0, 0xb6, 0xab, 0xef, 0xc1, 0xf8, 0x9e, + 0xfe, 0x7d, 0xf7, 0xff, 0xff, 0xff, 0xef, 0x43, + 0xae, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcb, 0xf2, 0x0, + 0x2a, 0xfe, 0xe3, 0xff, 0xff, 0xb7, 0xde, 0x0, + 0x0, 0x34, 0x33, 0xff, 0xff, 0xff, 0x7d, 0xc4, + 0x0, 0x82, 0x5f, 0xff, 0xff, 0xff, 0x49, 0x54, + 0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcb, + 0xee, 0x0, 0x0, 0x0, 0x0, 0x0, 0x32, 0x9, + 0x15, 0x15, 0x13, 0xfc, 0xfe, 0x27, 0x9f, 0xff, + 0xff, 0xff, 0x7b, 0x8c, 0x0, 0x0, 0x4, 0xd, + 0xff, 0xff, 0xff, 0x83, 0xac, 0x0, 0x0, 0x0, + 0x0, 0xee, 0xcf, 0xff, 0xff, 0xc3, 0xf2, 0x0, + 0x56, 0x3f, 0xff, 0xff, 0xff, 0x67, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x50, 0x21, 0xfb, 0xff, 0xf3, + 0xb7, 0xff, 0xff, 0x6b, 0xa0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xe2, 0xad, 0xff, 0xff, 0xe9, 0xff, + 0xd3, 0xfe, 0x47, 0xff, 0xff, 0xe9, 0xff, 0xff, + 0x4f, 0x6e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x88, + 0x29, 0xf3, 0xff, 0xff, 0xfb, 0xff, 0xff, 0x71, + 0xd8, 0x8, 0x0, 0x0, 0x0, 0x0, 0x54, 0x23, + 0xfb, 0xff, 0xff, 0xf3, 0xff, 0xff, 0x71, 0xa8, + 0x0, 0x0, 0x0, 0x0, 0x10, 0xdc, 0x61, 0xff, + 0xff, 0xff, 0xa7, 0xfc, 0x3a, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1c, 0xea, 0x99, 0xff, 0xff, + 0xb1, 0xd2, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfe, + 0xfb, 0xff, 0x2f, 0x2e, 0x0, 0x0, 0x0, 0x0, + 0xe2, 0xc1, 0xff, 0xff, 0x85, 0xdc, 0x16, 0x0, + 0x0, 0x0, 0x74, 0xe6, 0xf4, 0x9, 0x8c, 0x0, + 0x48, 0xea, 0x2b, 0x87, 0xa3, 0x8d, 0x29, 0xda, + 0x1c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xea, 0xc3, 0xff, 0xff, 0xdb, 0x5, 0xd8, + 0xf2, 0x59, 0xff, 0xff, 0xff, 0x8b, 0xb0, 0x0, + 0x0, 0x14, 0xfe, 0xef, 0xff, 0xff, 0xcb, 0x5, + 0xd6, 0xf8, 0x77, 0xff, 0xff, 0xff, 0x49, 0x54, + 0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcb, + 0xee, 0x0, 0x0, 0x0, 0x0, 0x0, 0x38, 0x63, + 0xff, 0xff, 0xfb, 0x17, 0xae, 0xb4, 0xfe, 0xeb, + 0xff, 0xff, 0x91, 0xa0, 0x0, 0x0, 0x2, 0x5, + 0xff, 0xff, 0xff, 0x8d, 0xf2, 0x80, 0x30, 0x0, + 0x0, 0xe0, 0xbb, 0xff, 0xff, 0xe9, 0x9, 0xda, + 0xf6, 0x5b, 0xff, 0xff, 0xff, 0x67, 0x80, 0x0, + 0x0, 0x0, 0x0, 0xa, 0xfa, 0xc5, 0xff, 0xff, + 0xf3, 0xff, 0xf3, 0xf, 0x3a, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x9c, 0x73, 0xff, 0xff, 0xff, 0xff, + 0x93, 0xd2, 0xfe, 0xe7, 0xff, 0xff, 0xff, 0xf3, + 0x9, 0x24, 0x0, 0x0, 0x0, 0x0, 0x2e, 0xfe, + 0xb7, 0xff, 0xff, 0xdd, 0x99, 0xff, 0xff, 0xeb, + 0x1d, 0x74, 0x0, 0x0, 0x0, 0x0, 0xc, 0xf8, + 0xc1, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x13, 0x40, + 0x0, 0x0, 0x0, 0x2, 0xa6, 0x2f, 0xef, 0xff, + 0xff, 0xd5, 0xf, 0xee, 0xe0, 0xe0, 0xcc, 0x9a, + 0x32, 0x0, 0x0, 0x0, 0xac, 0x7d, 0xff, 0xff, + 0xc5, 0xe6, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfe, + 0xfb, 0xff, 0x2f, 0x2e, 0x0, 0x0, 0x0, 0x0, + 0xf2, 0xd5, 0xff, 0xff, 0x69, 0x92, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xe, 0x5a, 0x9e, 0xba, 0xa2, 0x5e, 0xe, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xea, 0xc3, 0xff, 0xff, 0xff, 0xcf, 0x8b, + 0x9f, 0xf1, 0xff, 0xff, 0xfb, 0x2f, 0x5e, 0x0, + 0x0, 0x0, 0xe6, 0xa7, 0xff, 0xff, 0xff, 0xc7, + 0x8d, 0xa5, 0xf7, 0xff, 0xff, 0xff, 0x49, 0x54, + 0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcb, + 0xee, 0x0, 0x0, 0x0, 0x0, 0x0, 0x38, 0x19, + 0xf3, 0xff, 0xff, 0xc1, 0x51, 0x3f, 0x8b, 0xff, + 0xff, 0xff, 0x67, 0x7c, 0x0, 0x0, 0x0, 0xfe, + 0xeb, 0xff, 0xff, 0xe9, 0x99, 0x5f, 0x8c, 0x0, + 0x0, 0xb2, 0x89, 0xff, 0xff, 0xff, 0xcb, 0x91, + 0xa9, 0xf5, 0xff, 0xff, 0xff, 0x67, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xb2, 0x79, 0xff, 0xff, + 0xff, 0xff, 0xb5, 0xf0, 0x4, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x4a, 0x29, 0xff, 0xff, 0xff, 0xff, + 0x45, 0x70, 0xe4, 0xab, 0xff, 0xff, 0xff, 0xc3, + 0xf4, 0x0, 0x0, 0x0, 0x0, 0x4, 0xc6, 0x5d, + 0xff, 0xff, 0xff, 0x73, 0x21, 0xf3, 0xff, 0xff, + 0xa7, 0xf8, 0x22, 0x0, 0x0, 0x0, 0x0, 0xaa, + 0x71, 0xff, 0xff, 0xff, 0xff, 0xb5, 0xf0, 0x4, + 0x0, 0x0, 0x0, 0x18, 0xb, 0xcf, 0xff, 0xff, + 0xff, 0xcd, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0x63, + 0x74, 0x0, 0x0, 0x0, 0x9e, 0x7b, 0xff, 0xff, + 0xc7, 0xec, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfe, + 0xfb, 0xff, 0x2f, 0x2e, 0x0, 0x0, 0x0, 0x0, + 0xf6, 0xd7, 0xff, 0xff, 0x67, 0x82, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xea, 0xc3, 0xff, 0xff, 0xfb, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x95, 0xf4, 0x10, 0x0, + 0x0, 0x0, 0x76, 0x27, 0xeb, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0x49, 0x54, + 0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcb, + 0xee, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xe4, + 0x73, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xc7, 0x5, 0x34, 0x0, 0x0, 0x0, 0xe4, + 0xad, 0xff, 0xff, 0xff, 0xff, 0xa9, 0xc8, 0x0, + 0x0, 0x5a, 0x25, 0xef, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xe7, 0xf7, 0xff, 0xff, 0x67, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x4a, 0x1d, 0xf9, 0xff, + 0xff, 0xff, 0x65, 0x9a, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xe, 0xfe, 0xdd, 0xff, 0xff, 0xe5, + 0xfe, 0x1e, 0x90, 0x63, 0xff, 0xff, 0xff, 0x8b, + 0xbc, 0x0, 0x0, 0x0, 0x0, 0x60, 0xf, 0xe1, + 0xff, 0xff, 0xdf, 0x5, 0xf0, 0x9d, 0xff, 0xff, + 0xfd, 0x4b, 0xb2, 0x0, 0x0, 0x0, 0x0, 0x40, + 0x13, 0xf5, 0xff, 0xff, 0xff, 0x63, 0x98, 0x0, + 0x0, 0x0, 0x0, 0x2c, 0x39, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x89, + 0xa0, 0x0, 0x0, 0x0, 0x92, 0x7b, 0xff, 0xff, + 0xc7, 0xee, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfe, + 0xfb, 0xff, 0x2f, 0x2e, 0x0, 0x0, 0x0, 0x0, + 0xf8, 0xd7, 0xff, 0xff, 0x65, 0x74, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcb, 0x9f, 0xfb, + 0xff, 0xff, 0xf3, 0x8f, 0xfe, 0x5e, 0x0, 0x0, + 0x0, 0x0, 0xc, 0xd0, 0x3d, 0xcd, 0xff, 0xff, + 0xff, 0xdd, 0x87, 0xff, 0xff, 0xff, 0x49, 0x54, + 0x0, 0x0, 0x0, 0xce, 0xc3, 0xff, 0xff, 0xcb, + 0xd6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x40, + 0xfa, 0x5d, 0xd5, 0xff, 0xff, 0xff, 0xff, 0xed, + 0x99, 0x11, 0x96, 0x0, 0x0, 0x0, 0x0, 0x7a, + 0x21, 0xbd, 0xff, 0xff, 0xff, 0xb9, 0xba, 0x0, + 0x0, 0xc, 0xd8, 0x4b, 0xdb, 0xff, 0xff, 0xff, + 0xcf, 0x39, 0xdb, 0xff, 0xff, 0x67, 0x60, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x8, 0xf4, 0xc1, 0xff, + 0xff, 0xf1, 0xd, 0x36, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xd6, 0xa9, 0xff, 0xff, 0xa7, + 0xdc, 0x0, 0x36, 0xf, 0xf5, 0xff, 0xff, 0x49, + 0x68, 0x0, 0x0, 0x0, 0x0, 0x60, 0x95, 0xff, + 0xff, 0xff, 0x77, 0xc8, 0x6c, 0x25, 0xf5, 0xff, + 0xff, 0xd5, 0x7, 0x0, 0x0, 0x0, 0x0, 0x4, + 0xf6, 0xb3, 0xff, 0xff, 0xed, 0x9, 0x32, 0x0, + 0x0, 0x0, 0x0, 0x2a, 0x39, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x89, + 0x8a, 0x0, 0x0, 0x0, 0x78, 0x65, 0xff, 0xff, + 0xd1, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfe, + 0xfb, 0xff, 0x2f, 0x2e, 0x0, 0x0, 0x0, 0x8, + 0xfc, 0xe3, 0xff, 0xff, 0x4d, 0x56, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcb, 0xfe, 0x21, + 0x51, 0x49, 0xf, 0xe8, 0x58, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x18, 0xa4, 0xfc, 0x2d, 0x53, + 0x3f, 0xfe, 0x5f, 0xff, 0xff, 0xff, 0x49, 0x54, + 0x0, 0x0, 0x0, 0x90, 0xfe, 0xfe, 0xfe, 0xfe, + 0x98, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x2e, 0xb6, 0xfe, 0x25, 0x4f, 0x55, 0x39, 0xfe, + 0xe2, 0x64, 0x4, 0x0, 0x0, 0x0, 0x0, 0xa, + 0x8e, 0xfe, 0x25, 0x51, 0x43, 0x5, 0x84, 0x0, + 0x0, 0x0, 0x22, 0xbc, 0xfe, 0x39, 0x55, 0x33, + 0xfe, 0xe4, 0xfe, 0xfe, 0xfe, 0xfe, 0x36, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x8c, 0xfe, 0xfe, + 0xfe, 0xfe, 0xd6, 0x2, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x72, 0xfe, 0xfe, 0xfe, 0xfe, + 0x70, 0x0, 0x4, 0xde, 0xfe, 0xfe, 0xfe, 0xfe, + 0x20, 0x0, 0x0, 0x0, 0x0, 0x5e, 0xfe, 0xfe, + 0xfe, 0xfe, 0xfe, 0x42, 0xc, 0xe0, 0xfe, 0xfe, + 0xfe, 0xfe, 0xa8, 0x0, 0x0, 0x0, 0x0, 0x1a, + 0xfc, 0xbb, 0xff, 0xff, 0xa7, 0xe8, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x16, 0xfe, 0xfe, 0xfe, 0xfe, + 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, + 0x52, 0x0, 0x0, 0x0, 0x46, 0x39, 0xff, 0xff, + 0xf1, 0x9, 0x4e, 0x0, 0x0, 0x0, 0x0, 0xfe, + 0xfb, 0xff, 0x2f, 0x2e, 0x0, 0x0, 0x0, 0x66, + 0x1b, 0xfb, 0xff, 0xfd, 0x1f, 0x2a, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcb, 0xee, 0x2e, + 0x48, 0x44, 0x22, 0x4, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x10, 0x34, 0x48, + 0x3c, 0x84, 0x5f, 0xff, 0xff, 0xff, 0x49, 0x54, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xc, 0x2e, 0x4e, 0x56, 0x3a, 0x16, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xc, 0x30, 0x46, 0x3e, 0x1c, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x16, 0x3a, 0x48, 0x38, + 0x14, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x40, 0xa0, 0xee, + 0x3d, 0xfb, 0xff, 0xff, 0x51, 0x86, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x16, 0xfe, 0xcd, 0xff, + 0xff, 0x83, 0xfc, 0x40, 0x0, 0x0, 0x0, 0xfe, + 0xfb, 0xff, 0x2f, 0x2e, 0x0, 0x0, 0x50, 0xfe, + 0x99, 0xff, 0xff, 0xbb, 0xfa, 0x8, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcb, 0xee, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x76, 0x5f, 0xff, 0xff, 0xff, 0x49, 0x54, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xa8, 0x73, 0xb5, + 0xef, 0xff, 0xff, 0xd5, 0xfe, 0x26, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xaa, 0x4d, 0xf7, + 0xff, 0xff, 0x73, 0x50, 0x0, 0x0, 0x0, 0xfe, + 0xfb, 0xff, 0x2f, 0x22, 0x0, 0x0, 0x68, 0x87, + 0xff, 0xff, 0xef, 0x3b, 0x90, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xe6, 0xc3, 0xff, 0xff, 0xcb, 0xea, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x72, 0x5f, 0xff, 0xff, 0xff, 0x49, 0x50, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xe2, 0xc1, 0xff, + 0xff, 0xff, 0xfb, 0x55, 0xb6, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x24, 0xe8, 0x41, + 0xc7, 0xfd, 0x37, 0x50, 0x0, 0x0, 0x0, 0xee, + 0x47, 0x49, 0xd, 0x12, 0x0, 0x0, 0x68, 0x4f, + 0xfd, 0xbd, 0x35, 0xda, 0x18, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xc6, 0xb1, 0xe9, 0xe9, 0xb7, 0xcc, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x52, 0x57, 0xe9, 0xe9, 0xe9, 0x41, 0x38, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xd8, 0xd7, 0xff, + 0xff, 0xdf, 0x63, 0xf2, 0x28, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1c, 0x9e, + 0xfa, 0x29, 0xf6, 0x16, 0x0, 0x0, 0x0, 0x1e, + 0x3a, 0x3c, 0x22, 0x2, 0x0, 0x0, 0x24, 0xf4, + 0x29, 0xfa, 0x92, 0x14, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x7c, 0xe2, 0xf8, 0xf8, 0xe4, 0x82, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x2a, 0xd0, 0xf4, 0xfc, 0xf4, 0xcc, 0x1c, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xaa, 0x9, 0x2f, + 0x17, 0xfe, 0xc6, 0x32, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xe, 0xe, 0xe, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe, + 0xe, 0xe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10, 0x16, + 0x16, 0x6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, +}; +const uint16_t FontBitmap::glyphWidth[] = { + 8, 9, 10, 16, 16, 20, 18, 6, + 10, 10, 13, 15, 8, 11, 9, 11, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 9, 9, 14, 16, 14, 14, + 23, 17, 17, 17, 18, 16, 16, 18, + 19, 9, 16, 18, 15, 23, 19, 19, + 18, 19, 18, 17, 17, 18, 17, 23, + 17, 17, 16, 9, 12, 9, 13, 13, + 10, 15, 16, 14, 16, 15, 11, 16, + 16, 8, 8, 15, 8, 23, 16, 16, + 16, 16, 11, 14, 10, 16, 14, 20, + 14, 14, 14, 10, 8, 10, 18, +}; +const uint16_t FontBitmap::yoffset[] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 68, 68, 68, 68, 68, 68, + 68, 68, 68, 68, 68, 68, 68, 68, + 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 136, + 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, + 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, +}; diff --git a/cmds/screenrecord/Overlay.cpp b/cmds/screenrecord/Overlay.cpp new file mode 100644 index 0000000..2e98874 --- /dev/null +++ b/cmds/screenrecord/Overlay.cpp @@ -0,0 +1,401 @@ +/* + * Copyright 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define LOG_TAG "ScreenRecord" +//#define LOG_NDEBUG 0 +#include <utils/Log.h> + +#include <gui/BufferQueue.h> +#include <gui/GraphicBufferAlloc.h> +#include <gui/Surface.h> +#include <cutils/properties.h> +#include <utils/misc.h> + +#include <GLES2/gl2.h> +#include <GLES2/gl2ext.h> + +#include <stdlib.h> +#include <assert.h> + +#include "screenrecord.h" +#include "Overlay.h" +#include "TextRenderer.h" + +using namespace android; + +// System properties to look up and display on the info screen. +const char* Overlay::kPropertyNames[] = { + "ro.build.description", + // includes ro.build.id, ro.build.product, ro.build.tags, ro.build.type, + // and ro.build.version.release + "ro.product.manufacturer", + "ro.product.model", + "ro.board.platform", + "ro.revision", + "dalvik.vm.heapgrowthlimit", + "dalvik.vm.heapsize", + "persist.sys.dalvik.vm.lib.1", + //"ro.product.cpu.abi", + //"ro.bootloader", + //"this-never-appears!", +}; + + +status_t Overlay::start(const sp<IGraphicBufferProducer>& outputSurface, + sp<IGraphicBufferProducer>* pBufferProducer) { + ALOGV("Overlay::start"); + mOutputSurface = outputSurface; + + // Grab the current monotonic time and the current wall-clock time so we + // can map one to the other. This allows the overlay counter to advance + // by the exact delay between frames, but if the wall clock gets adjusted + // we won't track it, which means we'll gradually go out of sync with the + // times in logcat. + mStartMonotonicNsecs = systemTime(CLOCK_MONOTONIC); + mStartRealtimeNsecs = systemTime(CLOCK_REALTIME); + + Mutex::Autolock _l(mMutex); + + // Start the thread. Traffic begins immediately. + run("overlay"); + + mState = INIT; + while (mState == INIT) { + mStartCond.wait(mMutex); + } + + if (mThreadResult != NO_ERROR) { + ALOGE("Failed to start overlay thread: err=%d", mThreadResult); + return mThreadResult; + } + assert(mState == RUNNING); + + ALOGV("Overlay::start successful"); + *pBufferProducer = mBufferQueue; + return NO_ERROR; +} + +status_t Overlay::stop() { + ALOGV("Overlay::stop"); + Mutex::Autolock _l(mMutex); + mState = STOPPING; + mEventCond.signal(); + return NO_ERROR; +} + +bool Overlay::threadLoop() { + Mutex::Autolock _l(mMutex); + + mThreadResult = setup_l(); + + if (mThreadResult != NO_ERROR) { + ALOGW("Aborting overlay thread"); + mState = STOPPED; + release_l(); + mStartCond.broadcast(); + return false; + } + + ALOGV("Overlay thread running"); + mState = RUNNING; + mStartCond.broadcast(); + + while (mState == RUNNING) { + mEventCond.wait(mMutex); + if (mFrameAvailable) { + ALOGV("Awake, frame available"); + processFrame_l(); + mFrameAvailable = false; + } else { + ALOGV("Awake, frame not available"); + } + } + + ALOGV("Overlay thread stopping"); + release_l(); + mState = STOPPED; + return false; // stop +} + +status_t Overlay::setup_l() { + status_t err; + + err = mEglWindow.createWindow(mOutputSurface); + if (err != NO_ERROR) { + return err; + } + mEglWindow.makeCurrent(); + + int width = mEglWindow.getWidth(); + int height = mEglWindow.getHeight(); + + glViewport(0, 0, width, height); + glDisable(GL_DEPTH_TEST); + glDisable(GL_CULL_FACE); + + // Shaders for rendering from different types of textures. + err = mTexProgram.setup(Program::PROGRAM_TEXTURE_2D); + if (err != NO_ERROR) { + return err; + } + err = mExtTexProgram.setup(Program::PROGRAM_EXTERNAL_TEXTURE); + if (err != NO_ERROR) { + return err; + } + + err = mTextRenderer.loadIntoTexture(); + if (err != NO_ERROR) { + return err; + } + mTextRenderer.setScreenSize(width, height); + + // Input side (buffers from virtual display). + glGenTextures(1, &mExtTextureName); + if (mExtTextureName == 0) { + ALOGE("glGenTextures failed: %#x", glGetError()); + return UNKNOWN_ERROR; + } + + mBufferQueue = new BufferQueue(/*new GraphicBufferAlloc()*/); + mGlConsumer = new GLConsumer(mBufferQueue, mExtTextureName, + GL_TEXTURE_EXTERNAL_OES); + mGlConsumer->setName(String8("virtual display")); + mGlConsumer->setDefaultBufferSize(width, height); + mGlConsumer->setDefaultMaxBufferCount(5); + mGlConsumer->setConsumerUsageBits(GRALLOC_USAGE_HW_TEXTURE); + + mGlConsumer->setFrameAvailableListener(this); + + return NO_ERROR; +} + + +void Overlay::release_l() { + ALOGV("Overlay::release_l"); + mOutputSurface.clear(); + mGlConsumer.clear(); + mBufferQueue.clear(); + + mTexProgram.release(); + mExtTexProgram.release(); + mEglWindow.release(); +} + +void Overlay::processFrame_l() { + float texMatrix[16]; + + mGlConsumer->updateTexImage(); + mGlConsumer->getTransformMatrix(texMatrix); + nsecs_t monotonicNsec = mGlConsumer->getTimestamp(); + nsecs_t frameNumber = mGlConsumer->getFrameNumber(); + int64_t droppedFrames = 0; + + if (mLastFrameNumber > 0) { + mTotalDroppedFrames += size_t(frameNumber - mLastFrameNumber) - 1; + } + mLastFrameNumber = frameNumber; + + mTextRenderer.setProportionalScale(35); + + if (false) { // DEBUG - full blue background + glClearColor(0.0f, 0.0f, 1.0f, 1.0f); + glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); + } + + int width = mEglWindow.getWidth(); + int height = mEglWindow.getHeight(); + if (false) { // DEBUG - draw inset + mExtTexProgram.blit(mExtTextureName, texMatrix, + 100, 100, width-200, height-200); + } else { + mExtTexProgram.blit(mExtTextureName, texMatrix, + 0, 0, width, height); + } + + glEnable(GL_BLEND); + glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); + if (false) { // DEBUG - show entire font bitmap + mTexProgram.blit(mTextRenderer.getTextureName(), Program::kIdentity, + 100, 100, width-200, height-200); + } + + char textBuf[64]; + getTimeString_l(monotonicNsec, textBuf, sizeof(textBuf)); + String8 timeStr(String8::format("%s f=%lld (%zd)", + textBuf, frameNumber, mTotalDroppedFrames)); + mTextRenderer.drawString(mTexProgram, Program::kIdentity, 0, 0, timeStr); + + glDisable(GL_BLEND); + + if (false) { // DEBUG - add red rectangle in lower-left corner + glEnable(GL_SCISSOR_TEST); + glScissor(0, 0, 200, 200); + glClearColor(1.0f, 0.0f, 0.0f, 1.0f); + glClear(GL_COLOR_BUFFER_BIT); + glDisable(GL_SCISSOR_TEST); + } + + mEglWindow.presentationTime(monotonicNsec); + mEglWindow.swapBuffers(); +} + +void Overlay::getTimeString_l(nsecs_t monotonicNsec, char* buf, size_t bufLen) { + //const char* format = "%m-%d %T"; // matches log output + const char* format = "%T"; + struct tm tm; + + // localtime/strftime is not the fastest way to do this, but a trivial + // benchmark suggests that the cost is negligible. + int64_t realTime = mStartRealtimeNsecs + + (monotonicNsec - mStartMonotonicNsecs); + time_t secs = (time_t) (realTime / 1000000000); + localtime_r(&secs, &tm); + strftime(buf, bufLen, format, &tm); + + int32_t msec = (int32_t) ((realTime % 1000000000) / 1000000); + char tmpBuf[5]; + snprintf(tmpBuf, sizeof(tmpBuf), ".%03d", msec); + strlcat(buf, tmpBuf, bufLen); +} + +// Callback; executes on arbitrary thread. +void Overlay::onFrameAvailable() { + ALOGV("Overlay::onFrameAvailable"); + Mutex::Autolock _l(mMutex); + mFrameAvailable = true; + mEventCond.signal(); +} + + +/*static*/ status_t Overlay::drawInfoPage( + const sp<IGraphicBufferProducer>& outputSurface) { + status_t err; + + EglWindow window; + err = window.createWindow(outputSurface); + if (err != NO_ERROR) { + return err; + } + window.makeCurrent(); + + int width = window.getWidth(); + int height = window.getHeight(); + glViewport(0, 0, width, height); + glDisable(GL_DEPTH_TEST); + glDisable(GL_CULL_FACE); + + // Shaders for rendering. + Program texProgram; + err = texProgram.setup(Program::PROGRAM_TEXTURE_2D); + if (err != NO_ERROR) { + return err; + } + TextRenderer textRenderer; + err = textRenderer.loadIntoTexture(); + if (err != NO_ERROR) { + return err; + } + textRenderer.setScreenSize(width, height); + + doDrawInfoPage(window, texProgram, textRenderer); + + // Destroy the surface. This causes a disconnect. + texProgram.release(); + window.release(); + + return NO_ERROR; +} + +/*static*/ void Overlay::doDrawInfoPage(const EglWindow& window, + const Program& texProgram, TextRenderer& textRenderer) { + const nsecs_t holdTime = 250000000LL; + + glClearColor(0.0f, 0.0f, 0.0f, 1.0f); + glClear(GL_COLOR_BUFFER_BIT); + + int width = window.getWidth(); + int height = window.getHeight(); + + // Draw a thin border around the screen. Some players, e.g. browser + // plugins, make it hard to see where the edges are when the device + // is using a black background, so this gives the viewer a frame of + // reference. + // + // This is a clumsy way to do it, but we're only doing it for one frame, + // and it's easier than actually drawing lines. + const int lineWidth = 4; + glEnable(GL_SCISSOR_TEST); + glClearColor(0.5f, 0.5f, 0.5f, 1.0f); + glScissor(0, 0, width, lineWidth); + glClear(GL_COLOR_BUFFER_BIT); + glScissor(0, height - lineWidth, width, lineWidth); + glClear(GL_COLOR_BUFFER_BIT); + glScissor(0, 0, lineWidth, height); + glClear(GL_COLOR_BUFFER_BIT); + glScissor(width - lineWidth, 0, lineWidth, height); + glClear(GL_COLOR_BUFFER_BIT); + glDisable(GL_SCISSOR_TEST); + + //glEnable(GL_BLEND); + //glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); + textRenderer.setProportionalScale(30); + + float xpos = 0; + float ypos = 0; + ypos = textRenderer.drawWrappedString(texProgram, xpos, ypos, + String8::format("Android screenrecord v%d.%d", + kVersionMajor, kVersionMinor)); + + // Show date/time + time_t now = time(0); + struct tm tm; + localtime_r(&now, &tm); + char timeBuf[64]; + strftime(timeBuf, sizeof(timeBuf), "%a, %d %b %Y %T %z", &tm); + String8 header("Started "); + header += timeBuf; + ypos = textRenderer.drawWrappedString(texProgram, xpos, ypos, header); + ypos += 8 * textRenderer.getScale(); // slight padding + + // Show selected system property values + for (int i = 0; i < NELEM(kPropertyNames); i++) { + char valueBuf[PROPERTY_VALUE_MAX]; + + property_get(kPropertyNames[i], valueBuf, ""); + if (valueBuf[0] == '\0') { + continue; + } + String8 str(String8::format("%s: [%s]", kPropertyNames[i], valueBuf)); + ypos = textRenderer.drawWrappedString(texProgram, xpos, ypos, str); + } + ypos += 8 * textRenderer.getScale(); // slight padding + + // Show GL info + String8 glStr("OpenGL: "); + glStr += (char*) glGetString(GL_VENDOR); + glStr += " / "; + glStr += (char*) glGetString(GL_RENDERER); + glStr += ", "; + glStr += (char*) glGetString(GL_VERSION); + ypos = textRenderer.drawWrappedString(texProgram, xpos, ypos, glStr); + + //glDisable(GL_BLEND); + + // Set a presentation time slightly in the past. This will cause the + // player to hold the frame on screen. + window.presentationTime(systemTime(CLOCK_MONOTONIC) - holdTime); + window.swapBuffers(); +} diff --git a/cmds/screenrecord/Overlay.h b/cmds/screenrecord/Overlay.h new file mode 100644 index 0000000..b8473b4 --- /dev/null +++ b/cmds/screenrecord/Overlay.h @@ -0,0 +1,157 @@ +/* + * Copyright 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef SCREENRECORD_OVERLAY_H +#define SCREENRECORD_OVERLAY_H + +#include "Program.h" +#include "TextRenderer.h" +#include "EglWindow.h" + +#include <gui/BufferQueue.h> +#include <gui/GLConsumer.h> +#include <utils/Thread.h> + +#include <EGL/egl.h> + +namespace android { + +/* + * Overlay "filter". This sits between the virtual display and the video + * encoder. + * + * Most functions run on a thread created by start(). + */ +class Overlay : public GLConsumer::FrameAvailableListener, Thread { +public: + Overlay() : Thread(false), + mThreadResult(UNKNOWN_ERROR), + mState(UNINITIALIZED), + mFrameAvailable(false), + mExtTextureName(0), + mStartMonotonicNsecs(0), + mStartRealtimeNsecs(0), + mLastFrameNumber(-1), + mTotalDroppedFrames(0) + {} + virtual ~Overlay() { assert(mState == UNINITIALIZED || mState == STOPPED); } + + // Creates a thread that performs the overlay. Pass in the surface that + // output will be sent to. + // + // This creates a dedicated thread for processing frames. + // + // Returns a reference to the producer side of a new BufferQueue that will + // be used by the virtual display. + status_t start(const sp<IGraphicBufferProducer>& outputSurface, + sp<IGraphicBufferProducer>* pBufferProducer); + + // Stops the thread and releases resources. It's okay to call this even + // if start() was never called. + status_t stop(); + + // This creates an EGL context and window surface, draws some informative + // text on it, swaps the buffer, and then tears the whole thing down. + static status_t drawInfoPage(const sp<IGraphicBufferProducer>& outputSurface); + +private: + Overlay(const Overlay&); + Overlay& operator=(const Overlay&); + + // Draw the initial info screen. + static void doDrawInfoPage(const EglWindow& window, + const Program& texRender, TextRenderer& textRenderer); + + // (overrides GLConsumer::FrameAvailableListener method) + virtual void onFrameAvailable(); + + // (overrides Thread method) + virtual bool threadLoop(); + + // One-time setup (essentially object construction on the overlay thread). + status_t setup_l(); + + // Release all resources held. + void release_l(); + + // Release EGL display, context, surface. + void eglRelease_l(); + + // Process a frame received from the virtual display. + void processFrame_l(); + + // Convert a monotonic time stamp into a string with the current time. + void getTimeString_l(nsecs_t monotonicNsec, char* buf, size_t bufLen); + + // Guards all fields below. + Mutex mMutex; + + // Initialization gate. + Condition mStartCond; + + // Thread status, mostly useful during startup. + status_t mThreadResult; + + // Overlay thread state. States advance from left to right; object may + // not be restarted. + enum { UNINITIALIZED, INIT, RUNNING, STOPPING, STOPPED } mState; + + // Event notification. Overlay thread sleeps on this until a frame + // arrives or it's time to shut down. + Condition mEventCond; + + // Set by the FrameAvailableListener callback. + bool mFrameAvailable; + + // The surface we send our output to, i.e. the video encoder's input + // surface. + sp<IGraphicBufferProducer> mOutputSurface; + + // Our queue. The producer side is passed to the virtual display, the + // consumer side feeds into our GLConsumer. + sp<BufferQueue> mBufferQueue; + + // This receives frames from the virtual display and makes them available + // as an external texture. + sp<GLConsumer> mGlConsumer; + + // EGL display / context / surface. + EglWindow mEglWindow; + + // GL rendering support. + Program mExtTexProgram; + Program mTexProgram; + + // Text rendering. + TextRenderer mTextRenderer; + + // External texture, updated by GLConsumer. + GLuint mExtTextureName; + + // Start time, used to map monotonic to wall-clock time. + nsecs_t mStartMonotonicNsecs; + nsecs_t mStartRealtimeNsecs; + + // Used for tracking dropped frames. + nsecs_t mLastFrameNumber; + size_t mTotalDroppedFrames; + + static const char* kPropertyNames[]; +}; + +}; // namespace android + +#endif /*SCREENRECORD_OVERLAY_H*/ diff --git a/cmds/screenrecord/Program.cpp b/cmds/screenrecord/Program.cpp new file mode 100644 index 0000000..a198204 --- /dev/null +++ b/cmds/screenrecord/Program.cpp @@ -0,0 +1,303 @@ +/* + * Copyright 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define LOG_TAG "ScreenRecord" +//#define LOG_NDEBUG 0 +#include <utils/Log.h> + +#include "Program.h" + +#include <GLES2/gl2.h> +#include <GLES2/gl2ext.h> + +#include <assert.h> + +using namespace android; + +// 4x4 identity matrix +const float Program::kIdentity[] = { + 1.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 1.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 1.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 1.0f +}; + +// Simple vertex shader. Texture coord calc includes matrix for GLConsumer +// transform. +static const char* kVertexShader = + "uniform mat4 uMVPMatrix;\n" + "uniform mat4 uGLCMatrix;\n" + "attribute vec4 aPosition;\n" + "attribute vec4 aTextureCoord;\n" + "varying vec2 vTextureCoord;\n" + "void main() {\n" + " gl_Position = uMVPMatrix * aPosition;\n" + " vTextureCoord = (uGLCMatrix * aTextureCoord).xy;\n" + "}\n"; + +// Trivial fragment shader for external texture. +static const char* kExtFragmentShader = + "#extension GL_OES_EGL_image_external : require\n" + "precision mediump float;\n" + "varying vec2 vTextureCoord;\n" + "uniform samplerExternalOES uTexture;\n" + "void main() {\n" + " gl_FragColor = texture2D(uTexture, vTextureCoord);\n" + "}\n"; + +// Trivial fragment shader for mundane texture. +static const char* kFragmentShader = + "precision mediump float;\n" + "varying vec2 vTextureCoord;\n" + "uniform sampler2D uTexture;\n" + "void main() {\n" + " gl_FragColor = texture2D(uTexture, vTextureCoord);\n" + //" gl_FragColor = vec4(0.2, 1.0, 0.2, 1.0);\n" + "}\n"; + +status_t Program::setup(ProgramType type) { + ALOGV("Program::setup type=%d", type); + status_t err; + + mProgramType = type; + + GLuint program; + if (type == PROGRAM_TEXTURE_2D) { + err = createProgram(&program, kVertexShader, kFragmentShader); + } else { + err = createProgram(&program, kVertexShader, kExtFragmentShader); + } + if (err != NO_ERROR) { + return err; + } + assert(program != 0); + + maPositionLoc = glGetAttribLocation(program, "aPosition"); + maTextureCoordLoc = glGetAttribLocation(program, "aTextureCoord"); + muMVPMatrixLoc = glGetUniformLocation(program, "uMVPMatrix"); + muGLCMatrixLoc = glGetUniformLocation(program, "uGLCMatrix"); + muTextureLoc = glGetUniformLocation(program, "uTexture"); + if ((maPositionLoc | maTextureCoordLoc | muMVPMatrixLoc | + muGLCMatrixLoc | muTextureLoc) == -1) { + ALOGE("Attrib/uniform lookup failed: %#x", glGetError()); + glDeleteProgram(program); + return UNKNOWN_ERROR; + } + + mProgram = program; + return NO_ERROR; +} + +void Program::release() { + ALOGV("Program::release"); + if (mProgram != 0) { + glDeleteProgram(mProgram); + mProgram = 0; + } +} + +status_t Program::createProgram(GLuint* outPgm, const char* vertexShader, + const char* fragmentShader) { + GLuint vs, fs; + status_t err; + + err = compileShader(GL_VERTEX_SHADER, vertexShader, &vs); + if (err != NO_ERROR) { + return err; + } + err = compileShader(GL_FRAGMENT_SHADER, fragmentShader, &fs); + if (err != NO_ERROR) { + glDeleteShader(vs); + return err; + } + + GLuint program; + err = linkShaderProgram(vs, fs, &program); + glDeleteShader(vs); + glDeleteShader(fs); + if (err == NO_ERROR) { + *outPgm = program; + } + return err; +} + +status_t Program::compileShader(GLenum shaderType, const char* src, + GLuint* outShader) { + GLuint shader = glCreateShader(shaderType); + if (shader == 0) { + ALOGE("glCreateShader error: %#x", glGetError()); + return UNKNOWN_ERROR; + } + + glShaderSource(shader, 1, &src, NULL); + glCompileShader(shader); + + GLint compiled = 0; + glGetShaderiv(shader, GL_COMPILE_STATUS, &compiled); + if (!compiled) { + ALOGE("Compile of shader type %d failed", shaderType); + GLint infoLen = 0; + glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &infoLen); + if (infoLen) { + char* buf = new char[infoLen]; + if (buf) { + glGetShaderInfoLog(shader, infoLen, NULL, buf); + ALOGE("Compile log: %s", buf); + delete[] buf; + } + } + glDeleteShader(shader); + return UNKNOWN_ERROR; + } + *outShader = shader; + return NO_ERROR; +} + +status_t Program::linkShaderProgram(GLuint vs, GLuint fs, GLuint* outPgm) { + GLuint program = glCreateProgram(); + if (program == 0) { + ALOGE("glCreateProgram error: %#x", glGetError()); + return UNKNOWN_ERROR; + } + + glAttachShader(program, vs); + glAttachShader(program, fs); + glLinkProgram(program); + GLint linkStatus = GL_FALSE; + glGetProgramiv(program, GL_LINK_STATUS, &linkStatus); + if (linkStatus != GL_TRUE) { + ALOGE("glLinkProgram failed"); + GLint bufLength = 0; + glGetProgramiv(program, GL_INFO_LOG_LENGTH, &bufLength); + if (bufLength) { + char* buf = new char[bufLength]; + if (buf) { + glGetProgramInfoLog(program, bufLength, NULL, buf); + ALOGE("Link log: %s", buf); + delete[] buf; + } + } + glDeleteProgram(program); + return UNKNOWN_ERROR; + } + + *outPgm = program; + return NO_ERROR; +} + + + +status_t Program::blit(GLuint texName, const float* texMatrix, + int32_t x, int32_t y, int32_t w, int32_t h) const { + ALOGV("Program::blit %d xy=%d,%d wh=%d,%d", texName, x, y, w, h); + + const float pos[] = { + float(x), float(y+h), + float(x+w), float(y+h), + float(x), float(y), + float(x+w), float(y), + }; + const float uv[] = { + 0.0f, 0.0f, + 1.0f, 0.0f, + 0.0f, 1.0f, + 1.0f, 1.0f, + }; + status_t err; + + err = beforeDraw(texName, texMatrix, pos, uv); + if (err == NO_ERROR) { + glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); + err = afterDraw(); + } + return err; +} + +status_t Program::drawTriangles(GLuint texName, const float* texMatrix, + const float* vertices, const float* texes, size_t count) const { + ALOGV("Program::drawTriangles texName=%d", texName); + + status_t err; + + err = beforeDraw(texName, texMatrix, vertices, texes); + if (err == NO_ERROR) { + glDrawArrays(GL_TRIANGLES, 0, count); + err = afterDraw(); + } + return err; +} + +status_t Program::beforeDraw(GLuint texName, const float* texMatrix, + const float* vertices, const float* texes) const { + // Create an orthographic projection matrix based on viewport size. + GLint vp[4]; + glGetIntegerv(GL_VIEWPORT, vp); + float screenToNdc[16] = { + 2.0f/float(vp[2]), 0.0f, 0.0f, 0.0f, + 0.0f, -2.0f/float(vp[3]), 0.0f, 0.0f, + 0.0f, 0.0f, 1.0f, 0.0f, + -1.0f, 1.0f, 0.0f, 1.0f, + }; + + glUseProgram(mProgram); + + glVertexAttribPointer(maPositionLoc, 2, GL_FLOAT, GL_FALSE, 0, vertices); + glVertexAttribPointer(maTextureCoordLoc, 2, GL_FLOAT, GL_FALSE, 0, texes); + glEnableVertexAttribArray(maPositionLoc); + glEnableVertexAttribArray(maTextureCoordLoc); + + glUniformMatrix4fv(muMVPMatrixLoc, 1, GL_FALSE, screenToNdc); + glUniformMatrix4fv(muGLCMatrixLoc, 1, GL_FALSE, texMatrix); + + glActiveTexture(GL_TEXTURE0); + + switch (mProgramType) { + case PROGRAM_EXTERNAL_TEXTURE: + glBindTexture(GL_TEXTURE_EXTERNAL_OES, texName); + break; + case PROGRAM_TEXTURE_2D: + glBindTexture(GL_TEXTURE_2D, texName); + break; + default: + ALOGE("unexpected program type %d", mProgramType); + return UNKNOWN_ERROR; + } + + glUniform1i(muTextureLoc, 0); + + GLenum glErr; + if ((glErr = glGetError()) != GL_NO_ERROR) { + ALOGE("GL error before draw: %#x", glErr); + glDisableVertexAttribArray(maPositionLoc); + glDisableVertexAttribArray(maTextureCoordLoc); + return UNKNOWN_ERROR; + } + + return NO_ERROR; +} + +status_t Program::afterDraw() const { + glDisableVertexAttribArray(maPositionLoc); + glDisableVertexAttribArray(maTextureCoordLoc); + + GLenum glErr; + if ((glErr = glGetError()) != GL_NO_ERROR) { + ALOGE("GL error after draw: %#x", glErr); + return UNKNOWN_ERROR; + } + + return NO_ERROR; +} diff --git a/cmds/screenrecord/Program.h b/cmds/screenrecord/Program.h new file mode 100644 index 0000000..e47bc0d --- /dev/null +++ b/cmds/screenrecord/Program.h @@ -0,0 +1,92 @@ +/* + * Copyright 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef SCREENRECORD_PROGRAM_H +#define SCREENRECORD_PROGRAM_H + +#include <utils/Errors.h> + +#include <EGL/egl.h> +#include <GLES2/gl2.h> + +namespace android { + +/* + * Utility class for GLES rendering. + * + * Not thread-safe. + */ +class Program { +public: + enum ProgramType { PROGRAM_UNKNOWN=0, PROGRAM_EXTERNAL_TEXTURE, + PROGRAM_TEXTURE_2D }; + + Program() : + mProgramType(PROGRAM_UNKNOWN), + mProgram(0), + maPositionLoc(0), + maTextureCoordLoc(0), + muMVPMatrixLoc(0), + muGLCMatrixLoc(0), + muTextureLoc(0) + {} + ~Program() { release(); } + + // Initialize the program for use with the specified texture type. + status_t setup(ProgramType type); + + // Release the program and associated resources. + void release(); + + // Blit the specified texture to { x, y, x+w, y+h }. + status_t blit(GLuint texName, const float* texMatrix, + int32_t x, int32_t y, int32_t w, int32_t h) const; + + // Draw a number of triangles. + status_t drawTriangles(GLuint texName, const float* texMatrix, + const float* vertices, const float* texes, size_t count) const; + + static const float kIdentity[]; + +private: + Program(const Program&); + Program& operator=(const Program&); + + // Common code for draw functions. + status_t beforeDraw(GLuint texName, const float* texMatrix, + const float* vertices, const float* texes) const; + status_t afterDraw() const; + + // GLES 2 shader utilities. + status_t createProgram(GLuint* outPgm, const char* vertexShader, + const char* fragmentShader); + static status_t compileShader(GLenum shaderType, const char* src, + GLuint* outShader); + static status_t linkShaderProgram(GLuint vs, GLuint fs, GLuint* outPgm); + + ProgramType mProgramType; + GLuint mProgram; + + GLint maPositionLoc; + GLint maTextureCoordLoc; + GLint muMVPMatrixLoc; + GLint muGLCMatrixLoc; + GLint muTextureLoc; +}; + +}; // namespace android + +#endif /*SCREENRECORD_PROGRAM_H*/ diff --git a/cmds/screenrecord/TextRenderer.cpp b/cmds/screenrecord/TextRenderer.cpp new file mode 100644 index 0000000..784055c --- /dev/null +++ b/cmds/screenrecord/TextRenderer.cpp @@ -0,0 +1,358 @@ +/* + * Copyright 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define LOG_TAG "ScreenRecord" +//#define LOG_NDEBUG 0 +#include <utils/Log.h> + +#include "TextRenderer.h" + +#include <assert.h> + +namespace android { +#include "FontBitmap.h" +}; + +using namespace android; + +const char TextRenderer::kWhitespace[] = " \t\n\r"; + +bool TextRenderer::mInitialized = false; +uint32_t TextRenderer::mXOffset[FontBitmap::numGlyphs]; + +void TextRenderer::initOnce() { + if (!mInitialized) { + initXOffset(); + mInitialized = true; + } +} + +void TextRenderer::initXOffset() { + // Generate a table of X offsets. They start at zero and reset whenever + // we move down a line (i.e. the Y offset changes). The offset increases + // by one pixel more than the width because the generator left a gap to + // avoid reading pixels from adjacent glyphs in the texture filter. + uint16_t offset = 0; + uint16_t prevYOffset = (int16_t) -1; + for (unsigned int i = 0; i < FontBitmap::numGlyphs; i++) { + if (prevYOffset != FontBitmap::yoffset[i]) { + prevYOffset = FontBitmap::yoffset[i]; + offset = 0; + } + mXOffset[i] = offset; + offset += FontBitmap::glyphWidth[i] + 1; + } +} + +static bool isPowerOfTwo(uint32_t val) { + // a/k/a "is exactly one bit set"; note returns true for 0 + return (val & (val -1)) == 0; +} + +static uint32_t powerOfTwoCeil(uint32_t val) { + // drop it, smear the bits across, pop it + val--; + val |= val >> 1; + val |= val >> 2; + val |= val >> 4; + val |= val >> 8; + val |= val >> 16; + val++; + + return val; +} + +float TextRenderer::getGlyphHeight() const { + return FontBitmap::maxGlyphHeight; +} + +status_t TextRenderer::loadIntoTexture() { + ALOGV("Font::loadIntoTexture"); + + glGenTextures(1, &mTextureName); + if (mTextureName == 0) { + ALOGE("glGenTextures failed: %#x", glGetError()); + return UNKNOWN_ERROR; + } + glBindTexture(GL_TEXTURE_2D, mTextureName); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + + // The pixel data is stored as combined color+alpha, 8 bits per pixel. + // It's guaranteed to be a power-of-two wide, but we cut off the height + // where the data ends. We want to expand it to a power-of-two bitmap + // with ARGB data and hand that to glTexImage2D. + + if (!isPowerOfTwo(FontBitmap::width)) { + ALOGE("npot glyph bitmap width %u", FontBitmap::width); + return UNKNOWN_ERROR; + } + + uint32_t potHeight = powerOfTwoCeil(FontBitmap::height); + uint8_t* rgbaPixels = new uint8_t[FontBitmap::width * potHeight * 4]; + memset(rgbaPixels, 0, FontBitmap::width * potHeight * 4); + uint8_t* pix = rgbaPixels; + + for (unsigned int i = 0; i < FontBitmap::width * FontBitmap::height; i++) { + uint8_t alpha, color; + if ((FontBitmap::pixels[i] & 1) == 0) { + // black pixel with varying alpha + color = 0x00; + alpha = FontBitmap::pixels[i] & ~1; + } else { + // opaque grey pixel + color = FontBitmap::pixels[i] & ~1; + alpha = 0xff; + } + *pix++ = color; + *pix++ = color; + *pix++ = color; + *pix++ = alpha; + } + + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, FontBitmap::width, potHeight, 0, + GL_RGBA, GL_UNSIGNED_BYTE, rgbaPixels); + delete[] rgbaPixels; + GLint glErr = glGetError(); + if (glErr != 0) { + ALOGE("glTexImage2D failed: %#x", glErr); + return UNKNOWN_ERROR; + } + return NO_ERROR; +} + +void TextRenderer::setProportionalScale(float linesPerScreen) { + if (mScreenWidth == 0 || mScreenHeight == 0) { + ALOGW("setFontScale: can't set scale for width=%d height=%d", + mScreenWidth, mScreenHeight); + return; + } + float tallest = mScreenWidth > mScreenHeight ? mScreenWidth : mScreenHeight; + setScale(tallest / (linesPerScreen * getGlyphHeight())); +} + +float TextRenderer::computeScaledStringWidth(const String8& str8) const { + // String8.length() isn't documented, but I'm assuming it will return + // the number of characters rather than the number of bytes. Since + // we can only display ASCII we want to ignore anything else, so we + // just convert to char* -- but String8 doesn't document what it does + // with values outside 0-255. So just convert to char* and use strlen() + // to see what we get. + const char* str = str8.string(); + return computeScaledStringWidth(str, strlen(str)); +} + +size_t TextRenderer::glyphIndex(char ch) const { + size_t chi = ch - FontBitmap::firstGlyphChar; + if (chi >= FontBitmap::numGlyphs) { + chi = '?' - FontBitmap::firstGlyphChar; + } + assert(chi < FontBitmap::numGlyphs); + return chi; +} + +float TextRenderer::computeScaledStringWidth(const char* str, + size_t len) const { + float width = 0.0f; + for (size_t i = 0; i < len; i++) { + size_t chi = glyphIndex(str[i]); + float glyphWidth = FontBitmap::glyphWidth[chi]; + width += (glyphWidth - 1 - FontBitmap::outlineWidth) * mScale; + } + + return width; +} + +void TextRenderer::drawString(const Program& program, const float* texMatrix, + float x, float y, const String8& str8) const { + ALOGV("drawString %.3f,%.3f '%s' (scale=%.3f)", x, y, str8.string(),mScale); + initOnce(); + + // We want to draw the entire string with a single GLES call. We + // generate two arrays, one with screen coordinates, one with texture + // coordinates. Need two triangles per character. + const char* str = str8.string(); + size_t len = strlen(str); // again, unsure about String8 handling + + const size_t quadCoords = + 2 /*triangles*/ * 3 /*vertex/tri*/ * 2 /*coord/vertex*/; + float vertices[len * quadCoords]; + float texes[len * quadCoords]; + + float fullTexWidth = FontBitmap::width; + float fullTexHeight = powerOfTwoCeil(FontBitmap::height); + for (size_t i = 0; i < len; i++) { + size_t chi = glyphIndex(str[i]); + float glyphWidth = FontBitmap::glyphWidth[chi]; + float glyphHeight = FontBitmap::maxGlyphHeight; + + float vertLeft = x; + float vertRight = x + glyphWidth * mScale; + float vertTop = y; + float vertBottom = y + glyphHeight * mScale; + + // Lowest-numbered glyph is in top-left of bitmap, which puts it at + // the bottom-left in texture coordinates. + float texLeft = mXOffset[chi] / fullTexWidth; + float texRight = (mXOffset[chi] + glyphWidth) / fullTexWidth; + float texTop = FontBitmap::yoffset[chi] / fullTexHeight; + float texBottom = (FontBitmap::yoffset[chi] + glyphHeight) / + fullTexHeight; + + size_t off = i * quadCoords; + vertices[off + 0] = vertLeft; + vertices[off + 1] = vertBottom; + vertices[off + 2] = vertRight; + vertices[off + 3] = vertBottom; + vertices[off + 4] = vertLeft; + vertices[off + 5] = vertTop; + vertices[off + 6] = vertLeft; + vertices[off + 7] = vertTop; + vertices[off + 8] = vertRight; + vertices[off + 9] = vertBottom; + vertices[off + 10] = vertRight; + vertices[off + 11] = vertTop; + texes[off + 0] = texLeft; + texes[off + 1] = texBottom; + texes[off + 2] = texRight; + texes[off + 3] = texBottom; + texes[off + 4] = texLeft; + texes[off + 5] = texTop; + texes[off + 6] = texLeft; + texes[off + 7] = texTop; + texes[off + 8] = texRight; + texes[off + 9] = texBottom; + texes[off + 10] = texRight; + texes[off + 11] = texTop; + + // We added 1-pixel padding in the texture, so we want to advance by + // one less. Also, each glyph is surrounded by a black outline, which + // we want to merge. + x += (glyphWidth - 1 - FontBitmap::outlineWidth) * mScale; + } + + program.drawTriangles(mTextureName, texMatrix, vertices, texes, + len * quadCoords / 2); +} + +float TextRenderer::drawWrappedString(const Program& texRender, + float xpos, float ypos, const String8& str) { + ALOGV("drawWrappedString %.3f,%.3f '%s'", xpos, ypos, str.string()); + initOnce(); + + if (mScreenWidth == 0 || mScreenHeight == 0) { + ALOGW("drawWrappedString: can't wrap with width=%d height=%d", + mScreenWidth, mScreenHeight); + return ypos; + } + + const float indentWidth = mIndentMult * getScale(); + if (xpos < mBorderWidth) { + xpos = mBorderWidth; + } + if (ypos < mBorderWidth) { + ypos = mBorderWidth; + } + + const size_t maxWidth = (mScreenWidth - mBorderWidth) - xpos; + if (maxWidth < 1) { + ALOGE("Unable to render text: xpos=%.3f border=%.3f width=%u", + xpos, mBorderWidth, mScreenWidth); + return ypos; + } + float stringWidth = computeScaledStringWidth(str); + if (stringWidth <= maxWidth) { + // Trivial case. + drawString(texRender, Program::kIdentity, xpos, ypos, str); + ypos += getScaledGlyphHeight(); + } else { + // We need to break the string into pieces, ideally at whitespace + // boundaries. + char* mangle = strdup(str.string()); + char* start = mangle; + while (start != NULL) { + float xposAdj = (start == mangle) ? xpos : xpos + indentWidth; + char* brk = breakString(start, + (float) (mScreenWidth - mBorderWidth - xposAdj)); + if (brk == NULL) { + // draw full string + drawString(texRender, Program::kIdentity, xposAdj, ypos, + String8(start)); + start = NULL; + } else { + // draw partial string + char ch = *brk; + *brk = '\0'; + drawString(texRender, Program::kIdentity, xposAdj, ypos, + String8(start)); + *brk = ch; + start = brk; + if (strchr(kWhitespace, ch) != NULL) { + // if we broke on whitespace, skip past it + start++; + } + } + ypos += getScaledGlyphHeight(); + } + free(mangle); + } + + return ypos; +} + +char* TextRenderer::breakString(const char* str, float maxWidth) const { + // Ideally we'd do clever things like binary search. Not bothering. + ALOGV("breakString '%s' %.3f", str, maxWidth); + + size_t len = strlen(str); + if (len == 0) { + // Caller should detect this and not advance ypos. + return NULL; + } + + float stringWidth = computeScaledStringWidth(str, len); + if (stringWidth <= maxWidth) { + return NULL; // trivial -- use full string + } + + // Find the longest string that will fit. + size_t goodPos = 0; + for (size_t i = 0; i < len; i++) { + stringWidth = computeScaledStringWidth(str, i); + if (stringWidth < maxWidth) { + goodPos = i; + } else { + break; // too big + } + } + if (goodPos == 0) { + // space is too small to hold any glyph; output a single char + ALOGW("Couldn't find a nonzero prefix that fit from '%s'", str); + goodPos = 1; + } + + // Scan back for whitespace. If we can't find any we'll just have + // an ugly mid-word break. + for (size_t i = goodPos; i > 0; i--) { + if (strchr(kWhitespace, str[i]) != NULL) { + goodPos = i; + break; + } + } + + ALOGV("goodPos=%d for str='%s'", goodPos, str); + return const_cast<char*>(str + goodPos); +} diff --git a/cmds/screenrecord/TextRenderer.h b/cmds/screenrecord/TextRenderer.h new file mode 100644 index 0000000..03dd2fb --- /dev/null +++ b/cmds/screenrecord/TextRenderer.h @@ -0,0 +1,140 @@ +/* + * Copyright 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef SCREENRECORD_TEXT_RENDER_H +#define SCREENRECORD_TEXT_RENDER_H + +#include "Program.h" + +#include <utils/String8.h> +#include <utils/Errors.h> + +#include <GLES2/gl2.h> + + +namespace android { + +/* + * Simple font representation. + * + * Not thread-safe. + */ +class TextRenderer { +public: + TextRenderer() : + mTextureName(0), + mScale(1.0f), + mBorderWidth(10.0f), + mIndentMult(30.0f), + mScreenWidth(0), + mScreenHeight(0) + {} + ~TextRenderer() {} + + // Load the glyph bitmap into a 2D texture in the current context. + status_t loadIntoTexture(); + + // Set the screen dimensions, used for scaling and line wrap. + void setScreenSize(uint32_t width, uint32_t height) { + mScreenWidth = width; + mScreenHeight = height; + } + + // Get/set the font scaling. + float getScale() const { return mScale; } + void setScale(float scale) { mScale = scale; } + + // Set the font scaling based on the desired number of lines per screen. + // The display's tallest axis is used, so if the device is in landscape + // the screen will fit fewer lines. + void setProportionalScale(float linesPerScreen); + + // Render the text string at the specified coordinates. Pass in the + // upper-left corner in non-GL-flipped coordinates, i.e. to print text + // at the top left of the screen use (0,0). + // + // Set blend func (1, 1-srcAlpha) before calling if drawing onto + // something other than black. + void drawString(const Program& program, const float* texMatrix, + float x, float y, const String8& str) const; + + // Draw a string, possibly wrapping it at the screen boundary. Top-left + // is at (0,0). + // + // Returns the updated Y position. + float drawWrappedString(const Program& texRender, float xpos, float ypos, + const String8& str); + + // Returns the name of the texture the font was loaded into. + GLuint getTextureName() const { return mTextureName; } + +private: + TextRenderer(const TextRenderer&); + TextRenderer& operator=(const TextRenderer&); + + // Perform one-time initialization. + static void initOnce(); + + // Populate the mXOffset array. + static void initXOffset(); + + // Find a good place to break the string. Returns NULL if the entire + // string will fit. + char* breakString(const char* str, float maxWidth) const; + + // Computes the width of the string, in pixels. + float computeScaledStringWidth(const String8& str8) const; + + // Computes the width of first N characters in the string. + float computeScaledStringWidth(const char* str, size_t len) const; + + // Returns the font's glyph height. This is the full pixel height of the + // tallest glyph, both above and below the baseline, NOT adjusted by the + // current scale factor. + float getGlyphHeight() const; + + // Like getGlyphHeight(), but result is scaled. + float getScaledGlyphHeight() const { return getGlyphHeight() * mScale; } + + // Convert an ASCII character to a glyph index. Returns the glyph for + // '?' if we have no glyph for the specified character. + size_t glyphIndex(char ch) const; + + GLuint mTextureName; + float mScale; + + // Number of pixels preserved at the left/right edges of the screen by + // drawWrappedString(). Not scaled. + float mBorderWidth; + + // Distance to indent a broken line. Used by drawWrappedString(). + // Value will be adjusted by the current scale factor. + float mIndentMult; + + // Screen dimensions. + uint32_t mScreenWidth; + uint32_t mScreenHeight; + + // Static font info. + static bool mInitialized; + static uint32_t mXOffset[]; + + static const char kWhitespace[]; +}; + +}; // namespace android + +#endif /*SCREENRECORD_TEXT_RENDER_H*/ diff --git a/cmds/screenrecord/screenrecord.cpp b/cmds/screenrecord/screenrecord.cpp index 49999b5..61f83e3 100644 --- a/cmds/screenrecord/screenrecord.cpp +++ b/cmds/screenrecord/screenrecord.cpp @@ -15,13 +15,14 @@ */ #define LOG_TAG "ScreenRecord" +#define ATRACE_TAG ATRACE_TAG_GRAPHICS //#define LOG_NDEBUG 0 #include <utils/Log.h> #include <binder/IPCThreadState.h> #include <utils/Errors.h> -#include <utils/Thread.h> #include <utils/Timers.h> +#include <utils/Trace.h> #include <gui/Surface.h> #include <gui/SurfaceComposerClient.h> @@ -29,7 +30,6 @@ #include <ui/DisplayInfo.h> #include <media/openmax/OMX_IVCommon.h> #include <media/stagefright/foundation/ABuffer.h> -#include <media/stagefright/foundation/ADebug.h> #include <media/stagefright/foundation/AMessage.h> #include <media/stagefright/MediaCodec.h> #include <media/stagefright/MediaErrors.h> @@ -40,30 +40,37 @@ #include <unistd.h> #include <string.h> #include <stdio.h> +#include <ctype.h> #include <fcntl.h> #include <signal.h> #include <getopt.h> #include <sys/wait.h> +#include <assert.h> + +#include "screenrecord.h" +#include "Overlay.h" using namespace android; static const uint32_t kMinBitRate = 100000; // 0.1Mbps -static const uint32_t kMaxBitRate = 100 * 1000000; // 100Mbps +static const uint32_t kMaxBitRate = 200 * 1000000; // 200Mbps static const uint32_t kMaxTimeLimitSec = 180; // 3 minutes static const uint32_t kFallbackWidth = 1280; // 720p static const uint32_t kFallbackHeight = 720; // Command-line parameters. -static bool gVerbose = false; // chatty on stdout -static bool gRotate = false; // rotate 90 degrees -static bool gSizeSpecified = false; // was size explicitly requested? -static uint32_t gVideoWidth = 0; // default width+height +static bool gVerbose = false; // chatty on stdout +static bool gRotate = false; // rotate 90 degrees +static bool gSizeSpecified = false; // was size explicitly requested? +static bool gWantInfoScreen = false; // do we want initial info screen? +static bool gWantFrameTime = false; // do we want times on each frame? +static uint32_t gVideoWidth = 0; // default width+height static uint32_t gVideoHeight = 0; -static uint32_t gBitRate = 4000000; // 4Mbps +static uint32_t gBitRate = 4000000; // 4Mbps static uint32_t gTimeLimitSec = kMaxTimeLimitSec; // Set by signal handler to stop recording. -static bool gStopRequested; +static volatile bool gStopRequested; // Previous signal handler state, restored after first hit. static struct sigaction gOrigSigactionINT; @@ -97,8 +104,7 @@ static void signalCatcher(int signum) * when Ctrl-C is hit. If we're run from the host, the local adb process * gets the signal, and we get a SIGHUP when the terminal disconnects. */ -static status_t configureSignals() -{ +static status_t configureSignals() { struct sigaction act; memset(&act, 0, sizeof(act)); act.sa_handler = signalCatcher; @@ -156,35 +162,30 @@ static status_t prepareEncoder(float displayFps, sp<MediaCodec>* pCodec, fprintf(stderr, "ERROR: unable to create video/avc codec instance\n"); return UNKNOWN_ERROR; } + err = codec->configure(format, NULL, NULL, MediaCodec::CONFIGURE_FLAG_ENCODE); if (err != NO_ERROR) { - codec->release(); - codec.clear(); - fprintf(stderr, "ERROR: unable to configure codec (err=%d)\n", err); + codec->release(); return err; } - ALOGV("Creating buffer producer"); + ALOGV("Creating encoder input surface"); sp<IGraphicBufferProducer> bufferProducer; err = codec->createInputSurface(&bufferProducer); if (err != NO_ERROR) { - codec->release(); - codec.clear(); - fprintf(stderr, "ERROR: unable to create encoder input surface (err=%d)\n", err); + codec->release(); return err; } ALOGV("Starting codec"); err = codec->start(); if (err != NO_ERROR) { - codec->release(); - codec.clear(); - fprintf(stderr, "ERROR: unable to start codec (err=%d)\n", err); + codec->release(); return err; } @@ -195,12 +196,11 @@ static status_t prepareEncoder(float displayFps, sp<MediaCodec>* pCodec, } /* - * Configures the virtual display. When this completes, virtual display - * frames will start being sent to the encoder's surface. + * Sets the display projection, based on the display dimensions, video size, + * and device orientation. */ -static status_t prepareVirtualDisplay(const DisplayInfo& mainDpyInfo, - const sp<IGraphicBufferProducer>& bufferProducer, - sp<IBinder>* pDisplayHandle) { +static status_t setDisplayProjection(const sp<IBinder>& dpy, + const DisplayInfo& mainDpyInfo) { status_t err; // Set the region of the layer stack we're interested in, which in our @@ -266,15 +266,25 @@ static status_t prepareVirtualDisplay(const DisplayInfo& mainDpyInfo, } } + SurfaceComposerClient::setDisplayProjection(dpy, + gRotate ? DISPLAY_ORIENTATION_90 : DISPLAY_ORIENTATION_0, + layerStackRect, displayRect); + return NO_ERROR; +} +/* + * Configures the virtual display. When this completes, virtual display + * frames will start arriving from the buffer producer. + */ +static status_t prepareVirtualDisplay(const DisplayInfo& mainDpyInfo, + const sp<IGraphicBufferProducer>& bufferProducer, + sp<IBinder>* pDisplayHandle) { sp<IBinder> dpy = SurfaceComposerClient::createDisplay( - String8("ScreenRecorder"), false /* secure */); + String8("ScreenRecorder"), false /*secure*/); SurfaceComposerClient::openGlobalTransaction(); SurfaceComposerClient::setDisplaySurface(dpy, bufferProducer); - SurfaceComposerClient::setDisplayProjection(dpy, - gRotate ? DISPLAY_ORIENTATION_90 : DISPLAY_ORIENTATION_0, - layerStackRect, displayRect); + setDisplayProjection(dpy, mainDpyInfo); SurfaceComposerClient::setDisplayLayerStack(dpy, 0); // default stack SurfaceComposerClient::closeGlobalTransaction(); @@ -291,13 +301,15 @@ static status_t prepareVirtualDisplay(const DisplayInfo& mainDpyInfo, * The muxer must *not* have been started before calling. */ static status_t runEncoder(const sp<MediaCodec>& encoder, - const sp<MediaMuxer>& muxer) { + const sp<MediaMuxer>& muxer, const sp<IBinder>& mainDpy, + const sp<IBinder>& virtualDpy, uint8_t orientation) { static int kTimeout = 250000; // be responsive on signal status_t err; ssize_t trackIdx = -1; uint32_t debugNumFrames = 0; int64_t startWhenNsec = systemTime(CLOCK_MONOTONIC); int64_t endWhenNsec = startWhenNsec + seconds_to_nanoseconds(gTimeLimitSec); + DisplayInfo mainDpyInfo; Vector<sp<ABuffer> > buffers; err = encoder->getOutputBuffers(&buffers); @@ -338,10 +350,31 @@ static status_t runEncoder(const sp<MediaCodec>& encoder, if (size != 0) { ALOGV("Got data in buffer %d, size=%d, pts=%lld", bufIndex, size, ptsUsec); - CHECK(trackIdx != -1); + assert(trackIdx != -1); + + { // scope + ATRACE_NAME("orientation"); + // Check orientation, update if it has changed. + // + // Polling for changes is inefficient and wrong, but the + // useful stuff is hard to get at without a Dalvik VM. + err = SurfaceComposerClient::getDisplayInfo(mainDpy, + &mainDpyInfo); + if (err != NO_ERROR) { + ALOGW("getDisplayInfo(main) failed: %d", err); + } else if (orientation != mainDpyInfo.orientation) { + ALOGD("orientation changed, now %d", mainDpyInfo.orientation); + SurfaceComposerClient::openGlobalTransaction(); + setDisplayProjection(virtualDpy, mainDpyInfo); + SurfaceComposerClient::closeGlobalTransaction(); + orientation = mainDpyInfo.orientation; + } + } // If the virtual display isn't providing us with timestamps, - // use the current time. + // use the current time. This isn't great -- we could get + // decoded data in clusters -- but we're not expecting + // to hit this anyway. if (ptsUsec == 0) { ptsUsec = systemTime(SYSTEM_TIME_MONOTONIC) / 1000; } @@ -349,12 +382,18 @@ static status_t runEncoder(const sp<MediaCodec>& encoder, // The MediaMuxer docs are unclear, but it appears that we // need to pass either the full set of BufferInfo flags, or // (flags & BUFFER_FLAG_SYNCFRAME). - err = muxer->writeSampleData(buffers[bufIndex], trackIdx, - ptsUsec, flags); - if (err != NO_ERROR) { - fprintf(stderr, "Failed writing data to muxer (err=%d)\n", - err); - return err; + // + // If this blocks for too long we could drop frames. We may + // want to queue these up and do them on a different thread. + { // scope + ATRACE_NAME("write sample"); + err = muxer->writeSampleData(buffers[bufIndex], trackIdx, + ptsUsec, flags); + if (err != NO_ERROR) { + fprintf(stderr, + "Failed writing data to muxer (err=%d)\n", err); + return err; + } } debugNumFrames++; } @@ -366,8 +405,8 @@ static status_t runEncoder(const sp<MediaCodec>& encoder, } if ((flags & MediaCodec::BUFFER_FLAG_EOS) != 0) { // Not expecting EOS from SurfaceFlinger. Go with it. - ALOGD("Received end-of-stream"); - gStopRequested = false; + ALOGI("Received end-of-stream"); + gStopRequested = true; } break; case -EAGAIN: // INFO_TRY_AGAIN_LATER @@ -375,7 +414,7 @@ static status_t runEncoder(const sp<MediaCodec>& encoder, break; case INFO_FORMAT_CHANGED: // INFO_OUTPUT_FORMAT_CHANGED { - // format includes CSD, which we must provide to muxer + // Format includes CSD, which we must provide to muxer. ALOGV("Encoder format changed"); sp<AMessage> newFormat; encoder->getOutputFormat(&newFormat); @@ -389,7 +428,7 @@ static status_t runEncoder(const sp<MediaCodec>& encoder, } break; case INFO_OUTPUT_BUFFERS_CHANGED: // INFO_OUTPUT_BUFFERS_CHANGED - // not expected for an encoder; handle it anyway + // Not expected for an encoder; handle it anyway. ALOGV("Encoder buffers changed"); err = encoder->getOutputBuffers(&buffers); if (err != NO_ERROR) { @@ -399,7 +438,7 @@ static status_t runEncoder(const sp<MediaCodec>& encoder, } break; case INVALID_OPERATION: - fprintf(stderr, "Request for encoder buffer failed\n"); + ALOGW("dequeueOutputBuffer returned INVALID_OPERATION"); return err; default: fprintf(stderr, @@ -411,8 +450,8 @@ static status_t runEncoder(const sp<MediaCodec>& encoder, ALOGV("Encoder stopping (req=%d)", gStopRequested); if (gVerbose) { printf("Encoder stopping; recorded %u frames in %lld seconds\n", - debugNumFrames, - nanoseconds_to_seconds(systemTime(CLOCK_MONOTONIC) - startWhenNsec)); + debugNumFrames, nanoseconds_to_seconds( + systemTime(CLOCK_MONOTONIC) - startWhenNsec)); } return NO_ERROR; } @@ -460,8 +499,8 @@ static status_t recordScreen(const char* fileName) { // Configure and start the encoder. sp<MediaCodec> encoder; - sp<IGraphicBufferProducer> bufferProducer; - err = prepareEncoder(mainDpyInfo.fps, &encoder, &bufferProducer); + sp<IGraphicBufferProducer> encoderInputSurface; + err = prepareEncoder(mainDpyInfo.fps, &encoder, &encoderInputSurface); if (err != NO_ERROR && !gSizeSpecified) { // fallback is defined for landscape; swap if we're in portrait @@ -474,11 +513,41 @@ static status_t recordScreen(const char* fileName) { gVideoWidth, gVideoHeight, newWidth, newHeight); gVideoWidth = newWidth; gVideoHeight = newHeight; - err = prepareEncoder(mainDpyInfo.fps, &encoder, &bufferProducer); + err = prepareEncoder(mainDpyInfo.fps, &encoder, + &encoderInputSurface); } } - if (err != NO_ERROR) { - return err; + if (err != NO_ERROR) return err; + + // From here on, we must explicitly release() the encoder before it goes + // out of scope, or we will get an assertion failure from stagefright + // later on in a different thread. + + + // Draw the "info" page by rendering a frame with GLES and sending + // it directly to the encoder. + // TODO: consider displaying this as a regular layer to avoid b/11697754 + if (gWantInfoScreen) { + Overlay::drawInfoPage(encoderInputSurface); + } + + // Configure optional overlay. + sp<IGraphicBufferProducer> bufferProducer; + sp<Overlay> overlay; + if (gWantFrameTime) { + // Send virtual display frames to an external texture. + overlay = new Overlay(); + err = overlay->start(encoderInputSurface, &bufferProducer); + if (err != NO_ERROR) { + encoder->release(); + return err; + } + if (gVerbose) { + printf("Bugreport overlay created\n"); + } + } else { + // Use the encoder's input surface as the virtual display surface. + bufferProducer = encoderInputSurface; } // Configure virtual display. @@ -486,25 +555,22 @@ static status_t recordScreen(const char* fileName) { err = prepareVirtualDisplay(mainDpyInfo, bufferProducer, &dpy); if (err != NO_ERROR) { encoder->release(); - encoder.clear(); - return err; } - // Configure, but do not start, muxer. + // Configure muxer. We have to wait for the CSD blob from the encoder + // before we can start it. sp<MediaMuxer> muxer = new MediaMuxer(fileName, MediaMuxer::OUTPUT_FORMAT_MPEG_4); if (gRotate) { - muxer->setOrientationHint(90); + muxer->setOrientationHint(90); // TODO: does this do anything? } // Main encoder loop. - err = runEncoder(encoder, muxer); + err = runEncoder(encoder, muxer, mainDpy, dpy, mainDpyInfo.orientation); if (err != NO_ERROR) { - encoder->release(); - encoder.clear(); - - return err; + fprintf(stderr, "Encoder failed (err=%d)\n", err); + // fall through to cleanup } if (gVerbose) { @@ -512,14 +578,18 @@ static status_t recordScreen(const char* fileName) { } // Shut everything down, starting with the producer side. - bufferProducer = NULL; + encoderInputSurface = NULL; SurfaceComposerClient::destroyDisplay(dpy); - + if (overlay != NULL) { + overlay->stop(); + } encoder->stop(); + // If we don't stop muxer explicitly, i.e. let the destructor run, + // it may hang (b/11050628). muxer->stop(); encoder->release(); - return 0; + return err; } /* @@ -528,6 +598,28 @@ static status_t recordScreen(const char* fileName) { * This is optional, but nice to have. */ static status_t notifyMediaScanner(const char* fileName) { + // need to do allocations before the fork() + String8 fileUrl("file://"); + fileUrl.append(fileName); + + const char* kCommand = "/system/bin/am"; + const char* const argv[] = { + kCommand, + "broadcast", + "-a", + "android.intent.action.MEDIA_SCANNER_SCAN_FILE", + "-d", + fileUrl.string(), + NULL + }; + if (gVerbose) { + printf("Executing:"); + for (int i = 0; argv[i] != NULL; i++) { + printf(" %s", argv[i]); + } + putchar('\n'); + } + pid_t pid = fork(); if (pid < 0) { int err = errno; @@ -539,34 +631,14 @@ static status_t notifyMediaScanner(const char* fileName) { int status; pid_t actualPid = TEMP_FAILURE_RETRY(waitpid(pid, &status, 0)); if (actualPid != pid) { - ALOGW("waitpid() returned %d (errno=%d)", actualPid, errno); + ALOGW("waitpid(%d) returned %d (errno=%d)", pid, actualPid, errno); } else if (status != 0) { ALOGW("'am broadcast' exited with status=%d", status); } else { ALOGV("'am broadcast' exited successfully"); } } else { - const char* kCommand = "/system/bin/am"; - - // child; we're single-threaded, so okay to alloc - String8 fileUrl("file://"); - fileUrl.append(fileName); - const char* const argv[] = { - kCommand, - "broadcast", - "-a", - "android.intent.action.MEDIA_SCANNER_SCAN_FILE", - "-d", - fileUrl.string(), - NULL - }; - if (gVerbose) { - printf("Executing:"); - for (int i = 0; argv[i] != NULL; i++) { - printf(" %s", argv[i]); - } - putchar('\n'); - } else { + if (!gVerbose) { // non-verbose, suppress 'am' output ALOGV("closing stdout/stderr in child"); int fd = open("/dev/null", O_WRONLY); @@ -611,13 +683,37 @@ static bool parseWidthHeight(const char* widthHeight, uint32_t* pWidth, } /* + * Accepts a string with a bare number ("4000000") or with a single-character + * unit ("4m"). + * + * Returns an error if parsing fails. + */ +static status_t parseValueWithUnit(const char* str, uint32_t* pValue) { + long value; + char* endptr; + + value = strtol(str, &endptr, 10); + if (*endptr == '\0') { + // bare number + *pValue = value; + return NO_ERROR; + } else if (toupper(*endptr) == 'M' && *(endptr+1) == '\0') { + *pValue = value * 1000000; // check for overflow? + return NO_ERROR; + } else { + fprintf(stderr, "Unrecognized value: %s\n", str); + return UNKNOWN_ERROR; + } +} + +/* * Dumps usage on stderr. */ static void usage() { fprintf(stderr, "Usage: screenrecord [options] <filename>\n" "\n" - "Records the device's display to a .mp4 file.\n" + "Android screenrecord v%d.%d. Records the device's display to a .mp4 file.\n" "\n" "Options:\n" "--size WIDTHxHEIGHT\n" @@ -625,11 +721,13 @@ static void usage() { " display resolution (if supported), 1280x720 if not. For best results,\n" " use a size supported by the AVC encoder.\n" "--bit-rate RATE\n" - " Set the video bit rate, in megabits per second. Default %dMbps.\n" + " Set the video bit rate, in bits per second. Value may be specified as\n" + " bits or megabits, e.g. '4000000' is equivalent to '4M'. Default %dMbps.\n" + "--bugreport\n" + " Add additional information, such as a timestamp overlay, that is helpful\n" + " in videos captured to illustrate bugs.\n" "--time-limit TIME\n" " Set the maximum recording time, in seconds. Default / maximum is %d.\n" - "--rotate\n" - " Rotate the output 90 degrees.\n" "--verbose\n" " Display interesting information on stdout.\n" "--help\n" @@ -637,7 +735,7 @@ static void usage() { "\n" "Recording continues until Ctrl-C is hit or the time limit is reached.\n" "\n", - gBitRate / 1000000, gTimeLimitSec + kVersionMajor, kVersionMinor, gBitRate / 1000000, gTimeLimitSec ); } @@ -646,13 +744,16 @@ static void usage() { */ int main(int argc, char* const argv[]) { static const struct option longOptions[] = { - { "help", no_argument, NULL, 'h' }, - { "verbose", no_argument, NULL, 'v' }, - { "size", required_argument, NULL, 's' }, - { "bit-rate", required_argument, NULL, 'b' }, - { "time-limit", required_argument, NULL, 't' }, - { "rotate", no_argument, NULL, 'r' }, - { NULL, 0, NULL, 0 } + { "help", no_argument, NULL, 'h' }, + { "verbose", no_argument, NULL, 'v' }, + { "size", required_argument, NULL, 's' }, + { "bit-rate", required_argument, NULL, 'b' }, + { "time-limit", required_argument, NULL, 't' }, + { "show-device-info", no_argument, NULL, 'i' }, + { "show-frame-time", no_argument, NULL, 'f' }, + { "bugreport", no_argument, NULL, 'u' }, + { "rotate", no_argument, NULL, 'r' }, + { NULL, 0, NULL, 0 } }; while (true) { @@ -684,7 +785,9 @@ int main(int argc, char* const argv[]) { gSizeSpecified = true; break; case 'b': - gBitRate = atoi(optarg); + if (parseValueWithUnit(optarg, &gBitRate) != NO_ERROR) { + return 2; + } if (gBitRate < kMinBitRate || gBitRate > kMaxBitRate) { fprintf(stderr, "Bit rate %dbps outside acceptable range [%d,%d]\n", @@ -701,7 +804,18 @@ int main(int argc, char* const argv[]) { return 2; } break; + case 'i': + gWantInfoScreen = true; + break; + case 'f': + gWantFrameTime = true; + break; + case 'u': + gWantInfoScreen = true; + gWantFrameTime = true; + break; case 'r': + // experimental feature gRotate = true; break; default: diff --git a/cmds/screenrecord/screenrecord.h b/cmds/screenrecord/screenrecord.h new file mode 100644 index 0000000..95e8a68 --- /dev/null +++ b/cmds/screenrecord/screenrecord.h @@ -0,0 +1,23 @@ +/* + * Copyright 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef SCREENRECORD_SCREENRECORD_H +#define SCREENRECORD_SCREENRECORD_H + +#define kVersionMajor 1 +#define kVersionMinor 1 + +#endif /*SCREENRECORD_SCREENRECORD_H*/ diff --git a/cmds/stagefright/codec.cpp b/cmds/stagefright/codec.cpp index fdfefdf..d125ad1 100644 --- a/cmds/stagefright/codec.cpp +++ b/cmds/stagefright/codec.cpp @@ -16,6 +16,7 @@ //#define LOG_NDEBUG 0 #define LOG_TAG "codec" +#include <inttypes.h> #include <utils/Log.h> #include "SimplePlayer.h" @@ -291,13 +292,13 @@ static int decode( CHECK_EQ((status_t)OK, state->mCodec->release()); if (state->mIsAudio) { - printf("track %d: %lld bytes received. %.2f KB/sec\n", + printf("track %zu: %" PRId64 " bytes received. %.2f KB/sec\n", i, state->mNumBytesDecoded, state->mNumBytesDecoded * 1E6 / 1024 / elapsedTimeUs); } else { - printf("track %d: %lld frames decoded, %.2f fps. %lld bytes " - "received. %.2f KB/sec\n", + printf("track %zu: %" PRId64 " frames decoded, %.2f fps. %" PRId64 + " bytes received. %.2f KB/sec\n", i, state->mNumBuffersDecoded, state->mNumBuffersDecoded * 1E6 / elapsedTimeUs, diff --git a/cmds/stagefright/muxer.cpp b/cmds/stagefright/muxer.cpp index cca33e0..90daea2 100644 --- a/cmds/stagefright/muxer.cpp +++ b/cmds/stagefright/muxer.cpp @@ -16,6 +16,7 @@ //#define LOG_NDEBUG 0 #define LOG_TAG "muxer" +#include <inttypes.h> #include <utils/Log.h> #include <binder/ProcessState.h> @@ -198,7 +199,7 @@ static int muxing( trackIndexMap.clear(); int64_t elapsedTimeUs = ALooper::GetNowUs() - muxerStartTimeUs; - fprintf(stderr, "SUCCESS: muxer generate the video in %lld ms\n", + fprintf(stderr, "SUCCESS: muxer generate the video in %" PRId64 " ms\n", elapsedTimeUs / 1000); return 0; diff --git a/cmds/stagefright/recordvideo.cpp b/cmds/stagefright/recordvideo.cpp index c30c122..1d267f9 100644 --- a/cmds/stagefright/recordvideo.cpp +++ b/cmds/stagefright/recordvideo.cpp @@ -16,6 +16,7 @@ #include "SineSource.h" +#include <inttypes.h> #include <binder/ProcessState.h> #include <media/stagefright/foundation/ADebug.h> #include <media/stagefright/AudioPlayer.h> @@ -312,7 +313,7 @@ int main(int argc, char **argv) { fprintf(stderr, "record failed: %d\n", err); return 1; } - fprintf(stderr, "encoding %d frames in %lld us\n", nFrames, (end-start)/1000); + fprintf(stderr, "encoding %d frames in %" PRId64 " us\n", nFrames, (end-start)/1000); fprintf(stderr, "encoding speed is: %.2f fps\n", (nFrames * 1E9) / (end-start)); return 0; } diff --git a/cmds/stagefright/sf2.cpp b/cmds/stagefright/sf2.cpp index c817443..b2b9ce5 100644 --- a/cmds/stagefright/sf2.cpp +++ b/cmds/stagefright/sf2.cpp @@ -16,6 +16,7 @@ //#define LOG_NDEBUG 0 #define LOG_TAG "sf2" +#include <inttypes.h> #include <utils/Log.h> #include <binder/ProcessState.h> @@ -183,11 +184,11 @@ protected: int64_t delayUs = ALooper::GetNowUs() - mStartTimeUs; if (mDecodeAudio) { - printf("%lld bytes received. %.2f KB/sec\n", + printf("%" PRId64 " bytes received. %.2f KB/sec\n", mTotalBytesReceived, mTotalBytesReceived * 1E6 / 1024 / delayUs); } else { - printf("%d frames decoded, %.2f fps. %lld bytes " + printf("%d frames decoded, %.2f fps. %" PRId64 " bytes " "received. %.2f KB/sec\n", mNumOutputBuffersReceived, mNumOutputBuffersReceived * 1E6 / delayUs, diff --git a/cmds/stagefright/stagefright.cpp b/cmds/stagefright/stagefright.cpp index 030bf1b..8efb39e 100644 --- a/cmds/stagefright/stagefright.cpp +++ b/cmds/stagefright/stagefright.cpp @@ -22,6 +22,7 @@ #include <stdlib.h> #include <string.h> +#include <inttypes.h> #include "jpeg.h" #include "SineSource.h" @@ -89,8 +90,8 @@ static void displayDecodeHistogram(Vector<int64_t> *decodeTimesUs) { int64_t minUs = decodeTimesUs->itemAt(0); int64_t maxUs = decodeTimesUs->itemAt(n - 1); - printf("min decode time %lld us (%.2f secs)\n", minUs, minUs / 1E6); - printf("max decode time %lld us (%.2f secs)\n", maxUs, maxUs / 1E6); + printf("min decode time %" PRId64 " us (%.2f secs)\n", minUs, minUs / 1E6); + printf("max decode time %" PRId64 " us (%.2f secs)\n", maxUs, maxUs / 1E6); size_t counts[100]; for (size_t i = 0; i < 100; ++i) { @@ -110,7 +111,7 @@ static void displayDecodeHistogram(Vector<int64_t> *decodeTimesUs) { int64_t slotUs = minUs + (i * (maxUs - minUs) / 100); double fps = 1E6 / slotUs; - printf("[%.2f fps]: %d\n", fps, counts[i]); + printf("[%.2f fps]: %zu\n", fps, counts[i]); } } @@ -262,7 +263,7 @@ static void playSource(OMXClient *client, sp<MediaSource> &source) { } } - printf("buffer has timestamp %lld us (%.2f secs)\n", + printf("buffer has timestamp %" PRId64 " us (%.2f secs)\n", timestampUs, timestampUs / 1E6); buffer->release(); @@ -285,7 +286,7 @@ static void playSource(OMXClient *client, sp<MediaSource> &source) { seekTimeUs = (rand() * (float)durationUs) / RAND_MAX; options.setSeekTo(seekTimeUs); - printf("seeking to %lld us (%.2f secs)\n", + printf("seeking to %" PRId64 " us (%.2f secs)\n", seekTimeUs, seekTimeUs / 1E6); } } @@ -388,7 +389,7 @@ static void playSource(OMXClient *client, sp<MediaSource> &source) { // sizes may be different across decoders. printf("avg. %.2f KB/sec\n", totalBytes / 1024 * 1E6 / delay); - printf("decoded a total of %lld bytes\n", totalBytes); + printf("decoded a total of %" PRId64 " bytes\n", totalBytes); } } @@ -574,7 +575,8 @@ static void performSeekTest(const sp<MediaSource> &source) { int64_t timeUs; CHECK(buffer->meta_data()->findInt64(kKeyTime, &timeUs)); - printf("%lld\t%lld\t%lld\n", seekTimeUs, timeUs, seekTimeUs - timeUs); + printf("%" PRId64 "\t%" PRId64 "\t%" PRId64 "\n", + seekTimeUs, timeUs, seekTimeUs - timeUs); buffer->release(); buffer = NULL; @@ -1071,7 +1073,7 @@ int main(int argc, char **argv) { int64_t thumbTimeUs; if (meta->findInt64(kKeyThumbnailTime, &thumbTimeUs)) { - printf("thumbnailTime: %lld us (%.2f secs)\n", + printf("thumbnailTime: %" PRId64 " us (%.2f secs)\n", thumbTimeUs, thumbTimeUs / 1E6); } diff --git a/drm/libdrmframework/plugins/forward-lock/FwdLockEngine/Android.mk b/drm/libdrmframework/plugins/forward-lock/FwdLockEngine/Android.mk index e251f82..48b0afe 100644 --- a/drm/libdrmframework/plugins/forward-lock/FwdLockEngine/Android.mk +++ b/drm/libdrmframework/plugins/forward-lock/FwdLockEngine/Android.mk @@ -61,7 +61,7 @@ LOCAL_C_INCLUDES += \ $(LOCAL_PATH)/include \ external/openssl/include -LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/drm +LOCAL_MODULE_RELATIVE_PATH := drm LOCAL_MODULE_TAGS := optional diff --git a/drm/mediadrm/plugins/mock/Android.mk b/drm/mediadrm/plugins/mock/Android.mk index ada23a2..26c245b 100644 --- a/drm/mediadrm/plugins/mock/Android.mk +++ b/drm/mediadrm/plugins/mock/Android.mk @@ -21,7 +21,8 @@ LOCAL_SRC_FILES:= \ LOCAL_MODULE := libmockdrmcryptoplugin -LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR_SHARED_LIBRARIES)/mediadrm +LOCAL_PROPRIETARY_MODULE := true +LOCAL_MODULE_RELATIVE_PATH := mediadrm LOCAL_SHARED_LIBRARIES := \ libutils liblog diff --git a/drm/mediadrm/plugins/mock/MockDrmCryptoPlugin.cpp b/drm/mediadrm/plugins/mock/MockDrmCryptoPlugin.cpp index f2cadf7..69fa7a0 100644 --- a/drm/mediadrm/plugins/mock/MockDrmCryptoPlugin.cpp +++ b/drm/mediadrm/plugins/mock/MockDrmCryptoPlugin.cpp @@ -695,7 +695,7 @@ namespace android { { String8 result; for (size_t i = 0; i < numSubSamples; i++) { - result.appendFormat("[%d] {clear:%d, encrypted:%d} ", i, + result.appendFormat("[%zu] {clear:%zu, encrypted:%zu} ", i, subSamples[i].mNumBytesOfClearData, subSamples[i].mNumBytesOfEncryptedData); } diff --git a/include/media/AudioSystem.h b/include/media/AudioSystem.h index 225ef76..4c22412 100644 --- a/include/media/AudioSystem.h +++ b/include/media/AudioSystem.h @@ -127,8 +127,8 @@ public: // NOTE: this feature is not supported on all hardware platforms and it is // necessary to check returned status before using the returned values. static status_t getRenderPosition(audio_io_handle_t output, - size_t *halFrames, - size_t *dspFrames, + uint32_t *halFrames, + uint32_t *dspFrames, audio_stream_type_t stream = AUDIO_STREAM_DEFAULT); // return the number of input frames lost by HAL implementation, or 0 if the handle is invalid diff --git a/include/media/IAudioFlinger.h b/include/media/IAudioFlinger.h index 899d79f..282f275 100644 --- a/include/media/IAudioFlinger.h +++ b/include/media/IAudioFlinger.h @@ -167,10 +167,10 @@ public: virtual status_t setVoiceVolume(float volume) = 0; - virtual status_t getRenderPosition(size_t *halFrames, size_t *dspFrames, + virtual status_t getRenderPosition(uint32_t *halFrames, uint32_t *dspFrames, audio_io_handle_t output) const = 0; - virtual size_t getInputFramesLost(audio_io_handle_t ioHandle) const = 0; + virtual uint32_t getInputFramesLost(audio_io_handle_t ioHandle) const = 0; virtual int newAudioSessionId() = 0; diff --git a/include/media/stagefright/MetaData.h b/include/media/stagefright/MetaData.h index 3a87474..db8216b 100644 --- a/include/media/stagefright/MetaData.h +++ b/include/media/stagefright/MetaData.h @@ -215,6 +215,8 @@ public: bool findData(uint32_t key, uint32_t *type, const void **data, size_t *size) const; + bool hasData(uint32_t key) const; + void dumpToLog() const; protected: diff --git a/include/private/media/AudioTrackShared.h b/include/private/media/AudioTrackShared.h index 7fd9379..2d033e6 100644 --- a/include/private/media/AudioTrackShared.h +++ b/include/private/media/AudioTrackShared.h @@ -65,7 +65,9 @@ typedef SingleStateQueue<StaticAudioTrackState> StaticAudioTrackSingleStateQueue struct AudioTrackSharedStatic { StaticAudioTrackSingleStateQueue::Shared mSingleStateQueue; - size_t mBufferPosition; // updated asynchronously by server, + // This field should be a size_t, but since it is located in shared memory we + // force to 32-bit. The client and server may have different typedefs for size_t. + uint32_t mBufferPosition; // updated asynchronously by server, // "for entertainment purposes only" }; @@ -108,7 +110,9 @@ struct audio_track_cblk_t private: - size_t mMinimum; // server wakes up client if available >= mMinimum + // This field should be a size_t, but since it is located in shared memory we + // force to 32-bit. The client and server may have different typedefs for size_t. + uint32_t mMinimum; // server wakes up client if available >= mMinimum // Channel volumes are fixed point U4.12, so 0x1000 means 1.0. // Left channel is in [0:15], right channel is in [16:31]. @@ -245,7 +249,11 @@ public: } void setMinimum(size_t minimum) { - mCblk->mMinimum = minimum; + // This can only happen on a 64-bit client + if (minimum > UINT32_MAX) { + minimum = UINT32_MAX; + } + mCblk->mMinimum = (uint32_t) minimum; } // Return the number of frames that would need to be obtained and released diff --git a/include/private/media/StaticAudioTrackState.h b/include/private/media/StaticAudioTrackState.h index 46a5946..d483061 100644 --- a/include/private/media/StaticAudioTrackState.h +++ b/include/private/media/StaticAudioTrackState.h @@ -25,9 +25,13 @@ namespace android { // state is wrapped by a SingleStateQueue. struct StaticAudioTrackState { // do not define constructors, destructors, or virtual methods - size_t mLoopStart; - size_t mLoopEnd; - int mLoopCount; + + // These fields should both be size_t, but since they are located in shared memory we + // force to 32-bit. The client and server may have different typedefs for size_t. + uint32_t mLoopStart; + uint32_t mLoopEnd; + + int mLoopCount; }; } // namespace android diff --git a/libvideoeditor/lvpp/VideoEditorAudioPlayer.cpp b/libvideoeditor/lvpp/VideoEditorAudioPlayer.cpp index 176f8e9..cb4b23e 100755 --- a/libvideoeditor/lvpp/VideoEditorAudioPlayer.cpp +++ b/libvideoeditor/lvpp/VideoEditorAudioPlayer.cpp @@ -671,8 +671,9 @@ size_t VideoEditorAudioPlayer::fillBuffer(void *data, size_t size) { M4OSA_Void* ptr; - ptr = (M4OSA_Void*)((unsigned int)mInputBuffer->data() + - mInputBuffer->range_offset()); + ptr = reinterpret_cast<M4OSA_Void*>( + reinterpret_cast<uintptr_t>(mInputBuffer->data()) + + mInputBuffer->range_offset()); M4OSA_UInt32 len = mInputBuffer->range_length(); M4OSA_Context fp = M4OSA_NULL; @@ -700,8 +701,8 @@ size_t VideoEditorAudioPlayer::fillBuffer(void *data, size_t size) { mBGAudioPCMFileOriginalSeekPoint <= (mBGAudioPCMFileTrimmedLength - len)) { - ALOGV("Checking mBGAudioPCMFileHandle %d", - (unsigned int)mBGAudioPCMFileHandle); + ALOGV("Checking mBGAudioPCMFileHandle %p", + mBGAudioPCMFileHandle); if (mBGAudioPCMFileHandle != M4OSA_NULL) { ALOGV("fillBuffer seeking file to %lld", diff --git a/libvideoeditor/lvpp/VideoEditorPreviewController.cpp b/libvideoeditor/lvpp/VideoEditorPreviewController.cpp index 149c4ea..c3cd3d0 100755 --- a/libvideoeditor/lvpp/VideoEditorPreviewController.cpp +++ b/libvideoeditor/lvpp/VideoEditorPreviewController.cpp @@ -1248,7 +1248,7 @@ void VideoEditorPreviewController::notify( case MEDIA_SET_VIDEO_SIZE: ALOGV("MEDIA_SET_VIDEO_SIZE; New video size %d x %d", ext1, ext2); break; - case 0xAAAAAAAA: + case static_cast<int>(0xAAAAAAAA): ALOGV("VIDEO PLAYBACK ALMOST over, prepare next player"); // Select next player and prepare it // If there is a clip after this one @@ -1268,7 +1268,7 @@ void VideoEditorPreviewController::notify( } } break; - case 0xBBBBBBBB: + case static_cast<int>(0xBBBBBBBB): { ALOGV("VIDEO PLAYBACK, Update Overlay"); int overlayIndex = ext2; diff --git a/libvideoeditor/lvpp/VideoEditorSRC.cpp b/libvideoeditor/lvpp/VideoEditorSRC.cpp index 36d0812..6beabfa 100755 --- a/libvideoeditor/lvpp/VideoEditorSRC.cpp +++ b/libvideoeditor/lvpp/VideoEditorSRC.cpp @@ -284,7 +284,7 @@ status_t VideoEditorSRC::getNextBuffer(AudioBufferProvider::Buffer *pBuffer, int void VideoEditorSRC::releaseBuffer(AudioBufferProvider::Buffer *pBuffer) { - ALOGV("releaseBuffer: %p", pBuffers); + ALOGV("releaseBuffer: %p", pBuffer); free(pBuffer->raw); pBuffer->raw = NULL; pBuffer->frameCount = 0; diff --git a/libvideoeditor/osal/inc/M4OSA_Clock.h b/libvideoeditor/osal/inc/M4OSA_Clock.h index db753a5..52ea696 100755 --- a/libvideoeditor/osal/inc/M4OSA_Clock.h +++ b/libvideoeditor/osal/inc/M4OSA_Clock.h @@ -21,7 +21,7 @@ ************************************************************************ */ -#ifndef M4OSA_CLOCH_H +#ifndef M4OSA_CLOCK_H #define M4OSA_CLOCK_H #include "M4OSA_Types.h" diff --git a/libvideoeditor/osal/inc/M4OSA_Error.h b/libvideoeditor/osal/inc/M4OSA_Error.h index 4d59529..75c3177 100755 --- a/libvideoeditor/osal/inc/M4OSA_Error.h +++ b/libvideoeditor/osal/inc/M4OSA_Error.h @@ -57,7 +57,7 @@ typedef M4OSA_UInt32 M4OSA_ERR; * @arg coreID: (IN) [M4OSA_UInt32] CoreID to put in the error code * @arg errorID: (IN) [M4OSA_UInt32] ErrorID to put in the error code*/ #define M4OSA_ERR_CREATE(severity, coreID, errorID)\ - (M4OSA_Int32)((((M4OSA_UInt32)severity)<<30)+((((M4OSA_UInt32)coreID)&0x003FFF)<<16)+(((M4OSA_UInt32)errorID)&0x00FFFF)) + (M4OSA_UInt32)((((M4OSA_UInt32)severity)<<30)+((((M4OSA_UInt32)coreID)&0x003FFF)<<16)+(((M4OSA_UInt32)errorID)&0x00FFFF)) /** This macro extracts the 3 fields from the error: * @arg error: (IN) [M4OSA_ERR] Error code diff --git a/libvideoeditor/vss/src/M4DECODER_Null.c b/libvideoeditor/vss/src/M4DECODER_Null.c index a0dad30..ce260e5 100755 --- a/libvideoeditor/vss/src/M4DECODER_Null.c +++ b/libvideoeditor/vss/src/M4DECODER_Null.c @@ -210,7 +210,7 @@ M4OSA_ERR M4DECODER_NULL_setOption(M4OSA_Context context, break;
case M4DECODER_kOptionID_EnableYuvWithEffect:
- pStreamContext->bYuvWithEffectSet = (M4OSA_Bool)pValue;
+ pStreamContext->bYuvWithEffectSet = (M4OSA_Bool)(intptr_t)pValue;
break;
case M4DECODER_kOptionID_YuvWithEffectNonContiguous:
diff --git a/libvideoeditor/vss/stagefrightshells/src/VideoEditor3gpReader.cpp b/libvideoeditor/vss/stagefrightshells/src/VideoEditor3gpReader.cpp index 3c8915a..99cf9ec 100755 --- a/libvideoeditor/vss/stagefrightshells/src/VideoEditor3gpReader.cpp +++ b/libvideoeditor/vss/stagefrightshells/src/VideoEditor3gpReader.cpp @@ -776,16 +776,16 @@ M4OSA_ERR VideoEditor3gpReader_setOption(M4OSA_Context context, case M4READER_kOptionID_SetOsaFileReaderFctsPtr: break; - case M4READER_3GP_kOptionID_AudioOnly: + case static_cast<M4OSA_OptionID>(M4READER_3GP_kOptionID_AudioOnly): break; - case M4READER_3GP_kOptionID_VideoOnly: + case static_cast<M4OSA_OptionID>(M4READER_3GP_kOptionID_VideoOnly): break; - case M4READER_3GP_kOptionID_FastOpenMode: + case static_cast<M4OSA_OptionID>(M4READER_3GP_kOptionID_FastOpenMode): break; - case M4READER_kOptionID_MaxMetadataSize: + case static_cast<M4OSA_OptionID>(M4READER_kOptionID_MaxMetadataSize): break; default: diff --git a/libvideoeditor/vss/stagefrightshells/src/VideoEditorAudioDecoder.cpp b/libvideoeditor/vss/stagefrightshells/src/VideoEditorAudioDecoder.cpp index 9b35d07..e4c7ea1 100755 --- a/libvideoeditor/vss/stagefrightshells/src/VideoEditorAudioDecoder.cpp +++ b/libvideoeditor/vss/stagefrightshells/src/VideoEditorAudioDecoder.cpp @@ -809,7 +809,7 @@ M4OSA_ERR VideoEditorAudioDecoder_setOption(M4AD_Context pContext, pDecoderContext = (VideoEditorAudioDecoder_Context*)pContext; switch( optionID ) { - case M4AD_kOptionID_UserParam: + case static_cast<M4OSA_UInt32>(M4AD_kOptionID_UserParam): ALOGV("VideoEditorAudioDecodersetOption UserParam is not supported"); err = M4ERR_NOT_IMPLEMENTED; break; diff --git a/libvideoeditor/vss/stagefrightshells/src/VideoEditorMp3Reader.cpp b/libvideoeditor/vss/stagefrightshells/src/VideoEditorMp3Reader.cpp index af53c54..2e0d05d 100755 --- a/libvideoeditor/vss/stagefrightshells/src/VideoEditorMp3Reader.cpp +++ b/libvideoeditor/vss/stagefrightshells/src/VideoEditorMp3Reader.cpp @@ -334,8 +334,8 @@ M4OSA_ERR VideoEditorMp3Reader_setOption(M4OSA_Context context, (VideoEditorMp3Reader_Context*)context; M4OSA_ERR err = M4NO_ERROR; - ALOGV("VideoEditorMp3Reader_Context begin: optionId: %d Value: %d ", - (int)optionId,(int)pValue); + ALOGV("VideoEditorMp3Reader_Context begin: optionId: %u Value: %p ", + optionId, pValue); M4OSA_DEBUG_IF1((M4OSA_NULL == pReaderContext), M4ERR_PARAMETER, "invalid context pointer"); diff --git a/libvideoeditor/vss/stagefrightshells/src/VideoEditorUtils.cpp b/libvideoeditor/vss/stagefrightshells/src/VideoEditorUtils.cpp index 5a7237d..d264a2e 100755 --- a/libvideoeditor/vss/stagefrightshells/src/VideoEditorUtils.cpp +++ b/libvideoeditor/vss/stagefrightshells/src/VideoEditorUtils.cpp @@ -84,17 +84,17 @@ void displayMetaData(const sp<MetaData> meta) { LOG1("displayMetaData kKeyBitRate %d", int32Data); } if (meta->findData(kKeyESDS, &type, &data, &size)) { - LOG1("displayMetaData kKeyESDS type=%d size=%d", type, size); + LOG1("displayMetaData kKeyESDS type=%d size=%zu", type, size); } if (meta->findData(kKeyAVCC, &type, &data, &size)) { - LOG1("displayMetaData kKeyAVCC data=0x%X type=%d size=%d", + LOG1("displayMetaData kKeyAVCC data=0x%X type=%d size=%zu", *((unsigned int*)data), type, size); } if (meta->findData(kKeyVorbisInfo, &type, &data, &size)) { - LOG1("displayMetaData kKeyVorbisInfo type=%d size=%d", type, size); + LOG1("displayMetaData kKeyVorbisInfo type=%d size=%zu", type, size); } if (meta->findData(kKeyVorbisBooks, &type, &data, &size)) { - LOG1("displayMetaData kKeyVorbisBooks type=%d size=%d", type, size); + LOG1("displayMetaData kKeyVorbisBooks type=%d size=%zu", type, size); } if (meta->findInt32(kKeyWantsNALFragments, &int32Data)) { LOG1("displayMetaData kKeyWantsNALFragments %d", int32Data); @@ -115,7 +115,7 @@ void displayMetaData(const sp<MetaData> meta) { LOG1("displayMetaData kKeyColorFormat %d", int32Data); } if (meta->findPointer(kKeyPlatformPrivate, &ptr)) { - LOG1("displayMetaData kKeyPlatformPrivate pointer=0x%x", (int32_t) ptr); + LOG1("displayMetaData kKeyPlatformPrivate pointer=%p", ptr); } if (meta->findCString(kKeyDecoderComponent, &charData)) { LOG1("displayMetaData kKeyDecoderComponent %s", charData); @@ -151,7 +151,7 @@ void displayMetaData(const sp<MetaData> meta) { LOG1("displayMetaData kKeyYear %s", charData); } if (meta->findData(kKeyAlbumArt, &type, &data, &size)) { - LOG1("displayMetaData kKeyAlbumArt type=%d size=%d", type, size); + LOG1("displayMetaData kKeyAlbumArt type=%d size=%zu", type, size); } if (meta->findCString(kKeyAlbumArtMIME, &charData)) { LOG1("displayMetaData kKeyAlbumArtMIME %s", charData); @@ -277,7 +277,7 @@ status_t buildAVCCodecSpecificData(uint8_t **pOutputData, size_t *pOutputSize, } if (size < 4) { - ALOGE("Codec specific data length too short: %d", size); + ALOGE("Codec specific data length too short: %zu", size); return ERROR_MALFORMED; } @@ -286,7 +286,7 @@ status_t buildAVCCodecSpecificData(uint8_t **pOutputData, size_t *pOutputSize, // 2 bytes for each of the parameter set length field // plus the 7 bytes for the header if (size < 4 + 7) { - ALOGE("Codec specific data length too short: %d", size); + ALOGE("Codec specific data length too short: %zu", size); return ERROR_MALFORMED; } @@ -355,7 +355,7 @@ status_t buildAVCCodecSpecificData(uint8_t **pOutputData, size_t *pOutputSize, } if (nSeqParamSets > 0x1F) { - ALOGE("Too many seq parameter sets (%d) found", nSeqParamSets); + ALOGE("Too many seq parameter sets (%zu) found", nSeqParamSets); return ERROR_MALFORMED; } } @@ -368,7 +368,7 @@ status_t buildAVCCodecSpecificData(uint8_t **pOutputData, size_t *pOutputSize, return ERROR_MALFORMED; } if (nPicParamSets > 0xFF) { - ALOGE("Too many pic parameter sets (%d) found", nPicParamSets); + ALOGE("Too many pic parameter sets (%zu) found", nPicParamSets); return ERROR_MALFORMED; } } diff --git a/media/libeffects/downmix/Android.mk b/media/libeffects/downmix/Android.mk index 5d0a87c..2bb6dbe 100644 --- a/media/libeffects/downmix/Android.mk +++ b/media/libeffects/downmix/Android.mk @@ -13,7 +13,7 @@ LOCAL_MODULE:= libdownmix LOCAL_MODULE_TAGS := optional -LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/soundfx +LOCAL_MODULE_RELATIVE_PATH := soundfx ifeq ($(TARGET_OS)-$(TARGET_SIMULATOR),linux-true) LOCAL_LDLIBS += -ldl diff --git a/media/libeffects/downmix/EffectDownmix.c b/media/libeffects/downmix/EffectDownmix.c index f17a6e8..a39d837 100644 --- a/media/libeffects/downmix/EffectDownmix.c +++ b/media/libeffects/downmix/EffectDownmix.c @@ -61,13 +61,13 @@ const struct effect_interface_s gDownmixInterface = { // This is the only symbol that needs to be exported __attribute__ ((visibility ("default"))) audio_effect_library_t AUDIO_EFFECT_LIBRARY_INFO_SYM = { - tag : AUDIO_EFFECT_LIBRARY_TAG, - version : EFFECT_LIBRARY_API_VERSION, - name : "Downmix Library", - implementor : "The Android Open Source Project", - create_effect : DownmixLib_Create, - release_effect : DownmixLib_Release, - get_descriptor : DownmixLib_GetDescriptor, + .tag = AUDIO_EFFECT_LIBRARY_TAG, + .version = EFFECT_LIBRARY_API_VERSION, + .name = "Downmix Library", + .implementor = "The Android Open Source Project", + .create_effect = DownmixLib_Create, + .release_effect = DownmixLib_Release, + .get_descriptor = DownmixLib_GetDescriptor, }; @@ -629,7 +629,9 @@ int Downmix_Configure(downmix_module_t *pDwmModule, effect_config_t *pConfig, bo return -EINVAL; } - memcpy(&pDwmModule->config, pConfig, sizeof(effect_config_t)); + if (&pDwmModule->config != pConfig) { + memcpy(&pDwmModule->config, pConfig, sizeof(effect_config_t)); + } if (init) { pDownmixer->type = DOWNMIX_TYPE_FOLD; @@ -697,7 +699,7 @@ int Downmix_Reset(downmix_object_t *pDownmixer, bool init) { * *---------------------------------------------------------------------------- */ -int Downmix_setParameter(downmix_object_t *pDownmixer, int32_t param, size_t size, void *pValue) { +int Downmix_setParameter(downmix_object_t *pDownmixer, int32_t param, uint32_t size, void *pValue) { int16_t value16; ALOGV("Downmix_setParameter, context %p, param %d, value16 %d, value32 %d", @@ -707,7 +709,7 @@ int Downmix_setParameter(downmix_object_t *pDownmixer, int32_t param, size_t siz case DOWNMIX_PARAM_TYPE: if (size != sizeof(downmix_type_t)) { - ALOGE("Downmix_setParameter(DOWNMIX_PARAM_TYPE) invalid size %d, should be %d", + ALOGE("Downmix_setParameter(DOWNMIX_PARAM_TYPE) invalid size %u, should be %zu", size, sizeof(downmix_type_t)); return -EINVAL; } @@ -753,14 +755,14 @@ int Downmix_setParameter(downmix_object_t *pDownmixer, int32_t param, size_t siz * *---------------------------------------------------------------------------- */ -int Downmix_getParameter(downmix_object_t *pDownmixer, int32_t param, size_t *pSize, void *pValue) { +int Downmix_getParameter(downmix_object_t *pDownmixer, int32_t param, uint32_t *pSize, void *pValue) { int16_t *pValue16; switch (param) { case DOWNMIX_PARAM_TYPE: if (*pSize < sizeof(int16_t)) { - ALOGE("Downmix_getParameter invalid parameter size %d for DOWNMIX_PARAM_TYPE", *pSize); + ALOGE("Downmix_getParameter invalid parameter size %zu for DOWNMIX_PARAM_TYPE", *pSize); return -EINVAL; } pValue16 = (int16_t *)pValue; diff --git a/media/libeffects/downmix/EffectDownmix.h b/media/libeffects/downmix/EffectDownmix.h index cb6b957..fcb3c9e 100644 --- a/media/libeffects/downmix/EffectDownmix.h +++ b/media/libeffects/downmix/EffectDownmix.h @@ -93,8 +93,8 @@ static int Downmix_GetDescriptor(effect_handle_t self, int Downmix_Init(downmix_module_t *pDwmModule); int Downmix_Configure(downmix_module_t *pDwmModule, effect_config_t *pConfig, bool init); int Downmix_Reset(downmix_object_t *pDownmixer, bool init); -int Downmix_setParameter(downmix_object_t *pDownmixer, int32_t param, size_t size, void *pValue); -int Downmix_getParameter(downmix_object_t *pDownmixer, int32_t param, size_t *pSize, void *pValue); +int Downmix_setParameter(downmix_object_t *pDownmixer, int32_t param, uint32_t size, void *pValue); +int Downmix_getParameter(downmix_object_t *pDownmixer, int32_t param, uint32_t *pSize, void *pValue); void Downmix_foldFromQuad(int16_t *pSrc, int16_t*pDst, size_t numFrames, bool accumulate); void Downmix_foldFromSurround(int16_t *pSrc, int16_t*pDst, size_t numFrames, bool accumulate); diff --git a/media/libeffects/factory/Android.mk b/media/libeffects/factory/Android.mk index 60a6ce5..a932af7 100644 --- a/media/libeffects/factory/Android.mk +++ b/media/libeffects/factory/Android.mk @@ -9,7 +9,6 @@ LOCAL_SRC_FILES:= \ LOCAL_SHARED_LIBRARIES := \ libcutils liblog -LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES) LOCAL_MODULE:= libeffects LOCAL_SHARED_LIBRARIES += libdl diff --git a/media/libeffects/loudness/Android.mk b/media/libeffects/loudness/Android.mk index dcb7b27..edf964e 100644 --- a/media/libeffects/loudness/Android.mk +++ b/media/libeffects/loudness/Android.mk @@ -14,7 +14,7 @@ LOCAL_SHARED_LIBRARIES := \ liblog \ libstlport -LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/soundfx +LOCAL_MODULE_RELATIVE_PATH := soundfx LOCAL_MODULE:= libldnhncr LOCAL_C_INCLUDES := \ diff --git a/media/libeffects/loudness/EffectLoudnessEnhancer.cpp b/media/libeffects/loudness/EffectLoudnessEnhancer.cpp index 91ed677..3c2b320 100644 --- a/media/libeffects/loudness/EffectLoudnessEnhancer.cpp +++ b/media/libeffects/loudness/EffectLoudnessEnhancer.cpp @@ -453,13 +453,13 @@ const struct effect_interface_s gLEInterface = { // This is the only symbol that needs to be exported __attribute__ ((visibility ("default"))) audio_effect_library_t AUDIO_EFFECT_LIBRARY_INFO_SYM = { - tag : AUDIO_EFFECT_LIBRARY_TAG, - version : EFFECT_LIBRARY_API_VERSION, - name : "Loudness Enhancer Library", - implementor : "The Android Open Source Project", - create_effect : LELib_Create, - release_effect : LELib_Release, - get_descriptor : LELib_GetDescriptor, + .tag = AUDIO_EFFECT_LIBRARY_TAG, + .version = EFFECT_LIBRARY_API_VERSION, + .name = "Loudness Enhancer Library", + .implementor = "The Android Open Source Project", + .create_effect = LELib_Create, + .release_effect = LELib_Release, + .get_descriptor = LELib_GetDescriptor, }; }; // extern "C" diff --git a/media/libeffects/lvm/lib/Bass/src/LVDBE_Init.c b/media/libeffects/lvm/lib/Bass/src/LVDBE_Init.c index 32c4ce0..35e5bc8 100644 --- a/media/libeffects/lvm/lib/Bass/src/LVDBE_Init.c +++ b/media/libeffects/lvm/lib/Bass/src/LVDBE_Init.c @@ -178,7 +178,7 @@ LVDBE_ReturnStatus_en LVDBE_Init(LVDBE_Handle_t *phInstance, { return(LVDBE_NULLADDRESS); } - if (((LVM_UINT32)pMemoryTable->Region[i].pBaseAddress % pMemoryTable->Region[i].Alignment)!=0){ + if (((uintptr_t)pMemoryTable->Region[i].pBaseAddress % pMemoryTable->Region[i].Alignment)!=0){ return(LVDBE_ALIGNMENTERROR); } } diff --git a/media/libeffects/lvm/lib/Bundle/src/LVM_Process.c b/media/libeffects/lvm/lib/Bundle/src/LVM_Process.c index 794271b..f5a01f3 100644 --- a/media/libeffects/lvm/lib/Bundle/src/LVM_Process.c +++ b/media/libeffects/lvm/lib/Bundle/src/LVM_Process.c @@ -99,7 +99,7 @@ LVM_ReturnStatus_en LVM_Process(LVM_Handle_t hInstance, /* * Check the buffer alignment */ - if((((LVM_UINT32)pInData % 4) != 0) || (((LVM_UINT32)pOutData % 4) != 0)) + if((((uintptr_t)pInData % 4) != 0) || (((uintptr_t)pOutData % 4) != 0)) { return(LVM_ALIGNMENTERROR); } diff --git a/media/libeffects/lvm/lib/Common/lib/InstAlloc.h b/media/libeffects/lvm/lib/Common/lib/InstAlloc.h index c6954f2..7f725f4 100644 --- a/media/libeffects/lvm/lib/Common/lib/InstAlloc.h +++ b/media/libeffects/lvm/lib/Common/lib/InstAlloc.h @@ -29,7 +29,7 @@ extern "C" { typedef struct { LVM_UINT32 TotalSize; /* Accumulative total memory size */ - LVM_UINT32 pNextMember; /* Pointer to the next instance member to be allocated */ + uintptr_t pNextMember; /* Pointer to the next instance member to be allocated */ } INST_ALLOC; diff --git a/media/libeffects/lvm/lib/Common/lib/LVM_Types.h b/media/libeffects/lvm/lib/Common/lib/LVM_Types.h index 81655dd..0c6fb25 100644 --- a/media/libeffects/lvm/lib/Common/lib/LVM_Types.h +++ b/media/libeffects/lvm/lib/Common/lib/LVM_Types.h @@ -29,6 +29,7 @@ extern "C" { #endif /* __cplusplus */ +#include <stdint.h> /****************************************************************************************/ /* */ @@ -85,14 +86,14 @@ extern "C" { typedef char LVM_CHAR; /* ASCII character */ -typedef char LVM_INT8; /* Signed 8-bit word */ -typedef unsigned char LVM_UINT8; /* Unsigned 8-bit word */ +typedef int8_t LVM_INT8; /* Signed 8-bit word */ +typedef uint8_t LVM_UINT8; /* Unsigned 8-bit word */ -typedef short LVM_INT16; /* Signed 16-bit word */ -typedef unsigned short LVM_UINT16; /* Unsigned 16-bit word */ +typedef int16_t LVM_INT16; /* Signed 16-bit word */ +typedef uint16_t LVM_UINT16; /* Unsigned 16-bit word */ -typedef long LVM_INT32; /* Signed 32-bit word */ -typedef unsigned long LVM_UINT32; /* Unsigned 32-bit word */ +typedef int32_t LVM_INT32; /* Signed 32-bit word */ +typedef uint32_t LVM_UINT32; /* Unsigned 32-bit word */ /****************************************************************************************/ diff --git a/media/libeffects/lvm/lib/Common/src/InstAlloc.c b/media/libeffects/lvm/lib/Common/src/InstAlloc.c index 481df84..a89a5c3 100644 --- a/media/libeffects/lvm/lib/Common/src/InstAlloc.c +++ b/media/libeffects/lvm/lib/Common/src/InstAlloc.c @@ -30,7 +30,7 @@ void InstAlloc_Init( INST_ALLOC *pms, void *StartAddr ) { pms->TotalSize = 3; - pms->pNextMember = (LVM_UINT32)(((LVM_UINT32)StartAddr + 3) & 0xFFFFFFFC);/* This code will fail if the platform address space is more than 32-bits*/ + pms->pNextMember = (((uintptr_t)StartAddr + 3) & (uintptr_t)~3); } @@ -51,7 +51,7 @@ void* InstAlloc_AddMember( INST_ALLOC *pms, void *NewMemberAddress; /* Variable to temporarily store the return value */ NewMemberAddress = (void*)pms->pNextMember; - Size = ((Size + 3) & 0xFFFFFFFC); /* Ceil the size to a multiple of four */ + Size = ((Size + 3) & (LVM_UINT32)~3); /* Ceil the size to a multiple of four */ pms->TotalSize += Size; pms->pNextMember += Size; @@ -84,30 +84,30 @@ LVM_UINT32 InstAlloc_GetTotal( INST_ALLOC *pms) void InstAlloc_InitAll( INST_ALLOC *pms, LVM_MemoryTable_st *pMemoryTable) { - LVM_UINT32 StartAddr; + uintptr_t StartAddr; - StartAddr = (LVM_UINT32)pMemoryTable->Region[LVM_PERSISTENT_SLOW_DATA].pBaseAddress; + StartAddr = (uintptr_t)pMemoryTable->Region[LVM_PERSISTENT_SLOW_DATA].pBaseAddress; pms[0].TotalSize = 3; - pms[0].pNextMember = (LVM_UINT32)(((LVM_UINT32)StartAddr + 3) & 0xFFFFFFFC); + pms[0].pNextMember = ((StartAddr + 3) & (uintptr_t)~3); - StartAddr = (LVM_UINT32)pMemoryTable->Region[LVM_PERSISTENT_FAST_DATA].pBaseAddress; + StartAddr = (uintptr_t)pMemoryTable->Region[LVM_PERSISTENT_FAST_DATA].pBaseAddress; pms[1].TotalSize = 3; - pms[1].pNextMember = (LVM_UINT32)(((LVM_UINT32)StartAddr + 3) & 0xFFFFFFFC); + pms[1].pNextMember = ((StartAddr + 3) & (uintptr_t)~3); - StartAddr = (LVM_UINT32)pMemoryTable->Region[LVM_PERSISTENT_FAST_COEF].pBaseAddress; + StartAddr = (uintptr_t)pMemoryTable->Region[LVM_PERSISTENT_FAST_COEF].pBaseAddress; pms[2].TotalSize = 3; - pms[2].pNextMember = (LVM_UINT32)(((LVM_UINT32)StartAddr + 3) & 0xFFFFFFFC); + pms[2].pNextMember = ((StartAddr + 3) & (uintptr_t)~3); - StartAddr = (LVM_UINT32)pMemoryTable->Region[LVM_TEMPORARY_FAST].pBaseAddress; + StartAddr = (uintptr_t)pMemoryTable->Region[LVM_TEMPORARY_FAST].pBaseAddress; pms[3].TotalSize = 3; - pms[3].pNextMember = (LVM_UINT32)(((LVM_UINT32)StartAddr + 3) & 0xFFFFFFFC); + pms[3].pNextMember = ((StartAddr + 3) & (uintptr_t)~3); } diff --git a/media/libeffects/lvm/lib/Eq/src/LVEQNB_Init.c b/media/libeffects/lvm/lib/Eq/src/LVEQNB_Init.c index c4767a8..e01c1c5 100644 --- a/media/libeffects/lvm/lib/Eq/src/LVEQNB_Init.c +++ b/media/libeffects/lvm/lib/Eq/src/LVEQNB_Init.c @@ -25,6 +25,7 @@ #include "LVEQNB.h" #include "LVEQNB_Private.h" #include "InstAlloc.h" +#include <string.h> /* For memset */ /****************************************************************************************/ /* */ diff --git a/media/libeffects/lvm/lib/Eq/src/LVEQNB_Process.c b/media/libeffects/lvm/lib/Eq/src/LVEQNB_Process.c index ac3c740..58f58ed 100644 --- a/media/libeffects/lvm/lib/Eq/src/LVEQNB_Process.c +++ b/media/libeffects/lvm/lib/Eq/src/LVEQNB_Process.c @@ -77,7 +77,7 @@ LVEQNB_ReturnStatus_en LVEQNB_Process(LVEQNB_Handle_t hInstance, } /* Check if the input and output data buffers are 32-bit aligned */ - if ((((LVM_INT32)pInData % 4) != 0) || (((LVM_INT32)pOutData % 4) != 0)) + if ((((uintptr_t)pInData % 4) != 0) || (((uintptr_t)pOutData % 4) != 0)) { return LVEQNB_ALIGNMENTERROR; } diff --git a/media/libeffects/lvm/wrapper/Android.mk b/media/libeffects/lvm/wrapper/Android.mk index f1af389..68ba34c 100644 --- a/media/libeffects/lvm/wrapper/Android.mk +++ b/media/libeffects/lvm/wrapper/Android.mk @@ -13,7 +13,7 @@ LOCAL_CFLAGS += -fvisibility=hidden LOCAL_MODULE:= libbundlewrapper -LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/soundfx +LOCAL_MODULE_RELATIVE_PATH := soundfx LOCAL_STATIC_LIBRARIES += libmusicbundle @@ -42,7 +42,7 @@ LOCAL_CFLAGS += -fvisibility=hidden LOCAL_MODULE:= libreverbwrapper -LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/soundfx +LOCAL_MODULE_RELATIVE_PATH := soundfx LOCAL_STATIC_LIBRARIES += libreverb diff --git a/media/libeffects/lvm/wrapper/Bundle/EffectBundle.cpp b/media/libeffects/lvm/wrapper/Bundle/EffectBundle.cpp index 85232e7..db5c78f 100644 --- a/media/libeffects/lvm/wrapper/Bundle/EffectBundle.cpp +++ b/media/libeffects/lvm/wrapper/Bundle/EffectBundle.cpp @@ -138,22 +138,22 @@ void Effect_getConfig (EffectContext *pContext, effect_config_t *pConfi int BassBoost_setParameter (EffectContext *pContext, void *pParam, void *pValue); int BassBoost_getParameter (EffectContext *pContext, void *pParam, - size_t *pValueSize, + uint32_t *pValueSize, void *pValue); int Virtualizer_setParameter (EffectContext *pContext, void *pParam, void *pValue); int Virtualizer_getParameter (EffectContext *pContext, void *pParam, - size_t *pValueSize, + uint32_t *pValueSize, void *pValue); int Equalizer_setParameter (EffectContext *pContext, void *pParam, void *pValue); int Equalizer_getParameter (EffectContext *pContext, void *pParam, - size_t *pValueSize, + uint32_t *pValueSize, void *pValue); int Volume_setParameter (EffectContext *pContext, void *pParam, void *pValue); int Volume_getParameter (EffectContext *pContext, void *pParam, - size_t *pValueSize, + uint32_t *pValueSize, void *pValue); int Effect_setEnabled(EffectContext *pContext, bool enabled); @@ -1758,7 +1758,7 @@ int32_t VolumeEnableStereoPosition(EffectContext *pContext, uint32_t enabled){ int BassBoost_getParameter(EffectContext *pContext, void *pParam, - size_t *pValueSize, + uint32_t *pValueSize, void *pValue){ int status = 0; int32_t *pParamTemp = (int32_t *)pParam; @@ -1876,7 +1876,7 @@ int BassBoost_setParameter (EffectContext *pContext, void *pParam, void *pValue) int Virtualizer_getParameter(EffectContext *pContext, void *pParam, - size_t *pValueSize, + uint32_t *pValueSize, void *pValue){ int status = 0; int32_t *pParamTemp = (int32_t *)pParam; @@ -1994,7 +1994,7 @@ int Virtualizer_setParameter (EffectContext *pContext, void *pParam, void *pValu //---------------------------------------------------------------------------- int Equalizer_getParameter(EffectContext *pContext, void *pParam, - size_t *pValueSize, + uint32_t *pValueSize, void *pValue){ int status = 0; int bMute = 0; @@ -2252,7 +2252,7 @@ int Equalizer_setParameter (EffectContext *pContext, void *pParam, void *pValue) int Volume_getParameter(EffectContext *pContext, void *pParam, - size_t *pValueSize, + uint32_t *pValueSize, void *pValue){ int status = 0; int bMute = 0; @@ -2813,9 +2813,9 @@ int Effect_command(effect_handle_t self, if(pContext->EffectType == LVM_BASS_BOOST){ if (pCmdData == NULL || - cmdSize < (int)(sizeof(effect_param_t) + sizeof(int32_t)) || + cmdSize < (sizeof(effect_param_t) + sizeof(int32_t)) || pReplyData == NULL || - *replySize < (int) (sizeof(effect_param_t) + sizeof(int32_t))){ + *replySize < (sizeof(effect_param_t) + sizeof(int32_t))){ ALOGV("\tLVM_ERROR : BassBoost_command cmdCode Case: " "EFFECT_CMD_GET_PARAM: ERROR"); return -EINVAL; @@ -2830,7 +2830,7 @@ int Effect_command(effect_handle_t self, p->status = android::BassBoost_getParameter(pContext, p->data, - (size_t *)&p->vsize, + &p->vsize, p->data + voffset); *replySize = sizeof(effect_param_t) + voffset + p->vsize; @@ -2844,9 +2844,9 @@ int Effect_command(effect_handle_t self, if(pContext->EffectType == LVM_VIRTUALIZER){ if (pCmdData == NULL || - cmdSize < (int)(sizeof(effect_param_t) + sizeof(int32_t)) || + cmdSize < (sizeof(effect_param_t) + sizeof(int32_t)) || pReplyData == NULL || - *replySize < (int) (sizeof(effect_param_t) + sizeof(int32_t))){ + *replySize < (sizeof(effect_param_t) + sizeof(int32_t))){ ALOGV("\tLVM_ERROR : Virtualizer_command cmdCode Case: " "EFFECT_CMD_GET_PARAM: ERROR"); return -EINVAL; @@ -2860,8 +2860,8 @@ int Effect_command(effect_handle_t self, int voffset = ((p->psize - 1) / sizeof(int32_t) + 1) * sizeof(int32_t); p->status = android::Virtualizer_getParameter(pContext, - (void *)p->data, - (size_t *)&p->vsize, + (void *)p->data, + &p->vsize, p->data + voffset); *replySize = sizeof(effect_param_t) + voffset + p->vsize; @@ -2876,7 +2876,7 @@ int Effect_command(effect_handle_t self, //ALOGV("\tEqualizer_command cmdCode Case: " // "EFFECT_CMD_GET_PARAM start"); if (pCmdData == NULL || - cmdSize < (int)(sizeof(effect_param_t) + sizeof(int32_t)) || + cmdSize < (sizeof(effect_param_t) + sizeof(int32_t)) || pReplyData == NULL || *replySize < (int) (sizeof(effect_param_t) + sizeof(int32_t))) { ALOGV("\tLVM_ERROR : Equalizer_command cmdCode Case: " @@ -2908,7 +2908,7 @@ int Effect_command(effect_handle_t self, if(pContext->EffectType == LVM_VOLUME){ //ALOGV("\tVolume_command cmdCode Case: EFFECT_CMD_GET_PARAM start"); if (pCmdData == NULL || - cmdSize < (int)(sizeof(effect_param_t) + sizeof(int32_t)) || + cmdSize < (sizeof(effect_param_t) + sizeof(int32_t)) || pReplyData == NULL || *replySize < (int) (sizeof(effect_param_t) + sizeof(int32_t))){ ALOGV("\tLVM_ERROR : Volume_command cmdCode Case: " @@ -2925,7 +2925,7 @@ int Effect_command(effect_handle_t self, p->status = android::Volume_getParameter(pContext, (void *)p->data, - (size_t *)&p->vsize, + &p->vsize, p->data + voffset); *replySize = sizeof(effect_param_t) + voffset + p->vsize; @@ -2947,7 +2947,7 @@ int Effect_command(effect_handle_t self, // *(int16_t *)((char *)pCmdData + sizeof(effect_param_t) + sizeof(int32_t))); if (pCmdData == NULL|| - cmdSize != (int)(sizeof(effect_param_t) + sizeof(int32_t) +sizeof(int16_t))|| + cmdSize != (sizeof(effect_param_t) + sizeof(int32_t) +sizeof(int16_t))|| pReplyData == NULL|| *replySize != sizeof(int32_t)){ ALOGV("\tLVM_ERROR : BassBoost_command cmdCode Case: " @@ -2980,7 +2980,7 @@ int Effect_command(effect_handle_t self, // *(int16_t *)((char *)pCmdData + sizeof(effect_param_t) + sizeof(int32_t))); if (pCmdData == NULL|| - cmdSize != (int)(sizeof(effect_param_t) + sizeof(int32_t) +sizeof(int16_t))|| + cmdSize != (sizeof(effect_param_t) + sizeof(int32_t) +sizeof(int16_t))|| pReplyData == NULL|| *replySize != sizeof(int32_t)){ ALOGV("\tLVM_ERROR : Virtualizer_command cmdCode Case: " @@ -3014,7 +3014,7 @@ int Effect_command(effect_handle_t self, // *replySize, // *(int16_t *)((char *)pCmdData + sizeof(effect_param_t) + sizeof(int32_t))); - if (pCmdData == NULL || cmdSize < (int)(sizeof(effect_param_t) + sizeof(int32_t)) || + if (pCmdData == NULL || cmdSize < (sizeof(effect_param_t) + sizeof(int32_t)) || pReplyData == NULL || *replySize != sizeof(int32_t)) { ALOGV("\tLVM_ERROR : Equalizer_command cmdCode Case: " "EFFECT_CMD_SET_PARAM: ERROR"); @@ -3034,7 +3034,7 @@ int Effect_command(effect_handle_t self, // *(int16_t *)((char *)pCmdData + sizeof(effect_param_t) +sizeof(int32_t))); if ( pCmdData == NULL|| - cmdSize < (int)(sizeof(effect_param_t) + sizeof(int32_t))|| + cmdSize < (sizeof(effect_param_t) + sizeof(int32_t))|| pReplyData == NULL|| *replySize != sizeof(int32_t)){ ALOGV("\tLVM_ERROR : Volume_command cmdCode Case: " @@ -3267,13 +3267,13 @@ const struct effect_interface_s gLvmEffectInterface = { // This is the only symbol that needs to be exported __attribute__ ((visibility ("default"))) audio_effect_library_t AUDIO_EFFECT_LIBRARY_INFO_SYM = { - tag : AUDIO_EFFECT_LIBRARY_TAG, - version : EFFECT_LIBRARY_API_VERSION, - name : "Effect Bundle Library", - implementor : "NXP Software Ltd.", - create_effect : android::EffectCreate, - release_effect : android::EffectRelease, - get_descriptor : android::EffectGetDescriptor, + .tag = AUDIO_EFFECT_LIBRARY_TAG, + .version = EFFECT_LIBRARY_API_VERSION, + .name = "Effect Bundle Library", + .implementor = "NXP Software Ltd.", + .create_effect = android::EffectCreate, + .release_effect = android::EffectRelease, + .get_descriptor = android::EffectGetDescriptor, }; } diff --git a/media/libeffects/lvm/wrapper/Reverb/EffectReverb.cpp b/media/libeffects/lvm/wrapper/Reverb/EffectReverb.cpp index 8a96212..c6d3759 100644 --- a/media/libeffects/lvm/wrapper/Reverb/EffectReverb.cpp +++ b/media/libeffects/lvm/wrapper/Reverb/EffectReverb.cpp @@ -181,7 +181,7 @@ void Reverb_getConfig (ReverbContext *pContext, effect_config_t *pConfig); int Reverb_setParameter (ReverbContext *pContext, void *pParam, void *pValue); int Reverb_getParameter (ReverbContext *pContext, void *pParam, - size_t *pValueSize, + uint32_t *pValueSize, void *pValue); int Reverb_LoadPreset (ReverbContext *pContext); @@ -1534,7 +1534,7 @@ int Reverb_LoadPreset(ReverbContext *pContext) int Reverb_getParameter(ReverbContext *pContext, void *pParam, - size_t *pValueSize, + uint32_t *pValueSize, void *pValue){ int status = 0; int32_t *pParamTemp = (int32_t *)pParam; @@ -1956,9 +1956,9 @@ int Reverb_command(effect_handle_t self, //ALOGV("\tReverb_command cmdCode Case: " // "EFFECT_CMD_GET_PARAM start"); if (pCmdData == NULL || - cmdSize < (int)(sizeof(effect_param_t) + sizeof(int32_t)) || + cmdSize < (sizeof(effect_param_t) + sizeof(int32_t)) || pReplyData == NULL || - *replySize < (int) (sizeof(effect_param_t) + sizeof(int32_t))){ + *replySize < (sizeof(effect_param_t) + sizeof(int32_t))){ ALOGV("\tLVM_ERROR : Reverb_command cmdCode Case: " "EFFECT_CMD_GET_PARAM: ERROR"); return -EINVAL; @@ -1973,7 +1973,7 @@ int Reverb_command(effect_handle_t self, p->status = android::Reverb_getParameter(pContext, (void *)p->data, - (size_t *)&p->vsize, + &p->vsize, p->data + voffset); *replySize = sizeof(effect_param_t) + voffset + p->vsize; @@ -1994,8 +1994,8 @@ int Reverb_command(effect_handle_t self, // *replySize, // *(int16_t *)((char *)pCmdData + sizeof(effect_param_t) + sizeof(int32_t))); - if (pCmdData == NULL || (cmdSize < (int)(sizeof(effect_param_t) + sizeof(int32_t))) - || pReplyData == NULL || *replySize != (int)sizeof(int32_t)) { + if (pCmdData == NULL || (cmdSize < (sizeof(effect_param_t) + sizeof(int32_t))) + || pReplyData == NULL || *replySize != sizeof(int32_t)) { ALOGV("\tLVM_ERROR : Reverb_command cmdCode Case: " "EFFECT_CMD_SET_PARAM: ERROR"); return -EINVAL; @@ -2149,13 +2149,13 @@ const struct effect_interface_s gReverbInterface = { // This is the only symbol that needs to be exported __attribute__ ((visibility ("default"))) audio_effect_library_t AUDIO_EFFECT_LIBRARY_INFO_SYM = { - tag : AUDIO_EFFECT_LIBRARY_TAG, - version : EFFECT_LIBRARY_API_VERSION, - name : "Reverb Library", - implementor : "NXP Software Ltd.", - create_effect : android::EffectCreate, - release_effect : android::EffectRelease, - get_descriptor : android::EffectGetDescriptor, + .tag = AUDIO_EFFECT_LIBRARY_TAG, + .version = EFFECT_LIBRARY_API_VERSION, + .name = "Reverb Library", + .implementor = "NXP Software Ltd.", + .create_effect = android::EffectCreate, + .release_effect = android::EffectRelease, + .get_descriptor = android::EffectGetDescriptor, }; } diff --git a/media/libeffects/preprocessing/Android.mk b/media/libeffects/preprocessing/Android.mk index c344352..9e8cb83 100644 --- a/media/libeffects/preprocessing/Android.mk +++ b/media/libeffects/preprocessing/Android.mk @@ -5,7 +5,7 @@ include $(CLEAR_VARS) LOCAL_MODULE:= libaudiopreprocessing LOCAL_MODULE_TAGS := optional -LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/soundfx +LOCAL_MODULE_RELATIVE_PATH := soundfx LOCAL_SRC_FILES:= \ PreProcessing.cpp diff --git a/media/libeffects/preprocessing/PreProcessing.cpp b/media/libeffects/preprocessing/PreProcessing.cpp index 25586e8..a96a703 100644 --- a/media/libeffects/preprocessing/PreProcessing.cpp +++ b/media/libeffects/preprocessing/PreProcessing.cpp @@ -77,7 +77,7 @@ struct preproc_ops_s { void (* enable)(preproc_effect_t *fx); void (* disable)(preproc_effect_t *fx); int (* set_parameter)(preproc_effect_t *fx, void *param, void *value); - int (* get_parameter)(preproc_effect_t *fx, void *param, size_t *size, void *value); + int (* get_parameter)(preproc_effect_t *fx, void *param, uint32_t *size, void *value); int (* set_device)(preproc_effect_t *fx, uint32_t device); }; @@ -291,7 +291,7 @@ int AgcCreate(preproc_effect_t *effect) int AgcGetParameter(preproc_effect_t *effect, void *pParam, - size_t *pValueSize, + uint32_t *pValueSize, void *pValue) { int status = 0; @@ -452,9 +452,9 @@ int AecCreate(preproc_effect_t *effect) return 0; } -int AecGetParameter(preproc_effect_t *effect, +int AecGetParameter(preproc_effect_t *effect, void *pParam, - size_t *pValueSize, + uint32_t *pValueSize, void *pValue) { int status = 0; @@ -575,9 +575,9 @@ int NsCreate(preproc_effect_t *effect) return 0; } -int NsGetParameter(preproc_effect_t *effect, +int NsGetParameter(preproc_effect_t *effect, void *pParam, - size_t *pValueSize, + uint32_t *pValueSize, void *pValue) { int status = 0; @@ -1233,8 +1233,8 @@ int PreProcessingFx_Process(effect_handle_t self, if (session->framesIn < session->frameCount) { return 0; } - size_t frIn = session->framesIn; - size_t frOut = session->apmFrameCount; + spx_uint32_t frIn = session->framesIn; + spx_uint32_t frOut = session->apmFrameCount; if (session->inChannelCount == 1) { speex_resampler_process_int(session->inResampler, 0, @@ -1290,8 +1290,8 @@ int PreProcessingFx_Process(effect_handle_t self, } if (session->outResampler != NULL) { - size_t frIn = session->apmFrameCount; - size_t frOut = session->frameCount; + spx_uint32_t frIn = session->apmFrameCount; + spx_uint32_t frOut = session->frameCount; if (session->inChannelCount == 1) { speex_resampler_process_int(session->outResampler, 0, @@ -1453,7 +1453,7 @@ int PreProcessingFx_Command(effect_handle_t self, if (effect->ops->get_parameter) { p->status = effect->ops->get_parameter(effect, p->data, - (size_t *)&p->vsize, + &p->vsize, p->data + voffset); *replySize = sizeof(effect_param_t) + voffset + p->vsize; } @@ -1754,8 +1754,8 @@ int PreProcessingFx_ProcessReverse(effect_handle_t self, if (session->framesRev < session->frameCount) { return 0; } - size_t frIn = session->framesRev; - size_t frOut = session->apmFrameCount; + spx_uint32_t frIn = session->framesRev; + spx_uint32_t frOut = session->apmFrameCount; if (session->inChannelCount == 1) { speex_resampler_process_int(session->revResampler, 0, @@ -1892,13 +1892,13 @@ int PreProcessingLib_GetDescriptor(const effect_uuid_t *uuid, // This is the only symbol that needs to be exported __attribute__ ((visibility ("default"))) audio_effect_library_t AUDIO_EFFECT_LIBRARY_INFO_SYM = { - tag : AUDIO_EFFECT_LIBRARY_TAG, - version : EFFECT_LIBRARY_API_VERSION, - name : "Audio Preprocessing Library", - implementor : "The Android Open Source Project", - create_effect : PreProcessingLib_Create, - release_effect : PreProcessingLib_Release, - get_descriptor : PreProcessingLib_GetDescriptor + .tag = AUDIO_EFFECT_LIBRARY_TAG, + .version = EFFECT_LIBRARY_API_VERSION, + .name = "Audio Preprocessing Library", + .implementor = "The Android Open Source Project", + .create_effect = PreProcessingLib_Create, + .release_effect = PreProcessingLib_Release, + .get_descriptor = PreProcessingLib_GetDescriptor }; }; // extern "C" diff --git a/media/libeffects/proxy/Android.mk b/media/libeffects/proxy/Android.mk index a1894b7..b438796 100644 --- a/media/libeffects/proxy/Android.mk +++ b/media/libeffects/proxy/Android.mk @@ -15,7 +15,7 @@ LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE:= libeffectproxy -LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/soundfx +LOCAL_MODULE_RELATIVE_PATH := soundfx LOCAL_MODULE_TAGS := optional diff --git a/media/libeffects/proxy/EffectProxy.cpp b/media/libeffects/proxy/EffectProxy.cpp index f93a143..62d3fd3 100644 --- a/media/libeffects/proxy/EffectProxy.cpp +++ b/media/libeffects/proxy/EffectProxy.cpp @@ -363,11 +363,11 @@ int Effect_getDescriptor(effect_handle_t self, __attribute__ ((visibility ("default"))) audio_effect_library_t AUDIO_EFFECT_LIBRARY_INFO_SYM = { - tag : AUDIO_EFFECT_LIBRARY_TAG, - version : EFFECT_LIBRARY_API_VERSION, - name : "Effect Proxy", - implementor : "AOSP", - create_effect : android::EffectProxyCreate, - release_effect : android::EffectProxyRelease, - get_descriptor : android::EffectProxyGetDescriptor, + .tag = AUDIO_EFFECT_LIBRARY_TAG, + .version = EFFECT_LIBRARY_API_VERSION, + .name = "Effect Proxy", + .implementor = "AOSP", + .create_effect = android::EffectProxyCreate, + .release_effect = android::EffectProxyRelease, + .get_descriptor = android::EffectProxyGetDescriptor, }; diff --git a/media/libeffects/testlibs/Android.mk_ b/media/libeffects/testlibs/Android.mk_ index 2954908..672ebba 100644 --- a/media/libeffects/testlibs/Android.mk_ +++ b/media/libeffects/testlibs/Android.mk_ @@ -11,7 +11,7 @@ LOCAL_CFLAGS+= -O2 LOCAL_SHARED_LIBRARIES := \ libcutils -LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/soundfx +LOCAL_MODULE_RELATIVE_PATH := soundfx LOCAL_MODULE:= libreverbtest ifeq ($(TARGET_OS)-$(TARGET_SIMULATOR),linux-true) @@ -47,7 +47,7 @@ LOCAL_CFLAGS+= -O2 LOCAL_SHARED_LIBRARIES := \ libcutils -LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/soundfx +LOCAL_MODULE_RELATIVE_PATH := soundfx LOCAL_MODULE:= libequalizertest ifeq ($(TARGET_OS)-$(TARGET_SIMULATOR),linux-true) diff --git a/media/libeffects/testlibs/EffectEqualizer.cpp b/media/libeffects/testlibs/EffectEqualizer.cpp index 8d00206..3cb13f2 100644 --- a/media/libeffects/testlibs/EffectEqualizer.cpp +++ b/media/libeffects/testlibs/EffectEqualizer.cpp @@ -115,7 +115,7 @@ struct EqualizerContext { int Equalizer_init(EqualizerContext *pContext); int Equalizer_setConfig(EqualizerContext *pContext, effect_config_t *pConfig); -int Equalizer_getParameter(AudioEqualizer * pEqualizer, int32_t *pParam, size_t *pValueSize, void *pValue); +int Equalizer_getParameter(AudioEqualizer * pEqualizer, int32_t *pParam, uint32_t *pValueSize, void *pValue); int Equalizer_setParameter(AudioEqualizer * pEqualizer, int32_t *pParam, void *pValue); @@ -360,7 +360,7 @@ int Equalizer_init(EqualizerContext *pContext) // //---------------------------------------------------------------------------- -int Equalizer_getParameter(AudioEqualizer * pEqualizer, int32_t *pParam, size_t *pValueSize, void *pValue) +int Equalizer_getParameter(AudioEqualizer * pEqualizer, int32_t *pParam, uint32_t *pValueSize, void *pValue) { int status = 0; int32_t param = *pParam++; @@ -662,8 +662,8 @@ extern "C" int Equalizer_command(effect_handle_t self, uint32_t cmdCode, uint32_ Equalizer_setConfig(pContext, &pContext->config); break; case EFFECT_CMD_GET_PARAM: { - if (pCmdData == NULL || cmdSize < (int)(sizeof(effect_param_t) + sizeof(int32_t)) || - pReplyData == NULL || *replySize < (int) (sizeof(effect_param_t) + sizeof(int32_t))) { + if (pCmdData == NULL || cmdSize < (sizeof(effect_param_t) + sizeof(int32_t)) || + pReplyData == NULL || *replySize < (sizeof(effect_param_t) + sizeof(int32_t))) { return -EINVAL; } effect_param_t *p = (effect_param_t *)pCmdData; @@ -682,7 +682,7 @@ extern "C" int Equalizer_command(effect_handle_t self, uint32_t cmdCode, uint32_ case EFFECT_CMD_SET_PARAM: { ALOGV("Equalizer_command EFFECT_CMD_SET_PARAM cmdSize %d pCmdData %p, *replySize %d, pReplyData %p", cmdSize, pCmdData, *replySize, pReplyData); - if (pCmdData == NULL || cmdSize < (int)(sizeof(effect_param_t) + sizeof(int32_t)) || + if (pCmdData == NULL || cmdSize < (sizeof(effect_param_t) + sizeof(int32_t)) || pReplyData == NULL || *replySize != sizeof(int32_t)) { return -EINVAL; } diff --git a/media/libeffects/testlibs/EffectReverb.c b/media/libeffects/testlibs/EffectReverb.c index c37f392..f056d19 100644 --- a/media/libeffects/testlibs/EffectReverb.c +++ b/media/libeffects/testlibs/EffectReverb.c @@ -750,7 +750,7 @@ void Reverb_Reset(reverb_object_t *pReverb, bool init) { * *---------------------------------------------------------------------------- */ -int Reverb_getParameter(reverb_object_t *pReverb, int32_t param, size_t *pSize, +int Reverb_getParameter(reverb_object_t *pReverb, int32_t param, uint32_t *pSize, void *pValue) { int32_t *pValue32; int16_t *pValue16; @@ -758,7 +758,7 @@ int Reverb_getParameter(reverb_object_t *pReverb, int32_t param, size_t *pSize, int32_t i; int32_t temp; int32_t temp2; - size_t size; + uint32_t size; if (pReverb->m_Preset) { if (param != REVERB_PARAM_PRESET || *pSize < sizeof(int16_t)) { @@ -1033,7 +1033,7 @@ int Reverb_getParameter(reverb_object_t *pReverb, int32_t param, size_t *pSize, * *---------------------------------------------------------------------------- */ -int Reverb_setParameter(reverb_object_t *pReverb, int32_t param, size_t size, +int Reverb_setParameter(reverb_object_t *pReverb, int32_t param, uint32_t size, void *pValue) { int32_t value32; int16_t value16; @@ -1044,7 +1044,7 @@ int Reverb_setParameter(reverb_object_t *pReverb, int32_t param, size_t size, reverb_preset_t *pPreset; int maxSamples; int32_t averageDelay; - size_t paramSize; + uint32_t paramSize; ALOGV("Reverb_setParameter, context %p, param %d, value16 %d, value32 %d", pReverb, param, *(int16_t *)pValue, *(int32_t *)pValue); diff --git a/media/libeffects/testlibs/EffectReverb.h b/media/libeffects/testlibs/EffectReverb.h index e5248fe..756c5ea 100644 --- a/media/libeffects/testlibs/EffectReverb.h +++ b/media/libeffects/testlibs/EffectReverb.h @@ -330,8 +330,8 @@ int Reverb_setConfig(reverb_module_t *pRvbModule, effect_config_t *pConfig, bool void Reverb_getConfig(reverb_module_t *pRvbModule, effect_config_t *pConfig); void Reverb_Reset(reverb_object_t *pReverb, bool init); -int Reverb_setParameter (reverb_object_t *pReverb, int32_t param, size_t size, void *pValue); -int Reverb_getParameter(reverb_object_t *pReverb, int32_t param, size_t *pSize, void *pValue); +int Reverb_setParameter (reverb_object_t *pReverb, int32_t param, uint32_t size, void *pValue); +int Reverb_getParameter(reverb_object_t *pReverb, int32_t param, uint32_t *pSize, void *pValue); /*---------------------------------------------------------------------------- * ReverbUpdateXfade diff --git a/media/libeffects/visualizer/Android.mk b/media/libeffects/visualizer/Android.mk index e196eb2..dd2d306 100644 --- a/media/libeffects/visualizer/Android.mk +++ b/media/libeffects/visualizer/Android.mk @@ -13,7 +13,7 @@ LOCAL_SHARED_LIBRARIES := \ liblog \ libdl -LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/soundfx +LOCAL_MODULE_RELATIVE_PATH := soundfx LOCAL_MODULE:= libvisualizer LOCAL_C_INCLUDES := \ diff --git a/media/libeffects/visualizer/EffectVisualizer.cpp b/media/libeffects/visualizer/EffectVisualizer.cpp index dc403ab..5bdaa03 100644 --- a/media/libeffects/visualizer/EffectVisualizer.cpp +++ b/media/libeffects/visualizer/EffectVisualizer.cpp @@ -544,56 +544,57 @@ int Visualizer_command(effect_handle_t self, uint32_t cmdCode, uint32_t cmdSize, break; - case VISUALIZER_CMD_CAPTURE: - if (pReplyData == NULL || *replySize != pContext->mCaptureSize) { - ALOGV("VISUALIZER_CMD_CAPTURE() error *replySize %d pContext->mCaptureSize %d", - *replySize, pContext->mCaptureSize); + case VISUALIZER_CMD_CAPTURE: { + int32_t captureSize = pContext->mCaptureSize; + if (pReplyData == NULL || *replySize != captureSize) { + ALOGV("VISUALIZER_CMD_CAPTURE() error *replySize %d captureSize %d", + *replySize, captureSize); return -EINVAL; } if (pContext->mState == VISUALIZER_STATE_ACTIVE) { - int32_t latencyMs = pContext->mLatency; const uint32_t deltaMs = Visualizer_getDeltaTimeMsFromUpdatedTime(pContext); - latencyMs -= deltaMs; - if (latencyMs < 0) { - latencyMs = 0; - } - const uint32_t deltaSmpl = pContext->mConfig.inputCfg.samplingRate * latencyMs / 1000; - - int32_t capturePoint = pContext->mCaptureIdx - pContext->mCaptureSize - deltaSmpl; - int32_t captureSize = pContext->mCaptureSize; - if (capturePoint < 0) { - int32_t size = -capturePoint; - if (size > captureSize) { - size = captureSize; - } - memcpy(pReplyData, - pContext->mCaptureBuf + CAPTURE_BUF_SIZE + capturePoint, - size); - pReplyData = (char *)pReplyData + size; - captureSize -= size; - capturePoint = 0; - } - memcpy(pReplyData, - pContext->mCaptureBuf + capturePoint, - captureSize); - // if audio framework has stopped playing audio although the effect is still // active we must clear the capture buffer to return silence if ((pContext->mLastCaptureIdx == pContext->mCaptureIdx) && - (pContext->mBufferUpdateTime.tv_sec != 0)) { - if (deltaMs > MAX_STALL_TIME_MS) { + (pContext->mBufferUpdateTime.tv_sec != 0) && + (deltaMs > MAX_STALL_TIME_MS)) { ALOGV("capture going to idle"); pContext->mBufferUpdateTime.tv_sec = 0; - memset(pReplyData, 0x80, pContext->mCaptureSize); + memset(pReplyData, 0x80, captureSize); + } else { + int32_t latencyMs = pContext->mLatency; + latencyMs -= deltaMs; + if (latencyMs < 0) { + latencyMs = 0; } + const uint32_t deltaSmpl = + pContext->mConfig.inputCfg.samplingRate * latencyMs / 1000; + int32_t capturePoint = pContext->mCaptureIdx - captureSize - deltaSmpl; + + if (capturePoint < 0) { + int32_t size = -capturePoint; + if (size > captureSize) { + size = captureSize; + } + memcpy(pReplyData, + pContext->mCaptureBuf + CAPTURE_BUF_SIZE + capturePoint, + size); + pReplyData = (char *)pReplyData + size; + captureSize -= size; + capturePoint = 0; + } + memcpy(pReplyData, + pContext->mCaptureBuf + capturePoint, + captureSize); } + pContext->mLastCaptureIdx = pContext->mCaptureIdx; } else { - memset(pReplyData, 0x80, pContext->mCaptureSize); + memset(pReplyData, 0x80, captureSize); } - break; + } break; case VISUALIZER_CMD_MEASURE: { uint16_t peakU16 = 0; @@ -678,13 +679,13 @@ const struct effect_interface_s gVisualizerInterface = { // This is the only symbol that needs to be exported __attribute__ ((visibility ("default"))) audio_effect_library_t AUDIO_EFFECT_LIBRARY_INFO_SYM = { - tag : AUDIO_EFFECT_LIBRARY_TAG, - version : EFFECT_LIBRARY_API_VERSION, - name : "Visualizer Library", - implementor : "The Android Open Source Project", - create_effect : VisualizerLib_Create, - release_effect : VisualizerLib_Release, - get_descriptor : VisualizerLib_GetDescriptor, + .tag = AUDIO_EFFECT_LIBRARY_TAG, + .version = EFFECT_LIBRARY_API_VERSION, + .name = "Visualizer Library", + .implementor = "The Android Open Source Project", + .create_effect = VisualizerLib_Create, + .release_effect = VisualizerLib_Release, + .get_descriptor = VisualizerLib_GetDescriptor, }; }; // extern "C" diff --git a/media/libmedia/AudioParameter.cpp b/media/libmedia/AudioParameter.cpp index e3fea77..33dbf0b 100644 --- a/media/libmedia/AudioParameter.cpp +++ b/media/libmedia/AudioParameter.cpp @@ -37,9 +37,10 @@ AudioParameter::AudioParameter(const String8& keyValuePairs) { char *str = new char[keyValuePairs.length()+1]; mKeyValuePairs = keyValuePairs; + char *last; strcpy(str, keyValuePairs.string()); - char *pair = strtok(str, ";"); + char *pair = strtok_r(str, ";", &last); while (pair != NULL) { if (strlen(pair) != 0) { size_t eqIdx = strcspn(pair, "="); @@ -58,7 +59,7 @@ AudioParameter::AudioParameter(const String8& keyValuePairs) } else { ALOGV("AudioParameter() cstor empty key value pair"); } - pair = strtok(NULL, ";"); + pair = strtok_r(NULL, ";", &last); } delete[] str; diff --git a/media/libmedia/AudioSystem.cpp b/media/libmedia/AudioSystem.cpp index 8033c2c..cc5b810 100644 --- a/media/libmedia/AudioSystem.cpp +++ b/media/libmedia/AudioSystem.cpp @@ -370,8 +370,8 @@ status_t AudioSystem::setVoiceVolume(float value) return af->setVoiceVolume(value); } -status_t AudioSystem::getRenderPosition(audio_io_handle_t output, size_t *halFrames, - size_t *dspFrames, audio_stream_type_t stream) +status_t AudioSystem::getRenderPosition(audio_io_handle_t output, uint32_t *halFrames, + uint32_t *dspFrames, audio_stream_type_t stream) { const sp<IAudioFlinger>& af = AudioSystem::get_audio_flinger(); if (af == 0) return PERMISSION_DENIED; diff --git a/media/libmedia/AudioTrack.cpp b/media/libmedia/AudioTrack.cpp index e290627..3f3a88c 100644 --- a/media/libmedia/AudioTrack.cpp +++ b/media/libmedia/AudioTrack.cpp @@ -779,7 +779,7 @@ status_t AudioTrack::getPosition(uint32_t *position) const return NO_ERROR; } -status_t AudioTrack::getBufferPosition(size_t *position) +status_t AudioTrack::getBufferPosition(uint32_t *position) { if (mSharedBuffer == 0 || mIsTimed) { return INVALID_OPERATION; @@ -897,6 +897,12 @@ status_t AudioTrack::createTrack_l( } ALOGV("createTrack_l() output %d afLatency %d", output, afLatency); + if ((flags & AUDIO_OUTPUT_FLAG_FAST) && sampleRate != afSampleRate) { + ALOGW("AUDIO_OUTPUT_FLAG_FAST denied by client due to mismatching sample rate (%d vs %d)", + sampleRate, afSampleRate); + flags = (audio_output_flags_t) (flags & ~AUDIO_OUTPUT_FLAG_FAST); + } + // The client's AudioTrack buffer is divided into n parts for purpose of wakeup by server, where // n = 1 fast track with single buffering; nBuffering is ignored // n = 2 fast track with double buffering @@ -928,7 +934,7 @@ status_t AudioTrack::createTrack_l( // More than 2 channels does not require stronger alignment than stereo alignment <<= 1; } - if (((size_t)sharedBuffer->pointer() & (alignment - 1)) != 0) { + if (((uintptr_t)sharedBuffer->pointer() & (alignment - 1)) != 0) { ALOGE("Invalid buffer alignment: address %p, channel count %u", sharedBuffer->pointer(), mChannelCount); return BAD_VALUE; @@ -1257,7 +1263,7 @@ ssize_t AudioTrack::write(const void* buffer, size_t userSize) if (ssize_t(userSize) < 0 || (buffer == NULL && userSize != 0)) { // Sanity-check: user is most-likely passing an error code, and it would // make the return value ambiguous (actualSize vs error). - ALOGE("AudioTrack::write(buffer=%p, size=%u (%d)", buffer, userSize, userSize); + ALOGE("AudioTrack::write(buffer=%p, size=%zu (%zd)", buffer, userSize, userSize); return BAD_VALUE; } @@ -1798,7 +1804,7 @@ status_t AudioTrack::dump(int fd, const Vector<String16>& args) const snprintf(buffer, 255, " stream type(%d), left - right volume(%f, %f)\n", mStreamType, mVolume[0], mVolume[1]); result.append(buffer); - snprintf(buffer, 255, " format(%d), channel count(%d), frame count(%d)\n", mFormat, + snprintf(buffer, 255, " format(%d), channel count(%d), frame count(%zu)\n", mFormat, mChannelCount, mFrameCount); result.append(buffer); snprintf(buffer, 255, " sample rate(%u), status(%d)\n", mSampleRate, mStatus); diff --git a/media/libmedia/AudioTrackShared.cpp b/media/libmedia/AudioTrackShared.cpp index caa7900..e898109 100644 --- a/media/libmedia/AudioTrackShared.cpp +++ b/media/libmedia/AudioTrackShared.cpp @@ -475,9 +475,14 @@ void StaticAudioTrackClientProxy::flush() void StaticAudioTrackClientProxy::setLoop(size_t loopStart, size_t loopEnd, int loopCount) { + // This can only happen on a 64-bit client + if (loopStart > UINT32_MAX || loopEnd > UINT32_MAX) { + // FIXME Should return an error status + return; + } StaticAudioTrackState newState; - newState.mLoopStart = loopStart; - newState.mLoopEnd = loopEnd; + newState.mLoopStart = (uint32_t) loopStart; + newState.mLoopEnd = (uint32_t) loopEnd; newState.mLoopCount = loopCount; mBufferPosition = loopStart; (void) mMutator.push(newState); @@ -487,7 +492,7 @@ size_t StaticAudioTrackClientProxy::getBufferPosition() { size_t bufferPosition; if (mMutator.ack()) { - bufferPosition = mCblk->u.mStatic.mBufferPosition; + bufferPosition = (size_t) mCblk->u.mStatic.mBufferPosition; if (bufferPosition > mFrameCount) { bufferPosition = mFrameCount; } @@ -622,7 +627,7 @@ void ServerProxy::releaseBuffer(Buffer* buffer) if (half == 0) { half = 1; } - size_t minimum = cblk->mMinimum; + size_t minimum = (size_t) cblk->mMinimum; if (minimum == 0) { minimum = mIsOut ? half : 1; } else if (minimum > half) { @@ -760,7 +765,8 @@ ssize_t StaticAudioTrackServerProxy::pollPosition() mIsShutdown = true; return (ssize_t) NO_INIT; } - mCblk->u.mStatic.mBufferPosition = position; + // This may overflow, but client is not supposed to rely on it + mCblk->u.mStatic.mBufferPosition = (uint32_t) position; } return (ssize_t) position; } @@ -836,7 +842,8 @@ void StaticAudioTrackServerProxy::releaseBuffer(Buffer* buffer) mPosition = newPosition; cblk->mServer += stepCount; - cblk->u.mStatic.mBufferPosition = newPosition; + // This may overflow, but client is not supposed to rely on it + cblk->u.mStatic.mBufferPosition = (uint32_t) newPosition; if (setFlags != 0) { (void) android_atomic_or(setFlags, &cblk->mFlags); // this would be a good place to wake a futex diff --git a/media/libmedia/IAudioFlinger.cpp b/media/libmedia/IAudioFlinger.cpp index acfaea0..86ff8bd 100644 --- a/media/libmedia/IAudioFlinger.cpp +++ b/media/libmedia/IAudioFlinger.cpp @@ -525,7 +525,7 @@ public: return reply.readInt32(); } - virtual status_t getRenderPosition(size_t *halFrames, size_t *dspFrames, + virtual status_t getRenderPosition(uint32_t *halFrames, uint32_t *dspFrames, audio_io_handle_t output) const { Parcel data, reply; @@ -546,7 +546,7 @@ public: return status; } - virtual size_t getInputFramesLost(audio_io_handle_t ioHandle) const + virtual uint32_t getInputFramesLost(audio_io_handle_t ioHandle) const { Parcel data, reply; data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); @@ -1013,8 +1013,8 @@ status_t BnAudioFlinger::onTransact( case GET_RENDER_POSITION: { CHECK_INTERFACE(IAudioFlinger, data, reply); audio_io_handle_t output = (audio_io_handle_t) data.readInt32(); - size_t halFrames; - size_t dspFrames; + uint32_t halFrames; + uint32_t dspFrames; status_t status = getRenderPosition(&halFrames, &dspFrames, output); reply->writeInt32(status); if (status == NO_ERROR) { diff --git a/media/libmedia/MemoryLeakTrackUtil.cpp b/media/libmedia/MemoryLeakTrackUtil.cpp index 6a108ae..f004ca4 100644 --- a/media/libmedia/MemoryLeakTrackUtil.cpp +++ b/media/libmedia/MemoryLeakTrackUtil.cpp @@ -49,7 +49,7 @@ struct MyString8 { } void append(const char *s) { - strcat(mPtr, s); + strncat(mPtr, s, MAX_SIZE - size() - 1); } const char *string() const { @@ -60,6 +60,10 @@ struct MyString8 { return strlen(mPtr); } + void clear() { + *mPtr = '\0'; + } + private: char *mPtr; @@ -139,6 +143,9 @@ void dumpMemoryAddresses(int fd) } } while (moved); + write(fd, result.string(), result.size()); + result.clear(); + for (size_t i = 0; i < count; i++) { AllocEntry *e = &entries[i]; @@ -152,13 +159,14 @@ void dumpMemoryAddresses(int fd) result.append(buffer); } result.append("\n"); + + write(fd, result.string(), result.size()); + result.clear(); } delete[] entries; free_malloc_leak_info(info); } - - write(fd, result.string(), result.size()); } #else diff --git a/media/libmediaplayerservice/MediaPlayerService.cpp b/media/libmediaplayerservice/MediaPlayerService.cpp index 9ac9105..a392b76 100644 --- a/media/libmediaplayerservice/MediaPlayerService.cpp +++ b/media/libmediaplayerservice/MediaPlayerService.cpp @@ -319,7 +319,7 @@ status_t MediaPlayerService::AudioCache::dump(int fd, const Vector<String16>& ar result.append(" AudioCache\n"); if (mHeap != 0) { - snprintf(buffer, 255, " heap base(%p), size(%d), flags(%d)\n", + snprintf(buffer, 255, " heap base(%p), size(%zu), flags(%d)\n", mHeap->getBase(), mHeap->getSize(), mHeap->getFlags()); result.append(buffer); } diff --git a/media/libmediaplayerservice/StagefrightRecorder.cpp b/media/libmediaplayerservice/StagefrightRecorder.cpp index f9d9020..4da74e1 100644 --- a/media/libmediaplayerservice/StagefrightRecorder.cpp +++ b/media/libmediaplayerservice/StagefrightRecorder.cpp @@ -16,6 +16,7 @@ //#define LOG_NDEBUG 0 #define LOG_TAG "StagefrightRecorder" +#include <inttypes.h> #include <utils/Log.h> #include "StagefrightRecorder.h" @@ -1747,15 +1748,15 @@ status_t StagefrightRecorder::dump( result.append(buffer); snprintf(buffer, SIZE, " File format: %d\n", mOutputFormat); result.append(buffer); - snprintf(buffer, SIZE, " Max file size (bytes): %lld\n", mMaxFileSizeBytes); + snprintf(buffer, SIZE, " Max file size (bytes): %" PRId64 "\n", mMaxFileSizeBytes); result.append(buffer); - snprintf(buffer, SIZE, " Max file duration (us): %lld\n", mMaxFileDurationUs); + snprintf(buffer, SIZE, " Max file duration (us): %" PRId64 "\n", mMaxFileDurationUs); result.append(buffer); snprintf(buffer, SIZE, " File offset length (bits): %d\n", mUse64BitFileOffset? 64: 32); result.append(buffer); snprintf(buffer, SIZE, " Interleave duration (us): %d\n", mInterleaveDurationUs); result.append(buffer); - snprintf(buffer, SIZE, " Progress notification: %lld us\n", mTrackEveryTimeDurationUs); + snprintf(buffer, SIZE, " Progress notification: %" PRId64 " us\n", mTrackEveryTimeDurationUs); result.append(buffer); snprintf(buffer, SIZE, " Audio\n"); result.append(buffer); diff --git a/media/libmediaplayerservice/nuplayer/NuPlayer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayer.cpp index f710b55..25d55a3 100644 --- a/media/libmediaplayerservice/nuplayer/NuPlayer.cpp +++ b/media/libmediaplayerservice/nuplayer/NuPlayer.cpp @@ -32,6 +32,8 @@ #include "ATSParser.h" +#include "SoftwareRenderer.h" + #include <cutils/properties.h> // for property_get #include <media/stagefright/foundation/hexdump.h> #include <media/stagefright/foundation/ABuffer.h> @@ -146,6 +148,7 @@ NuPlayer::NuPlayer() : mUIDValid(false), mSourceFlags(0), mVideoIsAVC(false), + mNeedsSwRenderer(false), mAudioEOS(false), mVideoEOS(false), mScanSourcesPending(false), @@ -444,6 +447,7 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) { ALOGV("kWhatStart"); mVideoIsAVC = false; + mNeedsSwRenderer = false; mAudioEOS = false; mVideoEOS = false; mSkipRenderingAudioUntilMediaTimeUs = -1; @@ -680,6 +684,20 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) { notifyListener( MEDIA_SET_VIDEO_SIZE, displayWidth, displayHeight); + + if (mNeedsSwRenderer && mNativeWindow != NULL) { + int32_t colorFormat; + CHECK(codecRequest->findInt32("color-format", &colorFormat)); + + sp<MetaData> meta = new MetaData; + meta->setInt32(kKeyWidth, width); + meta->setInt32(kKeyHeight, height); + meta->setRect(kKeyCropRect, cropLeft, cropTop, cropRight, cropBottom); + meta->setInt32(kKeyColorFormat, colorFormat); + + mRenderer->setSoftRenderer( + new SoftwareRenderer(mNativeWindow->getNativeWindow(), meta)); + } } } else if (what == ACodec::kWhatShutdownCompleted) { ALOGV("%s shutdown completed", audio ? "audio" : "video"); @@ -703,8 +721,13 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) { mRenderer->queueEOS(audio, UNKNOWN_ERROR); } else if (what == ACodec::kWhatDrainThisBuffer) { renderBuffer(audio, codecRequest); - } else if (what != ACodec::kWhatComponentAllocated - && what != ACodec::kWhatComponentConfigured + } else if (what == ACodec::kWhatComponentAllocated) { + if (!audio) { + AString name; + CHECK(codecRequest->findString("componentName", &name)); + mNeedsSwRenderer = name.startsWith("OMX.google."); + } + } else if (what != ACodec::kWhatComponentConfigured && what != ACodec::kWhatBuffersAllocated) { ALOGV("Unhandled codec notification %d '%c%c%c%c'.", what, diff --git a/media/libmediaplayerservice/nuplayer/NuPlayer.h b/media/libmediaplayerservice/nuplayer/NuPlayer.h index 13350f3..590e1f2 100644 --- a/media/libmediaplayerservice/nuplayer/NuPlayer.h +++ b/media/libmediaplayerservice/nuplayer/NuPlayer.h @@ -116,6 +116,7 @@ private: sp<MediaPlayerBase::AudioSink> mAudioSink; sp<Decoder> mVideoDecoder; bool mVideoIsAVC; + bool mNeedsSwRenderer; sp<Decoder> mAudioDecoder; sp<Renderer> mRenderer; diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp index 47834fd..239296e 100644 --- a/media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp +++ b/media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp @@ -16,6 +16,7 @@ //#define LOG_NDEBUG 0 #define LOG_TAG "NuPlayerDriver" +#include <inttypes.h> #include <utils/Log.h> #include "NuPlayerDriver.h" @@ -499,7 +500,7 @@ status_t NuPlayerDriver::dump(int fd, const Vector<String16> &args) const { FILE *out = fdopen(dup(fd), "w"); fprintf(out, " NuPlayer\n"); - fprintf(out, " numFramesTotal(%lld), numFramesDropped(%lld), " + fprintf(out, " numFramesTotal(%" PRId64 "), numFramesDropped(%" PRId64 "), " "percentageDropped(%.2f)\n", mNumFramesTotal, mNumFramesDropped, diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp index 3b2784b..bf5271e 100644 --- a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp +++ b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp @@ -20,6 +20,8 @@ #include "NuPlayerRenderer.h" +#include "SoftwareRenderer.h" + #include <media/stagefright/foundation/ABuffer.h> #include <media/stagefright/foundation/ADebug.h> #include <media/stagefright/foundation/AMessage.h> @@ -34,6 +36,7 @@ NuPlayer::Renderer::Renderer( const sp<AMessage> ¬ify, uint32_t flags) : mAudioSink(sink), + mSoftRenderer(NULL), mNotify(notify), mFlags(flags), mNumFramesWritten(0), @@ -57,6 +60,12 @@ NuPlayer::Renderer::Renderer( } NuPlayer::Renderer::~Renderer() { + delete mSoftRenderer; +} + +void NuPlayer::Renderer::setSoftRenderer(SoftwareRenderer *softRenderer) { + delete mSoftRenderer; + mSoftRenderer = softRenderer; } void NuPlayer::Renderer::queueBuffer( @@ -413,7 +422,12 @@ void NuPlayer::Renderer::onDrainVideoQueue() { ALOGV("video late by %lld us (%.2f secs)", mVideoLateByUs, mVideoLateByUs / 1E6); } else { - ALOGV("rendering video at media time %.2f secs", mediaTimeUs / 1E6); + ALOGV("rendering video at media time %.2f secs", + (mFlags & FLAG_REAL_TIME ? realTimeUs : + (realTimeUs + mAnchorTimeMediaUs - mAnchorTimeRealUs)) / 1E6); + if (mSoftRenderer != NULL) { + mSoftRenderer->render(entry->mBuffer->data(), entry->mBuffer->size(), NULL); + } } entry->mNotifyConsumed->setInt32("render", !tooLate); diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.h b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.h index 94a05ea..9124e03 100644 --- a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.h +++ b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.h @@ -23,6 +23,7 @@ namespace android { struct ABuffer; +class SoftwareRenderer; struct NuPlayer::Renderer : public AHandler { enum Flags { @@ -56,6 +57,8 @@ struct NuPlayer::Renderer : public AHandler { kWhatMediaRenderingStart = 'mdrd', }; + void setSoftRenderer(SoftwareRenderer *softRenderer); + protected: virtual ~Renderer(); @@ -83,6 +86,7 @@ private: static const int64_t kMinPositionUpdateDelayUs; sp<MediaPlayerBase::AudioSink> mAudioSink; + SoftwareRenderer *mSoftRenderer; sp<AMessage> mNotify; uint32_t mFlags; List<QueueEntry> mAudioQueue; diff --git a/media/libmediaplayerservice/nuplayer/mp4/MP4Source.cpp b/media/libmediaplayerservice/nuplayer/mp4/MP4Source.cpp index d31d947..2aae4dd 100644 --- a/media/libmediaplayerservice/nuplayer/mp4/MP4Source.cpp +++ b/media/libmediaplayerservice/nuplayer/mp4/MP4Source.cpp @@ -86,7 +86,7 @@ struct StreamSource : public FragmentedMP4Parser::Source { total += n; } - ALOGV("read %ld bytes at offset %lld", n, mPosition); + ALOGV("read %ld bytes at offset %lld", total, mPosition); mPosition += total; diff --git a/media/libnbaio/MonoPipe.cpp b/media/libnbaio/MonoPipe.cpp index de0ad28..3c61b60 100644 --- a/media/libnbaio/MonoPipe.cpp +++ b/media/libnbaio/MonoPipe.cpp @@ -183,7 +183,7 @@ ssize_t MonoPipe::write(const void *buffer, size_t count) } } if (ns > 0) { - const struct timespec req = {0, ns}; + const struct timespec req = {0, static_cast<long>(ns)}; nanosleep(&req, NULL); } // record the time that this write() completed diff --git a/media/libnbaio/NBLog.cpp b/media/libnbaio/NBLog.cpp index 045bf64..d74a7a6 100644 --- a/media/libnbaio/NBLog.cpp +++ b/media/libnbaio/NBLog.cpp @@ -340,7 +340,7 @@ void NBLog::Reader::dump(int fd, size_t indent) if (i > 0) { lost += i; if (fd >= 0) { - fdprintf(fd, "%*swarning: lost %u bytes worth of events\n", indent, "", lost); + fdprintf(fd, "%*swarning: lost %zu bytes worth of events\n", indent, "", lost); } else { ALOGI("%*swarning: lost %u bytes worth of events\n", indent, "", lost); } diff --git a/media/libstagefright/AACWriter.cpp b/media/libstagefright/AACWriter.cpp index a6f7cfb..c9bcaba 100644 --- a/media/libstagefright/AACWriter.cpp +++ b/media/libstagefright/AACWriter.cpp @@ -171,7 +171,7 @@ status_t AACWriter::reset() { void *dummy; pthread_join(mThread, &dummy); - status_t err = (status_t) dummy; + status_t err = static_cast<status_t>(reinterpret_cast<uintptr_t>(dummy)); { status_t status = mSource->stop(); if (err == OK && @@ -200,7 +200,7 @@ bool AACWriter::exceedsFileDurationLimit() { // static void *AACWriter::ThreadWrapper(void *me) { - return (void *) static_cast<AACWriter *>(me)->threadFunc(); + return (void *)(uintptr_t)static_cast<AACWriter *>(me)->threadFunc(); } /* diff --git a/media/libstagefright/ACodec.cpp b/media/libstagefright/ACodec.cpp index 9276818..a0bde58 100644 --- a/media/libstagefright/ACodec.cpp +++ b/media/libstagefright/ACodec.cpp @@ -3436,7 +3436,7 @@ void ACodec::BaseState::onOutputBufferDrained(const sp<AMessage> &msg) { int32_t render; if (mCodec->mNativeWindow != NULL && msg->findInt32("render", &render) && render != 0 - && (info->mData == NULL || info->mData->size() != 0)) { + && info->mData != NULL && info->mData->size() != 0) { // The client wants this buffer to be rendered. status_t err; diff --git a/media/libstagefright/AMRWriter.cpp b/media/libstagefright/AMRWriter.cpp index 8d5eec8..3fe247a 100644 --- a/media/libstagefright/AMRWriter.cpp +++ b/media/libstagefright/AMRWriter.cpp @@ -162,7 +162,7 @@ status_t AMRWriter::reset() { void *dummy; pthread_join(mThread, &dummy); - status_t err = (status_t) dummy; + status_t err = static_cast<status_t>(reinterpret_cast<uintptr_t>(dummy)); { status_t status = mSource->stop(); if (err == OK && @@ -191,7 +191,7 @@ bool AMRWriter::exceedsFileDurationLimit() { // static void *AMRWriter::ThreadWrapper(void *me) { - return (void *) static_cast<AMRWriter *>(me)->threadFunc(); + return (void *)(uintptr_t) static_cast<AMRWriter *>(me)->threadFunc(); } status_t AMRWriter::threadFunc() { diff --git a/media/libstagefright/AudioSource.cpp b/media/libstagefright/AudioSource.cpp index d7223d9..f0d1a14 100644 --- a/media/libstagefright/AudioSource.cpp +++ b/media/libstagefright/AudioSource.cpp @@ -308,7 +308,7 @@ status_t AudioSource::dataCallback(const AudioRecord::Buffer& audioBuffer) { if (numLostBytes > 0) { // Loss of audio frames should happen rarely; thus the LOGW should // not cause a logging spam - ALOGW("Lost audio record data: %d bytes", numLostBytes); + ALOGW("Lost audio record data: %zu bytes", numLostBytes); } while (numLostBytes > 0) { diff --git a/media/libstagefright/AwesomePlayer.cpp b/media/libstagefright/AwesomePlayer.cpp index 130207d..29c007a 100644 --- a/media/libstagefright/AwesomePlayer.cpp +++ b/media/libstagefright/AwesomePlayer.cpp @@ -19,6 +19,7 @@ //#define LOG_NDEBUG 0 #define LOG_TAG "AwesomePlayer" #define ATRACE_TAG ATRACE_TAG_VIDEO +#include <inttypes.h> #include <utils/Log.h> #include <utils/Trace.h> @@ -725,7 +726,7 @@ void AwesomePlayer::onBufferingUpdate() { if ((mFlags & PLAYING) && !eos && (cachedDataRemaining < kLowWaterMarkBytes)) { - ALOGI("cache is running low (< %d) , pausing.", + ALOGI("cache is running low (< %zu) , pausing.", kLowWaterMarkBytes); modifyFlags(CACHE_UNDERRUN, SET); pause_l(); @@ -734,12 +735,12 @@ void AwesomePlayer::onBufferingUpdate() { notifyListener_l(MEDIA_INFO, MEDIA_INFO_BUFFERING_START); } else if (eos || cachedDataRemaining > kHighWaterMarkBytes) { if (mFlags & CACHE_UNDERRUN) { - ALOGI("cache has filled up (> %d), resuming.", + ALOGI("cache has filled up (> %zu), resuming.", kHighWaterMarkBytes); modifyFlags(CACHE_UNDERRUN, CLEAR); play_l(); } else if (mFlags & PREPARING) { - ALOGV("cache has filled up (> %d), prepare is done", + ALOGV("cache has filled up (> %zu), prepare is done", kHighWaterMarkBytes); finishAsyncPrepare_l(); } @@ -2096,7 +2097,10 @@ void AwesomePlayer::onCheckAudioStatus() { mSeekNotificationSent = true; } - mSeeking = NO_SEEK; + if (mVideoSource == NULL) { + // For video the mSeeking flag is always reset in finishSeekIfNecessary + mSeeking = NO_SEEK; + } notifyIfMediaStarted_l(); } @@ -2292,8 +2296,8 @@ status_t AwesomePlayer::finishSetDataSource_l() { sniffedMIME = tmp.string(); if (meta == NULL - || !meta->findInt64( - "meta-data-size", &metaDataSize)) { + || !meta->findInt64("meta-data-size", + reinterpret_cast<int64_t*>(&metaDataSize))) { metaDataSize = kHighWaterMarkBytes; } @@ -2580,12 +2584,12 @@ status_t AwesomePlayer::getTrackInfo(Parcel *reply) const { status_t AwesomePlayer::selectAudioTrack_l( const sp<MediaSource>& source, size_t trackIndex) { - ALOGI("selectAudioTrack_l: trackIndex=%d, mFlags=0x%x", trackIndex, mFlags); + ALOGI("selectAudioTrack_l: trackIndex=%zu, mFlags=0x%x", trackIndex, mFlags); { Mutex::Autolock autoLock(mStatsLock); if ((ssize_t)trackIndex == mActiveAudioTrackIndex) { - ALOGI("Track %d is active. Does nothing.", trackIndex); + ALOGI("Track %zu is active. Does nothing.", trackIndex); return OK; } //mStats.mFlags = mFlags; @@ -2658,7 +2662,7 @@ status_t AwesomePlayer::selectTrack(size_t trackIndex, bool select) { trackCount += mTextDriver->countExternalTracks(); } if (trackIndex >= trackCount) { - ALOGE("Track index (%d) is out of range [0, %d)", trackIndex, trackCount); + ALOGE("Track index (%zu) is out of range [0, %zu)", trackIndex, trackCount); return ERROR_OUT_OF_RANGE; } @@ -2670,14 +2674,14 @@ status_t AwesomePlayer::selectTrack(size_t trackIndex, bool select) { isAudioTrack = !strncasecmp(mime, "audio/", 6); if (!isAudioTrack && strcasecmp(mime, MEDIA_MIMETYPE_TEXT_3GPP) != 0) { - ALOGE("Track %d is not either audio or timed text", trackIndex); + ALOGE("Track %zu is not either audio or timed text", trackIndex); return ERROR_UNSUPPORTED; } } if (isAudioTrack) { if (!select) { - ALOGE("Deselect an audio track (%d) is not supported", trackIndex); + ALOGE("Deselect an audio track (%zu) is not supported", trackIndex); return ERROR_UNSUPPORTED; } return selectAudioTrack_l(mExtractor->getTrack(trackIndex), trackIndex); @@ -2815,7 +2819,7 @@ status_t AwesomePlayer::dump(int fd, const Vector<String16> &args) const { fprintf(out, ", flags(0x%08x)", mStats.mFlags); if (mStats.mBitrate >= 0) { - fprintf(out, ", bitrate(%lld bps)", mStats.mBitrate); + fprintf(out, ", bitrate(%" PRId64 " bps)", mStats.mBitrate); } fprintf(out, "\n"); @@ -2823,7 +2827,7 @@ status_t AwesomePlayer::dump(int fd, const Vector<String16> &args) const { for (size_t i = 0; i < mStats.mTracks.size(); ++i) { const TrackStat &stat = mStats.mTracks.itemAt(i); - fprintf(out, " Track %d\n", i + 1); + fprintf(out, " Track %zu\n", i + 1); fprintf(out, " MIME(%s)", stat.mMIME.string()); if (!stat.mDecoderName.isEmpty()) { @@ -2835,8 +2839,8 @@ status_t AwesomePlayer::dump(int fd, const Vector<String16> &args) const { if ((ssize_t)i == mStats.mVideoTrackIndex) { fprintf(out, " videoDimensions(%d x %d), " - "numVideoFramesDecoded(%lld), " - "numVideoFramesDropped(%lld)\n", + "numVideoFramesDecoded(%" PRId64 "), " + "numVideoFramesDropped(%" PRId64 ")\n", mStats.mVideoWidth, mStats.mVideoHeight, mStats.mNumVideoFramesDecoded, diff --git a/media/libstagefright/MPEG4Extractor.cpp b/media/libstagefright/MPEG4Extractor.cpp index 4926c1d..6a33ce6 100644 --- a/media/libstagefright/MPEG4Extractor.cpp +++ b/media/libstagefright/MPEG4Extractor.cpp @@ -38,6 +38,9 @@ #include <media/stagefright/MetaData.h> #include <utils/String8.h> +#include <byteswap.h> +#include "include/ID3.h" + namespace android { class MPEG4Source : public MediaSource { @@ -257,7 +260,7 @@ static void hexdump(const void *_data, size_t size) { const uint8_t *data = (const uint8_t *)_data; size_t offset = 0; while (offset < size) { - printf("0x%04x ", offset); + printf("0x%04zx ", offset); size_t n = size - offset; if (n > 16) { @@ -680,8 +683,9 @@ status_t MPEG4Extractor::parseDrmSINF(off64_t *offset, off64_t data_offset) { } sinf->len = dataLen - 3; sinf->IPMPData = new char[sinf->len]; + data_offset += 2; - if (mDataSource->readAt(data_offset + 2, sinf->IPMPData, sinf->len) < sinf->len) { + if (mDataSource->readAt(data_offset, sinf->IPMPData, sinf->len) < sinf->len) { return ERROR_IO; } data_offset += sinf->len; @@ -1635,7 +1639,7 @@ status_t MPEG4Extractor::parseChunk(off64_t *offset, int depth) { case FOURCC('d', 'a', 't', 'a'): { if (mPath.size() == 6 && underMetaDataPath(mPath)) { - status_t err = parseMetaData(data_offset, chunk_data_size); + status_t err = parseITunesMetaData(data_offset, chunk_data_size); if (err != OK) { return err; @@ -1767,6 +1771,35 @@ status_t MPEG4Extractor::parseChunk(off64_t *offset, int depth) { break; } + case FOURCC('t', 'i', 't', 'l'): + case FOURCC('p', 'e', 'r', 'f'): + case FOURCC('a', 'u', 't', 'h'): + case FOURCC('g', 'n', 'r', 'e'): + case FOURCC('a', 'l', 'b', 'm'): + case FOURCC('y', 'r', 'r', 'c'): + { + status_t err = parse3GPPMetaData(data_offset, chunk_data_size, depth); + + if (err != OK) { + return err; + } + + *offset += chunk_size; + break; + } + + case FOURCC('I', 'D', '3', '2'): + { + if (chunk_data_size < 6) { + return ERROR_MALFORMED; + } + + parseID3v2MetaData(data_offset + 6); + + *offset += chunk_size; + break; + } + case FOURCC('-', '-', '-', '-'): { mLastCommentMean.clear(); @@ -2001,7 +2034,7 @@ status_t MPEG4Extractor::parseTrackHeader( return OK; } -status_t MPEG4Extractor::parseMetaData(off64_t offset, size_t size) { +status_t MPEG4Extractor::parseITunesMetaData(off64_t offset, size_t size) { if (size < 4) { return ERROR_MALFORMED; } @@ -2147,7 +2180,7 @@ status_t MPEG4Extractor::parseMetaData(off64_t offset, size_t size) { break; } - if (size >= 8 && metadataKey) { + if (size >= 8 && metadataKey && !mFileMetaData->hasData(metadataKey)) { if (metadataKey == kKeyAlbumArt) { mFileMetaData->setData( kKeyAlbumArt, MetaData::TYPE_NONE, @@ -2188,6 +2221,170 @@ status_t MPEG4Extractor::parseMetaData(off64_t offset, size_t size) { return OK; } +status_t MPEG4Extractor::parse3GPPMetaData(off64_t offset, size_t size, int depth) { + if (size < 4) { + return ERROR_MALFORMED; + } + + uint8_t *buffer = new uint8_t[size]; + if (mDataSource->readAt( + offset, buffer, size) != (ssize_t)size) { + delete[] buffer; + buffer = NULL; + + return ERROR_IO; + } + + uint32_t metadataKey = 0; + switch (mPath[depth]) { + case FOURCC('t', 'i', 't', 'l'): + { + metadataKey = kKeyTitle; + break; + } + case FOURCC('p', 'e', 'r', 'f'): + { + metadataKey = kKeyArtist; + break; + } + case FOURCC('a', 'u', 't', 'h'): + { + metadataKey = kKeyWriter; + break; + } + case FOURCC('g', 'n', 'r', 'e'): + { + metadataKey = kKeyGenre; + break; + } + case FOURCC('a', 'l', 'b', 'm'): + { + if (buffer[size - 1] != '\0') { + char tmp[4]; + sprintf(tmp, "%u", buffer[size - 1]); + + mFileMetaData->setCString(kKeyCDTrackNumber, tmp); + } + + metadataKey = kKeyAlbum; + break; + } + case FOURCC('y', 'r', 'r', 'c'): + { + char tmp[5]; + uint16_t year = U16_AT(&buffer[4]); + + if (year < 10000) { + sprintf(tmp, "%u", year); + + mFileMetaData->setCString(kKeyYear, tmp); + } + break; + } + + default: + break; + } + + if (metadataKey > 0) { + bool isUTF8 = true; // Common case + char16_t *framedata = NULL; + int len16 = 0; // Number of UTF-16 characters + + // smallest possible valid UTF-16 string w BOM: 0xfe 0xff 0x00 0x00 + if (size - 6 >= 4) { + len16 = ((size - 6) / 2) - 1; // don't include 0x0000 terminator + framedata = (char16_t *)(buffer + 6); + if (0xfffe == *framedata) { + // endianness marker (BOM) doesn't match host endianness + for (int i = 0; i < len16; i++) { + framedata[i] = bswap_16(framedata[i]); + } + // BOM is now swapped to 0xfeff, we will execute next block too + } + + if (0xfeff == *framedata) { + // Remove the BOM + framedata++; + len16--; + isUTF8 = false; + } + // else normal non-zero-length UTF-8 string + // we can't handle UTF-16 without BOM as there is no other + // indication of encoding. + } + + if (isUTF8) { + mFileMetaData->setCString(metadataKey, (const char *)buffer + 6); + } else { + // Convert from UTF-16 string to UTF-8 string. + String8 tmpUTF8str(framedata, len16); + mFileMetaData->setCString(metadataKey, tmpUTF8str.string()); + } + } + + delete[] buffer; + buffer = NULL; + + return OK; +} + +void MPEG4Extractor::parseID3v2MetaData(off64_t offset) { + ID3 id3(mDataSource, true /* ignorev1 */, offset); + + if (id3.isValid()) { + struct Map { + int key; + const char *tag1; + const char *tag2; + }; + static const Map kMap[] = { + { kKeyAlbum, "TALB", "TAL" }, + { kKeyArtist, "TPE1", "TP1" }, + { kKeyAlbumArtist, "TPE2", "TP2" }, + { kKeyComposer, "TCOM", "TCM" }, + { kKeyGenre, "TCON", "TCO" }, + { kKeyTitle, "TIT2", "TT2" }, + { kKeyYear, "TYE", "TYER" }, + { kKeyAuthor, "TXT", "TEXT" }, + { kKeyCDTrackNumber, "TRK", "TRCK" }, + { kKeyDiscNumber, "TPA", "TPOS" }, + { kKeyCompilation, "TCP", "TCMP" }, + }; + static const size_t kNumMapEntries = sizeof(kMap) / sizeof(kMap[0]); + + for (size_t i = 0; i < kNumMapEntries; ++i) { + if (!mFileMetaData->hasData(kMap[i].key)) { + ID3::Iterator *it = new ID3::Iterator(id3, kMap[i].tag1); + if (it->done()) { + delete it; + it = new ID3::Iterator(id3, kMap[i].tag2); + } + + if (it->done()) { + delete it; + continue; + } + + String8 s; + it->getString(&s); + delete it; + + mFileMetaData->setCString(kMap[i].key, s); + } + } + + size_t dataSize; + String8 mime; + const void *data = id3.getAlbumArt(&dataSize, &mime); + + if (data) { + mFileMetaData->setData(kKeyAlbumArt, MetaData::TYPE_NONE, data, dataSize); + mFileMetaData->setCString(kKeyAlbumArtMIME, mime.string()); + } + } +} + sp<MediaSource> MPEG4Extractor::getTrack(size_t index) { status_t err; if ((err = readMetaData()) != OK) { diff --git a/media/libstagefright/MPEG4Writer.cpp b/media/libstagefright/MPEG4Writer.cpp index a0f17b5..e7d3cc2 100644 --- a/media/libstagefright/MPEG4Writer.cpp +++ b/media/libstagefright/MPEG4Writer.cpp @@ -16,6 +16,7 @@ //#define LOG_NDEBUG 0 #define LOG_TAG "MPEG4Writer" +#include <inttypes.h> #include <utils/Log.h> #include <arpa/inet.h> @@ -417,7 +418,7 @@ status_t MPEG4Writer::Track::dump( result.append(buffer); snprintf(buffer, SIZE, " frames encoded : %d\n", mStszTableEntries->count()); result.append(buffer); - snprintf(buffer, SIZE, " duration encoded : %lld us\n", mTrackDurationUs); + snprintf(buffer, SIZE, " duration encoded : %" PRId64 " us\n", mTrackDurationUs); result.append(buffer); ::write(fd, result.string(), result.size()); return OK; @@ -1404,7 +1405,7 @@ void MPEG4Writer::Track::addOneSttsTableEntry( size_t sampleCount, int32_t duration) { if (duration == 0) { - ALOGW("0-duration samples found: %d", sampleCount); + ALOGW("0-duration samples found: %zu", sampleCount); } mSttsTableEntries->add(htonl(sampleCount)); mSttsTableEntries->add(htonl(duration)); @@ -1584,7 +1585,7 @@ void MPEG4Writer::writeAllChunks() { sendSessionSummary(); mChunkInfos.clear(); - ALOGD("%d chunks are written in the last batch", outstandingChunks); + ALOGD("%zu chunks are written in the last batch", outstandingChunks); } bool MPEG4Writer::findChunkToWrite(Chunk *chunk) { @@ -1774,7 +1775,7 @@ status_t MPEG4Writer::Track::stop() { void *dummy; pthread_join(mThread, &dummy); - status_t err = (status_t) dummy; + status_t err = static_cast<status_t>(reinterpret_cast<uintptr_t>(dummy)); ALOGD("Stopping %s track source", mIsAudio? "Audio": "Video"); { @@ -1797,7 +1798,7 @@ void *MPEG4Writer::Track::ThreadWrapper(void *me) { Track *track = static_cast<Track *>(me); status_t err = track->threadEntry(); - return (void *) err; + return (void *)(uintptr_t)err; } static void getNalUnitType(uint8_t byte, uint8_t* type) { @@ -1869,7 +1870,7 @@ status_t MPEG4Writer::Track::copyAVCCodecSpecificData( // 2 bytes for each of the parameter set length field // plus the 7 bytes for the header if (size < 4 + 7) { - ALOGE("Codec specific data length too short: %d", size); + ALOGE("Codec specific data length too short: %zu", size); return ERROR_MALFORMED; } @@ -1938,7 +1939,7 @@ status_t MPEG4Writer::Track::parseAVCCodecSpecificData( } if (nSeqParamSets > 0x1F) { - ALOGE("Too many seq parameter sets (%d) found", nSeqParamSets); + ALOGE("Too many seq parameter sets (%zu) found", nSeqParamSets); return ERROR_MALFORMED; } } @@ -1951,7 +1952,7 @@ status_t MPEG4Writer::Track::parseAVCCodecSpecificData( return ERROR_MALFORMED; } if (nPicParamSets > 0xFF) { - ALOGE("Too many pic parameter sets (%d) found", nPicParamSets); + ALOGE("Too many pic parameter sets (%zd) found", nPicParamSets); return ERROR_MALFORMED; } } @@ -1981,7 +1982,7 @@ status_t MPEG4Writer::Track::makeAVCCodecSpecificData( } if (size < 4) { - ALOGE("Codec specific data length too short: %d", size); + ALOGE("Codec specific data length too short: %zu", size); return ERROR_MALFORMED; } diff --git a/media/libstagefright/MediaCodec.cpp b/media/libstagefright/MediaCodec.cpp index c36dd7c..c4c47b3 100644 --- a/media/libstagefright/MediaCodec.cpp +++ b/media/libstagefright/MediaCodec.cpp @@ -746,6 +746,10 @@ void MediaCodec::onMessageReceived(const sp<AMessage> &msg) { CHECK(msg->findInt32("width", &width)); CHECK(msg->findInt32("height", &height)); + int32_t cropLeft, cropTop, cropRight, cropBottom; + CHECK(msg->findRect("crop", + &cropLeft, &cropTop, &cropRight, &cropBottom)); + int32_t colorFormat; CHECK(msg->findInt32( "color-format", &colorFormat)); @@ -753,6 +757,8 @@ void MediaCodec::onMessageReceived(const sp<AMessage> &msg) { sp<MetaData> meta = new MetaData; meta->setInt32(kKeyWidth, width); meta->setInt32(kKeyHeight, height); + meta->setRect(kKeyCropRect, + cropLeft, cropTop, cropRight, cropBottom); meta->setInt32(kKeyColorFormat, colorFormat); mSoftRenderer = @@ -1674,7 +1680,7 @@ status_t MediaCodec::onReleaseOutputBuffer(const sp<AMessage> &msg) { return -EACCES; } - if (render && (info->mData == NULL || info->mData->size() != 0)) { + if (render && info->mData != NULL && info->mData->size() != 0) { info->mNotify->setInt32("render", true); if (mSoftRenderer != NULL) { diff --git a/media/libstagefright/MetaData.cpp b/media/libstagefright/MetaData.cpp index 7b60afc..74234a6 100644 --- a/media/libstagefright/MetaData.cpp +++ b/media/libstagefright/MetaData.cpp @@ -16,6 +16,7 @@ //#define LOG_NDEBUG 0 #define LOG_TAG "MetaData" +#include <inttypes.h> #include <utils/Log.h> #include <stdlib.h> @@ -221,6 +222,16 @@ bool MetaData::findData(uint32_t key, uint32_t *type, return true; } +bool MetaData::hasData(uint32_t key) const { + ssize_t i = mItems.indexOfKey(key); + + if (i < 0) { + return false; + } + + return true; +} + MetaData::typed_data::typed_data() : mType(0), mSize(0) { @@ -297,7 +308,7 @@ String8 MetaData::typed_data::asString() const { const void *data = storage(); switch(mType) { case TYPE_NONE: - out = String8::format("no type, size %d)", mSize); + out = String8::format("no type, size %zu)", mSize); break; case TYPE_C_STRING: out = String8::format("(char*) %s", (const char *)data); @@ -306,7 +317,7 @@ String8 MetaData::typed_data::asString() const { out = String8::format("(int32_t) %d", *(int32_t *)data); break; case TYPE_INT64: - out = String8::format("(int64_t) %lld", *(int64_t *)data); + out = String8::format("(int64_t) %" PRId64, *(int64_t *)data); break; case TYPE_FLOAT: out = String8::format("(float) %f", *(float *)data); @@ -323,7 +334,7 @@ String8 MetaData::typed_data::asString() const { } default: - out = String8::format("(unknown type %d, size %d)", mType, mSize); + out = String8::format("(unknown type %d, size %zu)", mType, mSize); if (mSize <= 48) { // if it's less than three lines of hex data, dump it AString foo; hexdump(data, mSize, 0, &foo); diff --git a/media/libstagefright/StagefrightMetadataRetriever.cpp b/media/libstagefright/StagefrightMetadataRetriever.cpp index 19af4fb..fcd9a85 100644 --- a/media/libstagefright/StagefrightMetadataRetriever.cpp +++ b/media/libstagefright/StagefrightMetadataRetriever.cpp @@ -16,6 +16,7 @@ //#define LOG_NDEBUG 0 #define LOG_TAG "StagefrightMetadataRetriever" +#include <inttypes.h> #include <utils/Log.h> #include "include/StagefrightMetadataRetriever.h" @@ -488,7 +489,7 @@ void StagefrightMetadataRetriever::parseMetaData() { size_t numTracks = mExtractor->countTracks(); char tmp[32]; - sprintf(tmp, "%d", numTracks); + sprintf(tmp, "%zu", numTracks); mMetaData.add(METADATA_KEY_NUM_TRACKS, String8(tmp)); @@ -545,7 +546,7 @@ void StagefrightMetadataRetriever::parseMetaData() { } // The duration value is a string representing the duration in ms. - sprintf(tmp, "%lld", (maxDurationUs + 500) / 1000); + sprintf(tmp, "%" PRId64, (maxDurationUs + 500) / 1000); mMetaData.add(METADATA_KEY_DURATION, String8(tmp)); if (hasAudio) { @@ -573,7 +574,7 @@ void StagefrightMetadataRetriever::parseMetaData() { if (mSource->getSize(&sourceSize) == OK) { int64_t avgBitRate = (int64_t)(sourceSize * 8E6 / maxDurationUs); - sprintf(tmp, "%lld", avgBitRate); + sprintf(tmp, "%" PRId64, avgBitRate); mMetaData.add(METADATA_KEY_BITRATE, String8(tmp)); } } diff --git a/media/libstagefright/TimedEventQueue.cpp b/media/libstagefright/TimedEventQueue.cpp index dedd186..0afac69 100644 --- a/media/libstagefright/TimedEventQueue.cpp +++ b/media/libstagefright/TimedEventQueue.cpp @@ -318,7 +318,7 @@ sp<TimedEventQueue::Event> TimedEventQueue::removeEventFromQueue_l( void TimedEventQueue::acquireWakeLock_l() { - if (mWakeLockCount++ == 0) { + if (mWakeLockCount == 0) { CHECK(mWakeLockToken == 0); if (mPowerManager == 0) { // use checkService() to avoid blocking if power service is not up yet @@ -341,21 +341,23 @@ void TimedEventQueue::acquireWakeLock_l() IPCThreadState::self()->restoreCallingIdentity(token); if (status == NO_ERROR) { mWakeLockToken = binder; + mWakeLockCount++; } } + } else { + mWakeLockCount++; } } void TimedEventQueue::releaseWakeLock_l(bool force) { + if (mWakeLockCount == 0) { + return; + } if (force) { - if (mWakeLockCount == 0) { - return; - } // Force wakelock release below by setting reference count to 1. mWakeLockCount = 1; } - CHECK(mWakeLockCount != 0); if (--mWakeLockCount == 0) { CHECK(mWakeLockToken != 0); if (mPowerManager != 0) { diff --git a/media/libstagefright/WVMExtractor.cpp b/media/libstagefright/WVMExtractor.cpp index 5ae80cc..bc48272 100644 --- a/media/libstagefright/WVMExtractor.cpp +++ b/media/libstagefright/WVMExtractor.cpp @@ -76,7 +76,7 @@ static void init_routine() { gVendorLibHandle = dlopen("libwvm.so", RTLD_NOW); if (gVendorLibHandle == NULL) { - ALOGE("Failed to open libwvm.so"); + ALOGE("Failed to open libwvm.so: %s", dlerror()); } } diff --git a/media/libstagefright/codecs/avc/enc/SoftAVCEncoder.cpp b/media/libstagefright/codecs/avc/enc/SoftAVCEncoder.cpp index 1d66120..1d398fb 100644 --- a/media/libstagefright/codecs/avc/enc/SoftAVCEncoder.cpp +++ b/media/libstagefright/codecs/avc/enc/SoftAVCEncoder.cpp @@ -593,6 +593,17 @@ OMX_ERRORTYPE SoftAVCEncoder::internalSetParameter( mVideoHeight = def->format.video.nFrameHeight; mVideoFrameRate = def->format.video.xFramerate >> 16; mVideoColorFormat = def->format.video.eColorFormat; + + OMX_PARAM_PORTDEFINITIONTYPE *portDef = + &editPortInfo(0)->mDef; + portDef->format.video.nFrameWidth = mVideoWidth; + portDef->format.video.nFrameHeight = mVideoHeight; + portDef->format.video.xFramerate = def->format.video.xFramerate; + portDef->format.video.eColorFormat = + (OMX_COLOR_FORMATTYPE) mVideoColorFormat; + portDef = &editPortInfo(1)->mDef; + portDef->format.video.nFrameWidth = mVideoWidth; + portDef->format.video.nFrameHeight = mVideoHeight; } else { mVideoBitRate = def->format.video.nBitrate; } @@ -871,7 +882,13 @@ void SoftAVCEncoder::onQueueFilled(OMX_U32 portIndex) { CHECK(encoderStatus == AVCENC_SUCCESS || encoderStatus == AVCENC_NEW_IDR); dataLength = outHeader->nAllocLen; // Reset the output buffer length if (inHeader->nFilledLen > 0) { + if (outHeader->nAllocLen >= 4) { + memcpy(outPtr, "\x00\x00\x00\x01", 4); + outPtr += 4; + dataLength -= 4; + } encoderStatus = PVAVCEncodeNAL(mHandle, outPtr, &dataLength, &type); + dataLength = outPtr + dataLength - outHeader->pBuffer; if (encoderStatus == AVCENC_SUCCESS) { CHECK(NULL == PVAVCEncGetOverrunBuffer(mHandle)); } else if (encoderStatus == AVCENC_PICTURE_READY) { diff --git a/media/libstagefright/codecs/avc/enc/src/bitstream_io.cpp b/media/libstagefright/codecs/avc/enc/src/bitstream_io.cpp index 0e3037f..d71c327 100644 --- a/media/libstagefright/codecs/avc/enc/src/bitstream_io.cpp +++ b/media/libstagefright/codecs/avc/enc/src/bitstream_io.cpp @@ -103,6 +103,15 @@ AVCEnc_Status AVCBitstreamSaveWord(AVCEncBitstream *stream) { num_bits -= 8; byte = (current_word >> num_bits) & 0xFF; + if (stream->count_zeros == 2) + { /* for num_bits = 32, this can add 2 more bytes extra for EPBS */ + if (byte <= 3) + { + *write_pnt++ = 0x3; + stream->write_pos++; + stream->count_zeros = 0; + } + } if (byte != 0) { *write_pnt++ = byte; @@ -114,12 +123,6 @@ AVCEnc_Status AVCBitstreamSaveWord(AVCEncBitstream *stream) stream->count_zeros++; *write_pnt++ = byte; stream->write_pos++; - if (stream->count_zeros == 2) - { /* for num_bits = 32, this can add 2 more bytes extra for EPBS */ - *write_pnt++ = 0x3; - stream->write_pos++; - stream->count_zeros = 0; - } } } diff --git a/media/libstagefright/codecs/common/Config.mk b/media/libstagefright/codecs/common/Config.mk index a6d4286..a843cef 100644 --- a/media/libstagefright/codecs/common/Config.mk +++ b/media/libstagefright/codecs/common/Config.mk @@ -14,8 +14,10 @@ VOTT := pc endif # Do we also need to check on ARCH_ARM_HAVE_ARMV7A? - probably not -ifeq ($(ARCH_ARM_HAVE_NEON),true) -VOTT := v7 +ifeq ($(TARGET_ARCH),arm) + ifeq ($(ARCH_ARM_HAVE_NEON),true) + VOTT := v7 + endif endif VOTEST := 0 diff --git a/media/libstagefright/codecs/m4v_h263/dec/src/get_pred_adv_b_add.cpp b/media/libstagefright/codecs/m4v_h263/dec/src/get_pred_adv_b_add.cpp index e23f23d..fe9e7dc 100644 --- a/media/libstagefright/codecs/m4v_h263/dec/src/get_pred_adv_b_add.cpp +++ b/media/libstagefright/codecs/m4v_h263/dec/src/get_pred_adv_b_add.cpp @@ -96,7 +96,7 @@ int GetPredAdvancedBy0x0( offset = width - B_SIZE; /* offset for prev */ offset2 = (pred_width_rnd >> 1) - 4; /* offset for pred_block */ - tmp = (uint32)prev & 0x3; + tmp = (uintptr_t)prev & 0x3; pred_block -= offset2; /* preset */ if (tmp == 0) /* word-aligned */ @@ -203,7 +203,7 @@ int GetPredAdvancedBy0x1( /* Branch based on pixel location (half-pel or full-pel) for x and y */ pred_block -= offset2; /* preset */ - tmp = (uint32)prev & 3; + tmp = (uintptr_t)prev & 3; mask = 254; mask |= (mask << 8); mask |= (mask << 16); /* 0xFEFEFEFE */ @@ -532,7 +532,7 @@ int GetPredAdvancedBy1x0( /* Branch based on pixel location (half-pel or full-pel) for x and y */ pred_block -= offset2; /* preset */ - tmp = (uint32)prev & 3; + tmp = (uintptr_t)prev & 3; mask = 254; mask |= (mask << 8); mask |= (mask << 16); /* 0xFEFEFEFE */ @@ -884,7 +884,7 @@ int GetPredAdvancedBy1x1( mask |= (mask << 8); mask |= (mask << 16); /* 0x3f3f3f3f */ - tmp = (uint32)prev & 3; + tmp = (uintptr_t)prev & 3; pred_block -= 4; /* preset */ diff --git a/media/libstagefright/codecs/m4v_h263/enc/src/dct.cpp b/media/libstagefright/codecs/m4v_h263/enc/src/dct.cpp index fa50eeb..fa4ae23 100644 --- a/media/libstagefright/codecs/m4v_h263/enc/src/dct.cpp +++ b/media/libstagefright/codecs/m4v_h263/enc/src/dct.cpp @@ -250,7 +250,7 @@ extern "C" out[40] = k4 ; /* row 5 */ out++; } - while ((UInt)out < (UInt)dst) ; + while ((uintptr_t)out < (uintptr_t)dst) ; return ; } @@ -455,7 +455,7 @@ extern "C" out[8] = k5 ; /* row 1 */ out++; } - while ((UInt)out < (UInt)dst) ; + while ((uintptr_t)out < (uintptr_t)dst) ; return ; } @@ -635,7 +635,7 @@ extern "C" out[8] = k5 ; /* row 1 */ out++; } - while ((UInt)out < (UInt)dst) ; + while ((uintptr_t)out < (uintptr_t)dst) ; return ; } @@ -846,7 +846,7 @@ extern "C" out[40] = k4 ; /* row 5 */ out++; } - while ((UInt)out < (UInt)dst) ; + while ((uintptr_t)out < (uintptr_t)dst) ; return ; } @@ -1033,7 +1033,7 @@ extern "C" out[8] = k5 ; /* row 1 */ out++; } - while ((UInt)out < (UInt)dst) ; + while ((uintptr_t)out < (uintptr_t)dst) ; return ; } @@ -1195,7 +1195,7 @@ extern "C" out[8] = k5 ; /* row 1 */ out++; } - while ((UInt)out < (UInt)dst) ; + while ((uintptr_t)out < (uintptr_t)dst) ; return ; } diff --git a/media/libstagefright/codecs/m4v_h263/enc/src/fastcodemb.cpp b/media/libstagefright/codecs/m4v_h263/enc/src/fastcodemb.cpp index 6fd41c3..0ad39a6 100644 --- a/media/libstagefright/codecs/m4v_h263/enc/src/fastcodemb.cpp +++ b/media/libstagefright/codecs/m4v_h263/enc/src/fastcodemb.cpp @@ -572,7 +572,7 @@ Int Sad8x8(UChar *cur, UChar *prev, Int width) cur2 = cur2 & (mask << 8); /* mask first and third bytes */ sum2 = sum2 + ((UInt)cur2 >> 8); } - while ((UInt)curInt < (UInt)end); + while ((uintptr_t)curInt < (uintptr_t)end); cur1 = sum4 - (sum2 << 8); /* get even-sum */ cur1 = cur1 + sum2; /* add 16 bit even-sum and odd-sum*/ @@ -611,7 +611,7 @@ Int getBlockSum(UChar *cur, Int width) load2 = load2 & (mask << 8); /* even bytes */ sum2 += ((UInt)load2 >> 8); /* sum even bytes, 16 bit */ } - while ((UInt)curInt < (UInt)end); + while ((uintptr_t)curInt < (uintptr_t)end); load1 = sum4 - (sum2 << 8); /* get even-sum */ load1 = load1 + sum2; /* add 16 bit even-sum and odd-sum*/ load1 = load1 + (load1 << 16); /* add upper and lower 16 bit sum */ diff --git a/media/libstagefright/codecs/m4v_h263/enc/src/motion_comp.cpp b/media/libstagefright/codecs/m4v_h263/enc/src/motion_comp.cpp index b81d278..06e8926 100644 --- a/media/libstagefright/codecs/m4v_h263/enc/src/motion_comp.cpp +++ b/media/libstagefright/codecs/m4v_h263/enc/src/motion_comp.cpp @@ -1959,7 +1959,7 @@ void PutSkippedBlock(UChar *rec, UChar *prev, Int lx) dst += offset; src += offset; } - while ((UInt)src < (UInt)end); + while ((uintptr_t)src < (uintptr_t)end); return ; } diff --git a/media/libstagefright/codecs/m4v_h263/enc/src/sad_inline.h b/media/libstagefright/codecs/m4v_h263/enc/src/sad_inline.h index ba77dfd..b865f23 100644 --- a/media/libstagefright/codecs/m4v_h263/enc/src/sad_inline.h +++ b/media/libstagefright/codecs/m4v_h263/enc/src/sad_inline.h @@ -85,7 +85,7 @@ extern "C" x9 = 0x80808080; /* const. */ - x8 = (uint32)ref & 0x3; + x8 = (uintptr_t)ref & 0x3; if (x8 == 3) goto SadMBOffset3; if (x8 == 2) diff --git a/media/libstagefright/codecs/on2/enc/SoftVPXEncoder.cpp b/media/libstagefright/codecs/on2/enc/SoftVPXEncoder.cpp index 8375cac..5efe022 100644 --- a/media/libstagefright/codecs/on2/enc/SoftVPXEncoder.cpp +++ b/media/libstagefright/codecs/on2/enc/SoftVPXEncoder.cpp @@ -677,6 +677,9 @@ OMX_ERRORTYPE SoftVPXEncoder::internalSetPortParams( def->format.video.nFrameHeight = mHeight; def->format.video.xFramerate = port->format.video.xFramerate; def->format.video.eColorFormat = mColorFormat; + def = &editPortInfo(kOutputPortIndex)->mDef; + def->format.video.nFrameWidth = mWidth; + def->format.video.nFrameHeight = mHeight; return OMX_ErrorNone; } else if (port->nPortIndex == kOutputPortIndex) { diff --git a/media/libstagefright/codecs/on2/h264dec/Android.mk b/media/libstagefright/codecs/on2/h264dec/Android.mk index 655b2ab..bf03ad9 100644 --- a/media/libstagefright/codecs/on2/h264dec/Android.mk +++ b/media/libstagefright/codecs/on2/h264dec/Android.mk @@ -84,8 +84,8 @@ MY_OMXDL_ASM_SRC := \ ./omxdl/arm_neon/vc/m4p10/src_gcc/omxVCM4P10_DequantTransformResidualFromPairAndAdd_s.S \ ./omxdl/arm_neon/vc/m4p10/src_gcc/omxVCM4P10_TransformDequantChromaDCFromPair_s.S \ - -ifeq ($(ARCH_ARM_HAVE_NEON),true) +ifeq ($(TARGET_ARCH),arm) + ifeq ($(ARCH_ARM_HAVE_NEON),true) LOCAL_ARM_NEON := true # LOCAL_CFLAGS := -std=c99 -D._NEON -D._OMXDL LOCAL_CFLAGS := -DH264DEC_NEON -DH264DEC_OMXDL @@ -94,6 +94,7 @@ ifeq ($(ARCH_ARM_HAVE_NEON),true) LOCAL_C_INCLUDES += $(LOCAL_PATH)/./omxdl/arm_neon/api \ $(LOCAL_PATH)/./omxdl/arm_neon/vc/api \ $(LOCAL_PATH)/./omxdl/arm_neon/vc/m4p10/api + endif endif LOCAL_SHARED_LIBRARIES := \ diff --git a/media/libstagefright/codecs/on2/h264dec/source/h264bsd_intra_prediction.c b/media/libstagefright/codecs/on2/h264dec/source/h264bsd_intra_prediction.c index 15eabfb..52c85e5 100755 --- a/media/libstagefright/codecs/on2/h264dec/source/h264bsd_intra_prediction.c +++ b/media/libstagefright/codecs/on2/h264dec/source/h264bsd_intra_prediction.c @@ -1110,7 +1110,7 @@ void Intra16x16PlanePrediction(u8 *data, u8 *above, u8 *left) /* Variables */ - u32 i, j; + i32 i, j; i32 a, b, c; i32 tmp; @@ -1123,20 +1123,20 @@ void Intra16x16PlanePrediction(u8 *data, u8 *above, u8 *left) a = 16 * (above[15] + left[15]); for (i = 0, b = 0; i < 8; i++) - b += ((i32)i + 1) * (above[8+i] - above[6-i]); + b += (i + 1) * (above[8+i] - above[6-i]); b = (5 * b + 32) >> 6; for (i = 0, c = 0; i < 7; i++) - c += ((i32)i + 1) * (left[8+i] - left[6-i]); + c += (i + 1) * (left[8+i] - left[6-i]); /* p[-1,-1] has to be accessed through above pointer */ - c += ((i32)i + 1) * (left[8+i] - above[-1]); + c += (i + 1) * (left[8+i] - above[-1]); c = (5 * c + 32) >> 6; for (i = 0; i < 16; i++) { for (j = 0; j < 16; j++) { - tmp = (a + b * ((i32)j - 7) + c * ((i32)i - 7) + 16) >> 5; + tmp = (a + b * (j - 7) + c * (i - 7) + 16) >> 5; data[i*16+j] = (u8)CLIP1(tmp); } } diff --git a/media/libstagefright/codecs/on2/h264dec/source/h264bsd_util.h b/media/libstagefright/codecs/on2/h264dec/source/h264bsd_util.h index cb3adda..216ad04 100755 --- a/media/libstagefright/codecs/on2/h264dec/source/h264bsd_util.h +++ b/media/libstagefright/codecs/on2/h264dec/source/h264bsd_util.h @@ -42,6 +42,7 @@ #include <stdio.h> #endif +#include <stdint.h> #include "basetype.h" #include "h264bsd_stream.h" #include "h264bsd_image.h" @@ -150,7 +151,7 @@ } #define ALIGN(ptr, bytePos) \ - (ptr + ( ((bytePos - (int)ptr) & (bytePos - 1)) / sizeof(*ptr) )) + (ptr + ( ((bytePos - (uintptr_t)ptr) & (bytePos - 1)) / sizeof(*ptr) )) extern const u32 h264bsdQpC[52]; diff --git a/media/libstagefright/httplive/LiveSession.cpp b/media/libstagefright/httplive/LiveSession.cpp index 687e871..ce2b934 100644 --- a/media/libstagefright/httplive/LiveSession.cpp +++ b/media/libstagefright/httplive/LiveSession.cpp @@ -485,7 +485,7 @@ void LiveSession::onConnect(const sp<AMessage> &msg) { mPlaylist = fetchPlaylist(url.c_str(), NULL /* curPlaylistHash */, &dummy); if (mPlaylist == NULL) { - ALOGE("unable to fetch master playlist '%s'.", url.c_str()); + ALOGE("unable to fetch master playlist <URL suppressed>."); postPrepared(ERROR_IO); return; @@ -760,9 +760,6 @@ sp<M3UParser> LiveSession::fetchPlaylist( // playlist unchanged *unchanged = true; - ALOGV("Playlist unchanged, refresh state is now %d", - (int)mRefreshState); - return NULL; } diff --git a/media/libstagefright/httplive/M3UParser.cpp b/media/libstagefright/httplive/M3UParser.cpp index 8f530ee..ba6bb9a 100644 --- a/media/libstagefright/httplive/M3UParser.cpp +++ b/media/libstagefright/httplive/M3UParser.cpp @@ -625,7 +625,7 @@ status_t M3UParser::parseMetaDataDuration( if (meta->get() == NULL) { *meta = new AMessage; } - (*meta)->setInt64(key, (int64_t)x * 1E6); + (*meta)->setInt64(key, (int64_t)(x * 1E6)); return OK; } @@ -797,8 +797,7 @@ status_t M3UParser::parseCipherInfo( if (MakeURL(baseURI.c_str(), val.c_str(), &absURI)) { val = absURI; } else { - ALOGE("failed to make absolute url for '%s'.", - val.c_str()); + ALOGE("failed to make absolute url for <URL suppressed>."); } } diff --git a/media/libstagefright/id3/ID3.cpp b/media/libstagefright/id3/ID3.cpp index 34d671a..1ec4a40 100644 --- a/media/libstagefright/id3/ID3.cpp +++ b/media/libstagefright/id3/ID3.cpp @@ -56,14 +56,14 @@ private: DISALLOW_EVIL_CONSTRUCTORS(MemorySource); }; -ID3::ID3(const sp<DataSource> &source, bool ignoreV1) +ID3::ID3(const sp<DataSource> &source, bool ignoreV1, off64_t offset) : mIsValid(false), mData(NULL), mSize(0), mFirstFrameOffset(0), mVersion(ID3_UNKNOWN), mRawSize(0) { - mIsValid = parseV2(source); + mIsValid = parseV2(source, offset); if (!mIsValid && !ignoreV1) { mIsValid = parseV1(source); @@ -79,7 +79,7 @@ ID3::ID3(const uint8_t *data, size_t size, bool ignoreV1) mRawSize(0) { sp<MemorySource> source = new MemorySource(data, size); - mIsValid = parseV2(source); + mIsValid = parseV2(source, 0); if (!mIsValid && !ignoreV1) { mIsValid = parseV1(source); @@ -115,7 +115,7 @@ bool ID3::ParseSyncsafeInteger(const uint8_t encoded[4], size_t *x) { return true; } -bool ID3::parseV2(const sp<DataSource> &source) { +bool ID3::parseV2(const sp<DataSource> &source, off64_t offset) { struct id3_header { char id[3]; uint8_t version_major; @@ -126,7 +126,7 @@ struct id3_header { id3_header header; if (source->readAt( - 0, &header, sizeof(header)) != (ssize_t)sizeof(header)) { + offset, &header, sizeof(header)) != (ssize_t)sizeof(header)) { return false; } @@ -185,7 +185,7 @@ struct id3_header { mSize = size; mRawSize = mSize + sizeof(header); - if (source->readAt(sizeof(header), mData, mSize) != (ssize_t)mSize) { + if (source->readAt(offset + sizeof(header), mData, mSize) != (ssize_t)mSize) { free(mData); mData = NULL; diff --git a/media/libstagefright/id3/testid3.cpp b/media/libstagefright/id3/testid3.cpp index bc4572c..b2f4188 100644 --- a/media/libstagefright/id3/testid3.cpp +++ b/media/libstagefright/id3/testid3.cpp @@ -33,7 +33,7 @@ static void hexdump(const void *_data, size_t size) { const uint8_t *data = (const uint8_t *)_data; size_t offset = 0; while (offset < size) { - printf("0x%04x ", offset); + printf("0x%04zx ", offset); size_t n = size - offset; if (n > 16) { @@ -101,7 +101,7 @@ void scanFile(const char *path) { const void *data = tag.getAlbumArt(&dataSize, &mime); if (data) { - printf("found album art: size=%d mime='%s'\n", dataSize, + printf("found album art: size=%zu mime='%s'\n", dataSize, mime.string()); hexdump(data, dataSize > 128 ? 128 : dataSize); diff --git a/media/libstagefright/include/ID3.h b/media/libstagefright/include/ID3.h index cca83ab..e83f3ef 100644 --- a/media/libstagefright/include/ID3.h +++ b/media/libstagefright/include/ID3.h @@ -35,7 +35,7 @@ struct ID3 { ID3_V2_4, }; - ID3(const sp<DataSource> &source, bool ignoreV1 = false); + ID3(const sp<DataSource> &source, bool ignoreV1 = false, off64_t offset = 0); ID3(const uint8_t *data, size_t size, bool ignoreV1 = false); ~ID3(); @@ -86,7 +86,7 @@ private: size_t mRawSize; bool parseV1(const sp<DataSource> &source); - bool parseV2(const sp<DataSource> &source); + bool parseV2(const sp<DataSource> &source, off64_t offset); void removeUnsynchronization(); bool removeUnsynchronizationV2_4(bool iTunesHack); diff --git a/media/libstagefright/include/MPEG4Extractor.h b/media/libstagefright/include/MPEG4Extractor.h index bbec1c4..7b4bc6d 100644 --- a/media/libstagefright/include/MPEG4Extractor.h +++ b/media/libstagefright/include/MPEG4Extractor.h @@ -95,7 +95,9 @@ private: status_t readMetaData(); status_t parseChunk(off64_t *offset, int depth); - status_t parseMetaData(off64_t offset, size_t size); + status_t parseITunesMetaData(off64_t offset, size_t size); + status_t parse3GPPMetaData(off64_t offset, size_t size, int depth); + void parseID3v2MetaData(off64_t offset); status_t updateAudioTrackInfoFromESDS_MPEG4Audio( const void *esds_data, size_t esds_size); diff --git a/media/libstagefright/mpeg2ts/ESQueue.cpp b/media/libstagefright/mpeg2ts/ESQueue.cpp index 8f9c9c8..e0ff0d1 100644 --- a/media/libstagefright/mpeg2ts/ESQueue.cpp +++ b/media/libstagefright/mpeg2ts/ESQueue.cpp @@ -604,7 +604,9 @@ sp<ABuffer> ElementaryStreamQueue::dequeueAccessUnitH264() { dstOffset += pos.nalSize + 4; } +#if !LOG_NDEBUG ALOGV("accessUnit contains nal types %s", out.c_str()); +#endif const NALPosition &pos = nals.itemAt(nals.size() - 1); size_t nextScan = pos.nalOffset + pos.nalSize; diff --git a/media/libstagefright/omx/OMX.cpp b/media/libstagefright/omx/OMX.cpp index 84a0e10..274f2eb 100644 --- a/media/libstagefright/omx/OMX.cpp +++ b/media/libstagefright/omx/OMX.cpp @@ -479,7 +479,7 @@ OMX_ERRORTYPE OMX::OnFillBufferDone( OMX::node_id OMX::makeNodeID(OMXNodeInstance *instance) { // mLock is already held. - node_id node = (node_id)++mNodeCounter; + node_id node = (node_id)(uintptr_t)++mNodeCounter; mNodeIDToInstance.add(node, instance); return node; diff --git a/media/libstagefright/omx/tests/OMXHarness.cpp b/media/libstagefright/omx/tests/OMXHarness.cpp index 4bee808..44e4f9d 100644 --- a/media/libstagefright/omx/tests/OMXHarness.cpp +++ b/media/libstagefright/omx/tests/OMXHarness.cpp @@ -16,6 +16,7 @@ //#define LOG_NDEBUG 0 #define LOG_TAG "OMXHarness" +#include <inttypes.h> #include <utils/Log.h> #include "OMXHarness.h" @@ -711,11 +712,11 @@ status_t Harness::testSeek( int64_t bufferTimeUs; CHECK(buffer->meta_data()->findInt64(kKeyTime, &bufferTimeUs)); if (!CloseEnough(bufferTimeUs, actualSeekTimeUs)) { - printf("\n * Attempted seeking to %lld us (%.2f secs)", + printf("\n * Attempted seeking to %" PRId64 " us (%.2f secs)", requestedSeekTimeUs, requestedSeekTimeUs / 1E6); - printf("\n * Nearest keyframe is at %lld us (%.2f secs)", + printf("\n * Nearest keyframe is at %" PRId64 " us (%.2f secs)", actualSeekTimeUs, actualSeekTimeUs / 1E6); - printf("\n * Returned buffer was at %lld us (%.2f secs)\n\n", + printf("\n * Returned buffer was at %" PRId64 " us (%.2f secs)\n\n", bufferTimeUs, bufferTimeUs / 1E6); buffer->release(); diff --git a/media/libstagefright/rtsp/ARTSPConnection.cpp b/media/libstagefright/rtsp/ARTSPConnection.cpp index 5116550..492bd4a 100644 --- a/media/libstagefright/rtsp/ARTSPConnection.cpp +++ b/media/libstagefright/rtsp/ARTSPConnection.cpp @@ -239,7 +239,7 @@ void ARTSPConnection::onConnect(const sp<AMessage> &msg) { // right here, since we currently have no way of asking the user // for this information. - ALOGE("Malformed rtsp url %s", url.c_str()); + ALOGE("Malformed rtsp url <URL suppressed>"); reply->setInt32("result", ERROR_MALFORMED); reply->post(); @@ -489,7 +489,6 @@ void ARTSPConnection::onReceiveResponse() { FD_SET(mSocket, &rs); int res = select(mSocket + 1, &rs, NULL, NULL, &tv); - CHECK_GE(res, 0); if (res == 1) { MakeSocketBlocking(mSocket, true); diff --git a/media/libstagefright/rtsp/MyHandler.h b/media/libstagefright/rtsp/MyHandler.h index f4b5846..1093b47 100644 --- a/media/libstagefright/rtsp/MyHandler.h +++ b/media/libstagefright/rtsp/MyHandler.h @@ -149,7 +149,7 @@ struct MyHandler : public AHandler { mSessionURL.append(StringPrintf("%u", port)); mSessionURL.append(path); - ALOGI("rewritten session url: '%s'", mSessionURL.c_str()); + ALOGV("rewritten session url: '%s'", mSessionURL.c_str()); } mSessionHost = host; @@ -686,23 +686,27 @@ struct MyHandler : public AHandler { i = response->mHeaders.indexOfKey("transport"); CHECK_GE(i, 0); - if (!track->mUsingInterleavedTCP) { - AString transport = response->mHeaders.valueAt(i); - - // We are going to continue even if we were - // unable to poke a hole into the firewall... - pokeAHole( - track->mRTPSocket, - track->mRTCPSocket, - transport); - } + if (track->mRTPSocket != -1 && track->mRTCPSocket != -1) { + if (!track->mUsingInterleavedTCP) { + AString transport = response->mHeaders.valueAt(i); + + // We are going to continue even if we were + // unable to poke a hole into the firewall... + pokeAHole( + track->mRTPSocket, + track->mRTCPSocket, + transport); + } - mRTPConn->addStream( - track->mRTPSocket, track->mRTCPSocket, - mSessionDesc, index, - notify, track->mUsingInterleavedTCP); + mRTPConn->addStream( + track->mRTPSocket, track->mRTCPSocket, + mSessionDesc, index, + notify, track->mUsingInterleavedTCP); - mSetupTracksSuccessful = true; + mSetupTracksSuccessful = true; + } else { + result = BAD_VALUE; + } } } @@ -726,7 +730,7 @@ struct MyHandler : public AHandler { } ++index; - if (index < mSessionDesc->countTracks()) { + if (result == OK && index < mSessionDesc->countTracks()) { setupTrack(index); } else if (mSetupTracksSuccessful) { ++mKeepAliveGeneration; @@ -1559,6 +1563,8 @@ private: info->mUsingInterleavedTCP = false; info->mFirstSeqNumInSegment = 0; info->mNewSegment = true; + info->mRTPSocket = -1; + info->mRTCPSocket = -1; info->mRTPAnchor = 0; info->mNTPAnchorUs = -1; info->mNormalPlayTimeRTP = 0; diff --git a/media/libstagefright/rtsp/SDPLoader.cpp b/media/libstagefright/rtsp/SDPLoader.cpp index ed3fa7e..3c7d82a 100644 --- a/media/libstagefright/rtsp/SDPLoader.cpp +++ b/media/libstagefright/rtsp/SDPLoader.cpp @@ -95,7 +95,7 @@ void SDPLoader::onLoad(const sp<AMessage> &msg) { msg->findPointer("headers", (void **)&headers); if (!(mFlags & kFlagIncognito)) { - ALOGI("onLoad '%s'", url.c_str()); + ALOGV("onLoad '%s'", url.c_str()); } else { ALOGI("onLoad <URL suppressed>"); } diff --git a/media/libstagefright/tests/DummyRecorder.cpp b/media/libstagefright/tests/DummyRecorder.cpp index ac37b28..8f17088 100644 --- a/media/libstagefright/tests/DummyRecorder.cpp +++ b/media/libstagefright/tests/DummyRecorder.cpp @@ -61,7 +61,7 @@ status_t DummyRecorder::stop() { mSource->stop(); void *dummy; pthread_join(mThread, &dummy); - status_t err = (status_t) dummy; + status_t err = static_cast<status_t>(reinterpret_cast<uintptr_t>(dummy)); ALOGV("Ending the reading thread"); return err; diff --git a/media/libstagefright/wifi-display/source/TSPacketizer.cpp b/media/libstagefright/wifi-display/source/TSPacketizer.cpp index eeb3700..50d317a 100644 --- a/media/libstagefright/wifi-display/source/TSPacketizer.cpp +++ b/media/libstagefright/wifi-display/source/TSPacketizer.cpp @@ -565,7 +565,7 @@ status_t TSPacketizer::packetize( } } - // size_t numPaddingBytes = sizeAvailableForPayload - numBytesOfPayload; + size_t numPaddingBytes = sizeAvailableForPayload - numBytesOfPayload; ALOGV("packet 1 contains %zd padding bytes and %zd bytes of payload", numPaddingBytes, numBytesOfPayload); diff --git a/media/mtp/MtpDataPacket.cpp b/media/mtp/MtpDataPacket.cpp index 930f0b0..c4f87a0 100644 --- a/media/mtp/MtpDataPacket.cpp +++ b/media/mtp/MtpDataPacket.cpp @@ -331,7 +331,7 @@ void MtpDataPacket::putString(const char* s) { void MtpDataPacket::putString(const uint16_t* string) { int count = 0; - for (int i = 0; i < 256; i++) { + for (int i = 0; i <= MTP_STRING_MAX_CHARACTER_NUMBER; i++) { if (string[i]) count++; else diff --git a/media/mtp/MtpProperty.cpp b/media/mtp/MtpProperty.cpp index 64dd45b..375ed9a 100644 --- a/media/mtp/MtpProperty.cpp +++ b/media/mtp/MtpProperty.cpp @@ -16,6 +16,7 @@ #define LOG_TAG "MtpProperty" +#include <inttypes.h> #include "MtpDataPacket.h" #include "MtpDebug.h" #include "MtpProperty.h" @@ -385,10 +386,10 @@ void MtpProperty::print(MtpPropertyValue& value, MtpString& buffer) { buffer.appendFormat("%d", value.u.u32); break; case MTP_TYPE_INT64: - buffer.appendFormat("%lld", value.u.i64); + buffer.appendFormat("%" PRId64, value.u.i64); break; case MTP_TYPE_UINT64: - buffer.appendFormat("%lld", value.u.u64); + buffer.appendFormat("%" PRIu64, value.u.u64); break; case MTP_TYPE_INT128: buffer.appendFormat("%08X%08X%08X%08X", value.u.i128[0], value.u.i128[1], diff --git a/media/mtp/MtpStringBuffer.cpp b/media/mtp/MtpStringBuffer.cpp index fe8cf04..f3420a4 100644 --- a/media/mtp/MtpStringBuffer.cpp +++ b/media/mtp/MtpStringBuffer.cpp @@ -56,42 +56,47 @@ MtpStringBuffer::~MtpStringBuffer() { } void MtpStringBuffer::set(const char* src) { - int length = strlen(src); - if (length >= sizeof(mBuffer)) - length = sizeof(mBuffer) - 1; - memcpy(mBuffer, src, length); - // count the characters int count = 0; char ch; - while ((ch = *src++) != 0) { + char* dest = (char*)mBuffer; + + while ((ch = *src++) != 0 && count < MTP_STRING_MAX_CHARACTER_NUMBER) { if ((ch & 0x80) == 0) { // single byte character + *dest++ = ch; } else if ((ch & 0xE0) == 0xC0) { // two byte character - if (! *src++) { + char ch1 = *src++; + if (! ch1) { // last character was truncated, so ignore last byte - length--; break; } + + *dest++ = ch; + *dest++ = ch1; } else if ((ch & 0xF0) == 0xE0) { // 3 byte char - if (! *src++) { + char ch1 = *src++; + if (! ch1) { // last character was truncated, so ignore last byte - length--; break; } - if (! *src++) { - // last character was truncated, so ignore last two bytes - length -= 2; + char ch2 = *src++; + if (! ch2) { + // last character was truncated, so ignore last byte break; } + + *dest++ = ch; + *dest++ = ch1; + *dest++ = ch2; } count++; } - mByteCount = length + 1; - mBuffer[length] = 0; + *dest++ = 0; + mByteCount = dest - (char*)mBuffer; mCharCount = count; } @@ -100,7 +105,7 @@ void MtpStringBuffer::set(const uint16_t* src) { uint16_t ch; uint8_t* dest = mBuffer; - while ((ch = *src++) != 0 && count < 255) { + while ((ch = *src++) != 0 && count < MTP_STRING_MAX_CHARACTER_NUMBER) { if (ch >= 0x0800) { *dest++ = (uint8_t)(0xE0 | (ch >> 12)); *dest++ = (uint8_t)(0x80 | ((ch >> 6) & 0x3F)); diff --git a/media/mtp/MtpStringBuffer.h b/media/mtp/MtpStringBuffer.h index cbc8307..e5150df 100644 --- a/media/mtp/MtpStringBuffer.h +++ b/media/mtp/MtpStringBuffer.h @@ -19,6 +19,9 @@ #include <stdint.h> +// Max Character number of a MTP String +#define MTP_STRING_MAX_CHARACTER_NUMBER 255 + namespace android { class MtpDataPacket; @@ -29,7 +32,7 @@ class MtpStringBuffer { private: // mBuffer contains string in UTF8 format // maximum 3 bytes/character, with 1 extra for zero termination - uint8_t mBuffer[255 * 3 + 1]; + uint8_t mBuffer[MTP_STRING_MAX_CHARACTER_NUMBER * 3 + 1]; int mCharCount; int mByteCount; diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp index acbd19a..26dac95 100644 --- a/services/audioflinger/AudioFlinger.cpp +++ b/services/audioflinger/AudioFlinger.cpp @@ -1012,7 +1012,7 @@ size_t AudioFlinger::getInputBufferSize(uint32_t sampleRate, audio_format_t form return size; } -unsigned int AudioFlinger::getInputFramesLost(audio_io_handle_t ioHandle) const +uint32_t AudioFlinger::getInputFramesLost(audio_io_handle_t ioHandle) const { Mutex::Autolock _l(mLock); @@ -1044,7 +1044,7 @@ status_t AudioFlinger::setVoiceVolume(float value) return ret; } -status_t AudioFlinger::getRenderPosition(size_t *halFrames, size_t *dspFrames, +status_t AudioFlinger::getRenderPosition(uint32_t *halFrames, uint32_t *dspFrames, audio_io_handle_t output) const { status_t status; diff --git a/services/audioflinger/AudioFlinger.h b/services/audioflinger/AudioFlinger.h index 53e238e..7320144 100644 --- a/services/audioflinger/AudioFlinger.h +++ b/services/audioflinger/AudioFlinger.h @@ -186,10 +186,10 @@ public: virtual status_t setVoiceVolume(float volume); - virtual status_t getRenderPosition(size_t *halFrames, size_t *dspFrames, + virtual status_t getRenderPosition(uint32_t *halFrames, uint32_t *dspFrames, audio_io_handle_t output) const; - virtual unsigned int getInputFramesLost(audio_io_handle_t ioHandle) const; + virtual uint32_t getInputFramesLost(audio_io_handle_t ioHandle) const; virtual int newAudioSessionId(); diff --git a/services/audioflinger/AudioMixer.cpp b/services/audioflinger/AudioMixer.cpp index 07dc6dd..f92421e 100644 --- a/services/audioflinger/AudioMixer.cpp +++ b/services/audioflinger/AudioMixer.cpp @@ -421,15 +421,16 @@ void AudioMixer::setParameter(int name, int target, int param, void *value) ALOG_ASSERT(uint32_t(name) < MAX_NUM_TRACKS, "bad track name %d", name); track_t& track = mState.tracks[name]; - int valueInt = (int)value; - int32_t *valueBuf = (int32_t *)value; + int valueInt = static_cast<int>(reinterpret_cast<uintptr_t>(value)); + int32_t *valueBuf = reinterpret_cast<int32_t*>(value); switch (target) { case TRACK: switch (param) { case CHANNEL_MASK: { - audio_channel_mask_t mask = (audio_channel_mask_t) value; + audio_channel_mask_t mask = + static_cast<audio_channel_mask_t>(reinterpret_cast<uintptr_t>(value)); if (track.channelMask != mask) { uint32_t channelCount = popcount(mask); ALOG_ASSERT((channelCount <= MAX_NUM_CHANNELS_TO_DOWNMIX) && channelCount); diff --git a/services/audioflinger/AudioPolicyService.cpp b/services/audioflinger/AudioPolicyService.cpp index 35e816b..646a317 100644 --- a/services/audioflinger/AudioPolicyService.cpp +++ b/services/audioflinger/AudioPolicyService.cpp @@ -1433,6 +1433,14 @@ status_t AudioPolicyService::loadPreProcessorConfig(const char *path) loadEffects(root, effects); loadInputSources(root, effects); + // delete effects to fix memory leak. + // as effects is local var and valgrind would treat this as memory leak + // and although it only did in mediaserver init, but free it in case mediaserver reboot + size_t i; + for (i = 0; i < effects.size(); i++) { + delete effects[i]; + } + config_free(root); free(root); free(data); diff --git a/services/audioflinger/AudioResampler.cpp b/services/audioflinger/AudioResampler.cpp index 2c3c719..e5cceb1 100644 --- a/services/audioflinger/AudioResampler.cpp +++ b/services/audioflinger/AudioResampler.cpp @@ -526,7 +526,7 @@ void AudioResamplerOrder1::AsmMono16Loop(int16_t *in, int32_t* maxOutPt, int32_t " ldr r8, [sp, #" MO_PARAM5 " + 4]\n" // out " ldr r0, [sp, #" MO_PARAM5 " + 0]\n" // &outputIndex " ldr r0, [r0]\n" // outputIndex - " add r8, r0, asl #2\n" // curOut + " add r8, r8, r0, asl #2\n" // curOut " ldr r9, [sp, #" MO_PARAM5 " + 24]\n" // phaseIncrement " ldr r10, [sp, #" MO_PARAM5 " + 12]\n" // vl " ldr r11, [sp, #" MO_PARAM5 " + 16]\n" // vr @@ -636,7 +636,7 @@ void AudioResamplerOrder1::AsmStereo16Loop(int16_t *in, int32_t* maxOutPt, int32 " ldr r8, [sp, #" ST_PARAM5 " + 4]\n" // out " ldr r0, [sp, #" ST_PARAM5 " + 0]\n" // &outputIndex " ldr r0, [r0]\n" // outputIndex - " add r8, r0, asl #2\n" // curOut + " add r8, r8, r0, asl #2\n" // curOut " ldr r9, [sp, #" ST_PARAM5 " + 24]\n" // phaseIncrement " ldr r10, [sp, #" ST_PARAM5 " + 12]\n" // vl " ldr r11, [sp, #" ST_PARAM5 " + 16]\n" // vr diff --git a/services/audioflinger/Configuration.h b/services/audioflinger/Configuration.h index bc2038a..0754d9d 100644 --- a/services/audioflinger/Configuration.h +++ b/services/audioflinger/Configuration.h @@ -32,9 +32,6 @@ // uncomment to enable fast mixer to take performance samples for later statistical analysis #define FAST_MIXER_STATISTICS -// uncomment to allow fast tracks at non-native sample rate -//#define FAST_TRACKS_AT_NON_NATIVE_SAMPLE_RATE - // uncomment for debugging timing problems related to StateQueue::push() //#define STATE_QUEUE_DUMP diff --git a/services/audioflinger/Effects.cpp b/services/audioflinger/Effects.cpp index a8a5169..010e233 100644 --- a/services/audioflinger/Effects.cpp +++ b/services/audioflinger/Effects.cpp @@ -820,8 +820,8 @@ void AudioFlinger::EffectModule::dump(int fd, const Vector<String16>& args) } result.append("\t\tSession Status State Engine:\n"); - snprintf(buffer, SIZE, "\t\t%05d %03d %03d 0x%08x\n", - mSessionId, mStatus, mState, (uint32_t)mEffectInterface); + snprintf(buffer, SIZE, "\t\t%05d %03d %03d %p\n", + mSessionId, mStatus, mState, mEffectInterface); result.append(buffer); result.append("\t\tDescriptor:\n"); @@ -850,26 +850,26 @@ void AudioFlinger::EffectModule::dump(int fd, const Vector<String16>& args) result.append(buffer); result.append("\t\t- Input configuration:\n"); - result.append("\t\t\tBuffer Frames Smp rate Channels Format\n"); - snprintf(buffer, SIZE, "\t\t\t0x%08x %05d %05d %08x %d\n", - (uint32_t)mConfig.inputCfg.buffer.raw, + result.append("\t\t\tFrames Smp rate Channels Format Buffer\n"); + snprintf(buffer, SIZE, "\t\t\t%05zu %05d %08x %6d %p\n", mConfig.inputCfg.buffer.frameCount, mConfig.inputCfg.samplingRate, mConfig.inputCfg.channels, - mConfig.inputCfg.format); + mConfig.inputCfg.format, + mConfig.inputCfg.buffer.raw); result.append(buffer); result.append("\t\t- Output configuration:\n"); result.append("\t\t\tBuffer Frames Smp rate Channels Format\n"); - snprintf(buffer, SIZE, "\t\t\t0x%08x %05d %05d %08x %d\n", - (uint32_t)mConfig.outputCfg.buffer.raw, + snprintf(buffer, SIZE, "\t\t\t%p %05zu %05d %08x %d\n", + mConfig.outputCfg.buffer.raw, mConfig.outputCfg.buffer.frameCount, mConfig.outputCfg.samplingRate, mConfig.outputCfg.channels, mConfig.outputCfg.format); result.append(buffer); - snprintf(buffer, SIZE, "\t\t%d Clients:\n", mHandles.size()); + snprintf(buffer, SIZE, "\t\t%zu Clients:\n", mHandles.size()); result.append(buffer); result.append("\t\t\tPid Priority Ctrl Locked client server\n"); for (size_t i = 0; i < mHandles.size(); ++i) { @@ -1578,10 +1578,10 @@ void AudioFlinger::EffectChain::dump(int fd, const Vector<String16>& args) } result.append("\tNum fx In buffer Out buffer Active tracks:\n"); - snprintf(buffer, SIZE, "\t%02d 0x%08x 0x%08x %d\n", + snprintf(buffer, SIZE, "\t%02zu %p %p %d\n", mEffects.size(), - (uint32_t)mInBuffer, - (uint32_t)mOutBuffer, + mInBuffer, + mOutBuffer, mActiveTrackCnt); result.append(buffer); write(fd, result.string(), result.size()); diff --git a/services/audioflinger/FastMixer.cpp b/services/audioflinger/FastMixer.cpp index f27ea17..85d637e 100644 --- a/services/audioflinger/FastMixer.cpp +++ b/services/audioflinger/FastMixer.cpp @@ -236,7 +236,6 @@ bool FastMixer::threadLoop() sampleRate = Format_sampleRate(format); ALOG_ASSERT(Format_channelCount(format) == FCC_2); } - dumpState->mSampleRate = sampleRate; } if ((format != previousFormat) || (frameCount != previous->mFrameCount)) { @@ -321,12 +320,8 @@ bool FastMixer::threadLoop() mixer->setParameter(name, AudioMixer::TRACK, AudioMixer::MAIN_BUFFER, (void *) mixBuffer); // newly allocated track names default to full scale volume - if (fastTrack->mSampleRate != 0 && fastTrack->mSampleRate != sampleRate) { - mixer->setParameter(name, AudioMixer::RESAMPLE, - AudioMixer::SAMPLE_RATE, (void*) fastTrack->mSampleRate); - } mixer->setParameter(name, AudioMixer::TRACK, AudioMixer::CHANNEL_MASK, - (void *) fastTrack->mChannelMask); + (void *)(uintptr_t)fastTrack->mChannelMask); mixer->enable(name); } generations[i] = fastTrack->mGeneration; @@ -353,16 +348,10 @@ bool FastMixer::threadLoop() mixer->setParameter(name, AudioMixer::VOLUME, AudioMixer::VOLUME1, (void *)0x1000); } - if (fastTrack->mSampleRate != 0 && - fastTrack->mSampleRate != sampleRate) { - mixer->setParameter(name, AudioMixer::RESAMPLE, - AudioMixer::SAMPLE_RATE, (void*) fastTrack->mSampleRate); - } else { - mixer->setParameter(name, AudioMixer::RESAMPLE, - AudioMixer::REMOVE, NULL); - } + mixer->setParameter(name, AudioMixer::RESAMPLE, + AudioMixer::REMOVE, NULL); mixer->setParameter(name, AudioMixer::TRACK, AudioMixer::CHANNEL_MASK, - (void *) fastTrack->mChannelMask); + (void *)(uintptr_t) fastTrack->mChannelMask); // already enabled } generations[i] = fastTrack->mGeneration; @@ -392,16 +381,8 @@ bool FastMixer::threadLoop() // Refresh the per-track timestamp if (timestampStatus == NO_ERROR) { - uint32_t trackFramesWrittenButNotPresented; - uint32_t trackSampleRate = fastTrack->mSampleRate; - // There is currently no sample rate conversion for fast tracks currently - if (trackSampleRate != 0 && trackSampleRate != sampleRate) { - trackFramesWrittenButNotPresented = - ((int64_t) nativeFramesWrittenButNotPresented * trackSampleRate) / - sampleRate; - } else { - trackFramesWrittenButNotPresented = nativeFramesWrittenButNotPresented; - } + uint32_t trackFramesWrittenButNotPresented = + nativeFramesWrittenButNotPresented; uint32_t trackFramesWritten = fastTrack->mBufferProvider->framesReleased(); // Can't provide an AudioTimestamp before first frame presented, // or during the brief 32-bit wraparound window @@ -419,9 +400,9 @@ bool FastMixer::threadLoop() if (fastTrack->mVolumeProvider != NULL) { uint32_t vlr = fastTrack->mVolumeProvider->getVolumeLR(); mixer->setParameter(name, AudioMixer::VOLUME, AudioMixer::VOLUME0, - (void *)(vlr & 0xFFFF)); + (void *)(uintptr_t)(vlr & 0xFFFF)); mixer->setParameter(name, AudioMixer::VOLUME, AudioMixer::VOLUME1, - (void *)(vlr >> 16)); + (void *)(uintptr_t)(vlr >> 16)); } // FIXME The current implementation of framesReady() for fast tracks // takes a tryLock, which can block @@ -750,7 +731,7 @@ void FastMixerDumpState::dump(int fd) const double mixPeriodSec = (double) mFrameCount / (double) mSampleRate; fdprintf(fd, "FastMixer command=%s writeSequence=%u framesWritten=%u\n" " numTracks=%u writeErrors=%u underruns=%u overruns=%u\n" - " sampleRate=%u frameCount=%u measuredWarmup=%.3g ms, warmupCycles=%u\n" + " sampleRate=%u frameCount=%zu measuredWarmup=%.3g ms, warmupCycles=%u\n" " mixPeriod=%.2f ms\n", string, mWriteSequence, mFramesWritten, mNumTracks, mWriteErrors, mUnderruns, mOverruns, @@ -864,7 +845,7 @@ void FastMixerDumpState::dump(int fd) const mostRecent = "?"; break; } - fdprintf(fd, "%5u %6s %4u %7u %5u %7s %5u\n", i, isActive ? "yes" : "no", + fdprintf(fd, "%5u %6s %4u %7u %5u %7s %5zu\n", i, isActive ? "yes" : "no", (underruns.mBitFields.mFull) & UNDERRUN_MASK, (underruns.mBitFields.mPartial) & UNDERRUN_MASK, (underruns.mBitFields.mEmpty) & UNDERRUN_MASK, diff --git a/services/audioflinger/FastMixerState.cpp b/services/audioflinger/FastMixerState.cpp index 737de97..43ff233 100644 --- a/services/audioflinger/FastMixerState.cpp +++ b/services/audioflinger/FastMixerState.cpp @@ -20,7 +20,7 @@ namespace android { FastTrack::FastTrack() : - mBufferProvider(NULL), mVolumeProvider(NULL), mSampleRate(0), + mBufferProvider(NULL), mVolumeProvider(NULL), mChannelMask(AUDIO_CHANNEL_OUT_STEREO), mGeneration(0) { } diff --git a/services/audioflinger/FastMixerState.h b/services/audioflinger/FastMixerState.h index f6e7903..9739fe9 100644 --- a/services/audioflinger/FastMixerState.h +++ b/services/audioflinger/FastMixerState.h @@ -43,7 +43,6 @@ struct FastTrack { ExtendedAudioBufferProvider* mBufferProvider; // must be NULL if inactive, or non-NULL if active VolumeProvider* mVolumeProvider; // optional; if NULL then full-scale - unsigned mSampleRate; // optional; if zero then use mixer sample rate audio_channel_mask_t mChannelMask; // AUDIO_CHANNEL_OUT_MONO or AUDIO_CHANNEL_OUT_STEREO int mGeneration; // increment when any field is assigned }; diff --git a/services/audioflinger/StateQueue.cpp b/services/audioflinger/StateQueue.cpp index c2d3bbd..48399c0 100644 --- a/services/audioflinger/StateQueue.cpp +++ b/services/audioflinger/StateQueue.cpp @@ -58,7 +58,11 @@ template<typename T> StateQueue<T>::~StateQueue() template<typename T> const T* StateQueue<T>::poll() { +#ifdef __LP64__ + const T *next = (const T *) android_atomic_acquire_load64((volatile int64_t *) &mNext); +#else const T *next = (const T *) android_atomic_acquire_load((volatile int32_t *) &mNext); +#endif if (next != mCurrent) { mAck = next; // no additional barrier needed mCurrent = next; @@ -140,7 +144,11 @@ template<typename T> bool StateQueue<T>::push(StateQueue<T>::block_t block) } // publish +#ifdef __LP64__ + android_atomic_release_store64((int64_t) mMutating, (volatile int64_t *) &mNext); +#else android_atomic_release_store((int32_t) mMutating, (volatile int32_t *) &mNext); +#endif mExpecting = mMutating; // copy with circular wraparound diff --git a/services/audioflinger/Threads.cpp b/services/audioflinger/Threads.cpp index 3d657b3..cac785a 100644 --- a/services/audioflinger/Threads.cpp +++ b/services/audioflinger/Threads.cpp @@ -425,7 +425,7 @@ void AudioFlinger::ThreadBase::dumpBase(int fd, const Vector<String16>& args) result.append(buffer); snprintf(buffer, SIZE, "Sample rate: %u\n", mSampleRate); result.append(buffer); - snprintf(buffer, SIZE, "HAL frame count: %d\n", mFrameCount); + snprintf(buffer, SIZE, "HAL frame count: %zu\n", mFrameCount); result.append(buffer); snprintf(buffer, SIZE, "Channel Count: %u\n", mChannelCount); result.append(buffer); @@ -433,14 +433,14 @@ void AudioFlinger::ThreadBase::dumpBase(int fd, const Vector<String16>& args) result.append(buffer); snprintf(buffer, SIZE, "Format: %d\n", mFormat); result.append(buffer); - snprintf(buffer, SIZE, "Frame size: %u\n", mFrameSize); + snprintf(buffer, SIZE, "Frame size: %zu\n", mFrameSize); result.append(buffer); snprintf(buffer, SIZE, "\nPending setParameters commands: \n"); result.append(buffer); result.append(" Index Command"); for (size_t i = 0; i < mNewParameters.size(); ++i) { - snprintf(buffer, SIZE, "\n %02d ", i); + snprintf(buffer, SIZE, "\n %02zu ", i); result.append(buffer); result.append(mNewParameters[i]); } @@ -466,7 +466,7 @@ void AudioFlinger::ThreadBase::dumpEffectChains(int fd, const Vector<String16>& char buffer[SIZE]; String8 result; - snprintf(buffer, SIZE, "\n- %d Effect Chains:\n", mEffectChains.size()); + snprintf(buffer, SIZE, "\n- %zu Effect Chains:\n", mEffectChains.size()); write(fd, buffer, strlen(buffer)); for (size_t i = 0; i < mEffectChains.size(); ++i) { @@ -1128,7 +1128,7 @@ void AudioFlinger::PlaybackThread::dumpInternals(int fd, const Vector<String16>& snprintf(buffer, SIZE, "\nOutput thread %p internals\n", this); result.append(buffer); - snprintf(buffer, SIZE, "Normal frame count: %d\n", mNormalFrameCount); + snprintf(buffer, SIZE, "Normal frame count: %zu\n", mNormalFrameCount); result.append(buffer); snprintf(buffer, SIZE, "last write occurred (msecs): %llu\n", ns2ms(systemTime() - mLastWriteTime)); @@ -1218,10 +1218,8 @@ sp<AudioFlinger::PlaybackThread::Track> AudioFlinger::PlaybackThread::createTrac // mono or stereo ( (channelMask == AUDIO_CHANNEL_OUT_MONO) || (channelMask == AUDIO_CHANNEL_OUT_STEREO) ) && -#ifndef FAST_TRACKS_AT_NON_NATIVE_SAMPLE_RATE // hardware sample rate (sampleRate == mSampleRate) && -#endif // normal mixer has an associated fast mixer hasFastMixer() && // there are sufficient fast track slots available @@ -1720,7 +1718,7 @@ void AudioFlinger::PlaybackThread::readOutputParameters() } -status_t AudioFlinger::PlaybackThread::getRenderPosition(size_t *halFrames, size_t *dspFrames) +status_t AudioFlinger::PlaybackThread::getRenderPosition(uint32_t *halFrames, uint32_t *dspFrames) { if (halFrames == NULL || dspFrames == NULL) { return BAD_VALUE; @@ -1738,7 +1736,11 @@ status_t AudioFlinger::PlaybackThread::getRenderPosition(size_t *halFrames, size *dspFrames = framesWritten >= latencyFrames ? framesWritten - latencyFrames : 0; return NO_ERROR; } else { - return mOutput->stream->get_render_position(mOutput->stream, dspFrames); + status_t status; + uint32_t frames; + status = mOutput->stream->get_render_position(mOutput->stream, &frames); + *dspFrames = (size_t)frames; + return status; } } @@ -2975,7 +2977,6 @@ AudioFlinger::PlaybackThread::mixer_state AudioFlinger::MixerThread::prepareTrac VolumeProvider *vp = track; fastTrack->mBufferProvider = eabp; fastTrack->mVolumeProvider = vp; - fastTrack->mSampleRate = track->mSampleRate; fastTrack->mChannelMask = track->mChannelMask; fastTrack->mGeneration++; state->mTrackMask |= 1 << j; @@ -3152,9 +3153,9 @@ AudioFlinger::PlaybackThread::mixer_state AudioFlinger::MixerThread::prepareTrac mAudioMixer->setBufferProvider(name, track); mAudioMixer->enable(name); - mAudioMixer->setParameter(name, param, AudioMixer::VOLUME0, (void *)vl); - mAudioMixer->setParameter(name, param, AudioMixer::VOLUME1, (void *)vr); - mAudioMixer->setParameter(name, param, AudioMixer::AUXLEVEL, (void *)va); + mAudioMixer->setParameter(name, param, AudioMixer::VOLUME0, (void *)(uintptr_t)vl); + mAudioMixer->setParameter(name, param, AudioMixer::VOLUME1, (void *)(uintptr_t)vr); + mAudioMixer->setParameter(name, param, AudioMixer::AUXLEVEL, (void *)(uintptr_t)va); mAudioMixer->setParameter( name, AudioMixer::TRACK, @@ -3162,7 +3163,7 @@ AudioFlinger::PlaybackThread::mixer_state AudioFlinger::MixerThread::prepareTrac mAudioMixer->setParameter( name, AudioMixer::TRACK, - AudioMixer::CHANNEL_MASK, (void *)track->channelMask()); + AudioMixer::CHANNEL_MASK, (void *)(uintptr_t)track->channelMask()); // limit track sample rate to 2 x output sample rate, which changes at re-configuration uint32_t maxSampleRate = mSampleRate * 2; uint32_t reqSampleRate = track->mAudioTrackServerProxy->getSampleRate(); @@ -3175,7 +3176,7 @@ AudioFlinger::PlaybackThread::mixer_state AudioFlinger::MixerThread::prepareTrac name, AudioMixer::RESAMPLE, AudioMixer::SAMPLE_RATE, - (void *)reqSampleRate); + (void *)(uintptr_t)reqSampleRate); mAudioMixer->setParameter( name, AudioMixer::TRACK, @@ -4959,9 +4960,9 @@ void AudioFlinger::RecordThread::dumpInternals(int fd, const Vector<String16>& a result.append(buffer); if (mActiveTrack != 0) { - snprintf(buffer, SIZE, "In index: %d\n", mRsmpInIndex); + snprintf(buffer, SIZE, "In index: %zu\n", mRsmpInIndex); result.append(buffer); - snprintf(buffer, SIZE, "Buffer size: %u bytes\n", mBufferSize); + snprintf(buffer, SIZE, "Buffer size: %zu bytes\n", mBufferSize); result.append(buffer); snprintf(buffer, SIZE, "Resampling: %d\n", (mResampler != NULL)); result.append(buffer); diff --git a/services/audioflinger/Threads.h b/services/audioflinger/Threads.h index 207f1eb..a2fb874 100644 --- a/services/audioflinger/Threads.h +++ b/services/audioflinger/Threads.h @@ -446,7 +446,7 @@ public: virtual String8 getParameters(const String8& keys); virtual void audioConfigChanged_l(int event, int param = 0); - status_t getRenderPosition(size_t *halFrames, size_t *dspFrames); + status_t getRenderPosition(uint32_t *halFrames, uint32_t *dspFrames); int16_t *mixBuffer() const { return mMixBuffer; }; virtual void detachAuxEffect_l(int effectId); diff --git a/services/audioflinger/Tracks.cpp b/services/audioflinger/Tracks.cpp index d6b9908..813ec8a 100644 --- a/services/audioflinger/Tracks.cpp +++ b/services/audioflinger/Tracks.cpp @@ -487,8 +487,8 @@ void AudioFlinger::PlaybackThread::Track::dump(char* buffer, size_t size) nowInUnderrun = '?'; break; } - snprintf(&buffer[7], size-7, " %6u %4u %08X %08X %7u %6u %1c %1d %5u %5.2g %5.2g " - "%08X %08X %08X 0x%03X %9u%c\n", + snprintf(&buffer[7], size-7, " %6u %4u %08X %08X %7u %6zu %1c %1d %5u %5.2g %5.2g " + "%08X %p %p 0x%03X %9u%c\n", (mClient == 0) ? getpid_cached : mClient->pid(), mStreamType, mFormat, @@ -501,8 +501,8 @@ void AudioFlinger::PlaybackThread::Track::dump(char* buffer, size_t size) 20.0 * log10((vlr & 0xFFFF) / 4096.0), 20.0 * log10((vlr >> 16) / 4096.0), mCblk->mServer, - (int)mMainBuffer, - (int)mAuxBuffer, + mMainBuffer, + mAuxBuffer, mCblk->mFlags, mAudioTrackServerProxy->getUnderrunFrames(), nowInUnderrun); @@ -1850,7 +1850,7 @@ void AudioFlinger::RecordThread::RecordTrack::invalidate() void AudioFlinger::RecordThread::RecordTrack::dump(char* buffer, size_t size) { - snprintf(buffer, size, "%6u %3u %08X %7u %1d %08X %6u\n", + snprintf(buffer, size, "%6u %3u %08X %7u %1d %08X %6zu\n", (mClient == 0) ? getpid_cached : mClient->pid(), mFormat, mChannelMask, diff --git a/services/camera/libcameraservice/CameraService.cpp b/services/camera/libcameraservice/CameraService.cpp index eeedfc9..87027f7 100644 --- a/services/camera/libcameraservice/CameraService.cpp +++ b/services/camera/libcameraservice/CameraService.cpp @@ -1042,13 +1042,13 @@ void CameraService::BasicClient::opChanged(int32_t op, const String16& packageNa // ---------------------------------------------------------------------------- Mutex* CameraService::Client::getClientLockFromCookie(void* user) { - return gCameraService->getClientLockById((int) user); + return gCameraService->getClientLockById((int)(intptr_t) user); } // Provide client pointer for callbacks. Client lock returned from getClientLockFromCookie should // be acquired for this to be safe CameraService::Client* CameraService::Client::getClientFromCookie(void* user) { - BasicClient *basicClient = gCameraService->getClientByIdUnsafe((int) user); + BasicClient *basicClient = gCameraService->getClientByIdUnsafe((int)(intptr_t) user); // OK: only CameraClient calls this, and they already cast anyway. Client* client = static_cast<Client*>(basicClient); diff --git a/services/camera/libcameraservice/api1/Camera2Client.cpp b/services/camera/libcameraservice/api1/Camera2Client.cpp index b093946..af23557 100644 --- a/services/camera/libcameraservice/api1/Camera2Client.cpp +++ b/services/camera/libcameraservice/api1/Camera2Client.cpp @@ -18,6 +18,7 @@ #define ATRACE_TAG ATRACE_TAG_CAMERA //#define LOG_NDEBUG 0 +#include <inttypes.h> #include <utils/Log.h> #include <utils/Trace.h> @@ -193,7 +194,7 @@ status_t Camera2Client::dump(int fd, const Vector<String16>& args) { result.appendFormat(" GPS lat x long x alt: %f x %f x %f\n", p.gpsCoordinates[0], p.gpsCoordinates[1], p.gpsCoordinates[2]); - result.appendFormat(" GPS timestamp: %lld\n", + result.appendFormat(" GPS timestamp: %" PRId64 "\n", p.gpsTimestamp); result.appendFormat(" GPS processing method: %s\n", p.gpsProcessingMethod.string()); diff --git a/services/camera/libcameraservice/api1/CameraClient.cpp b/services/camera/libcameraservice/api1/CameraClient.cpp index bd6805d..30b7bb8 100644 --- a/services/camera/libcameraservice/api1/CameraClient.cpp +++ b/services/camera/libcameraservice/api1/CameraClient.cpp @@ -85,7 +85,7 @@ status_t CameraClient::initialize(camera_module_t *module) { mHardware->setCallbacks(notifyCallback, dataCallback, dataCallbackTimestamp, - (void *)mCameraId); + (void *)(uintptr_t)mCameraId); // Enable zoom, error, focus, and metadata messages by default enableMsgType(CAMERA_MSG_ERROR | CAMERA_MSG_ZOOM | CAMERA_MSG_FOCUS | diff --git a/services/camera/libcameraservice/api1/client2/ZslProcessor.cpp b/services/camera/libcameraservice/api1/client2/ZslProcessor.cpp index 4207ba9..453d54c 100644 --- a/services/camera/libcameraservice/api1/client2/ZslProcessor.cpp +++ b/services/camera/libcameraservice/api1/client2/ZslProcessor.cpp @@ -540,7 +540,7 @@ void ZslProcessor::dumpZslQueue(int fd) const { if (entry.count > 0) frameAeState = entry.data.u8[0]; } String8 result = - String8::format(" %d: b: %lld\tf: %lld, AE state: %d", i, + String8::format(" %zu: b: %lld\tf: %lld, AE state: %d", i, bufferTimestamp, frameTimestamp, frameAeState); ALOGV("%s", result.string()); if (fd != -1) { diff --git a/services/camera/libcameraservice/api1/client2/ZslProcessor3.cpp b/services/camera/libcameraservice/api1/client2/ZslProcessor3.cpp index 776ebe2..6b4e57a 100644 --- a/services/camera/libcameraservice/api1/client2/ZslProcessor3.cpp +++ b/services/camera/libcameraservice/api1/client2/ZslProcessor3.cpp @@ -355,7 +355,7 @@ void ZslProcessor3::dumpZslQueue(int fd) const { if (entry.count > 0) frameAeState = entry.data.u8[0]; } String8 result = - String8::format(" %d: b: %lld\tf: %lld, AE state: %d", i, + String8::format(" %zu: b: %lld\tf: %lld, AE state: %d", i, bufferTimestamp, frameTimestamp, frameAeState); ALOGV("%s", result.string()); if (fd != -1) { diff --git a/services/camera/libcameraservice/device2/Camera2Device.cpp b/services/camera/libcameraservice/device2/Camera2Device.cpp index 2bc1a8a..dc97c47 100644 --- a/services/camera/libcameraservice/device2/Camera2Device.cpp +++ b/services/camera/libcameraservice/device2/Camera2Device.cpp @@ -25,6 +25,7 @@ #define ALOGVV(...) ((void)0) #endif +#include <inttypes.h> #include <utils/Log.h> #include <utils/Trace.h> #include <utils/Timers.h> @@ -822,7 +823,7 @@ status_t Camera2Device::MetadataQueue::dump(int fd, result.append(" Stream slot: Empty\n"); write(fd, result.string(), result.size()); } else { - result.appendFormat(" Stream slot: %d entries\n", + result.appendFormat(" Stream slot: %zu entries\n", mStreamSlot.size()); int i = 0; for (List<camera_metadata_t*>::iterator r = mStreamSlot.begin(); @@ -837,7 +838,7 @@ status_t Camera2Device::MetadataQueue::dump(int fd, result = " Main queue is empty\n"; write(fd, result.string(), result.size()); } else { - result = String8::format(" Main queue has %d entries:\n", + result = String8::format(" Main queue has %zu entries:\n", mEntries.size()); int i = 0; for (List<camera_metadata_t*>::iterator r = mEntries.begin(); @@ -1214,11 +1215,11 @@ status_t Camera2Device::StreamAdapter::dump(int fd, ATRACE_CALL(); String8 result = String8::format(" Stream %d: %d x %d, format 0x%x\n", mId, mWidth, mHeight, mFormat); - result.appendFormat(" size %d, usage 0x%x, requested format 0x%x\n", + result.appendFormat(" size %zu, usage 0x%x, requested format 0x%x\n", mSize, mUsage, mFormatRequested); result.appendFormat(" total buffers: %d, dequeued buffers: %d\n", mTotalBuffers, mActiveBuffers); - result.appendFormat(" frame count: %d, last timestamp %lld\n", + result.appendFormat(" frame count: %d, last timestamp %" PRId64 "\n", mFrameCount, mLastTimestamp); write(fd, result.string(), result.size()); return OK; diff --git a/services/camera/libcameraservice/device3/Camera3IOStreamBase.cpp b/services/camera/libcameraservice/device3/Camera3IOStreamBase.cpp index da51228..42e02d8 100644 --- a/services/camera/libcameraservice/device3/Camera3IOStreamBase.cpp +++ b/services/camera/libcameraservice/device3/Camera3IOStreamBase.cpp @@ -70,12 +70,12 @@ void Camera3IOStreamBase::dump(int fd, const Vector<String16> &args) const { lines.appendFormat(" Dims: %d x %d, format 0x%x\n", camera3_stream::width, camera3_stream::height, camera3_stream::format); - lines.appendFormat(" Max size: %d\n", mMaxSize); + lines.appendFormat(" Max size: %zu\n", mMaxSize); lines.appendFormat(" Usage: %d, max HAL buffers: %d\n", camera3_stream::usage, camera3_stream::max_buffers); lines.appendFormat(" Frames produced: %d, last timestamp: %lld ns\n", mFrameCount, mLastTimestamp); - lines.appendFormat(" Total buffers: %d, currently dequeued: %d\n", + lines.appendFormat(" Total buffers: %zu, currently dequeued: %zu\n", mTotalBufferCount, mDequeuedBufferCount); write(fd, lines.string(), lines.size()); } diff --git a/services/camera/libcameraservice/device3/Camera3ZslStream.cpp b/services/camera/libcameraservice/device3/Camera3ZslStream.cpp index 04f5dc5..1a54923 100644 --- a/services/camera/libcameraservice/device3/Camera3ZslStream.cpp +++ b/services/camera/libcameraservice/device3/Camera3ZslStream.cpp @@ -271,7 +271,7 @@ void Camera3ZslStream::dump(int fd, const Vector<String16> &args) const { Camera3IOStreamBase::dump(fd, args); lines = String8(); - lines.appendFormat(" Input buffers pending: %d, in flight %d\n", + lines.appendFormat(" Input buffers pending: %zu, in flight %zu\n", mInputBufferQueue.size(), mBuffersInFlight.size()); write(fd, lines.string(), lines.size()); } diff --git a/services/camera/libcameraservice/gui/RingBufferConsumer.cpp b/services/camera/libcameraservice/gui/RingBufferConsumer.cpp index ebc7ea7..9a6dc28 100644 --- a/services/camera/libcameraservice/gui/RingBufferConsumer.cpp +++ b/services/camera/libcameraservice/gui/RingBufferConsumer.cpp @@ -21,11 +21,11 @@ #include <gui/RingBufferConsumer.h> -#define BI_LOGV(x, ...) ALOGV("[%s] "x, mName.string(), ##__VA_ARGS__) -#define BI_LOGD(x, ...) ALOGD("[%s] "x, mName.string(), ##__VA_ARGS__) -#define BI_LOGI(x, ...) ALOGI("[%s] "x, mName.string(), ##__VA_ARGS__) -#define BI_LOGW(x, ...) ALOGW("[%s] "x, mName.string(), ##__VA_ARGS__) -#define BI_LOGE(x, ...) ALOGE("[%s] "x, mName.string(), ##__VA_ARGS__) +#define BI_LOGV(x, ...) ALOGV("[%s] " x, mName.string(), ##__VA_ARGS__) +#define BI_LOGD(x, ...) ALOGD("[%s] " x, mName.string(), ##__VA_ARGS__) +#define BI_LOGI(x, ...) ALOGI("[%s] " x, mName.string(), ##__VA_ARGS__) +#define BI_LOGW(x, ...) ALOGW("[%s] " x, mName.string(), ##__VA_ARGS__) +#define BI_LOGE(x, ...) ALOGE("[%s] " x, mName.string(), ##__VA_ARGS__) #undef assert #define assert(x) ALOG_ASSERT((x), #x) |